You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

160 lines
6.9 KiB

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui, viewport-fit=cover">
<meta name="apple-mobile-web-app-capable" content="yes">
<link rel="stylesheet" href="lib/framework7/css/framework7.bundle.min.css">
<link rel="stylesheet" href="css/framework7-icons.css">
<link rel="stylesheet" href="css/app.css">
<style>
</style>
</head>
<body>
<div class="statusbar"></div>
<div id="app">
<f7-app :params="$root.f7params">
<f7-view main>
<f7-col>
<f7-preloader></f7-preloader>
</f7-col>
<f7-page>
<f7-navbar title="节点">
<f7-nav-right>
<f7-link class="searchbar-enable" data-searchbar=".searchbar" icon-ios="f7:search"></f7-link>
</f7-nav-right>
<f7-searchbar class="searchbar-demo"
expandable
search-container=".search-list"
search-in=".item-title"></f7-searchbar>
</f7-navbar>
<f7-list class="searchbar-not-found">
<f7-list-item title="没有匹配的结果"></f7-list-item>
</f7-list>
<f7-list class="search-list searchbar-found">
<li style="width:33.3%;display:inline-block;" v-if="model" v-for="n in model">
<a :href="'node.html?number='+n.Number" class="card external" style="display:block;text-align:center;">
<div class="card-header">
<span class="item-title">{{n.Name}}</span>
<span class="right"><span class="badge color-green">{{n.DeviceCount}}</span></span>
</div>
<img style="margin:0 auto;max-width:64px;" :src="server+'/IoTCenter'+n.Image" />
</a>
</li>
</f7-list>
<f7-toolbar tabbar labels position="bottom">
<a href="index.html" class="tab-link external">
<i class="icon icon f7-icons">house</i>
<span class="tabbar-label">首页</span>
</a>
<a href="nodes.html" class="tab-link external tab-link-active">
<i class="icon f7-icons">circle_grid_hex</i>
<span class="tabbar-label">节点</span>
</a>
<a href="user.html" class="tab-link external">
<i class="icon f7-icons">person</i>
<span class="tabbar-label">我的</span>
</a>
</f7-toolbar>
</f7-page>
</f7-view>
</f7-app>
</div>
<script type="text/javascript" src="lib/signalr/signalr.min.js"></script>
<script type="text/javascript" src="lib/axios/axios.min.js"></script>
<script type="text/javascript" src="lib/jquery/jquery.min.js"></script>
<script type="text/javascript" src="lib/jquery-validation/jquery.validate.min.js"></script>
<script type="text/javascript" src="lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
<script type="text/javascript" src="lib/vue/vue.min.js"></script>
<script type="text/javascript" src="lib/framework7/js/framework7.bundle.min.js"></script>
<script type="text/javascript" src="lib/framework7/js/framework7-vue.bundle.min.js"></script>
<script>
var debug = true;
var wsUrl = localStorage.getItem('server') + '/IoTCenter/hub?group=page';
var connectionId;
const connection = new signalR.HubConnectionBuilder()
.withUrl(wsUrl)
.build();
function connect() {
if (debug) { console.log('start connect to server:' + Date()); }
connection.start().then(function () {
}).catch(function (err) {
console.error(err.toString());
setTimeout(connect, 15 * 1000);
});
}
connection.on('Connected', function (id) {
connectionId = id;
console.log(connectionId);
});
connection.onclose(function (err) {
console.error(err);
setTimeout(connect, 15 * 1000);
});
connection.on("ServerToClient", function (method, json, from) {
console.log(method + ':' + json);
if (method == 'NodeEntityInserted' ||
'NodeEntityUpdated' ||
'NodeEntityDeleted' ||
method == 'DeviceEntityInserted' ||
method == 'DeviceEntityDeleted') {
vm.load();
}
});
</script>
<script type="text/javascript">
Framework7.use(Framework7Vue);
var app;
var vm = new Vue({
el: '#app',
data() {
return {
f7params: {
routes: [],
name: 'My App',
id: 'com.myapp.test',
theme: 'ios',
},
server: localStorage.getItem('server'),
token: localStorage.getItem('token'),
model: null
};
},
mounted() {
if (!this.server) {
location.href = "config.html";
}
if (!this.token) {
location.href = "login.html";
}
this.$f7ready((f7) => {
app = this.$f7;
app.preloader.show();
});
this.load();
connect();
},
methods: {
load: function () {
var url = this.server + '/IoTCenter/App/GetNodes';
var data = new FormData();
data.append('token', this.token);
axios.post(url, data)
.then(function (response) {
console.log(response);
var data = response.data;
vm.model = data;
})
.catch(function (error) {
app.dialog.alert(error, '警告', function () { })
})
.then(function () {
app.preloader.hide();
});
}
}
})
</script>
</body>
</html>