|
|
|
@ -0,0 +1,508 @@
|
|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
<html lang="en">
|
|
|
|
|
<head>
|
|
|
|
|
<meta charset="UTF-8">
|
|
|
|
|
<meta http-equiv="Content-Security-Policy" content="default-src * 'self' 'unsafe-inline' 'unsafe-eval' data: gap: content:">
|
|
|
|
|
<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">
|
|
|
|
|
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
|
|
|
|
<meta name="theme-color" content="#2196f3">
|
|
|
|
|
<meta name="format-detection" content="telephone=no">
|
|
|
|
|
<meta name="msapplication-tap-highlight" content="no">
|
|
|
|
|
<title>首页</title>
|
|
|
|
|
<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">
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<f7-view id="app">
|
|
|
|
|
<f7-app :params="f7params">
|
|
|
|
|
<f7-statusbar></f7-statusbar>
|
|
|
|
|
</f7-app>
|
|
|
|
|
<f7-view id="main-view" main class="safe-areas">
|
|
|
|
|
<f7-page>
|
|
|
|
|
<f7-navbar>
|
|
|
|
|
<f7-nav-title>科学技术学院</f7-nav-title>
|
|
|
|
|
</f7-navbar>
|
|
|
|
|
<div class="toolbar tabbar tabbar-labels toolbar-bottom">
|
|
|
|
|
<div class="toolbar-inner">
|
|
|
|
|
<a href="#tab-1" class="tab-link">
|
|
|
|
|
<i class="f7-icons">chat</i>
|
|
|
|
|
<span class="tabbar-label">消息</span>
|
|
|
|
|
</a>
|
|
|
|
|
<a href="#tab-2" class="tab-link tab-link-active">
|
|
|
|
|
<i class="f7-icons">data</i>
|
|
|
|
|
<span class="tabbar-label">智慧教室</span>
|
|
|
|
|
</a>
|
|
|
|
|
<a href="#tab-3" class="tab-link">
|
|
|
|
|
<i class="f7-icons">person</i>
|
|
|
|
|
<span class="tabbar-label">我的</span>
|
|
|
|
|
</a>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="tabs page page-current">
|
|
|
|
|
<div id="tab-1" class="page-content tab">
|
|
|
|
|
<template v-if="message&&message.Data.length">
|
|
|
|
|
<div class="block-title">{{message.DisplayName||message.Name}}</div>
|
|
|
|
|
<div class="list">
|
|
|
|
|
<ul v-if="message.Data.length">
|
|
|
|
|
<template v-for="p in message.Data">
|
|
|
|
|
<li v-if="p.Name!=='hidden'">
|
|
|
|
|
<div class="item-content">
|
|
|
|
|
<div class="item-media"><i class="f7-icons">info</i></div>
|
|
|
|
|
<div class="item-inner">
|
|
|
|
|
<div class="item-title">{{p.Name}}</div>
|
|
|
|
|
<div class="item-after">
|
|
|
|
|
<span class="badge color-blue">
|
|
|
|
|
{{p.Value}}
|
|
|
|
|
</span>
|
|
|
|
|
<span> </span>
|
|
|
|
|
<span class="badge color-blue" v-if="p.Unit">
|
|
|
|
|
{{p.Unit}}
|
|
|
|
|
</span>
|
|
|
|
|
<span> </span>
|
|
|
|
|
<span class="badge color-blue" v-if="p.Description">
|
|
|
|
|
{{p.Description}}
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</li>
|
|
|
|
|
</template>
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="tab-2" class="page-content tab tab-active">
|
|
|
|
|
<div class="list links-list">
|
|
|
|
|
<ul id="nodeList">
|
|
|
|
|
<li v-for="node in model">
|
|
|
|
|
<a class="item-content popup-open node" href="#" data-popup=".node-popup" :data-node-Id="node.Id">
|
|
|
|
|
<div class="item-media"><i class="f7-icons">link</i></div>
|
|
|
|
|
<div class="item-inner">
|
|
|
|
|
<div class="item-title">{{node.Name}}</div>
|
|
|
|
|
<div class="item-after"><span class="badge color-blue">{{node.Devices.length}}</span></div>
|
|
|
|
|
</div>
|
|
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div id="tab-3" class="page-content tab">
|
|
|
|
|
<div class="list links-list">
|
|
|
|
|
<ul>
|
|
|
|
|
<li>
|
|
|
|
|
<div class="item-content">
|
|
|
|
|
<div class="item-inner">
|
|
|
|
|
<div class="item-title">用户名</div>
|
|
|
|
|
<div class="item-after">{{UserName}}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<div class="item-content">
|
|
|
|
|
<div class="item-inner">
|
|
|
|
|
<div class="item-title">昵称</div>
|
|
|
|
|
<div class="item-after">{{NickName}}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<a href="login.html?action=logout" class="external">退出</a>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<a href="#test">test</a>
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</f7-view>
|
|
|
|
|
<div class="popup node-popup popup-tablet-fullscreen">
|
|
|
|
|
<div class="page">
|
|
|
|
|
<div class="navbar">
|
|
|
|
|
<div class="navbar-inner">
|
|
|
|
|
<div class="title">
|
|
|
|
|
<template v-if="node">
|
|
|
|
|
{{node.Name}}
|
|
|
|
|
</template>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="right"><a href="#" class="link" onclick="app.popup.get('.node-popup').close();"><i class="f7-icons">close</i></a></div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="page-content">
|
|
|
|
|
<div class="block-title">场景</div>
|
|
|
|
|
<div class="block" v-if="node">
|
|
|
|
|
<div class="row">
|
|
|
|
|
<div class="col-33 tablet-15 demo-icon" v-for="sence in _.orderBy(node.Sences,['DisplayOrder','Name'])" v-on:click="sendSence(sence.Id)">
|
|
|
|
|
<a href="javascript:;" class="col button button-large button-raised">{{sence.Name}}</a>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="block-title">设备</div>
|
|
|
|
|
<div class="list links-list" v-if="node">
|
|
|
|
|
<ul>
|
|
|
|
|
<li v-for="d in _.orderBy(node.Devices,['DisplayOrder','Name'])">
|
|
|
|
|
<a class="item-content popup-open device" href="#" data-popup=".device-popup" :data-device-id="d.Id">
|
|
|
|
|
<div class="item-media"><i class="f7-icons">link</i></div>
|
|
|
|
|
<div class="item-inner">
|
|
|
|
|
<div class="item-title">{{d.DisplayName||d.Name}}</div>
|
|
|
|
|
<div class="item-after">
|
|
|
|
|
<template v-if="d.Name==='温湿度检测器'">
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"温度")}}</span>
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"湿度")}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='二氧化碳监测器'">
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"二氧化碳")}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='光强检测器'">
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"光照强度")}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='粉尘检测器'">
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"粉尘")}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='烟雾感应器'">
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"状态")}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='红外感应器'">
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"状态")}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='主机'">
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"接收")}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='AP'">
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"连接数")}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='一路可调窗帘'">
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"状态")}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='计量开关'">
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"状态")}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='一路照明开关'">
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"状态")}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='二路灯开关'">
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"L1状态")}}</span>
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"L2状态")}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='三路照明开关'">
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"状态4")}}</span>
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"状态5")}}</span>
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"状态6")}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='墙面插座'">
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"状态")}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='一路插座'">
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"状态")}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='二路插座'">
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"状态")}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='密码门锁'">
|
|
|
|
|
<span class="badge color-blue">{{getDeviceDataValue(d,"状态")}}</span>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='红外转发器'">
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='串口控制器'">
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else-if="d.Name==='摄像头'">
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else>
|
|
|
|
|
<template v-for="p in d.Data">
|
|
|
|
|
<span v-if="p.Name!=='hidden'" class="badge color-blue">
|
|
|
|
|
{{p.Name}}:{{p.Value}}{{p.Unit}}
|
|
|
|
|
</span>
|
|
|
|
|
</template>
|
|
|
|
|
</template>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="popup device-popup popup-tablet-fullscreen">
|
|
|
|
|
<div class="page">
|
|
|
|
|
<div class="navbar">
|
|
|
|
|
<div class="navbar-inner">
|
|
|
|
|
<div class="title">
|
|
|
|
|
<template v-if="device">
|
|
|
|
|
{{device.Name}}
|
|
|
|
|
</template>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="right"><a href="#" class="link" onclick="app.popup.get('.device-popup').close();"><i class="f7-icons">close</i></a></div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="page-content">
|
|
|
|
|
<div class="block-title">属性</div>
|
|
|
|
|
<div class="list" v-if="device">
|
|
|
|
|
<ul v-if="device.Data.length">
|
|
|
|
|
<template v-for="p in device.Data">
|
|
|
|
|
<li v-if="p.Name!=='hidden'">
|
|
|
|
|
<div class="item-content">
|
|
|
|
|
<div class="item-media"><i class="f7-icons">info</i></div>
|
|
|
|
|
<div class="item-inner">
|
|
|
|
|
<div class="item-title">{{p.Name}}</div>
|
|
|
|
|
<div class="item-after">
|
|
|
|
|
<span class="badge color-blue">
|
|
|
|
|
{{p.Value}}
|
|
|
|
|
</span>
|
|
|
|
|
<span> </span>
|
|
|
|
|
<span class="badge color-blue" v-if="p.Unit">
|
|
|
|
|
{{p.Unit}}
|
|
|
|
|
</span>
|
|
|
|
|
<span> </span>
|
|
|
|
|
<span class="badge color-blue" v-if="p.Description">
|
|
|
|
|
{{p.Description}}
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</li>
|
|
|
|
|
</template>
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="block-title">操作</div>
|
|
|
|
|
<div class="list links-list" v-if="device">
|
|
|
|
|
<ul>
|
|
|
|
|
<li v-for="a in _.orderBy(device.Apis,['DisplayOrder','Name'])">
|
|
|
|
|
<a class="item-content" href="#">
|
|
|
|
|
<div class="item-media"><i class="f7-icons">link</i></div>
|
|
|
|
|
<div class="item-inner">
|
|
|
|
|
<div class="item-title">{{a.Name}}</div>
|
|
|
|
|
</div>
|
|
|
|
|
</a>
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<script src="lib/mobile.detect/mobile-detect.min.js"></script>
|
|
|
|
|
<script src="lib/lodash/lodash.min.js"></script>
|
|
|
|
|
<script src="lib/jquery/jquery.min.js"></script>
|
|
|
|
|
<script src="lib/framework7/js/framework7.bundle.min.js"></script>
|
|
|
|
|
<script src="lib/vue/vue.min.js"></script>
|
|
|
|
|
<script src="lib/framework7-vue/framework7-vue.bundle.min.js"></script>
|
|
|
|
|
<script src="lib/signalr/signalr.min.js"></script>
|
|
|
|
|
<script src="lib/dayjs/dayjs.min.js"></script>
|
|
|
|
|
<script src="lib/URI.js/URI.min.js"></script>
|
|
|
|
|
<script src="js/app.js"></script>
|
|
|
|
|
<!--<script>
|
|
|
|
|
function getJsonExt(url) {
|
|
|
|
|
console.log('send:' + url);
|
|
|
|
|
app.dialog.progress();
|
|
|
|
|
$.getJSON(url, function (result) {
|
|
|
|
|
console.log(result);
|
|
|
|
|
app.dialog.close();
|
|
|
|
|
if (result.code === 0) {
|
|
|
|
|
if (result.type === 0) {
|
|
|
|
|
if (result.format === 1) {
|
|
|
|
|
console.log('format/1/base64 jpeg image');
|
|
|
|
|
$('#callback .page-content .block').html('<img class="shot" src="' + result.data + '">');
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
console.log('format/0/json object');
|
|
|
|
|
$('#callback .page-content .block').html(result.data);
|
|
|
|
|
}
|
|
|
|
|
app.popup.open('#callback');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
app.dialog.alert(result.message, "消息", function () {
|
|
|
|
|
setTimeout(function () { app.dialog.close(); }, 3000);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}).fail(function () {
|
|
|
|
|
console.log('error');
|
|
|
|
|
app.dialog.close();
|
|
|
|
|
});;
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
<script>
|
|
|
|
|
var baseUrl = localStorage.getItem('iotServer');
|
|
|
|
|
var wsUrl = baseUrl + "/hub?group=nodes";
|
|
|
|
|
var ajaxUrl = baseUrl + "/Home/GetNodes";
|
|
|
|
|
var $$ = Dom7;
|
|
|
|
|
var username = localStorage.getItem("username");
|
|
|
|
|
var server = localStorage.getItem("server");
|
|
|
|
|
var iotPageIndex = 1;
|
|
|
|
|
function init() {
|
|
|
|
|
Framework7.request.json(ajaxUrl, null, function (response) {
|
|
|
|
|
vm.model = response;
|
|
|
|
|
}, null, 'json');
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
<script>
|
|
|
|
|
const connection = new signalR.HubConnectionBuilder()
|
|
|
|
|
.withUrl(wsUrl)
|
|
|
|
|
.build();
|
|
|
|
|
function connect() {
|
|
|
|
|
if (connection && connection.connection.connectionState === 1) {
|
|
|
|
|
console.log('has connected');
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
console.log('start connect to server:' + Date());
|
|
|
|
|
connection.start().then(function () {
|
|
|
|
|
console.log('signalR>start');
|
|
|
|
|
}).catch(function (err) {
|
|
|
|
|
console.error(err.toString());
|
|
|
|
|
setTimeout(connect, 10 * 1000);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
connection.on("UpdateNode", (message) => {
|
|
|
|
|
var node = JSON.parse(message);
|
|
|
|
|
var oldNode = _.chain(vm.model).filter(o => o.Number === node.Number).first().value();
|
|
|
|
|
oldNode.Name = node.Name;
|
|
|
|
|
console.log('update:' + node.Name);
|
|
|
|
|
});
|
|
|
|
|
connection.on("UpdateDevice", (message) => {
|
|
|
|
|
var device = JSON.parse(message);
|
|
|
|
|
var update = false;
|
|
|
|
|
var node = _.chain(vm.model).filter(o => o.Number === device.Node.Number).first().value();
|
|
|
|
|
for (var i = 0; i < node.Devices.length; i++) {
|
|
|
|
|
if (node.Devices[i].Number == device.Number) {
|
|
|
|
|
update = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (update) {
|
|
|
|
|
node.Devices.splice(i, 1, device);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
node.Devices.push(device);
|
|
|
|
|
}
|
|
|
|
|
console.log('update:' + device.DisplayName);
|
|
|
|
|
vm.message = device;
|
|
|
|
|
});
|
|
|
|
|
connection.on("DeleteDevice", (message) => {
|
|
|
|
|
var number = message;
|
|
|
|
|
for (var i = 0; i < vm.model.length; i++) {
|
|
|
|
|
var node = vm.model[i];
|
|
|
|
|
for (var j = 0; j < node.Devices.length; j++) {
|
|
|
|
|
if (node.Devices[j].Number == number) {
|
|
|
|
|
node.Devices.splice(j, 1);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
console.log('delete:' + number);
|
|
|
|
|
});
|
|
|
|
|
connection.onclose(function () {
|
|
|
|
|
setTimeout(connect, 10 * 1000);
|
|
|
|
|
});
|
|
|
|
|
</script>
|
|
|
|
|
<script>
|
|
|
|
|
var app;
|
|
|
|
|
var vm = new Vue({
|
|
|
|
|
el: '#app',
|
|
|
|
|
data: {
|
|
|
|
|
model: [],
|
|
|
|
|
message: null,
|
|
|
|
|
node: null,
|
|
|
|
|
device: null,
|
|
|
|
|
UserName: localStorage.getItem('username'),
|
|
|
|
|
NickName: localStorage.getItem('nickName')
|
|
|
|
|
},
|
|
|
|
|
mounted: function () {
|
|
|
|
|
console.log('vue>mounted');
|
|
|
|
|
|
|
|
|
|
var os = new MobileDetect(navigator.userAgent).os();
|
|
|
|
|
var theme = os == "AndroidOS" ? "md" : "ios";
|
|
|
|
|
|
|
|
|
|
if (document.location.search.indexOf('theme=') >= 0) {
|
|
|
|
|
theme = document.location.search.split('theme=')[1].split('&')[0];
|
|
|
|
|
}
|
|
|
|
|
app = new Framework7({
|
|
|
|
|
root: '#app',
|
|
|
|
|
theme: theme,
|
|
|
|
|
routes: [
|
|
|
|
|
{
|
|
|
|
|
path: '(.*)',
|
|
|
|
|
async: function (routeTo, routeFrom, resolve, reject) {
|
|
|
|
|
resolve({ url: routeTo.url });
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
on: {
|
|
|
|
|
pageInit: function (page) {
|
|
|
|
|
console.log('f7>page init');
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
var mainView = app.views.create('.view-main', {
|
|
|
|
|
stackPages: true
|
|
|
|
|
});
|
|
|
|
|
init();
|
|
|
|
|
connect();
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
sendSence: function (id) {
|
|
|
|
|
var url = baseUrl + '/Command/Sence/?node=' + this.model.Number + '&id=' + id;
|
|
|
|
|
getJsonExt(url);
|
|
|
|
|
},
|
|
|
|
|
getDeviceDataValue: function (device, dataName) {
|
|
|
|
|
if (device != null) {
|
|
|
|
|
|
|
|
|
|
var data = _.first(_.filter(device.Data, function (o) { return o.Name === dataName }));
|
|
|
|
|
if (data != null) {
|
|
|
|
|
|
|
|
|
|
if (data.Value) {
|
|
|
|
|
var value = data.Value;
|
|
|
|
|
if (data.Unit) {
|
|
|
|
|
value += " " + data.Unit;
|
|
|
|
|
}
|
|
|
|
|
if (data.Description) {
|
|
|
|
|
value += " " + data.Description;
|
|
|
|
|
}
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
console.log('值为空:' + device.Name + '/' + dataName);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
console.log('无法找到:' + device.Name + '/' + dataName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
console.log('无法找到:' + dataName);
|
|
|
|
|
}
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
</script>
|
|
|
|
|
<script>
|
|
|
|
|
$(document).on('click', 'a.popup-open.node', function () {
|
|
|
|
|
var id = $(this).attr('data-node-id');
|
|
|
|
|
vm.node = _.chain(vm.model).filter(function (o) { return o.Id == id; }).first().value();
|
|
|
|
|
});
|
|
|
|
|
$(document).on('click', 'a.popup-open.device', function () {
|
|
|
|
|
var id = $(this).attr('data-device-id');
|
|
|
|
|
vm.device = _.chain(vm.node.Devices).filter(function (o) { return o.Id == id; }).first().value();
|
|
|
|
|
});
|
|
|
|
|
$$('.node-popup').on('popup:open', function (e, popup) {
|
|
|
|
|
console.log('node popup open');
|
|
|
|
|
});
|
|
|
|
|
$$('.node-popup').on('popup:close', function (e, popup) {
|
|
|
|
|
console.log('node popup close');
|
|
|
|
|
});
|
|
|
|
|
$$('.device-popup').on('popup:open', function (e, popup) {
|
|
|
|
|
console.log('device popup open');
|
|
|
|
|
});
|
|
|
|
|
$$('.device-popup').on('popup:close', function (e, popup) {
|
|
|
|
|
console.log('device popup close');
|
|
|
|
|
});
|
|
|
|
|
</script>-->
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|