Former-commit-id: 0fc8711be1258adb4df94887e819490dca57c19a
Former-commit-id: bf05f62a0c86c42e28a15b46be454203219cc32a
1.0
wanggang 4 years ago
parent c151cd9c80
commit 7e2728a2fa

@ -8,7 +8,7 @@ namespace IoT.Shared.Application.Models
[IoTDataConfig( IoTDataType.Info,IoTValueType.Int,hide:true)]
[Display(Name = "设备分类")]
DeviceId,
[IoTDataConfig(valueType: IoTValueType.Array)]
[IoTDataConfig(IoTDataType.Info,valueType: IoTValueType.Array)]
[Display(Name = "指令")]
Buttons,
[IoTDataConfig(IoTDataType.Info)]
@ -149,10 +149,10 @@ namespace IoT.Shared.Application.Models
[IoTDataConfig(valueType: IoTValueType.Int, unit: "μg/m³")]
[Display(Name = "PM1.0")]
PM10,
[IoTDataConfig(valueType: IoTValueType.Double)]
[IoTDataConfig(IoTDataType.Info,IoTValueType.Double)]
[Display(Name = "电量")]
Battery,
[IoTDataConfig(valueType: IoTValueType.Int, enumValues: "正常,欠压")]
[IoTDataConfig(IoTDataType.Info,valueType: IoTValueType.Int, enumValues: "正常,欠压")]
[Display(Name = "电压低")]
LowVoltage,
[Display(Name = "状态")]

@ -46,6 +46,7 @@ namespace Platform.Api.Api
.WhereIf(model.BuildingId.HasValue, o => o.IoTGateway.BuildingId == model.BuildingId.Value)
.WhereIf(model.CategoryId.HasValue, o => o.IoTProduct.IoTProductCategoryId == model.CategoryId.Value)
.WhereIf(!string.IsNullOrWhiteSpace(model.Name), o => o.Name.Contains(model.Name) || o.DisplayName.Contains(model.Name))
.Include(o=>o.Data)
.Include(o => o.IoTProduct.IoTProductCategory)
.Include(o => o.IoTGateway.Building);
model.TotalCount = query.Count();

@ -164,7 +164,6 @@
<script src="~/lib/admin-lte/js/adminlte.min.js"></script>
<script src="~/lib/pubsub-js/pubsub.min.js"></script>
<script src="~/lib/axios/axios.min.js"></script>
<script src="~/lib/qs/qs.min.js"></script>
<script src="~/lib/signalr/signalr.min.js"></script>
<script src="~/lib/vue/vue.min.js"></script>
<script src="~/lib/vue3-sfc-loader/dist/vue2-sfc-loader.js"></script>

