From ba616e9307681da4781b7610ec3c27721d793379 Mon Sep 17 00:00:00 2001
From: guifei zhu <guifeizhu@guifeideiMac.local>
Date: 星期三, 18 九月 2024 12:13:37 +0800
Subject: [PATCH] 添加mqtt通讯
---
/dev/null | 0
common/request/fly.js | 2
pages/login/login.vue | 18
lib/mqttTool.js | 141 ++++++++++
pages/tabBar/general.vue | 98 ++++++
pages/tabBar/device.vue | 200 ++++++++-------
main.js | 5
pages/device/control.vue | 199 +++++++++++++--
common/api.js | 38 ++
App.vue | 32 ++
common/constant.js | 35 ++
11 files changed, 617 insertions(+), 151 deletions(-)
diff --git a/App.vue b/App.vue
index 40bd8c3..93ab3b0 100644
--- a/App.vue
+++ b/App.vue
@@ -32,13 +32,41 @@
console.log('App Launch')
},
onShow: function() {
- //console.log('App Show')
+ console.log('App Show')
+ // this.conn()
+
},
onHide: function() {
- //console.log('App Hide')
+ console.log('App Hide')
+ // this.disconn()
},
methods:{
+ //澶勭悊鎺夌嚎閲嶈繛
+ conn(){
+ console.log(this.$mqttTool.client)
+ if(this.$mqttTool.client){
+ console.log(this.$mqttTool.client.connected)
+ }
+ if(this.$mqttTool.client && !this.$mqttTool.client.connected){
+ console.info("寮�濮嬮噸杩�")
+ this.$mqttTool.reconnect()
+ }else {
+
+ }
+ },
+ disconn(){
+ console.log(this.$mqttTool.client)
+ if(this.$mqttTool.client){
+ console.log(this.$mqttTool.client.connected)
+ }
+ // if(this.$mqttTool.client){
+ // this.$mqttTool.end().then(res =>{
+ // console.log('缁堟锛�')
+ // })
+
+ // }
+ }
},
mounted() {
diff --git a/common/api.js b/common/api.js
index 23f7dd3..7da8c93 100644
--- a/common/api.js
+++ b/common/api.js
@@ -2,12 +2,14 @@
fly
} from '@/common/request/fly.js'
//閰嶇疆璇锋眰鍩哄湴鍧�
-fly.config.baseURL = "http://192.168.2.6:8800/herb"
+fly.config.baseURL = "http://192.168.12.20:9999"
const url = uni.getStorageSync('baseurl');
if (url) {
fly.config.baseURL = url + "/herb"
-}
-
+}
+
+const mqttBaseUrl = "223.241.221.20";
+const emqxBaseUrl = "http://"+mqttBaseUrl +":18083/api/v5"
// 娴嬭瘯
function test(params) {
@@ -35,8 +37,12 @@
function getOrderList(params) {
fly.config.loading = true
return fly.get('/dry/dryOrder/list', params);
+}
+//璁惧鍒楄〃
+function queryEquList(params){
+ fly.config.loading = true
+ return fly.get('/mobile/equ/list', params);
}
-
//
function getMonth(params) {
@@ -47,8 +53,22 @@
function sendCommand(params) {
fly.config.loading = true
return fly.post('/dry/real/sendCommand', params);
+}
+
+
+//emqx 鎺ュ彛
+function emqxClients() {
+ fly.config.loading = true
+ return fly.get(emqxBaseUrl + "/clients", {
+ auth: {
+ username: "a3dc6758f6abc41a",
+ password: "FvBwJcmqhAuQ0aBg4FLl5gQA9A9BE64bpl0oJTg9A6I0bK"
+ },
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ });
}
-
@@ -57,7 +77,11 @@
login,
getRealTimeData,
getAnalyList,
- getOrderList,
+ getOrderList,
+ queryEquList,
getMonth,
- sendCommand
+ sendCommand,
+
+ emqxClients,
+ mqttBaseUrl
}
\ No newline at end of file
diff --git a/common/constant.js b/common/constant.js
new file mode 100644
index 0000000..5c7525c
--- /dev/null
+++ b/common/constant.js
@@ -0,0 +1,35 @@
+//涓婅鎸囦护鍓嶇紑
+const MOBILE_UP = "mobile/up"
+//璇锋眰鏌ヨ璁惧鐘舵��
+const MOBILE_QUERY_EQU_STATU = MOBILE_UP + "/query/equ/statu"
+
+//鍙戦�佹搷浣滄寚浠�
+const MOBILE_REQ_EQU_CMD = MOBILE_UP + "/req/equ/cmd"
+
+//瑙f瀽鏃秂qu鏇挎崲鎴愮湡瀹炶澶囧敮涓�鏍囪瘑
+//涓嬭鎸囦护鍓嶇紑
+const SERVICE_DOWN = "service/down/res"
+//璇锋眰鏌ヨ璁惧鐘舵��
+const SERVICE_RES_EQU_STATU = SERVICE_DOWN + "/equ/statu"
+//鎺ユ敹鎸囦护鍝嶅簲
+const SERVICE_RES_EQU_CMD = SERVICE_DOWN + "/equ/cmd";
+
+
+
+/***********************缂撳瓨鐩稿叧********************************/
+
+//璁惧id(uni.getSystemInfo)
+const DEVICE_ID = "device_id"
+
+
+export default {
+ MOBILE_QUERY_EQU_STATU,
+ SERVICE_RES_EQU_STATU,
+ SERVICE_DOWN,
+ MOBILE_REQ_EQU_CMD,
+ SERVICE_RES_EQU_CMD,
+
+
+
+ DEVICE_ID
+}
\ No newline at end of file
diff --git a/common/request/fly.js b/common/request/fly.js
index 68d4550..49cbd5b 100644
--- a/common/request/fly.js
+++ b/common/request/fly.js
@@ -4,7 +4,7 @@
fly.config.loading = true;
//瀹炰緥绾ч厤缃�
-//fly.config.timeout=6000;
+fly.config.timeout=10000;
//娣诲姞鎷︽埅鍣�
fly.interceptors.request.use((config, promise) => {
console.info(fly.config.loading)
diff --git a/lib/mqttTool.js b/lib/mqttTool.js
new file mode 100644
index 0000000..0dba4b4
--- /dev/null
+++ b/lib/mqttTool.js
@@ -0,0 +1,141 @@
+/* main.js 椤圭洰涓诲叆鍙f敞鍏ュ疄渚� */
+// import mqttTool from './lib/mqttTool.js'
+// Vue.prototype.$mqttTool = mqttTool
+
+/* 浣跨敤鑼冧緥瑙� /pages/index/index.vue */
+// mqtt鍗忚锛欻5浣跨敤ws/wss APP-PLUS浣跨敤wx/wxs
+
+var mqtt = require('mqtt/dist/mqtt.js')
+
+//瀹㈡埛绔�
+let mqttTool = {
+ client: null
+}
+
+//杩炴帴鎭�
+mqttTool.connect = function(params){
+ let options = {
+ clientId: params.clientId,
+ username: params.username,
+ password: params.password,
+ clean: true,
+ keepalive:10, //蹇冭烦 鍗曚綅锛歴
+ connectTimeout: 10*1000, //杩炴帴瓒呮椂 鍗曚綅锛歮s
+ cleanSession: true
+ }
+ let client = mqtt.connect(params.url, options);
+ mqttTool.client = client
+ return client;
+}
+
+mqttTool.end = function(){
+ return new Promise((resolve, reject) => {
+ if(mqttTool.client == null){
+ resolve('鏈繛鎺�')
+ console.log('App_text' + ":end 鏈繛鎺�")
+ return;
+ }
+ mqttTool.client.end()
+ mqttTool.client = null
+ resolve('杩炴帴缁堟')
+ })
+}
+
+mqttTool.reconnect = function(){
+ return new Promise((resolve, reject) => {
+ if(mqttTool.client == null){
+ resolve('鏈繛鎺�')
+ console.log('App_text' + ":reconnect 鏈繛鎺�")
+ return;
+ }
+ mqttTool.client.reconnect()
+ })
+}
+
+mqttTool.subscribe = function(params){
+ return new Promise((resolve, reject) => {
+ if(mqttTool.client == null){
+ resolve('鏈繛鎺�')
+ console.log('App_text' + ":unconnect 鏈繛鎺�")
+ return;
+ }
+ mqttTool.client.subscribe(params.topic, {qos:params.qos}, function(err,res) {
+ console.log(err,res)
+ if (!err && res.length>0) {
+ resolve('璁㈤槄鎴愬姛')
+ console.log('App_text' + ":subscribe success 璁㈤槄鎴愬姛")
+ }else{
+ resolve('璁㈤槄澶辫触')
+ console.log('App_text' + ":subscribe failed 璁㈤槄澶辫触")
+ return;
+ }
+ })
+ })
+}
+
+mqttTool.unsubscribe = function(params){
+ return new Promise((resolve, reject) => {
+ if(mqttTool.client == null){
+ resolve('鏈繛鎺�')
+ console.log('App_text' + ":unconnect 鏈繛鎺�")
+ return;
+ }
+ mqttTool.client.unsubscribe(params.topic, function(err) {
+ if (!err) {
+ resolve('鍙栨秷璁㈤槄鎴愬姛')
+ console.log('App_text' + ":unsubscribe success 鍙栨秷璁㈤槄鎴愬姛")
+ }else{
+ resolve('鍙栨秷璁㈤槄澶辫触')
+ console.log('App_text' + ":unsubscribe failed 鍙栨秷璁㈤槄澶辫触")
+ return;
+ }
+ })
+ })
+}
+
+mqttTool.publish = function(params){
+ return new Promise((resolve, reject) => {
+ if(mqttTool.client == null){
+ resolve('鏈繛鎺�')
+ console.log('App_text' + ":unconnect 鏈繛鎺�")
+ return;
+ }
+ mqttTool.client.publish(params.topic, params.message, function(err){
+ if (!err) {
+ resolve(params.topic + '-' + params.message + '-鍙戦�佹垚鍔�')
+ console.log('App_text' + ":publish success 鍙戦�佹垚鍔�")
+ }else{
+ resolve(params.topic + '-' + params.message + '-鍙戦�佸け璐�')
+ console.log('App_text' + ":publish failed 鍙戦�佸け璐�")
+ return;
+ }
+ })
+ })
+}
+
+//娑堟伅澶勭悊
+mqttTool.message = function(){
+ return new Promise((resolve, reject) => {
+ if(mqttTool.client == null){
+ resolve('鏈繛鎺�')
+ console.log('App_text' + ":unconnect 鏈繛鎺�")
+ return;
+ }
+ if(mqttTool.client != null && ! mqttTool.client.connected){
+ mqttTool.client.reconnect()
+ }
+
+ mqttTool.client.on('message', function(topic, message, buffer) {
+ console.info(topic)
+ console.info(message)
+ setTimeout(() => {
+ resolve({topic, message, buffer })
+ }, 300)
+ })
+
+ })
+}
+
+
+
+export default mqttTool
diff --git a/main.js b/main.js
index 52c9bf1..f1d37dd 100644
--- a/main.js
+++ b/main.js
@@ -16,6 +16,11 @@
// 鍏ㄥ眬鎸傝浇鍚庝娇鐢�
Vue.prototype.$api = api
+import constant from '@/common/constant.js'
+ // 鍏ㄥ眬鎸傝浇鍚庝娇鐢�
+Vue.prototype.$constant = constant
+
+
import lget from '@/common/loadshget.js'
// 鍏ㄥ眬鎸傝浇鍚庝娇鐢�
Vue.prototype.$lget = lget
diff --git a/pages/device/control.vue b/pages/device/control.vue
index 12746c5..9a54dfc 100644
--- a/pages/device/control.vue
+++ b/pages/device/control.vue
@@ -37,10 +37,17 @@
</view>
<view class="h-tr h-tr-2">
<view class="h-td">
- <u-tag size="mini" text="鍦ㄧ嚎" type="success" plain plainFill></u-tag>
+ <u-tag v-if="connected" size="mini" text="鍦ㄧ嚎" type="success" plain
+ plainFill></u-tag>
+ <u-tag v-else size="mini" text="绂荤嚎" type="error" plain plainFill></u-tag>
</view>
<view class="h-td">
- <u-tag size="mini" text="姝e湪骞茬嚗" type="success" plain plainFill></u-tag>
+ <template v-if="runStatu">
+ <u-tag size="mini" text="姝e湪骞茬嚗" type="success" plain plainFill></u-tag>
+ </template>
+ <template v-else>
+ <u-tag size="mini" text="寰呮満" type="error" plain plainFill></u-tag>
+ </template>
</view>
<view class="h-td">{{$lget(model,'windTemp')}}</view>
<view class="h-td">{{$lget(model,'windTemp')}}</view>
@@ -74,7 +81,7 @@
</view>
<view class="h-tr h-tr-2">
- <view class="h-td">鐢熷湴榛�</view>
+ <view class="h-td">{{$lget(model,'herbName')}}</view>
<view class="h-td">{{$lget(model,'envTemp') == "" ? "--" : $lget(model,'envTemp')}}m鲁
</view>
<view class="h-td">{{$lget(model,'envHum') == "" ? "--" :$lget(model,'envHum') }}kg
@@ -136,11 +143,12 @@
<uni-section title="鎸囦护" type="line">
<view class="flex justify-center padding-lg bg-white">
<view class="margin-right-sm">
- <u-button text="寮�鏈�" type="success" @click="$u.throttle(showModal(), 500)"></u-button>
+ <u-button :disabled="connected" text="寮�鏈�" type="success"
+ @click="$u.throttle(showModal(1), 500)"></u-button>
</view>
-
<view class="margin-left-sm">
- <u-button text="鍏虫満" type="error" :disabled="true"></u-button>
+ <u-button :disabled="!connected" text="鍏虫満" type="error"
+ @click="$u.throttle(showModal(2), 500)"></u-button>
</view>
@@ -150,8 +158,8 @@
<uni-section title="鎺у埗鍙�" type="line" class="margin-top-sm ">
<view class="padding-left-sm padding-right-sm padding-bottom-sm">
- <view class="text-sm text-gray">12:00:20: <寮�鏈�>鎸囦护鎿嶄綔鎴愬姛</view>
- <view class="text-sm text-gray margin-top-sm">12:00:10: 鍙戦��<寮�鏈�>鎸囦护</view>
+ <view class="text-sm text-gray" :class="{'margin-top-sm':index>0}" v-for="(log,index) in logList">{{log}}</view>
+ <!-- <view class="text-sm text-gray margin-top-sm">12:00:10: 鍙戦��<寮�鏈�>鎸囦护</view> -->
</view>
</uni-section>
@@ -162,15 +170,15 @@
</swiper>
-
-
-
- <u-modal :show="show" title="楠岃瘉浜岀骇瀵嗙爜" @confirm="confirm" :showCancelButton="true" @cancel="show=false"
- ref="uModal" :asyncClose="true">
+ <u-modal :show="show" @confirm="confirm" :showCancelButton="true" @cancel="show=false" ref="uModal"
+ :asyncClose="true">
<slot>
- <view>
- <u--input style="width: 100%;" placeholder="璇疯緭鍏ヤ簩绾у瘑鐮�" border="surround" password
+ <view style="width: 100%;height:100%;">
+ <view style="color:red">
+ 杩滅▼鎺у埗鎿嶄綔鍙兘瀛樺湪瀹夊叏椋庨櫓锛岃璋ㄦ厧鎿嶄綔
+ </view>
+ <u--input style="width: 100%;" placeholder="璇疯緭鍏ヤ簩绾у畨鍏ㄥ瘑鐮�" border="surround" password
clearable></u--input>
</view>
</slot>
@@ -187,6 +195,14 @@
export default {
data() {
return {
+ //涓婁釜椤甸潰浼犻�掕繃鏉ョ殑鏁版嵁
+ option: {},
+ //鎿嶄綔鎸囦护log
+ logList: [],
+ //褰撳墠璁惧杩炴帴鐘舵��
+ connected: false,
+ //寮�鍏虫満鎸囦护 1-寮�鏈� 2-鍏虫満
+ cmd: -1,
show: false,
swiperList: ["鐩戞祴", "鎺у埗"],
swiperCurrent: 0,
@@ -221,8 +237,8 @@
notice: "2023-03-1812:00:001鍙锋満鍙颁綆娓╂姤璀�",
model: {},
queryParam: {
- machineid: "GM001",
- tenantid: 1003
+ machineid: "",
+ tenantid: null
},
bannerList: [{
imageUrl: '../../static/image/zcy_gzj1.png'
@@ -232,11 +248,21 @@
}
},
onShow() {
+ console.info("onShow")
this.startTimer()
},
- onLoad(e) {
+ onLoad(option) {
+ const userinfo = uni.getStorageSync('userinfo');
+ this.option = option
+ this.option.tenantid = userinfo.loginTenantId
+ this.option.username = userinfo.username
+
+
+ //鍒濆鍖栨煡璇㈠弬鏁�
+ this.queryParam.machineid = option.code
+ this.queryParam.tenantid = userinfo.loginTenantId
},
onBackPress() {
@@ -254,31 +280,131 @@
},
onReady() {
//this.getServerData()
+ // this.$mqttTool.message().then(res => {
+ // console.error("瑙f瀽鏁版嵁")
+ // if (res.topic == this.$constant.SERVICE_RES_EQU_STATU) {
+ // const msgstr = res.message.toString();
+ // const message = JSON.parse(msgstr);
+ // console.error(message)
+ // console.error(message.success)
+ // }
+ // })
+ let _this = this
+ this.$mqttTool.client.on('message', function(topic, message, buffer) {
+
+ console.error("瑙f瀽鏁版嵁")
+ const msg = JSON.parse(message);
+ console.error(topic)
+ console.error(msg)
+ console.error(msg.success)
+ if (topic == _this.$constant.SERVICE_RES_EQU_STATU.replace('equ', _this.deviceId)) {
+ if (msg.success) {
+ _this.connected = msg.connected
+ } else {
+ _this.connected = false
+ }
+ } else if (topic == _this.$constant.SERVICE_RES_EQU_CMD.replace('equ', _this.deviceId)) {
+ //鍙戦�佹寚浠ゆ敹鍒板搷搴�
+ //娣诲姞log
+ let log = this.getCurrentTime() +'杩斿洖锛�' + + '鎸囦护' ;
+ this.logList.push(log)
+
+ setTimeout(() => {
+ // 3绉掑悗鑷姩鍏抽棴
+ uni.showToast({
+ title: msg.msg,
+ icon: 'none',
+ mask: true
+ });
+ _this.show = false;
+ }, 1000)
+ }
+ })
+
+ this.queryEquStatu()
},
methods: {
- showModal() {
+ //MQTT
+ queryEquStatu() {
+
+ //1.鏌ヨ璁惧瀹炴椂鐘舵��
+ const message = {
+ clientId: this.option.clientId,
+ timestamp: new Date(),
+ req: this.deviceId
+ }
+ let opts = {
+ topic: this.$constant.MOBILE_QUERY_EQU_STATU,
+ message: JSON.stringify(message),
+ }
+
+ this.$mqttTool.publish(opts).then(res => {
+ console.error(res)
+ })
+
+ },
+
+ sendEquCmd() {
+ //娣诲姞log
+ let log = this.getCurrentTime() +'鍙戦��' + (this.cmd == 1 ? "锛氥�婂紑鏈恒��" : "锛氥�婂叧鏈恒��") + '鎸囦护' ;
+ this.logList.push(log)
+
+ //1.鍙戦�佸紑鍏虫満鎸囦护 1-寮�鏈� 2-鍏虫満
+ const message = {
+ clientId: this.option.clientId,
+ cmd: this.cmd,
+ timestamp: new Date(),
+ req: this.deviceId
+ }
+ let opts = {
+ topic: this.$constant.MOBILE_REQ_EQU_CMD,
+ message: JSON.stringify(message),
+ }
+
+ this.$mqttTool.publish(opts).then(res => {
+ console.error(res)
+ })
+
+ },
+
+ showModal(cmd) {
this.show = true;
+ this.cmd = cmd;
},
confirm() {
- setTimeout(() => {
- // 3绉掑悗鑷姩鍏抽棴
- uni.showToast({
- title: '鎿嶄綔鎴愬姛~',
- icon: 'none',
- mask: true
- });
- this.show = false;
- }, 3000)
+ this.sendEquCmd()
+ // setTimeout(() => {
+ // // 3绉掑悗鑷姩鍏抽棴
+ // uni.showToast({
+ // title: '鎿嶄綔鎴愬姛~',
+ // icon: 'none',
+ // mask: true
+ // });
+ // this.show = false;
+ // }, 3000)
+
+
+
+
},
startTimer() {
console.info("鐩戞帶椤甸潰鏄剧ず")
this.getRealData()
+ //涓嶉棿鏂煡璇㈠緟鎿嶄綔骞茬嚗鏈虹殑鐘舵�侊紝瀹炴椂鏇存柊
+ //this.queryEquStatu()
if (!this.$monitorTimer) {
this.$monitorTimer = setInterval(() => {
console.info("瀹氭椂鍣ㄥ伐浣�")
console.info(this.$monitorTimer)
this.getRealData()
+
+ /**
+ * TODO 浣跨敤last_will浠f浛杞
+ */
+ //涓嶉棿鏂煡璇㈠緟鎿嶄綔骞茬嚗鏈虹殑鐘舵�侊紝瀹炴椂鏇存柊
+ //this.queryEquStatu()
+
}, 1000 * 12)
}
@@ -303,6 +429,20 @@
this.swiperCurrent = e.detail.current;
console.log(e.detail.current)
this.$refs.tabs.unlockDx();
+ },
+ getCurrentTime() {
+ // 鑾峰彇褰撳墠鏃堕棿
+ let now = new Date();
+ // 鏍煎紡鍖栨椂闂�
+ let year = now.getFullYear();
+ let month = (now.getMonth() + 1).toString().padStart(2, '0');
+ let day = now.getDate().toString().padStart(2, '0');
+ let hours = now.getHours().toString().padStart(2, '0');
+ let minutes = now.getMinutes().toString().padStart(2, '0');
+ let seconds = now.getSeconds().toString().padStart(2, '0');
+
+ // 杩斿洖缁撴灉
+ return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
},
getServerData() {
//妯℃嫙浠庢湇鍔″櫒鑾峰彇鏁版嵁鏃剁殑寤舵椂
@@ -452,6 +592,9 @@
}
},
computed: {
+ deviceId() {
+ return uni.getStorageSync(this.$constant.DEVICE_ID);
+ },
//杩愯鐘舵��
runStatu() {
let stop = this.$lget(this.model, 'stop');
diff --git a/pages/login/login.vue b/pages/login/login.vue
index 438a26d..d1539e1 100644
--- a/pages/login/login.vue
+++ b/pages/login/login.vue
@@ -34,8 +34,8 @@
data() {
return {
model: {
- username: "",
- password: ""
+ username: "tongjitang",
+ password: "123456"
},
rules: {
'username': {
@@ -51,7 +51,7 @@
trigger: ['blur', 'change']
},
},
-
+
};
},
onLoad() {
@@ -62,14 +62,14 @@
},
- methods: {
+ methods: {
+
forget() {
uni.navigateTo({
url: "/pages/tabBar/demo"
})
},
- submit() {
-
+ submit() {
if (this.model.username.startsWith("http")) {
uni.setStorageSync('baseurl', this.model.username);
this.model.username = null
@@ -86,7 +86,8 @@
},
login() {
this.$api.login(this.model).then((res) => {
- if (res.success) {
+ if (res.success) {
+
console.log('request success', res)
uni.showToast({
@@ -97,7 +98,8 @@
uni.setStorageSync('account', this.model);
uni.setStorageSync('userinfo', res.result.userInfo);
- uni.setStorageSync('token', res.result.token);
+ uni.setStorageSync('token', res.result.token);
+
uni.switchTab({
url: '/pages/tabBar/general'
diff --git a/pages/tabBar/device.vue b/pages/tabBar/device.vue
index f6ca562..faff43c 100644
--- a/pages/tabBar/device.vue
+++ b/pages/tabBar/device.vue
@@ -12,13 +12,14 @@
<view class="card-box dynamic shadow">
<view class="title-box margin-bottom-sm">
- <view style="width: 100vw;" class="left justify-between">
+ <view style="width: 100vw;" class="left justify-between">
<view class="flex align-center">
<uni-text class="cuIcon-titles text-blue"></uni-text>
<view class="title">鎬昏</view>
</view>
<view>
- <text class="text-gray margin-right-lg">2024-07-14</text>
+ <text
+ class="text-gray margin-right-lg">{{new Date().toLocaleDateString().replace(/\//g, '-')}}</text>
</view>
</view>
@@ -28,20 +29,20 @@
<view class="flex">
<view class="flex-sub flex flex-direction text-center">
<text class="text-df">璁惧鎬绘暟</text>
- <text class="text-bold text-sl margin-top-xs text-gray margin-top-sm">20
+ <text class="text-bold text-sl margin-top-xs text-gray margin-top-sm">{{equCount}}
<text class="text-gray text-sm margin-left-xs">鍙�</text></text>
- </view>
-
- <view class="flex-sub flex flex-direction text-center">
- <text class="text-df">寮�鏈鸿澶�</text>
- <text class="text-bold text-sl margin-top-xs text-gray margin-top-sm">10
- <text class="text-gray text-sm margin-left-xs">鍙�</text></text>
- </view>
-
- <view class="flex-sub flex flex-direction text-center">
- <text class="text-df">杩愯璁惧</text>
- <text class="text-bold text-sl margin-top-xs text-cyan margin-top-sm">10
- <text class="text-gray text-sm margin-left-xs">鍙�</text></text>
+ </view>
+
+ <view class="flex-sub flex flex-direction text-center">
+ <text class="text-df">寮�鏈鸿澶�</text>
+ <text class="text-bold text-sl margin-top-xs text-gray margin-top-sm">{{onlineCount}}
+ <text class="text-gray text-sm margin-left-xs">鍙�</text></text>
+ </view>
+
+ <view class="flex-sub flex flex-direction text-center">
+ <text class="text-df">杩愯璁惧</text>
+ <text class="text-bold text-sl margin-top-xs text-cyan margin-top-sm">{{onlineCount}}
+ <text class="text-gray text-sm margin-left-xs">鍙�</text></text>
</view>
</view>
<view class="margin-top">
@@ -58,62 +59,64 @@
</template>
-
-
-
- <u-skeleton
- class=" "
- rows="20"
- :loading="loading"
- :title="false"
- >
- <!-- 濡傛灉甯屾湜鍏朵粬view璺熺潃椤甸潰婊氬姩锛屽彲浠ユ斁鍦▃-paging鏍囩鍐� -->
- <view class="card-box dynamic shadow" v-for="(item,index) in dataList" :key="index"
- @click="itemClick(item)">
- <view class="title-box">
- <view class="left flex-sub">
- <uni-text class="cuIcon-titles text-blue"></uni-text>
- <view class="title text-cut">1#鏅鸿兘骞茬嚗鏈�</view>
- <view class="flex title text-green text-sm">
- <u-tag size="mini" text="鍦ㄧ嚎" type="success" plain plainFill></u-tag>
- <u-tag class="margin-left-xs" size="mini" text="鍋滄満" type="error" plain plainFill></u-tag>
+
+
+
+ <u-skeleton class=" " rows="20" :loading="loading" :title="false">
+ <!-- 濡傛灉甯屾湜鍏朵粬view璺熺潃椤甸潰婊氬姩锛屽彲浠ユ斁鍦▃-paging鏍囩鍐� -->
+ <view class="card-box dynamic shadow" v-for="(item,index) in dataList" :key="index"
+ @click="itemClick(item)">
+ <view class="title-box">
+ <view class="left flex-sub">
+ <uni-text class="cuIcon-titles text-blue"></uni-text>
+ <view class="title text-cut">{{$lget(item,'name')}}</view>
+ <view class="flex title text-green text-sm">
+ <u-tag v-if="item.online" size="mini" text="鍦ㄧ嚎" type="success" plain plainFill></u-tag>
+ <u-tag v-else class="" size="mini" text="鍋滄満" type="error" plain plainFill></u-tag>
+ </view>
</view>
- </view>
- <view class="right" style="min-width: 240rpx;">
- <!-- <u-badge :isDot="true" type="success"></u-badge> -->
- <view class="title text-gray text-sm">寮�鏈烘椂闂�:</view>
- <view class="title text-gray text-sm">10:00:10</view>
- </view>
- </view>
-
- <view class="info-box">
- <view class="left flex-sub">
- <view class="title text-sm">鐑樺共鑽潗:</view>
- <view class="title text-sm">鐢熷湴榛�</view>
- </view>
- <view class="right" style="min-width: 240rpx;">
- <view class="title text-sm">鐑樺共鏃堕棿:</view>
- <view class="title text-sm">01:20:00</view>
- </view>
- </view>
-
- <view class="info-box">
- <view class="left flex-sub">
- <view class="title text-sm text-cut">鎶ヨ淇℃伅:</view>
- <view class="flex title text-sm">
- <u-tag size="mini" text="娓╁害浼犳劅鍣ㄦ姤璀�" type="warning" plain plainFill></u-tag>
- <u-tag size="mini" class="margin-left-xs" text="鍓嶉棬鏈叧" type="warning" plain
- plainFill></u-tag>
- <u-tag size="mini" class="margin-left-xs" text="椋庣浣庝綅鎶ヨ" type="error" plain
- plainFill></u-tag>
+ <view class="right" style="min-width: 240rpx;">
+ <!-- <u-badge :isDot="true" type="success"></u-badge> -->
+ <!-- <view class="title text-gray text-sm">寮�鏈烘椂闂�:</view> -->
+ <view class="title text-gray text-sm">{{$lget(item,'upTime')}}</view>
</view>
</view>
+ <view class="info-box">
+ <view class="left flex-sub">
+ <view class="title text-sm">鐑樺共鑽潗:</view>
+ <view class="title text-sm text-gray">--</view>
+ </view>
+ <view class="right" style="min-width: 240rpx;">
+ <view class="title text-sm">鐑樺共鏃堕棿:</view>
+ <view class="title text-sm text-gray">--</view>
+ </view>
+ </view>
+
+ <view class="info-box">
+ <view class="left flex-sub">
+ <view class="title text-sm text-cut">鎶ヨ淇℃伅:</view>
+ <view class="flex title text-sm">
+ <template v-if="item.online && !item.fault">
+ <u-tag size="mini" text="姝e父" type="success" plain plainFill></u-tag>
+ </template>
+ <template v-else-if="item.fault">
+ <u-tag size="mini" text="娓╁害浼犳劅鍣ㄦ姤璀�" type="warning" plain plainFill></u-tag>
+ <u-tag size="mini" class="margin-left-xs" text="鍓嶉棬鏈叧" type="warning" plain
+ plainFill></u-tag>
+ <u-tag size="mini" class="margin-left-xs" text="椋庣浣庝綅鎶ヨ" type="error" plain
+ plainFill></u-tag>
+ </template>
+ <template v-else>
+ </template>
+ </view>
+ </view>
+
+ </view>
+
</view>
- </view>
-
- </u-skeleton>
+ </u-skeleton>
</z-paging>
</view>
</template>
@@ -121,46 +124,53 @@
<script>
export default {
data() {
- return {
- loading:true,
+ return {
+ loading: true,
// v-model缁戝畾鐨勮繖涓彉閲忎笉瑕佸湪鍒嗛〉璇锋眰缁撴潫涓嚜宸辫祴鍊硷紒锛侊紒
- dataList: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
+ dataList: [],
}
},
methods: {
- queryList(pageNo, pageSize) {
+ queryList(pageNo, pageSize) {
this.loading = true;
// 缁勪欢鍔犺浇鏃朵細鑷姩瑙﹀彂姝ゆ柟娉曪紝鍥犳榛樿椤甸潰鍔犺浇鏃朵細鑷姩瑙﹀彂锛屾棤闇�鎵嬪姩璋冪敤
// 杩欓噷鐨刾ageNo鍜宲ageSize浼氳嚜鍔ㄨ绠楀ソ锛岀洿鎺ヤ紶缁欐湇鍔″櫒鍗冲彲
// 妯℃嫙璇锋眰鏈嶅姟鍣ㄨ幏鍙栧垎椤垫暟鎹紝璇锋浛鎹㈡垚鑷繁鐨勭綉缁滆姹�
- // const params = {
- // pageNo: pageNo,
- // pageSize: pageSize,
- // }
- // this.$request.queryList(params).then(res => {
- // // 灏嗚姹傜殑缁撴灉鏁扮粍浼犻�掔粰z-paging
- this.$refs.paging.complete(this.dataList);
- // }).catch(res => {
- // // 濡傛灉璇锋眰澶辫触鍐檛his.$refs.paging.complete(false);
- // // 娉ㄦ剰锛屾瘡娆¢兘闇�瑕佸湪catch涓啓杩欏彞璇濆緢楹荤儲锛寊-paging鎻愪緵浜嗘柟妗堝彲浠ュ叏灞�缁熶竴澶勭悊
- // // 鍦ㄥ簳灞傜殑缃戠粶璇锋眰鎶涘嚭寮傚父鏃讹紝鍐檜ni.$emit('z-paging-error-emit');鍗冲彲
- // this.$refs.paging.complete(false);
- // })
- setTimeout(() => {
- this.loading = false
- }, 1000)
- },
- itemClick(item){
- uni.navigateTo({
- url:"/pages/device/control"
- })
+ const params = {
+ pageNo: pageNo,
+ pageSize: pageSize,
+ }
+ this.$api.queryEquList(params).then((res) => {
+ // // 灏嗚姹傜殑缁撴灉鏁扮粍浼犻�掔粰z-paging
+ this.$refs.paging.complete(res.result.records);
+ this.loading = false
+ }).catch(res => {
+ // 濡傛灉璇锋眰澶辫触鍐檛his.$refs.paging.complete(false);
+ // 娉ㄦ剰锛屾瘡娆¢兘闇�瑕佸湪catch涓啓杩欏彞璇濆緢楹荤儲锛寊-paging鎻愪緵浜嗘柟妗堝彲浠ュ叏灞�缁熶竴澶勭悊
+ // 鍦ㄥ簳灞傜殑缃戠粶璇锋眰鎶涘嚭寮傚父鏃讹紝鍐檜ni.$emit('z-paging-error-emit');鍗冲彲
+ this.$refs.paging.complete(false);
+ this.loading = false
+ })
+
+ },
+ itemClick(item) {
+ uni.navigateTo({
+ url: "/pages/device/control?code="+item.code+"&clientId="+item.clientId
+ })
}
- },onReady() {
-
- setTimeout(() => {
- this.loading = false
- }, 1000)
+ },
+ onReady() {
+
+ },
+ computed: {
+ equCount() {
+ return this.dataList.length
+ },
+ onlineCount() {
+ const list = this.dataList.filter(item => item.online)
+ return list.length
+ }
}
}
</script>
diff --git a/pages/tabBar/general.vue b/pages/tabBar/general.vue
index ec2c61e..ae71ad0 100644
--- a/pages/tabBar/general.vue
+++ b/pages/tabBar/general.vue
@@ -177,7 +177,8 @@
<view class="flex">
<text>涓崏鑽�</text>
<text>涓�</text>
- <text @click="showLongName(showValue(item.herbName))" class="text-cut flex-twice">{{showValue(item.herbName)}}</text>
+ <text @click="showLongName(showValue(item.herbName))"
+ class="text-cut flex-twice">{{showValue(item.herbName)}}</text>
<!-- <view class="margin-lr-sm">
<u-tag text="鎶ヨ涓�娆�" plain size="mini" type="warning"></u-tag>
</view> -->
@@ -356,21 +357,98 @@
},
onReady() {
+ const userinfo = uni.getStorageSync('userinfo');
+ const tenantid = userinfo.loginTenantId
+ uni.getSystemInfo({
+ success: (res) => {
+ let deviceId = res.deviceId
+ if (!deviceId) {
+ deviceId = 'mobile-' + tenantid + '-' + Date.parse(new Date())
+ }
+ uni.setStorageSync(this.$constant.DEVICE_ID, 'mobile-' + tenantid + '-' + res.deviceId);
+ }
+ })
+ this.startConnect();
+
+
+
let month = uni.$u.timeFormat(new Date(), 'yyyy-mm')
this.getMonth(month)
let day = uni.$u.timeFormat(new Date(), 'yyyy-mm-dd')
- this.getOrderList(day, day);
-
+ this.getOrderList(day, day);
+
},
- methods: {
- showLongName(longName){
- this.$refs.uToast.show({
- type: 'default',
- message: longName
- })
-
+ methods: {
+ /* 杩炴帴MQTT */
+ async startConnect() {
+ var _this = this
+ const account = uni.getStorageSync('account');
+ const deviceid = uni.getStorageSync(this.$constant.DEVICE_ID);
+
+ if (!account) {
+
+ return false
+ }
+ let opts = {
+ // #ifdef H5
+ url: 'ws://' + this.$api.mqttBaseUrl + ':8083/mqtt',
+ // #endif
+ // #ifdef APP-PLUS
+ url: 'wx://' + this.$api.mqttBaseUrl + ':8083/mqtt',
+ // #endif
+ clientId: deviceid,
+ username: account.username,
+ password: account.password
+ }
+ if (!this.$mqttTool.client) {
+ var client = await this.$mqttTool.connect(opts);
+ }
+ //璁㈤槄鏌ヨ璁惧鐘舵�佽繑鍥炴暟鎹�
+ this.$mqttTool.subscribe({
+ topic: this.$constant.SERVICE_DOWN + '/' + deviceid + '/#',
+ qos: 0
+ }).then(res => {
+ console.error(res)
+ })
+ //璁㈤槄鍙戦�佹寚浠よ繑鍥炵粨鏋�
+ // this.$mqttTool.subscribe({
+ // topic: this.$constant.SERVICE_RES_EQU_CMD,
+ // qos: 0
+ // }).then(res => {
+ // console.error(res)
+ // })
+ // if (!client) {
+ // return false
+ // }
+
+ client.on('connect', function(res) {
+ console.error('杩炴帴鎴愬姛')
+ })
+ client.on('reconnect', function(res) {
+ console.error('閲嶆柊杩炴帴')
+ })
+ client.on('error', function(res) {
+ console.info('杩炴帴閿欒')
+ })
+ client.on('close', function(res) {
+
+ console.error('鍏抽棴鎴愬姛')
+
+ })
+ client.on('message', function(topic, message, buffer) {
+ //console.info(message)
+ })
+ },
+
+
+ showLongName(longName) {
+ this.$refs.uToast.show({
+ type: 'default',
+ message: longName
+ })
+
},
dayChange(dayInfo) { // 鐐瑰嚮鏃ユ湡
this.model.date = dayInfo.date
diff --git a/static/splash.png b/static/splash.png
deleted file mode 100644
index eb17b17..0000000
--- a/static/splash.png
+++ /dev/null
Binary files differ
--
Gitblit v1.9.3