From 85a15646ffe20ed2bbb2042ec500df8c850a69cc Mon Sep 17 00:00:00 2001
From: zhuguifei <zhuguifei@zhuguifeideiMac.local>
Date: 星期五, 25 七月 2025 15:29:41 +0800
Subject: [PATCH] 首次提交

---
 packageA/pages/index/index.vue              |    0 
 package-lock.json                           |  496 ++++++---
 packageA/static/image/pic_gz.jpg            |    0 
 mqtt/MqttView.vue                           |   32 
 private.wxe6f8a31c3df63a20.key              |   27 
 packageA/pages/me/video.vue                 |    0 
 packageA/static/image/pic_gzj.jpg           |    0 
 App.vue                                     |   16 
 common/constant.js                          |   15 
 packageA/pages/me/control.vue               |    0 
 packageA/pages/charts/charts.vue            |    0 
 packageA/pages/login/switchMode.vue         |    0 
 pages/tabBar/warning-new.vue                |  267 +++++
 packageA/pages/category/formulaDetail.vue   |    0 
 pages/tabBar/general.vue                    |   10 
 packageA/pages/device/control.vue           |  969 ++++++++++++++++++++
 packageA/static/image/zcy_equipment_run.gif |    0 
 pages/tabBar/me.vue                         |    6 
 pages/login/login.vue                       |   10 
 packageA/pages/me/analy.vue                 |    2 
 packageA/static/image/ganzaoji-x.png        |    0 
 pages/tabBar/formula.vue                    |    2 
 pages.json                                  |  257 ++--
 pages/tabBar/device.vue                     |  375 +++++++
 packageA/static/.DS_Store                   |    0 
 common/api.js                               |   11 
 packageA/pages/analy/analyList.vue          |    0 
 pages/tabBar/components/equList.vue         |  224 ++++
 pages/tabBar/warning.vue                    |   25 
 /dev/null                                   |   27 
 manifest.json                               |   14 
 pages/tabBar/components/realWarning.vue     |    7 
 package.json                                |    2 
 packageA/static/image/zcy_gzj1.png          |    0 
 34 files changed, 2,358 insertions(+), 436 deletions(-)

diff --git a/App.vue b/App.vue
index 5fa7395..efd3631 100644
--- a/App.vue
+++ b/App.vue
@@ -33,16 +33,16 @@
 			//鎺ㄩ�佷粎鏀寔Android ios鍘熺敓骞冲彴
 			// #ifdef APP-PLUS
 			// 姝ゅ涓簎nipush1.0鐨勬帹閫佹柟娉�
-			plus.push.getClientInfoAsync((info) => {
-				let cid = info["clientid"];
-				console.log('瀹㈡埛绔帹閫佹爣璇�:', cid)
-				this.$store.dispatch('setClientPushId', cid); // 浣跨敤 action 鏇存柊 cid
+			// plus.push.getClientInfoAsync((info) => {
+			// 	let cid = info["clientid"];
+			// 	console.log('瀹㈡埛绔帹閫佹爣璇�:', cid)
+			// 	this.$store.dispatch('setClientPushId', cid); // 浣跨敤 action 鏇存柊 cid
 
-			});
+			// });
 			// #endif
-			uni.onPushMessage((res) => {
-				console.log("鏀跺埌鎺ㄩ�佹秷鎭細", res) //鐩戝惉鎺ㄩ�佹秷鎭�
-			})
+			// uni.onPushMessage((res) => {
+			// 	console.log("鏀跺埌鎺ㄩ�佹秷鎭細", res) //鐩戝惉鎺ㄩ�佹秷鎭�
+			// })
 
 			uni.getSystemInfo({
 				success: function(e) {
diff --git a/common/api.js b/common/api.js
index a405af4..8d4a91f 100644
--- a/common/api.js
+++ b/common/api.js
@@ -1,16 +1,19 @@
 import {
 	fly
-} from '@/common/request/fly.js'
+} from '@/common/request/fly.js'
+const base = "http://192.168.21.3:9999"
+// const base = "https://lanpucloud.cn"
+
 //閰嶇疆璇锋眰鍩哄湴鍧�
-fly.config.baseURL = "http://lanpucloud.cn/herb"
+fly.config.baseURL = base + ""
 const ip = uni.getStorageSync('lan_ip');
 if (ip) {
 	fly.config.baseURL = "http://" + ip + ":9999"
 }
 
 const mqttBaseUrl = "lanpucloud.cn";
-const emqxBaseUrl = "http://" + mqttBaseUrl + ":1883/api/v5"
-
+const emqxBaseUrl =  base + ":1883/api/v5";
+ 
 // 娴嬭瘯
 function test(params) {
 	return fly.get('/test/jeecgDemo/queryById', params);
diff --git a/common/constant.js b/common/constant.js
index 1b56fee..0424dc2 100644
--- a/common/constant.js
+++ b/common/constant.js
@@ -12,8 +12,8 @@
 //瑙f瀽鏃秂qu鏇挎崲鎴愮湡瀹炶澶囧敮涓�鏍囪瘑
 //涓嬭鎸囦护鍓嶇紑
 const SERVICE_DOWN = "service/down/res"
-//璇锋眰鏌ヨ璁惧鐘舵��
-const SERVICE_RES_EQU_STATU = SERVICE_DOWN + "/equ/statu"
+//鏌ヨ璁惧鐘舵�佸搷搴�  锛�%s-璇锋眰瀹㈡埛绔痠d锛�
+const SERVICE_RES_EQU_STATU = SERVICE_DOWN + "/equ/statu/%s"
 //鎺ユ敹鎸囦护鍝嶅簲
 const SERVICE_RES_EQU_CMD = SERVICE_DOWN + "/equ/cmd";
 
@@ -33,7 +33,12 @@
 const SERVICE_BROADCAST_TENANT_REAL_FAULT = SERVICE_BROADCAST + "/real/fault/%s"
 
 
-const SERVICE_ONECE_TENANT_REAL_FAULT = "service/onece" + "/real/fault/%s"
+const SERVICE_ONECE_TENANT_REAL_FAULT = "service/onece" + "/real/fault/%s"
+
+// 鏈嶅姟绔�氱煡鏇存柊骞茬嚗鏈鸿繛鎺ョ姸鎬�
+const SERVICE_BROADCAST_TENANT_UPDATE_EQU_STATU = SERVICE_BROADCAST + "/update/equ/statu/%s"
+// 鏈嶅姟绔悜绉诲姩绔帹閫佸疄鏃舵暟鎹�
+const SERVICE_BROADCAST_TENANT_REAL_DATA = SERVICE_BROADCAST + "/real/data/%s"
 
 
 
@@ -55,7 +60,9 @@
 	SERVICE_RES_EQU_CMD,
 
 	SERVICE_BROADCAST_TENANT_REAL_FAULT,
-	SERVICE_ONECE_TENANT_REAL_FAULT,
+	SERVICE_ONECE_TENANT_REAL_FAULT,
+	SERVICE_BROADCAST_TENANT_UPDATE_EQU_STATU,
+	SERVICE_BROADCAST_TENANT_REAL_DATA,
 	
 	MQTT_TOPIC_MESSAGE,
 
diff --git a/dryuniapp.keystore b/dryuniapp.keystore
deleted file mode 100644
index d106ac7..0000000
--- a/dryuniapp.keystore
+++ /dev/null
Binary files differ
diff --git a/manifest.json b/manifest.json
index 1a80dc6..e251635 100644
--- a/manifest.json
+++ b/manifest.json
@@ -18,9 +18,7 @@
             "delay" : 0
         },
         /* 妯″潡閰嶇疆 */
-        "modules" : {
-            "Push" : {}
-        },
+        "modules" : {},
         /* 搴旂敤鍙戝竷淇℃伅 */
         "distribute" : {
             /* android鎵撳寘閰嶇疆 */
@@ -55,11 +53,7 @@
                     "unipush" : {
                         "icons" : {
                             "small" : {
-                                "ldpi" : "static/logo.png",
-                                "mdpi" : "static/logo.png",
-                                "hdpi" : "static/logo.png",
-                                "xhdpi" : "static/logo.png",
-                                "xxhdpi" : "static/logo.png"
+                                "hdpi" : "static/logo.png"
                             }
                         }
                     }
@@ -120,12 +114,14 @@
             "minified" : true
         },
         "usingComponents" : true,
+        "lazyCodeLoading" : "requiredComponents", // 鍚敤鎸夐渶娉ㄥ叆
         "unipush" : {
             "enable" : false
         },
         "optimization" : {
             "subPackages" : true
-        }
+        },
+        "runmode" : "liberate"
     },
     "mp-alipay" : {
         "usingComponents" : true
diff --git a/mqtt/MqttView.vue b/mqtt/MqttView.vue
index 94f4b88..2d6c7d4 100644
--- a/mqtt/MqttView.vue
+++ b/mqtt/MqttView.vue
@@ -41,10 +41,13 @@
 				}
 				let opts = {
 					// #ifdef H5
-					url: 'ws://' + this.$api.mqttBaseUrl + ':8083/mqtt',
+					url: 'wss://' + this.$api.mqttBaseUrl + ':8084/mqtt',
 					// #endif
-					// #ifdef APP-PLUS
-					url: 'wx://' + this.$api.mqttBaseUrl + ':8083/mqtt',
+					// #ifdef MP-WEIXIN
+					url: 'wxs://' + this.$api.mqttBaseUrl + ':8084/mqtt',// 寰俊灏忕▼搴忓己鍒� WSS
+					// #endif
+					// #ifdef APP-PLUS
+					url: 'wxs://' + this.$api.mqttBaseUrl + ':8084/mqtt',  // Android/iOS 鐢ㄦ櫘閫� WebSocket
 					// #endif
 					clientId: deviceid,
 					username: account.username,
@@ -76,6 +79,29 @@
 				}).then(res => {
 					console.error(res)
 				})
+				
+				//璁㈤槄骞茬嚗璁惧杩炴帴鏂紑鐘舵�佹洿鏂�-绉熸埛鍐呮墍鏈夎澶�
+				this.$mqttTool.subscribe({
+					topic: this.$constant.SERVICE_BROADCAST_TENANT_UPDATE_EQU_STATU.replace('%s', this.tenantId),
+					qos: 0
+				}).then(res => {
+					console.error(res)
+				})
+				//璁㈤槄鏌ヨ骞茬嚗璁惧杩炴帴鐘舵��-鍗曚釜璁惧
+				this.$mqttTool.subscribe({
+					topic: this.$constant.SERVICE_RES_EQU_STATU.replace('%s', deviceid),
+					qos: 0
+				}).then(res => {
+					console.error(res)
+				})
+				
+				//璁㈤槄骞茬嚗璁惧瀹炴椂鏁版嵁
+				this.$mqttTool.subscribe({
+					topic: this.$constant.SERVICE_BROADCAST_TENANT_REAL_DATA.replace('%s', this.tenantId),
+					qos: 0
+				}).then(res => {
+					console.error(res)
+				})
 				 
 				//璁㈤槄鍙戦�佹寚浠よ繑鍥炵粨鏋�
 				// this.$mqttTool.subscribe({
diff --git a/package-lock.json b/package-lock.json
index 9122012..a12a0e5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -59,14 +59,12 @@
 		"node_modules/async-limiter": {
 			"version": "1.0.1",
 			"resolved": "https://registry.npmmirror.com/async-limiter/-/async-limiter-1.0.1.tgz",
-			"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
-			"license": "MIT"
+			"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
 		},
 		"node_modules/balanced-match": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz",
-			"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
-			"license": "MIT"
+			"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
 		},
 		"node_modules/base64-js": {
 			"version": "1.5.1",
@@ -85,39 +83,22 @@
 					"type": "consulting",
 					"url": "https://feross.org/support"
 				}
-			],
-			"license": "MIT"
+			]
 		},
 		"node_modules/bl": {
 			"version": "4.1.0",
 			"resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz",
 			"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
-			"license": "MIT",
 			"dependencies": {
 				"buffer": "^5.5.0",
 				"inherits": "^2.0.4",
 				"readable-stream": "^3.4.0"
 			}
 		},
-		"node_modules/bl/node_modules/readable-stream": {
-			"version": "3.6.2",
-			"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz",
-			"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-			"license": "MIT",
-			"dependencies": {
-				"inherits": "^2.0.3",
-				"string_decoder": "^1.1.1",
-				"util-deprecate": "^1.0.1"
-			},
-			"engines": {
-				"node": ">= 6"
-			}
-		},
 		"node_modules/brace-expansion": {
-			"version": "1.1.11",
-			"resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz",
-			"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-			"license": "MIT",
+			"version": "1.1.12",
+			"resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.12.tgz",
+			"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
 			"dependencies": {
 				"balanced-match": "^1.0.0",
 				"concat-map": "0.0.1"
@@ -141,7 +122,6 @@
 					"url": "https://feross.org/support"
 				}
 			],
