From 576d28de6be2d75bfd5a213874dd8d06657635b5 Mon Sep 17 00:00:00 2001
From: zhuguifei <zhuguifei@zhuguifeideiMac.local>
Date: 星期三, 25 十二月 2024 08:40:20 +0800
Subject: [PATCH] 1.添加实时报警和历史报警 2.添加云服务和局域网模式切换界面
---
pages/login/login.vue | 89
pages/tabBar/formula.vue | 3
mqtt/MqttView.vue | 164 +-
pages.json | 60
pages/tabBar/device.vue | 7
pages/login/switchMode.vue | 169 +++
common/api.js | 79 +
pages/tabBar/components/hisWarning.vue | 599 +++++++++++
App.vue | 22
common/constant.js | 14
store/index.js | 22
pages/tabBar/warning.vue | 840 ++++++----------
readMe.txt | 3
common/request/fly.js | 22
common/loadshget.js | 4
components/drop-down-menu/index.vue | 8
manifest.json | 12
pages/tabBar/general.vue | 299 ++---
pages/tabBar/components/realWarning.vue | 455 +++++++++
main.js | 6
pages/device/control.vue | 6
pages/charts/charts.vue | 2
pages/tabBar/me.vue | 113 +-
23 files changed, 2,020 insertions(+), 978 deletions(-)
diff --git a/App.vue b/App.vue
index 87c3ab4..5fa7395 100644
--- a/App.vue
+++ b/App.vue
@@ -2,11 +2,16 @@
import Vue from 'vue'
export default {
+ //鍏ㄥ眬鍙橀噺(鍚屾鏁版嵁鍙敤鍏ㄥ眬鍙橀噺锛屽紓姝ユ暟鎹娇鐢╲uex)
globalData: {
- token: ""
+ token: "",
+ //褰撳墠閫夋嫨tab
+ selectTab: 0,
+ //褰撳墠缃戠粶妯″紡锛坈loud-浜戞湇鍔°�乴an-灞�鍩熺綉锛�
+ mode: "",
},
onLaunch: function() {
-
+
//姝ゅ涓簎nipush2.0鐨勬帹閫佹柟娉�
@@ -27,19 +32,17 @@
//鎺ㄩ�佷粎鏀寔Android ios鍘熺敓骞冲彴
// #ifdef APP-PLUS
- console.log('APP-PLUS:')
// 姝ゅ涓簎nipush1.0鐨勬帹閫佹柟娉�
plus.push.getClientInfoAsync((info) => {
let cid = info["clientid"];
console.log('瀹㈡埛绔帹閫佹爣璇�:', cid)
- this.$store.dispatch('setCid', cid); // 浣跨敤 action 鏇存柊 cid
+ this.$store.dispatch('setClientPushId', cid); // 浣跨敤 action 鏇存柊 cid
+
});
// #endif
uni.onPushMessage((res) => {
console.log("鏀跺埌鎺ㄩ�佹秷鎭細", res) //鐩戝惉鎺ㄩ�佹秷鎭�
})
-
-
uni.getSystemInfo({
success: function(e) {
@@ -96,12 +99,7 @@
if (this.$mqttTool.client) {
console.log(this.$mqttTool.client.connected)
}
- // if(this.$mqttTool.client){
- // this.$mqttTool.end().then(res =>{
- // console.log('缁堟锛�')
- // })
-
- // }
+
}
},
diff --git a/common/api.js b/common/api.js
index 7da8c93..532c357 100644
--- a/common/api.js
+++ b/common/api.js
@@ -2,14 +2,14 @@
fly
} from '@/common/request/fly.js'
//閰嶇疆璇锋眰鍩哄湴鍧�
-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"
+fly.config.baseURL = "http://192.168.12.47:9999"
+const ip = uni.getStorageSync('lan_ip');
+if (ip) {
+ fly.config.baseURL = "http://" + ip + ":9999"
+}
+
+const mqttBaseUrl = "192.168.2.3";
+const emqxBaseUrl = "http://" + mqttBaseUrl + ":18083/api/v5"
// 娴嬭瘯
function test(params) {
@@ -37,11 +37,17 @@
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 queryEquList(params) {
+ fly.config.loading = true
+ return fly.get('/mobile/equ/list', params);
+}
+
+//浠呯敤浣滀笅鎷夊埛鏂帮紝鏃犲疄闄呮剰涔�
+function querySampleList(params) {
+ fly.config.loading = true
+ return fly.get('/mobile/sample/list', params);
}
//
@@ -53,20 +59,32 @@
function sendCommand(params) {
fly.config.loading = true
return fly.post('/dry/real/sendCommand', params);
-}
-
-
-//emqx 鎺ュ彛
+}
+
+//鍘嗗彶鏁呴殰锛屾煡璇㈡渶杩戞暟鎹�
+function queryHisFaultList(params) {
+ fly.config.loading = true
+ return fly.get('/mobile/fault/list', params);
+}
+
+//鍘嗗彶鏁呴殰锛屾煡璇㈠浘琛ㄩ渶瑕佹暟鎹�
+function queryHisFaultChartList(params) {
+ fly.config.loading = true
+ return fly.get('/mobile/fault/chart', params);
+}
+
+
+//emqx 鎺ュ彛
function emqxClients() {
fly.config.loading = true
- return fly.get(emqxBaseUrl + "/clients", {
- auth: {
- username: "a3dc6758f6abc41a",
- password: "FvBwJcmqhAuQ0aBg4FLl5gQA9A9BE64bpl0oJTg9A6I0bK"
- },
- headers: {
- 'Content-Type': 'application/json',
- },
+ return fly.get(emqxBaseUrl + "/clients", {
+ auth: {
+ username: "a3dc6758f6abc41a",
+ password: "FvBwJcmqhAuQ0aBg4FLl5gQA9A9BE64bpl0oJTg9A6I0bK"
+ },
+ headers: {
+ 'Content-Type': 'application/json',
+ },
});
}
@@ -77,11 +95,14 @@
login,
getRealTimeData,
getAnalyList,
- getOrderList,
+ getOrderList,
queryEquList,
+ querySampleList,
+ queryHisFaultList,
+ queryHisFaultChartList,
getMonth,
- sendCommand,
-
- emqxClients,
+ sendCommand,
+
+ emqxClients,
mqttBaseUrl
}
\ No newline at end of file
diff --git a/common/constant.js b/common/constant.js
index 7208477..1b56fee 100644
--- a/common/constant.js
+++ b/common/constant.js
@@ -2,6 +2,9 @@
const MOBILE_UP = "mobile/up"
//璇锋眰鏌ヨ璁惧鐘舵��
const MOBILE_QUERY_EQU_STATU = MOBILE_UP + "/query/equ/statu"
+//璇锋眰鏌ヨ璁惧瀹炴椂鏁呴殰
+const MOBILE_REQ_EQU_REAL_FAULT = MOBILE_UP + "/req/real/fault"
+
//鍙戦�佹搷浣滄寚浠�
const MOBILE_REQ_EQU_CMD = MOBILE_UP + "/req/equ/cmd"
@@ -27,7 +30,10 @@
//骞挎挱鍓嶇紑
const SERVICE_BROADCAST = "service/broadcast"
// //鏈嶅姟绔悜鍚勭鎴峰鎴风鍙戦�佸疄鏃舵晠闅滃箍鎾�
-const SERVICE_BROADCAST_TENANT_REAL_FAULT = SERVICE_BROADCAST + "/real/fault/%s"
+const SERVICE_BROADCAST_TENANT_REAL_FAULT = SERVICE_BROADCAST + "/real/fault/%s"
+
+
+const SERVICE_ONECE_TENANT_REAL_FAULT = "service/onece" + "/real/fault/%s"
@@ -40,12 +46,16 @@
export default {
MOBILE_QUERY_EQU_STATU,
+
+ MOBILE_REQ_EQU_REAL_FAULT,
+
SERVICE_RES_EQU_STATU,
SERVICE_DOWN,
MOBILE_REQ_EQU_CMD,
SERVICE_RES_EQU_CMD,
- SERVICE_BROADCAST_TENANT_REAL_FAULT,
+ SERVICE_BROADCAST_TENANT_REAL_FAULT,
+ SERVICE_ONECE_TENANT_REAL_FAULT,
MQTT_TOPIC_MESSAGE,
diff --git a/common/loadshget.js b/common/loadshget.js
index cdd514c..1951b82 100644
--- a/common/loadshget.js
+++ b/common/loadshget.js
@@ -1,9 +1,9 @@
import get from 'lodash.get'
export default function lget(data, item) {
- if(!data || data == null) return "--";
+ if(!data || data == null ) return "--";
if(data & (!item || item == null)) return data;
let res = get(data, item)
- return res == null ? "--" :res
+ return (res == null || res == "") ? "--" :res
}
diff --git a/common/request/fly.js b/common/request/fly.js
index 49cbd5b..8548e6d 100644
--- a/common/request/fly.js
+++ b/common/request/fly.js
@@ -1,5 +1,6 @@
var Fly = require("./wx.umd.min")
-var fly = new Fly
+var fly = new Fly
+const log = false
fly.config.loading = true;
@@ -7,7 +8,6 @@
fly.config.timeout=10000;
//娣诲姞鎷︽埅鍣�
fly.interceptors.request.use((config, promise) => {
- console.info(fly.config.loading)
if (fly.config.loading) {
uni.showLoading({
title: '鍔犺浇涓�'
@@ -24,9 +24,11 @@
if (userinfo) {
config.headers["X-Tenant-Id"] = userinfo.loginTenantId;
}
- console.log('========================================== ')
- console.log('== 璇锋眰鏁版嵁锛�' + JSON.stringify(config))
- console.log('=========================================== ')
+ if(log){
+ console.log('========================================== ')
+ console.log('== 璇锋眰鏁版嵁锛�' + JSON.stringify(config))
+ console.log('=========================================== ')
+ }
return config;
})
@@ -34,10 +36,12 @@
fly.interceptors.response.use(
(response) => {
- console.log('========================================')
- console.log('== 鍝嶅簲鏁版嵁锛�' + JSON.stringify(response.request.url))
- console.log('== ' + JSON.stringify(response.data))
- console.log('======================================== ')
+ if(log){
+ console.log('========================================')
+ console.log('== 鍝嶅簲鏁版嵁锛�' + JSON.stringify(response.request.url))
+ console.log('== ' + JSON.stringify(response.data))
+ console.log('======================================== ')
+ }
//鍙皢璇锋眰缁撴灉鐨刣ata瀛楁杩斿洖
diff --git a/components/drop-down-menu/index.vue b/components/drop-down-menu/index.vue
index c5103e2..b73888c 100644
--- a/components/drop-down-menu/index.vue
+++ b/components/drop-down-menu/index.vue
@@ -1,7 +1,10 @@
<template>
<view class="dropdown">
<view class="item">
- <view class="item-title">璁惧</view>
+ <view class="item-title" style="display: flex;justify-content: space-between;">
+ <text>璁惧</text>
+ <text @click="closeMenu"><u-icon name="close"></u-icon></text>
+ </view>
<view class="item-box">
<view v-for="(item,index) in menuList" :key="item.code" :class="['item-menu',item.ck?'active':'']"
@click="changeMenu(index)">{{item.name}}
@@ -196,6 +199,9 @@
}
}
this.selectData.endTime = val;
+ },
+ closeMenu(){
+ this.$emit('closeMenu')
}
}
}
diff --git a/main.js b/main.js
index 00b379f..f36419b 100644
--- a/main.js
+++ b/main.js
@@ -33,15 +33,13 @@
import mqttTool from './lib/mqttTool.js'
Vue.prototype.$mqttTool = mqttTool
-
-const EventBus = new Vue();
-Vue.prototype.$eventBus = EventBus
//鍏ㄥ眬鐩戞帶瀹氭椂鍣紙鍦ㄩ〉闈娇鐢ㄥ眬閮ㄥ畾鏃跺櫒浼氬嚭鐜版棤娉曞叧闂棶棰橈級
Vue.prototype.$monitorTimer = null
-
+
+
Vue.config.productionTip = false
App.mpType = 'app'
diff --git a/manifest.json b/manifest.json
index 363f7d0..bfde525 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,5 +1,5 @@
{
- "name" : "鏅鸿兘涓崏鑽共鐕ユ満",
+ "name" : "鍏版郸鏅鸿兘骞茬嚗",
"appid" : "__UNI__1E83F66",
"description" : "",
"versionName" : "1.0.0",
@@ -54,11 +54,11 @@
"unipush" : {
"icons" : {
"small" : {
- "ldpi" : "static/push/push_small_18.png",
- "mdpi" : "static/push/push_small_24.png",
- "hdpi" : "static/push/push_small_36.png",
- "xhdpi" : "static/push/push_small_48.png",
- "xxhdpi" : "static/push/push_small_72.png"
+ "ldpi" : "static/logo.png",
+ "mdpi" : "static/logo.png",
+ "hdpi" : "static/logo.png",
+ "xhdpi" : "static/logo.png",
+ "xxhdpi" : "static/logo.png"
}
}
}
diff --git a/mqtt/MqttView.vue b/mqtt/MqttView.vue
index 412d8bf..94f4b88 100644
--- a/mqtt/MqttView.vue
+++ b/mqtt/MqttView.vue
@@ -4,7 +4,6 @@
</template>
<script>
-
export default {
name: 'MqttView',
data() {
@@ -13,92 +12,105 @@
}
},
onReady() {
-
+
+
},
methods: {
- initMqtt(){
+ initMqtt() {
uni.getSystemInfo({
success: (res) => {
let deviceId = res.deviceId
if (!deviceId) {
deviceId = 'mobile-' + this.tenantId + '-' + Date.parse(new Date())
}
- uni.setStorageSync(this.$constant.DEVICE_ID, 'mobile-' + this.tenantId + '-' + res.deviceId);
+ uni.setStorageSync(this.$constant.DEVICE_ID, 'mobile-' + this.tenantId + '-' + res
+ .deviceId);
}
})
- this.startConnect();
+ this.startConnect();
},
- /* 杩炴帴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)
- })
-
- //璁㈤槄璁惧鏁呴殰骞挎挱锛堝箍鎾笉鍦ㄤ箮瀹㈡埛绔痠d锛屽彂閫佺粰绉熸埛涓嬫墍鏈夊湪绾跨殑璁惧锛�
- this.$mqttTool.subscribe({
- topic: this.$constant.SERVICE_BROADCAST_TENANT_REAL_FAULT.replace('%s', this.tenantId),
- 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
- // }
- let that = this
-
- 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) {
- that.$eventBus.$emit(that.$constant.MQTT_TOPIC_MESSAGE, message);
- console.info(message)
-
- })
- },
+ /* 杩炴帴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) {
+ this.$mqttTool.client = await this.$mqttTool.connect(opts);
+ }
+ //璁㈤槄鏌ヨ璁惧鐘舵�佽繑鍥炴暟鎹�
+ this.$mqttTool.subscribe({
+ topic: this.$constant.SERVICE_DOWN + '/' + deviceid + '/#',
+ qos: 0
+ }).then(res => {
+ console.error(res)
+ })
+
+ //璁㈤槄璁惧鏁呴殰骞挎挱锛堝箍鎾笉鍦ㄤ箮瀹㈡埛绔痠d锛屽彂閫佺粰绉熸埛涓嬫墍鏈夊湪绾跨殑璁惧锛�
+ this.$mqttTool.subscribe({
+ topic: this.$constant.SERVICE_BROADCAST_TENANT_REAL_FAULT.replace('%s', this.tenantId),
+ qos: 0
+ }).then(res => {
+ console.error(res)
+ })
+
+ //璁㈤槄璁惧瀹炴椂鏁呴殰锛堜富鍔ㄨ姹傚彧鍙戠粰璇锋眰璁惧锛�
+ this.$mqttTool.subscribe({
+ topic: this.$constant.SERVICE_ONECE_TENANT_REAL_FAULT.replace('%s', 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
+ // }
+ let that = this
+ let client = this.$mqttTool.client
+
+ 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) {
+ uni.$emit(that.$constant.MQTT_TOPIC_MESSAGE, message);
+ console.error("鏀跺埌message锛堟�伙級锛�"+topic)
+
+
+ })
+ },
},
computed: {
tenantId() {
diff --git a/pages.json b/pages.json
index 611c480..f5f60bc 100644
--- a/pages.json
+++ b/pages.json
@@ -113,38 +113,44 @@
}
}
- },
- {
- "path" : "pages/tabBar/device",
- "style" :
- {
- "navigationStyle": "custom",
- "app-plus": {
- "titleNView": false
- }
- }
},
{
- "path" : "pages/tabBar/warning",
- "style" :
- {
+ "path": "pages/tabBar/device",
+ "style": {
"navigationStyle": "custom",
"app-plus": {
"titleNView": false
}
}
- },
- {
- "path" : "pages/device/control",
- "style" :
- {
- "navigationStyle": "custom",
- "app-plus": {
- "titleNView": false
- }
- }
+ },
+ {
+ "path": "pages/tabBar/warning",
+ "style": {
+ "navigationStyle": "custom",
+ "app-plus": {
+ "titleNView": false
+ }
+ }
+ },
+ {
+ "path": "pages/device/control",
+ "style": {
+ "navigationStyle": "custom",
+ "app-plus": {
+ "titleNView": false
+ }
+ }
+ },
+ {
+ "path": "pages/login/switchMode",
+ "style": {
+ "navigationStyle": "custom",
+ "app-plus": {
+ "titleNView": false
+ }
+ }
}
-
+
],
"globalStyle": {
"navigationBarTextStyle": "white",
@@ -167,17 +173,17 @@
"pagePath": "pages/tabBar/device",
"iconPath": "static/tabBar/shop.png",
"selectedIconPath": "static/tabBar/shop_cur.png",
- "text": "鐩戞帶"
+ "text": "鏈哄彴鐩戞帶"
}, {
"pagePath": "pages/tabBar/warning",
"iconPath": "static/tabBar/analy.png",
"selectedIconPath": "static/tabBar/analy_cur.png",
- "text": "鎶ヨ"
+ "text": "鎶ヨ閫氱煡"
}, {
"pagePath": "pages/tabBar/formula",
"iconPath": "static/tabBar/order.png",
"selectedIconPath": "static/tabBar/order_cur.png",
- "text": "閰嶆柟"
+ "text": "骞茬嚗閰嶆柟"
}, {
"pagePath": "pages/tabBar/me",
"iconPath": "static/tabBar/me.png",
diff --git a/pages/charts/charts.vue b/pages/charts/charts.vue
index a6f4080..3602342 100644
--- a/pages/charts/charts.vue
+++ b/pages/charts/charts.vue
@@ -113,7 +113,7 @@
export default {
data() {
return {
- text: '鏅鸿兘涓崏鑽共鐕ヨ澶囬厤濂楃郴缁�',
+ text: '鍏版郸鏅鸿兘骞茬嚗',
cWidth: '',
cHeight: '',
pixelRatio: 1,
diff --git a/pages/device/control.vue b/pages/device/control.vue
index 9a54dfc..fd543fd 100644
--- a/pages/device/control.vue
+++ b/pages/device/control.vue
@@ -291,12 +291,8 @@
// })
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
diff --git a/pages/login/login.vue b/pages/login/login.vue
index c12de54..9de81d6 100644
--- a/pages/login/login.vue
+++ b/pages/login/login.vue
@@ -2,7 +2,7 @@
<template>
<view class="contaier">
<view class="top-bg">
- <view class="text-white text-bold text-xxxl">鏅鸿兘涓崏鑽共鐕ヨ澶囬厤濂楃郴缁�</view>
+ <view class="text-white text-bold text-xxxl">鍏版郸<text @longpress="showModal">鏅鸿兘</text>骞茬嚗</view>
<view class="margin-top-xs text-white">娆㈣繋浣跨敤锛岃鍏堢櫥褰�</view>
</view>
<u-form labelPosition="left" :model="model" ref="form">
@@ -22,17 +22,27 @@
<view class="padding margin-top-xs">
<button @click="submit" class="cu-btn block round bg-login-zl margin-tb-sm lg">绔嬪嵆鐧诲綍</button>
<view class="text-gray flex justify-between padding-lr-sm">
- <text>娉ㄥ唽璐﹀彿</text>
- <text>蹇樿瀵嗙爜</text>
+ <!-- <text @click="switchMode">灞�鍩熺綉妯″紡</text> -->
+ <!-- <text>蹇樿瀵嗙爜</text> -->
</view>
</view>
</u-form>
+
+ <u-modal :show="show" title="鎻愮ず" @confirm="handleSwitchMode">
+ <view class="slot-content">
+ <u-input v-model="pass" style="width: 100%;" placeholder="璇疯緭鍏ョ鐞嗗憳瀵嗙爜" border="surround" password
+ clearable></u-input>
+ </view>
+ </u-modal>
+
</view>
</template>
<script>
export default {
data() {
return {
+ show: false,
+ pass: "",
model: {
username: "tongjitang",
password: "123456"
@@ -54,52 +64,56 @@
};
},
+
onLoad() {
const account = uni.getStorageSync('account');
if (account) {
this.model = account
}
- let _that = this
- // uni-app瀹㈡埛绔幏鍙杙ush瀹㈡埛绔爣璁�
- // uni.getPushClientId({
- // success: (res) => {
- // let push_clientid = res.cid
- // _that.model.username = push_clientid
- // console.log('瀹㈡埛绔帹閫佹爣璇�:', push_clientid)
- // },
- // fail(err) {
- // _that.model.username = err
- // console.log(err)
- // }
- // })
-
- // uni.onPushMessage((res) => {
- // _that.model.username = JSON.stringify(res)
- // console.log("鏀跺埌鎺ㄩ�佹秷鎭細", res) //鐩戝惉鎺ㄩ�佹秷鎭�
- // })
-
-
-
+ },
+ mounted() {
+ setTimeout(() => {
+ this.model.username = this.clientPushId
+ }, 1000)
},
computed: {
- cid() {
- return this.$store.getters.getCid; // 浣跨敤 getter 鑾峰彇 cid
+ clientPushId() {
+ return this.$store.getters.getClientPushId;
+
},
},
methods: {
-
+ showModal() {
+ this.pass = ""
+ this.show = true
+ },
+ handleSwitchMode() {
+ this.show = false
+ if (this.pass === 'lanbaoit') {
+ this.switchMode()
+ }
+ },
+ switchMode() {
+ uni.navigateTo({
+ url: "/pages/login/switchMode"
+ })
+ },
forget() {
uni.navigateTo({
url: "/pages/tabBar/demo"
})
},
submit() {
- if (this.model.username.startsWith("http")) {
- uni.setStorageSync('baseurl', this.model.username);
- this.model.username = null
- uni.$u.toast('閰嶇疆baseUrl鎴愬姛,璇烽��鍑虹▼搴忛噸鏂板惎鍔▇')
- return false;
+ const mode = uni.getStorageSync('mode');
+ //棣栨鐧诲綍娌℃湁閰嶇疆锛岄粯璁や负浜戞湇鍔℃ā寮�
+ if (!mode) {
+ uni.setStorageSync('mode', 'cloud');
}
+ const curMode = uni.getStorageSync('mode');
+
+ getApp().globalData.mode = curMode;
+
+
this.$refs.form.validate().then(res => {
this.login()
@@ -111,20 +125,15 @@
login() {
this.$api.login(this.model).then((res) => {
if (res.success) {
-
-
- console.log('request success', res)
uni.showToast({
title: '鐧诲綍鎴愬姛',
icon: 'success',
mask: true
});
-
+ //缂撳瓨淇℃伅
uni.setStorageSync('account', this.model);
uni.setStorageSync('userinfo', res.result.userInfo);
uni.setStorageSync('token', res.result.token);
-
-
uni.switchTab({
url: '/pages/tabBar/general'
@@ -143,9 +152,7 @@
console.log('request fail', err);
})
},
- onReset(e) {
- console.log(e)
- }
+
},
onReady() {
//onReady 涓簎ni-app鏀寔鐨勭敓鍛藉懆鏈熶箣涓�
diff --git a/pages/login/switchMode.vue b/pages/login/switchMode.vue
new file mode 100644
index 0000000..82fa679
--- /dev/null
+++ b/pages/login/switchMode.vue
@@ -0,0 +1,169 @@
+<template>
+ <view class="app">
+ <cu-custom bgColor="bg-gradual-blue" :isBack="true">
+ <block slot="content">鍒囨崲妯″紡</block>
+ </cu-custom>
+
+ <view class="cu-bar bg-white margin-top">
+ <view class="action sub-title">
+ <text class="text-xl text-bold text-blue text-shadow">褰撳墠妯″紡</text>
+ <text class="text-ABC text-blue">current</text>
+ </view>
+ </view>
+ <u-form labelPosition="left" ref="form">
+ <view class="padding-lr info-box">
+
+ <view class="cover-view" @tap.catch="showSelect">
+
+ </view>
+
+ <view style="position: relative;">
+ <u-form-item label="妯″紡" prop="username" borderBottom>
+ <u-input v-model="sModel" border="none" suffixIcon="arrow-right" readonly></u-input>
+ </u-form-item>
+ </view>
+
+
+
+
+ <u-form-item label="鍦板潃" prop="password" borderBottom v-show="showIp">
+ <u-input v-model="ip" placeholder="璇疯緭鍏P鍦板潃,濡�:192.168.1.1" border="none" clearable>
+ </u-input>
+ </u-form-item>
+
+ <view class="submitBtn" @click="saveMode">淇濆瓨</view>
+ <view style="height: 20rpx;background-color: white"></view>
+ </view>
+ </u-form>
+
+ <u-action-sheet :closeOnClickAction="true" @close="show=false" @select="selectMode" :safeAreaInsetBottom="true"
+ :actions="switchList" title="閫夋嫨妯″紡" cancelText="鍙栨秷" :show="show"></u-action-sheet>
+
+ </view>
+</template>
+
+<script>
+ import {
+ vShow
+ } from "vue";
+
+ export default {
+ data() {
+ return {
+ switchList: [{
+ name: '浜戞湇鍔�',
+ index: 0
+ }, {
+ name: '灞�鍩熺綉',
+ index: 1
+ }],
+ show: false,
+ sModel: '浜戞湇鍔�',
+ ip: '',
+ showIp: false,
+ selectModeIndex: 0,
+
+ };
+ },
+ mounted() {
+ const mode = uni.getStorageSync('mode');
+ const lan_ip = uni.getStorageSync('lan_ip');
+ if (mode) {
+ if (mode == 'cloud') {
+ this.sModel = '浜戞湇鍔�'
+ this.showIp = false
+ } else if (mode == 'lan') {
+ this.sModel = '灞�鍩熺綉'
+ this.showIp = true
+ }
+
+ if (this.sModel == '灞�鍩熺綉') {
+ this.ip = lan_ip
+ }
+
+ }
+ },
+ methods: {
+ showSelect() {
+ this.show = true
+ },
+ selectMode(item) {
+ this.sModel = item.name
+ console.error(item.index)
+ this.showIp = item.index === 1
+ this.selectModeIndex = item.index
+
+ },
+ saveMode() {
+ if (!this.ip | !this.isValidIPv4(this.ip)) {
+
+ uni.$u.toast('璇疯緭鍏ユ纭甀P鍦板潃~')
+ return false
+
+ }
+
+ if (this.selectModeIndex === 0) {
+ uni.removeStorageSync('lan_ip')
+ uni.setStorageSync('mode', 'cloud');
+ } else if (this.selectModeIndex === 1) {
+ uni.setStorageSync('mode', 'lan');
+ uni.setStorageSync('lan_ip', this.ip);
+ }
+
+ uni.$u.toast('閰嶇疆鎴愬姛,璇峰畬鍏ㄩ��鍑虹▼搴忓悗閲嶆柊鍚姩~')
+ },
+ isValidIPv4(ip) {
+ const ipv4Regex =
+ /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
+ return ipv4Regex.test(ip);
+ }
+ }
+ }
+</script>
+
+<style lang="scss">
+ .cover-view {
+ position: absolute;
+ /* 蹇呴』鏄浉瀵瑰畾浣嶆垨缁濆瀹氫綅 */
+ z-index: 10;
+ /* 纭繚 z-index 鍊奸珮浜� u-input */
+ width: 100%;
+ height: 80rpx;
+ background-color: transparent;
+ }
+
+ .info-box {
+ position: relative;
+ background-color: white;
+ }
+
+ .distinguishBox {
+ padding: 5rpx 30rpx 20rpx;
+ background: white;
+
+ view {
+ margin-bottom: 20rpx;
+ }
+ }
+
+ .disLabel {
+ text-align-last: justify;
+ text-align: justify;
+ text-justify: distribute-all-lines;
+ min-width: 142rpx;
+ display: inline-block;
+ margin-right: 5rpx;
+ }
+
+ .submitBtn {
+ width: 90%;
+ height: 90rpx;
+ background: #007aec;
+ line-height: 90rpx;
+ margin: 50rpx auto;
+ text-align: center;
+ font-size: 34rpx;
+ color: #fff;
+ border-radius: 12rpx;
+ }
+</style>
\ No newline at end of file
diff --git a/pages/tabBar/components/hisWarning.vue b/pages/tabBar/components/hisWarning.vue
new file mode 100644
index 0000000..91fd69a
--- /dev/null
+++ b/pages/tabBar/components/hisWarning.vue
@@ -0,0 +1,599 @@
+<template>
+ <view>
+ <view class="card-box center dynamic shadow">
+ <view class="title-box margin-bottom-sm">
+ <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-blue text-sm">鏇村></text>
+ </view>
+
+ </view>
+
+ </view>
+
+
+ <view class="borderTop">
+ <view class="h-table">
+ <view class="h-tr h-tr-2 ">
+ <view class="h-td">鏈哄彴</view>
+ <view class="h-td">鏁呴殰</view>
+ <view class="h-td">鏃堕棿</view>
+ <view class="h-td">绫诲瀷</view>
+ </view>
+ <view class="h-tr h-tr-2" v-for="(item,index) in faultList">
+ <view class="h-td">{{item.equName}}</view>
+ <view class="h-td text-ellipsis">{{item.faultName}}</view>
+ <view class="h-td text-ellipsis">{{item.faultTimeStr}}</view>
+ <view class="h-td">{{item.faultType===1?'鏁呴殰':'鍛婅'}}</view>
+ </view>
+
+ </view>
+
+ </view>
+
+
+ </view>
+
+ <view class="card-box center dynamic shadow">
+ <view class="title-box margin-bottom-sm">
+ <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 text-sm"></text>
+ </view>
+
+ </view>
+
+ </view>
+
+
+ <view class="chartsMain" style="height: 400rpx;">
+ <!-- <qiun-data-charts type="mount" :opts="opts" :ontouch='true' :animation="true" :chartData="mountData" /> -->
+ <qiun-data-charts canvasId="chat1" type="column" :errorMessage="errorMessage1"
+ :opts="opts" :ontouch='true' :animation="true" :chartData="statisData" />
+
+ </view>
+ </view>
+
+
+ <view class="card-box center dynamic shadow">
+ <view class="title-box margin-bottom-sm">
+ <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 text-sm"></text>
+ </view>
+
+ </view>
+
+ </view>
+
+ <view class="chartsMain">
+ <qiun-data-charts canvasId="chat2" type="pie" :errorMessage="errorMessage2"
+ :opts="optsPie" :ontouch='true' :animation="true" :chartData="pieData" />
+
+ </view>
+ </view>
+
+
+
+ <view class="card-box center dynamic shadow">
+ <view class="title-box margin-bottom-sm">
+ <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 text-sm"></text>
+ </view>
+
+ </view>
+
+ </view>
+
+
+ <view class="chartsMain" style="height: 500rpx;">
+ <!-- <qiun-data-charts type="mount" :opts="{extra:{mount:{type:'mount',widthRatio:1.5}}}"
+ :chartData="Mount" /> -->
+ <qiun-data-charts canvasId="chat3" type="word" :errorMessage="errorMessage3"
+ :chartData="wordData" />
+ </view>
+ </view>
+
+ <view class="card-box bot dynamic shadow">
+ <view class="title-box margin-bottom-sm">
+ <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 text-sm"></text>
+ </view>
+
+ </view>
+
+ </view>
+
+
+ <view class="chartsMain" style="height: 500rpx;">
+ <qiun-data-charts canvasId="chat4" type="line" :opts="optsStep"
+ :errorMessage="errorMessage4" :ontouch='true' :animation="true" :chartData="statisData" />
+
+ <!-- <qiun-data-charts type="radar" :opts="optsRadar" :chartData="dataRadar" /> -->
+ </view>
+ </view>
+
+
+ </view>
+
+
+</template>
+
+<script>
+ import dayjs from 'dayjs'
+ export default {
+ data() {
+ return {
+ "PieA": {
+ "series": [{
+ "data": [
+
+ ]
+ }]
+ },
+ errorMessage1: "",
+ errorMessage2: "",
+ errorMessage3: "",
+ errorMessage4: "",
+ faultList: [],
+ pieData: {
+ "series": [{
+ "data": []
+ }]
+ },
+ statisData: {
+ series: [],
+ categories: []
+ },
+ wordData: {
+ series: []
+ },
+ optsStep: {
+ enableScroll: true,
+ xAxis: {
+ marginTop: 10,
+ itemCount: 8,
+ rotateLabel: true
+ },
+ extra: {
+ line: {
+ type: 'step'
+ }
+ }
+ },
+ opts: {
+ enableScroll: true,
+ xAxis: {
+ marginTop: 10,
+ itemCount: 8,
+ rotateLabel: true
+ },
+ legend: {
+ show: false
+ },
+ yAxis: {
+ data: [{
+ min: 0
+ }]
+ },
+ extra: {
+ column: {
+ width: 12,
+ seriesGap: 5,
+ barBorderRadius: [6, 6, 6, 6]
+ }
+ }
+ },
+ optsPie: {
+ padding: [5, 5, 5, 5],
+ legend: {
+ show: false
+ },
+ fontSize: 12,
+ extra: {
+ pie: {
+ activeOpacity: 0.5,
+ activeRadius: 10,
+ offsetAngle: 0,
+ labelWidth: 1,
+ border: true,
+ borderWidth: 3,
+ borderColor: "#FFFFFF",
+ linearType: "custom"
+ }
+ }
+ },
+
+ }
+ },
+ mounted() {
+ setTimeout(() => {
+ this.init()
+ }, 300)
+ },
+ methods: {
+ init() {
+ // 鑾峰彇N澶╁墠鐨�0鐐�0鍒�0绉�
+ let daysAgo = dayjs().subtract(3, 'day').startOf('day').format('YYYY-MM-DD HH:mm:ss');
+ // 鑾峰彇浠婂ぉ鐨�23鐐�59鍒�59绉�
+ let today = dayjs().endOf('day').format('YYYY-MM-DD HH:mm:ss');
+
+ let params = {
+ column: 'createTime',
+ order: 'desc',
+ startTime_begin: daysAgo,
+ startTime_end: today,
+ pageNo: 1,
+ pageSize: 3
+ }
+ this.$api.queryHisFaultList(params).then((res) => {
+ this.faultList = res.result.records
+ }).catch(res => {
+
+ })
+
+
+ let chartParam = {
+ startTime_begin: daysAgo,
+ startTime_end: today,
+ }
+ this.statisData = {}
+ this.pieData = {}
+ this.wordData = {}
+ this.$api.queryHisFaultChartList(chartParam).then((res) => {
+
+ // 鏌辩姸鍥�
+ const statis = {
+ series: [],
+ categories: []
+ };
+ //楗煎浘
+ const pieData = {
+ series: [{
+ data: []
+ }]
+ };
+ //璇嶄簯鍥�
+ const wordData = {
+ series: []
+ };
+ this.$emit('handleData', res)
+ // 妫�鏌� res 鏄惁涓� null 鎴栬�呬笉鏄竴涓暟缁�
+ if (!Array.isArray(res) || res === null || res.length === 0) {
+
+ this.errorMessage1 = "鏆傛棤鏁版嵁"+ dayjs().format('HH:mm:ss');
+ this.errorMessage2 = "鏆傛棤鏁版嵁"+ dayjs().format('HH:mm:ss');
+ this.errorMessage3 = "鏆傛棤鏁版嵁"+ dayjs().format('HH:mm:ss');
+ this.errorMessage4 = "鏆傛棤鏁版嵁"+ dayjs().format('HH:mm:ss');
+ return;
+ }
+
+
+ console.error(res)
+
+ // 鍗曟閬嶅巻 res锛屽悓鏃跺鎵炬渶澶� ecount 骞舵瀯寤� categories銆乨ata 鍜� pieData
+ const result = res.reduce((acc, item) => {
+ if (item.faultType === 1) {
+ acc.categories.push(item.faultName);
+ const value = item.ecount;
+ acc.data.push({
+ value,
+ color: undefined // 鍏堜笉璁惧畾棰滆壊
+ });
+
+ }
+ // 鏇存柊鏈�澶� ecount
+ if (item.ecount > acc.maxEcount) {
+ acc.maxEcount = item.ecount;
+ }
+
+ return acc;
+ }, {
+ maxEcount: 0,
+ categories: [],
+ data: []
+ });
+
+ // 绗簩娆¢亶鍘� data 鏁扮粍锛屼负鎵�鏈夋渶澶� ecount 璁剧疆棰滆壊
+ result.data.forEach((item, index) => {
+ if (item.value === result.maxEcount) {
+ result.data[index].color = '#f04864';
+ }
+ });
+
+ // 灏嗗鐞嗙粨鏋滆祴鍊肩粰 statis
+ statis.series.push({
+ name: "鏁呴殰",
+ data: result.data.map(item => 'color' in item ? item : item.value)
+ });
+ statis.categories = result.categories;
+
+
+
+ res.filter(item => item.faultType == 1).forEach(item => {
+ // 鏋勫缓 pieData
+ pieData.series[0].data.push({
+ name: item.faultName,
+ value: item.ecount,
+ labelText: item.faultName + ":" + item.ecount + "娆�"
+ });
+ })
+
+
+
+ // 璁剧疆鍒扮粍浠跺睘鎬�
+ this.statisData = statis;
+ this.pieData = pieData;
+ if (this.statisData.series.length === 0) {
+ this.errorMessage1 = "鏆傛棤鏁版嵁"+ dayjs().format('HH:mm:ss');
+ this.errorMessage4 = "鏆傛棤鏁版嵁"+ dayjs().format('HH:mm:ss');
+ }
+
+ if (this.pieData.series[0].data.length === 0) {
+ this.errorMessage2 = "鏆傛棤鏁版嵁"+ dayjs().format('HH:mm:ss');
+ }
+
+
+ const cdata = res.filter(item => item.faultType === 1).map(item => ({
+ faultName: item.faultName,
+ ecount: item.ecount
+ }));
+ console.error(cdata)
+ const wordCloudData = this.generateWordCloudData(cdata)
+
+ wordData.series = wordCloudData
+ this.wordData = wordData
+ console.error(this.wordData)
+ if (this.wordData.series.length === 0) {
+ this.errorMessage3 = "鏆傛棤鏁版嵁"+ dayjs().format('HH:mm:ss');
+ }
+
+
+ }).catch(res => {
+
+ })
+
+
+ },
+ generateWordCloudData(data) {
+ // 瀹氫箟瀛椾綋澶у皬鑼冨洿
+ const minFontSize = 10;
+ const maxFontSize = 20;
+
+ // 濡傛灉鏁版嵁涓虹┖鎴栦笉鏄暟缁勶紝鍒欒繑鍥炵┖鏁扮粍
+ if (!Array.isArray(data) || data.length === 0) {
+ return [];
+ }
+
+ // 鎵惧埌鏈�澶у拰鏈�灏忕殑鏁呴殰娆℃暟
+ let minCount = Infinity;
+ let maxCount = -Infinity;
+
+ data.forEach(item => {
+ if (item.ecount < minCount) minCount = item.ecount;
+ if (item.ecount > maxCount) maxCount = item.ecount;
+ });
+
+ // 濡傛灉鎵�鏈夋晠闅滄鏁伴兘鐩稿悓锛屽垯鐩存帴涓烘瘡涓潯鐩缃浉鍚岀殑瀛椾綋澶у皬
+ if (minCount === maxCount) {
+ return data.map(item => ({
+ name: item.faultName,
+ textSize: maxFontSize
+ }));
+ }
+
+ // 璁$畻姣忎釜鏉$洰鐨勫瓧浣撳ぇ灏�
+ const wordCloudData = data.map(item => {
+ const fontSize = ((maxFontSize - minFontSize) * (item.ecount - minCount)) / (maxCount -
+ minCount) + minFontSize;
+ return {
+ name: item.faultName,
+ textSize: Math.round(fontSize) // 鍙�夛細鍥涜垗浜斿叆鍒版渶鎺ヨ繎鐨勬暣鏁�
+ };
+ });
+ return wordCloudData;
+ },
+
+
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+ @import "components/table/helang-table";
+
+ .app {}
+
+ .card-box {
+ margin: 20rpx;
+ padding: 20rpx;
+ box-sizing: border-box;
+ background-color: white;
+ border-radius: 20rpx;
+ font-family: Helvetica Neue, Helvetica, sans-serif;
+
+ }
+
+ .text-ellipsis {
+ white-space: nowrap;
+ /* 闃叉鏂囨湰鎹㈣ */
+ overflow: hidden;
+ /* 瓒呭嚭閮ㄥ垎闅愯棌 */
+ text-overflow: ellipsis;
+ /* 瓒呭嚭閮ㄥ垎鐢ㄧ渷鐣ュ彿琛ㄧず */
+ max-width: 100%;
+ /* 璁剧疆鏈�澶у搴� */
+
+ }
+
+
+ .top {
+ margin: 0 20rpx;
+ border-radius: 0;
+ border-top-left-radius: 20rpx;
+ border-top-right-radius: 20rpx;
+ border-bot-left-radius: 0;
+ border-bot-right-radius: 0;
+
+ }
+
+ .center {
+ margin: 0 20rpx;
+ border-radius: 0;
+
+ }
+
+ .bot {
+ margin: 0 20rpx 20rpx 20rpx;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-bot-left-radius: 20rpx;
+ border-bot-right-radius: 20rpx;
+ }
+
+
+ .title-box {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+
+ .left {
+ display: flex;
+ align-items: center;
+
+ .title {
+ margin: 0 10rpx;
+ font-weight: bold;
+ }
+ }
+
+ .right {
+ display: flex;
+ align-items: center;
+
+ .title {
+ margin: 0 10rpx;
+ font-weight: bold;
+ }
+ }
+ }
+
+ .info-box {
+ margin-top: 20rpx;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+
+ .left {
+ display: flex;
+ align-items: center;
+
+ .title {
+ margin: 0 10rpx;
+ }
+ }
+
+ .right {
+ display: flex;
+ align-items: center;
+
+ .title {
+ margin: 0 10rpx;
+ }
+ }
+ }
+
+
+ .chartsMain {
+ width: 100%;
+ height: 320rpx;
+ padding-top: 15rpx;
+ background: #fff;
+ margin-bottom: 24rpx;
+ border-top: 2rpx solid #f2f2f2;
+
+ .charts {
+ width: 50%;
+ height: 450rpx;
+ box-sizing: border-box;
+ }
+ }
+
+ .tab-box {
+ display: flex;
+ justify-content: center;
+ /* 寮哄埗姘村钩灞呬腑 */
+ }
+
+ .swiper {
+ height: 2116rpx;
+ }
+
+ .swiper-item-view {
+ height: 2116rpx;
+
+
+ }
+
+
+
+
+
+
+
+ .picBox {
+ margin: 0 20rpx;
+ background-color: white;
+
+ image {
+ border-radius: 8rpx;
+ width: 100%;
+
+ }
+ }
+
+ .borderTop {
+ border-top: 2rpx solid #f2f2f2;
+ padding-top: 20rpx;
+ }
+
+ // 寮瑰嚭灞傝儗鏅伄缃﹕tart
+ .dropdown-mask {
+ background: rgba(0, 0, 0, 0.5);
+ }
+
+ .lock-page {
+ height: 100vh;
+ width: 100vw;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 998;
+ }
+
+ // 寮瑰嚭灞傝儗鏅伄缃〆nd
+</style>
\ No newline at end of file
diff --git a/pages/tabBar/components/realWarning.vue b/pages/tabBar/components/realWarning.vue
new file mode 100644
index 0000000..46e8640
--- /dev/null
+++ b/pages/tabBar/components/realWarning.vue
@@ -0,0 +1,455 @@
+<template>
+ <view>
+ <view class="card-box center dynamic shadow">
+ <view class="title-box margin-bottom-sm">
+ <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-blue text-sm">鏇村></text> -->
+ </view>
+
+ </view>
+
+ </view>
+ <view class="fault-box">
+
+ <image style="width: 100%;border-radius: 20rpx; " src="../../../static/image/ganzaoji-x.png"
+ mode="aspectFit">
+ </image>
+
+
+ <view class="fault-inner">
+ <view class="fault-info" v-for="(item,index) in realFaults" :style="getFaultItemStyle(item)">
+ <view :class="['fault-animal', item.type === 1 ? 'fault-marker' : 'warn-marker']"></view>
+ <view :class="['fault-tag', item.type === 1 ? 'fault-text' : 'warn-text']">{{item.name}}</view>
+ </view>
+ </view>
+ </view>
+
+ </view>
+
+
+
+ <view class="card-box center dynamic shadow">
+ <view class="title-box margin-bottom-sm">
+ <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-blue text-sm">{{refreshTime}}</text>
+ </view>
+
+ </view>
+
+ </view>
+ <view class="borderTop" v-for="(item,index) in dataList">
+ <view style="height: 180rpx;display: flex;align-items: center;">
+ <view>
+ <image style="width: 80rpx;height: 80rpx;margin:20rpx;border-radius: 20rpx; "
+ src="../../../static/image/pic_gz.jpg"></image>
+ </view>
+ <view
+ style="display: flex;flex: 1;flex-direction: column; justify-content: space-between; ;height: 100%;padding: 20rpx;">
+ <view class="text-bold">
+ {{$lget(item,'faultName')}}
+ </view>
+ <view class="text-gray text-sm">
+ 璁惧:{{$lget(item,'equName')}}
+ </view>
+ <view class="text-gray text-sm">
+ 绫诲瀷:{{checkFaultType($lget(item,'faultType'))}}
+ </view>
+ <view class="text-gray text-sm">
+ 鏁呴殰鏃堕棿:{{coverTime($lget(item,'startTime'))}}
+ </view>
+ </view>
+ <view style="width: 100rpx;"></view>
+
+ </view>
+ </view>
+
+ </view>
+
+
+ </view>
+
+
+</template>
+
+<script>
+ import dayjs from 'dayjs'
+ export default {
+ data() {
+ return {
+ dataList: [],
+ //瀹炴椂鎶ヨ鏁版嵁鏇存柊鏃堕棿锛堜竴鑸�10s锛�
+ refreshTime: '',
+ realFaults:[],
+ allFaults: [{ id: 1, name: '璁惧鎬ュ仠锛堟�伙級', type: 1, position: {top: 70,left: 230},show: false},
+ { id: 2, name: '宸﹀墠鎬ュ仠', type: 1, position: {top: 100,left: 250},show: false},
+ { id: 3, name: '鍑烘枡鎬ュ仠', type: 1, position: {top: 130,left: 230},show: false},
+ { id: 4, name: '闈㈡澘鎬ュ仠', type: 1, position: {top: 160,left: 250},show: false},
+ { id: 5, name: '椋庣鍗囪秴鏃�', type: 1, position: {top: 190,left: 230},show: false},
+ { id: 6, name: '椋庣闄嶈秴鏃�', type: 1, position: {top: 220,left: 250},show: false},
+ { id: 7, name: '椋庢満杩囨祦', type: 1, position: {top: 250,left: 230},show: false},
+ { id: 8, name: '婊氱瓛鍗囪秴鏃�', type: 1, position: {top: 280,left: 250},show: false},
+ { id: 9, name: '婊氱瓛闄嶈秴鏃�', type: 1, position: {top: 310,left: 230},show: false},
+ { id: 10, name: '婊氱瓛鐢垫満杩囨祦', type: 1, position: {top: 340,left: 250},show: false},
+ { id: 11, name: '娓╁害澶辨帶', type: 1, position: {top: 370,left: 230},show: false},
+
+ { id: 12, name: '宸﹀墠闂ㄦ姤璀�', type: 2, position: {top: 100,left: 0},show: false},
+ { id: 13, name: '宸﹀悗闂ㄦ姤璀�', type: 2, position: {top: 130,left: 20},show: false},
+ { id: 14, name: '鍙冲墠闂ㄦ姤璀�', type: 2, position: {top: 160,left: 0},show: false},
+ { id: 15, name: '鍙冲悗闂ㄦ姤璀�', type: 2, position: {top: 190,left: 20},show: false},
+ { id: 16, name: '婊氱瓛涓嶅湪楂樹綅', type: 2, position: {top: 220,left: 0},show: false},
+ { id: 17, name: '椋庣涓嶅湪楂樹綅', type: 2, position: {top: 250,left: 20},show: false},
+ { id: 18, name: '椋庣涓嶅湪浣庝綅', type: 2, position: {top: 280,left: 0},show: false},
+ { id: 19, name: '鍔犵儹浣嶄紶鎰熷櫒鎶ヨ', type: 2, position: {top: 310,left: 20},show: false},
+ { id: 20, name: '宸﹀墠椋庣楂樹綅', type: 2, position: {top: 340,left: 0},show: false},
+ { id: 21, name: '宸﹀墠椋庣浣庝綅', type: 2, position: {top: 370,left: 20},show: false},
+ { id: 22, name: '宸﹀悗椋庣楂樹綅', type: 2, position: {top: 100,left: 430},show: false},
+ { id: 23, name: '宸﹀悗椋庣浣庝綅', type: 2, position: {top: 130,left: 450},show: false},
+ { id: 24, name: '鍙冲墠椋庣楂樹綅', type: 2, position: {top: 160,left: 430},show: false},
+ { id: 25, name: '鍙冲墠椋庣浣庝綅', type: 2, position: {top: 190,left: 450},show: false},
+ { id: 26, name: '鍙冲悗椋庣楂樹綅', type: 2, position: {top: 220,left: 430},show: false},
+ { id: 27, name: '鍙冲悗椋庣浣庝綅', type: 2, position: {top: 250,left: 450},show: false},
+ { id: 28, name: '宸﹀墠婊氱瓛浣庝綅', type: 2, position: {top: 280,left: 430},show: false},
+ { id: 29, name: '宸﹀悗婊氱瓛浣庝綅', type: 2, position: {top: 310,left: 450},show: false},
+ { id: 30, name: '鍙冲墠婊氱瓛浣庝綅', type: 2, position: {top: 340,left: 430},show: false},
+ { id: 31, name: '鍙冲悗婊氱瓛浣庝綅', type: 2, position: {top: 370,left: 450},show: false},
+ ],
+ }
+ },
+ mounted() {
+ this.mqttData()
+
+
+ },
+ methods: {
+ mqttData() {
+ //澶勭悊瀹炴椂鎶ヨ鏁版嵁
+ uni.$on(this.$constant.MQTT_TOPIC_MESSAGE, (data) => {
+ let json = JSON.parse(data);
+ if (json == null || json.data == null || json.topic == null) return false
+ let wdata = json.data
+ let topic = json.topic
+ const realFaultTopic = this.$constant.SERVICE_BROADCAST_TENANT_REAL_FAULT.replace('%s', this
+ .tenantId)
+ const oneceFaultTopic = this.$constant.SERVICE_ONECE_TENANT_REAL_FAULT.replace('%s', this
+ .deviceId)
+ switch (topic) {
+ //topic 瀹炴椂鎶ヨ
+ case realFaultTopic:
+ case oneceFaultTopic:
+ if (wdata.length === 0) return false;
+ this.dataList = wdata
+ this.refreshTime = "鏇存柊鏃堕棿:" + dayjs().format('HH:mm:ss');
+
+ const realFaultNames = this.dataList.map(item => item.faultName);
+ const realFaults = this.allFaults.filter(item=>
+ realFaultNames.some(name =>
+ name.startsWith(item.name)
+ ))
+ this.realFaults = realFaults
+ //澶勭悊鏁版嵁缁熻
+ this.$emit('handleData', this.dataList)
+ break
+ }
+ });
+ },
+ getFaultItemStyle(item) {
+ return {
+ position: 'absolute',
+ top: `${item.position.top}rpx`,
+ left: `${item.position.left}rpx`,
+ fontSize: '24rpx',
+ };
+ },
+
+ checkFaultType(type) {
+ if (type === 1) {
+ return "鏁呴殰";
+ } else if (type === 2) {
+ return "鎶ヨ";
+ }
+ },
+ coverTime(timestamp) {
+ if (timestamp) {
+ return dayjs(timestamp).format('YYYY-MM-DD HH:mm:ss')
+ }
+
+ },
+ },
+ computed: {
+ tenantId() {
+ const userinfo = uni.getStorageSync('userinfo');
+ const tenantid = userinfo.loginTenantId
+ return tenantid + "";
+ },
+ deviceId() {
+ return uni.getStorageSync(this.$constant.DEVICE_ID);
+ }
+
+ },
+ }
+</script>
+
+<style lang="scss" scoped>
+ @import "components/table/helang-table";
+
+ .app {}
+
+ .card-box {
+ margin: 20rpx;
+ padding: 20rpx;
+ box-sizing: border-box;
+ background-color: white;
+ border-radius: 20rpx;
+ font-family: Helvetica Neue, Helvetica, sans-serif;
+
+ }
+
+
+ .top {
+ margin: 0 20rpx;
+ border-radius: 0;
+ border-top-left-radius: 20rpx;
+ border-top-right-radius: 20rpx;
+ border-bot-left-radius: 0;
+ border-bot-right-radius: 0;
+
+ }
+
+ .center {
+ margin: 0 20rpx;
+ border-radius: 0;
+
+ }
+
+ .bot {
+ margin: 0 20rpx 20rpx 20rpx;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-bot-left-radius: 20rpx;
+ border-bot-right-radius: 20rpx;
+ }
+
+
+ .title-box {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+
+ .left {
+ display: flex;
+ align-items: center;
+
+ .title {
+ margin: 0 10rpx;
+ font-weight: bold;
+ }
+ }
+
+ .right {
+ display: flex;
+ align-items: center;
+
+ .title {
+ margin: 0 10rpx;
+ font-weight: bold;
+ }
+ }
+ }
+
+ .info-box {
+ margin-top: 20rpx;
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+
+ .left {
+ display: flex;
+ align-items: center;
+
+ .title {
+ margin: 0 10rpx;
+ }
+ }
+
+ .right {
+ display: flex;
+ align-items: center;
+
+ .title {
+ margin: 0 10rpx;
+ }
+ }
+ }
+
+
+ .chartsMain {
+ width: 100%;
+ height: 320rpx;
+ padding-top: 15rpx;
+ background: #fff;
+ margin-bottom: 24rpx;
+ border-top: 2rpx solid #f2f2f2;
+
+ .charts {
+ width: 50%;
+ height: 450rpx;
+ box-sizing: border-box;
+ }
+ }
+
+ .tab-box {
+ display: flex;
+ justify-content: center;
+ /* 寮哄埗姘村钩灞呬腑 */
+ }
+
+ .swiper {
+ height: 2116rpx;
+ }
+
+ .swiper-item-view {
+ height: 2116rpx;
+
+
+ }
+
+ .fault-box {
+ width: 100%;
+ height: 460rpx;
+ position: relative;
+
+
+ .fault-inner {
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ padding: 20rpx 0;
+ background: transparent;
+ overflow: hidden;
+
+ .fault-info {
+ position: absolute;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ }
+
+ .fault-tag {
+ display: flex;
+ align-items: center;
+ margin-left: 6rpx;
+ height: 28rpx;
+ padding: 0 10rpx;
+ background: gray;
+ border-radius: 5rpx;
+ font-size: 22rpx;
+ font-weight: bold;
+ color: red;
+ white-space: nowrap; /* 涓嶆崲琛� */
+ overflow: hidden; /* 瓒呭嚭閮ㄥ垎闅愯棌 */
+ text-overflow: ellipsis; /* 瓒呭嚭閮ㄥ垎鐢ㄧ渷鐣ュ彿琛ㄧず */
+ }
+
+ .fault-marker{
+ width: 20rpx;
+ height: 20rpx;
+ background: red;
+ border-radius: 50%;
+ }
+ .warn-marker{
+ width: 24rpx;
+ height: 24rpx;
+ background: orange;
+ border-radius: 50%;
+ }
+ .fault-text{
+ color: red;
+ }
+ .warn-text{
+ color: orange;
+ }
+
+ .fault-animal {
+
+ -webkit-animation: scaleout 2s infinite ease-in-out;
+ animation: scaleout 2s infinite ease-in-out;
+ }
+
+ @-webkit-keyframes scaleout {
+ 0% {
+ -webkit-transform: scale(1);
+ }
+
+ 100% {
+ -webkit-transform: scale(1.1);
+ opacity: 0;
+ }
+ }
+
+ @keyframes scaleout {
+ 0% {
+ transform: scale(1);
+ -webkit-transform: scale(1);
+ }
+
+ 100% {
+ transform: scale(1.1);
+ -webkit-transform: scale(1.1);
+ opacity: 0;
+ }
+ }
+ }
+ }
+
+
+
+
+
+
+ .picBox {
+ margin: 0 20rpx;
+ background-color: white;
+
+ image {
+ border-radius: 8rpx;
+ width: 100%;
+
+ }
+ }
+
+ .borderTop {
+ border-top: 2rpx solid #f2f2f2;
+ padding-top: 20rpx;
+ }
+
+ // 寮瑰嚭灞傝儗鏅伄缃﹕tart
+ .dropdown-mask {
+ background: rgba(0, 0, 0, 0.5);
+ }
+
+ .lock-page {
+ height: 100vh;
+ width: 100vw;
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ z-index: 998;
+ }
+
+ // 寮瑰嚭灞傝儗鏅伄缃〆nd
+</style>
\ No newline at end of file
diff --git a/pages/tabBar/device.vue b/pages/tabBar/device.vue
index 90fe27e..9adac13 100644
--- a/pages/tabBar/device.vue
+++ b/pages/tabBar/device.vue
@@ -62,7 +62,7 @@
- <u-skeleton class=" " rows="20" :loading="loading" :title="false">
+ <u-skeleton 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)">
@@ -132,6 +132,9 @@
dataList: [],
curDate:uni.$u.timeFormat(new Date(), 'yyyy-mm-dd'),
}
+ },
+ onTabItemTap : function(e) {
+ getApp().globalData.selectTab = e.index
},
methods: {
queryList(pageNo, pageSize) {
@@ -156,7 +159,7 @@
})
},
- itemClick(item) {
+ itemClick(item) {
uni.navigateTo({
url: "/pages/device/control?code="+item.code+"&clientId="+item.clientId
})
diff --git a/pages/tabBar/formula.vue b/pages/tabBar/formula.vue
index 6a8baa5..fbd51e0 100644
--- a/pages/tabBar/formula.vue
+++ b/pages/tabBar/formula.vue
@@ -54,6 +54,9 @@
computed: {
},
+ onTabItemTap : function(e) {
+ getApp().globalData.selectTab = e.index
+ },
methods: {
showItem(item){
console.info(item)
diff --git a/pages/tabBar/general.vue b/pages/tabBar/general.vue
index 4dd41df..5dd04a6 100644
--- a/pages/tabBar/general.vue
+++ b/pages/tabBar/general.vue
@@ -1,76 +1,10 @@
<template>
<view class="app">
- <!-- <view class="cu-custom custom-bar" :style="[{height:CustomBar + 'px'}]">
- <view class="select-equ-box">
- <u-icon name="setting" color="rgb(255,255,255)" :size="20"></u-icon>
- <text style="margin-left: 10rpx;" @click="show">1鍙峰共鐕ユ満</text>
- <u-icon name="arrow-right" color="rgb(255,255,255)" :size="12"></u-icon>
- </view>
- </view>
- <view class="blank" :style="[{height:CustomBar + 'px'}]">
- </view>
-
- -->
- <cu-custom bgColor="bg-gradual-blue" :isBack="false">
- <block slot="content">鏅鸿兘涓崏鑽�</block>
+ <cu-custom bgColor="bg-gradual-blue" :isBack="false">
+ <block slot="content">鍏版郸鏅鸿兘骞茬嚗</block>
</cu-custom>
- <mqtt-view ref="mqttView"></mqtt-view>
+
<u-toast ref="uToast"></u-toast>
- <!-- <view class="card-box dynamic shadow cu-list menu">
- <view class="title-box">
- <view class="left">
- <uni-text class="cuIcon-titles text-blue"></uni-text>
- <view class="title">缁熻</view>
- </view>
- </view>
-
- <view class="cu-item" style="padding: 0;">
- <view class="content">
- <image src='/static/me/icon/bianqian.png' class='png' mode='aspectFit'></image>
- <text class="text-lg">鐑樺共鎬婚噺</text>
- </view>
- <view class="action">
- <view class="cu-tag radius bg-blue light">
- 1200kg
- </view>
- </view>
- </view>
-
- <view class="cu-item" style="padding: 0;">
- <view class="content">
- <image src='/static/me/icon/bianqian.png' class='png' mode='aspectFit'></image>
- <text class="text-lg">鐑樺共鏃堕暱</text>
- </view>
- <view class="action">
- <view class="cu-tag radius bg-blue light">
- 300鍒嗛挓
- </view>
- </view>
- </view>
-
- <view class="bxBox">
- <image src="/static/me/icon/bianqian.png" class="png" style="width: 48upx;
- height: 48upx;" mode="aspectFit"></image>
- <view style="padding-left: 10rpx;" class="text-lg">鐑樺共鑽潗</view>
- </view>
-
- <view class='padding-bottom-sm flex flex-wrap bg-white' style="justify-content: flex-end;">
- <view class="cu-tag margin-right-xs bg-blue light radius">
- 褰撳綊
- </view>
- <view class="cu-tag bg-purple light radius">
- 浜哄弬
- </view>
- <view class="cu-tag bg-brown light radius">
- 榫欓』鑽�
- </view>
-
- </view>
-
-
- </view> -->
-
-
<view class="card-box dynamic shadow">
<view class="title-box margin-bottom-sm">
<view class="left justify-between">
@@ -165,76 +99,82 @@
- <view class="card-box dynamic shadow">
+ <view class="card-box dynamic shadow" >
<view class="title-box">
<view class="left">
<uni-text class="cuIcon-titles text-blue"></uni-text>
<view class="title">鏄庣粏</view>
</view>
</view>
-
- <view class="data-item" v-for="(item, index) in herbList" :key="item.id" style="padding: 0 10rpx;">
- <view class="flex justify-between text-lg align-center padding-tb-xs">
- <view class="flex">
- <text>涓崏鑽�</text>
- <text>涓�</text>
- <text @click="showLongName(showValue(item.herbName))"
- class="text-cut flex-twice">{{showValue(item.herbName)}}</text>
- <!-- <view class="margin-lr-sm">
+ <u-skeleton rows="20" :loading="loading" :title="false">
+ <view class="data-item" v-for="(item, index) in herbList" :key="item.id" style="padding: 0 10rpx;">
+ <view class="flex justify-between text-lg align-center padding-tb-xs">
+ <view class="flex">
+ <text>涓崏鑽�</text>
+ <text>涓�</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> -->
- <view class="margin-lr-sm">
- <u-tag text="姝e父" plain size="mini" type="success"></u-tag>
+ <view class="margin-lr-sm">
+ <u-tag text="姝e父" plain size="mini" type="success"></u-tag>
+ </view>
+ </view>
+ <view style="width:160rpx;" class="flex align-center text-xs ">
+ <text>杩涘害:</text>
+ <view style="width: 100rpx;">
+ <u-line-progress :percentage="calcProgress(item.dryTime,item.et)"
+ height="10"></u-line-progress>
+ </view>
</view>
</view>
- <view style="width:160rpx;" class="flex align-center text-xs ">
- <text>杩涘害:</text>
- <view style="width: 100rpx;">
- <u-line-progress :percentage="calcProgress(item.dryTime,item.et)"
- height="10"></u-line-progress>
+
+ <view style="display: flex;flex-direction: row;height: 120rpx;">
+ <view class="image">
+ <image :src="dataList[0].goodsUrl" mode="aspectFill"></image>
+ </view>
+
+ <view class="flex flex-direction margin-left-xl margin-left-sm justify-center">
+ <view>
+ <text class="text-xxl text-green">{{showValue(item.target)}}%</text>
+ <text
+ class="text-xs margin-top-xs text-grey margin-left-xs text-line-through">{{showValue(item.initial)}}%</text>
+ </view>
+ <text class="text-xs margin-top-xs text-grey">鍚按鐜�</text>
+ </view>
+
+ <view class="flex flex-direction margin-left-xl margin-left-10p justify-center">
+ <view>
+ <text class="text-xxl">{{showValue(item.yield )}}kg</text>
+ <text
+ class="text-xs margin-top-xs text-grey margin-left-xs text-line-through">{{showValue(item.originWeight)}}kg</text>
+ </view>
+
+ <view class="text-xs margin-top-xs text-grey">
+ <text>{{showValue(item.feed)}}绛�</text>
+ <text style="margin: 0 10rpx;"> l </text>
+ <text>{{showValue(item.windTemp)}}鈩�</text>
+ <text style="margin: 0 10rpx;"> l </text>
+ <text>{{showValue(item.dryTime)}}min</text>
+ </view>
</view>
</view>
+ <u-gap height="10"></u-gap>
+ <view class="text-grey text-sm flex justify-between">
+ <text>{{showValue(item.code)}}</text>
+ <text>{{showValue(item.orderTime)}}</text>
+ </view>
+ <u-line color="#f1f1f1" margin="15rpx 0 15rpx 0"></u-line>
</view>
- <view style="display: flex;flex-direction: row;height: 120rpx;">
- <view class="image">
- <image :src="dataList[0].goodsUrl" mode="aspectFill"></image>
- </view>
- <view class="flex flex-direction margin-left-xl margin-left-sm justify-center">
- <view>
- <text class="text-xxl text-green">{{showValue(item.target)}}%</text>
- <text
- class="text-xs margin-top-xs text-grey margin-left-xs text-line-through">{{showValue(item.initial)}}%</text>
- </view>
- <text class="text-xs margin-top-xs text-grey">鍚按鐜�</text>
- </view>
- <view class="flex flex-direction margin-left-xl margin-left-10p justify-center">
- <view>
- <text class="text-xxl">{{showValue(item.yield )}}kg</text>
- <text
- class="text-xs margin-top-xs text-grey margin-left-xs text-line-through">{{showValue(item.originWeight)}}kg</text>
- </view>
-
- <view class="text-xs margin-top-xs text-grey">
- <text>{{showValue(item.feed)}}绛�</text>
- <text style="margin: 0 10rpx;"> l </text>
- <text>{{showValue(item.windTemp)}}鈩�</text>
- <text style="margin: 0 10rpx;"> l </text>
- <text>{{showValue(item.dryTime)}}min</text>
- </view>
- </view>
- </view>
- <u-gap height="10"></u-gap>
- <view class="text-grey text-sm flex justify-between">
- <text>{{showValue(item.code)}}</text>
- <text>{{showValue(item.orderTime)}}</text>
- </view>
- <u-line color="#f1f1f1" margin="15rpx 0 15rpx 0"></u-line>
- </view>
-
+ </u-skeleton>
</view>
+
+
+ <mqtt-view ref="mqttView"></mqtt-view>
<!--
<view class="page-box" v-show="false">
<view class="order" v-for="(res, index) in dataList" :key="res.id">
@@ -278,15 +218,15 @@
</view>
</view>
</view> -->
-
+
</view>
</template>
<script>
-
+ import get from 'lodash.get'
export default {
-
+
data() {
return {
list: [{
@@ -302,6 +242,7 @@
}],
StatusBar: this.StatusBar,
CustomBar: this.CustomBar,
+ loading: true,
percent: 50,
activeColor: '#0081ff',
monthList: [],
@@ -357,33 +298,44 @@
}
},
onShow() {
- console.info('onShow')
- uni.showTabBarRedDot({
- index: 2 // 鏄剧ず绗�2涓猼abbar椤癸紙绱㈠紩浠�0寮�濮嬶級鐨勭孩鐐�
- });
-
},
mounted() {
-
-
+
+
},
onReady() {
+ //鎺ユ敹鎶ヨ淇℃伅锛屾暟鎹澶勭悊锛堟湭鎵撳紑tab鏃犳硶鎺ユ敹鏁版嵁锛�
+ uni.$on(this.$constant.MQTT_TOPIC_MESSAGE, (data) => {
+ let json = JSON.parse(data);
+ if (json == null || json.data == null || json.topic == null) {
+ return false
+ }
+ //鍦ㄦ姤璀﹂〉闈㈡椂涓嶆樉绀虹孩鐐�
+ if (getApp().globalData.selectTab === 2) {
+ uni.hideTabBarRedDot({
+ index: 2
+ });
+ return false
+ }
+
+ let wdata = json.data
+ let topic = json.topic
+ switch (topic) {
+ //topic 瀹炴椂鎶ヨ
+ case this.$constant.SERVICE_BROADCAST_TENANT_REAL_FAULT.replace('%s', this.tenantId):
+ if (wdata.length > 0) {
+ uni.showTabBarRedDot({
+ index: 2 // 鏄剧ず绗�2涓猼abbar椤癸紙绱㈠紩浠�0寮�濮嬶級鐨勭孩鐐�
+ });
+ }
+ break
+ }
+
+ });
+
this.$refs.mqttView.initMqtt()
-
- // uni.getSystemInfo({
- // success: (res) => {
- // let deviceId = res.deviceId
- // if (!deviceId) {
- // deviceId = 'mobile-' + this.tenantId + '-' + Date.parse(new Date())
- // }
- // uni.setStorageSync(this.$constant.DEVICE_ID, 'mobile-' + this.tenantId + '-' + res.deviceId);
- // }
- // })
- // this.startConnect();
-
-
let month = uni.$u.timeFormat(new Date(), 'yyyy-mm')
this.getMonth(month)
@@ -393,16 +345,17 @@
},
- onLoad() {
-
+ onLoad() {},
+ onTabItemTap: function(e) {
+ getApp().globalData.selectTab = e.index
},
methods: {
-
+
/* 杩炴帴MQTT */
async startConnect() {
var _this = this
const account = uni.getStorageSync('account');
- const deviceid = uni.getStorageSync(this.$constant.DEVICE_ID);
+
if (!account) {
@@ -415,7 +368,7 @@
// #ifdef APP-PLUS
url: 'wx://' + this.$api.mqttBaseUrl + ':8083/mqtt',
// #endif
- clientId: deviceid,
+ clientId: this.deviceId,
username: account.username,
password: account.password
}
@@ -429,10 +382,18 @@
}).then(res => {
console.error(res)
})
-
- //璁㈤槄璁惧鏁呴殰骞挎挱锛堝箍鎾笉鍦ㄤ箮瀹㈡埛绔痠d锛屽彂閫佺粰绉熸埛涓嬫墍鏈夊湪绾跨殑璁惧锛�
+
+ //璁㈤槄璁惧瀹炴椂鏁呴殰骞挎挱锛堝箍鎾笉鍦ㄤ箮瀹㈡埛绔痠d锛屽彂閫佺粰绉熸埛涓嬫墍鏈夊湪绾跨殑璁惧锛�
this.$mqttTool.subscribe({
topic: this.$constant.SERVICE_BROADCAST_TENANT_REAL_FAULT.replace('%s', this.tenantId),
+ qos: 0
+ }).then(res => {
+ console.error(res)
+ })
+
+ //璁㈤槄璁惧瀹炴椂鏁呴殰锛堜富鍔ㄨ姹傚彧鍙戠粰璇锋眰璁惧锛�
+ this.$mqttTool.subscribe({
+ topic: this.$constant.SERVICE_BROADCAST_TENANT_REAL_FAULT.replace('%s', this.deviceId),
qos: 0
}).then(res => {
console.error(res)
@@ -477,17 +438,14 @@
},
dayChange(dayInfo) { // 鐐瑰嚮鏃ユ湡
this.model.date = dayInfo.date
- console.log("鐐瑰嚮鏃ユ湡", JSON.parse(JSON.stringify(dayInfo)));
this.getOrderList(dayInfo.date, dayInfo.date);
},
monthChange(monthInfo) { // 鍒囨崲鏈堜唤
- console.log("鍒囨崲鏈堜唤", JSON.parse(JSON.stringify(monthInfo)));
let m = monthInfo.month
if (m < 10) {
m = '0' + m
}
let month = monthInfo.year + '-' + m
- console.info(month)
this.getMonth(month)
},
showValue(value) {
@@ -495,10 +453,6 @@
return "--"
}
return value
- },
- show(e) {
- console.info(this.CustomBar)
-
},
goCharts(e) {
uni.navigateTo({
@@ -510,7 +464,11 @@
"orderTime_begin": date1 + " 00:00:00",
"orderTime_end": date2 + " 23:59:59",
}
+ this.loading = true;
this.$api.getOrderList(params).then((res) => {
+ setTimeout(()=>{
+ this.loading = false
+ },200)
if (res.success) {
this.herbList = res.result.records
@@ -533,8 +491,6 @@
this.model.batch = this.herbList.length
this.model.weight = weight
this.model.dryTime = dryTime
-
- console.info(this.model)
}
})
},
@@ -597,20 +553,29 @@
},
- computed:{
- tenantId(){
+ computed: {
+ tenantId() {
const userinfo = uni.getStorageSync('userinfo');
const tenantid = userinfo.loginTenantId
- return tenantid;
- }
-
+ return tenantid;
+ },
+ deviceId() {
+
+ return uni.getStorageSync(this.$constant.DEVICE_ID);
+ },
+
+
}
}
</script>
<style lang="scss" scoped>
- .app {}
+ .app {
+ width: 100%;
+ max-height: 100vh;
+ overflow: hidden;
+ }
.custom-bar {
background-image: linear-gradient(to right, #0381FF, #0381FF);
diff --git a/pages/tabBar/me.vue b/pages/tabBar/me.vue
index ec5bda3..a451278 100644
--- a/pages/tabBar/me.vue
+++ b/pages/tabBar/me.vue
@@ -32,7 +32,7 @@
<view class='text-center'>
<view class="cu-avatar2 round xl margin-right-sm shadow-blur-lg bg-img open-data"
style="overflow: hidden;">
- <image style="width: 100%; height: 100%;" src="../../static/me/icon/zhuti.png"></image>
+ <image style="width: 100%; height: 100%;" src="../../static/me/icon/zhuti.png"></image>
</view>
<view class="padding text-blue text-xl text-bold">
浣犲ソ
@@ -95,7 +95,7 @@
</view>
</view>
-
+
<view class="cu-item">
<view class='content'>
<image src='../../static/me/icon/dengta.png' class='png' mode='aspectFit'></image>
@@ -123,28 +123,28 @@
<image src='../../static/me/icon/jiankong.png' class='png' mode='aspectFit'></image>
<text class='text-lg margin-sm'>瀹炴椂鐩戞帶</text>
</button>
- </view>
-
- <view class="cu-item">
- <button class='content cu-btn' @click="itemClick('control')">
- <image src='../../static/me/icon/diannao.png' class='png' mode='aspectFit'></image>
- <text class='text-lg margin-sm'>杩滅▼鎺у埗</text>
- </button>
- </view> -->
+ </view>
+ <view class="cu-item">
+ <button class='content cu-btn' @click="itemClick('control')">
+ <image src='../../static/me/icon/diannao.png' class='png' mode='aspectFit'></image>
+ <text class='text-lg margin-sm'>杩滅▼鎺у埗</text>
+ </button>
+ </view> -->
+
<view class="cu-item">
<button class='content cu-btn' @click="itemClick('analy')">
<image src='../../static/me/icon/diannao.png' class='png' mode='aspectFit'></image>
<text class='text-lg margin-sm'>鍒嗘瀽</text>
</button>
- </view>
-
-
- <view class="cu-item">
- <button class='content cu-btn' @click="exit">
- <image src='../../static/me/icon/exit.png' class='png' mode='aspectFit'></image>
- <text class='text-lg margin-sm'>閫�鍑虹櫥褰�</text>
- </button>
+ </view>
+
+
+ <view class="cu-item">
+ <button class='content cu-btn' @click="exit">
+ <image src='../../static/me/icon/exit.png' class='png' mode='aspectFit'></image>
+ <text class='text-lg margin-sm'>閫�鍑虹櫥褰�</text>
+ </button>
</view>
</view>
@@ -166,8 +166,8 @@
// CustomBar: this.CustomBar,
spaceShow: true,
modalName: null,
- picName: '娴佹槦涔嬪',
- userinfo:{},
+ picName: '娴佹槦涔嬪',
+ userinfo: {},
pic: [{
link: 'data:image/jpeg;base64,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gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj5YYJggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ5wAEIigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFogAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxywBAgAAAAAAAAAAAFrAAAAA4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABW4IKwAAAAAAAAAAQ9CwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8IAAAQwAAAAAAAAygAHwAAAAAAAAAAAAADBTTTTTTTTTTTTTTTTTTTTTTSSAAAAAAAAAgAAABPQAAAAAAAAMggoAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAAAAAcMccYggAAAAAAAABDDDDDDDDDDDDDDDDDJSDDDDDDDDDDDDDDDDCDDDDDCLTDDDDDDDDDDDDAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAEKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAIQQQQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUYAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAEMMOQQQQQQQQQQQQQQMMMMMMMMMMMMMMMMMMMMMMMMMMMIIQQQQQQQQQQYQAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAABAAJQQQRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQQQQQQQQQQQQ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ktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktktkYySQ34x92mlksTHHhORhMmwaUURJusZVAhqJNccBOA+5LQWasBMbnyYx5ubmQQwrWFyH+5ozjaDGfDjYziRYTlMZ+3H8xS/lwl7mfrtnbUhpZt8FrOA6g4Cz5TovygRAoITDWT1/LYAXiLFTniSnw4v8c55uQkQxNNSmnKa/E5ZspEizFyzZLGmmuM49jJ+u8RJxvLp/wCv4JxJQjWDXFD6bf8At255D3rb9noTGTOqC5uzCSS6BZ/aIZg3MSeafFb4euXiKXQ/SEuqOhKqzhLmX/FNVfbOCULFOjUpkGIZeJTfFievkiU4cP5Q3ejUU2XIwNif8FRFFhNkMEvW6Ab5rJJLEbUwuYU8Pd5kY6MKybn/ABUHpgtAHNiPwxUqlFhCwekNxGC0CeW4UMhhi5pcgt2xY+WoE8Cz+Q4rFVPHwPW7QDSjpzGKoS0zDq0pzceT/FDEZhLZvyL3EfKCvFvyfJZDbbbbbbeL/R5ppmn+p5AvusSyaawfrVE9xYST4CXYTObMWx0WPkuC4L+MyiXNDyy/qX7NJqGsB5A01h5Nn969aNsMSJS23CSGhaKeVmeTUthNppNJvFT/ABcR4CsIuLm1ghXdchkklh+6GRKRzRmGYvjj1Zr7XrNz9PidXc2+BJJCESwS4L+KJMJbhJtKW8lvgPKTUZJ4Lov4o11xobDlDoJpoxNNSmn6xSo3GF5uyPce+oBcHwSolh/LADP04a0/1/Ja94klNNYjTrbQCnnk9Y4DcpyPmVkX8sqXon/gmIvp4aXm3H3PH+bk1Jbi4xeiYCjmiw3NWZo/V74clQueCqKwIQfxS0lhklxJQoLPcL3zf1yLA+R8asjr6YdjeCErhOp2gYylD3hqVz8CmMbUpLTa3Jc2QDbolOLoMkxg84u66nbJ2ydsnbJ2ydsnbJ2ydsiBYUupf7MVLEhJI60vstL7LS+y0vstL7LS+y0vstL7FhZilNpTX4gqOaCe0lpfZCjofNrxkRc8i6RDgvTOoqvxwkltvcZU3i0U9pFV+OEktt7+j3VJEsW2IMmJzbgYcMTm0i6oj4kyXkv1aNNNDoP1Z9sOnNV1/mpJNJGlLVovH6O1DtQ7UO1DtQ7UO1DtQ7UO1BoNm2Nt85gsj6LI+iyPosj6LI+iyPosj6LI+iyPoxF5MBNkjtQzURODDDFqSyPosj6LI+htMYLaayxjAzgpOMMMWpHthgtprJzGD9HvcrxoS5vi/wAvU5c0LQWFVP2XByP9UKaymBoZcfb0k9fuMSFjJqipvXQqb10Km9dCpvXQqb10Km9dCpvXQqb10Km9dCpvXQqb10Km9dCpvXQqb10Km9dCpvXQqb10Km9dCpvXQqb10Km9dCpvXQqb10Km9dCpvXQqb10Km9dCpvXQqb10Km9dCpvXQqb10Km9dCpvXQqb10Km9dBu3Lv9y3vLe8t7xLh20huMyHNsQ5tiHNsQ5tiHNsNwzcD5hvi5/ozuJ0+Cy6ekkJPFrDzF0nvlHjUyUmLBCztLO0s7SztLO0s7SztLO0s7SztLO0s7SztLO0s7SztLO0s7SztLO0s7SztLO0s7SztLO0s7SztLO0s7SztLO0s7SztLO0s7SztLO0s7SztLO0s7SztGkkS5qX0IbkxYP+ibQxpriJKUpihtfUobX1KG19ShtfUobX1KG19ShtfUobX1KG19ShtfUobX1KG19ShtfUobX1KG19ShtfUobX1KG19ShtfUobX1KG19ShtfUobX1KG19ShtfUobX1KG19ShtfUobX1KG19ShtfUobX1KG19ShtfUobX1KG19ShtfUobX1KG19ShtfUobX1KG19ShtfUobX1KG19ShtfUobX1GeLDksvGu2c2D24CGLhLZ8pYtIIlwWP8FZpprBxinz8jdvhk01rx9NNn0mWKfESnKdNPBw6iUkhZFl7F5eheXoXl6F5eheXoXl6F5eg4rwQ3BoLCdSwnUsJ1LCdSwnUsJ1LCdSwnUsJ1LCdSwnUsJ1LCdSwnUsJ1LCdSwnUsJ1LCdSwnUsJ1LCdSwnUsJ1LCdSwnUsJ1LCdSwnUsJ1LCdSwnUsJ1GUTRObQllLmW+b/AO3H/9k=',
name: '鏄ュぉ'
@@ -190,7 +190,7 @@
title: 'theme',
name: '娓呯埥澶忔棩',
color: ''
- }, {
+ }, {
title: 'theme',
name: '骞藉叞鏄熺┖',
color: ''
@@ -200,12 +200,12 @@
color: ''
}]
}
- },
- onReady() {
- const userinfo = uni.getStorageSync('userinfo');
- if(userinfo){
- this.userinfo = userinfo
- }
+ },
+ onReady() {
+ const userinfo = uni.getStorageSync('userinfo');
+ if (userinfo) {
+ this.userinfo = userinfo
+ }
},
watch: {
topBackGroupImageIndex(val) {
@@ -217,38 +217,45 @@
}
}
},
- mounted() {
+ mounted() {
+
},
- methods: {
- itemClick(mode){
- if(mode == 'control'){
- uni.navigateTo({
- url:"/pages/me/control"
- })
- }else if(mode == 'video'){
- uni.navigateTo({
- url:"/pages/me/video"
- })
- }else if(mode == 'analy'){
- uni.navigateTo({
- url:"/pages/me/analy"
- })
- }else if(mode == 'other'){
- uni.navigateTo({
- url:"/pages/tabBar/monitor"
- })
- }
+ onTabItemTap: function(e) {
+ getApp().globalData.selectTab = e.index
+ },
+ methods: {
+ itemClick(mode) {
+ if (mode == 'control') {
+ uni.navigateTo({
+ url: "/pages/me/control"
+ })
+ } else if (mode == 'video') {
+ uni.navigateTo({
+ url: "/pages/me/video"
+ })
+ } else if (mode == 'analy') {
+ uni.navigateTo({
+ url: "/pages/me/analy"
+ })
+ } else if (mode == 'other') {
+ uni.navigateTo({
+ url: "/pages/tabBar/monitor"
+ })
+ }
},
exit() {
this.show = true
},
confirm() {
- this.show = false
- uni.removeStorageSync('token');
- uni.removeStorageSync('userinfo');
- uni.reLaunch({
- url: '/pages/login/login'
+ this.show = false
+ uni.removeStorageSync('token');
+ uni.removeStorageSync('userinfo');
+ uni.reLaunch({
+ url: '/pages/login/login'
});
+ this.$mqttTool.end().then(res => {
+ console.error(res)
+ })
},
cancel() {
this.show = false
@@ -679,4 +686,4 @@
-moz-transform: scale(1) rotate(0) translate3d(-300rpx, 300rpx, 0);
}
}
-</style>
+</style>
\ No newline at end of file
diff --git a/pages/tabBar/warning.vue b/pages/tabBar/warning.vue
index 71ced45..590c26f 100644
--- a/pages/tabBar/warning.vue
+++ b/pages/tabBar/warning.vue
@@ -1,353 +1,152 @@
<template>
<view class="app">
- <cu-custom bgColor="bg-gradual-blue" :isBack="false" :isRight="true" @rightclick="rclick">
- <block slot="content">鎶ヨ</block>
+ <z-paging ref="paging" v-model="dataList" show-refresher-update-time @query="queryList">
+ <!-- 闇�瑕佸浐瀹氬湪椤堕儴涓嶆粴鍔ㄧ殑view鏀惧湪slot="top"鐨剉iew涓紝濡傛灉闇�瑕佽窡鐫�婊氬姩锛屽垯涓嶈璁剧疆slot="top" -->
+ <template #top>
+ <cu-custom bgColor="bg-gradual-blue" :isBack="false" :isRight="true" @rightclick="rclick">
+ <block slot="content">鎶ヨ</block>
- </cu-custom>
- <u-notice-bar text="12:20:10 1杞﹂棿GM001鏈哄彴鐢垫満杩囨祦(鐢垫皵)鎶ヨ" mode="closable"></u-notice-bar>
+ </cu-custom>
- <!--寮瑰嚭灞俿tart-->
- <view style="width: 100%; position: absolute;z-index: 1000;top:300rpx;padding: 20rpx;" @touchmove.prevent >
- <dropdown-menu v-show="filterMenuShow"@reset='resetMenu' @change='changeMenu' :list='equList' ref='dropdownMenuRef'/>
-
- </view>
- <view class="lock-page dropdown-mask" @touchmove.prevent @click.stop="1==1" v-if="filterMenuShow"></view>
-
- <!--寮瑰嚭灞俥nd-->
-
- <view class="card-box dynamic shadow">
- <view class="title-box margin-bottom-sm">
- <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 text-sm">2024-10-01 鑷� 2024-12-01</text>
- </view>
+ <!--寮瑰嚭灞俿tart-->
+ <view style="width: 100%; position: absolute;z-index: 1000;top:300rpx;padding: 20rpx;"
+ @touchmove.prevent>
+ <dropdown-menu v-show="filterMenuShow" @closeMenu="filterMenuShow = false " @reset='resetMenu' @change='changeMenu' :list='equList'
+ ref='dropdownMenuRef' />
</view>
+ <view class="lock-page dropdown-mask" @touchmove.prevent v-if="filterMenuShow"></view>
- </view>
- <view class="flex flex-direction padding-xs">
- <view class="flex">
- <view class="flex-sub flex flex-direction">
- <text class="text-df">鎶ヨ鎬绘暟</text>
- <text class="text-bold text-sl margin-top-xs text-red margin-top-sm">10
- <text class="text-gray text-sm margin-left-xs">娆�</text></text>
+ <!--寮瑰嚭灞俥nd-->
- </view>
- <view class="flex-twice flex flex-direction justify-between">
- <view class="flex-sub flex">
- <view class="flex flex-direction flex-sub">
- <text class="text-gray text-xs">鎶ヨ淇℃伅</text>
- <text class="text-black">
- <text class="text-black">鏈烘鏁呴殰:</text>
- <text class="margin-lr-xs text-orange">0</text>
- <text class="text-gray text-xs">娆�</text>
- </text>
-
+ <view class="card-box dynamic shadow">
+ <view class="title-box margin-bottom-sm">
+ <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 class="flex flex-direction flex-sub">
- <text class="text-white text-xs">鐢垫皵鏁呴殰</text>
- <text class="text-black">
- <text class="text-black">鐢垫皵鏁呴殰:</text>
- <text class="margin-lr-xs text-orange">1</text>
- <text class="text-gray text-xs">娆�</text>
- </text>
-
- </view>
-
- </view>
- <view class="flex-sub flex margin-top-sm">
- <view class="flex flex-direction flex-sub">
- <text class="text-gray text-xs">鎶ヨ淇℃伅</text>
- <text>
- <text class="text-black">閫氫俊鏁呴殰:</text>
- <text class="margin-lr-xs text-orange">4</text>
- <text class="text-gray text-xs">娆�</text>
- </text>
-
- </view>
- <view class="flex flex-direction flex-sub">
- <text class="text-white text-xs">鍏朵粬鏁呴殰</text>
- <text class="text-cyan">
- <text class="text-black">鍏朵粬鏁呴殰:</text>
- <text class="margin-lr-xs text-orange">5</text>
- <text class="text-gray text-xs">娆�</text>
- </text>
+ <view>
+ <text class="text-gray text-sm">{{curDate}}</text>
</view>
</view>
</view>
+ <view class="flex flex-direction padding-xs">
+ <view class="flex">
+ <view class="flex-sub flex flex-direction">
+ <text class="text-df">鎶ヨ鎬绘暟</text>
+ <text class="text-bold text-sl margin-top-xs text-red margin-top-sm">{{count}}
+ <text class="text-gray text-sm margin-left-xs">娆�</text></text>
- </view>
- <view class="margin-top">
- <u-scroll-list>
+ </view>
+ <view class="flex-twice flex flex-direction justify-between">
+ <view class="flex-sub flex">
+ <view class="flex flex-direction flex-sub">
+ <text class="text-gray text-xs">鎶ヨ淇℃伅</text>
- </u-scroll-list>
+ <text class="text-black">鏁呴殰娆℃暟:</text>
+ <text class="margin-lr-xs text-red text-bold text-xl">{{faultCount}}</text>
+ <text class="text-gray text-xs"></text>
+
+
+ </view>
+ <view class="flex flex-direction flex-sub">
+ <text class="text-gray text-xs">鏈哄彴淇℃伅</text>
+
+ <text class="text-black">鏁呴殰鏈哄彴:</text>
+ <text class="margin-lr-xs text-red">{{faultEqus}}</text>
+ <text class="text-gray text-xs"></text>
+
+
+ </view>
+
+ </view>
+ <view class="flex-sub flex">
+ <view class="flex flex-direction flex-sub" >
+ <text class="text-white text-xs">鎶ヨ淇℃伅</text>
+
+ <text class="text-black">鍛婅娆℃暟:</text>
+ <text class="margin-lr-xs text-orange text-bold text-xl">{{alarmCount}}</text>
+ <text class="text-gray text-xs"></text>
+
+
+ </view>
+ <view class="flex flex-direction flex-sub">
+ <text class="text-white text-xs">鏈哄彴淇℃伅</text>
+ <text class="text-black">鍛婅鏈哄彴:</text>
+ <text class="margin-lr-xs text-orange">{{alarmEqus}}</text>
+ <text class="text-gray text-xs"></text>
+
+ </view>
+
+ </view>
+
+ </view>
+
+ </view>
+ <view>
+ <u-scroll-list>
+
+ </u-scroll-list>
+
+ </view>
+
+ </view>
+
+
</view>
- </view>
+ </template>
-
-
- </view>
-
- <u-sticky>
<view class="tab-box card-box top dynamic shadow">
- <z-tabs ref="tabs" :active-style="{'font-size':'30rpx','font-weight':'bold'}" :current="tabCurrent"
- :list="tabList" @change="tabsChange">
- <!-- 鑷畾涔夊彸渚ф彃妲� -->
- <!-- <template v-slot:right>
- <u-icon name="setting" ></u-icon>
- </template> -->
+
+ <u-tabs :list="tabList" @click="tabsChange"></u-tabs>
+ <!-- <z-tabs ref="tabs" :active-style="{'font-size':'30rpx','font-weight':'bold'}" :current="tabCurrent"
+ :list="tabList" @change="tabsChange"> -->
+ <!-- 鑷畾涔夊彸渚ф彃妲� -->
+ <!-- <template v-slot:right>
+ <u-icon name="setting" ></u-icon>
+ </template> -->
</z-tabs>
</view>
- </u-sticky>
- <!-- 鍙�氳繃璁剧疆bar-animate-mode="worm"寮�鍚瘺姣涜櫕妯″紡-->
- <swiper :style="'height:' + swiperItemHeight[tabCurrent] + 'rpx;'" :current="tabCurrent"
- @transition="swiperTransition" @animationfinish="swiperAnimationfinish">
- <swiper-item :key="0">
- <view :style="'height:' + swiperItemHeight[0] + 'rpx;'">
- <view class="card-box center dynamic shadow">
- <view class="title-box margin-bottom-sm">
- <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-blue text-sm">鏇村></text> -->
- </view>
-
- </view>
-
- </view>
- <view class="borderTop">
- <image style="width: 100%;border-radius: 20rpx; " src="../../static/image/pic_gz.jpg"
- mode="aspectFit"></image>
- </view>
-
- </view>
-
- <view class="card-box center dynamic shadow">
- <view class="title-box margin-bottom-sm">
- <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-blue text-sm">鏇村></text> -->
- </view>
-
- </view>
-
- </view>
- <view class="borderTop" v-for="i in 10">
- <view style="height: 180rpx;display: flex;align-items: center;">
- <view>
- <image style="width: 80rpx;height: 80rpx;margin:20rpx;border-radius: 20rpx; "
- src="../../static/image/pic_gz.jpg"></image>
- </view>
- <view
- style="display: flex;flex: 1;flex-direction: column; justify-content: space-between; ;height: 100%;padding: 20rpx;">
- <view class="text-bold">
- 婊氱瓛鐢垫満杩囨祦鎶ヨ
- </view>
- <view class="text-gray text-sm">
- 璁惧:1鍙峰共鐕ユ満
- </view>
-
- <view class="text-gray text-sm">
- 鎻忚堪:鍚屾祹鍫�1鍙锋粴绛掔數鏈鸿繃娴佹姤璀︼紝闇�瑕亁xxx澶勭悊锛屼笢鏂硅埅绌虹殑鎭㈠寰堝揩鐨勫洖澶�
- </view>
-
- </view>
- <view style="width: 100rpx;">{{i}}</view>
-
- </view>
- </view>
-
- </view>
-
- <view class="card-box bot dynamic shadow">
- <view style="height: 20rpx;"></view>
- </view>
- </view>
- </swiper-item>
- <swiper-item :key="1">
- <view :style="'height:' + swiperItemHeight[1] + 'rpx;'">
- <view class="card-box center dynamic shadow">
- <view class="title-box margin-bottom-sm">
- <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-blue text-sm">鏇村></text>
- </view>
-
- </view>
-
- </view>
+ <!-- 濡傛灉甯屾湜鍏朵粬view璺熺潃椤甸潰婊氬姩锛屽彲浠ユ斁鍦▃-paging鏍囩鍐� -->
+ <real-warning ref="realWarining" v-if="tabCurrent === 0" @handleData="realHandleData"></real-warning>
+ <his-warning ref="hisWarining" v-else @handleData="hisHandleData"></his-warning>
- <view class="borderTop">
- <view class="h-table">
- <view class="h-tr h-tr-2 ">
- <view class="h-td">杞﹂棿</view>
- <view class="h-td">鏈哄彴</view>
- <view class="h-td">鏃堕棿</view>
- <view class="h-td">绫诲瀷</view>
- <view class="h-td">绛夌骇</view>
-
-
- </view>
- <view class="h-tr h-tr-2">
- <view class="h-td">001</view>
- <view class="h-td">GM001</view>
- <view class="h-td">12:00:00</view>
- <view class="h-td">鏈烘</view>
- <view class="h-td">楂�</view>
-
- </view>
- <view class="h-tr h-tr-2">
- <view class="h-td">001</view>
- <view class="h-td">GM001</view>
- <view class="h-td">12:00:00</view>
- <view class="h-td">閫氫俊</view>
- <view class="h-td">涓�</view>
-
- </view>
- <view class="h-tr h-tr-2">
- <view class="h-td">001</view>
- <view class="h-td">GM001</view>
- <view class="h-td">12:00:00</view>
- <view class="h-td">鐢垫皵</view>
- <view class="h-td">楂�</view>
-
- </view>
- </view>
-
- </view>
-
-
- </view>
-
- <view class="card-box center dynamic shadow">
- <view class="title-box margin-bottom-sm">
- <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 text-sm"></text>
- </view>
-
- </view>
-
- </view>
-
-
- <view class="chartsMain">
- <qiun-data-charts type="mount" :opts="opts" :animation="true" :chartData="Mount" />
- </view>
- </view>
-
-
- <view class="card-box center dynamic shadow">
- <view class="title-box margin-bottom-sm">
- <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 text-sm"></text>
- </view>
-
- </view>
-
- </view>
-
- <view class="chartsMain">
-
- <qiun-data-charts type="pie" :opts="optsPie" :chartData="PieA" />
-
- </view>
- </view>
-
-
-
- <view class="card-box center dynamic shadow">
- <view class="title-box margin-bottom-sm">
- <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 text-sm"></text>
- </view>
-
- </view>
-
- </view>
-
-
- <view class="chartsMain">
- <!-- <qiun-data-charts type="mount" :opts="{extra:{mount:{type:'mount',widthRatio:1.5}}}"
- :chartData="Mount" /> -->
- <qiun-data-charts type="word" :chartData="Word" />
- </view>
- </view>
-
- <view class="card-box bot dynamic shadow">
- <view class="title-box margin-bottom-sm">
- <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 text-sm"></text>
- </view>
-
- </view>
-
- </view>
-
-
- <view class="chartsMain">
-
- <qiun-data-charts type="radar" :opts="optsRadar" :chartData="dataRadar" />
- </view>
- </view>
-
-
- </view>
- </swiper-item>
- </swiper>
-
-
+ </z-paging>
</view>
</template>
<script>
import dropdownMenu from '@/components/drop-down-menu/index.vue'
+ import realWarning from './components/realWarning.vue'
+ import hisWarning from './components/hisWarning.vue'
+ import dayjs from 'dayjs'
export default {
components: {
- dropdownMenu
+ dropdownMenu,
+ realWarning,
+ hisWarning
},
data() {
return {
+ loading: true,
+ // v-model缁戝畾鐨勮繖涓彉閲忎笉瑕佸湪鍒嗛〉璇锋眰缁撴潫涓嚜宸辫祴鍊硷紒锛侊紒
+ dataList: [],
+ curDate: dayjs().format('YYYY-MM-DD'),
+ tabList: [{
+ name: '瀹炴椂鎶ヨ',
+ // badge: {
+ // count: 6
+ // }
+ }, {
+ name: '鎶ヨ缁熻',
+ }],
equList: [{
code: 1,
name: '1#骞茬嚗鏈�'
@@ -355,237 +154,207 @@
{
code: 2,
name: '2#骞茬嚗鏈�'
- }
+ }
],
- model: {},
+
+ //绛涢�夋
filterMenuShow: false,
+ //褰撳墠閫変腑tab
tabCurrent: 0,
- swiperItemHeight: [2800, 2140],
- tabList: [{
- name: '瀹炴椂鎶ヨ',
- badge: {
- count: 6
- }
- }, {
- name: '鎶ヨ缁熻',
- }],
- PieA: {
- "series": [{
- "data": [{
- "name": "鏈烘",
- "value": 50,
- "labelText": "鏈烘:50娆�"
- }, {
- "name": "鐢垫皵",
- "value": 30,
- "labelText": "鐢垫皵:30娆�"
- }, {
- "name": "閫氫俊",
- "value": 20,
- "labelText": "閫氫俊:20娆�"
- }, {
- "name": "鍏朵粬",
- "value": 18,
- "labelText": "鍏朵粬:18娆�"
- }]
- }]
- },
- dataRadar: {
-
- categories: ["鏈烘", "鐢垫皵", "閫氫俊", "鍏朵粬"],
- series: [{
- name: "鎶ヨ鍗犳瘮",
- data: [99, 30, 18, 73]
- }]
-
- },
-
- Mount: {
- "series": [{
-
- "data": [{
- "name": "鏈烘",
- "value": 82
- }, {
- "name": "鐢垫皵",
- "value": 63
- }, {
- "name": "閫氫俊",
- "value": 86
- }, {
- "name": "鍏朵粬",
- "value": 65
- }]
- }]
- },
- Word: {
- "series": [{
- "name": "椋庢満杩囨祦",
- "textSize": 25
- }, {
- "name": "鍚庨棬鏈叧闂�",
- "textSize": 20
- }, {
- "name": "椋庣鍗囧紓甯�",
- "textSize": 20
- }, {
- "name": "鐢垫満杩囨祦",
- "textSize": 20
- }, {
- "name": "鍔犵儹浣嶄紶鎰熷櫒",
- "textSize": 20
- }, {
- "name": "鍔犵儹鏃堕棿寮傚父",
- "textSize": 20
- }, {
- "name": "婊氱瓛鍗囧紓甯�",
- "textSize": 20
- }, {
- "name": "椋庣涓嶅湪鍔犵儹浣�",
- "textSize": 20
- }, {
- "name": "婊氱瓛涓嶅湪鍔犵儹浣�",
- "textSize": 10
- }]
- },
- opts: {
- color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
- "#ea7ccc"
- ],
- padding: [15, 15, 0, 5],
- enableScroll: false,
- legend: {
- show: true
- },
-
- xAxis: {
- disableGrid: true
- },
- yAxis: {
- gridColor: "rgba(230,230,230,0.6)",
-
- data: [
-
- {
- min: 0
- }
- ]
- },
- extra: {
- mount: {
- type: "bar",
- widthRatio: 0.3,
- borderWidth: 0,
- barBorderRadius: [
- 50,
- 50,
- 50,
- 50
- ],
- linearType: "custom"
- }
- }
- },
- optsPie: {
- color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
- "#ea7ccc"
- ],
- padding: [5, 5, 5, 5],
- enableScroll: false,
- extra: {
- pie: {
- activeOpacity: 0.5,
- activeRadius: 10,
- offsetAngle: 0,
- labelWidth: 1,
- border: true,
- borderWidth: 3,
- borderColor: "#FFFFFF",
- linearType: "custom"
- }
- }
- },
- optsRadar: {
- color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
- "#ea7ccc"
- ],
- padding: [5, 5, 5, 5],
- dataLabel: true,
- dataPointShape: false,
- enableScroll: false,
- legend: {
- show: false,
- position: "right",
- lineHeight: 25
- },
- extra: {
- radar: {
- gridType: "circle",
- gridColor: "#CCCCCC",
- gridCount: 3,
- opacity: 1,
- max: 100,
- labelShow: true,
- linearType: "custom",
- border: false
- }
- }
- },
-
-
-
-
+ //瀹炴椂鎶ヨ鏁版嵁鏇存柊鏃堕棿锛堜竴鑸�10s锛�
+ refreshTime: '',
+ //鎶ヨ鎬绘暟
+ count: 0,
+ //鍛婅鎬绘暟
+ alarmCount: 0,
+ //鏁呴殰鎬绘暟
+ faultCount: 0,
+ //鏁呴殰鏈哄彴
+ faultEqus: "",
+ //鍛婅鏈哄彴
+ alarmEqus: "",
}
},
- computed: {
-
-
+ onTabItemTap: function(e) {
+ getApp().globalData.selectTab = e.index
},
- created() {
-
- },
- beforeDestroy() {
-
+ onShow() {
+ // //瀹炴椂鏁呴殰
+ // if(this.tabCurrent === 0){
+ // this.$nextTick(()=>{
+ // this.$refs.realWarining.queryRealFaultData()
+ // })
+ // }
+
+ //瀹炴椂鏁呴殰
+ if (this.tabCurrent === 0) {
+ this.queryRealFaultData()
+ }
+
+ },
+ onReady() {
+
},
methods: {
- mqttTopicMessage(){
- //澶勭悊娑堟伅閫昏緫
- switch(topic){
- case _this.$constant.SERVICE_BROADCAST_TENANT_REAL_FAULT.replace('%s', that.tenantId):
- console.error(that.$constant.SERVICE_BROADCAST_TENANT_REAL_FAULT.replace('%s', that.tenantId))
- console.error("鏀跺埌骞挎挱")
-
- break
- }
- },
- changeMenu(selectData){
- console.info(selectData)
- this.filterMenuShow = false
-
-
- },
- resetMenu(selectData){
- console.info(selectData)
-
- },
- rclick() {
- this.filterMenuShow=!this.filterMenuShow
+
+ queryList(pageNo, pageSize) {
+ this.loading = true;
+ // 缁勪欢鍔犺浇鏃朵細鑷姩瑙﹀彂姝ゆ柟娉曪紝鍥犳榛樿椤甸潰鍔犺浇鏃朵細鑷姩瑙﹀彂锛屾棤闇�鎵嬪姩璋冪敤
+ // 杩欓噷鐨刾ageNo鍜宲ageSize浼氳嚜鍔ㄨ绠楀ソ锛岀洿鎺ヤ紶缁欐湇鍔″櫒鍗冲彲
+ // 妯℃嫙璇锋眰鏈嶅姟鍣ㄨ幏鍙栧垎椤垫暟鎹紝璇锋浛鎹㈡垚鑷繁鐨勭綉缁滆姹�
+ const params = {
+ pageNo: pageNo,
+ pageSize: pageSize,
+ }
+ //
+
+
+ this.$api.querySampleList(params).then((res) => {
+ // // 灏嗚姹傜殑缁撴灉鏁扮粍浼犻�掔粰z-paging
+ //瀹炴椂鏁呴殰
+ if (this.tabCurrent === 0) {
+ this.queryRealFaultData()
+ }else if(this.tabCurrent === 1){
+ this.$refs.hisWarining.init();
+ }
+
+ 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
+ })
+
+
},
//tabs閫氱煡swiper鍒囨崲
- tabsChange(index) {
- this.tabCurrent = index;
+ tabsChange(item) {
+ this.tabCurrent = item.index;
+ //閲嶇疆鏁呴殰缁熻鏁版嵁
+ this.count = 0;
+ this.alarmCount = 0;
+ this.faultCount = 0;
+ this.faultEqus = "";
+ this.alarmEqus = "";
+ //瀹炴椂鏁呴殰
+ if (this.tabCurrent === 0) {
+ // this.$nextTick(()=>{
+ // this.$refs.realWarining.queryRealFaultData()
+
+ // })
+ this.queryRealFaultData()
+
+ this.curDate = dayjs().format('YYYY-MM-DD');
+ }else if(this.tabCurrent === 1){
+ this.curDate = dayjs().subtract(3, 'day').format('YYYY-MM-DD') +" - "+ dayjs().format('YYYY-MM-DD');
+
+ }
+
+
},
- //swiper婊戝姩涓�
- swiperTransition(e) {
- this.$refs.tabs.setDx(e.detail.dx);
+ realHandleData(data) {
+ if (!data) return false
+ this.count = data.length
+ this.faultCount = data.filter(item => item.faultType === 1).length;
+ this.alarmCount = data.filter(item => item.faultType === 2).length;
+
+ const faultEquList = [...new Set(
+ data
+ .filter(item => item.faultType === 1) // 鏍规嵁鏁呴殰绫诲瀷杩囨护
+ .map(item => {
+ const match = item.equName.match(/(\d+#)/);
+ return match ? match[0] : null; // 濡傛灉鍖归厤鎴愬姛锛屽垯杩斿洖鍖归厤鐨勭紪鍙凤紱鍚﹀垯杩斿洖null
+ })
+ .filter(Boolean) // 鍐嶆杩囨护鎺夊彲鑳藉瓨鍦ㄧ殑null鍊�
+ )];
+ if (faultEquList) {
+ this.faultEqus = faultEquList.join(',');
+ }
+
+
+
+ const alarmEquList = [...new Set(
+ data
+ .filter(item => item.faultType === 2) // 鏍规嵁鏁呴殰绫诲瀷杩囨护
+ .map(item => {
+ const match = item.equName.match(/(\d+#)/);
+ return match ? match[0] : null; // 濡傛灉鍖归厤鎴愬姛锛屽垯杩斿洖鍖归厤鐨勭紪鍙凤紱鍚﹀垯杩斿洖null
+ })
+ .filter(Boolean) // 鍐嶆杩囨护鎺夊彲鑳藉瓨鍦ㄧ殑null鍊�
+ )];
+
+ if (alarmEquList) {
+ this.alarmEqus = alarmEquList.join(',')
+ }
+
+
+ },
+ hisHandleData(data){
+ if (!data) return false
+ this.count = data.reduce((sum, item) => sum + item.ecount, 0);
+ this.faultCount = data.filter(item => item.faultType === 1).reduce((sum, item) => sum + item.ecount, 0);
+ this.alarmCount = data.filter(item => item.faultType === 2).reduce((sum, item) => sum + item.ecount, 0);
+
},
- //swiper婊戝姩缁撴潫
- swiperAnimationfinish(e) {
- this.tabCurrent = e.detail.current;
- this.$refs.tabs.unlockDx();
+ changeMenu(selectData) {
+ console.info(selectData)
+ this.filterMenuShow = false
+
+
+ },
+ resetMenu(selectData) {
+ console.info(selectData)
+
+ },
+ rclick() {
+ this.filterMenuShow = !this.filterMenuShow
+ if (this.filterMenuShow) {
+ uni.pageScrollTo({
+ scrollTop: 0,
+ duration: 300 // 婊氬姩鍔ㄧ敾鎸佺画鏃堕棿锛屽崟浣嶄负姣
+ });
+ }
},
- }
+ queryRealFaultData() {
+ //鍙戦�佹暟鎹�
+ const message = {
+ req: this.deviceId,
+ tenantId: this.tenantId,
+ timeStamp: new Date(),
+
+ }
+ let opts = {
+ topic: this.$constant.MOBILE_REQ_EQU_REAL_FAULT,
+ message: JSON.stringify(message),
+ }
+
+ this.$mqttTool.publish(opts).then(res => {
+ //console.error(res)
+ })
+ },
+
+
+
+ },
+ onReady() {
+
+ },
+ computed: {
+ tenantId() {
+ const userinfo = uni.getStorageSync('userinfo');
+ const tenantid = userinfo.loginTenantId
+ return tenantid + "";
+ },
+ deviceId() {
+ return uni.getStorageSync(this.$constant.DEVICE_ID);
+ },
+
+
+ },
}
</script>
@@ -593,8 +362,13 @@
@import "components/table/helang-table";
.app {
- position: relative;
+ width: 100%;
+ max-height: 100vh;
+ overflow: hidden;
}
+
+
+
.card-box {
margin: 20rpx;
@@ -741,6 +515,7 @@
.dropdown-mask {
background: rgba(0, 0, 0, 0.5);
}
+
.lock-page {
height: 100vh;
width: 100vw;
@@ -751,5 +526,6 @@
bottom: 0;
z-index: 998;
}
+
// 寮瑰嚭灞傝儗鏅伄缃〆nd
</style>
\ No newline at end of file
diff --git a/readMe.txt b/readMe.txt
new file mode 100644
index 0000000..c94b1ba
--- /dev/null
+++ b/readMe.txt
@@ -0,0 +1,3 @@
+娉ㄦ剰浜嬮」
+涓�銆併�婁簯鏈嶅姟銆嬪拰銆婂眬鍩熺綉銆嬩笉鍚屾ā寮忎笅閮ㄥ垎鎺ュ彛鏈夋墍涓嶅悓
+1.
diff --git a/store/index.js b/store/index.js
index ef969c7..c17daea 100644
--- a/store/index.js
+++ b/store/index.js
@@ -4,23 +4,27 @@
const store = new Vuex.Store({
state: {
- // 瀹氫箟cid榛樿鍊�
- cid: null
+ // 璁惧鍞竴鏍囪瘑锛屾帹閫佷娇鐢�
+ clientPushId: null,
+
},
mutations: {
- setCid(state, cid) {
- state.cid = cid;
+ setClientPushId(state, clientPushId) {
+ state.clientPushId = clientPushId;
},
+
},
actions: {
- setCid({ commit }, cid) {
- commit('setCid', cid);
+ setClientPushId({ commit }, clientPushId) {
+ commit('setClientPushId', clientPushId);
},
+
},
getters: {
- getCid(state) {
- return state.cid;
- }
+ getClientPushId(state) {
+ return state.clientPushId;
+ },
+
}
});
--
Gitblit v1.9.3