From 832a41e2688553219b540ca772faeaba16a02088 Mon Sep 17 00:00:00 2001
From: zuoxiao <zuoxiao>
Date: 星期五, 22 八月 2025 14:44:23 +0800
Subject: [PATCH] 更新项目配置,提升监测页面功能,新增注肥泵状态管理和故障清除功能;优化样式以增强用户体验和可视化效果。

---
 pages/stationMonitor/stationMonitor.js   |  495 +++++++++++++++++++++++++++++++++++++++++++--
 project.private.config.json              |   19 +
 project.config.json                      |   18 +
 utils/projectConfig.js                   |    2 
 images/custompump.svg                    |    1 
 pages/stationMonitor/stationMonitor.wxml |   25 ++
 pages/stationMonitor/stationMonitor.wxss |   83 +++++++
 7 files changed, 610 insertions(+), 33 deletions(-)

diff --git a/images/custompump.svg b/images/custompump.svg
new file mode 100644
index 0000000..00db750
--- /dev/null
+++ b/images/custompump.svg
@@ -0,0 +1 @@
+<svg t="1755829084511" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5891" width="200" height="200"><path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zM289.4 276.1l90.5 90.5-45.3 45.3-90.5-90.5 45.3-45.3zM480 224h64v128h-64V224zM288 736h64V568c0-88.4 71.6-160 160-160s160 71.6 160 160v168h64v64H288v-64z m385.4-324.1l-45.3-45.3 90.5-90.5 45.3 45.3-90.5 90.5z" fill="#2c2c2c" p-id="5892"></path></svg>
\ No newline at end of file
diff --git a/pages/stationMonitor/stationMonitor.js b/pages/stationMonitor/stationMonitor.js
index df58747..bc5b271 100644
--- a/pages/stationMonitor/stationMonitor.js
+++ b/pages/stationMonitor/stationMonitor.js
@@ -1,6 +1,7 @@
 // pages/stationMonitor/stationMonitor.js
 const {
-  get
+  get,
+  post
 } = require('../../api/request.js');
 
 Page({
@@ -951,24 +952,207 @@
 
     if (!this.data.currentFertilizerStation) return;
 
-    // 鏇存柊鎼呮媽鐘舵��
+    // 濡傛灉鐢ㄦ埛寮�鍚悈鎷岋紝璋冪敤鍚姩鎺ュ彛
+    if (enabled) {
+      this.startStirring();
+    } else {
+      // 鍏抽棴鎼呮媽鏃惰皟鐢ㄥ仠姝㈡帴鍙�
+      this.stopStirring();
+    }
+  },
+
+  /**
+   * 鍚姩鎼呮媽
+   */
+  startStirring() {
+    const currentStation = this.data.currentFertilizerStation;
+    if (!currentStation) return;
+
+    console.log('寮�濮嬭皟鐢ㄥ惎鍔ㄦ悈鎷屾帴鍙�');
+    
+    // 鏄剧ずloading鐘舵��
+    wx.showLoading({
+      title: '鍚姩鎼呮媽涓�...',
+      mask: true
+    });
+
+    // 璋冪敤鍚姩鎼呮媽鎺ュ彛
+    post({
+      url: '/wx/mqttStir/start',
+      data: {
+        manureId: currentStation.manureId || currentStation.id,
+        operator: getApp().globalData.operator
+      },
+      isShowLoding: false // 鎴戜滑鑷繁鎺у埗loading鐘舵��
+    })
+      .then(response => {
+        console.log('鍚姩鎼呮媽鎺ュ彛杩斿洖:', response);
+        
+        // 闅愯棌loading
+        wx.hideLoading();
+        
+        if (response.success && response.code === '0001') {
+          // 鎺ュ彛璋冪敤鎴愬姛锛屾洿鏂版悈鎷岀姸鎬�
+          this.updateMixingStatus(true);
+          
+          // 鏄剧ず鎴愬姛鎻愮ず
+          wx.showToast({
+            title: '鎼呮媽鍚姩鎴愬姛',
+            icon: 'success',
+            duration: 2000
+          });
+        } else {
+          // 鎺ュ彛璋冪敤澶辫触锛岄噸缃紑鍏崇姸鎬�
+          console.error('鍚姩鎼呮媽澶辫触:', response.msg);
+          this.resetMixingSwitch();
+          wx.showToast({
+            title: response.msg || '鍚姩鎼呮媽澶辫触',
+            icon: 'error',
+            duration: 2000
+          });
+        }
+      })
+      .catch(error => {
+        console.error('璋冪敤鍚姩鎼呮媽鎺ュ彛澶辫触:', error);
+        
+        // 闅愯棌loading
+        wx.hideLoading();
+        
+        // 鎺ュ彛璋冪敤澶辫触锛岄噸缃紑鍏崇姸鎬�
+        this.resetMixingSwitch();
+        
+        // 鏄剧ず閿欒鎻愮ず
+        wx.showToast({
+          title: '鍚姩鎼呮媽澶辫触锛岃閲嶈瘯',
+          icon: 'error',
+          duration: 2000
+        });
+      });
+  },
+
+  /**
+   * 鏇存柊鎼呮媽鐘舵��
+   */
+  updateMixingStatus(enabled) {
     const currentStation = {
       ...this.data.currentFertilizerStation
     };
-    currentStation.mixingEnabled = enabled;
     
-    // 鏇存柊鍏蜂綋鐨勬悈鎷岃繍琛岀姸鎬侊紙杩欓噷鍋囪鍙帶鍒剁涓�涓悈鎷屽櫒锛�
+    currentStation.mixingEnabled = enabled;
     currentStation.stirRunning1 = enabled ? 1 : 0;
 
     this.setData({
       currentFertilizerStation: currentStation
     });
 
-    // 鏄剧ず鎿嶄綔缁撴灉
-    wx.showToast({
-      title: enabled ? '鎼呮媽宸插紑鍚�' : '鎼呮媽宸插叧闂�',
-      icon: 'success'
+    console.log('鎼呮媽鐘舵�佸凡鏇存柊:', enabled ? '寮�鍚�' : '鍏抽棴');
+  },
+
+  /**
+   * 閲嶇疆鎼呮媽寮�鍏崇姸鎬侊紙鎺ュ彛璋冪敤澶辫触鏃朵娇鐢級
+   */
+  resetMixingSwitch() {
+    const currentStation = {
+      ...this.data.currentFertilizerStation
+    };
+    
+    // 閲嶇疆涓哄叧闂姸鎬�
+    currentStation.mixingEnabled = false;
+    currentStation.stirRunning1 = 0;
+
+    this.setData({
+      currentFertilizerStation: currentStation
     });
+
+    console.log('鎼呮媽寮�鍏崇姸鎬佸凡閲嶇疆涓哄叧闂�');
+  },
+
+  /**
+   * 鍋滄鎼呮媽
+   */
+  stopStirring() {
+    const currentStation = this.data.currentFertilizerStation;
+    if (!currentStation) return;
+
+    console.log('寮�濮嬭皟鐢ㄥ仠姝㈡悈鎷屾帴鍙�');
+    
+    // 鏄剧ずloading鐘舵��
+    wx.showLoading({
+      title: '鍋滄鎼呮媽涓�...',
+      mask: true
+    });
+
+    // 璋冪敤鍋滄鎼呮媽鎺ュ彛
+    post({
+      url: '/wx/mqttStir/stop',
+      data: {
+        manureId: currentStation.manureId || currentStation.id,
+        operator: getApp().globalData.operator
+      },
+      isShowLoding: false // 鎴戜滑鑷繁鎺у埗loading鐘舵��
+    })
+      .then(response => {
+        console.log('鍋滄鎼呮媽鎺ュ彛杩斿洖:', response);
+        
+        // 闅愯棌loading
+        wx.hideLoading();
+        
+        if (response.success && response.code === '0001') {
+          // 鎺ュ彛璋冪敤鎴愬姛锛屾洿鏂版悈鎷岀姸鎬�
+          this.updateMixingStatus(false);
+          
+          // 鏄剧ず鎴愬姛鎻愮ず
+          wx.showToast({
+            title: '鎼呮媽鍋滄鎴愬姛',
+            icon: 'success',
+            duration: 2000
+          });
+        } else {
+          // 鎺ュ彛璋冪敤澶辫触锛屼繚鎸佸紑鍚姸鎬�
+          console.error('鍋滄鎼呮媽澶辫触:', response.msg);
+          this.keepMixingSwitchOn();
+          wx.showToast({
+            title: response.msg || '鍋滄鎼呮媽澶辫触',
+            icon: 'error',
+            duration: 2000
+          });
+        }
+      })
+      .catch(error => {
+        console.error('璋冪敤鍋滄鎼呮媽鎺ュ彛澶辫触:', error);
+        
+        // 闅愯棌loading
+        wx.hideLoading();
+        
+        // 鎺ュ彛璋冪敤澶辫触锛屼繚鎸佸紑鍚姸鎬�
+        this.keepMixingSwitchOn();
+        
+        // 鏄剧ず閿欒鎻愮ず
+        wx.showToast({
+          title: '鍋滄鎼呮媽澶辫触锛岃閲嶈瘯',
+          icon: 'error',
+          duration: 2000
+        });
+      });
+  },
+
+  /**
+   * 淇濇寔鎼呮媽寮�鍏充负寮�鍚姸鎬侊紙鍋滄澶辫触鏃朵娇鐢級
+   */
+  keepMixingSwitchOn() {
+    const currentStation = {
+      ...this.data.currentFertilizerStation
+    };
+    
+    // 淇濇寔涓哄紑鍚姸鎬�
+    currentStation.mixingEnabled = true;
+    currentStation.stirRunning1 = 1;
+
+    this.setData({
+      currentFertilizerStation: currentStation
+    });
+
+    console.log('鎼呮媽寮�鍏崇姸鎬佷繚鎸佷负寮�鍚�');
   },
 
   /**
@@ -980,24 +1164,207 @@
 
     if (!this.data.currentFertilizerStation) return;
 
-    // 鏇存柊娉ㄨ偉鐘舵��
+    // 濡傛灉鐢ㄦ埛寮�鍚敞鑲ワ紝璋冪敤鍚姩鎺ュ彛
+    if (enabled) {
+      this.startInjecting();
+    } else {
+      // 鍏抽棴娉ㄨ偉鏃惰皟鐢ㄥ仠姝㈡帴鍙�
+      this.stopInjecting();
+    }
+  },
+
+  /**
+   * 鍚姩娉ㄨ偉
+   */
+  startInjecting() {
+    const currentStation = this.data.currentFertilizerStation;
+    if (!currentStation) return;
+
+    console.log('寮�濮嬭皟鐢ㄥ惎鍔ㄦ敞鑲ユ帴鍙�');
+    
+    // 鏄剧ずloading鐘舵��
+    wx.showLoading({
+      title: '鍚姩娉ㄨ偉涓�...',
+      mask: true
+    });
+
+    // 璋冪敤鍚姩娉ㄨ偉鎺ュ彛
+    post({
+      url: '/wx/mqttInject/start',
+      data: {
+        manureId: currentStation.manureId || currentStation.id,
+        operator: getApp().globalData.operator
+      },
+      isShowLoding: false // 鎴戜滑鑷繁鎺у埗loading鐘舵��
+    })
+      .then(response => {
+        console.log('鍚姩娉ㄨ偉鎺ュ彛杩斿洖:', response);
+        
+        // 闅愯棌loading
+        wx.hideLoading();
+        
+        if (response.success && response.code === '0001') {
+          // 鎺ュ彛璋冪敤鎴愬姛锛屾洿鏂版敞鑲ョ姸鎬�
+          this.updateInjectingStatus(true);
+          
+          // 鏄剧ず鎴愬姛鎻愮ず
+          wx.showToast({
+            title: '娉ㄨ偉鍚姩鎴愬姛',
+            icon: 'success',
+            duration: 2000
+          });
+        } else {
+          // 鎺ュ彛璋冪敤澶辫触锛岄噸缃紑鍏崇姸鎬�
+          console.error('鍚姩娉ㄨ偉澶辫触:', response.msg);
+          this.resetInjectingSwitch();
+          wx.showToast({
+            title: response.msg || '鍚姩娉ㄨ偉澶辫触',
+            icon: 'error',
+            duration: 2000
+          });
+        }
+      })
+      .catch(error => {
+        console.error('璋冪敤鍚姩娉ㄨ偉鎺ュ彛澶辫触:', error);
+        
+        // 闅愯棌loading
+        wx.hideLoading();
+        
+        // 鎺ュ彛璋冪敤澶辫触锛岄噸缃紑鍏崇姸鎬�
+        this.resetInjectingSwitch();
+        
+        // 鏄剧ず閿欒鎻愮ず
+        wx.showToast({
+          title: '鍚姩娉ㄨ偉澶辫触锛岃閲嶈瘯',
+          icon: 'error',
+          duration: 2000
+        });
+      });
+  },
+
+  /**
+   * 鏇存柊娉ㄨ偉鐘舵��
+   */
+  updateInjectingStatus(enabled) {
     const currentStation = {
       ...this.data.currentFertilizerStation
     };
-    currentStation.fertilizingEnabled = enabled;
     
-    // 鏇存柊娉ㄨ偉杩愯鐘舵��
+    currentStation.fertilizingEnabled = enabled;
     currentStation.injectRunning = enabled ? 1 : 0;
 
     this.setData({
       currentFertilizerStation: currentStation
     });
 
-    // 鏄剧ず鎿嶄綔缁撴灉
-    wx.showToast({
-      title: enabled ? '娉ㄨ偉宸插紑鍚�' : '娉ㄨ偉宸插叧闂�',
-      icon: 'success'
+    console.log('娉ㄨ偉鐘舵�佸凡鏇存柊:', enabled ? '寮�鍚�' : '鍏抽棴');
+  },
+
+  /**
+   * 閲嶇疆娉ㄨ偉寮�鍏崇姸鎬侊紙鎺ュ彛璋冪敤澶辫触鏃朵娇鐢級
+   */
+  resetInjectingSwitch() {
+    const currentStation = {
+      ...this.data.currentFertilizerStation
+    };
+    
+    // 閲嶇疆涓哄叧闂姸鎬�
+    currentStation.fertilizingEnabled = false;
+    currentStation.injectRunning = 0;
+
+    this.setData({
+      currentFertilizerStation: currentStation
     });
+
+    console.log('娉ㄨ偉寮�鍏崇姸鎬佸凡閲嶇疆涓哄叧闂�');
+  },
+
+  /**
+   * 鍋滄娉ㄨ偉
+   */
+  stopInjecting() {
+    const currentStation = this.data.currentFertilizerStation;
+    if (!currentStation) return;
+
+    console.log('寮�濮嬭皟鐢ㄥ仠姝㈡敞鑲ユ帴鍙�');
+    
+    // 鏄剧ずloading鐘舵��
+    wx.showLoading({
+      title: '鍋滄娉ㄨ偉涓�...',
+      mask: true
+    });
+
+    // 璋冪敤鍋滄娉ㄨ偉鎺ュ彛
+    post({
+      url: '/wx/mqttInject/stop',
+      data: {
+        manureId: currentStation.manureId || currentStation.id,
+        operator: getApp().globalData.operator
+      },
+      isShowLoding: false // 鎴戜滑鑷繁鎺у埗loading鐘舵��
+    })
+      .then(response => {
+        console.log('鍋滄娉ㄨ偉鎺ュ彛杩斿洖:', response);
+        
+        // 闅愯棌loading
+        wx.hideLoading();
+        
+        if (response.success && response.code === '0001') {
+          // 鎺ュ彛璋冪敤鎴愬姛锛屾洿鏂版敞鑲ョ姸鎬�
+          this.updateInjectingStatus(false);
+          
+          // 鏄剧ず鎴愬姛鎻愮ず
+          wx.showToast({
+            title: '娉ㄨ偉鍋滄鎴愬姛',
+            icon: 'success',
+            duration: 2000
+          });
+        } else {
+          // 鎺ュ彛璋冪敤澶辫触锛屼繚鎸佸紑鍚姸鎬�
+          console.error('鍋滄娉ㄨ偉澶辫触:', response.msg);
+          this.keepInjectingSwitchOn();
+          wx.showToast({
+            title: response.msg || '鍋滄娉ㄨ偉澶辫触',
+            icon: 'error',
+            duration: 2000
+          });
+        }
+      })
+      .catch(error => {
+        console.error('璋冪敤鍋滄娉ㄨ偉鎺ュ彛澶辫触:', error);
+        
+        // 闅愯棌loading
+        wx.hideLoading();
+        
+        // 鎺ュ彛璋冪敤澶辫触锛屼繚鎸佸紑鍚姸鎬�
+        this.keepInjectingSwitchOn();
+        
+        // 鏄剧ず閿欒鎻愮ず
+        wx.showToast({
+          title: '鍋滄娉ㄨ偉澶辫触锛岃閲嶈瘯',
+          icon: 'error',
+          duration: 2000
+        });
+      });
+  },
+
+  /**
+   * 淇濇寔娉ㄨ偉寮�鍏充负寮�鍚姸鎬侊紙鍋滄澶辫触鏃朵娇鐢級
+   */
+  keepInjectingSwitchOn() {
+    const currentStation = {
+      ...this.data.currentFertilizerStation
+    };
+    
+    // 淇濇寔涓哄紑鍚姸鎬�
+    currentStation.fertilizingEnabled = true;
+    currentStation.injectRunning = 1;
+
+    this.setData({
+      currentFertilizerStation: currentStation
+    });
+
+    console.log('娉ㄨ偉寮�鍏崇姸鎬佷繚鎸佷负寮�鍚�');
   },
 
 
@@ -1045,12 +1412,14 @@
         const updatedItem = {
           ...item,
           isLoadingUrl: isLoading,
-          urlError: hasError
+          urlError: hasError,
+          onLine:false
         };
         console.log(`鎽勫儚澶� ${cameraId} 鐘舵�佹洿鏂�:`, {
           name: updatedItem.name,
           isLoadingUrl: updatedItem.isLoadingUrl,
-          urlError: updatedItem.urlError
+          urlError: updatedItem.urlError,
+          onLine:false
         });
         return updatedItem;
       }
@@ -1105,11 +1474,11 @@
       this.updateCameraUrlLoadingState(camera.id, false, true);
       
       // 鏄剧ず閿欒鎻愮ず
-      wx.showToast({
-        title: '瑙嗛鎾斁鍑洪敊',
-        icon: 'error',
-        duration: 2000
-      });
+      // wx.showToast({
+      //   title: '瑙嗛鎾斁鍑洪敊',
+      //   icon: 'error',
+      //   duration: 2000
+      // });
     } else {
       console.error('鏈壘鍒板搴旂殑鎽勫儚澶�:', cameraId);
     }
@@ -1191,5 +1560,87 @@
     console.log('鎾斁鐘舵�佹洿鏂板畬鎴�');
   },
 
+  /**
+   * 娓呴櫎鏁呴殰
+   */
+  clearAlarm() {
+    const currentStation = this.data.currentFertilizerStation;
+    if (!currentStation) return;
+
+    console.log('寮�濮嬭皟鐢ㄦ竻闄ゆ晠闅滄帴鍙�');
+    
+    // 鏄剧ずloading鐘舵��
+    wx.showLoading({
+      title: '娓呴櫎鏁呴殰涓�...',
+      mask: true
+    });
+
+    // 璋冪敤娓呴櫎鏁呴殰鎺ュ彛
+    post({
+      url: '/wx/mqttFault/clear',
+      data: {
+        manureId: currentStation.manureId || currentStation.id,
+        operator: getApp().globalData.operator
+      },
+      isShowLoding: false // 鎴戜滑鑷繁鎺у埗loading鐘舵��
+    })
+      .then(response => {
+        console.log('娑堥櫎鎶ヨ鎺ュ彛杩斿洖:', response);
+        
+        // 闅愯棌loading
+        wx.hideLoading();
+        
+        if (response.success && response.code === '0001') {
+          // 鎺ュ彛璋冪敤鎴愬姛锛屾洿鏂版姤璀︾姸鎬�
+          this.updateAlarmStatus(0);
+          
+          // 鏄剧ず鎴愬姛鎻愮ず
+          wx.showToast({
+            title: '鏁呴殰娓呴櫎鎴愬姛',
+            icon: 'success',
+            duration: 2000
+          });
+        } else {
+          // 鎺ュ彛璋冪敤澶辫触
+          console.error('娓呴櫎鏁呴殰澶辫触:', response.msg);
+          wx.showToast({
+            title: response.msg || '娓呴櫎鏁呴殰澶辫触',
+            icon: 'error',
+            duration: 2000
+          });
+        }
+      })
+      .catch(error => {
+        console.error('璋冪敤娓呴櫎鏁呴殰鎺ュ彛澶辫触:', error);
+        
+        // 闅愯棌loading
+        wx.hideLoading();
+        
+        // 鏄剧ず閿欒鎻愮ず
+        wx.showToast({
+          title: '娓呴櫎鏁呴殰澶辫触锛岃閲嶈瘯',
+          icon: 'error',
+          duration: 2000
+        });
+      });
+  },
+
+  /**
+   * 鏇存柊鎶ヨ鐘舵��
+   */
+  updateAlarmStatus(alarmStatus) {
+    const currentStation = {
+      ...this.data.currentFertilizerStation
+    };
+    
+    currentStation.alarm = alarmStatus;
+
+    this.setData({
+      currentFertilizerStation: currentStation
+    });
+
+    console.log('鎶ヨ鐘舵�佸凡鏇存柊:', alarmStatus === 1 ? '鎶ヨ' : '姝e父');
+  },
+
 
 })