-			"license": "MIT",
 			"dependencies": {
 				"base64-js": "^1.3.1",
 				"ieee754": "^1.1.13"
@@ -150,17 +130,42 @@
 		"node_modules/buffer-from": {
 			"version": "1.1.2",
 			"resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz",
-			"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
-			"license": "MIT"
+			"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
 		},
 		"node_modules/callback-stream": {
 			"version": "1.1.0",
 			"resolved": "https://registry.npmmirror.com/callback-stream/-/callback-stream-1.1.0.tgz",
 			"integrity": "sha512-sAZ9kODla+mGACBZ1IpTCAisKoGnv6PykW7fPk1LrM+mMepE18Yz0515yoVcrZy7dQsTUp3uZLQ/9Sx1RnLoHw==",
-			"license": "MIT",
 			"dependencies": {
 				"inherits": "^2.0.1",
 				"readable-stream": "> 1.0.0 < 3.0.0"
+			}
+		},
+		"node_modules/callback-stream/node_modules/readable-stream": {
+			"version": "2.3.8",
+			"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+			"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+			"dependencies": {
+				"core-util-is": "~1.0.0",
+				"inherits": "~2.0.3",
+				"isarray": "~1.0.0",
+				"process-nextick-args": "~2.0.0",
+				"safe-buffer": "~5.1.1",
+				"string_decoder": "~1.1.1",
+				"util-deprecate": "~1.0.1"
+			}
+		},
+		"node_modules/callback-stream/node_modules/safe-buffer": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+		},
+		"node_modules/callback-stream/node_modules/string_decoder": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
+			"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+			"dependencies": {
+				"safe-buffer": "~5.1.0"
 			}
 		},
 		"node_modules/commander": {
@@ -176,7 +181,6 @@
 			"version": "1.1.0",
 			"resolved": "https://registry.npmmirror.com/commist/-/commist-1.1.0.tgz",
 			"integrity": "sha512-rraC8NXWOEjhADbZe9QBNzLAN5Q3fsTPQtBV+fEVj6xKIgDgNiEVE6ZNfHpZOqfQ21YUzfVNUXLOEZquYvQPPg==",
-			"license": "MIT",
 			"dependencies": {
 				"leven": "^2.1.0",
 				"minimist": "^1.1.0"
@@ -185,8 +189,7 @@
 		"node_modules/concat-map": {
 			"version": "0.0.1",
 			"resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz",
-			"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
-			"license": "MIT"
+			"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
 		},
 		"node_modules/concat-stream": {
 			"version": "1.6.2",
@@ -195,7 +198,6 @@
 			"engines": [
 				"node >= 0.8"
 			],
-			"license": "MIT",
 			"dependencies": {
 				"buffer-from": "^1.0.0",
 				"inherits": "^2.0.3",
@@ -203,17 +205,42 @@
 				"typedarray": "^0.0.6"
 			}
 		},
+		"node_modules/concat-stream/node_modules/readable-stream": {
+			"version": "2.3.8",
+			"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+			"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+			"dependencies": {
+				"core-util-is": "~1.0.0",
+				"inherits": "~2.0.3",
+				"isarray": "~1.0.0",
+				"process-nextick-args": "~2.0.0",
+				"safe-buffer": "~5.1.1",
+				"string_decoder": "~1.1.1",
+				"util-deprecate": "~1.0.1"
+			}
+		},
+		"node_modules/concat-stream/node_modules/safe-buffer": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+		},
+		"node_modules/concat-stream/node_modules/string_decoder": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
+			"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+			"dependencies": {
+				"safe-buffer": "~5.1.0"
+			}
+		},
 		"node_modules/core-util-is": {
 			"version": "1.0.3",
 			"resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz",
-			"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
-			"license": "MIT"
+			"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
 		},
 		"node_modules/d": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmmirror.com/d/-/d-1.0.2.tgz",
 			"integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
-			"license": "ISC",
 			"dependencies": {
 				"es5-ext": "^0.10.64",
 				"type": "^2.7.2"
@@ -235,10 +262,9 @@
 			"dev": true
 		},
 		"node_modules/debug": {
-			"version": "4.3.7",
-			"resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.7.tgz",
-			"integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
-			"license": "MIT",
+			"version": "4.4.1",
+			"resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz",
+			"integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
 			"dependencies": {
 				"ms": "^2.1.3"
 			},
@@ -261,7 +287,6 @@
 			"version": "3.7.1",
 			"resolved": "https://registry.npmmirror.com/duplexify/-/duplexify-3.7.1.tgz",
 			"integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
-			"license": "MIT",
 			"dependencies": {
 				"end-of-stream": "^1.0.0",
 				"inherits": "^2.0.1",
@@ -269,11 +294,37 @@
 				"stream-shift": "^1.0.0"
 			}
 		},
