.
20
App.vue
@ -1,11 +1,13 @@
|
|||||||
<script>
|
<script>
|
||||||
import indexUtil from "@/utils/indexUtil.js"
|
import indexUtil from "@/utils/indexUtil.js"
|
||||||
|
import dc from "@/utils/deviceUtil/dc.js"
|
||||||
import mqttUtil from "@/utils/mqttUtil.js"
|
import mqttUtil from "@/utils/mqttUtil.js"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
indexData: new indexUtil(), //全局地块列表管理
|
indexData: new indexUtil(this.deviceChange), //全局地块列表管理
|
||||||
|
dc: new dc(),
|
||||||
mqtt: null,
|
mqtt: null,
|
||||||
mqttObj: {
|
mqttObj: {
|
||||||
topics: []
|
topics: []
|
||||||
@ -36,6 +38,22 @@
|
|||||||
console.log('App Hide')
|
console.log('App Hide')
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
deviceChange(e) {
|
||||||
|
console.error("deviceChange:", e);
|
||||||
|
if (e == this.indexData.eventType.land) {
|
||||||
|
console.error("地块更新通知")
|
||||||
|
// this.indexData.getNewDeviceList();
|
||||||
|
}
|
||||||
|
if (e == this.indexData.eventType.device) {
|
||||||
|
console.error("设备更新通知")
|
||||||
|
console.error("dexice:", this.indexData.device)
|
||||||
|
this.dc.setStations(this.indexData.device.stations);
|
||||||
|
this.dc.setFlapValves(this.indexData.device.flapValves);
|
||||||
|
this.dc.setValves(this.indexData.selectItem.id, this.indexData.device.waterOutlets);
|
||||||
|
|
||||||
|
console.error("this.dc:",this.dc)
|
||||||
|
}
|
||||||
|
},
|
||||||
setTime: function() {
|
setTime: function() {
|
||||||
console.error(this.globalData.num);
|
console.error(this.globalData.num);
|
||||||
// setTimeout(() => {
|
// setTimeout(() => {
|
||||||
|
@ -15,3 +15,12 @@ export function getManagerGroundList(userID) {
|
|||||||
method: "get"
|
method: "get"
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//查询设备列表
|
||||||
|
export function getDeviceList(data) {
|
||||||
|
return request({
|
||||||
|
url: "/device/control/app/listNew2",
|
||||||
|
method: "get",
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
@ -89,7 +89,8 @@
|
|||||||
if (item.id != oldItem.id) {
|
if (item.id != oldItem.id) {
|
||||||
this.indexData.setStorage(2, item);
|
this.indexData.setStorage(2, item);
|
||||||
this.$emit("select", item);
|
this.$emit("select", item);
|
||||||
uni.$emit("notify-updates-land");
|
this.indexData.onEventHandler(this.indexData.eventType.land);
|
||||||
|
uni.$emit("notify-update-land");
|
||||||
}
|
}
|
||||||
this.close();
|
this.close();
|
||||||
},
|
},
|
||||||
|
188
pages/index.vue
@ -4,7 +4,7 @@
|
|||||||
<block v-slot:left>
|
<block v-slot:left>
|
||||||
<view @click="openLand">地块</view>
|
<view @click="openLand">地块</view>
|
||||||
</block>
|
</block>
|
||||||
<view>田间</view>
|
<view>{{ indexData.selectItem ? indexData.selectItem.name:"田间" }}</view>
|
||||||
<block v-slot:right>
|
<block v-slot:right>
|
||||||
<view class="fixed">
|
<view class="fixed">
|
||||||
<view align="right" class="icon iconfont icon-liebiao" @click="toList"></view>
|
<view align="right" class="icon iconfont icon-liebiao" @click="toList"></view>
|
||||||
@ -108,62 +108,32 @@
|
|||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<view class="u-collapse-content">
|
<view class="u-collapse-content">
|
||||||
<u-row>
|
<u-row v-for="item in dc.stations">
|
||||||
<u-col span="3">
|
<u-col span="3">
|
||||||
<view class="fixed">
|
<view class="fixed">
|
||||||
<text class="font-red">●</text>
|
<text :class="[item.online ? 'font-green':'font-red']">●</text>
|
||||||
<view>E0000104</view>
|
<view>{{ item.deviceCode }}</view>
|
||||||
</view>
|
</view>
|
||||||
</u-col>
|
</u-col>
|
||||||
<u-col span="4" style="align-items: center;">
|
<u-col span="4" style="align-items: center;">
|
||||||
<view class="fixed">
|
<view class="fixed">
|
||||||
<view class="signal">
|
<!-- <view class="signal" v-if="item.signalValue > 110"> -->
|
||||||
<view class="bar"></view>
|
<view class="signal" v-if="item.signalValue > 0">
|
||||||
<view class="bar"></view>
|
<view v-for="(_,i) in 4"
|
||||||
<view class="bar"></view>
|
:class="['bar',item.signalValue > (8 * i) ? 'green':'']"></view>
|
||||||
<view class="bar"></view>
|
<view :class="['bar',item.signalValue > 30 ? 'green':'']"></view>
|
||||||
<view class="bar"></view>
|
</view>
|
||||||
|
<view class="signal" v-else>
|
||||||
|
<view class="bar" v-for="i in 5"></view>
|
||||||
<view class="bar-no">
|
<view class="bar-no">
|
||||||
<u-icon name="close"></u-icon>
|
<u-icon name="close"></u-icon>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<text>(12)</text>
|
<text>({{ item.signalValue }})</text>
|
||||||
<view class="battery-container">
|
<view class="battery-container">
|
||||||
<text>{{ 10 }}</text>
|
<text>{{ item.currentBatteryCapacity }} </text>
|
||||||
<view class="battery-level" :style="[`width:${10}%`]" />
|
<view class="battery-level"
|
||||||
</view>
|
:style="[`width:${item.currentBatteryCapacity}%`]" />
|
||||||
</view>
|
|
||||||
</u-col>
|
|
||||||
<u-col span="5">
|
|
||||||
<view class="fixed">
|
|
||||||
<u-button type="success" size="mini" text="手持基站"></u-button>
|
|
||||||
<u-button type="success" size="mini" text="刷新" icon="reload"></u-button>
|
|
||||||
</view>
|
|
||||||
</u-col>
|
|
||||||
</u-row>
|
|
||||||
<u-row>
|
|
||||||
<u-col span="3">
|
|
||||||
<view class="fixed">
|
|
||||||
<text class="font-green">●</text>
|
|
||||||
<view>E0000104</view>
|
|
||||||
</view>
|
|
||||||
</u-col>
|
|
||||||
<u-col span="4" style="align-items: center;">
|
|
||||||
<view class="fixed">
|
|
||||||
<view class="signal">
|
|
||||||
<view class="bar green"></view>
|
|
||||||
<view class="bar green"></view>
|
|
||||||
<view class="bar green"></view>
|
|
||||||
<view class="bar green"></view>
|
|
||||||
<view class="bar"></view>
|
|
||||||
<view class="bar-no" style="display: none;">
|
|
||||||
<u-icon name="close"></u-icon>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
<text>(12)</text>
|
|
||||||
<view class="battery-container">
|
|
||||||
<text>{{ 60 }}</text>
|
|
||||||
<view class="battery-level" :style="[`width:${60}%`]" />
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</u-col>
|
</u-col>
|
||||||
@ -176,28 +146,28 @@
|
|||||||
</u-row>
|
</u-row>
|
||||||
</view>
|
</view>
|
||||||
</u-collapse-item>
|
</u-collapse-item>
|
||||||
|
|
||||||
</u-collapse>
|
</u-collapse>
|
||||||
</view>
|
</view>
|
||||||
<!-- 阀门列表 -->
|
<!-- 阀门列表 -->
|
||||||
<view class="card">
|
<view class="card">
|
||||||
<u-collapse accordion>
|
<u-collapse accordion>
|
||||||
<u-collapse-item>
|
<u-collapse-item v-for="item in dc.valves">
|
||||||
<template #title>
|
<template #title>
|
||||||
<view class="sf-title fixed">
|
<view class="sf-title fixed">
|
||||||
<view class="iconfont icon-diefa icon"></view>
|
<view class="iconfont icon-diefa icon"></view>
|
||||||
<view class="text">A1</view>
|
<view class="text">{{ item.rowKey }}</view>
|
||||||
<view style="margin:0 10px;">出水口数量</view>
|
<view style="margin:0 10px;">出水口数量</view>
|
||||||
<u-badge numberType="overflow" type="info" max="999" value="155"></u-badge>
|
<u-badge numberType="overflow" type="info" max="999"
|
||||||
|
:value="item.children.length || 0" />
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<view class="u-collapse-content">
|
<view class="u-collapse-content">
|
||||||
<!-- 蝶阀 -->
|
<!-- 蝶阀 -->
|
||||||
<u-row>
|
<u-row v-if="item.deviceId">
|
||||||
<u-col span="4">
|
<u-col span="4">
|
||||||
<view class="fixed">
|
<view class="fixed">
|
||||||
<view>A1</view>
|
<text class="font-green">●</text>
|
||||||
<text class="font-green">●在线</text>
|
<view>{{ item.rowKey }}</view>
|
||||||
</view>
|
</view>
|
||||||
</u-col>
|
</u-col>
|
||||||
<u-col span="5">
|
<u-col span="5">
|
||||||
@ -213,21 +183,23 @@
|
|||||||
</u-col>
|
</u-col>
|
||||||
</u-row>
|
</u-row>
|
||||||
<!-- 阀门 -->
|
<!-- 阀门 -->
|
||||||
<view class="card-grey">
|
<view v-for="item2 in item.children">
|
||||||
|
<view v-if="item2.deviceId" class="card-grey">
|
||||||
<view class="card-title">
|
<view class="card-title">
|
||||||
<u-row>
|
<u-row>
|
||||||
<u-col span="2">
|
<u-col span="2">
|
||||||
<view><text class="font-green">●</text>1-1</view>
|
<view><text class="font-green">●</text>{{ item2.rowKey }}</view>
|
||||||
</u-col>
|
</u-col>
|
||||||
<u-col span="5">
|
<u-col span="5">
|
||||||
<view class="fixed">
|
<view class="fixed">
|
||||||
<view class="battery-container">
|
<view class="battery-container">
|
||||||
<text>60</text>
|
<text>{{ item2.device.custom.battery.value }}</text>
|
||||||
<view class="battery-level battery-level-60">
|
<view class="battery-level"
|
||||||
</view>
|
:style="[`width:${item2.device.custom.battery.value}%`]" />
|
||||||
</view>
|
</view>
|
||||||
<view>
|
<view>
|
||||||
<view class="iconfont icon-wendu icon"></view>26.2
|
<view class="iconfont icon-wendu icon" />
|
||||||
|
{{ item2.device.custom.t }}
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</u-col>
|
</u-col>
|
||||||
@ -240,13 +212,15 @@
|
|||||||
</u-row>
|
</u-row>
|
||||||
</view>
|
</view>
|
||||||
<view class="control">
|
<view class="control">
|
||||||
<u-row>
|
<u-row
|
||||||
<u-col span="3" style=" align-items: flex-end;" @click="angleSliderShow">
|
v-if="item2.device.deviceTypeId == 2 || item2.device.deviceTypeId == 3">
|
||||||
|
<u-col span="3" style=" align-items: flex-end;"
|
||||||
|
@click="angleSliderShow">
|
||||||
<view class="buttons">
|
<view class="buttons">
|
||||||
<view class="btn fixed active">
|
<view class="btn fixed active">
|
||||||
<text>①</text>
|
<text>①</text>
|
||||||
<text>0.00</text>
|
<text>(999)</text>
|
||||||
<view class="iconfont icon-suoding icon"></view>
|
<!-- <view class="iconfont icon-suoding icon"></view> -->
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<u-line-progress height="8" :showText="false" :percentage="60"
|
<u-line-progress height="8" :showText="false" :percentage="60"
|
||||||
@ -263,15 +237,14 @@
|
|||||||
</view>
|
</view>
|
||||||
<view class="btn-img">
|
<view class="btn-img">
|
||||||
<view class="text">
|
<view class="text">
|
||||||
<view class="left">-99.63</view>
|
<view class="left">{{ item2.device.custom.p1 }}</view>
|
||||||
<view class="top">-99.63</view>
|
<view class="top"></view>
|
||||||
<view class="middle">离线</view>
|
<view class="middle"
|
||||||
<view class="right">-99.63</view>
|
v-show="!item2.device.custom.online">离线</view>
|
||||||
<view class="bottom">-99.63</view>
|
<view class="right">{{ item2.device.custom.p2 }}</view>
|
||||||
|
<view class="bottom"></view>
|
||||||
</view>
|
</view>
|
||||||
<image src="../static/images/valves/valve3-all.gif"
|
<image :src="item2.device.custom.showImg" mode="widthFix" />
|
||||||
mode="widthFix">
|
|
||||||
</image>
|
|
||||||
</view>
|
</view>
|
||||||
<view>
|
<view>
|
||||||
<view class="btn fixed">
|
<view class="btn fixed">
|
||||||
@ -284,6 +257,54 @@
|
|||||||
<view class="buttons">
|
<view class="buttons">
|
||||||
<view class="btn fixed">
|
<view class="btn fixed">
|
||||||
<text>④</text>
|
<text>④</text>
|
||||||
|
<text>(超时)</text>
|
||||||
|
<!-- <view class="iconfont icon-suoding icon"></view> -->
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</u-col>
|
||||||
|
</u-row>
|
||||||
|
<u-row v-if="item2.device.deviceTypeId == 13">
|
||||||
|
<u-col span="3" style=" align-items: flex-end;">
|
||||||
|
<view class="buttons">
|
||||||
|
<view class="btn fixed active">
|
||||||
|
<text>①</text>
|
||||||
|
<text>0.00</text>
|
||||||
|
<view class="iconfont icon-suoding icon"></view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</u-col>
|
||||||
|
<u-col span="6">
|
||||||
|
<view class="valve">
|
||||||
|
<view>
|
||||||
|
<view class="btn fixed">
|
||||||
|
<text>②</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="btn-img">
|
||||||
|
<view class="text5">
|
||||||
|
<view class="left">{{ item2.device.custom.p[0] }}</view>
|
||||||
|
<view class="top">{{ item2.device.custom.p[1] }}</view>
|
||||||
|
<view class="middle"
|
||||||
|
v-show="!item2.device.custom.online">离线</view>
|
||||||
|
<view class="right">{{ item2.device.custom.p[2] }}
|
||||||
|
</view>
|
||||||
|
<view class="bottom">{{ item2.device.custom.p[3] }}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<image :src="item2.device.custom.showImg" mode="widthFix" />
|
||||||
|
</view>
|
||||||
|
<view>
|
||||||
|
<view class="btn fixed">
|
||||||
|
<text>④</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</u-col>
|
||||||
|
<u-col span="3">
|
||||||
|
<view class="buttons">
|
||||||
|
<view class="btn fixed">
|
||||||
|
<text>③</text>
|
||||||
<text>0.00</text>
|
<text>0.00</text>
|
||||||
<view class="iconfont icon-suoding icon"></view>
|
<view class="iconfont icon-suoding icon"></view>
|
||||||
</view>
|
</view>
|
||||||
@ -295,6 +316,10 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
<view v-else class="card-grey">
|
||||||
|
{{ item2.rowKey }}
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
<view class="card-grey">
|
<view class="card-grey">
|
||||||
<view class="card-title">
|
<view class="card-title">
|
||||||
<u-row>
|
<u-row>
|
||||||
@ -372,6 +397,7 @@
|
|||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</u-collapse-item>
|
</u-collapse-item>
|
||||||
</u-collapse>
|
</u-collapse>
|
||||||
</view>
|
</view>
|
||||||
@ -394,20 +420,22 @@
|
|||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
isSticky: false,
|
isSticky: false, //吸顶状态
|
||||||
show: false,
|
|
||||||
landList: [1, 2, 3],
|
|
||||||
value: false,
|
value: false,
|
||||||
sliderValue: 1,
|
indexData: getApp().indexData,
|
||||||
landDataChange: true,
|
dc: getApp().dc,
|
||||||
|
// show: false,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onLoad() {
|
onLoad() {
|
||||||
|
console.error("onLoad")
|
||||||
// uni.$emit("mqtt-link");
|
// uni.$emit("mqtt-link");
|
||||||
uni.$off("notify-updates-land");
|
|
||||||
uni.$on("notify-updates-land", () => {
|
uni.$off("notify-update-land");
|
||||||
console.error("更新数据")
|
uni.$on("notify-update-land", () => {
|
||||||
this.landDataChange = true;
|
console.error("index监听地块更新")
|
||||||
|
// this.landDataChange = true;
|
||||||
|
getApp().indexData.getNewDeviceList();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onShow() {
|
onShow() {
|
||||||
|
BIN
static/images/valves/3/valve3.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
static/images/valves/3/valve3_1.gif
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
static/images/valves/3/valve3_2.gif
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
static/images/valves/3/valve3_all.gif
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
static/images/valves/3/valve3_run.gif
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
static/images/valves/5/valve5.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
static/images/valves/5/valve5_1.gif
Normal file
After Width: | Height: | Size: 6.0 KiB |
BIN
static/images/valves/5/valve5_2.gif
Normal file
After Width: | Height: | Size: 9.7 KiB |
BIN
static/images/valves/5/valve5_3.gif
Normal file
After Width: | Height: | Size: 6.0 KiB |
BIN
static/images/valves/5/valve5_4.gif
Normal file
After Width: | Height: | Size: 9.8 KiB |
BIN
static/images/valves/5/valve5_all.gif
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
static/images/valves/5/valve5_run.gif
Normal file
After Width: | Height: | Size: 23 KiB |
@ -10,5 +10,6 @@ const constant = {
|
|||||||
rememberPassword: "rememberPassword",
|
rememberPassword: "rememberPassword",
|
||||||
lands: "custom_lands",
|
lands: "custom_lands",
|
||||||
landItem: "custom_landItem",
|
landItem: "custom_landItem",
|
||||||
|
device: "custom_device",
|
||||||
}
|
}
|
||||||
export default constant
|
export default constant
|
1260
utils/deviceUtil/dc.js
Normal file
105
utils/deviceUtil/js/baseStation.js
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
import { getYMDHMS } from "@/utils/deviceUtil/js/common.js"
|
||||||
|
|
||||||
|
// 服务商
|
||||||
|
function facilitator(variate) {
|
||||||
|
if (variate) {
|
||||||
|
if (variate.value === "1") {
|
||||||
|
return "移动"
|
||||||
|
} else if (variate.value === "2") {
|
||||||
|
return "电信"
|
||||||
|
} else if (variate.value === "3") {
|
||||||
|
return "联通"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return "未知"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 鼠标划过要显示的文字
|
||||||
|
function handleHoverShowText(object, code) {
|
||||||
|
if (object && object.items) {
|
||||||
|
let { cs, ns, ls } = object.items
|
||||||
|
let { b, bb, cc, g, l, mcu, ps, t } = object.items.adcProperty
|
||||||
|
return [
|
||||||
|
// ["基站编码:", code],
|
||||||
|
["充电状态:", cs.value],
|
||||||
|
["433环境噪声:", ls.value],
|
||||||
|
["4G信号强度(%):", ns.value],
|
||||||
|
["电池ADC(V):", b],
|
||||||
|
["电池ADC(%):", Number(bb) > 100 ? 100 : bb],
|
||||||
|
["433ADC(V):", l],
|
||||||
|
["MCUADC(V) :", mcu],
|
||||||
|
["4G供电ADC(V):", g],
|
||||||
|
["MCU温度ADC(℃):", t],
|
||||||
|
["充电电流ADC(mA):", cc],
|
||||||
|
["充电电压ADC(V):", ps],
|
||||||
|
["数据上报时间:", getYMDHMS(object.time)]
|
||||||
|
]
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理单条数据
|
||||||
|
export function alone(obj, state) {
|
||||||
|
let { status, deviceName, iotId, privateSeal, deviceTypeId, rolaFrequency } = obj
|
||||||
|
let { ns, to, cs, adcProperty } = obj.items
|
||||||
|
return {
|
||||||
|
online: status !== "" ? status === "online" : state,
|
||||||
|
signalValue: ns ? Number(ns.value) : 0,
|
||||||
|
facilitator: facilitator(to),
|
||||||
|
deviceCode: deviceName,
|
||||||
|
chargedState: cs ? cs.value === "1" : false,
|
||||||
|
currentBatteryCapacity: adcProperty ? (parseInt(adcProperty.bb) > 100 ? 100 : parseInt(adcProperty.bb)) : 0,
|
||||||
|
iotId: iotId,
|
||||||
|
privateSeal,
|
||||||
|
deviceTypeId,
|
||||||
|
rolaFrequency,
|
||||||
|
text: handleHoverShowText(obj, deviceName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function presentStationData(arr) {
|
||||||
|
let newArray = []
|
||||||
|
for (let i = 0; i < arr.length; i++) {
|
||||||
|
let { status, deviceCode, privateSeal, deviceTypeId, rolaFrequency,deviceVer,softVer,id } = arr[i]
|
||||||
|
|
||||||
|
if (arr[i].data && arr[i].data.items) {
|
||||||
|
let { ns, to, cs, adcProperty } = arr[i].data.items
|
||||||
|
newArray.push({
|
||||||
|
online: status === "online",
|
||||||
|
signalValue: ns ? Number(ns.value) : 0,
|
||||||
|
facilitator: facilitator(to),
|
||||||
|
deviceCode: deviceCode,
|
||||||
|
chargedState: cs ? cs.value === "1" : false,
|
||||||
|
currentBatteryCapacity: adcProperty ? (parseInt(adcProperty.bb) > 100 ? 100 : parseInt(adcProperty.bb)) : 0,
|
||||||
|
iotId: arr[i].iotId,
|
||||||
|
privateSeal,
|
||||||
|
deviceTypeId,
|
||||||
|
rolaFrequency,
|
||||||
|
deviceVer,
|
||||||
|
softVer,
|
||||||
|
id,
|
||||||
|
text: handleHoverShowText(arr[i].data, deviceCode)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
newArray.push({
|
||||||
|
online: status === "online",
|
||||||
|
signalValue: 0,
|
||||||
|
facilitator: "未知",
|
||||||
|
deviceCode: deviceCode,
|
||||||
|
chargedState: false,
|
||||||
|
currentBatteryCapacity: 0,
|
||||||
|
iotId: arr[i].iotId,
|
||||||
|
privateSeal,
|
||||||
|
deviceTypeId,
|
||||||
|
rolaFrequency,
|
||||||
|
deviceVer,
|
||||||
|
softVer,
|
||||||
|
id,
|
||||||
|
text: handleHoverShowText(arr[i].data, deviceCode)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newArray
|
||||||
|
}
|
138
utils/deviceUtil/js/common.js
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
import store from "@/store"
|
||||||
|
|
||||||
|
// 是否拥有管理员角色权限
|
||||||
|
export function hasRole() {
|
||||||
|
const roleFlag = ["admin", "sysAdmin"] // 管理员的角色字符
|
||||||
|
|
||||||
|
const roles = store.getters && store.getters.roles
|
||||||
|
console.log(roles)
|
||||||
|
const isHasRole = roles.some(role => {
|
||||||
|
return roleFlag.includes(role)
|
||||||
|
})
|
||||||
|
return isHasRole
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将报警类型转换为汉字
|
||||||
|
export function convertToKanji(row) {
|
||||||
|
if (row.data && row.data.items && row.data.items.wt) {
|
||||||
|
let {
|
||||||
|
wt
|
||||||
|
} = row.data.items
|
||||||
|
wt = Number(wt.value)
|
||||||
|
if (wt === 0) {
|
||||||
|
return "无"
|
||||||
|
} else if (wt === 1) {
|
||||||
|
return "电机堵转"
|
||||||
|
} else if (wt === 2) {
|
||||||
|
return "角度故障"
|
||||||
|
} else if (wt === 3) {
|
||||||
|
return "低电量禁止控制"
|
||||||
|
} else if (wt === 4) {
|
||||||
|
return "电机初始化未完成"
|
||||||
|
} else if (wt === 5) {
|
||||||
|
return "压力1故障"
|
||||||
|
} else if (wt === 6) {
|
||||||
|
return "压力2故障"
|
||||||
|
} else {
|
||||||
|
return wt.value ? wt.value + "(未知错误)" : "(未知错误)"
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return "/"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 电量、温度、压力一、压力二
|
||||||
|
export function showValueFn(row, type) {
|
||||||
|
if (row.data && row.data.items && row.data.items.adcProperty) {
|
||||||
|
let {
|
||||||
|
bb,
|
||||||
|
t,
|
||||||
|
pp1,
|
||||||
|
pp2
|
||||||
|
} = row.data.items.adcProperty
|
||||||
|
if (type === 1) {
|
||||||
|
return parseInt(bb) > 100 ? 100 : parseInt(bb)
|
||||||
|
}
|
||||||
|
if (type === 2) {
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
if (type === 3) {
|
||||||
|
return pp1
|
||||||
|
}
|
||||||
|
if (type === 4) {
|
||||||
|
return pp2
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getYMDHMS(timestamp) {
|
||||||
|
let date = new Date(parseInt(timestamp))
|
||||||
|
let Year = date.getFullYear()
|
||||||
|
let Moth = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1
|
||||||
|
let Day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate()
|
||||||
|
let Hour = date.getHours() < 10 ? "0" + date.getHours() : date.getHours()
|
||||||
|
let Minute = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes()
|
||||||
|
let Sechond = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds()
|
||||||
|
let GMT = Year + "-" + Moth + "-" + Day + " " + Hour + ":" + Minute + ":" + Sechond
|
||||||
|
return GMT
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const warningTypeText = {
|
||||||
|
"valve": [
|
||||||
|
"电机堵转",
|
||||||
|
"角度故障",
|
||||||
|
"低电量禁止控制",
|
||||||
|
"电机初始化未完成",
|
||||||
|
"压力1故障",
|
||||||
|
"压力2故障",
|
||||||
|
],
|
||||||
|
"flapValve": [
|
||||||
|
"电机堵转",
|
||||||
|
"低电量禁止控制",
|
||||||
|
"压力故障"
|
||||||
|
]
|
||||||
|
};
|
||||||
|
export function getWarningTypeText(row) {
|
||||||
|
let wtText = "";
|
||||||
|
let controllable = true;
|
||||||
|
if (row.data && row.data.items && row.data.items.wt) {
|
||||||
|
let {
|
||||||
|
wt
|
||||||
|
} = row.data.items;
|
||||||
|
let wtArray = Number(wt.value).toString(2).split('').map(Number);
|
||||||
|
wtArray.reverse();
|
||||||
|
let wtTextArr = [];
|
||||||
|
if (row.deviceValve) {
|
||||||
|
wtTextArr = warningTypeText.valve;
|
||||||
|
if (wtArray.length > 2 && wtArray[2] === 1) {
|
||||||
|
controllable = false;
|
||||||
|
}
|
||||||
|
} else if (row.deviceFlapValve) {
|
||||||
|
wtTextArr = warningTypeText.flapValve;
|
||||||
|
if (wtArray.length > 1 && wtArray[1] === 1) {
|
||||||
|
controllable = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (var i = 0; i < wtArray.length; i++) {
|
||||||
|
if (wtArray[i] === 1) {
|
||||||
|
if (wtTextArr.length > i) {
|
||||||
|
if (wtText == "") {
|
||||||
|
wtText = wtTextArr[i];
|
||||||
|
} else {
|
||||||
|
wtText += "," + wtTextArr[i];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
wtText += "未知故障";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
controllable: controllable,
|
||||||
|
text: wtText || "/"
|
||||||
|
};
|
||||||
|
}
|
95
utils/deviceUtil/js/images.js
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
// // 温度图片
|
||||||
|
// import temperatureIcon from "@/static/images/index/temperature.png"
|
||||||
|
// // 红点图片
|
||||||
|
// import redDotIcon from "@/static/images/red-point.png"
|
||||||
|
// // 绿点图片
|
||||||
|
// import greenDotIcon from "@/static/images/green-point.png"
|
||||||
|
// // 灰色电池图片
|
||||||
|
// import grayBatteryIcon from "@/static/images/index/dianchigray.png"
|
||||||
|
// // 绿色电池图片
|
||||||
|
// import greenBatteryIcon from "@/static/images/index/dianchigreen.png"
|
||||||
|
// // 向上白色箭头
|
||||||
|
// import upWhiteArrowIcon from "@/static/images/index/upwhitearrow.png"
|
||||||
|
// // 向上黑色箭头
|
||||||
|
// import upBlackArrowIcon from "@/static/images/index/upblackarrow.png"
|
||||||
|
// // 向下黑色箭头
|
||||||
|
// import downBlackArrowIcon from "@/static/images/index/downblackarrow.png"
|
||||||
|
// // 向下白色箭头
|
||||||
|
// import downWhiteArrowIcon from "@/static/images/index/downwhitearrow.png"
|
||||||
|
// // 警告标志
|
||||||
|
// import warningIcon from "@/static/images/index/warning.png"
|
||||||
|
|
||||||
|
// // 阀门未激活图片
|
||||||
|
// import valveInactiveIcon from "@/static/images/index/valves/valveinactive.gif"
|
||||||
|
// // L型全关图片
|
||||||
|
// import lTypeAllClosedIcon from "@/static/images/index/valves/ltypeallclosed.gif"
|
||||||
|
// // T型全关图片
|
||||||
|
// import tTypeAllClosedIcon from "@/static/images/index/valves/ttypeallclosed.gif"
|
||||||
|
// // L型一开
|
||||||
|
// import lTypeOneOpenIcon from "@/static/images/index/valves/ltypeoneopen.gif"
|
||||||
|
// // T型一开
|
||||||
|
// import tTypeOneOpenIcon from "@/static/images/index/valves/ttypeoneopen.gif"
|
||||||
|
// // L型二开
|
||||||
|
// import lTypeTwoOpenIcon from "@/static/images/index/valves/ltypetwoopen.gif"
|
||||||
|
// // T型二开
|
||||||
|
// import tTypeTwoOpenIcon from "@/static/images/index/valves/ttypetwoopen.gif"
|
||||||
|
// // 全开
|
||||||
|
// import allOpenIcon from "@/static/images/index/valves/allopen.gif"
|
||||||
|
// // 全开
|
||||||
|
// import loaddingIcon from "@/static/images/index/valves/loaddingIcon.gif"
|
||||||
|
|
||||||
|
// // 五通阀默认图标
|
||||||
|
// import fiveDefault from "@/static/images/index/fiveValves/default.png"
|
||||||
|
|
||||||
|
// export {
|
||||||
|
// temperatureIcon,
|
||||||
|
// redDotIcon,
|
||||||
|
// greenDotIcon,
|
||||||
|
// grayBatteryIcon,
|
||||||
|
// greenBatteryIcon,
|
||||||
|
// upWhiteArrowIcon,
|
||||||
|
// upBlackArrowIcon,
|
||||||
|
// downBlackArrowIcon,
|
||||||
|
// downWhiteArrowIcon,
|
||||||
|
// warningIcon,
|
||||||
|
// valveInactiveIcon,
|
||||||
|
// lTypeAllClosedIcon,
|
||||||
|
// tTypeAllClosedIcon,
|
||||||
|
// lTypeOneOpenIcon,
|
||||||
|
// tTypeOneOpenIcon,
|
||||||
|
// lTypeTwoOpenIcon,
|
||||||
|
// tTypeTwoOpenIcon,
|
||||||
|
// allOpenIcon,
|
||||||
|
// loaddingIcon,
|
||||||
|
// fiveDefault
|
||||||
|
// }
|
||||||
|
|
||||||
|
//3通阀
|
||||||
|
import valve3 from "@/static/images/valves/3/valve3.png"
|
||||||
|
import valve3_1 from "@/static/images/valves/3/valve3_1.gif"
|
||||||
|
import valve3_2 from "@/static/images/valves/3/valve3_2.gif"
|
||||||
|
import valve3_all from "@/static/images/valves/3/valve3_all.gif"
|
||||||
|
import valve3_run from "@/static/images/valves/3/valve3_run.gif"
|
||||||
|
//5通阀
|
||||||
|
import valve5 from "@/static/images/valves/5/valve5.png"
|
||||||
|
import valve5_1 from "@/static/images/valves/5/valve5_1.gif"
|
||||||
|
import valve5_2 from "@/static/images/valves/5/valve5_2.gif"
|
||||||
|
import valve5_3 from "@/static/images/valves/5/valve5_3.gif"
|
||||||
|
import valve5_4 from "@/static/images/valves/5/valve5_4.gif"
|
||||||
|
import valve5_all from "@/static/images/valves/5/valve5_all.gif"
|
||||||
|
import valve5_run from "@/static/images/valves/5/valve5_run.gif"
|
||||||
|
|
||||||
|
export {
|
||||||
|
valve3,
|
||||||
|
valve3_1,
|
||||||
|
valve3_2,
|
||||||
|
valve3_all,
|
||||||
|
valve3_run,
|
||||||
|
valve5,
|
||||||
|
valve5_1,
|
||||||
|
valve5_2,
|
||||||
|
valve5_3,
|
||||||
|
valve5_4,
|
||||||
|
valve5_all,
|
||||||
|
valve5_run
|
||||||
|
}
|
1748
utils/deviceUtil/js/valveNew.js
Normal file
@ -4,6 +4,7 @@ import * as commonUtils from "@/utils/common.js"
|
|||||||
import {
|
import {
|
||||||
deptTreeSelectByRole,
|
deptTreeSelectByRole,
|
||||||
getManagerGroundList,
|
getManagerGroundList,
|
||||||
|
getDeviceList
|
||||||
} from "@/api/index.js"
|
} from "@/api/index.js"
|
||||||
|
|
||||||
class indexUtil {
|
class indexUtil {
|
||||||
@ -13,37 +14,56 @@ class indexUtil {
|
|||||||
static showIndex = null; //默认显示的面板索引
|
static showIndex = null; //默认显示的面板索引
|
||||||
static selectItem = null; //选中的数据
|
static selectItem = null; //选中的数据
|
||||||
static isDataChange = false; //数据是否改变
|
static isDataChange = false; //数据是否改变
|
||||||
|
static deviceData = null; //设备数据
|
||||||
|
|
||||||
//接收创建来的数据
|
//接收创建来的数据
|
||||||
constructor() {
|
constructor(eventHandler) {
|
||||||
this.isFirst = true;
|
this.isFirst = true;
|
||||||
this.userId = null;
|
this.userId = null;
|
||||||
this.list = [];
|
this.list = [];
|
||||||
this.showIndex = null;
|
this.showIndex = null;
|
||||||
this.selectItem = null;
|
this.selectItem = null;
|
||||||
|
|
||||||
|
this.eventHandler = eventHandler;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取列表
|
// 获取列表
|
||||||
getList(userId) {
|
getList(userId) {
|
||||||
uni.showLoading();
|
uni.showLoading();
|
||||||
this.userId = userId;
|
this.userId = userId;
|
||||||
|
//如果是第一次获取,则先取缓存,然后异步更新数据
|
||||||
if (this.isFirst) {
|
if (this.isFirst) {
|
||||||
|
//地块列表缓存
|
||||||
const lands = uni.getStorageSync(constant.lands);
|
const lands = uni.getStorageSync(constant.lands);
|
||||||
if (lands && lands.userId == userId) {
|
if (lands && lands.userId == userId) {
|
||||||
this.list = lands.data;
|
this.list = lands.data;
|
||||||
}
|
}
|
||||||
|
//选中地块缓存
|
||||||
this.selectItem = uni.getStorageSync(constant.landItem) || null;
|
this.selectItem = uni.getStorageSync(constant.landItem) || null;
|
||||||
|
//默认显示索引
|
||||||
this.showIndex = this.findLandIndex(this.list, this.selectItem);
|
this.showIndex = this.findLandIndex(this.list, this.selectItem);
|
||||||
|
//设备列表
|
||||||
|
if (this.selectItem) {
|
||||||
|
const device = uni.getStorageSync(constant.device) || null;
|
||||||
|
if (device && device.landId == this.selectItem.id) {
|
||||||
|
this.device = device;
|
||||||
|
} else {
|
||||||
|
this.device = null;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.device = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
uni.hideLoading();
|
uni.hideLoading();
|
||||||
if (this.isFirst) {
|
if (this.isFirst) {
|
||||||
this.isFirst = false;
|
this.isFirst = false;
|
||||||
this.getNewList(userId);
|
this.getNewLandList(userId);
|
||||||
|
this.getNewDeviceList(userId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取最新数据
|
// 获取最新地块数据
|
||||||
async getNewList(userId) {
|
async getNewLandList(userId) {
|
||||||
this.userId = userId;
|
this.userId = userId;
|
||||||
// 如果是第一次获取,则重新查询一遍数据,更新旧数据
|
// 如果是第一次获取,则重新查询一遍数据,更新旧数据
|
||||||
let company = await deptTreeSelectByRole();
|
let company = await deptTreeSelectByRole();
|
||||||
@ -58,7 +78,7 @@ class indexUtil {
|
|||||||
let land = await getManagerGroundList(userId);
|
let land = await getManagerGroundList(userId);
|
||||||
// console.error("land:", land);
|
// console.error("land:", land);
|
||||||
if (land.data.length) {
|
if (land.data.length) {
|
||||||
this.handleData(companys, land.data);
|
this.handleLandData(companys, land.data);
|
||||||
} else {
|
} else {
|
||||||
commonUtils.toast("无数据");
|
commonUtils.toast("无数据");
|
||||||
this.list = null;
|
this.list = null;
|
||||||
@ -81,8 +101,8 @@ class indexUtil {
|
|||||||
this.setStorage(2, this.selectItem);
|
this.setStorage(2, this.selectItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 组织数据
|
// 组织地块数据
|
||||||
handleData(companys, lands) {
|
handleLandData(companys, lands) {
|
||||||
let id = null;
|
let id = null;
|
||||||
let selectItem = null;
|
let selectItem = null;
|
||||||
const landItem = uni.getStorageSync(constant.landItem);
|
const landItem = uni.getStorageSync(constant.landItem);
|
||||||
@ -106,8 +126,7 @@ class indexUtil {
|
|||||||
controlFlag: item.controlFlag, //设备是否可控(0是 1否)
|
controlFlag: item.controlFlag, //设备是否可控(0是 1否)
|
||||||
enableFlapValve: item.enableFlapValve == 0, //启用蝶阀
|
enableFlapValve: item.enableFlapValve == 0, //启用蝶阀
|
||||||
landManualOperation: item.landManualOperation == 0, //启用批量控制
|
landManualOperation: item.landManualOperation == 0, //启用批量控制
|
||||||
mapContent: null,
|
mapContent: null
|
||||||
isSelect: false
|
|
||||||
}
|
}
|
||||||
// 获取地图信息
|
// 获取地图信息
|
||||||
if (item.landMap != null) {
|
if (item.landMap != null) {
|
||||||
@ -115,7 +134,6 @@ class indexUtil {
|
|||||||
}
|
}
|
||||||
// 判断是否当前选中的数据
|
// 判断是否当前选中的数据
|
||||||
if (param.id == id) {
|
if (param.id == id) {
|
||||||
param.isSelect = true;
|
|
||||||
selectItem = param;
|
selectItem = param;
|
||||||
}
|
}
|
||||||
// 判断公司是否已经分组,如果未分组,则添加分组
|
// 判断公司是否已经分组,如果未分组,则添加分组
|
||||||
@ -130,7 +148,6 @@ class indexUtil {
|
|||||||
let index = 0;
|
let index = 0;
|
||||||
while (!selectItem) {
|
while (!selectItem) {
|
||||||
if (companys[index].children.length) {
|
if (companys[index].children.length) {
|
||||||
companys[index].children[0].isSelect = true;
|
|
||||||
selectItem = companys[index].children[0];
|
selectItem = companys[index].children[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -153,6 +170,41 @@ class indexUtil {
|
|||||||
return showIndex;
|
return showIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//获取最新设备数据
|
||||||
|
async getNewDeviceList() {
|
||||||
|
// 如果是第一次获取,则重新查询一遍数据,更新旧数据
|
||||||
|
// let device = await getDeviceList();
|
||||||
|
// console.error("device:", device)
|
||||||
|
let query = {
|
||||||
|
landId: this.selectItem.id,
|
||||||
|
deviceCode: ""
|
||||||
|
}
|
||||||
|
getDeviceList(query).then(res => {
|
||||||
|
// console.error("device:", res);
|
||||||
|
let device = {
|
||||||
|
stations: [],
|
||||||
|
flapValves: [],
|
||||||
|
waterOutlets: [],
|
||||||
|
}
|
||||||
|
if (res.data) {
|
||||||
|
if (res.data.devices.length) {
|
||||||
|
device.stations = res.data.devices.filter(item => item.deviceTypeId === 1);
|
||||||
|
device.flapValves = res.data.devices.filter(item => item.deviceTypeId === 12);
|
||||||
|
}
|
||||||
|
if (res.data.waterOutletGroups.length) {
|
||||||
|
device.waterOutlets = res.data.waterOutletGroups;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
device = null;
|
||||||
|
}
|
||||||
|
console.error("device:", device)
|
||||||
|
this.device = device;
|
||||||
|
this.onEventHandler(this.eventType.device);
|
||||||
|
}).catch(error => {
|
||||||
|
commonUtils.toast(error);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// 缓存数据
|
// 缓存数据
|
||||||
setStorage(type, data) {
|
setStorage(type, data) {
|
||||||
if (type == 1) {
|
if (type == 1) {
|
||||||
@ -163,5 +215,14 @@ class indexUtil {
|
|||||||
commonUtils.toast("数据持久化异常");
|
commonUtils.toast("数据持久化异常");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************** 消息回调 ******************************/
|
||||||
|
eventType = {
|
||||||
|
land: "land",
|
||||||
|
device: "device",
|
||||||
|
}
|
||||||
|
onEventHandler(type) {
|
||||||
|
this.eventHandler(type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
export default indexUtil
|
export default indexUtil
|