@ -51,11 +51,6 @@
"destination": "wwwroot/lib/axios/",
"files": [ "axios.min.js" ]
},
{
"library": "qs@6.9.4",
"destination": "wwwroot/lib/qs",
"files": [ "qs.min.js" ]
},
{
"library": "lodash.js@4.17.15",
"destination": "wwwroot/lib/lodash/",

@ -1,13 +1,32 @@
<template>
<views-shared-layout>
<div class="card" v-if="model">
<div class="card-header">设备</div>
<div class="card-body">
<div class="row">
<component :device="model" :is="'devices-'+model.ioTProduct.template"></component>
<template v-if="model">
<div class="card">
<div class="card-header">设备</div>
<div class="card-body">
<div class="row">
<component :device="model" :is="'devices-'+model.ioTProduct.template"></component>
</div>
</div>
</div>
</div>
<div v-for="data in getData()">
<div class="col-md-12">
<div class="card">
<div class="card-header">
<h3 class="card-title">{{ getName(data) }}</h3>
<ul role="tablist" class="nav nav-tabs card-tools">
<li class="nav-item"><a href="javascript:;" data-toggle="tab" class="nav-link active" @click="tabClick($event,data.key,'1d',data.name)">1</a></li>
<li class="nav-item"><a href="javascript:;" data-toggle="tab" class="nav-link" @click="tabClick($event,data.key,'7d',data.name)">1</a></li>
<li class="nav-item"><a href="javascript:;" data-toggle="tab" class="nav-link" @click="tabClick($event,data.key,'30d',data.name)">30</a></li>
</ul>
</div>
<div class="card-body">
<canvas class="chart" style="width:60%;max-width:100%;" :id="model.number+'-'+data.key"></canvas>
</div>
</div>
</div>
</div>
</template>
</views-shared-layout>
</template>
<script>
@ -16,6 +35,7 @@
return {
title: '设备中心',
url: config.service('platform/api/v1/Device/GetDevice?id=' + this.$route.query.id),
time: '1d',
model: null
}
},
@ -27,33 +47,95 @@
PubSub.unsubscribes(this.events);
},
methods: {
load:function() {
load: function () {
var vm = this;
axios.post(this.url).then(function (response) {
vm.model = response.data;
vm.$nextTick(function () {
vm.updateChart();
});
});
},
subscribe:function() {
subscribe: function () {
var vm = this;
PubSub.subscribes(this.events, function (method, data) {
parent.load();
vm.load();
});
},
getBuildingName: function (device) {
if (device.ioTGateway.building) {
return device.ioTGateway.building.name;
getName: function (data) {
if (data.unit) {
return data.name + data.unit;
}
return data.name;
},
getData: function () {
return Enumerable.from(this.model.data).where(o => o.dataType === 20).toArray();
},
updateChart: function () {
var dataList = this.getData();
for (var i = 0; i < dataList.length; i++) {
this.changeTime(dataList[i].key, this.time, dataList[i].name);
}
},
tabClick: function (event, key, time, title) {
this.time = time;
this.changeTime(key, time, title);
var link = $(event.currentTarget);
if (!link.hasClass('active')) {
link.parent().siblings().find('a.active').removeClass('active');
link.addClass('active');
}
return '';
},
getCategoryName: function (device) {
if (device.ioTProduct.ioTProductCategory) {
return device.ioTProduct.ioTProductCategory.name;
changeTime: function (key, time, title) {
var vm = this;
var url = config.service('platform/api/v1/Device/GetChartData');
var data = {
number: this.model.number,
key: key,
time: time
};
axios.post(url, data, { crossDomain: true }).then(function (response) {
var data = response.data;
vm.UpdateChartInternal(key, data, title);
})
.catch(function (error) {
console.log(error);
});
},
UpdateChartInternal(key, data, title) {
var canvas = document.getElementById(this.model.number + '-' + key);
var chart;
Chart.helpers.each(Chart.instances, function (instance) {
if (instance.chart.canvas.id === canvas.id) {
chart = instance;
}
});
if (chart) {
chart.data = data;
chart.update();
}
else {
var ctx = canvas.getContext('2d');
var options = {
responsive: true,
legend: {
position: 'bottom'
},
title: {
display: false,
text: title
},
animation: {
duration: 0
}
};
chart = new Chart(ctx, {
type: 'line',
data: data,
options: options
});
}
return '';
}
},
beforeDestroy: function () {
unsubscribe();
}
}
</script>

@ -124,9 +124,6 @@
}
return '';
}
},
beforeDestroy: function () {
unsubscribe();
}
}
</script>

@ -112,8 +112,6 @@
}
},
mounted: function () {
console.log(this.$store.state.version);
var vm = this;
axios.post(this.url).then(function (response) {
store.set('layout', response.data);
}).catch(function (error) {

@ -49,9 +49,8 @@
<script src="lib/admin-lte/js/adminlte.min.js"></script>
<script src="lib/pubsub-js/pubsub.min.js"></script>
<script src="lib/axios/axios.min.js"></script>
<script src="lib/qs/qs.min.js"></script>
<script src="lib/signalr/signalr.min.js"></script>
<script src="lib/vue/vue.min.js"></script>
<script src="lib/vue/vue.js"></script>
<script src="lib/vue3-sfc-loader/dist/vue2-sfc-loader.js"></script>
<script src="lib/vue-router/vue-router.min.js"></script>
<script src="lib/vuex/vuex.min.js"></script>

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save