\ No newline at end of file
diff --git a/pages/stationMonitor/stationMonitor.wxml b/pages/stationMonitor/stationMonitor.wxml
index 7723357..250d87d 100644
--- a/pages/stationMonitor/stationMonitor.wxml
+++ b/pages/stationMonitor/stationMonitor.wxml
@@ -355,6 +355,25 @@
         <view class="monitoring-data">
           <text class="section-title">鐩戞祴鏁版嵁</text>
           <view class="data-grid">
+            <!-- 娉ㄨ偉娉电姸鎬� -->
+            <view class="data-item pump-status custom-pump-row">
+              <view class="data-icon">
+                <image src="/images/custompump.svg" />
+              </view>
+              <view class="data-content">
+                <text class="data-label">娉ㄨ偉娉电姸鎬�</text>
+                <text class="data-value {{currentFertilizerStation.alarm === 1 ? 'alarm' : 'normal'}}">
+                  {{currentFertilizerStation.alarm === 1 ? '鎶ヨ' : '姝e父'}}
+                </text>
+              </view>
+              <button wx:if="{{currentFertilizerStation.alarm === 1}}" 
+                      class="clear-fault-btn" 
+                      bind:tap="clearAlarm" 
+                      size="mini">
+                娓呴櫎鎶ヨ
+              </button>
+            </view>
+
             <!-- 鑲ユ枡娴侀噺 -->
             <view class="data-item waste-flow">
               <view class="data-icon">