+		"node_modules/duplexify/node_modules/readable-stream": {
+			"version": "2.3.8",
+			"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+			"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+			"dependencies": {
+				"core-util-is": "~1.0.0",
+				"inherits": "~2.0.3",
+				"isarray": "~1.0.0",
+				"process-nextick-args": "~2.0.0",
+				"safe-buffer": "~5.1.1",
+				"string_decoder": "~1.1.1",
+				"util-deprecate": "~1.0.1"
+			}
+		},
+		"node_modules/duplexify/node_modules/safe-buffer": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+		},
+		"node_modules/duplexify/node_modules/string_decoder": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
+			"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+			"dependencies": {
+				"safe-buffer": "~5.1.0"
+			}
+		},
 		"node_modules/end-of-stream": {
-			"version": "1.4.4",
-			"resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz",
-			"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
-			"license": "MIT",
+			"version": "1.4.5",
+			"resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.5.tgz",
+			"integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
 			"dependencies": {
 				"once": "^1.4.0"
 			}
@@ -283,7 +334,6 @@
 			"resolved": "https://registry.npmmirror.com/es5-ext/-/es5-ext-0.10.64.tgz",
 			"integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
 			"hasInstallScript": true,
-			"license": "ISC",
 			"dependencies": {
 				"es6-iterator": "^2.0.3",
 				"es6-symbol": "^3.1.3",
@@ -298,7 +348,6 @@
 			"version": "2.0.3",
 			"resolved": "https://registry.npmmirror.com/es6-iterator/-/es6-iterator-2.0.3.tgz",
 			"integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
-			"license": "MIT",
 			"dependencies": {
 				"d": "1",
 				"es5-ext": "^0.10.35",
@@ -309,7 +358,6 @@
 			"version": "0.1.5",
 			"resolved": "https://registry.npmmirror.com/es6-map/-/es6-map-0.1.5.tgz",
 			"integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==",
-			"license": "MIT",
 			"dependencies": {
 				"d": "1",
 				"es5-ext": "~0.10.14",
@@ -323,7 +371,6 @@
 			"version": "0.1.6",
 			"resolved": "https://registry.npmmirror.com/es6-set/-/es6-set-0.1.6.tgz",
 			"integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==",
-			"license": "ISC",
 			"dependencies": {
 				"d": "^1.0.1",
 				"es5-ext": "^0.10.62",
@@ -340,7 +387,6 @@
 			"version": "3.1.4",
 			"resolved": "https://registry.npmmirror.com/es6-symbol/-/es6-symbol-3.1.4.tgz",
 			"integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
-			"license": "ISC",
 			"dependencies": {
 				"d": "^1.0.2",
 				"ext": "^1.7.0"
@@ -365,7 +411,6 @@
 			"version": "2.0.1",
 			"resolved": "https://registry.npmmirror.com/esniff/-/esniff-2.0.1.tgz",
 			"integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
-			"license": "ISC",
 			"dependencies": {
 				"d": "^1.0.1",
 				"es5-ext": "^0.10.62",
@@ -380,7 +425,6 @@
 			"version": "0.3.5",
 			"resolved": "https://registry.npmmirror.com/event-emitter/-/event-emitter-0.3.5.tgz",
 			"integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
-			"license": "MIT",
 			"dependencies": {
 				"d": "1",
 				"es5-ext": "~0.10.14"
@@ -390,7 +434,6 @@
 			"version": "1.7.0",
 			"resolved": "https://registry.npmmirror.com/ext/-/ext-1.7.0.tgz",
 			"integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
-			"license": "ISC",
 			"dependencies": {
 				"type": "^2.7.2"
 			}
@@ -398,21 +441,18 @@
 		"node_modules/extend": {
 			"version": "3.0.2",
 			"resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
-			"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
-			"license": "MIT"
+			"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
 		},
 		"node_modules/fs.realpath": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz",
-			"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
-			"license": "ISC"
+			"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
 		},
 		"node_modules/glob": {
 			"version": "7.2.3",
 			"resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz",
 			"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
 			"deprecated": "Glob versions prior to v9 are no longer supported",
-			"license": "ISC",
 			"dependencies": {
 				"fs.realpath": "^1.0.0",
 				"inflight": "^1.0.4",
@@ -432,7 +472,6 @@
 			"version": "3.1.0",
 			"resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-3.1.0.tgz",
 			"integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
-			"license": "ISC",
 			"dependencies": {
 				"is-glob": "^3.1.0",
 				"path-dirname": "^1.0.0"
@@ -442,7 +481,6 @@
 			"version": "6.1.0",
 			"resolved": "https://registry.npmmirror.com/glob-stream/-/glob-stream-6.1.0.tgz",
 			"integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==",
-			"license": "MIT",
 			"dependencies": {
 				"extend": "^3.0.0",
 				"glob": "^7.1.1",
@@ -457,6 +495,33 @@
 			},
 			"engines": {
 				"node": ">= 0.10"
+			}
+		},
+		"node_modules/glob-stream/node_modules/readable-stream": {
+			"version": "2.3.8",
+			"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+			"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+			"dependencies": {
+				"core-util-is": "~1.0.0",
+				"inherits": "~2.0.3",
+				"isarray": "~1.0.0",
+				"process-nextick-args": "~2.0.0",
+				"safe-buffer": "~5.1.1",
+				"string_decoder": "~1.1.1",
+				"util-deprecate": "~1.0.1"
+			}
+		},
+		"node_modules/glob-stream/node_modules/safe-buffer": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+		},
+		"node_modules/glob-stream/node_modules/string_decoder": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
+			"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+			"dependencies": {
+				"safe-buffer": "~5.1.0"
 			}
 		},
 		"node_modules/gzip-size": {
@@ -478,7 +543,6 @@
 			"version": "1.1.0",
 			"resolved": "https://registry.npmmirror.com/help-me/-/help-me-1.1.0.tgz",
 			"integrity": "sha512-P/IZ8yOMne3SCTHbVY429NZ67B/2bVQlcYGZh2iPPbdLrEQ/qY5aGChn0YTDmt7Sb4IKRI51fypItav+lNl76w==",
-			"license": "MIT",
 			"dependencies": {
 				"callback-stream": "^1.0.2",
 				"glob-stream": "^6.1.0",
@@ -509,15 +573,13 @@
 					"type": "consulting",
 					"url": "https://feross.org/support"
 				}
-			],
-			"license": "BSD-3-Clause"
+			]
 		},
 		"node_modules/inflight": {
 			"version": "1.0.6",
 			"resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz",
 			"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
 			"deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
-			"license": "ISC",
 			"dependencies": {
 				"once": "^1.3.0",
 				"wrappy": "1"
@@ -526,14 +588,12 @@
 		"node_modules/inherits": {
 			"version": "2.0.4",
 			"resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
-			"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-			"license": "ISC"
+			"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
 		},
 		"node_modules/is-absolute": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmmirror.com/is-absolute/-/is-absolute-1.0.0.tgz",
 			"integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
-			"license": "MIT",
 			"dependencies": {
 				"is-relative": "^1.0.0",
 				"is-windows": "^1.0.1"
@@ -546,7 +606,6 @@
 			"version": "2.1.1",
 			"resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz",
 			"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
-			"license": "MIT",
 			"engines": {
 				"node": ">=0.10.0"
 			}
@@ -555,7 +614,6 @@
 			"version": "3.1.0",
 			"resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz",
 			"integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
-			"license": "MIT",
 			"dependencies": {
 				"is-extglob": "^2.1.0"
 			},
@@ -567,7 +625,6 @@
 			"version": "1.0.0",
 			"resolved": "https://registry.npmmirror.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
 			"integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==",
-			"license": "MIT",
 			"engines": {
 				"node": ">=0.10.0"
 			}
@@ -576,7 +633,6 @@
 			"version": "1.0.0",
 			"resolved": "https://registry.npmmirror.com/is-relative/-/is-relative-1.0.0.tgz",
 			"integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
-			"license": "MIT",
 			"dependencies": {
 				"is-unc-path": "^1.0.0"
 			},
@@ -588,7 +644,6 @@
 			"version": "1.0.0",
 			"resolved": "https://registry.npmmirror.com/is-unc-path/-/is-unc-path-1.0.0.tgz",
 			"integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
-			"license": "MIT",
 			"dependencies": {
 				"unc-path-regex": "^0.1.2"
 			},
@@ -600,7 +655,6 @@
 			"version": "1.0.2",
 			"resolved": "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz",
 			"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
-			"license": "MIT",
 			"engines": {
 				"node": ">=0.10.0"
 			}
@@ -608,20 +662,17 @@
 		"node_modules/isarray": {
 			"version": "1.0.0",
 			"resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz",
-			"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
-			"license": "MIT"
+			"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
 		},
 		"node_modules/json-stable-stringify-without-jsonify": {
 			"version": "1.0.1",
 			"resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-			"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
-			"license": "MIT"
+			"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
 		},
 		"node_modules/leven": {
 			"version": "2.1.0",
 			"resolved": "https://registry.npmmirror.com/leven/-/leven-2.1.0.tgz",
 			"integrity": "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==",
-			"license": "MIT",
 			"engines": {
 				"node": ">=0.10.0"
 			}
@@ -635,7 +686,6 @@
 			"version": "3.1.2",
 			"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
 			"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-			"license": "ISC",
 			"dependencies": {
 				"brace-expansion": "^1.1.7"
 			},
@@ -647,7 +697,6 @@
 			"version": "1.2.8",
 			"resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz",
 			"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
-			"license": "MIT",
 			"funding": {
 				"url": "https://github.com/sponsors/ljharb"
 			}
@@ -656,7 +705,6 @@
 			"version": "3.0.0",
 			"resolved": "https://registry.npmmirror.com/mqtt/-/mqtt-3.0.0.tgz",
 			"integrity": "sha512-0nKV6MAc1ibKZwaZQUTb3iIdT4NVpj541BsYrqrGBcQdQ7Jd0MnZD1/6/nj1UFdGTboK9ZEUXvkCu2nPCugHFA==",
-			"license": "MIT",
 			"dependencies": {
 				"base64-js": "^1.3.0",
 				"commist": "^1.0.0",
@@ -687,11 +735,37 @@
 			"version": "6.10.0",
 			"resolved": "https://registry.npmmirror.com/mqtt-packet/-/mqtt-packet-6.10.0.tgz",
 			"integrity": "sha512-ja8+mFKIHdB1Tpl6vac+sktqy3gA8t9Mduom1BA75cI+R9AHnZOiaBQwpGiWnaVJLDGRdNhQmFaAqd7tkKSMGA==",
-			"license": "MIT",
 			"dependencies": {
 				"bl": "^4.0.2",
 				"debug": "^4.1.1",
 				"process-nextick-args": "^2.0.1"
+			}
+		},
+		"node_modules/mqtt/node_modules/readable-stream": {
+			"version": "2.3.8",
+			"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+			"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+			"dependencies": {
+				"core-util-is": "~1.0.0",
+				"inherits": "~2.0.3",
+				"isarray": "~1.0.0",
+				"process-nextick-args": "~2.0.0",
+				"safe-buffer": "~5.1.1",
+				"string_decoder": "~1.1.1",
+				"util-deprecate": "~1.0.1"
+			}
+		},
+		"node_modules/mqtt/node_modules/safe-buffer": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+		},
+		"node_modules/mqtt/node_modules/string_decoder": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
+			"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+			"dependencies": {
+				"safe-buffer": "~5.1.0"
 			}
 		},
 		"node_modules/mrmime": {
@@ -706,20 +780,17 @@
 		"node_modules/ms": {
 			"version": "2.1.3",
 			"resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz",
-			"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
-			"license": "MIT"
+			"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
 		},
 		"node_modules/next-tick": {
 			"version": "1.1.0",
 			"resolved": "https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz",
-			"integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
-			"license": "ISC"
+			"integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="
 		},
 		"node_modules/once": {
 			"version": "1.4.0",
 			"resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz",
 			"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
-			"license": "ISC",
 			"dependencies": {
 				"wrappy": "1"
 			}
@@ -737,22 +808,46 @@
 			"version": "1.0.1",
 			"resolved": "https://registry.npmmirror.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
 			"integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==",
-			"license": "MIT",
 			"dependencies": {
 				"readable-stream": "^2.0.1"
+			}
+		},
+		"node_modules/ordered-read-streams/node_modules/readable-stream": {
+			"version": "2.3.8",
+			"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+			"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+			"dependencies": {
+				"core-util-is": "~1.0.0",
+				"inherits": "~2.0.3",
+				"isarray": "~1.0.0",
+				"process-nextick-args": "~2.0.0",
+				"safe-buffer": "~5.1.1",
+				"string_decoder": "~1.1.1",
+				"util-deprecate": "~1.0.1"
+			}
+		},
+		"node_modules/ordered-read-streams/node_modules/safe-buffer": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+		},
+		"node_modules/ordered-read-streams/node_modules/string_decoder": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
+			"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+			"dependencies": {
+				"safe-buffer": "~5.1.0"
 			}
 		},
 		"node_modules/path-dirname": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmmirror.com/path-dirname/-/path-dirname-1.0.2.tgz",
-			"integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==",
-			"license": "MIT"
+			"integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q=="
 		},
 		"node_modules/path-is-absolute": {
 			"version": "1.0.1",
 			"resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
 			"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
-			"license": "MIT",
 			"engines": {
 				"node": ">=0.10.0"
 			}
@@ -766,14 +861,12 @@
 		"node_modules/process-nextick-args": {
 			"version": "2.0.1",
 			"resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
-			"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
-			"license": "MIT"
+			"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
 		},
 		"node_modules/pump": {
-			"version": "3.0.2",
-			"resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.2.tgz",
-			"integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
-			"license": "MIT",
+			"version": "3.0.3",
+			"resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.3.tgz",
+			"integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==",
 			"dependencies": {
 				"end-of-stream": "^1.1.0",
 				"once": "^1.3.1"
@@ -783,7 +876,6 @@
 			"version": "1.5.1",
 			"resolved": "https://registry.npmmirror.com/pumpify/-/pumpify-1.5.1.tgz",
 			"integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
-			"license": "MIT",
 			"dependencies": {
 				"duplexify": "^3.6.0",
 				"inherits": "^2.0.3",
@@ -794,44 +886,52 @@
 			"version": "2.0.1",
 			"resolved": "https://registry.npmmirror.com/pump/-/pump-2.0.1.tgz",
 			"integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
-			"license": "MIT",
 			"dependencies": {
 				"end-of-stream": "^1.1.0",
 				"once": "^1.3.1"
 			}
 		},
 		"node_modules/readable-stream": {
-			"version": "2.3.8",
-			"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
-			"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
-			"license": "MIT",
+			"version": "3.6.2",
+			"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz",
+			"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
 			"dependencies": {
-				"core-util-is": "~1.0.0",
-				"inherits": "~2.0.3",
-				"isarray": "~1.0.0",
-				"process-nextick-args": "~2.0.0",
-				"safe-buffer": "~5.1.1",
-				"string_decoder": "~1.1.1",
-				"util-deprecate": "~1.0.1"
+				"inherits": "^2.0.3",
+				"string_decoder": "^1.1.1",
+				"util-deprecate": "^1.0.1"
+			},
+			"engines": {
+				"node": ">= 6"
 			}
 		},
 		"node_modules/reinterval": {
 			"version": "1.1.0",
 			"resolved": "https://registry.npmmirror.com/reinterval/-/reinterval-1.1.0.tgz",
-			"integrity": "sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==",
-			"license": "MIT"
+			"integrity": "sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ=="
 		},
 		"node_modules/remove-trailing-separator": {
 			"version": "1.1.0",
 			"resolved": "https://registry.npmmirror.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
-			"integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
-			"license": "ISC"
+			"integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw=="
 		},
 		"node_modules/safe-buffer": {
-			"version": "5.1.2",
-			"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
-			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-			"license": "MIT"
+			"version": "5.2.1",
+			"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+			"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/feross"
+				},
+				{
+					"type": "patreon",
+					"url": "https://www.patreon.com/feross"
+				},
+				{
+					"type": "consulting",
+					"url": "https://feross.org/support"
+				}
+			]
 		},
 		"node_modules/sirv": {
 			"version": "2.0.4",
@@ -851,45 +951,27 @@
 			"version": "3.2.2",
 			"resolved": "https://registry.npmmirror.com/split2/-/split2-3.2.2.tgz",
 			"integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==",
-			"license": "ISC",
 			"dependencies": {
 				"readable-stream": "^3.0.0"
-			}
-		},
-		"node_modules/split2/node_modules/readable-stream": {
-			"version": "3.6.2",
-			"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz",
-			"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
-			"license": "MIT",
-			"dependencies": {
-				"inherits": "^2.0.3",
-				"string_decoder": "^1.1.1",
-				"util-deprecate": "^1.0.1"
-			},
-			"engines": {
-				"node": ">= 6"
 			}
 		},
 		"node_modules/stream-shift": {
 			"version": "1.0.3",
 			"resolved": "https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.3.tgz",
-			"integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==",
-			"license": "MIT"
+			"integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ=="
 		},
 		"node_modules/string_decoder": {
-			"version": "1.1.1",
-			"resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
-			"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
-			"license": "MIT",
+			"version": "1.3.0",
+			"resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz",
+			"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
 			"dependencies": {
-				"safe-buffer": "~5.1.0"
+				"safe-buffer": "~5.2.0"
 			}
 		},
 		"node_modules/through2": {
 			"version": "2.0.5",
 			"resolved": "https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz",
 			"integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
-			"license": "MIT",
 			"dependencies": {
 				"readable-stream": "~2.3.6",
 				"xtend": "~4.0.1"
@@ -899,17 +981,42 @@
 			"version": "3.0.0",
 			"resolved": "https://registry.npmmirror.com/through2-filter/-/through2-filter-3.0.0.tgz",
 			"integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==",
-			"license": "MIT",
 			"dependencies": {
 				"through2": "~2.0.0",
 				"xtend": "~4.0.0"
+			}
+		},
+		"node_modules/through2/node_modules/readable-stream": {
+			"version": "2.3.8",
+			"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+			"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+			"dependencies": {
+				"core-util-is": "~1.0.0",
+				"inherits": "~2.0.3",
+				"isarray": "~1.0.0",
+				"process-nextick-args": "~2.0.0",
+				"safe-buffer": "~5.1.1",
+				"string_decoder": "~1.1.1",
+				"util-deprecate": "~1.0.1"
+			}
+		},
+		"node_modules/through2/node_modules/safe-buffer": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+		},
+		"node_modules/through2/node_modules/string_decoder": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
+			"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+			"dependencies": {
+				"safe-buffer": "~5.1.0"
 			}
 		},
 		"node_modules/to-absolute-glob": {
 			"version": "2.0.2",
 			"resolved": "https://registry.npmmirror.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
 			"integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==",
-			"license": "MIT",
 			"dependencies": {
 				"is-absolute": "^1.0.0",
 				"is-negated-glob": "^1.0.0"
@@ -930,26 +1037,22 @@
 		"node_modules/type": {
 			"version": "2.7.3",
 			"resolved": "https://registry.npmmirror.com/type/-/type-2.7.3.tgz",
-			"integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==",
-			"license": "ISC"
+			"integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ=="
 		},
 		"node_modules/typedarray": {
 			"version": "0.0.6",
 			"resolved": "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz",
-			"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
-			"license": "MIT"
+			"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
 		},
 		"node_modules/ultron": {
 			"version": "1.1.1",
 			"resolved": "https://registry.npmmirror.com/ultron/-/ultron-1.1.1.tgz",
-			"integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
-			"license": "MIT"
+			"integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
 		},
 		"node_modules/unc-path-regex": {
 			"version": "0.1.2",
 			"resolved": "https://registry.npmmirror.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
 			"integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==",
-			"license": "MIT",
 			"engines": {
 				"node": ">=0.10.0"
 			}
@@ -958,7 +1061,6 @@
 			"version": "2.3.1",
 			"resolved": "https://registry.npmmirror.com/unique-stream/-/unique-stream-2.3.1.tgz",
 			"integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==",
-			"license": "MIT",
 			"dependencies": {
 				"json-stable-stringify-without-jsonify": "^1.0.1",
 				"through2-filter": "^3.0.0"
@@ -967,8 +1069,7 @@
 		"node_modules/util-deprecate": {
 			"version": "1.0.2",
 			"resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
-			"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
-			"license": "MIT"
+			"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
 		},
 		"node_modules/webpack-bundle-analyzer": {
 			"version": "4.10.2",
@@ -996,7 +1097,62 @@
 				"node": ">= 10.13.0"
 			}
 		},
-		"node_modules/webpack-bundle-analyzer/node_modules/ws": {
+		"node_modules/websocket-stream": {
+			"version": "5.5.2",
+			"resolved": "https://registry.npmmirror.com/websocket-stream/-/websocket-stream-5.5.2.tgz",
+			"integrity": "sha512-8z49MKIHbGk3C4HtuHWDtYX8mYej1wWabjthC/RupM9ngeukU4IWoM46dgth1UOS/T4/IqgEdCDJuMe2039OQQ==",
+			"dependencies": {
+				"duplexify": "^3.5.1",
+				"inherits": "^2.0.1",
+				"readable-stream": "^2.3.3",
+				"safe-buffer": "^5.1.2",
+				"ws": "^3.2.0",
+				"xtend": "^4.0.0"
+			}
+		},
+		"node_modules/websocket-stream/node_modules/readable-stream": {
+			"version": "2.3.8",
+			"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+			"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+			"dependencies": {
+				"core-util-is": "~1.0.0",
+				"inherits": "~2.0.3",
+				"isarray": "~1.0.0",
+				"process-nextick-args": "~2.0.0",
+				"safe-buffer": "~5.1.1",
+				"string_decoder": "~1.1.1",
+				"util-deprecate": "~1.0.1"
+			}
+		},
+		"node_modules/websocket-stream/node_modules/safe-buffer": {
+			"version": "5.1.2",
+			"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+			"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+		},
+		"node_modules/websocket-stream/node_modules/string_decoder": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
+			"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+			"dependencies": {
+				"safe-buffer": "~5.1.0"
+			}
+		},
+		"node_modules/websocket-stream/node_modules/ws": {
+			"version": "3.3.3",
+			"resolved": "https://registry.npmmirror.com/ws/-/ws-3.3.3.tgz",
+			"integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
+			"dependencies": {
+				"async-limiter": "~1.0.0",
+				"safe-buffer": "~5.1.0",
+				"ultron": "~1.1.0"
+			}
+		},
+		"node_modules/wrappy": {
+			"version": "1.0.2",
+			"resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
+			"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+		},
+		"node_modules/ws": {
 			"version": "7.5.10",
 			"resolved": "https://registry.npmmirror.com/ws/-/ws-7.5.10.tgz",
 			"integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
@@ -1017,42 +1173,10 @@
 				}
 			}
 		},
-		"node_modules/websocket-stream": {
-			"version": "5.5.2",
-			"resolved": "https://registry.npmmirror.com/websocket-stream/-/websocket-stream-5.5.2.tgz",
-			"integrity": "sha512-8z49MKIHbGk3C4HtuHWDtYX8mYej1wWabjthC/RupM9ngeukU4IWoM46dgth1UOS/T4/IqgEdCDJuMe2039OQQ==",
-			"license": "BSD-2-Clause",
-			"dependencies": {
-				"duplexify": "^3.5.1",
-				"inherits": "^2.0.1",
-				"readable-stream": "^2.3.3",
-				"safe-buffer": "^5.1.2",
-				"ws": "^3.2.0",
-				"xtend": "^4.0.0"
-			}
-		},
-		"node_modules/wrappy": {
-			"version": "1.0.2",
-			"resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz",
-			"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
-			"license": "ISC"
-		},
-		"node_modules/ws": {
-			"version": "3.3.3",
-			"resolved": "https://registry.npmmirror.com/ws/-/ws-3.3.3.tgz",
-			"integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
-			"license": "MIT",
-			"dependencies": {
-				"async-limiter": "~1.0.0",
-				"safe-buffer": "~5.1.0",
-				"ultron": "~1.1.0"
-			}
-		},
 		"node_modules/xtend": {
 			"version": "4.0.2",
 			"resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz",
 			"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
-			"license": "MIT",
 			"engines": {
 				"node": ">=0.4"
 			}
diff --git a/package.json b/package.json
index edce636..59f3e66 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,7 @@
 	"license": "ISC",
 	"dependencies": {
 		"dayjs": "^1.11.10",
-		"lodash.get": "^4.4.2",
+		"lodash.get": "^4.4.2",
 		"mqtt": "^3.0.0"
 	},
 	"devDependencies": {
diff --git a/pages/analy/analyList.vue b/packageA/pages/analy/analyList.vue
similarity index 100%
rename from pages/analy/analyList.vue
rename to packageA/pages/analy/analyList.vue
diff --git a/pages/category/formulaDetail.vue b/packageA/pages/category/formulaDetail.vue
similarity index 100%
rename from pages/category/formulaDetail.vue
rename to packageA/pages/category/formulaDetail.vue
diff --git a/pages/charts/charts.vue b/packageA/pages/charts/charts.vue
similarity index 100%
rename from pages/charts/charts.vue
rename to packageA/pages/charts/charts.vue
diff --git a/packageA/pages/device/control.vue b/packageA/pages/device/control.vue
new file mode 100644
index 0000000..94449b8
--- /dev/null
+++ b/packageA/pages/device/control.vue
@@ -0,0 +1,969 @@
+<template>
+	<view class="container">
+
+		<cu-custom bgColor="bg-gradual-blue" :isBack="true">
+			<block slot="content">{{option.name}}</block>
+		</cu-custom>
+		<view class="uni-padding-wrap">
+			<!-- <view class="page-section swiper">
+				<view class="page-section-spacing">
+					 <swiper class="swiper" style="height: 450rpx;" circular="true" indicator-dots="true" autoplay="true"
+						interval="3500" duration="600">
+						<swiper-item class="swiper-list" v-for="(item, index) in bannerList" :key="index">
+							<view class="swiper-item uni-bg-red">
+								<image class="swiper-img" :src="item.imageUrl" mode="aspectFit"></image>
+							</view>
+						</swiper-item>
+					</swiper>  
+					
+				</view>
+			</view> -->
+
+			<view class="fault-box">
+
+				<image style="width: 100%;border-radius: 20rpx; " src="../../../packageA/static/image/ganzaoji-x.png"
+					mode="aspectFit">
+				</image>
+
+
+				<view class="fault-inner">
+					<view class="fault-info" v-for="(item,index) in realFaults" :style="{
+					  position: 'absolute',
+					  top: item.position.top + 'rpx',
+					  left: item.position.left + 'rpx',
+					  fontSize: '24rpx'
+					}">
+						<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>
+
+		<!-- 鍙�氳繃璁剧疆bar-animate-mode="worm"寮�鍚瘺姣涜櫕妯″紡-->
+		<z-tabs ref="tabs" :current="swiperCurrent" :list="swiperList" @change="tabsChange"></z-tabs>
+		<swiper class="custom-swiper" :current="swiperCurrent" @transition="swiperTransition"
+			@animationfinish="swiperAnimationfinish">
+			<swiper-item :key="0">
+				<view class="swiper-item-view">
+					<uni-section title="璁惧淇℃伅" type="line">
+						<text class="text-bold text-black"></text>
+						<view class="h-table">
+							<view class="h-tr h-tr-2 h-thead">
+								<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">
+									<u-tag v-if="model.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">
+
+									<template>
+										<u-tag size="mini" :text="$lget(model,'level')" plain plainFill></u-tag>
+									</template>
+								</view>
+								<view class="h-td">{{ model.stop ? '鏄�':'鍚�'}}</view>
+								<view class="h-td">{{ model.lowalarm ? '浣�':'姝e父'}}</view>
+							</view>
+						</view>
+						<view class="h-table">
+							<view class="h-tr h-tr-2 h-thead">
+								<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">{{model.wind ? '寮�' : '鍏�'}}</view>
+								<view class="h-td">{{$lget(model,'temp2')}}%</view>
+								<view class="h-td">{{$lget(model,'watt')}}kW路h</view>
+								<view class="h-td">{{$lget(model,'steam')}}m鲁</view>
+							</view>
+						</view>
+					</uni-section>
+
+					<uni-section title="鑽潗淇℃伅" type="line" class="margin-top-sm">
+						<text class="text-bold text-black"></text>
+						<view class="h-table">
+							<view class="h-tr h-tr-2 h-thead">
+								<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">{{$lget(model,'name')}}</view>
+								<view class="h-td">{{$lget(model,'weight1')}}绛�
+								</view>
+								<view class="h-td">{{$lget(model,'weight2') }}kg
+								</view>
+								<view class="h-td">{{$lget(model,'weight3')}}kg</view>
+							</view>
+						</view>
+						<view class="h-table">
+							<view class="h-tr h-tr-2 h-thead">
+								<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"> </view>
+								<view class="h-td">{{$lget(model,'moisture1')}}%
+								</view>
+								<view class="h-td">{{$lget(model,'moisture2') }}%
+								</view>
+								<view class="h-td">{{$lget(model,'moisture3')}}%</view>
+							</view>
+						</view>
+					</uni-section>
+
+
+
+					<uni-section title="杩涘害淇℃伅" type="line" class="margin-top-sm">
+						<text class="text-bold text-black"></text>
+						<view class="h-table">
+							<view class="h-tr h-tr-2 h-thead">
+								<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">{{$lget(model,'time1')}}min</view>
+								<view class="h-td">{{$lget(model,'time2')}}</view>
+								<view class="h-td">{{$lget(model,'time3')}}min</view>
+							</view>
+						</view>
+						<view class="h-table">
+							<view class="h-tr h-tr-2 h-thead">
+								<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">{{$lget(model,'turntime')}}</view>
+								<view class="h-td">{{$lget(model,'ai_time')}}min</view>
+								<view class="h-td">{{$lget(model,'ai_total_time')}}min</view>
+							</view>
+						</view>
+					</uni-section>
+				</view>
+			</swiper-item>
+			<swiper-item :key="1">
+				<uni-section title="鎸囦护" type="line">
+					<view class="flex justify-center padding-lg bg-white">
+						<view class="margin-right-sm">
+							<u-button :disabled="model.connected" text="寮�鏈�" type="success"
+								@click="$u.throttle(showModal(1), 500)"></u-button>
+						</view>
+						<view class="margin-left-sm">
+							<u-button :disabled="!model.connected" text="鍏虫満" type="error"
+								@click="$u.throttle(showModal(2), 500)"></u-button>
+						</view>
+
+
+					</view>
+				</uni-section>
+
+
+				<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" :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>
+
+
+
+			</swiper-item>
+		</swiper>
+
+
+		<u-modal :show="show" @confirm="confirm" :showCancelButton="true" @cancel="show=false" ref="uModal"
+			:asyncClose="true">
+
+			<slot>
+				<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>
+		</u-modal>
+	</view>
+</template>
+
+<script>
+	import get from 'lodash.get'
+	import dayjs from 'dayjs'
+
+	export default {
+		data() {
+			return {
+				//涓婁釜椤甸潰浼犻�掕繃鏉ョ殑鏁版嵁
+				option: {},
+				//鎿嶄綔鎸囦护log
+				logList: [],
+				//褰撳墠璁惧杩炴帴鐘舵��
+
+				//寮�鍏虫満鎸囦护 1-寮�鏈� 2-鍏虫満
+				cmd: -1,
+				show: false,
+				swiperList: ["鐩戞祴", "鎺у埗"],
+				swiperCurrent: 0,
+
+				notice: "2023-03-1812:00:001鍙锋満鍙颁綆娓╂姤璀�",
+				model: {
+					// 璁惧杩炴帴鐘舵��
+					connected: false,
+					realData: {}
+				},
+				queryParam: {
+					machineid: "",
+					tenantid: null
+				},
+				bannerList: [{
+					imageUrl: '../../static/image/zcy_gzj1.png'
+				}],
+				timer: null,
+				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
+					},
+				],
+
+
+
+
+			}
+		},
+		onShow() {
+			console.info("onShow")
+		},
+
+		onLoad(option) {
+			this.initPageData(option);
+
+
+		},
+		onBackPress() {
+
+		},
+		onHide() {
+
+
+		},
+		onUnload() {
+
+		},
+		mounted() {
+			this.queryEquStatu()
+			this.mqttData()
+			this.startTimer()
+		},
+		beforeDestroy() {
+			this.stopTimer()
+			uni.$off(this.$constant.MQTT_TOPIC_MESSAGE)
+		},
+		onReady() {
+
+
+		},
+		methods: {
+			mqttData() {
+				uni.$on(this.$constant.MQTT_TOPIC_MESSAGE, (data) => {
+					try {
+						// 1. 鏁版嵁瑙f瀽鍜岄獙璇�
+						const {
+							data: wdata,
+							topic
+						} = this.parseAndValidateMqttData(data);
+						if (!wdata || !topic) return;
+
+						// 2. 鍑嗗涓婚甯搁噺
+						const topics = this.prepareMqttTopics();
+
+						// 3. 鏇存柊鍒锋柊鏃堕棿
+						this.refreshTime = dayjs().format('HH:mm:ss');
+
+						// 4. 鏍规嵁涓婚澶勭悊鏁版嵁
+						switch (topic) {
+							case topics.updateEquStatu:
+								this.handleEquStatusUpdate(wdata);
+								break;
+							case topics.realData:
+								if (!this.model.connected) {
+									return false
+								}
+								this.mergeMqttRealData(wdata);
+								break;
+								//topic 瀹炴椂鎶ヨ
+							case topics.realFaultTopic:
+							case topics.oneceFaultTopic:
+								if (!this.model.connected) {
+									return false
+								}
+								if (wdata != null && Array.isArray(wdata) && wdata.length != 0) {
+									const realFaultNames = wdata.filter(item => item.tenantId == this.tenantId &&
+										item.equCode == this.option.code).map(item => item.faultName);
+									const realFaults = this.allFaults.filter(item =>
+										realFaultNames.some(name =>
+											name.startsWith(item.name)
+										))
+									this.realFaults = realFaults
+								}
+
+								break
+						}
+					} catch (error) {
+						console.error('MQTT鏁版嵁澶勭悊閿欒:', error);
+					}
+				});
+			},
+			// 璁惧鏁版嵁鍜宮tqq瀹炴椂鏁版嵁鍚堝苟
+			mergeMqttRealData(mqttData) {
+				const {
+					tenantid,
+					machineid
+				} = mqttData;
+				if (!tenantid || !machineid) return;
+				const key = `${tenantid}_${machineid}`;
+
+				if (tenantid == this.option.tenantid && machineid == this.option.code) {
+					this.model = {
+						...mqttData,
+						connected: this.model.connected
+					};
+
+				}
+				console.error(this.model)
+
+
+			},
+			handleEquStatusUpdate(wdata) {
+				const isSuccess = wdata?.success ?? false;
+				if (isSuccess) {
+					console.log("鎿嶄綔鎴愬姛");
+				} else {
+					console.log("鎿嶄綔澶辫触鎴栨湭杩斿洖 success 瀛楁");
+				}
+				this.model.connected = isSuccess;
+
+			},
+			startTimer() {
+				this.timer = setInterval(() => {
+					this.queryEquStatu()
+				}, 3000);
+			},
+			stopTimer() {
+				clearInterval(this.timer);
+			},
+			/**
+			 * 鍒濆鍖栭〉闈㈡暟鎹�
+			 * @param {Object} option - 椤甸潰鍙傛暟
+			 */
+			initPageData(option) {
+				const {
+					loginTenantId,
+					username
+				} = this.getUserInfo();
+
+				// 鍚堝苟椤甸潰鍙傛暟鍜岀敤鎴蜂俊鎭�
+				this.option = {
+					...option,
+					tenantid: loginTenantId,
+					username
+				};
+
+				// 鍒濆鍖栨煡璇㈠弬鏁�
+				this.queryParam = {
+					machineid: option.code,
+					tenantid: loginTenantId
+				};
+			},
+
+			/**
+			 * 鑾峰彇鐢ㄦ埛淇℃伅
+			 * @returns {Object} 鐢ㄦ埛淇℃伅瀵硅薄
+			 */
+			getUserInfo() {
+				try {
+					const userinfo = uni.getStorageSync('userinfo');
+					return {
+						loginTenantId: userinfo?.loginTenantId,
+						username: userinfo?.username
+					};
+				} catch (error) {
+					console.error('鑾峰彇鐢ㄦ埛淇℃伅澶辫触:', error);
+					return {
+						loginTenantId: null,
+						username: null
+					};
+				}
+			},
+			// 杈呭姪鏂规硶锛氳В鏋愬拰楠岃瘉MQTT鏁版嵁
+			parseAndValidateMqttData(data) {
+				try {
+					const json = JSON.parse(data);
+					if (!json?.data || !json?.topic) return {
+						data: null,
+						topic: null
+					};
+					return {
+						data: json.data,
+						topic: json.topic
+					};
+				} catch (e) {
+					return {
+						data: null,
+						topic: null
+					};
+				}
+			},
+			// 杈呭姪鏂规硶锛氬噯澶嘙QTT涓婚
+			prepareMqttTopics() {
+				return {
+					updateEquStatu: this.$constant.SERVICE_RES_EQU_STATU
+						.replace('%s', this.deviceId),
+					realData: this.$constant.SERVICE_BROADCAST_TENANT_REAL_DATA
+						.replace('%s', this.tenantId),
+					realFaultTopic: this.$constant.SERVICE_BROADCAST_TENANT_REAL_FAULT
+						.replace('%s', this.tenantId),
+					oneceFaultTopic: this.$constant.SERVICE_ONECE_TENANT_REAL_FAULT.replace('%s', this
+						.deviceId)
+				};
+			},
+			//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() {
+				this.sendEquCmd()
+			},
+
+			//tabs閫氱煡swiper鍒囨崲
+			tabsChange(index) {
+				this.swiperCurrent = index;
+			},
+			//swiper婊戝姩涓�
+			swiperTransition(e) {
+				this.$refs.tabs.setDx(e.detail.dx);
+			},
+			//swiper婊戝姩缁撴潫
+			swiperAnimationfinish(e) {
+				this.swiperCurrent = 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}`;
+			},
+
+
+			goBack() {
+				uni.navigateBack({
+					delta: 1
+				})
+			}
+		},
+		computed: {
+			deviceId() {
+				return uni.getStorageSync(this.$constant.DEVICE_ID);
+			},
+			tenantId() {
+				const userinfo = uni.getStorageSync('userinfo');
+				const tenantid = userinfo.loginTenantId
+				return tenantid + "";
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	@import "components/table/helang-table";
+
+	.swiper-box {
+		flex: 1;
+	}
+
+	.swiper-item {
+		height: 100%;
+	}
+
+	.custom-swiper {
+		min-height: 1100rpx;
+	}
+
+	.swiper-item-view {}
+
+	.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;
+				}
+			}
+		}
+	}
+</style>
\ No newline at end of file
diff --git a/pages/index/index.vue b/packageA/pages/index/index.vue
similarity index 100%
rename from pages/index/index.vue
rename to packageA/pages/index/index.vue
diff --git a/pages/login/switchMode.vue b/packageA/pages/login/switchMode.vue
similarity index 100%
rename from pages/login/switchMode.vue
rename to packageA/pages/login/switchMode.vue
diff --git a/pages/me/analy.vue b/packageA/pages/me/analy.vue
similarity index 98%
rename from pages/me/analy.vue
rename to packageA/pages/me/analy.vue
index b1033a6..80d8b1d 100644
--- a/pages/me/analy.vue
+++ b/packageA/pages/me/analy.vue
@@ -76,7 +76,7 @@
 			this.$refs.form.validate().then(res => {
 				uni.$u.toast('鏍¢獙閫氳繃')
 				uni.navigateTo({
-					url:"/pages/analy/analyList"
+					url:"/packageA/pages/analy/analyList"
 				})
 			 
 			}).catch(errors => {
diff --git a/pages/me/control.vue b/packageA/pages/me/control.vue
similarity index 100%
rename from pages/me/control.vue
rename to packageA/pages/me/control.vue
diff --git a/pages/me/video.vue b/packageA/pages/me/video.vue
similarity index 100%
rename from pages/me/video.vue
rename to packageA/pages/me/video.vue
diff --git a/packageA/static/.DS_Store b/packageA/static/.DS_Store
new file mode 100644
index 0000000..12a201d
--- /dev/null
+++ b/packageA/static/.DS_Store
Binary files differ
diff --git a/packageA/static/image/ganzaoji-x.png b/packageA/static/image/ganzaoji-x.png
new file mode 100644
index 0000000..3e91f09
--- /dev/null
+++ b/packageA/static/image/ganzaoji-x.png
Binary files differ
diff --git a/static/image/pic_gz.jpg b/packageA/static/image/pic_gz.jpg
similarity index 100%
rename from static/image/pic_gz.jpg
rename to packageA/static/image/pic_gz.jpg
Binary files differ
diff --git a/static/image/pic_gzj.jpg b/packageA/static/image/pic_gzj.jpg
similarity index 100%
rename from static/image/pic_gzj.jpg
rename to packageA/static/image/pic_gzj.jpg
Binary files differ
diff --git a/static/image/zcy_equipment_run.gif b/packageA/static/image/zcy_equipment_run.gif
similarity index 100%
rename from static/image/zcy_equipment_run.gif
rename to packageA/static/image/zcy_equipment_run.gif
Binary files differ
diff --git a/static/image/zcy_gzj1.png b/packageA/static/image/zcy_gzj1.png
similarity index 100%
rename from static/image/zcy_gzj1.png
rename to packageA/static/image/zcy_gzj1.png
Binary files differ
diff --git a/pages.json b/pages.json
index 2914fb5..1ba8b1f 100644
--- a/pages.json
+++ b/pages.json
@@ -14,35 +14,61 @@
 				"enablePullDownRefresh": false
 			}
 
+		},
+		{
+			"path": "pages/tabBar/general",
+			"style": {
+				"navigationStyle": "custom"
+			}
+		
+		},
+		{
+			"path": "pages/tabBar/device",
+			"style": {
+				"navigationStyle": "custom",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
+		},
+		{
+			"path": "pages/tabBar/warning",
+			"style": {
+				"navigationStyle": "custom",
+				"app-plus": {
+					"titleNView": false
+				}
+			}
 		},
-		{
-			"path": "pages/index/index",
-			"style": {
-				"navigationBarTitleText": "uni-app"
-			}
-		},
-		{
-			"path": "pages/tabBar/main",
-			"style": {
-				"navigationStyle": "custom",
-				"app-plus": {
-					"titleNView": false
-				}
-
-			}
-		}, {
+		 {
 			"path": "pages/tabBar/formula",
 			"style": {
 				"navigationStyle": "custom"
 			}
 
-		}, {
-			"path": "pages/category/formulaDetail",
-			"style": {
-				"navigationStyle": "custom"
-			}
-
-		}, {
+		},
+		 {
+		 	"path": "pages/tabBar/me",
+		 	"style": {
+		 		"navigationStyle": "custom",
+		 		"app-plus": {
+		 			"titleNView": false
+		 		}
+		 	}
+		 
+		 }
+		 
+		/* {
+		 	"path": "pages/tabBar/main",
+		 	"style": {
+		 		"navigationStyle": "custom",
+		 		"app-plus": {
+		 			"titleNView": false
+		 		}
+		 
+		 	}
+		 },
+		{
 			"path": "pages/tabBar/monitor",
 			"style": {
 				"navigationStyle": "custom",
@@ -51,108 +77,89 @@
 				}
 			}
 
-		}, {
-			"path": "pages/tabBar/me",
-			"style": {
-				"navigationStyle": "custom",
-				"app-plus": {
-					"titleNView": false
-				}
-			}
+		}, */
+		 
 
-		}, {
-			"path": "pages/tabBar/general",
-			"style": {
-				"navigationStyle": "custom"
-			}
-
-		}
-
-		, {
-			"path": "pages/charts/charts",
-			"style": {
-				"navigationBarTitleText": "鍥捐〃",
-				"enablePullDownRefresh": false
-			}
-
-		}, {
-			"path": "pages/me/analy",
-			"style": {
-				"navigationStyle": "custom"
-			}
-
-		}, {
-			"path": "pages/analy/analyList",
-			"style": {
-				"navigationBarTitleText": "鐢熶骇璁板綍鍒嗘瀽",
-				"enablePullDownRefresh": false
-			}
-
-		}, {
-			"path": "pages/tabBar/demo",
-			"style": {
-				"navigationBarTitleText": "娴嬭瘯",
-				"enablePullDownRefresh": false
-			}
-
-		}, {
-			"path": "pages/me/control",
-			"style": {
-				"navigationStyle": "custom",
-				"app-plus": {
-					"titleNView": false
-				}
-			}
-
-		},
-		// {
-		// 	"path": "pages/me/video",
-		// 	"style": {
-		// 		"navigationStyle": "custom",
-		// 		"app-plus": {
-		// 			"titleNView": false
-		// 		}
-		// 	}
-
-		// },
-		{
-			"path": "pages/tabBar/device",
-			"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
-				}
-			}
-		}
-
-	],
+	],
+	"subPackages": [
+		{
+		      "root": "packageA",
+		      "pages": [
+		       {
+		       	"path": "pages/category/formulaDetail",
+		       	"style": {
+		       		"navigationStyle": "custom"
+		       	}
+		       
+		       }, {
+		       	"path": "pages/charts/charts",
+		       	"style": {
+		       		"navigationBarTitleText": "鍥捐〃",
+		       		"enablePullDownRefresh": false
+		       	}
+		       
+		       }, {
+		       	"path": "pages/me/analy",
+		       	"style": {
+		       		"navigationStyle": "custom"
+		       	}
+		       
+		       }, {
+		       	"path": "pages/analy/analyList",
+		       	"style": {
+		       		"navigationBarTitleText": "鐢熶骇璁板綍鍒嗘瀽",
+		       		"enablePullDownRefresh": false
+		       	}
+		       
+		       }, 
+			   {
+		       	"path": "pages/me/control",
+		       	"style": {
+		       		"navigationStyle": "custom",
+		       		"app-plus": {
+		       			"titleNView": false
+		       		}
+		       	}
+		       
+		       },
+		       // {
+		       // 	"path": "pages/me/video",
+		       // 	"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
+		       		}
+		       	}
+		       }
+		      ]
+		    }
+	],
+	"preloadRule": {
+	    "packageA/pages/device/control": {
+	      "network": "all",
+	      "packages": ["packageA"]
+	    }
+	},
 	"globalStyle": {
 		"navigationBarTextStyle": "white",
 		"navigationBarTitleText": "鍏板疂鏅鸿兘",
@@ -179,7 +186,7 @@
 			"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",
diff --git a/pages/device/control.vue b/pages/device/control.vue
deleted file mode 100644
index fd543fd..0000000
--- a/pages/device/control.vue
+++ /dev/null
@@ -1,658 +0,0 @@
-<template>
-	<view class="container">
-
-		<cu-custom bgColor="bg-gradual-blue" :isBack="true">
-			<block slot="content">1#鏅鸿兘骞茬嚗鏈�</block>
-		</cu-custom>
-		<view class="uni-padding-wrap">
-			<view class="page-section swiper">
-				<view class="page-section-spacing">
-					<swiper class="swiper" style="height: 450rpx;" circular="true" indicator-dots="true" autoplay="true"
-						interval="3500" duration="600">
-						<swiper-item class="swiper-list" v-for="(item, index) in bannerList" :key="index">
-							<view class="swiper-item uni-bg-red">
-								<image class="swiper-img" :src="item.imageUrl" mode="aspectFit"></image>
-							</view>
-						</swiper-item>
-					</swiper>
-				</view>
-			</view>
-		</view>
-
-		<!-- 鍙�氳繃璁剧疆bar-animate-mode="worm"寮�鍚瘺姣涜櫕妯″紡-->
-		<z-tabs ref="tabs" :current="swiperCurrent" :list="swiperList" @change="tabsChange"></z-tabs>
-		<swiper class="custom-swiper" :current="swiperCurrent" @transition="swiperTransition"
-			@animationfinish="swiperAnimationfinish">
-			<swiper-item :key="0">
-				<view class="swiper-item-view">
-					<uni-section title="璁惧淇℃伅" type="line">
-						<text class="text-bold text-black"></text>
-						<view class="h-table">
-							<view class="h-tr h-tr-2 h-thead">
-								<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">
-									<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">
-									<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>
-							</view>
-						</view>
-						<view class="h-table">
-							<view class="h-tr h-tr-2 h-thead">
-								<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">寮�</view>
-								<view class="h-td">70鈩�</view>
-								<view class="h-td">2.1kW路h</view>
-								<view class="h-td">10m鲁</view>
-							</view>
-						</view>
-					</uni-section>
-
-					<uni-section title="鑽潗淇℃伅" type="line" class="margin-top-sm">
-						<text class="text-bold text-black"></text>
-						<view class="h-table">
-							<view class="h-tr h-tr-2 h-thead">
-								<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">{{$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
-								</view>
-								<view class="h-td">{{$lget(model,'windTemp')}}kg</view>
-							</view>
-						</view>
-						<view class="h-table">
-							<view class="h-tr h-tr-2 h-thead">
-								<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"> </view>
-								<view class="h-td">{{$lget(model,'envTemp') == "" ? "--" :  $lget(model,'envTemp')}}%
-								</view>
-								<view class="h-td">{{$lget(model,'envHum') == "" ? "--" :$lget(model,'envHum') }}%
-								</view>
-								<view class="h-td">{{$lget(model,'windTemp')}}%</view>
-							</view>
-						</view>
-					</uni-section>
-
-
-
-					<uni-section title="杩涘害淇℃伅" type="line" class="margin-top-sm">
-						<text class="text-bold text-black"></text>
-						<view class="h-table">
-							<view class="h-tr h-tr-2 h-thead">
-								<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">10:10:10</view>
-								<view class="h-td">10min</view>
-								<view class="h-td">120min</view>
-							</view>
-						</view>
-						<view class="h-table">
-							<view class="h-tr h-tr-2 h-thead">
-								<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">3</view>
-								<view class="h-td">10min</view>
-								<view class="h-td">120min</view>
-							</view>
-						</view>
-					</uni-section>
-				</view>
-			</swiper-item>
-			<swiper-item :key="1">
-				<uni-section title="鎸囦护" type="line">
-					<view class="flex justify-center padding-lg bg-white">
-						<view class="margin-right-sm">
-							<u-button :disabled="connected" text="寮�鏈�" type="success"
-								@click="$u.throttle(showModal(1), 500)"></u-button>
-						</view>
-						<view class="margin-left-sm">
-							<u-button :disabled="!connected" text="鍏虫満" type="error"
-								@click="$u.throttle(showModal(2), 500)"></u-button>
-						</view>
-
-
-					</view>
-				</uni-section>
-
-
-				<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" :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>
-
-
-
-			</swiper-item>
-		</swiper>
-
-
-		<u-modal :show="show" @confirm="confirm" :showCancelButton="true" @cancel="show=false" ref="uModal"
-			:asyncClose="true">
-
-			<slot>
-				<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>
-		</u-modal>
-	</view>
-</template>
-
-<script>
-	import get from 'lodash.get'
-	// 鍥捐〃
-	import uCharts from "@/components/u-charts/u-charts.js";
-	var _self;
-	var canvaArea = null;
-	export default {
-		data() {
-			return {
-				//涓婁釜椤甸潰浼犻�掕繃鏉ョ殑鏁版嵁
-				option: {},
-				//鎿嶄綔鎸囦护log
-				logList: [],
-				//褰撳墠璁惧杩炴帴鐘舵��
-				connected: false,
-				//寮�鍏虫満鎸囦护 1-寮�鏈� 2-鍏虫満
-				cmd: -1,
-				show: false,
-				swiperList: ["鐩戞祴", "鎺у埗"],
-				swiperCurrent: 0,
-				chartData: {},
-				opts: {
-					color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
-						"#ea7ccc"
-					],
-					padding: [15, 10, 0, 15],
-					dataLabel: false,
-					dataPointShape: false,
-					enableScroll: false,
-					legend: {},
-					update: true,
-					xAxis: {
-						disableGrid: true,
-						labelCount: 6
-					},
-					yAxis: {
-						gridType: "dash",
-						dashLength: 2,
-					},
-					extra: {
-						line: {
-							type: "curve",
-							width: 2,
-							activeType: "hollow",
-							linearType: "custom"
-						}
-					}
-				},
-				notice: "2023-03-1812:00:001鍙锋満鍙颁綆娓╂姤璀�",
-				model: {},
-				queryParam: {
-					machineid: "",
-					tenantid: null
-				},
-				bannerList: [{
-					imageUrl: '../../static/image/zcy_gzj1.png'
-				}]
-
-
-			}
-		},
-		onShow() {
-			console.info("onShow")
-			this.startTimer()
-
-		},
-
-		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() {
-			this.stopTimer()
-		},
-		onHide() {
-			this.stopTimer()
-
-		},
-		onUnload() {
-
-		},
-		mounted() {
-
-		},
-		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) {
-			
-				const msg = JSON.parse(message);
-				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: {
-			//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() {
-				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)
-				}
-
-			},
-			stopTimer() {
-				clearInterval(this.$monitorTimer)
-				this.$monitorTimer = null
-				console.info("鐩戞帶椤甸潰闅愯棌")
-				console.info("瀹氭椂鍣ㄥ仠姝�")
-				console.info(this.$monitorTimer)
-			},
-			//tabs閫氱煡swiper鍒囨崲
-			tabsChange(index) {
-				this.swiperCurrent = index;
-			},
-			//swiper婊戝姩涓�
-			swiperTransition(e) {
-				this.$refs.tabs.setDx(e.detail.dx);
-			},
-			//swiper婊戝姩缁撴潫
-			swiperAnimationfinish(e) {
-				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() {
-				//妯℃嫙浠庢湇鍔″櫒鑾峰彇鏁版嵁鏃剁殑寤舵椂
-				setTimeout(() => {
-					let res = {
-						categories: ["2018", "2019", "2020", "2021", "2022", "2023"],
-						series: [{
-								name: "鎴愪氦閲廇",
-								data: [35, 8, null, 37, 4, 20]
-							},
-							{
-								name: "鎴愪氦閲廈",
-								connectNulls: true,
-								data: [70, 40, null, 100, 44, 68]
-							},
-							{
-								name: "鎴愪氦閲廋",
-								data: [100, 80, null, 150, 112, 132]
-							}
-						]
-					};
-					this.chartData = JSON.parse(JSON.stringify(res));
-				}, 500);
-			},
-
-			/**
-			 * 缁勫缓鏁版嵁
-			 */
-			createData() {
-				//娓╁害鏁版嵁 10s涓�娆�
-				let bellowsTemp = this.$lget(this.model, 'bellowsTemp');
-				//绉伴噸鏁版嵁 锛堥噸閲忋�佸惈姘寸巼锛�
-				let detailList = this.$lget(this.model, 'detailList');
-				if (!bellowsTemp) return;
-				let wmap = {} //鍙栧嚭鎵�鏈夐噸閲忔暟鎹�
-				let mmap = {} //鍙栧嚭鎵�鏈夋俯搴︽暟鎹�
-				let minW = null; //绗竴涓噸閲忔暟鎹�
-				let minM = null; //绗竴涓俯搴︽暟鎹�
-				let maxW = null; //鏈�鍚庝竴涓噸閲忔暟鎹�
-				let maxM = null; //鏈�鍚庝竴涓俯搴︽暟鎹�
-				//鍙栧嚭閲嶉噺鍜屽惈姘寸巼鏁版嵁
-				if (detailList && detailList.length > 0) {
-					for (var i = 0; i < detailList.length; i++) {
-						let item = detailList[i]
-						//姣忎釜鏃堕棿鑺傜偣閲嶉噺鏁版嵁
-						wmap[item.totalTime] = item.weight
-						mmap[item.totalTime] = item.moisture
-						if (i == 0) {
-							minW = item.weight
-							minM = item.moisture
-						}
-						if (i == (detailList.length - 1)) {
-							maxW = item.weight
-							maxM = item.moisture
-						}
-					}
-				}
-				let tList = [] //娓╁害
-				let wList = [] //閲嶉噺
-				let mList = [] //鍚按鐜�
-				let xList = [] //xAxis
-				//鏍规嵁娓╁害鏁版嵁闀垮害锛岀敓鎴恱杞淬�侀噸閲忓拰鍚按鐜囨暟缁勭瓑
-				for (let key in bellowsTemp) {
-					//console.log(key + '---' + bellowsTemp[key])
-					tList.push(bellowsTemp[key])
-					wList.push(wmap[key] || null)
-					mList.push(mmap[key] || null)
-					xList.push(key)
-				}
-				//濉厖娴嬭瘯鏁版嵁 TODO 鍒犻櫎
-				// for(let i = 1 ; i <= 10 ; i++){
-				// 	tList.push(i*2)
-				// 	wList.push(i*100)
-				// 	mList.push(i*10)
-				// 	xList.push(i)
-				// }
-
-				//绗竴涓暟鎹负绌� 璁剧疆涓虹涓�娆$О閲嶆暟鎹紙娌℃湁绉伴噸鏁版嵁鍒欒缃负0锛�
-				if (!wList[0]) {
-					wList[0] = minW || 0
-				}
-
-
-				if (!mList[0]) {
-					mList[0] = minM || 0
-				}
-
-				//鏈�鍚庝竴涓暟鎹负绌� 璁剧疆涓烘渶鍚庝竴娆$О閲嶆暟鎹�
-				if (!wList[wList.length - 1]) {
-					wList[wList.length - 1] = maxW
-				}
-
-				if (!mList[mList.length - 1]) {
-					mList[mList.length - 1] = maxM
-				}
-				// 	let weightList = detailList.map(item => {
-				// 		return {type: item.weight, data: []}
-				// 	})
-
-				let series = [{
-					name: '閲嶉噺',
-					data: wList,
-					connectNulls: true,
-					color: '#facc14'
-				}, {
-					name: '鍚按',
-					data: mList,
-					connectNulls: true,
-					color: '#2fc25b'
-				}, {
-					name: '娓╁害',
-					data: tList,
-					color: '#1890ff'
-				}]
-
-				// console.error(wmap)
-				// console.error(mmap)
-				// console.error("============")
-				// console.error(wList)
-				// console.error(mList)
-				// console.error(tList)
-				let res = {
-					categories: xList,
-					series: series
-				}
-				this.chartData = JSON.parse(JSON.stringify(res));
-			},
-			/**
-			 * 鑾峰彇瀹炴椂鏁版嵁
-			 */
-			getRealData() {
-				this.$api.getRealTimeData(this.queryParam).then((res) => {
-					if (res.success) {
-						this.model = res.result
-						//鍒涘缓鍥捐〃鏁版嵁
-						this.createData()
-					}
-				}).catch((err) => {
-					console.log('request fail', err);
-				})
-			},
-
-			goBack() {
-				uni.navigateBack({
-					delta: 1
-				})
-			}
-		},
-		computed: {
-			deviceId() {
-				return uni.getStorageSync(this.$constant.DEVICE_ID);
-			},
-			//杩愯鐘舵��
-			runStatu() {
-				let stop = this.$lget(this.model, 'stop');
-				return !stop
-
-			},
-			//鎶ヨ鐘舵�� TODO 鏆傛椂涓嶇敤
-			warmStatu() {
-				if (this.runStatu) {
-					if (this.model.envTemp < 50) {
-						return true
-					} else {
-						return false
-					}
-				} else {
-					return false
-				}
-
-
-			},
-			//閰嶆柟鍚嶇О
-			formulaName() {
-				let name = this.$lget(this.model, 'herbName')
-				let code = this.$lget(this.model, 'code')
-				let formula = ""
-				if (name) {
-					formula = name;
-				}
-				if (code) {
-					formula = formula + code
-				}
-				return formula
-			},
-			//骞茬嚗寮�濮嬫椂闂�
-			startTime() {
-				let detailList = this.$lget(this.model, 'detailList')
-				if (detailList) {
-					if (detailList.length > 0) {
-						return detailList[0].tim
-					}
-				}
-				return ""
-			},
-
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	@import "components/table/helang-table";
-
-	.swiper-box {
-		flex: 1;
-	}
-
-	.swiper-item {
-		height: 100%;
-	}
-
-	.custom-swiper {
-		min-height: 1100rpx;
-	}
-
-	.swiper-item-view {}
-</style>
\ No newline at end of file
diff --git a/pages/login/login.vue b/pages/login/login.vue
index 2091c20..416fbe6 100644
--- a/pages/login/login.vue
+++ b/pages/login/login.vue
@@ -44,8 +44,8 @@
 				show: false,
 				pass: "",
 				model: {
-					username: "tongjitang",
-					password: "123456"
+					username: "",
+					password: ""
 				},
 				rules: {
 					'username': {
@@ -95,13 +95,11 @@
 			},
 			switchMode() {
 				uni.navigateTo({
-					url: "/pages/login/switchMode"
+					url: "/packageA/pages/login/switchMode"
 				})
 			},
 			forget() {
-				uni.navigateTo({
-					url: "/pages/tabBar/demo"
-				})
+			 
 			},
 			submit() {
 				const mode = uni.getStorageSync('mode');
diff --git a/pages/tabBar/components/equList.vue b/pages/tabBar/components/equList.vue
new file mode 100644
index 0000000..04da7e9
--- /dev/null
+++ b/pages/tabBar/components/equList.vue
@@ -0,0 +1,224 @@
+<template>
+	<view class="app">
+		<z-paging ref="paging" v-model="dataList" show-refresher-update-time @query="queryList" :hide-empty-view="true">
+			<!-- 闇�瑕佸浐瀹氬湪椤堕儴涓嶆粴鍔ㄧ殑view鏀惧湪slot="top"鐨剉iew涓紝濡傛灉闇�瑕佽窡鐫�婊氬姩锛屽垯涓嶈璁剧疆slot="top" -->
+			<template #top>
+				
+				<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">{{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="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>
+										<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>
+				
+				
+				
+				</view>
+				
+							
+
+			</template>
+			<view class="container">
+				
+				<view class="equ-box borderTop">
+					<div v-for="i in 9" class="equ-item">
+
+					</div>
+
+				</view>
+			</view>
+
+
+
+
+		</z-paging>
+
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				dataList: [],
+				loading: false,
+				//瀹炴椂鎶ヨ鏁版嵁鏇存柊鏃堕棿锛堜竴鑸�10s锛�
+				refreshTime: '',
+				//鎶ヨ鎬绘暟
+				count: 0,
+				//鍛婅鎬绘暟
+				alarmCount: 0,
+				//鏁呴殰鎬绘暟
+				faultCount: 0,
+				//鏁呴殰鏈哄彴
+				faultEqus: "",
+				//鍛婅鏈哄彴
+				alarmEqus: "",
+				curDate: dayjs().format('YYYY-MM-DD'),
+			}
+		},
+		methods:{
+			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
+				})
+			
+			
+			},
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.container {
+		margin: 0 20rpx;
+		padding: 20rpx;
+		box-sizing: border-box;
+		background-color: white;
+		font-family: Helvetica Neue, Helvetica, sans-serif;
+
+	}
+	
+	.card-box {
+		margin: 20rpx;
+		padding: 20rpx;
+		box-sizing: border-box;
+		background-color: white;
+		border-radius: 20rpx;
+		font-family: Helvetica Neue, Helvetica, sans-serif;
+	
+	}
+	
+	.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;
+			}
+		}
+	}
+
+	.equ-box {
+		display: flex;
+		flex-wrap: wrap;
+		gap: 20rpx 0px;
+		justify-content: space-between;
+	}
+
+	.equ-item {
+		width: calc((100% - 20rpx)/2);
+		height: 200rpx;
+		border-radius: 20rpx;
+		background-color: #ecf5ff;
+	}
+
+	.borderTop {
+		border-top: 2rpx solid #f2f2f2;
+		padding-top: 20rpx;
+	}
+</style>
\ No newline at end of file
diff --git a/pages/tabBar/components/realWarning.vue b/pages/tabBar/components/realWarning.vue
index 7930f28..9eb657f 100644
--- a/pages/tabBar/components/realWarning.vue
+++ b/pages/tabBar/components/realWarning.vue
@@ -16,7 +16,7 @@
 			</view>
 			<view class="fault-box">
 
-				<image style="width: 100%;border-radius: 20rpx; " src="../../../static/image/ganzaoji-x.png"
+				<image style="width: 100%;border-radius: 20rpx; " src="../../../packageA/static/image/ganzaoji-x.png"
 					mode="aspectFit">
 				</image>
 
@@ -56,7 +56,7 @@
 				<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>
+							src="../../../packageA/static/image/pic_gz.jpg"></image>
 					</view>
 					<view
 						style="display: flex;flex: 1;flex-direction: column; justify-content: space-between;  ;height: 100%;padding: 20rpx;">
@@ -77,7 +77,7 @@
 
 				</view>
 			</view>
-
+			</view>
 		</view>
 
 
@@ -407,6 +407,7 @@
 						show: false
 					},
 				],
+			
 			}
 		},
 		mounted() {
diff --git a/pages/tabBar/device.vue b/pages/tabBar/device.vue
index 9adac13..b1c0a83 100644
--- a/pages/tabBar/device.vue
+++ b/pages/tabBar/device.vue
@@ -18,14 +18,15 @@
 								<view class="title">鎬昏</view>
 							</view>
 							<view>
-								<text
-									class="text-gray margin-right-lg">{{curDate}}</text>
+								<text class="text-gray text-sm">{{curDate}}</text>
 							</view>
 
 						</view>
 
 					</view>
-					<view class="flex flex-direction padding-xs">
+
+
+					<!-- <view class="flex flex-direction padding-xs">
 						<view class="flex">
 							<view class="flex-sub flex flex-direction text-center">
 								<text class="text-df">璁惧鎬绘暟</text>
@@ -52,7 +53,65 @@
 
 						</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-green margin-top-sm">{{onlineCount}}
+									<text class="text-gray text-sm margin-left-xs">鍙�</text></text>
+
+							</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>
+										<text class="margin-lr-xs text-gray text-bold text-xl">{{equCount}}</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 text-bold text-xl">{{faultEquCount}}</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">0</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 text-bold text-xl">{{alarmEquCount}}</text>
+										<text class="text-gray text-xs"></text>
+
+									</view>
+
+								</view>
+
+							</view>
+
+						</view>
+
+
 					</view>
+
 
 
 				</view>
@@ -62,9 +121,9 @@
 
 
 
-			<u-skeleton   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"
+				<view class="card-item-box dynamic shadow" v-for="(item,index) in dataList" :key="index"
 					@click="itemClick(item)">
 					<view class="title-box">
 						<view class="left flex-sub">
@@ -72,48 +131,59 @@
 							<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  size="mini" text="绂荤嚎" type="warning" plain plainFill></u-tag>
-								<u-tag v-if="item.online" class="margin-left-sm" size="mini" text="鍦ㄧ嚎" type="success" plain plainFill></u-tag>
-								<u-tag  v-else class="margin-left-sm" size="mini" text="鍋滄満" type="error" plain plainFill></u-tag>
+								<u-tag v-else size="mini" text="绂荤嚎" type="warning" plain plainFill></u-tag>
+								<view style="width: 20rpx;height: 2rpx"></view>
+								<template v-if="$lget(item,'realData.level')!= '--'">
+									<u-tag size="mini" :text="$lget(item,'realData.level')" plain plainFill></u-tag>
+								</template>
+
 							</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">{{$lget(item,'upTime')}}</view>
+							<view class="title text-gray text-sm">{{$lget(item,'realData.workorder')}}</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 class="title text-sm">{{$lget(item,'realData.name')}}</view>
 						</view>
 						<view class="right" style="min-width: 240rpx;">
-							<view class="title text-sm">鐑樺共鏃堕棿:</view>
-							<view class="title text-sm text-gray">--</view>
+							<view class="title text-sm">鎶曟枡閲�:</view>
+							<view class="title text-sm text-gray">{{$lget(item,'realData.weight1')}}绛�</view>
+						</view>
+					</view>
+
+					<view class="info-box">
+						<view class="left flex-sub">
+							<view class="title text-sm">宸茬敤鏃堕棿:</view>
+							<view class="title text-sm">{{$lget(item,'realData.time3')}}min</view>
+						</view>
+						<view class="right" style="min-width: 240rpx;">
+							<view class="title text-sm">棰勬祴鍓╀綑:</view>
+							<view class="title text-sm text-gray">{{$lget(item,'realData.ai_total_time')}}min</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>
+							<template v-if="item.errorData">
+								<view class="title text-sm text-red">鏁呴殰 {{item.errorData.length}}</view>
+							</template>
 
+							<template v-if="item.warnData">
+								<view class="title text-sm text-yellow">鍛婅 {{item.warnData.length}}</view>
+							</template>
+
+						</view>
+						<view class="right" style="min-width: 240rpx;">
+							<view class="title text-sm">鏇存柊鏃堕棿:</view>
+							<view class="title text-sm text-gray">{{ refreshTime}}</view>
+						</view>
 					</view>
 
 				</view>
@@ -124,46 +194,244 @@
 </template>
 
 <script>
+	import dayjs from 'dayjs'
 	export default {
 		data() {
 			return {
 				loading: true,
 				// v-model缁戝畾鐨勮繖涓彉閲忎笉瑕佸湪鍒嗛〉璇锋眰缁撴潫涓嚜宸辫祴鍊硷紒锛侊紒
 				dataList: [],
-				curDate:uni.$u.timeFormat(new Date(), 'yyyy-mm-dd'),
+				curDate: uni.$u.timeFormat(new Date(), 'yyyy-mm-dd'),
+				isProcessing: false,
+				// key->璁惧绉熸埛+code 
+				dataMap: new Map(),
+				// 鏇存柊鏃堕棿
+				refreshTime: '',
+				alarmEquCount: 0,
+				faultEquCount: 0,
+				timer: null
+
 			}
-		},
-		onTabItemTap : function(e) {
-		getApp().globalData.selectTab = e.index
+		},
+		mounted() {
+			this.startTimer()
+			this.mqttData()
+		},
+		beforeDestroy() {
+			this.stopTimer()
+			uni.$off(this.$constant.MQTT_TOPIC_MESSAGE)
+		},
+		onTabItemTap: function(e) {
+			getApp().globalData.selectTab = e.index
 		},
 		methods: {
 			queryList(pageNo, pageSize) {
 				this.loading = true;
-				// 缁勪欢鍔犺浇鏃朵細鑷姩瑙﹀彂姝ゆ柟娉曪紝鍥犳榛樿椤甸潰鍔犺浇鏃朵細鑷姩瑙﹀彂锛屾棤闇�鎵嬪姩璋冪敤
-				// 杩欓噷鐨刾ageNo鍜宲ageSize浼氳嚜鍔ㄨ绠楀ソ锛岀洿鎺ヤ紶缁欐湇鍔″櫒鍗冲彲
-				// 妯℃嫙璇锋眰鏈嶅姟鍣ㄨ幏鍙栧垎椤垫暟鎹紝璇锋浛鎹㈡垚鑷繁鐨勭綉缁滆姹�
 				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
+			// 璁惧鏁版嵁鍜宮tqq瀹炴椂鏁版嵁鍚堝苟
+			mergeMqttRealData(mqttData) {
+				const {
+					tenantid,
+					machineid
+				} = mqttData;
+				if (!tenantid || !machineid) return;
+				const key = `${tenantid}_${machineid}`;
+				const targetItem = this.dataList.find(item =>
+					item.tenantId === tenantid && item.code === machineid
+				);
+				if (targetItem) {
+					const updatedItem = {
+						...targetItem,
+						realData: mqttData
+					};
+					this.$set(this.dataList, this.dataList.indexOf(targetItem), updatedItem);
+
+				}
+
+
+			},
+			startTimer() {
+				this.timer = setInterval(() => {
+					this.queryRealFaultData();
+				}, 3000);
+			},
+			stopTimer() {
+				clearInterval(this.timer);
+			},
+			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 => {
+
 				})
+			},
+
+			itemClick(item) {
+				uni.navigateTo({
+					url: "/packageA/pages/device/control?code=" + item.code + "&name=" + item.name + "&clientId=" +
+						item.clientId
+				})
+			},
+			mqttData() {
+				uni.$on(this.$constant.MQTT_TOPIC_MESSAGE, (data) => {
+					try {
+						// 1. 鏁版嵁瑙f瀽鍜岄獙璇�
+						const {
+							data: wdata,
+							topic
+						} = this.parseAndValidateMqttData(data);
+						if (!wdata || !topic) return;
+
+						// 2. 鍑嗗涓婚甯搁噺
+						const topics = this.prepareMqttTopics();
+
+						// 3. 鏇存柊鍒锋柊鏃堕棿
+						this.refreshTime = dayjs().format('HH:mm:ss');
+
+						// 4. 鏍规嵁涓婚澶勭悊鏁版嵁
+						switch (topic) {
+							case topics.updateEquStatu:
+								this.handleEquipmentStatusUpdate(wdata);
+								break;
+							case topics.realData:
+								this.mergeMqttRealData(wdata);
+								break;
+							case topics.realFaultTopic:
+							case topics.oneceFaultTopic:
+								this.handleFaultData(wdata);
+								break;
+						}
+					} catch (error) {
+						console.error('MQTT鏁版嵁澶勭悊閿欒:', error);
+					}
+				});
+			},
+
+			// 杈呭姪鏂规硶锛氳В鏋愬拰楠岃瘉MQTT鏁版嵁
+			parseAndValidateMqttData(data) {
+				try {
+					const json = JSON.parse(data);
+					if (!json?.data || !json?.topic) return {
+						data: null,
+						topic: null
+					};
+					return {
+						data: json.data,
+						topic: json.topic
+					};
+				} catch (e) {
+					return {
+						data: null,
+						topic: null
+					};
+				}
+			},
+
+			// 杈呭姪鏂规硶锛氬噯澶嘙QTT涓婚
+			prepareMqttTopics() {
+				return {
+					updateEquStatu: this.$constant.SERVICE_BROADCAST_TENANT_UPDATE_EQU_STATU
+						.replace('%s', this.tenantId),
+					realData: this.$constant.SERVICE_BROADCAST_TENANT_REAL_DATA
+						.replace('%s', this.tenantId),
+					realFaultTopic: this.$constant.SERVICE_BROADCAST_TENANT_REAL_FAULT
+						.replace('%s', this.tenantId),
+					oneceFaultTopic: this.$constant.SERVICE_ONECE_TENANT_REAL_FAULT.replace('%s', this
+						.deviceId)
+				};
+			},
+
+			// 杈呭姪鏂规硶锛氬鐞嗚澶囩姸鎬佹洿鏂�
+			handleEquipmentStatusUpdate(wdata) {
+				const {
+					connected,
+					tenantId,
+					code
+				} = wdata;
+				const index = this.dataList.findIndex(item =>
+					(item.tenantId + "") === tenantId && item.code === code
+				);
+
+				if (index === -1) return;
+
+				// 鏇存柊鍦ㄧ嚎鐘舵��
+				this.$set(this.dataList[index], 'online', connected);
+
+				// 濡傛灉绂荤嚎锛屽垹闄ゅ疄鏃舵暟鎹�
+				if (!connected && this.dataList[index]?.realData) {
+					this.$delete(this.dataList[index], 'realData');
+				}
+			},
+
+			// 杈呭姪鏂规硶锛氬鐞嗘晠闅滄暟鎹�
+			handleFaultData(wdata) {
+				if (!Array.isArray(wdata)) return;
+
+				// 鎸夎澶囧垎缁勬晠闅滄暟鎹�
+				const faultMap = wdata.reduce((map, item) => {
+					const key = `${item.tenantId}_${item.equCode}`;
+					map.get(key)?.push(item) || map.set(key, [item]);
+					return map;
+				}, new Map());
+
+				// 鏇存柊姣忎釜璁惧鐨勬晠闅滀俊鎭�
+				faultMap.forEach((faults, key) => {
+					const [tenantId, equCode] = key.split("_");
+					const targetItem = this.dataList.find(i =>
+						i.tenantId == tenantId && i.code == equCode
+					);
+
+					if (targetItem) {
+						const updatedItem = {
+							...targetItem,
+							errorData: faults.filter(f => f.faultType === 1).map(n => n.faultName),
+							warnData: faults.filter(f => f.faultType === 2).map(n => n.faultName),
+						};
+						this.$set(this.dataList, this.dataList.indexOf(targetItem), updatedItem);
+					}
+				});
+
+				this.faultEquCount = this.dataList.filter(item => {
+					return (
+						item.errorData &&
+						Array.isArray(item.errorData) &&
+						item.errorData.length > 0
+					);
+				}).length || 0;
+
+				this.alarmEquCount = this.dataList.filter(item => {
+					return (
+						item.warnData &&
+						Array.isArray(item.warnData) &&
+						item.warnData.length > 0
+					);
+				}).length || 0;
+
 			}
+
+
 
 		},
 		onReady() {
@@ -176,6 +444,14 @@
 			onlineCount() {
 				const list = this.dataList.filter(item => item.online)
 				return list.length
+			},
+			tenantId() {
+				const userinfo = uni.getStorageSync('userinfo');
+				const tenantid = userinfo.loginTenantId
+				return tenantid + "";
+			},
+			deviceId() {
+				return uni.getStorageSync(this.$constant.DEVICE_ID);
 			}
 		}
 	}
@@ -195,7 +471,24 @@
 		background-color: white;
 		border-radius: 20rpx;
 		font-family: Helvetica Neue, Helvetica, sans-serif;
+	}
 
+	.card-item-box {
+		margin: 0rpx 20rpx 10rpx 20rpx;
+		padding: 20rpx;
+		box-sizing: border-box;
+		background-color: white;
+		border-radius: 20rpx;
+		font-family: Helvetica Neue, Helvetica, sans-serif;
+	}
+
+	/* 绗簩涓強涔嬪悗鐨� item */
+	.card-item-box:not(:first-child) {
+		margin: 10rpx 20rpx;
+	}
+
+	.margin-left-sm {
+		margin-left: 20rpx;
 	}
 
 
diff --git a/pages/tabBar/formula.vue b/pages/tabBar/formula.vue
index fbd51e0..7a3e56b 100644
--- a/pages/tabBar/formula.vue
+++ b/pages/tabBar/formula.vue
@@ -61,7 +61,7 @@
       showItem(item){
         console.info(item)
         uni.navigateTo({
-          url:"/pages/category/formulaDetail"
+          url:"/packageA/pages/category/formulaDetail"
         })
       },
       getImg() {
diff --git a/pages/tabBar/general.vue b/pages/tabBar/general.vue
index 5dd04a6..ffbf736 100644
--- a/pages/tabBar/general.vue
+++ b/pages/tabBar/general.vue
@@ -367,6 +367,9 @@
 					// #endif
 					// #ifdef APP-PLUS
 					url: 'wx://' + this.$api.mqttBaseUrl + ':8083/mqtt',
+					// #endif
+					// #ifdef MP-WEIXIN
+					url: 'wss://' + this.$api.mqttBaseUrl + '/mqtt', // 蹇呴』鐢� wss锛岀鍙i�氬父涓�443鍙渷鐣�
 					// #endif
 					clientId: this.deviceId,
 					username: account.username,
@@ -397,7 +400,9 @@
 					qos: 0
 				}).then(res => {
 					console.error(res)
-				})
+				})
+				
+
 				//璁㈤槄鍙戦�佹寚浠よ繑鍥炵粨鏋�
 				// this.$mqttTool.subscribe({
 				// 	topic: this.$constant.SERVICE_RES_EQU_CMD,
@@ -456,7 +461,7 @@
 			},
 			goCharts(e) {
 				uni.navigateTo({
-					url: "/pages/charts/charts"
+					url: "/packageA/pages/charts/charts"
 				})
 			},
 			getOrderList(date1, date2) {
@@ -573,7 +578,6 @@
 <style lang="scss" scoped>
 	.app {
 		width: 100%;
-		max-height: 100vh;
 		overflow: hidden;
 	}
 
diff --git a/pages/tabBar/me.vue b/pages/tabBar/me.vue
index a451278..ad010a9 100644
--- a/pages/tabBar/me.vue
+++ b/pages/tabBar/me.vue
@@ -227,15 +227,15 @@
 			itemClick(mode) {
 				if (mode == 'control') {
 					uni.navigateTo({
-						url: "/pages/me/control"
+						url: "/packageA/pages/me/control"
 					})
 				} else if (mode == 'video') {
 					uni.navigateTo({
-						url: "/pages/me/video"
+						url: "/packageA/pages/me/video"
 					})
 				} else if (mode == 'analy') {
 					uni.navigateTo({
-						url: "/pages/me/analy"
+						url: "/packageA/pages/me/analy"
 					})
 				} else if (mode == 'other') {
 					uni.navigateTo({
diff --git a/pages/tabBar/warning-new.vue b/pages/tabBar/warning-new.vue
new file mode 100644
index 0000000..0bc5e1e
--- /dev/null
+++ b/pages/tabBar/warning-new.vue
@@ -0,0 +1,267 @@
+<template>
+	<view class="app">
+		<z-paging ref="paging" v-model="dataList" show-refresher-update-time @query="queryList" :hide-empty-view="true">
+			<!-- 闇�瑕佸浐瀹氬湪椤堕儴涓嶆粴鍔ㄧ殑view鏀惧湪slot="top"鐨剉iew涓紝濡傛灉闇�瑕佽窡鐫�婊氬姩锛屽垯涓嶈璁剧疆slot="top" -->
+			<template #top>
+				<cu-custom bgColor="bg-gradual-blue" :isBack="false" :isRight="true" @rightclick="">
+					<block slot="content">鎶ヨ鏈哄彴</block>
+				</cu-custom>
+				<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">{{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="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>
+										<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>
+
+
+
+				</view>
+
+
+
+			</template>
+			<view class="container">
+				<view class="flex align-center">
+					<uni-text class="cuIcon-titles text-blue"></uni-text>
+					<view class="title">璁惧鍒楄〃</view>
+				</view>
+				<view class="equ-box">
+					<div v-for="(item,index) in dataList" :key="index" class="equ-item">
+
+					</div>
+
+				</view>
+			</view>
+
+
+
+
+		</z-paging>
+
+	</view>
+</template>
+
+<script>
+ 
+	import dayjs from 'dayjs'
+	export default {
+ 
+		data() {
+			return {
+				loading: true,
+				dataList: [],
+				curDate: dayjs().format('YYYY-MM-DD'),
+				//瀹炴椂鎶ヨ鏁版嵁鏇存柊鏃堕棿锛堜竴鑸�10s锛�
+				refreshTime: '',
+				//鎶ヨ鎬绘暟
+				count: 0,
+				//鍛婅鎬绘暟
+				alarmCount: 0,
+				//鏁呴殰鎬绘暟
+				faultCount: 0,
+				//鏁呴殰鏈哄彴
+				faultEqus: "",
+				//鍛婅鏈哄彴
+				alarmEqus: "",
+			}
+		},
+		onTabItemTap: function(e) {
+			getApp().globalData.selectTab = e.index
+		},
+		onShow() {
+
+		},
+		onReady() {
+		    
+		},
+		methods: {
+
+			queryList(pageNo, pageSize) {
+				this.loading = true;
+				const params = {
+					pageNo: pageNo,
+					pageSize: pageSize,
+				}
+		 
+			 this.$api.queryEquList(params).then((res) => {
+			 	this.$refs.paging.complete(res.result.records);
+			 	this.loading = false
+			 }).catch(res => {
+			 
+			 	this.$refs.paging.complete(false);
+			 	this.loading = false
+			 })
+
+			},
+ 
+			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>
+
+<style lang="scss" scoped>
+	.container {
+		margin: 0 20rpx;
+		padding: 20rpx;
+		box-sizing: border-box;
+		background-color: white;
+		font-family: Helvetica Neue, Helvetica, sans-serif;
+		border-radius: 20rpx;
+
+	}
+
+	.card-box {
+		margin: 20rpx;
+		padding: 20rpx;
+		box-sizing: border-box;
+		background-color: white;
+		border-radius: 20rpx;
+		font-family: Helvetica Neue, Helvetica, sans-serif;
+
+	}
+
+	.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;
+			}
+		}
+	}
+
+	.equ-box {
+		display: flex;
+		flex-wrap: wrap;
+		margin-top: 20rpx;
+		gap: 20rpx 0px;
+		justify-content: space-between;
+	}
+
+	.equ-item {
+		width: calc((100% - 20rpx)/2);
+		height: 200rpx;
+		border-radius: 20rpx;
+		background-color: #ecf5ff;
+	}
+
+	.borderTop {
+		border-top: 2rpx solid #f2f2f2;
+		padding-top: 20rpx;
+	}
+</style>
\ No newline at end of file
diff --git a/pages/tabBar/warning.vue b/pages/tabBar/warning.vue
index 590c26f..c3aed9d 100644
--- a/pages/tabBar/warning.vue
+++ b/pages/tabBar/warning.vue
@@ -4,7 +4,7 @@
 			<!-- 闇�瑕佸浐瀹氬湪椤堕儴涓嶆粴鍔ㄧ殑view鏀惧湪slot="top"鐨剉iew涓紝濡傛灉闇�瑕佽窡鐫�婊氬姩锛屽垯涓嶈璁剧疆slot="top" -->
 			<template #top>
 				<cu-custom bgColor="bg-gradual-blue" :isBack="false" :isRight="true" @rightclick="rclick">
-					<block slot="content">鎶ヨ</block>
+					<block slot="content">鎶ヨ缁熻</block>
 
 				</cu-custom>
 
@@ -33,6 +33,7 @@
 						</view>
 
 					</view>
+					
 					<view class="flex flex-direction padding-xs">
 						<view class="flex">
 							<view class="flex-sub flex flex-direction">
@@ -114,8 +115,8 @@
 			</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>
+		  <!-- <real-warning ref="realWarining" v-if="tabCurrent === 0" @handleData="realHandleData"></real-warning>  -->
+			<his-warning ref="hisWarining" v-if="tabCurrent === 0" @handleData="hisHandleData"></his-warning>
 
 
 		</z-paging>
@@ -139,18 +140,20 @@
 				// v-model缁戝畾鐨勮繖涓彉閲忎笉瑕佸湪鍒嗛〉璇锋眰缁撴潫涓嚜宸辫祴鍊硷紒锛侊紒
 				dataList: [],
 				curDate: dayjs().format('YYYY-MM-DD'),
-				tabList: [{
-					name: '瀹炴椂鎶ヨ',
-					// badge: {
-					// 	count: 6
-					// }
-				}, {
+				tabList: [
+				// 	{
+				// 	name: '瀹炴椂鎶ヨ',
+				// 	// badge: {
+				// 	// 	count: 6
+				// 	// }
+				// }, 
+				{
 					name: '鎶ヨ缁熻',
 				}],
-				equList: [{
+				equList: [/* {
 						code: 1,
 						name: '1#骞茬嚗鏈�'
-					},
+					}, */
 					{
 						code: 2,
 						name: '2#骞茬嚗鏈�'
diff --git a/private.wx8aa7310d86d0b80d.key b/private.wx8aa7310d86d0b80d.key
deleted file mode 100644
index 8f82259..0000000
--- a/private.wx8aa7310d86d0b80d.key
+++ /dev/null
@@ -1,27 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIIEpQIBAAKCAQEAtRvOKvFO0xk1Kwn+v19FgkvW/gIWXg/prT8gPbtlIK8reX+J
-Xnom+DmQzgX8ECstbvl0xh1nxdY+IgV7pY+dR2QHj7al7B4ukwTu4k6d4dM95TGP
-noJXl+VhS6Cssexzhk8n6ozkCtdHP1vv4zkMdkP9DirbZb7ccxhI40gXkzQu2xav
-GTl2/XzuWwuLPBTjIhIY61++hzCxjnKpm2+9xUg60FIu+azr6zt4/eu81RJd/e/4
-nGOdR0NpkmIDuGaVlzfuyh3dr2+XXU65FWuijyFacVB4jqRpYr0/zZtCoQDvlKAm
-LvTlYgYXtBpN286nPq64czn+vHYsRY/wI3mF8QIDAQABAoIBACixH6iMYV6S6lxK
-OZ+8Az0cVyjpRSdLQgC4D0FvinBGi2kYG8BLh9f77yorNBBZ8zJdADzHPJq54Wn5
-e2eelgMFWaGTs0ITIfnMgPP+IAEuWljVwuQlexLY6fx5FHRBoU9LF7feghphdlOp
-D4QpPECSVBhLztHUiWmeyjmu6AUdsqpQX8E5shD9j2yXLznz3X1S1AGzwKAwQOYL
-FiZ/wFX59opd693LdMEq/262RHjnSOoT8OAbq7t6I/WVdp1hqEBXqyyUnu0SBOtn
-S0Bz6xAaHOZCiNzvtMhEiDVlqvIiODqS0nh7D/d2iyuU9nni0Ckale7WYNYnu5kE
-Xyao7cUCgYEA2NXYwy80QnHm/mE0TMhuhDvFNEmTwOexUEDIciajsi/EzgA55jmv
-KLNPWgAwebYc0si+obfImLWxwPvgD3goND7jq8WSH+fdryRvN0IpXkA/zIVjgTxb
-UcFH0XMlmo0tYYXJbIbpwVXRIOyCay2kKhdJg1v/1sygk/Y9hN0xuHsCgYEA1dIB
-pSmbuRRhaK4d5sHmZLhuoeXLmj/GkmCQJw03cA8aBpkvCaDmiyPCdIhH7Ju0IC1N
-YgTPqeJBv2cA3TNbOqC0uXFY5cnq/XWzbHr5DEZOmHfRgy3EKx7EZ5d3lJMRNvF9
-x99WUyudChNFBpEBcO7zCW27RAFHhpk13ooHrYMCgYEAgu8uwz3/2peZGsZrpGnr
-gmHtRROg6v19bq6P245FjtWVi6dLTyBKCtOr+PbgTr6PTSD3LAQkV0JwIc52kCDI
-djP7mr/k6utCS/4+QinrfQRjAgcR/PoLUqTZzzou3NKfMqJs7OHSyXIepDjsz/dx
-iBEjzPSC2pwZ4v7wSwiee30CgYEAzdE0XDNM/j6r9QOFLNaAW3tcouJ7taKmFch1
-eeGy917SAn/5Ux9aS5zEVT/JW+wU2tRApJVU/4YXG5Ketk31Bt4imE6O78IJPKjL
-aSSGDlau2Pyc49Rt+8PF8qFOLenSrDyQgpBsm+pjY4tg6g0yge7AatcBZ1iD7QAV
-Zn0fHtkCgYEAjzdUZ74EaKYuVrQIr0cCOxl5PympiFla5Ued01yBqRbWjOfNPVkg
-einVTdOdSlZtLIFpNKWDqFES7JZQ+UG3k8mECPPAIEMpQXchXRafZWUOYWks9l9I
-1yb0Ka/NP+FoSPmZcQYqK5TMCHqyZtxy9vNixXTRiypiz8+SLgzEzTA=
------END RSA PRIVATE KEY-----
diff --git a/private.wxe6f8a31c3df63a20.key b/private.wxe6f8a31c3df63a20.key
new file mode 100644
index 0000000..c53ba44
--- /dev/null
+++ b/private.wxe6f8a31c3df63a20.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEA0BFj3BZsxbfJdpVxGZTwHHrmHTZtdJ708RwgJb5qcOWu8m7S
+KxOhXiObzMxCVYrsPtfnbvd6QbfdP7XKF2DK2cvzoNcX+6H3WQW9GYZOumV8vMHY
+YFQNtJMw5a41+M18baDDRglGy2U0i/dg/WRi0EDbaaf6PlqouPym06iQp5cQx6nQ
+pHFyeH1RYOxx6ygqielyjMGCVtwh6yQyAt9R4IYsJpW6VS9Yu8YvP5w4Bc/P+KnN
+M7OsV9a5nMew6KJUfXa0eU2HRnWtPYx7W2OTxT0zTdO90Iknetg8LMO9cmgEt9mX
+74JCc7TwGf5RBmieQK14wYkZSK9EbGjMAfDmrQIDAQABAoIBAGEA2oePROLhDmHk
+xjfhAhilC4dvCpSmTxfhvvMZ1VIRIwEPvZgrrL3Q6CAQ0pRDEmUyD0niwvLEn7fG
+LxO7IpdryIeiACJmnoS4cjLmNOodyovN6+ztAv6+6LsL/0mhs3MA0klipcjJxDfE
++0jndlIVCrY1hCtx5NtpnvVqzxXyNqzo/qs07euThUUvclNJsN8+YM2OJwGLpY/z
+lAsyYlohqfwVALTdFJoAdrcjN4nDS4xGue4Fj8XaDRAD4cayhG6cMO1acRYW0u+a
+2+XaeKGeHQCea/6E/6hJ0KmcT9nWbSLD09xfxvyovxXMe7msvX7k4WJUKLvXcqZh
+rVoj2NkCgYEA7X9Ead5qQtFzS805tEtV1dRPJGDpooX6NJl3BzqceJXd6jhnTsSv
+OqrK4p5Hrog4EF3MzVB7PtRS156emZ7MWe4qQTQu69+Vy1MxZwxcIN7N3lWlE2A9
+aAFqx65UEVlsApfZvP2Q5PBi1yknP8cngih5fd8R9P6rG0/l6OrF0iMCgYEA4Ecs
+8y46UdmIiBwYj8mDb8OzrOZ+b7IpPIiltc92kLqC9HsNDMlo5XwilsjCsX+lnMl6
+xFwT5hY54BCvouvkdtr4EJcvWARCUpIUmkbU6/hkc4dLMrvlaP8N1JWnT4vWBz4j
+OXiKMkreLFMGNZviY121dfCDA4MSs6UL3OAG6O8CgYEAudtp14vmDmpI1x5AtTZr
+cs4WLTrmO3iriHQ8sNyOTNPDeaMwPXUwSDIWWehR4mTZsv0k49vCxzVzqyeHqGKc
+Oxhl2ucSfSZY3Gg7dhA3HMYfx4mwiIw9IeJSBPgI9BbNru3UyNCKjo8MWqLrAz9A
+TNyNzxI9xENz9gi9vFvV+Y8CgYEAiQ+WTcsbgvfQ83VQIVdCRuQvguOdsz8K6l6L
+/q8Zw1roOuaUVBMmUtBpBwML0JO0rzuGFkg7NOqyVdd8rrFAfs5UuTbbjQuVSIbT
+pnDRIKA9K0ksUIX5rg/o8NjAVeGcW/LCbhXXRuLwIeBfNBXe5WDYS4o/Vr8ch8K+
+nC4gqusCgYA0vgMDTpCtFv1oR2Id/saRA1+oClB4xclJfYZiMVAAo0yVvRFoqoBP
+QFbVWt6Tdll5fV7LNpre11ckRF8B8nYA8HxYZ1UhHSVgrTwQYsH8Tx2w+ung58UU
+lLNHHmxb7Z+0+5ZgMXvpNcwHocpfT5uTUbo2PtvHl1ldZTumjP63Hw==
+-----END RSA PRIVATE KEY-----

--
Gitblit v1.9.3