@@ -451,11 +470,11 @@
             <!-- 閿欒鐘舵�� -->
             <view wx:elif="{{item.urlError}}" class="video-error">
               <image class="error-icon" src="/images/error.svg" />
-              <text class="error-text">鑾峰彇鎾斁鍦板潃澶辫触</text>
-              <button class="retry-btn" bind:tap="retryGetHlsUrl" data-camera="{{item}}">
+              <text class="error-text">璁惧绂荤嚎</text>
+              <!-- <button class="retry-btn" bind:tap="retryGetHlsUrl" data-camera="{{item}}">
                 <image class="retry-icon" src="/images/refresh.svg" />
                 <text>閲嶈瘯</text>
-              </button>
+              </button> -->
             </view>
 
             <!-- 姝e父鎾斁鐘舵�� -->
diff --git a/pages/stationMonitor/stationMonitor.wxss b/pages/stationMonitor/stationMonitor.wxss
index b377ea2..1a34923 100644
--- a/pages/stationMonitor/stationMonitor.wxss
+++ b/pages/stationMonitor/stationMonitor.wxss
@@ -48,7 +48,7 @@
   position: sticky;
   /* 浣跨敤sticky瀹氫綅 */
   top: 0;
-  z-index: 9999;
+  z-index: 999;
   background-color: #fff;
   /* 纭繚鑳屾櫙鑹� */
   /* 鍑忓皬tabs楂樺害 */
@@ -1001,12 +1001,91 @@
   transform: scale(0.98);
 }
 
-/* 姘磋偉鏈烘暟鎹」鏍峰紡 */
+/* 娉ㄨ偉娉电姸鎬佽鏍峰紡 */
 .monitoring-data .data-item.pump-status {
   border-left-color: #1890ff;
   background: linear-gradient(135deg, #e6f7ff 0%, #ffffff 100%);
 }
 
+/* 娉ㄨ偉娉电姸鎬佽 - 閲嶆柊璁捐涓轰袱妯″潡甯冨眬 */
+.fertilizer-info-card .monitoring-data .data-grid .data-item.pump-status {
+  display: flex !important;
+  align-items: center !important;
+  justify-content: space-between !important;
+  padding: 20rpx !important;
+  gap: 16rpx !important;
+}
+
+/* 宸︿晶妯″潡锛氬浘鏍�+鏍囩+鐘舵�佸�� */
+.fertilizer-info-card .monitoring-data .data-grid .data-item.pump-status .data-content {
+  display: flex;
+  flex-direction: column;
+  justify-content: flex-start;
+  align-items: flex-start;
+  flex: 1;
+  /* 鍏抽棴 gap锛屾敼鐢� margin 鎺у埗锛屽吋瀹规�ф洿濂� */
+  gap: 0 !important;
+  min-width: 0;
+}
+
+/* 鍙綔鐢ㄤ簬娉ㄨ偉娉电姸鎬佽锛氱敤 margin 鎺у埗 label 涓� value 鐨勯棿璺濓紝閬垮厤 gap 鍏煎鎬ч棶棰� */
+.fertilizer-info-card .monitoring-data .data-grid .data-item.pump-status.custom-pump-row .data-label {
+  display: block !important;
+  margin-bottom: 0 !important;
+  line-height: 1 !important;
+}
+.fertilizer-info-card .monitoring-data .data-grid .data-item.pump-status.custom-pump-row .data-value {
+  display: block !important;
+  margin-top: -10rpx !important;
+  line-height: 1 !important;
+}
+
+/* 宸︿晶妯″潡涓殑鐘舵�佸�兼牱寮� */
+.fertilizer-info-card .monitoring-data .data-grid .data-item.pump-status .data-value {
+  font-size: 36rpx !important;
+  font-weight: 700 !important;
+  line-height: 1.2 !important;
+  margin: 0 !important;
+}
+
+/* 鐘舵�佸�兼牱寮� */
+.data-value.normal {
+  color: #52c41a;
+}
+
+.data-value.alarm {
+  color: #ff4d4f;
+}
+
+/* 鍙充晶妯″潡锛氭竻闄ゆ姤璀︽寜閽� - 鐙珛妯″潡鍦ㄥ彸杈瑰眳涓� */
+.fertilizer-info-card .monitoring-data .data-grid .data-item.pump-status .clear-fault-btn {
+  background: linear-gradient(135deg, #ff4d4f 0%, #ff7875 100%) !important;
+  color: white !important;
+  border: none !important;
+  border-radius: 20rpx !important;
+  padding: 12rpx 20rpx !important;
+  font-size: 24rpx !important;
+  font-weight: 500 !important;
+  box-shadow: 0 4rpx 12rpx rgba(255, 77, 79, 0.3) !important;
+  transition: all 0.3s ease !important;
+  white-space: nowrap !important;
+  line-height: 1.2 !important;
+  height: 50rpx !important;
+  min-height: 44rpx !important;
+  display: flex !important;
+  align-items: center !important;
+  justify-content: center !important;
+  flex-shrink: 0 !important;
+  margin: 0 !important;
+  align-self: center !important;
+}
+
+/* 娓呴櫎鏁呴殰鎸夐挳婵�娲荤姸鎬� - 鍙拡瀵规敞鑲ユ车鐘舵�佽 */
+.fertilizer-info-card .monitoring-data .data-grid .data-item.pump-status .clear-fault-btn:active {
+  transform: scale(0.95) !important;
+  box-shadow: 0 1rpx 4rpx rgba(255, 77, 79, 0.4) !important;
+}
+
 .monitoring-data .data-item.waste-flow {
   border-left-color: #52c41a;
   background: linear-gradient(135deg, #f6ffed 0%, #ffffff 100%);
diff --git a/project.config.json b/project.config.json
index f46c9a2..89fd81e 100644
--- a/project.config.json
+++ b/project.config.json
@@ -1,6 +1,6 @@
 {
   "compileType": "miniprogram",
-  "libVersion": "trial",
+  "libVersion": "3.9.1",
   "packOptions": {
     "ignore": [],
     "include": []
@@ -18,12 +18,24 @@
       "disablePlugins": [],
       "outputPath": ""
     },
-    "condition": true
+    "condition": true,
+    "compileWorklet": false,
+    "uglifyFileName": false,
+    "uploadWithSourceMap": true,
+    "packNpmManually": false,
+    "minifyWXSS": true,
+    "minifyWXML": true,
+    "localPlugins": false,
+    "disableUseStrict": false,
+    "useCompilerPlugins": false,
+    "swc": false,
+    "disableSWC": true
   },
   "condition": {},
   "editorSetting": {
     "tabIndent": "auto",
     "tabSize": 2
   },
-  "appid": "wxbc2b6a00dd904ead"
+  "appid": "wxbc2b6a00dd904ead",
+  "simulatorPluginLibVersion": {}
 }
\ No newline at end of file
diff --git a/project.private.config.json b/project.private.config.json
index fd2b01a..149d03e 100644
--- a/project.private.config.json
+++ b/project.private.config.json
@@ -3,7 +3,22 @@
   "projectname": "irrigate_user",
   "setting": {
     "compileHotReLoad": true,
-    "urlCheck": true
+    "urlCheck": true,
+    "coverView": true,
+    "lazyloadPlaceholderEnable": false,
+    "skylineRenderEnable": false,
+    "preloadBackgroundData": false,
+    "autoAudits": false,
+    "useApiHook": true,
+    "useApiHostProcess": true,
+    "showShadowRootInWxmlPanel": true,
+    "useStaticServer": false,
+    "useLanDebug": false,
+    "showES6CompileOption": false,
+    "checkInvalidKey": true,
+    "ignoreDevUnusedFiles": true,
+    "bigPackageSizeSupport": false
   },
-  "libVersion": "3.9.1"
+  "libVersion": "3.9.1",
+  "condition": {}
 }
\ No newline at end of file
diff --git a/utils/projectConfig.js b/utils/projectConfig.js
index d2aa764..f2ce53d 100644
--- a/utils/projectConfig.js
+++ b/utils/projectConfig.js
@@ -3,7 +3,7 @@
 const SERVER_INFO = {
   URL_233: 'https://wanzheng.dayuyanjiuyuan.top/',
   URL_55: 'https://irrigate.dayuyanjiuyuan.top/',
-  URL_166: 'https://wanzheng.dayuyanjiuyuan.top/frp/',
+  URL_166: 'https://wanzheng.dayuyanjiuyuan.top/frp/',//娴嬭瘯鐜
   URL_121: 'https://shifanqu1.dayuyanjiuyuan.top/',
   // URL_121: 'https://wanzheng.dayuyanjiuyuan.top/frp/',
   URL_87: 'http://192.168.10.87:54321/'

--
Gitblit v1.8.0