From b0862808be397892e57b7e20d0859040effd01b4 Mon Sep 17 00:00:00 2001
From: zuoxiao <zuoxiao>
Date: 星期五, 15 八月 2025 10:46:58 +0800
Subject: [PATCH] 更新项目配置,添加监测站相关数据和状态管理;优化首页和监测页面的逻辑,提升用户体验;新增SVG图标资源,更新样式以增强可视化效果。

---
 pages/home/home.js                       |   72 
 images/wind-speed.svg                    |    1 
 images/error.svg                         |    1 
 images/pump.svg                          |    1 
 images/settings.svg                      |    1 
 .lingma/rules/base.md                    |    4 
 images/humidity.svg                      |    4 
 images/timer.svg                         |    1 
 images/two.svg                           |    2 
 app.js                                   |    3 
 images/refresh.svg                       |    1 
 images/one.svg                           |    2 
 images/mixing.svg                        |    1 
 images/wind-arrow.svg                    |    4 
 images/rainfall.svg                      |    1 
 utils/projectConfig.js                   |   14 
 images/flow.svg                          |    4 
 images/five.svg                          |    1 
 images/light.svg                         |    1 
 images/temperature.svg                   |    4 
 project.private.config.json              |    2 
 images/three.svg                         |    1 
 pages/stationMonitor/stationMonitor.wxml |  507 ++++++
 pages/stationMonitor/stationMonitor.wxss | 1539 +++++++++++++++++++++++
 images/capture.svg                       |    1 
 images/no-data.svg                       |    6 
 /dev/null                                |  256 ----
 images/uv.svg                            |    1 
 images/settings-time.svg                 |    1 
 pages/stationMonitor/stationMonitor.js   | 1349 ++++++++++++++++++--
 images/four.svg                          |    1 
 project.config.json                      |    3 
 images/wind-direction.svg                |    1 
 33 files changed, 3,207 insertions(+), 584 deletions(-)

diff --git a/.lingma/rules/base.md b/.lingma/rules/base.md
new file mode 100644
index 0000000..7d4a96c
--- /dev/null
+++ b/.lingma/rules/base.md
@@ -0,0 +1,4 @@
+---
+trigger: manual
+---
+涓枃鍥炵瓟闂
diff --git a/README.md b/README.md
deleted file mode 100644
index 9bbf418..0000000
--- a/README.md
+++ /dev/null
@@ -1,256 +0,0 @@
-# 澶х鑺傛按鐏屾簤绯荤粺
-
-## 椤圭洰姒傝堪
-
-澶х鑺傛按鐏屾簤绯荤粺鏄竴涓井淇″皬绋嬪簭椤圭洰锛岀敤浜庣鐞嗗拰鎺у埗鍐滀笟鐏屾簤绯荤粺銆傝绯荤粺鍏佽鐢ㄦ埛鏌ョ湅褰撳墠鐏屾簤璁″垝銆佸垱寤烘柊鐨勭亴婧夎鍒掋�佺鐞嗚疆鐏岀粍浠ュ強鐩戞帶鐏屾簤鐘舵�佺瓑鍔熻兘銆�
-
-## 椤圭洰缁撴瀯
-
-```
-irrigate_user/
-鈹溾攢鈹� api/                  # API鎺ュ彛鐩稿叧鏂囦欢
-鈹溾攢鈹� images/               # 鍥剧墖璧勬簮鏂囦欢
-鈹溾攢鈹� miniprogram_npm/      # 灏忕▼搴廚PM鏋勫缓鐩綍
-鈹�   鈹斺攢鈹� tdesign-miniprogram/  # TDesign UI缁勪欢搴�
-鈹溾攢鈹� node_modules/         # 椤圭洰渚濊禆
-鈹�   鈹溾攢鈹� dayjs/            # 鏃ユ湡澶勭悊搴�
-鈹�   鈹斺攢鈹� tdesign-miniprogram/ # TDesign UI缁勪欢搴撴簮鐮�
-鈹溾攢鈹� pages/                # 椤甸潰鏂囦欢
-鈹�   鈹溾攢鈹� createIrrigation/ # 鏂板缓鐏屾簤璁″垝椤甸潰
-鈹�   鈹溾攢鈹� feedback/         # 鍙嶉椤甸潰
-鈹�   鈹溾攢鈹� home/             # 棣栭〉
-鈹�   鈹溾攢鈹� index/            # 寮曞椤�
-鈹�   鈹溾攢鈹� irrigation/       # 鐏屾簤璁″垝绠$悊椤甸潰
-鈹�   鈹溾攢鈹� login/            # 鐧诲綍椤甸潰
-鈹�   鈹溾攢鈹� my/               # 涓汉涓績椤甸潰
-鈹�   鈹溾攢鈹� openCard/         # 寮�鍗¢〉闈�
-鈹�   鈹溾攢鈹� personCharge/     # 涓汉鍏呭�奸〉闈�
-鈹�   鈹溾攢鈹� rechargeCard/     # 鍏呭�煎崱椤甸潰
-鈹�   鈹溾攢鈹� rechargeList/     # 鍏呭�艰褰曢〉闈�
-鈹�   鈹溾攢鈹� rechargeMoney/    # 鍏呭�奸噾棰濋〉闈�
-鈹�   鈹溾攢鈹� valveList/        # 闃�闂ㄥ垪琛ㄩ〉闈�
-鈹�   鈹溾攢鈹� wallet/           # 閽卞寘椤甸潰
-鈹�   鈹溾攢鈹� waterIntake/      # 鍙栨按椤甸潰
-鈹�   鈹溾攢鈹� wxbind/           # 寰俊缁戝畾椤甸潰
-鈹�   鈹斺攢鈹� wxlogin/          # 寰俊鐧诲綍椤甸潰
-鈹溾攢鈹� utils/                # 宸ュ叿鍑芥暟
-鈹溾攢鈹� .cloudbase/           # 浜戝紑鍙戦厤缃�
-鈹溾攢鈹� .eslintrc.js          # ESLint閰嶇疆
-鈹溾攢鈹� .gitignore            # Git蹇界暐鏂囦欢
-鈹溾攢鈹� app.js                # 灏忕▼搴忓叆鍙f枃浠�
-鈹溾攢鈹� app.json              # 灏忕▼搴忓叏灞�閰嶇疆
-鈹溾攢鈹� app.wxss              # 灏忕▼搴忓叏灞�鏍峰紡
-鈹溾攢鈹� package.json          # 椤圭洰渚濊禆閰嶇疆
-鈹溾攢鈹� package-lock.json     # 渚濊禆鐗堟湰閿佸畾鏂囦欢
-鈹溾攢鈹� project.config.json   # 椤圭洰閰嶇疆鏂囦欢
-鈹斺攢鈹� sitemap.json          # 灏忕▼搴弒itemap閰嶇疆
-```
-
-## 浣跨敤鐨勬鏋跺拰搴�
-
-1. **寰俊灏忕▼搴忓師鐢熸鏋�**锛氶」鐩熀浜庡井淇″皬绋嬪簭鍘熺敓妗嗘灦寮�鍙戯紝浣跨敤WXML銆乄XSS銆丣S鍜孞SON鏂囦欢缁勭粐浠g爜銆�
-
-2. **TDesign 灏忕▼搴忕粍浠跺簱**锛氫娇鐢ㄨ吘璁疶Design UI缁勪欢搴擄紙鐗堟湰1.2.8锛夛紝鎻愪緵浜嗕赴瀵岀殑UI缁勪欢锛屽鏃ユ湡鏃堕棿閫夋嫨鍣�(t-date-time-picker)绛夈��
-   - 鏂囨。鍦板潃锛歨ttps://tdesign.tencent.com/miniprogram/overview
-   - 缁勪欢浣跨敤鏂瑰紡锛氬湪椤甸潰JSON鏂囦欢涓紩鍏ユ墍闇�缁勪欢锛屽锛�
-     ```json
-     {
-       "usingComponents": {
-         "t-date-time-picker": "tdesign-miniprogram/date-time-picker/date-time-picker",
-         "t-avatar": "tdesign-miniprogram/avatar/avatar",
-         "t-switch": "tdesign-miniprogram/switch/switch",
-         "t-button": "tdesign-miniprogram/button/button",
-         "t-dialog": "tdesign-miniprogram/dialog/dialog"
-       }
-     }
-     ```
-
-3. **Day.js**锛氳交閲忕骇鐨凧avaScript鏃ユ湡澶勭悊搴擄紝鐢ㄤ簬鏃ユ湡鏍煎紡鍖栧拰鎿嶄綔銆�
-   - 涓昏鐢ㄤ簬TDesign鏃ユ湡鏃堕棿閫夋嫨鍣ㄧ粍浠跺唴閮ㄣ��
-   - 鏂囨。鍦板潃锛歨ttps://day.js.org/
-
-4. **浜戝紑鍙�**锛氶」鐩彲鑳戒娇鐢ㄤ簡寰俊灏忕▼搴忎簯寮�鍙戝姛鑳斤紝鐢ㄤ簬鏁版嵁瀛樺偍鍜屼簯鍑芥暟銆�
-
-## API閫氫俊妯″潡
-
-API鐩綍鍖呭惈浜嗛」鐩腑鎵�鏈変笌鍚庣閫氫俊鐩稿叧鐨勬枃浠讹紝鎻愪緵浜嗙粺涓�鐨勭綉缁滆姹傚鐞嗘満鍒躲��
-
-### 鏂囦欢缁撴瀯
-
-- **request.js**: 缃戠粶璇锋眰鏍稿績妯″潡锛屽皝瑁呬簡寰俊灏忕▼搴忕殑`wx.request`鎺ュ彛
-  - `request()`: 鍩虹璇锋眰鍑芥暟锛屽鐞嗚姹傞厤缃�佽姹傚ご璁剧疆鍜屽搷搴斿鐞�
-  - `get()`: GET璇锋眰绠�鍖栨柟娉�
-  - `post()`: POST璇锋眰绠�鍖栨柟娉�
-  - 鑷姩澶勭悊token楠岃瘉銆侀敊璇鐞嗗拰loading鐘舵��
-
-- **config.js**: 閰嶇疆鏂囦欢锛屽畾涔堿PI鍩虹URL鍜岀幆澧冮厤缃�
-  - 鏀寔澶氶」鐩幆澧冿細鍢夊唱鍏�(JYG)銆佹皯鍕�(MQ)銆佹祴璇曠幆澧�(TEST)
-  - `setBaseUrl()`: 鍔ㄦ�佸垏鎹㈤」鐩幆澧冪殑鍑芥暟
-
-- **env.js**: 鐜鍙橀噺閰嶇疆锛屽畾涔夊綋鍓嶈繍琛岀幆澧冿紙鐢熶骇/娴嬭瘯锛�
-
-- **statusCode.js**: HTTP鐘舵�佺爜甯搁噺瀹氫箟锛岀敤浜庣粺涓�澶勭悊鍝嶅簲鐘舵��
-
-### 浣跨敤鏂规硶
-
-1. **GET璇锋眰**锛�
-   ```javascript
-   const { get } = require('../../api/request')
-   
-   // 鑾峰彇椤圭洰鍒楄〃
-   get({
-     url: '/wx/irrigation/getSimpleProjects',
-     isShowLoding: true
-   }).then(res => {
-     if (res.success) {
-       // 澶勭悊鎴愬姛鍝嶅簲
-       console.log(res.content)
-     } else {
-       wx.showToast({
-         title: res.msg || '璇锋眰澶辫触',
-         icon: 'none'
-       })
-     }
-   }).catch(err => {
-     console.error('璇锋眰澶辫触锛�', err)
-     wx.showToast({
-       title: '璇锋眰澶辫触',
-       icon: 'none'
-     })
-   })
-   ```
-
-2. **POST璇锋眰**锛�
-   ```javascript
-   const { post } = require('../../api/request')
-   
-   // 鑾峰彇杞亴缁勫垪琛�
-   post({
-     url: '/wx/irrigation/getSimpleGroups',
-     data: {
-       projectId: '2025032017240700001',
-       planName: '2025032501',
-       startupMode: 1,
-       operatorId: 2024090516595200300,
-       schedules: [
-         {
-           groupId: 2025032017371700000,
-           duration: 5
-         }
-       ]
-     },
-     isShowLoding: true
-   }).then(res => {
-     if (res.success) {
-       // 澶勭悊鎴愬姛鍝嶅簲
-       console.log(res.content)
-     } else {
-       wx.showToast({
-         title: res.msg || '璇锋眰澶辫触',
-         icon: 'none'
-       })
-     }
-   }).catch(err => {
-     console.error('璇锋眰澶辫触锛�', err)
-     wx.showToast({
-       title: '璇锋眰澶辫触',
-       icon: 'none'
-     })
-   })
-   ```
-
-3. **鍒囨崲椤圭洰鐜**锛�
-   ```javascript
-   const { setBaseUrl } = require('../../api/config')
-   
-   // 鍒囨崲鍒版皯鍕ら」鐩�
-   setBaseUrl('MQ')
-   
-   // 鍒囨崲鍒板槈宄叧椤圭洰
-   setBaseUrl('JYG')
-   
-   // 鍒囨崲鍒版祴璇曠幆澧�
-   setBaseUrl('TEST')
-   ```
-
-鎵�鏈夌綉缁滆姹備細鑷姩澶勭悊锛�
-- token 璁よ瘉锛堥�氳繃璇锋眰澶� Authorization锛�
-- 椤圭洰鏍囪瘑锛堥�氳繃璇锋眰澶� tag锛�
-- 搴旂敤鏍囪瘑锛堥�氳繃璇锋眰澶� appId锛�
-- 閿欒澶勭悊鍜屽搷搴旇В鏋�
-- 鍔犺浇鐘舵�佹樉绀猴紙閫氳繃 isShowLoding 鍙傛暟鎺у埗锛�
-
-## 浠g爜椋庢牸鍜岃鑼�
-
-1. **鏂囦欢鍛藉悕**锛�
-   - 椤甸潰鐩綍浣跨敤椹煎嘲鍛藉悕娉曪紝濡俙createIrrigation`
-   - 椤甸潰鏂囦欢涓庣洰褰曞悓鍚嶏紝濡俙createIrrigation.js`
-
-2. **鏍峰紡瑙勮寖**锛�
-   - 浣跨敤WXSS缂栧啓鏍峰紡
-   - 绫诲悕浣跨敤杩炲瓧绗﹀懡鍚嶆硶锛屽`create-irrigation-container`
-   - 缁勪欢鏍峰紡閲囩敤BEM鍛藉悕鏂瑰紡鐨勫彉浣�
-
-3. **JavaScript瑙勮寖**锛�
-   - 浣跨敤ES6璇硶
-   - 鍑芥暟閲囩敤椹煎嘲鍛藉悕娉曪紝濡俙onPlanCodeInput`
-   - 椤甸潰閫昏緫浣跨敤寰俊灏忕▼搴廝age鏋勯�犲櫒缁勭粐
-
-4. **缁勪欢浣跨敤**锛�
-   - 绗笁鏂圭粍浠朵娇鐢ㄥ墠缂�鍖哄垎锛屽TDesign缁勪欢浣跨敤`t-`鍓嶇紑
-   - 鑷畾涔夌粍浠舵斁鍦ㄥ搴旈〉闈㈢洰褰曚笅
-
-## 椤甸潰浜や簰妯″紡
-
-1. **琛ㄥ崟浜や簰**锛�
-   - 杈撳叆妗嗙洿鎺ヨ緭鍏�
-   - 鏃堕棿閫夋嫨浣跨敤寮瑰嚭寮忛�夋嫨鍣�
-   - 琛ㄥ崟鎻愪氦鍓嶈繘琛屾暟鎹獙璇�
-
-2. **鍒楄〃浜や簰**锛�
-   - 浣跨敤鍙姌鍙犵殑宓屽鍒楄〃
-   - 鏀寔椤圭洰灞曞紑/鎶樺彔
-   - 鏀寔閫夋嫨/鍙栨秷閫夋嫨椤圭洰
-
-3. **瀵艰埅浜や簰**锛�
-   - 浣跨敤寰俊灏忕▼搴忓師鐢熷鑸�
-   - 椤甸潰闂撮�氳繃`wx.navigateTo`杩涜璺宠浆
-
-4. **UI椋庢牸**锛�
-   - 涓昏壊璋冿細钃濊壊(#1890FF)
-   - 鑳屾櫙鑹诧細娴呯伆鑹�(#f5f5f5)
-   - 鏂囧瓧棰滆壊锛氭繁鑹�(#333)銆佷腑绛�(#666)銆佹祬鑹�(#999)
-   - 鍦嗚椋庢牸锛氭寜閽娇鐢ㄥぇ鍦嗚(44rpx)锛屽崱鐗囦娇鐢ㄥ皬鍦嗚(8rpx)
-
-## 寮�鍙戞敞鎰忎簨椤�
-
-1. 鏂板椤甸潰鏃讹紝闇�瑕佸湪`app.json`鐨刞pages`鏁扮粍涓坊鍔犻〉闈㈣矾寰勩��
-
-2. 浣跨敤TDesign缁勪欢鏃讹紝闇�瑕佸湪椤甸潰鐨凧SON鏂囦欢涓紩鍏ュ搴旂粍浠躲��
-
-3. 鍥炬爣浣跨敤SVG鏍煎紡锛屽瓨鏀惧湪`images`鐩綍涓嬨��
-
-4. 缃戠粶璇锋眰搴旂粺涓�绠$悊锛屽缓璁斁鍦╜api`鐩綍涓嬨��
-
-5. 淇濇寔涓庣幇鏈変唬鐮侀鏍间竴鑷达紝鐗瑰埆鏄懡鍚嶈鑼冨拰鏂囦欢缁勭粐鏂瑰紡銆�
-
-6. 椤圭洰浣跨敤npm绠$悊渚濊禆锛屾坊鍔犳柊渚濊禆鏃朵娇鐢細
-   ```
-   npm install 鍖呭悕 --save
-   ```
-   鐒跺悗鍦ㄥ井淇″紑鍙戣�呭伐鍏蜂腑鏋勫缓npm銆�
-
-## 濡備綍杩愯椤圭洰
-
-1. 瀹夎渚濊禆锛�
-   ```
-   npm install
-   ```
-
-2. 浣跨敤寰俊寮�鍙戣�呭伐鍏锋墦寮�椤圭洰鐩綍銆�
-
-3. 鍦ㄥ伐鍏蜂腑鐐瑰嚮"鏋勫缓npm"锛屽皢npm鍖呮瀯寤哄埌miniprogram_npm鐩綍銆�
-
-4. 鍦ㄥ伐鍏蜂腑鐐瑰嚮"缂栬瘧"鎸夐挳锛屾垨浣跨敤蹇嵎閿瓹trl+B(Windows)/Cmd+B(Mac)杩涜缂栬瘧銆�
-
-5. 鍦ㄦā鎷熷櫒涓瑙堟晥鏋滐紝鎴栦娇鐢ㄧ湡鏈鸿皟璇曞姛鑳藉湪鎵嬫満涓婇瑙堛�� 
\ No newline at end of file
diff --git a/app.js b/app.js
index 877f2c8..2f17d18 100644
--- a/app.js
+++ b/app.js
@@ -26,6 +26,7 @@
     clientId:"",
     AppID:"wxbc2b6a00dd904ead",
     vcId:"",
-    needRefreshIrrigationList: false // 鐢ㄤ簬鏍囪鏄惁闇�瑕佸埛鏂扮亴婧夎鍒掑垪琛�
+    needRefreshIrrigationList: false, // 鐢ㄤ簬鏍囪鏄惁闇�瑕佸埛鏂扮亴婧夎鍒掑垪琛�
+    selectedProject:""
   }
 })
diff --git a/images/capture.svg b/images/capture.svg
new file mode 100644
index 0000000..0519ecb
--- /dev/null
+++ b/images/capture.svg
@@ -0,0 +1 @@
+ 
\ No newline at end of file
diff --git a/images/error.svg b/images/error.svg
new file mode 100644
index 0000000..0519ecb
--- /dev/null
+++ b/images/error.svg
@@ -0,0 +1 @@
+ 
\ No newline at end of file
diff --git a/images/five.svg b/images/five.svg
new file mode 100644
index 0000000..da8e024
--- /dev/null
+++ b/images/five.svg
@@ -0,0 +1 @@
+<svg t="1754961303408" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7522" width="200" height="200"><path d="M391.6 64.4h124.5s-3 10.6-12.5 58.1L516.1 596l63.5-480.5s-10.5-47.2-33.5-51.1h69.4L493.5 954l-60.9-821.5s-11.5-58.2-41-68.1z" fill="#3F8BFD" p-id="7523"></path></svg>
\ No newline at end of file
diff --git a/images/flow.svg b/images/flow.svg
index 87f009b..b075e3c 100644
--- a/images/flow.svg
+++ b/images/flow.svg
@@ -1,3 +1 @@
-<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
-  <path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-8 14H9v-4h2v4zm4 0h-2V9h2v8zm4 0h-2V7h2v10z" fill="currentColor"/>
-</svg> 
\ No newline at end of file
+<svg t="1755143007160" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11483" width="200" height="200"><path d="M512 938.666667c235.648 0 426.666667-191.018667 426.666667-426.666667S747.648 85.333333 512 85.333333 85.333333 276.352 85.333333 512s191.018667 426.666667 426.666667 426.666667z m0-768a341.333333 341.333333 0 1 1 0 682.666666 341.333333 341.333333 0 0 1 0-682.666666z" p-id="11484" fill="#2c2c2c"></path><path d="M768 554.666667h-50.816q-39.552 0-57.258667-35.413334l-6.485333-13.013333L596.48 733.866667q-8.362667 33.450667-42.837333 32.64-34.474667-0.853333-41.216-34.602667l-47.786667-238.762667-35.754667 143.018667q-8.533333 34.176-43.733333 35.541333-35.157333 1.322667-46.293333-32.085333L310.570667 554.666667H256a42.666667 42.666667 0 0 1 0-85.333334h69.973333q33.92 0 50.773334 23.68l50.773333-202.837333q8.32-33.450667 42.794667-32.64 34.474667 0.853333 41.216 34.602667l47.786666 238.762666 36.48-146.048q7.936-31.701333 40.405334-35.285333 32.512-3.541333 47.104 25.685333L730.368 469.333333h37.589333A42.666667 42.666667 0 1 1 768 554.666667z" p-id="11485" fill="#2c2c2c"></path></svg>
\ No newline at end of file
diff --git a/images/four.svg b/images/four.svg
new file mode 100644
index 0000000..5ba9cdf
--- /dev/null
+++ b/images/four.svg
@@ -0,0 +1 @@
+<svg t="1754961278798" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7313" width="200" height="200"><path d="M851.5 63.5H562.1s100.2 3.4 100.2 95.6v705.2s6.5 87.2-100.2 95.6H848s-99.3-2.9-99.7-95.6V156.6S742 71 851.5 63.5z" fill="#3F8BFD" p-id="7314"></path><path d="M722.5 63.5H433.1s100.2 3.4 100.2 95.6v705.2s6.5 87.2-100.2 95.6H719s-99.3-2.9-99.7-95.6V156.6S613 71 722.5 63.5z" fill="#3F8BFD" p-id="7315"></path><path d="M594.5 63.5H305.1s100.2 3.4 100.2 95.6v705.2s6.5 87.2-100.2 95.6H591s-99.3-2.9-99.7-95.6V156.6S485 71 594.5 63.5z" fill="#3F8BFD" p-id="7316"></path><path d="M465.5 63.5H176.1s100.2 3.4 100.2 95.6v705.2s6.5 87.2-100.2 95.6H462s-99.3-2.9-99.7-95.6V156.6S356 71 465.5 63.5z" fill="#3F8BFD" p-id="7317"></path></svg>
\ No newline at end of file
diff --git a/images/humidity.svg b/images/humidity.svg
index e135fb4..bf8962e 100644
--- a/images/humidity.svg
+++ b/images/humidity.svg
@@ -1,3 +1 @@
-<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
-  <path d="M12 2l-4.09 4.09L12 10.18l4.09-4.09L12 2zm0 16.36c-2.76 0-5-2.24-5-5 0-1.38.56-2.63 1.46-3.54L12 6.27l3.54 3.55c.9.9 1.46 2.16 1.46 3.54 0 2.76-2.24 5-5 5z" fill="currentColor"/>
-</svg> 
\ No newline at end of file
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1754642042730" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6293" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M738.844 841.58c-113.108 0-204.8-91.692-204.8-204.8 0-163.161 143.268-310.37 190.135-354.163 0.137 0.137 0.289 0.259 0.431 0.393a19.936 19.936 0 0 1 29.2-0.292C800.981 326.287 943.644 471.7 943.644 636.78c0 113.108-91.692 204.8-204.8 204.8z m14.076-476.424c-0.021 0.02-0.044 0.036-0.065 0.056a16.955 16.955 0 0 0-27.02 0c-0.15-0.138-0.311-0.264-0.457-0.406C689.331 404.651 593.349 521.52 593.349 636.2c0 80.244 65.141 145.294 145.5 145.294S884.344 716.443 884.344 636.2c0-116.98-94.925-231.377-131.424-271.044z m5.424 367.344h-4a110 110 0 0 1-105.54-141h0.471a29.5 29.5 0 0 1 57.069 10.5c0 2.724-2 9.086-2 20.5a50 50 0 0 0 50 50c1.348 0 2.679-0.069 4-0.174v0.174a30 30 0 0 1 0 60z m-358 43a140.354 140.354 0 0 0 29-3.033v0.184c0.987-0.1 1.987-0.151 3-0.151a29.984 29.984 0 0 1 4 59.7v0.059a201.146 201.146 0 0 1-36 3.241c-110.457 0-200-89.543-200-200a200.472 200.472 0 0 1 5.225-45.528 29.982 29.982 0 1 1 59.325 8.528h0.4a140.077 140.077 0 0 0 135.05 177z m173-443a29.95 29.95 0 0 1-25.286-13.9c-0.121 0.157-0.255 0.3-0.368 0.466-51.356-75.812-106.381-131.477-132.256-156.466-0.14 0.161-0.3-0.695-0.445-0.538a17.964 17.964 0 0 0-29.292 0c-0.088-0.095-0.187-0.18-0.274-0.278C330.176 216.364 140.344 419.6 140.344 635.5c0 143.594 116.406 260 260 260a258.778 258.778 0 0 0 147.6-45.952 29.972 29.972 0 1 1 38.88 45.552c0.069 0.094 0.131 0.193 0.2 0.285a318.466 318.466 0 0 1-186.68 60.115c-176.731 0-320-143.269-320-320 0-264.941 241.8-503 305.017-560.713 0.08 0.078 0.169 0.145 0.249 0.222a19.931 19.931 0 0 1 28.46-1.029c0.085-0.093 0.181-0.177 0.265-0.272 31.707 28.469 111.748 104.84 182.017 209.046l-0.22 0.266a29.977 29.977 0 0 1-22.788 49.48z" fill="#2c2c2c" p-id="6294"></path></svg>
\ No newline at end of file
diff --git a/images/light.svg b/images/light.svg
new file mode 100644
index 0000000..13bca37
--- /dev/null
+++ b/images/light.svg
@@ -0,0 +1 @@
+ <svg t="1754642435570" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9532" width="200" height="200"><path d="M272.242939 508.6016c0-131.954311 106.96108-238.927671 238.915391-238.927671s238.915391 106.97336 238.915391 238.927671c0 131.953288-106.960057 238.902088-238.915391 238.902088S272.242939 640.554888 272.242939 508.6016z" p-id="9533"></path><path d="M491.401358 71.137177l39.515992 0 0 138.309042-39.515992 0 0-138.309042Z" p-id="9534"></path><path d="M491.401358 813.174364l39.515992 0 0 138.306996-39.515992 0 0-138.306996Z" p-id="9535"></path><path d="M813.028543 488.843604l138.309042 0 0 39.517015-138.309042 0 0-39.517015Z" p-id="9536"></path><path d="M70.980099 488.843604l138.309042 0 0 39.517015-138.309042 0 0-39.517015Z" p-id="9537"></path><path d="M700.967908 123.177776l34.218191 19.756461-69.151451 119.770314-34.218191-19.756461 69.151451-119.770314Z" p-id="9538"></path><path d="M295.011502 905.379369 260.795213 885.619326 329.949222 765.833149 364.165512 785.593192Z" p-id="9539"></path><path d="M343.10894 259.768325 273.96721 139.983171 308.184523 120.224152 377.325229 240.009306Z" p-id="9540"></path><path d="M714.133162 902.382105 644.978129 782.609231 679.195441 762.850212 748.350474 882.622062Z" p-id="9541"></path><path d="M139.85616 274.093527l119.752939 69.163235-19.759901 34.213353-119.752939-69.163235 19.759901-34.213353Z" p-id="9542"></path><path d="M782.460148 645.112992l119.7712 69.151963-19.756461 34.218191-119.7712-69.151963 19.756461-34.218191Z" p-id="9543"></path><path d="M139.851677 748.506529 120.092657 714.290239 239.877811 645.147486 259.637854 679.364799Z" p-id="9544"></path><path d="M882.501028 274.14162l19.760412 34.218191-119.772086 69.166305-19.760412-34.218191 119.772086-69.166305Z" p-id="9545"></path></svg>
\ No newline at end of file
diff --git a/images/mixing.svg b/images/mixing.svg
new file mode 100644
index 0000000..13aeca2
--- /dev/null
+++ b/images/mixing.svg
@@ -0,0 +1 @@
+<svg t="1755143222063" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="20253" width="200" height="200"><path d="M479.418182 1010.036364l-232.727273-256-13.963636-32.581819V46.545455l46.545454-46.545455h465.454546l46.545454 46.545455v674.90909l-13.963636 32.581819-232.727273 256h-65.163636zM325.818182 707.490909l186.181818 204.8 186.181818-204.8V93.090909H325.818182v614.4z" fill="#2c2c2c" p-id="20254"></path><path d="M282.763636 626.455273l41.611637-83.316364 412.16 206.103273-41.658182 83.269818zM282.763636 393.728l41.611637-83.316364 412.16 206.103273-41.658182 83.269818zM282.763636 161.000727l41.611637-83.316363 412.16 206.103272-41.611637 83.269819z" fill="#2c2c2c" p-id="20255"></path></svg>
\ No newline at end of file
diff --git a/images/no-data.svg b/images/no-data.svg
new file mode 100644
index 0000000..c4a0043
--- /dev/null
+++ b/images/no-data.svg
@@ -0,0 +1,6 @@
+<svg width="120" height="120" viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg">
+  <circle cx="60" cy="60" r="50" stroke="#E5E5E5" stroke-width="2"/>
+  <path d="M40 40L80 80" stroke="#E5E5E5" stroke-width="2" stroke-linecap="round"/>
+  <path d="M80 40L40 80" stroke="#E5E5E5" stroke-width="2" stroke-linecap="round"/>
+  <text x="60" y="100" text-anchor="middle" fill="#999" font-size="12">鏆傛棤鏁版嵁</text>
+</svg> 
\ No newline at end of file
diff --git a/images/one.svg b/images/one.svg
new file mode 100644
index 0000000..addedd4
--- /dev/null
+++ b/images/one.svg
@@ -0,0 +1,2 @@
+
+<svg t="1754907458715" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11307" width="200" height="200"><path d="M658.5 63.5H369.1s100.2 3.4 100.2 95.6v705.2s6.5 87.2-100.2 95.6H655s-99.3-2.9-99.7-95.6V156.6S549 71 658.5 63.5z" fill="#3F8BFD" p-id="11308"></path></svg>
\ No newline at end of file
diff --git a/images/pump.svg b/images/pump.svg
new file mode 100644
index 0000000..870525b
--- /dev/null
+++ b/images/pump.svg
@@ -0,0 +1 @@
+<svg t="1755142945165" class="icon" viewBox="0 0 1031 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9443" width="200" height="200"><path d="M511.853714 943.177143a431.177143 431.177143 0 1 1 0-862.354286 431.177143 431.177143 0 0 1 0 862.354286z m0 79.798857a510.976 510.976 0 1 0 0-1021.952 510.976 510.976 0 0 0 0 1021.952z" fill="#2c2c2c" p-id="9444"></path><path d="M471.917714 272.457143c0-8.777143 7.168-15.945143 16.018286-15.945143h47.908571c8.777143 0 15.945143 7.168 15.945143 15.945143v479.085714c0 8.777143-7.168 15.945143-15.945143 15.945143H487.862857a15.945143 15.945143 0 0 1-16.018286-15.945143v-479.085714z" fill="#2c2c2c" p-id="9445"></path><path d="M751.396571 472.064c8.777143 0 15.945143 7.168 15.945143 16.018286v47.908571c0 8.777143-7.168 15.945143-15.945143 15.945143h-479.085714a15.945143 15.945143 0 0 1-15.945143-15.945143v-47.908571c0-8.850286 7.168-16.018286 15.945143-16.018286h479.085714z" fill="#2c2c2c" p-id="9446"></path></svg>
\ No newline at end of file
diff --git a/images/rainfall.svg b/images/rainfall.svg
new file mode 100644
index 0000000..4a9dab8
--- /dev/null
+++ b/images/rainfall.svg
@@ -0,0 +1 @@
+<svg t="1754643083996" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13658" width="200" height="200"><path d="M772.338983 138.847458a251.661017 251.661017 0 0 0-37.402034 2.776949A321.084746 321.084746 0 0 0 156.20339 247.842712 199.59322 199.59322 0 0 0 0 442.576271a199.59322 199.59322 0 0 0 199.59322 199.593221h572.745763a251.661017 251.661017 0 0 0 0-503.322034z m0 407.864406H199.59322a104.135593 104.135593 0 0 1-22.823051-205.754576l58.576272-13.016949 13.624406-58.402712a225.627119 225.627119 0 0 1 406.823051-74.456949l33.670509 49.811525 59.530847-8.677966A162.538305 162.538305 0 0 1 772.338983 234.305085a156.20339 156.20339 0 1 1 0 312.406779zM112.813559 694.237288h69.423729v190.915254h-69.423729zM295.050847 754.983051h69.423729v190.915254h-69.423729zM477.288136 833.084746h69.423728v190.915254h-69.423728zM659.525424 763.661017h69.423729v190.915254h-69.423729zM841.762712 694.237288h69.423729v190.915254h-69.423729z" p-id="13659"></path></svg>
\ No newline at end of file
diff --git a/images/refresh.svg b/images/refresh.svg
new file mode 100644
index 0000000..9ffa1af
--- /dev/null
+++ b/images/refresh.svg
@@ -0,0 +1 @@
+<svg t="1754968007359" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6420" id="mx_n_1754968007360" width="200" height="200"><path d="M512 888c-13.6 0-24-10.4-24-24s10.4-24 24-24c180.8 0 328-147.2 328-328 0-83.2-31.2-162.4-88-224-8.8-9.6-8-24.8 1.6-33.6s24.8-8 33.6 1.6c64.8 70.4 100.8 161.6 100.8 256 0 207.2-168.8 376-376 376zM256.8 778.4c-6.4 0-12.8-2.4-17.6-7.2C172.8 700.8 136 608.8 136 512c0-207.2 168.8-376 376-376 13.6 0 24 10.4 24 24s-10.4 24-24 24c-180.8 0-328 147.2-328 328 0 84 32 164.8 90.4 225.6 8.8 9.6 8.8 24.8-0.8 33.6-4.8 4.8-11.2 7.2-16.8 7.2z" fill="#ffffff" p-id="6421"></path><path d="M428 316c-4.8 0-8.8-1.6-12.8-4-11.2-7.2-14.4-21.6-7.2-32.8l84-132c7.2-11.2 21.6-14.4 32.8-7.2 11.2 7.2 14.4 21.6 7.2 32.8L448 304.8c-4 7.2-12 11.2-20 11.2zM513.6 886.4c-4.8 0-8.8-1.6-12.8-4-11.2-7.2-14.4-21.6-7.2-32.8l84-132c7.2-11.2 21.6-14.4 32.8-7.2 11.2 7.2 14.4 21.6 7.2 32.8l-84 132c-4 7.2-12 11.2-20 11.2z" fill="#ffffff" p-id="6422"></path></svg>
\ No newline at end of file
diff --git a/images/settings-time.svg b/images/settings-time.svg
new file mode 100644
index 0000000..0499bb7
--- /dev/null
+++ b/images/settings-time.svg
@@ -0,0 +1 @@
+<svg t="1755143164825" class="icon" viewBox="0 0 1026 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="17133" width="200" height="200"><path d="M512 352c42.7 0 82.9 16.6 113.1 46.9C655.4 429.1 672 469.3 672 512s-16.6 82.9-46.9 113.1C594.9 655.4 554.7 672 512 672s-82.9-16.6-113.1-46.9C368.6 594.9 352 554.7 352 512s16.6-82.9 46.9-113.1S469.3 352 512 352m0-64c-123.7 0-224 100.3-224 224s100.3 224 224 224 224-100.3 224-224-100.3-224-224-224z" p-id="17134"></path><path d="M658.7 91.7c2.6 0 5.2 0.3 7.8 1 22.7 5.7 47.1 15.8 70.6 29.4 23.5 13.6 44.5 29.6 60.8 46.4 8.4 8.7 11.2 21.2 7.4 32.7-17.6 53-15.3 99.3 6.8 137.5s61 63.4 115.7 74.7c11.9 2.4 21.3 11.2 24.6 22.7 6.4 22.5 9.8 48.7 9.8 75.9 0 27.2-3.4 53.4-9.8 75.9-3.3 11.6-12.8 20.3-24.6 22.7-54.7 11.2-93.6 36.4-115.7 74.7-22.1 38.3-24.4 84.6-6.8 137.5 3.8 11.5 1 24-7.4 32.7-16.2 16.8-37.3 32.9-60.8 46.4-23.5 13.6-47.9 23.7-70.6 29.4-2.6 0.6-5.2 1-7.8 1-9.2 0-18-4-24.2-10.9-37.1-41.7-78.3-62.9-122.5-62.9s-85.4 21.2-122.5 62.9c-6.2 6.9-15 10.9-24.2 10.9-2.6 0-5.2-0.3-7.8-1-22.7-5.7-47.1-15.8-70.6-29.4-23.5-13.6-44.5-29.6-60.8-46.4-8.4-8.7-11.2-21.2-7.4-32.7 17.6-53 15.3-99.3-6.8-137.5-22.1-38.3-61-63.4-115.7-74.7-11.9-2.4-21.3-11.2-24.6-22.7-6.4-22.5-9.8-48.7-9.8-75.9 0-27.2 3.4-53.4 9.8-75.9 3.3-11.6 12.8-20.3 24.6-22.7 54.7-11.2 93.6-36.4 115.7-74.7s24.4-84.6 6.8-137.5c-3.8-11.5-1-24 7.4-32.7 16.2-16.8 37.3-32.9 60.8-46.4 23.5-13.6 47.9-23.7 70.6-29.4 2.6-0.6 5.2-1 7.8-1 9.2 0 18 4 24.2 10.9 37.1 41.7 78.3 62.9 122.5 62.9s85.4-21.2 122.5-62.9c6.2-6.9 15-10.9 24.2-10.9m0-64c-27.2 0-53.5 11.5-72 32.4-24.5 27.6-49.6 41.4-74.7 41.4s-50.1-13.8-74.7-41.4c-18.5-20.9-44.9-32.4-72-32.4-7.8 0-15.6 0.9-23.3 2.9-57.9 14.4-120.5 50.6-161.9 93.5-24.9 25.8-33.4 63.3-22.1 97.3 23.3 70.1-2.3 114.5-74.7 129.3-35.1 7.2-63.3 33.3-73.2 67.8-16.4 57.3-16.4 129.6 0 187 9.9 34.5 38.1 60.6 73.2 67.8 72.3 14.9 97.9 59.3 74.7 129.3-11.3 34.1-2.8 71.5 22.1 97.3 41.4 42.9 104.1 79 161.9 93.5 7.7 1.9 15.5 2.9 23.3 2.9 27.2 0 53.5-11.5 72-32.4 24.5-27.6 49.6-41.4 74.7-41.4s50.1 13.8 74.7 41.4c18.5 20.9 44.9 32.4 72 32.4 7.8 0 15.6-0.9 23.3-2.9 57.9-14.4 120.5-50.6 161.9-93.5 24.9-25.8 33.4-63.3 22.1-97.3-23.3-70.1 2.3-114.5 74.7-129.3 35.1-7.2 63.4-33.3 73.2-67.8 16.4-57.3 16.4-129.6 0-187-9.9-34.5-38.1-60.6-73.2-67.8-72.3-14.9-97.9-59.3-74.7-129.3 11.3-34.1 2.8-71.5-22.1-97.3C802.5 81.2 739.9 45 682 30.6c-7.7-2-15.5-2.9-23.3-2.9z" p-id="17135"></path></svg>
\ No newline at end of file
diff --git a/images/settings.svg b/images/settings.svg
new file mode 100644
index 0000000..a2942fc
--- /dev/null
+++ b/images/settings.svg
@@ -0,0 +1 @@
+<svg t="1755143115164" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15966" width="200" height="200"><path d="M927.1 566.2c-2.4 13.9-4.8 27.9-7.1 41.8-18 108.3-71.1 195.7-157.3 263.3-7.9 6.2-15.8 12.3-23.7 18.5-1 0.8-2.1 1.5-4.2 3.1L580.3 697.2c65-38.8 99-95.8 99.2-172.9 16.4 2.2 30.3 3.9 44.2 5.9l195.9 28.2c2.5 0.4 5.1 0.1 7.7 0.1-0.2 2.5-0.2 5.1-0.2 7.7zM747.6 774.4c40.2-41.4 67.7-89 83.2-145-28.2-4.1-55.2-7.9-82.8-11.9-11.1 34.3-28.8 63.9-52.6 89.9 17.7 22.7 34.7 44.5 52.2 67zM528.9 127.2c19.5 2.5 39.1 4.6 58.5 7.8 40.4 6.7 78.2 21.8 116.3 38-30.4 76.7-60.5 152.9-91 230.1-32.9-12.5-64.5-27.4-100.4-27.4-36.1 0-67.8 14.4-101 27.8-30.5-76.6-60.8-152.7-91.8-230.4 21.3-8.2 41.7-16.9 62.6-24 33.8-11.6 68.6-18.2 104.3-20.1 3.2-0.2 6.3-1 9.5-1.6 10.9-0.2 22-0.2 33-0.2z m-100.4 93.7c10.4 27.2 20.3 53 29.8 77.7 18.7-1.5 36.1-4 53.4-4 17.3 0 34.7 2.5 52.8 4 10-25 20.2-50.8 30.9-77.5-55.8-14.2-110.6-14.4-166.9-0.2zM441.8 697.8c-51.4 65.1-102.3 129.5-153.2 194C170.9 811.9 107.8 701.4 98 559.3c80-11.9 160.1-23.8 241.3-35.9 5.4 34.9 8.8 69.6 27.1 100.6 18.3 31.1 47.2 51 75.4 73.8z m-249-68.3c15.5 55.8 42.8 103.5 82.9 144.9 17.5-22.9 34.3-44.9 51.3-67.1-18.9-20.8-34-43.3-44.5-68.6-2.8-6.8-4-16.5-9-19.5-5.2-3-14.3 0.5-21.6 1.6-19.4 2.7-38.8 5.7-59.1 8.7zM511.4 665.7c-68.6 0-124.2-55.4-124.4-123.8-0.1-68.7 56.2-125.1 124.7-124.7 68.4 0.3 124 56.3 123.9 124.6 0 68.4-55.6 123.8-124.2 123.9z m41.2-124c0-23-18.2-41.5-41.1-41.5-22.9-0.1-41.3 18.3-41.3 41.3-0.1 23 18.2 41.6 41.1 41.7 22.7 0 41.2-18.6 41.3-41.5z" p-id="15967"></path></svg>
\ No newline at end of file
diff --git a/images/temperature.svg b/images/temperature.svg
index ea72fdf..f0a95af 100644
--- a/images/temperature.svg
+++ b/images/temperature.svg
@@ -1,3 +1 @@
-<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
-  <path d="M15 13V5c0-1.66-1.34-3-3-3S9 3.34 9 5v8c-1.21.91-2 2.37-2 4 0 2.76 2.24 5 5 5s5-2.24 5-5c0-1.63-.79-3.09-2-4zm-4-8c0-.55.45-1 1-1s1 .45 1 1h-2v1h2v1h-2v1h2v4.51c-.6-.29-1.29-.51-2-.51s-1.4.22-2 .51V5z" fill="currentColor"/>
-</svg> 
\ No newline at end of file
+<svg t="1754642365274" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7432" width="200" height="200"><path d="M692.029187 551.06339V179.1972c0-98.54246-83.1987-179.1972-184.701114-179.1972S322.626959 80.65474 322.626959 179.1972v380.17006c-53.77516 49.023234-87.67863 118.39815-87.67863 195.83694 0 148.429681 124.046062 268.7958 277.051671 268.7958s277.051671-120.35012 277.051671-268.7958c0-81.790722-37.79141-154.87758-97.022484-204.14081zM512 969.168857c-121.710098 0-220.684552-95.9985-220.684552-214.092655 0-59.487071 24.815612-114.926204 69.886908-155.885564l17.791722-16.127748v-403.993688c0-68.686927 57.5991-124.510055 128.333995-124.510054s128.333995 55.839128 128.333995 124.510054v397.065796l19.727692 16.383744c49.103233 40.815362 77.294792 100.046437 77.294792 162.55746 0 118.078155-98.974454 214.092655-220.684552 214.092655z m106.638334-335.066765l-39.359385-32.767488V179.069202c0-37.807409-32.991485-69.822909-71.998875-69.822909s-71.998875 31.9995-71.998875 69.822909v21.295667h46.895267v33.391479H435.361197v53.935157h46.895268v33.391478H435.361197v53.935157h46.895268v33.391479H435.361197V462.392775h46.895268v33.391478H435.361197v110.894268l-35.583444 32.383494c-33.599475 30.623522-52.095186 71.822878-52.095186 116.062186 0 87.998625 73.59885 159.405509 164.317433 159.405509s164.317433-71.582882 164.317433-159.405509c0-46.559273-21.055671-90.654584-57.679099-121.022109zM512 878.06628c-69.886908 0-126.766019-55.199138-126.766019-122.990078 0-34.031468 14.287777-65.90297 40.255371-89.470602l47.407259-43.199325v-66.686958h68.798925v62.399025l52.47918 43.599319c28.319558 23.567632 44.543304 57.5991 44.543304 93.374541 0.047999 67.774941-56.831112 122.974079-126.71802 122.974078z" fill="#2c2c2c" p-id="7433"></path></svg>
\ No newline at end of file
diff --git a/images/three.svg b/images/three.svg
new file mode 100644
index 0000000..6b65222
--- /dev/null
+++ b/images/three.svg
@@ -0,0 +1 @@
+<svg t="1754961266822" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7105" width="200" height="200"><path d="M786.5 63.5H497.1s100.2 3.4 100.2 95.6v705.2s6.5 87.2-100.2 95.6H783s-99.3-2.9-99.7-95.6V156.6S677 71 786.5 63.5z" fill="#3F8BFD" p-id="7106"></path><path d="M658.5 63.5H369.1s100.2 3.4 100.2 95.6v705.2s6.5 87.2-100.2 95.6H655s-99.3-2.9-99.7-95.6V156.6S549 71 658.5 63.5z" fill="#3F8BFD" p-id="7107"></path><path d="M529.5 63.5H240.1s100.2 3.4 100.2 95.6v705.2s6.5 87.2-100.2 95.6H526s-99.3-2.9-99.7-95.6V156.6S420 71 529.5 63.5z" fill="#3F8BFD" p-id="7108"></path></svg>
\ No newline at end of file
diff --git a/images/timer.svg b/images/timer.svg
new file mode 100644
index 0000000..79d7c51
--- /dev/null
+++ b/images/timer.svg
@@ -0,0 +1 @@
+<svg t="1755143047361" class="icon" viewBox="0 0 1086 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12575" width="200" height="200"><path d="M814.007218 542.06918a271.03459 271.03459 0 1 1 271.03459-271.03459 271.03459 271.03459 0 0 1-271.03459 271.03459z m150.574772-271.03459h-120.459817V120.459818a30.114954 30.114954 0 0 0-60.229909 0v180.689726a30.114954 30.114954 0 0 0 30.114954 30.114955h150.574772a30.114954 30.114954 0 0 0 0-60.229909z m-480.333523 29.151276c-9.636785 0.331264-19.87587 0.662529-29.211506 1.054023-42.763235-1.535863-81.912676-1.867127-120.459817-4.607588a2329.994024 2329.994024 0 0 1-120.459818-12.256786 711.947638 711.947638 0 0 1-126.181659-26.772195A217.158936 217.158936 0 0 1 18.370122 224.89848a4.216094 4.216094 0 0 1-1.204598-0.993794 32.614496 32.614496 0 0 1 0-57.429218 179.545358 179.545358 0 0 1 51.195423-26.62162 587.633106 587.633106 0 0 1 108.112686-27.555183 1456.961495 1456.961495 0 0 1 75.287386-11.052188c26.50116-3.011495 53.303469-4.938853 80.105779-6.92644 52.70117-3.975174 105.40234-4.637703 158.103511-3.523449 15.057477 0.30115 30.114954 1.445518 44.871282 2.168276A329.969556 329.969556 0 0 0 482.742719 271.03459c0 9.84759 0.602299 19.51449 1.505748 29.151276zM1.204598 273.805166v-2.379082c7.528739 4.366668 13.25058 8.010578 19.574721 11.262993a436.215115 436.215115 0 0 0 96.970153 35.144152 1004.725225 1004.725225 0 0 0 108.413836 20.688974 1630.032138 1630.032138 0 0 0 244.53343 14.545523c7.528739 0 14.756328-0.843219 22.586216-1.023909a329.939441 329.939441 0 0 0 120.459817 182.436394c-28.308057 2.620001-56.616114 4.999082-84.924171 6.022991q-60.982783 2.168277-121.965566 1.264828a1453.558505 1453.558505 0 0 1-91.850611-4.938852 1336.200528 1336.200528 0 0 1-81.611526-8.582762 685.054983 685.054983 0 0 1-165.63225-39.781855 271.03459 271.03459 0 0 1-41.859786-21.983917 52.430136 52.430136 0 0 1-21.682767-24.483458 49.990824 49.990824 0 0 1-3.312645-19.273571c0.602299-47.822548 0.30115-95.67521 0.301149-143.527873v-5.360461z m0.30115 238.480324c9.034486 4.878623 17.165524 9.697015 25.597711 13.913109a478.406166 478.406166 0 0 0 98.777051 34.029898 931.847035 931.847035 0 0 0 110.823032 20.026445c29.813805 3.643909 59.928759 6.022991 90.043714 8.673107a1620.184548 1620.184548 0 0 0 174.365586 3.824599c31.319553-0.602299 62.337956-2.348966 93.356358-5.119542s62.036806-6.203681 93.05521-10.480004a328.734843 328.734843 0 0 0 216.827671 12.377246q-0.451724 36.800474 0 73.600948a49.508985 49.508985 0 0 1-22.586215 41.829672 237.637105 237.637105 0 0 1-68.963246 33.12645 631.480479 631.480479 0 0 1-102.993144 24.483458c-33.427599 5.089427-67.156348 10.20897-100.885097 13.31081a1573.02453 1573.02453 0 0 1-196.951802 6.38437c-26.802309-0.903449-53.604619-1.535863-80.406929-3.523449a1577.722462 1577.722462 0 0 1-89.441414-9.215177c-28.006908-3.674024-55.712666-8.221383-83.117275-13.822764a412.996485 412.996485 0 0 1-120.760967-40.715418 88.447621 88.447621 0 0 1-30.717253-25.928976 34.300933 34.300933 0 0 1-6.324141-20.538399v-151.237301c0-1.565978 0.30115-3.011495 0.30115-4.999082z m0 240.919635c9.034486 4.878623 17.165524 9.697015 25.597711 13.913109a478.406166 478.406166 0 0 0 98.777051 34.029899 931.847035 931.847035 0 0 0 110.823032 20.026444c29.813805 3.643909 59.928759 6.022991 90.043714 8.673107a1620.184548 1620.184548 0 0 0 174.365586 3.824599c31.319553-0.602299 62.337956-2.348966 93.356358-5.119542 36.439095-3.28253 73.179339-7.167359 109.618435-12.648281 20.177019-3.011495 40.052889-6.56506 59.627609-10.871498 18.370122-4.035404 36.439095-8.793567 54.508068-14.425063 14.154029-4.547358 28.308057-9.6669 42.160936-15.509202 11.142533-4.697933 21.682767-10.299314 32.524151-15.960926 3.914944-1.867127 7.528739-3.764369 11.142533-5.631496v5.390577c0 48.364617-0.30115 96.729234 0.301149 145.063735a49.508985 49.508985 0 0 1-22.586215 41.829672 237.637105 237.637105 0 0 1-68.963246 33.12645 631.480479 631.480479 0 0 1-102.993144 24.483458c-33.427599 5.089427-67.156348 10.20897-100.885097 13.310809a1573.02453 1573.02453 0 0 1-196.951802 6.384371c-26.802309-0.903449-53.604619-1.535863-80.406929-3.52345a1577.722462 1577.722462 0 0 1-89.441414-9.215176c-28.006908-3.674024-55.712666-8.221383-83.117275-13.822764a412.996485 412.996485 0 0 1-120.760967-40.715418 88.447621 88.447621 0 0 1-30.717253-25.928976 34.300933 34.300933 0 0 1-6.324141-20.538399v-151.237301c0-1.475633 0.30115-2.921151 0.30115-4.908738z" p-id="12576"></path></svg>
\ No newline at end of file
diff --git a/images/two.svg b/images/two.svg
new file mode 100644
index 0000000..d7e0ab7
--- /dev/null
+++ b/images/two.svg
@@ -0,0 +1,2 @@
+
+<svg t="1754960228563" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11513" width="200" height="200"><path d="M720.5 63.5H431.1s100.2 3.4 100.2 95.6v705.2s6.5 87.2-100.2 95.6H717s-99.3-2.9-99.7-95.6V156.6S611 71 720.5 63.5z" fill="#3F8BFD" p-id="11514"></path><path d="M596.5 63.5H307.1s100.2 3.4 100.2 95.6v705.2s6.5 87.2-100.2 95.6H593s-99.3-2.9-99.7-95.6V156.6S487 71 596.5 63.5z" fill="#3F8BFD" p-id="11515"></path></svg>
\ No newline at end of file
diff --git a/images/uv.svg b/images/uv.svg
new file mode 100644
index 0000000..c8769d1
--- /dev/null
+++ b/images/uv.svg
@@ -0,0 +1 @@
+ <svg t="1754642405930" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8520" width="200" height="200"><path d="M186.907091 793.533872l-42.663111 42.663112a30.16282 30.16282 0 0 0 42.663111 42.663111l42.663111-42.663111a30.16282 30.16282 0 0 0-42.663111-42.663112zM835.983668 229.527539l42.663111-42.663111a30.16282 30.16282 0 0 0-42.663111-42.663111l-42.663111 42.663111a30.16282 30.16282 0 0 0 42.663111 42.663111z m-733.805516 248.555287h-68.260978a33.87451 33.87451 0 1 0 0 67.749021h68.260978A33.831847 33.831847 0 0 0 136.052662 511.957337a33.191901 33.191901 0 0 0-33.87451-33.874511z m409.565869-341.304891a34.130489 34.130489 0 0 0 33.917174-34.386468V34.130489a34.130489 34.130489 0 0 0-68.260978 0v68.260978a34.770436 34.770436 0 0 0 34.599783 34.13049zM188.95492 229.527539a30.16282 30.16282 0 0 0 42.663112-42.663111l-42.663112-42.663111a30.16282 30.16282 0 0 0-42.663111 42.663111zM512 887.392717a34.130489 34.130489 0 0 0-33.87451 34.429131v68.260978a33.87451 33.87451 0 0 0 67.791684 0v-68.260978A34.130489 34.130489 0 0 0 512 887.392717z m477.826848-409.309891h-68.260978a33.87451 33.87451 0 1 0 0 67.749021h68.260978a33.87451 33.87451 0 1 0 0-67.749021z m-153.032581 314.256479a30.16282 30.16282 0 0 0-42.663111 42.663111l42.663111 42.663112a30.16282 30.16282 0 0 0 42.663112-42.663112zM512 204.782935a307.174402 307.174402 0 1 0 307.174402 307.174402A307.174402 307.174402 0 0 0 512 204.782935z m-15.401383 356.364969a76.025665 76.025665 0 1 1-152.008666 0v-146.334472a16.425298 16.425298 0 0 1 32.850596 0v146.334472a43.132406 43.132406 0 0 0 86.264811 0v-146.334472a16.425298 16.425298 0 0 1 32.850596 0v146.334472z m180.72094-146.846429l-62.629448 207.982668a16.04133 16.04133 0 0 1-31.314724-1.535872c-0.511957 0.511957-63.141405-206.446796-63.141404-206.446796a16.254645 16.254645 0 0 1 31.314723-8.532622l42.108491 136.521956a5.2049 5.2049 0 0 0 6.655446 3.583701 6.228814 6.228814 0 0 0 3.583701-3.583701l42.108491-136.521956a16.254645 16.254645 0 0 1 31.272061 8.617948z" p-id="8521"></path></svg>
\ No newline at end of file
diff --git a/images/wind-arrow.svg b/images/wind-arrow.svg
new file mode 100644
index 0000000..660bef0
--- /dev/null
+++ b/images/wind-arrow.svg
@@ -0,0 +1,4 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+  <path d="M12 2L10 10H14L12 2Z" fill="#EB2F96"/>
+  <path d="M12 22L14 14H10L12 22Z" stroke="#EB2F96" stroke-width="2" stroke-linecap="round"/>
+</svg> 
\ No newline at end of file
diff --git a/images/wind-direction.svg b/images/wind-direction.svg
new file mode 100644
index 0000000..9ff19e3
--- /dev/null
+++ b/images/wind-direction.svg
@@ -0,0 +1 @@
+ <svg t="1754642528320" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="12645" width="200" height="200"><path d="M519.723387 534.475706a19.438636 19.438636 0 0 0-19.438636 19.438636v450.559809a19.438636 19.438636 0 0 0 5.640675 13.79796 19.178297 19.178297 0 0 0 13.797961 5.727455h133.640621a19.525415 19.525415 0 0 0 13.79796-5.727455 19.091517 19.091517 0 0 0 5.640676-13.79796V553.827562a19.438636 19.438636 0 0 0-19.438636-19.438636h-34.104392V232.482613H798.37276v64.477261a19.351856 19.351856 0 0 0 29.244733 16.835247l164.187049-95.457586a19.525415 19.525415 0 0 0 0-33.757274l-164.187049-95.457587-3.210846-1.735592a18.39728 18.39728 0 0 0-6.508472-1.214915A19.525415 19.525415 0 0 0 798.37276 105.697582V173.559248H393.719372L99.710005 2.690168A19.265077 19.265077 0 0 0 89.990687 0H41.741216a19.438636 19.438636 0 0 0-19.438636 19.525415A21.087449 21.087449 0 0 0 23.430715 26.033887l60.745737 168.69959a19.351856 19.351856 0 0 1 0 13.277282l-60.745737 168.69959a19.351856 19.351856 0 0 0 18.223722 26.033887h48.33625a19.265077 19.265077 0 0 0 9.806098-2.603389l287.934793-167.658234h166.182981v301.906313z" p-id="12646"></path></svg>
\ No newline at end of file
diff --git a/images/wind-speed.svg b/images/wind-speed.svg
new file mode 100644
index 0000000..23cebaf
--- /dev/null
+++ b/images/wind-speed.svg
@@ -0,0 +1 @@
+ <svg t="1754642502403" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11563" width="200" height="200"><path d="M256 554.666667h-42.666667c-59.733333 0-106.666667-46.933333-106.666666-106.666667s46.933333-106.666667 106.666666-106.666667h42.666667c12.8 0 21.333333 8.533333 21.333333 21.333334s-8.533333 21.333333-21.333333 21.333333h-42.666667c-36.266667 0-64 27.733333-64 64s27.733333 64 64 64h42.666667c12.8 0 21.333333 8.533333 21.333333 21.333333s-8.533333 21.333333-21.333333 21.333334zM469.333333 896h-64c-59.733333 0-106.666667-46.933333-106.666666-106.666667s46.933333-106.666667 106.666666-106.666666h64c12.8 0 21.333333 8.533333 21.333334 21.333333s-8.533333 21.333333-21.333334 21.333333h-64c-36.266667 0-64 27.733333-64 64s27.733333 64 64 64h64c12.8 0 21.333333 8.533333 21.333334 21.333334s-8.533333 21.333333-21.333334 21.333333zM576 341.333333h-64c-59.733333 0-106.666667-46.933333-106.666667-106.666666s46.933333-106.666667 106.666667-106.666667h64c12.8 0 21.333333 8.533333 21.333333 21.333333s-8.533333 21.333333-21.333333 21.333334h-64c-36.266667 0-64 27.733333-64 64s27.733333 64 64 64h64c12.8 0 21.333333 8.533333 21.333333 21.333333s-8.533333 21.333333-21.333333 21.333333z" fill="#333333" p-id="11564"></path><path d="M853.333333 341.333333H512c-12.8 0-21.333333-8.533333-21.333333-21.333333s8.533333-21.333333 21.333333-21.333333h341.333333c12.8 0 21.333333 8.533333 21.333334 21.333333s-8.533333 21.333333-21.333334 21.333333zM896 554.666667H256c-12.8 0-21.333333-8.533333-21.333333-21.333334s8.533333-21.333333 21.333333-21.333333h640c12.8 0 21.333333 8.533333 21.333333 21.333333s-8.533333 21.333333-21.333333 21.333334zM725.333333 725.333333H469.333333c-12.8 0-21.333333-8.533333-21.333333-21.333333s8.533333-21.333333 21.333333-21.333333h256c12.8 0 21.333333 8.533333 21.333334 21.333333s-8.533333 21.333333-21.333334 21.333333z" fill="#333333" p-id="11565"></path></svg>
\ No newline at end of file
diff --git a/pages/home/home.js b/pages/home/home.js
index 9c4b282..2f960f6 100644
--- a/pages/home/home.js
+++ b/pages/home/home.js
@@ -61,7 +61,7 @@
           icon: 'error',
           duration: 2000
         });
-        
+
         // 鑾峰彇椤圭洰閰嶇疆
         const projectConfig = PROJECT_CONFIG[currentProject];
         if (projectConfig) {
@@ -82,7 +82,7 @@
         return;
       }
     }
-    
+
     // 宸茬櫥褰曟垨涓嶉渶瑕佺櫥褰曠殑椤圭洰锛屾墽琛屽紑闃�鎿嶄綔
     wx.navigateTo({
       url: '/pages/waterIntake/waterIntake',
@@ -226,7 +226,7 @@
           const projectConfig = PROJECT_CONFIG[project];
           if (projectConfig) {
             getApp().globalData.tag = projectConfig.tag;
-            
+
             // 鏍规嵁椤圭洰鏄惁闇�瑕佺櫥褰曪紝璁剧疆涓嶅悓鐨剈serName
             if (projectConfig.needLogin === false) {
               // 涓嶉渶瑕佺櫥褰曠殑椤圭洰锛屾樉绀洪」鐩悕绉�
@@ -359,7 +359,7 @@
             this.setData({
               isFromLogin: true
             });
-            
+
             // 鐧诲綍鎴愬姛鍚庡埛鏂版暟鎹�
             console.log('鐧诲綍鎴愬姛鍚庡埛鏂版暟鎹�');
             this.initData();
@@ -373,7 +373,7 @@
     // 鍒濆鍖栧鐞�
     if (fromLogin || this.data.isFromLogin) {
       console.log('onShow: 浠庣櫥褰曢〉杩斿洖锛屼笉杩涜鐧诲綍妫�鏌�');
-      
+
       // 濡傛灉鏄粠鐧诲綍椤佃繑鍥烇紝閲嶆柊鍔犺浇鏁版嵁
       this.initData();
     } else {
@@ -463,7 +463,7 @@
           icon: 'error',
           duration: 2000
         });
-        
+
         // 鑾峰彇椤圭洰閰嶇疆
         const projectConfig = PROJECT_CONFIG[currentProject];
         if (projectConfig) {
@@ -484,7 +484,7 @@
         return;
       }
     }
-    
+
     // 宸茬櫥褰曟垨涓嶉渶瑕佺櫥褰曠殑椤圭洰锛屾墽琛屾煡鐪嬭褰曟搷浣�
     wx.navigateTo({
       url: '/pages/valveList/valveList',
@@ -510,7 +510,7 @@
           icon: 'error',
           duration: 2000
         });
-        
+
         // 鑾峰彇椤圭洰閰嶇疆
         const projectConfig = PROJECT_CONFIG[currentProject];
         if (projectConfig) {
@@ -529,9 +529,25 @@
           });
         }
         return;
+      } else if (!PROJECT_CONFIG[currentProject].monitor) {
+        // 鏈櫥褰曪紝鏄剧ず鎻愮ず骞堕樆姝㈡搷浣�
+        wx.showToast({
+          title: '褰撳墠椤圭洰涓嶅彲鐢�',
+          icon: 'error',
+          duration: 2000
+        });
+        return;
       }
+    } else if (!PROJECT_CONFIG[currentProject].monitor) {
+      // 鏈櫥褰曪紝鏄剧ず鎻愮ず骞堕樆姝㈡搷浣�
+      wx.showToast({
+        title: '褰撳墠椤圭洰涓嶅彲鐢�',
+        icon: 'error',
+        duration: 2000
+      });
+      return;
     }
-    
+
     // 宸茬櫥褰曟垨涓嶉渶瑕佺櫥褰曠殑椤圭洰锛岃烦杞埌缁煎悎绔欑洃娴嬮〉闈�
     wx.navigateTo({
       url: '/pages/stationMonitor/stationMonitor',
@@ -596,7 +612,7 @@
           icon: 'error',
           duration: 2000
         });
-        
+
         // 鑾峰彇椤圭洰閰嶇疆
         const projectConfig = PROJECT_CONFIG[currentProject];
         if (projectConfig) {
@@ -617,7 +633,7 @@
         return;
       }
     }
-    
+
     // 宸茬櫥褰曟垨涓嶉渶瑕佺櫥褰曠殑椤圭洰锛屾墽琛岃疆鐏屾搷浣�
     wx.navigateTo({
       url: '/pages/irrigation/irrigation',
@@ -882,7 +898,7 @@
           icon: 'error',
           duration: 2000
         });
-        
+
         // 鑾峰彇椤圭洰閰嶇疆
         const projectConfig = PROJECT_CONFIG[currentProject];
         if (projectConfig) {
@@ -903,7 +919,7 @@
         return;
       }
     }
-    
+
     // 宸茬櫥褰曟垨涓嶉渶瑕佺櫥褰曠殑椤圭洰锛屾墽琛屾壂鐮佹搷浣�
     const that = this;
     wx.scanCode({
@@ -1027,7 +1043,7 @@
             app.globalData.clientId = jsonObj.clientId || clientId;
             app.globalData.tag = jsonObj.tag;
             app.globalData.isLoggedIn = true;
-            
+
             // 鐩存帴浠巙serData璁剧疆鐢ㄦ埛淇℃伅
             if (jsonObj.clientName && jsonObj.phone) {
               this.setData({
@@ -1038,7 +1054,7 @@
               // 濡傛灉userData涓病鏈夌敤鎴蜂俊鎭紝璋冪敤鎺ュ彛鑾峰彇
               this.getUserDataBySession();
             }
-            
+
             console.log("userData宸插姞杞�:", userData);
           } catch (e) {
             console.error('userData瑙f瀽澶辫触:', e);
@@ -1056,14 +1072,14 @@
           app.globalData.isLoggedIn = true;
           this.getUserDataBySession();
         }
-        
+
         // 鏃犺濡備綍閮藉皾璇曡幏鍙栧紑闃�鍒楄〃
         this.getOpenList();
       }).catch(err => {
         console.error('鎭㈠鐧诲綍鐘舵�佸け璐�:', err);
         this.getOpenList();
       });
-      
+
       return;
     }
 
@@ -1526,7 +1542,7 @@
           // 姝ゅ涓嶅仛璺宠浆锛屾敞閲婃帀鍘熸湁浠g爜
           // const projectInfo = PROJECT_CONFIG[currentProject];
           // const loginType = projectInfo?.loginType || 'code'; // 榛樿浣跨敤楠岃瘉鐮佺櫥褰�
-          
+
           // if (loginType === 'account') {
           //   // 璐﹀彿瀵嗙爜鐧诲綍
           //   wx.navigateTo({
@@ -1568,7 +1584,7 @@
         // 姝ゅ涓嶅仛璺宠浆锛屾敞閲婃帀鍘熸湁浠g爜
         // const projectInfo = PROJECT_CONFIG[currentProject];
         // const loginType = projectInfo?.loginType || 'code'; // 榛樿浣跨敤楠岃瘉鐮佺櫥褰�
-        
+
         // if (loginType === 'account') {
         //   // 璐﹀彿瀵嗙爜鐧诲綍
         //   wx.navigateTo({
@@ -1660,7 +1676,7 @@
     const currentProject = getApp().globalData.selectedProject;
     if (currentProject && PROJECT_CONFIG[currentProject]) {
       const projectConfig = PROJECT_CONFIG[currentProject];
-      
+
       if (!projectConfig.needLogin) {
         console.log('wxLogin: 褰撳墠椤圭洰涓嶉渶瑕佺櫥褰�:', currentProject);
         // 涓嶉渶瑕佺櫥褰曠殑椤圭洰锛屾樉绀洪」鐩悕绉�
@@ -1693,7 +1709,7 @@
                   // 鏈粦瀹氳处鍙凤紝鏍规嵁椤圭洰閰嶇疆鐨刲oginType璺宠浆鍒扮浉搴旂殑鐧诲綍椤甸潰
                   const projectInfo = PROJECT_CONFIG[this.data.selectedProject];
                   const loginType = projectInfo?.loginType || 'code'; // 榛樿浣跨敤楠岃瘉鐮佺櫥褰�
-                  
+
                   if (loginType === 'account') {
                     // 璐﹀彿瀵嗙爜鐧诲綍
                     wx.navigateTo({
@@ -1753,7 +1769,7 @@
                 // 鏈粦瀹氳处鍙凤紝鏍规嵁椤圭洰閰嶇疆鐨刲oginType璺宠浆鍒扮浉搴旂殑鐧诲綍椤甸潰
                 const projectInfo = PROJECT_CONFIG[this.data.selectedProject];
                 const loginType = projectInfo?.loginType || 'code'; // 榛樿浣跨敤楠岃瘉鐮佺櫥褰�
-                
+
                 if (loginType === 'account') {
                   // 璐﹀彿瀵嗙爜鐧诲綍
                   wx.navigateTo({
@@ -1775,11 +1791,11 @@
             }).catch(error => {
               wx.hideLoading();
               console.error('鐧诲綍璇锋眰澶辫触:', error);
-              if(error.code==="1003"){
+              if (error.code === "1003") {
                 // 鏈粦瀹氳处鍙凤紝鏍规嵁椤圭洰閰嶇疆鐨刲oginType璺宠浆鍒扮浉搴旂殑鐧诲綍椤甸潰
                 const projectInfo = PROJECT_CONFIG[this.data.selectedProject];
                 const loginType = projectInfo?.loginType || 'code'; // 榛樿浣跨敤楠岃瘉鐮佺櫥褰�
-                
+
                 if (loginType === 'account') {
                   // 璐﹀彿瀵嗙爜鐧诲綍
                   wx.navigateTo({
@@ -1791,7 +1807,7 @@
                     url: `/pages/login/login?project=${this.data.selectedProject}&projectName=${projectInfo.displayName}`
                   });
                 }
-              }else{
+              } else {
                 wx.showToast({
                   title: '鐧诲綍澶辫触锛岃閲嶈瘯',
                   icon: 'none'
@@ -2063,7 +2079,7 @@
     const currentProject = app.globalData.selectedProject;
     if (currentProject && PROJECT_CONFIG[currentProject]) {
       const projectConfig = PROJECT_CONFIG[currentProject];
-      
+
       if (!projectConfig.needLogin) {
         console.log('handleUserTap: 褰撳墠椤圭洰涓嶉渶瑕佺櫥褰�:', currentProject);
         // 涓嶉渶瑕佺櫥褰曠殑椤圭洰锛屾樉绀洪」鐩悕绉�
@@ -2072,10 +2088,10 @@
         });
         return;
       }
-      
+
       // 鏍规嵁椤圭洰閰嶇疆鐨刲oginType鍐冲畾璺宠浆鍒板摢涓櫥褰曢〉闈�
       const loginType = projectConfig.loginType || 'code'; // 榛樿浣跨敤楠岃瘉鐮佺櫥褰�
-      
+
       if (loginType === 'account') {
         // 璐﹀彿瀵嗙爜鐧诲綍
         wx.navigateTo({
diff --git a/pages/stationMonitor/stationMonitor.js b/pages/stationMonitor/stationMonitor.js
index 73b4fef..1e45df5 100644
--- a/pages/stationMonitor/stationMonitor.js
+++ b/pages/stationMonitor/stationMonitor.js
@@ -1,5 +1,7 @@
 // pages/stationMonitor/stationMonitor.js
-const { get } = require('../../api/request.js');
+const {
+  get
+} = require('../../api/request.js');
 
 Page({
 
@@ -9,15 +11,120 @@
   data: {
     activeTab: 'weather', // 榛樿閫変腑姘旇薄绔�
     cameraList: [],
-    isLoading: false
+    isLoading: false,
+    // 姘旇薄绔欑浉鍏虫暟鎹�
+    weatherStationList: [],
+    selectedWeatherStationIndex: 0,
+    currentWeatherStation: null,
+    // 姘磋偉鏈虹浉鍏虫暟鎹�
+    fertilizerStationList: [],
+    selectedFertilizerStationIndex: 0,
+    currentFertilizerStation: null,
+    // 鍦熷¥澧掓儏绔欑浉鍏虫暟鎹�
+    soilStationList: [],
+    selectedSoilStationIndex: 0,
+    currentSoilStation: null,
+    //鎽勫儚澶寸浉鍏�
+    accessToken: 'at.4l27eilo2x0euquw4yrhjxnz9kvr294l-2dp10mcwig-1nnzr8p-7wp71d2bk',
+    hslUrl: '',
+    // 璁惧淇℃伅
+    deviceInfo: null,
+    isRealDevice: false,
+    deviceSpecificConfig: {
+      videoHeight: 400,
+      buttonHeight: 72,
+      fontSize: 26
+    }
   },
 
   /**
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
    */
   onLoad(options) {
+    // 妫�娴嬭澶囩被鍨嬪拰灞忓箷淇℃伅
+    this.detectDeviceInfo();
+    
     // 椤甸潰鍔犺浇鏃惰幏鍙栨憚鍍忓ご淇℃伅
     this.getCameraList();
+    // 鑾峰彇鎵�鏈夎澶囦俊鎭紙姘旇薄绔欍�佸湡澹ゅ鎯呯珯銆佹按鑲ユ満锛�
+    this.getAllDeviceInfo();
+  },
+
+  /**
+   * 妫�娴嬭澶囦俊鎭�
+   */
+  detectDeviceInfo() {
+    try {
+      const systemInfo = wx.getSystemInfoSync();
+      console.log('璁惧淇℃伅:', systemInfo);
+      
+      // 妫�娴嬫槸鍚︿负鐪熸満
+      const isRealDevice = systemInfo.platform === 'android' || systemInfo.platform === 'ios';
+      
+      // 妫�娴嬪睆骞曞昂瀵�
+      const screenWidth = systemInfo.screenWidth;
+      const screenHeight = systemInfo.screenHeight;
+      const pixelRatio = systemInfo.pixelRatio;
+      
+      // 妫�娴嬪井淇$増鏈�
+      const version = systemInfo.version;
+      
+      this.setData({
+        deviceInfo: {
+          platform: systemInfo.platform,
+          isRealDevice: isRealDevice,
+          screenWidth: screenWidth,
+          screenHeight: screenHeight,
+          pixelRatio: pixelRatio,
+          version: version,
+          model: systemInfo.model,
+          system: systemInfo.system
+        }
+      });
+      
+      console.log('璁惧妫�娴嬬粨鏋�:', {
+        isRealDevice,
+        screenWidth,
+        screenHeight,
+        pixelRatio,
+        version
+      });
+      
+      // 鏍规嵁璁惧淇℃伅璋冩暣甯冨眬
+      this.adjustLayoutForDevice();
+      
+    } catch (error) {
+      console.error('鑾峰彇璁惧淇℃伅澶辫触:', error);
+    }
+  },
+
+  /**
+   * 鏍规嵁璁惧淇℃伅璋冩暣甯冨眬
+   */
+  adjustLayoutForDevice() {
+    const { deviceInfo } = this.data;
+    if (!deviceInfo) return;
+    
+    // 鐪熸満鐗规畩澶勭悊
+    if (deviceInfo.isRealDevice) {
+      console.log('妫�娴嬪埌鐪熸満锛屽簲鐢ㄧ壒娈婁紭鍖�');
+      
+      // 鐪熸満涓婂彲鑳介渶瑕佽皟鏁翠竴浜涘弬鏁�
+      this.setData({
+        isRealDevice: true,
+        // 鍙互鏍规嵁璁惧淇℃伅璋冩暣鍏朵粬鍙傛暟
+        deviceSpecificConfig: {
+          videoHeight: deviceInfo.screenHeight < 700 ? 320 : 400,
+          buttonHeight: deviceInfo.screenHeight < 700 ? 64 : 72,
+          fontSize: deviceInfo.pixelRatio > 2 ? 24 : 26
+        }
+      });
+    } else {
+      console.log('妫�娴嬪埌妯℃嫙鍣�');
+      this.setData({
+        isRealDevice: false
+      });
+    }
   },
 
   /**
@@ -31,7 +138,28 @@
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
    */
   onShow() {
-
+    console.log('=== 椤甸潰鏄剧ず ===');
+    console.log('褰撳墠椤甸潰鏁版嵁:', {
+      activeTab: this.data.activeTab,
+      cameraList: this.data.cameraList,
+      deviceInfo: this.data.deviceInfo,
+      deviceSpecificConfig: this.data.deviceSpecificConfig
+    });
+    
+    // 妫�鏌zplayer缁勪欢鐨勭姸鎬�
+    if (this.data.activeTab === 'camera') {
+      console.log('鎽勫儚澶撮〉闈㈡縺娲伙紝妫�鏌ョ粍浠剁姸鎬�');
+      this.data.cameraList.forEach(camera => {
+        console.log(`鎽勫儚澶� ${camera.name} 鐘舵��:`, {
+          id: camera.id,
+          online: camera.online,
+          hslUrl: camera.hslUrl,
+          isLoadingUrl: camera.isLoadingUrl,
+          urlError: camera.urlError,
+          isPlaying: camera.isPlaying
+        });
+      });
+    }
   },
 
   /**
@@ -52,9 +180,11 @@
    * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
    */
   onPullDownRefresh() {
-    // 涓嬫媺鍒锋柊鏃堕噸鏂拌幏鍙栨憚鍍忓ご鍒楄〃
+    // 涓嬫媺鍒锋柊鏃堕噸鏂拌幏鍙栨暟鎹�
     if (this.data.activeTab === 'camera') {
       this.getCameraList();
+    } else if (this.data.activeTab === 'weather' || this.data.activeTab === 'soil' || this.data.activeTab === 'fertilizer') {
+      this.getAllDeviceInfo();
     }
     wx.stopPullDownRefresh();
   },
@@ -82,11 +212,134 @@
     this.setData({
       activeTab: tab
     });
-    
+
     // 濡傛灉鍒囨崲鍒版憚鍍忓ご閫夐」鍗★紝纭繚鏈夋暟鎹�
     if (tab === 'camera' && this.data.cameraList.length === 0) {
       this.getCameraList();
     }
+
+    // 濡傛灉鍒囨崲鍒版皵璞$珯閫夐」鍗★紝纭繚鏈夋暟鎹�
+    if (tab === 'weather' && this.data.weatherStationList.length === 0) {
+      this.getAllDeviceInfo();
+    }
+
+    // 濡傛灉鍒囨崲鍒板湡澹ゅ鎯呯珯閫夐」鍗★紝纭繚鏈夋暟鎹�
+    if (tab === 'soil' && this.data.soilStationList.length === 0) {
+      this.getAllDeviceInfo();
+    }
+
+    // 濡傛灉鍒囨崲鍒版按鑲ユ満閫夐」鍗★紝纭繚鏈夋暟鎹�
+    if (tab === 'fertilizer' && this.data.fertilizerStationList.length === 0) {
+      this.getAllDeviceInfo();
+    }
+  },
+
+  /**
+   * 鑾峰彇鎵�鏈夎澶囦俊鎭紙姘旇薄绔欍�佸湡澹ゅ鎯呯珯銆佹按鑲ユ満锛�
+   */
+  getAllDeviceInfo() {
+    const app = getApp();
+
+    // 妫�鏌ョ櫥褰曠姸鎬�
+    if (!app.globalData.isLoggedIn) {
+      wx.showToast({
+        title: '璇峰厛鐧诲綍',
+        icon: 'error'
+      });
+      return;
+    }
+
+    console.log('寮�濮嬭皟鐢� /wx/mqtt/allSimple 鎺ュ彛鑾峰彇璁惧淇℃伅');
+    
+    get({url: '/wx/mqtt/allSimple'})
+      .then(response => {
+        console.log('璁惧淇℃伅鎺ュ彛杩斿洖鏁版嵁:', response);
+        
+        if (response.success && response.code === '0001') {
+          const content = response.content;
+          
+          // 澶勭悊姘旇薄绔欐暟鎹�
+          if (content.weathers && content.weathers.length > 0) {
+            const weatherStations = content.weathers.map(item => ({
+              id: item.id,
+              name: item.name,
+              no: item.no,
+              online: true, // 榛樿鍦ㄧ嚎
+              location: '鐢樿們鐪佹皯鍕ゅ幙', // 榛樿浣嶇疆
+              lastUpdate: new Date().toLocaleString()
+            }));
+            
+            this.setData({
+              weatherStationList: weatherStations
+            });
+            
+            // 榛樿閫夋嫨绗竴涓皵璞$珯
+            if (weatherStations.length > 0) {
+              this.selectWeatherStation(0);
+            }
+          }
+          
+          // 澶勭悊鍦熷¥澧掓儏绔欐暟鎹�
+          if (content.soils && content.soils.length > 0) {
+            const soilStations = content.soils.map(item => ({
+              id: item.id,
+              name: item.name,
+              no: item.no,
+              online: true, // 榛樿鍦ㄧ嚎
+              location: '鐢樿們鐪佹皯鍕ゅ幙', // 榛樿浣嶇疆
+              lastUpdate: new Date().toLocaleString()
+            }));
+            
+            this.setData({
+              soilStationList: soilStations
+            });
+            
+            // 榛樿閫夋嫨绗竴涓湡澹ゅ鎯呯珯
+            if (soilStations.length > 0) {
+              this.selectSoilStation(0);
+            }
+          }
+          
+          // 澶勭悊姘磋偉鏈烘暟鎹�
+          if (content.manures && content.manures.length > 0) {
+            const fertilizerStations = content.manures.map(item => ({
+              id: item.id,
+              name: item.name,
+              no: item.no,
+              online: true // 榛樿鍦ㄧ嚎
+            }));
+            
+            this.setData({
+              fertilizerStationList: fertilizerStations
+            });
+            
+            // 榛樿閫夋嫨绗竴涓按鑲ユ満
+            if (fertilizerStations.length > 0) {
+              this.selectFertilizerStation(0);
+            }
+          }
+          
+          console.log('璁惧淇℃伅澶勭悊瀹屾垚:', {
+            weatherStations: this.data.weatherStationList,
+            soilStations: this.data.soilStationList,
+            fertilizerStations: this.data.fertilizerStationList
+          });
+          
+        } else {
+          console.error('鑾峰彇璁惧淇℃伅澶辫触:', response.msg);
+          wx.showToast({
+            title: response.msg || '鑾峰彇璁惧淇℃伅澶辫触',
+            icon: 'none'
+          });
+        }
+      })
+      .catch(error => {
+        console.error('璋冪敤璁惧淇℃伅鎺ュ彛澶辫触:', error);
+        wx.showToast({
+          title: '鑾峰彇璁惧淇℃伅澶辫触',
+          icon: 'error'
+        });
+      });
   },
 
   /**
@@ -94,7 +347,7 @@
    */
   getCameraList() {
     const app = getApp();
-    
+
     // 妫�鏌ョ櫥褰曠姸鎬�
     if (!app.globalData.isLoggedIn) {
       wx.showToast({
@@ -108,115 +361,95 @@
       isLoading: true
     });
 
-    // 妯℃嫙鎺ュ彛杩斿洖鏁版嵁
-    setTimeout(() => {
-      const mockResponse = {
-        "code": "0001",
-        "content": {
-          "itemTotal": 4,
-          "obj": [
-            {
-              "id": "2025070715040300007",
-              "name": "姘戝嫟01",
-              "videoUrl4PcLive": "https://open.ys7.com/console/jssdk/pc.html?url=ezopen://open.ys7.com/FX6737162/1.live&accessToken=at.2o04glgs0q36cjugbvddqujz7tqrghx1-1ovr6lmf3k-03pij3c-304ziif7e&themeId=pcLive&env=&date=",
-              "videoUrl4Security": "https://open.ys7.com/console/jssdk/pc.html?accessToken=at.87a8u4z04s3gom0o6i0cpgz35kuhu8xh-67xrfkiy90-0nnbl6z-r0v9mckp3&url=ezopen://open.ys7.com/FY4056878/1.live&themeId=security&date=",
-              "videoUrl4Simple": "https://open.ys7.com/console/jssdk/pc.html?accessToken=at.87a8u4z04s3gom0o6i0cpgz35kuhu8xh-67xrfkiy90-0nnbl6z-r0v9mckp3&url=ezopen://open.ys7.com/FY4056878/1.live&themeId=simple&date=",
-              "videoUrl4Standard": "https://open.ys7.com/console/jssdk/pc.html?accessToken=at.87a8u4z04s3gom0o6i0cpgz35kuhu8xh-67xrfkiy90-0nnbl6z-r0v9mckp3&url=ezopen://open.ys7.com/FY4056878/1.live&themeId=standard&date="
-            },
-            {
-              "id": "2025070715040300008",
-              "name": "姘戝嫟02",
-              "videoUrl4PcLive": "https://open.ys7.com/console/jssdk/pc.html?url=ezopen://open.ys7.com/FY4056879/1.live&accessToken=at.87a8u4z04s3gom0o6i0cpgz35kuhu8xh-67xrfkiy90-0nnbl6z-r0v9mckp3&themeId=pcLive&env=&date=",
-              "videoUrl4Security": "https://open.ys7.com/console/jssdk/pc.html?accessToken=at.87a8u4z04s3gom0o6i0cpgz35kuhu8xh-67xrfkiy90-0nnbl6z-r0v9mckp3&url=ezopen://open.ys7.com/FY4056879/1.live&themeId=security&date=",
-              "videoUrl4Simple": "https://open.ys7.com/console/jssdk/pc.html?accessToken=at.87a8u4z04s3gom0o6i0cpgz35kuhu8xh-67xrfkiy90-0nnbl6z-r0v9mckp3&url=ezopen://open.ys7.com/FY4056879/1.live&themeId=simple&date=",
-              "videoUrl4Standard": "https://open.ys7.com/console/jssdk/pc.html?accessToken=at.87a8u4z04s3gom0o6i0cpgz35kuhu8xh-67xrfkiy90-0nnbl6z-r0v9mckp3&url=ezopen://open.ys7.com/FY4056879/1.live&themeId=standard&date="
-            },
-            {
-              "id": "2025070715040300009",
-              "name": "姘戝嫟03",
-              "videoUrl4PcLive": "https://open.ys7.com/console/jssdk/pc.html?url=ezopen://open.ys7.com/FY4056880/1.live&accessToken=at.87a8u4z04s3gom0o6i0cpgz35kuhu8xh-67xrfkiy90-0nnbl6z-r0v9mckp3&themeId=pcLive&env=&date=",
-              "videoUrl4Security": "https://open.ys7.com/console/jssdk/pc.html?accessToken=at.87a8u4z04s3gom0o6i0cpgz35kuhu8xh-67xrfkiy90-0nnbl6z-r0v9mckp3&url=ezopen://open.ys7.com/FY4056880/1.live&themeId=security&date=",
-              "videoUrl4Simple": "https://open.ys7.com/console/jssdk/pc.html?accessToken=at.87a8u4z04s3gom0o6i0cpgz35kuhu8xh-67xrfkiy90-0nnbl6z-r0v9mckp3&url=ezopen://open.ys7.com/FY4056880/1.live&themeId=simple&date=",
-              "videoUrl4Standard": "https://open.ys7.com/console/jssdk/pc.html?accessToken=at.87a8u4z04s3gom0o6i0cpgz35kuhu8xh-67xrfkiy90-0nnbl6z-r0v9mckp3&url=ezopen://open.ys7.com/FY4056880/1.live&themeId=standard&date="
-            },
-            {
-              "id": "2025070715040300010",
-              "name": "姘戝嫟04",
-              "videoUrl4PcLive": "https://open.ys7.com/console/jssdk/pc.html?url=ezopen://open.ys7.com/FY4056881/1.live&accessToken=at.87a8u4z04s3gom0o6i0cpgz35kuhu8xh-67xrfkiy90-0nnbl6z-r0v9mckp3&themeId=pcLive&env=&date=",
-              "videoUrl4Security": "https://open.ys7.com/console/jssdk/pc.html?accessToken=at.87a8u4z04s3gom0o6i0cpgz35kuhu8xh-67xrfkiy90-0nnbl6z-r0v9mckp3&url=ezopen://open.ys7.com/FY4056881/1.live&themeId=security&date=",
-              "videoUrl4Simple": "https://open.ys7.com/console/jssdk/pc.html?accessToken=at.87a8u4z04s3gom0o6i0cpgz35kuhu8xh-67xrfkiy90-0nnbl6z-r0v9mckp3&url=ezopen://open.ys7.com/FY4056881/1.live&themeId=simple&date=",
-              "videoUrl4Standard": "https://open.ys7.com/console/jssdk/pc.html?accessToken=at.87a8u4z04s3gom0o6i0cpgz35kuhu8xh-67xrfkiy90-0nnbl6z-r0v9mckp3&url=ezopen://open.ys7.com/FY4056881/1.live&themeId=standard&date="
-            }
-          ],
-          "pageCurr": 1,
-          "pageSize": 4,
-          "pageTotal": 1
-        },
-        "msg": "璇锋眰鎴愬姛",
-        "success": true
-      };
+    // 璋冪敤鐪熷疄鎺ュ彛鑾峰彇鎽勫儚澶村垪琛�
+    this.getVideoListFromApi();
+  },
 
-      console.log('妯℃嫙鎺ュ彛杩斿洖鏁版嵁:', mockResponse);
-      
-      if (mockResponse.success && mockResponse.code === '0001') {
-        // 澶勭悊杩斿洖鐨勬憚鍍忓ご鏁版嵁
-        const cameraList = mockResponse.content.obj.map(item => {
-          // 浠庤悿鐭充簯URL涓彁鍙栬澶囦俊鎭苟鐢熸垚RTMP鍦板潃
-          let rtmpUrl = '';
-          
-          if (item.videoUrl4PcLive) {
-            // 鎻愬彇璁惧搴忓垪鍙峰拰閫氶亾鍙�
-            const ezopenMatch = item.videoUrl4PcLive.match(/ezopen:\/\/open\.ys7\.com\/([^\/]+)\/(\d+)\.live/);
-            const tokenMatch = item.videoUrl4PcLive.match(/accessToken=([^&]+)/);
+  /**
+   * 浠庢帴鍙h幏鍙栬棰戝垪琛�
+   */
+  getVideoListFromApi() {
+    console.log('寮�濮嬭皟鐢� /wx/video/all 鎺ュ彛鑾峰彇瑙嗛鍒楄〃');
+   
+    get({url:'/wx/video/all'} )
+      .then(response => {
+        console.log('鎺ュ彛杩斿洖鏁版嵁:', response);
+        
+        if (response.success && response.code === '0001') {
+          // 澶勭悊杩斿洖鐨勬憚鍍忓ご鏁版嵁
+          const cameraList = response.content.map(item => {
+            // 鏍规嵁devNo鐢熸垚RTMP URL
+            const channelNo = 1; // 榛樿閫氶亾鍙�
+            const rtmpUrl = `rtmp://open.ys7.com/${item.devNo}/${channelNo}/live`;
             
-            if (ezopenMatch && tokenMatch) {
-              const deviceSerial = ezopenMatch[1]; // 璁惧搴忓垪鍙�
-              const channelNo = ezopenMatch[2];    // 閫氶亾鍙�
-              const accessToken = tokenMatch[1];   // 璁块棶浠ょ墝
-              
-              // 鐢熸垚RTMP鍦板潃
-              rtmpUrl = `rtmp://open.ys7.com:1935/live/${deviceSerial}/${channelNo}?accessToken=${accessToken}`;
-              
-              // 澶囩敤HLS鍦板潃
-              const hlsUrl = `https://open.ys7.com:443/live/${deviceSerial}/${channelNo}.m3u8?accessToken=${accessToken}`;
-              
-              console.log('鐢熸垚鐨凴TMP鍦板潃:', rtmpUrl);
-              console.log('鐢熸垚鐨凥LS鍦板潃:', hlsUrl);
-            }
-          }
+            console.log(`鎽勫儚澶� ${item.name} 鐢熸垚RTMP URL:`, rtmpUrl);
+
+            return {
+              id: item.id,
+              name: item.name,
+              online: true, // 榛樿鍦ㄧ嚎锛屽疄闄呴」鐩腑鍙兘闇�瑕侀澶栫殑鐘舵�佹鏌�
+              lastUpdate: new Date().toLocaleString(), // 褰撳墠鏃堕棿浣滀负鏈�鍚庢洿鏂版椂闂�
+              isPlaying: false, // 瑙嗛鎾斁鐘舵��
+              hslUrl: rtmpUrl, // 浣跨敤鐢熸垚鐨凴TMP URL
+              deviceSerial: item.devNo, // 浣跨敤鎺ュ彛杩斿洖鐨刣evNo
+              isLoadingUrl: false, // URL鍔犺浇鐘舵��
+              urlError: false, // URL鑾峰彇閿欒鐘舵��
+              autoPlay: false, // 鑷姩鎾斁鎺у埗
+              // 鏂板瀛楁
+              lng: item.lng, // 缁忓害
+              lat: item.lat, // 绾害
+              accessToken: item.accessToken // 璁惧涓撶敤accessToken
+            };
+          });
+
+          this.setData({
+            cameraList: cameraList,
+            isLoading: false
+          });
+
+          console.log('澶勭悊鍚庣殑鎽勫儚澶村垪琛�:', cameraList);
           
-          return {
-            id: item.id,
-            name: item.name,
-            online: true, // 榛樿鍦ㄧ嚎锛屽疄闄呴」鐩腑鍙兘闇�瑕侀澶栫殑鐘舵�佹鏌�
-            thumbnail: '/images/camera-thumb1.jpg', // 榛樿缂╃暐鍥�
-            lastUpdate: new Date().toLocaleString(), // 褰撳墠鏃堕棿浣滀负鏈�鍚庢洿鏂版椂闂�
-            isPlaying: false, // 瑙嗛鎾斁鐘舵��
-            rtmpUrl: rtmpUrl, // RTMP娴佸湴鍧�
-            videoUrl4PcLive: item.videoUrl4PcLive, // 鍘熷PC鎾斁鍦板潃
-            videoUrl4Security: item.videoUrl4Security,
-            videoUrl4Simple: item.videoUrl4Simple,
-            videoUrl4Standard: item.videoUrl4Standard
-          };
-        });
-
-        this.setData({
-          cameraList: cameraList,
-          isLoading: false
-        });
-
-        console.log('澶勭悊鍚庣殑鎽勫儚澶村垪琛�:', cameraList);
-      } else {
-        console.error('鑾峰彇鎽勫儚澶村垪琛ㄥけ璐�:', mockResponse.msg);
+          // 鐢变簬鐜板湪鐩存帴浣跨敤RTMP URL锛屼笉闇�瑕佸啀璋冪敤钀ょ煶浜慉PI鑾峰彇鎾斁鍦板潃
+          // this.batchGetHlsUrls(cameraList);
+        } else {
+          console.error('鑾峰彇鎽勫儚澶村垪琛ㄥけ璐�:', response.msg);
+          this.setData({
+            isLoading: false
+          });
+          wx.showToast({
+            title: response.msg || '鑾峰彇鎽勫儚澶村垪琛ㄥけ璐�',
+            icon: 'none'
+          });
+        }
+      })
+      .catch(error => {
+        console.error('璋冪敤鎺ュ彛澶辫触:', error);
         this.setData({
           isLoading: false
         });
-        wx.showToast({
-          title: mockResponse.msg || '鑾峰彇鎽勫儚澶村垪琛ㄥけ璐�',
-          icon: 'none'
-        });
-      }
-    }, 1000); // 妯℃嫙缃戠粶寤惰繜1绉�
+      });
+  },
+
+ 
+
+  /**
+   * 鎵归噺鑾峰彇鎵�鏈夋憚鍍忓ご鐨凥LS鎾斁鍦板潃
+   */
+  batchGetHlsUrls(cameraList) {
+    if (!cameraList || cameraList.length === 0) {
+      console.log('鎽勫儚澶村垪琛ㄤ负绌猴紝鏃犻渶鑾峰彇鎾斁鍦板潃');
+      return;
+    }
+
+    console.log('寮�濮嬫壒閲忚幏鍙栨挱鏀惧湴鍧�锛屾憚鍍忓ご鏁伴噺:', cameraList.length);
+
+    // 涓烘瘡涓憚鍍忓ご鑾峰彇鎾斁鍦板潃
+    cameraList.forEach((camera, index) => {
+      // 寤惰繜鑾峰彇锛岄伩鍏嶅悓鏃跺彂璧峰お澶氳姹�
+      setTimeout(() => {
+        this.getHlsUrlForCamera(camera);
+      }, index * 500); // 姣忎釜璇锋眰闂撮殧500ms
+    });
   },
 
   /**
@@ -224,31 +457,56 @@
    */
   playVideo(e) {
     const camera = e.currentTarget.dataset.camera;
-    console.log('鎾斁鎽勫儚澶�:', camera.name);
-    
+    console.log('=== 鎾斁瑙嗛寮�濮� ===');
+    console.log('鎽勫儚澶翠俊鎭�:', camera);
+    console.log('璁惧淇℃伅:', this.data.deviceInfo);
+    console.log('璁惧鐗瑰畾閰嶇疆:', this.data.deviceSpecificConfig);
+
     if (!camera.online) {
+      console.log('鎽勫儚澶寸绾匡紝鏃犳硶鎾斁');
       wx.showToast({
-        title: '鎽勫儚澶寸绾�',
+        title: '璁惧绂荤嚎锛屾棤娉曟挱鏀�',
         icon: 'error'
       });
       return;
     }
 
-    // 妫�鏌ヨ棰慤RL鏄惁鏈夋晥
-    if (!camera.videoUrl4PcLive) {
+    if (!camera.hslUrl) {
+      console.log('鏃犳挱鏀惧湴鍧�锛屾棤娉曟挱鏀�');
       wx.showToast({
-        title: '瑙嗛鍦板潃鏃犳晥',
+        title: '鏆傛棤鎾斁鍦板潃锛岃绋嶅悗閲嶈瘯',
         icon: 'error'
       });
       return;
     }
 
-    console.log('瑙嗛URL:', camera.videoUrl4PcLive);
+    if (camera.isLoadingUrl) {
+      console.log('姝e湪鍔犺浇URL锛屾棤娉曟挱鏀�');
+      wx.showToast({
+        title: '姝e湪鑾峰彇鎾斁鍦板潃锛岃绋嶅��',
+        icon: 'none'
+      });
+      return;
+    }
 
-    // 鏇存柊瑙嗛鎾斁鐘舵��
+    console.log('寮�濮嬫挱鏀捐棰戯紝鎾斁鍦板潃:', camera.hslUrl);
+    console.log('褰撳墠椤甸潰鏁版嵁鐘舵��:', {
+      cameraList: this.data.cameraList,
+      activeTab: this.data.activeTab,
+      isLoading: this.data.isLoading
+    });
+
+    // 妫�鏌RL鏍煎紡
+    if (camera.hslUrl.startsWith('rtmp://')) {
+      console.log('妫�娴嬪埌RTMP URL鏍煎紡锛屽紑濮嬫挱鏀�');
+      
+      // 鏇存柊鎾斁鐘舵��
     const cameraList = this.data.cameraList.map(item => {
       if (item.id === camera.id) {
-        return { ...item, isPlaying: true };
+        return {
+          ...item,
+          isPlaying: true
+        };
       }
       return item;
     });
@@ -257,10 +515,22 @@
       cameraList: cameraList
     });
 
-    // 寤惰繜涓�涓嬭live-player缁勪欢鏇存柊
-    setTimeout(() => {
-      console.log('寮�濮嬫挱鏀剧洿鎾�:', camera.videoUrl4PcLive);
-    }, 100);
+      // 鏄剧ず鎾斁鎴愬姛鎻愮ず
+      wx.showToast({
+        title: `寮�濮嬫挱鏀� ${camera.name}`,
+        icon: 'success'
+      });
+
+      console.log(`鎾斁鐘舵�佸凡鏇存柊锛屾憚鍍忓ご ${camera.name} 寮�濮嬫挱鏀綬TMP娴乣);
+    } else {
+      console.log('URL鏍煎紡涓嶆槸RTMP锛屾棤娉曟挱鏀�');
+      wx.showToast({
+        title: '鎾斁鍦板潃鏍煎紡涓嶆纭�',
+        icon: 'error'
+      });
+    }
+
+    console.log('=== 鎾斁瑙嗛缁撴潫 ===');
   },
 
   /**
@@ -269,11 +539,14 @@
   pauseVideo(e) {
     const camera = e.currentTarget.dataset.camera;
     console.log('鏆傚仠鎽勫儚澶�:', camera.name);
-    
+
     // 鏇存柊瑙嗛鎾斁鐘舵��
     const cameraList = this.data.cameraList.map(item => {
       if (item.id === camera.id) {
-        return { ...item, isPlaying: false };
+        return {
+          ...item,
+          isPlaying: false
+        };
       }
       return item;
     });
@@ -289,11 +562,14 @@
   stopVideo(e) {
     const camera = e.currentTarget.dataset.camera;
     console.log('鍋滄鎽勫儚澶�:', camera.name);
-    
+
     // 鏇存柊瑙嗛鎾斁鐘舵��
     const cameraList = this.data.cameraList.map(item => {
       if (item.id === camera.id) {
-        return { ...item, isPlaying: false };
+        return {
+          ...item,
+          isPlaying: false
+        };
       }
       return item;
     });
@@ -303,23 +579,7 @@
     });
   },
 
-  /**
-   * 娴嬭瘯瑙嗛URL
-   */
-  testVideoUrl(e) {
-    const camera = e.currentTarget.dataset.camera;
-    console.log('娴嬭瘯瑙嗛URL:', camera.name);
-    console.log('鍘熷URL:', camera.videoUrl4PcLive);
-    console.log('RTMP URL:', camera.rtmpUrl);
-    
-    // 鏄剧ずURL淇℃伅
-    wx.showModal({
-      title: '瑙嗛URL淇℃伅',
-      content: `鎽勫儚澶�: ${camera.name}\n鍘熷URL: ${camera.videoUrl4PcLive}\nRTMP URL: ${camera.rtmpUrl}`,
-      showCancel: false,
-      confirmText: '纭畾'
-    });
-  },
+
 
   /**
    * 鐩存挱鎾斁鍣ㄧ姸鎬佸彉鍖�
@@ -327,13 +587,15 @@
   onLivePlayerStateChange(e) {
     const camera = e.currentTarget.dataset.camera;
     console.log('鐩存挱鎾斁鍣ㄧ姸鎬佸彉鍖�:', camera.name, e.detail);
-    
-    const { code } = e.detail;
-    
+
+    const {
+      code
+    } = e.detail;
+
     // 鏄剧ず鐘舵�佷俊鎭粰鐢ㄦ埛
     let statusText = '';
     let isPlaying = false;
-    
+
     switch (code) {
       case 2001:
         statusText = '宸茬粡杩炴帴鏈嶅姟鍣�';
@@ -398,13 +660,16 @@
         statusText = `鏈煡鐘舵�佺爜: ${code}`;
         break;
     }
-    
+
     console.log(`鎽勫儚澶� ${camera.name} 鐘舵��: ${statusText}`);
-    
+
     // 鏇存柊鎾斁鐘舵��
     const cameraList = this.data.cameraList.map(item => {
       if (item.id === camera.id) {
-        return { ...item, isPlaying: isPlaying };
+        return {
+          ...item,
+          isPlaying: isPlaying
+        };
       }
       return item;
     });
@@ -428,16 +693,19 @@
   onLivePlayerError(e) {
     const camera = e.currentTarget.dataset.camera;
     console.error('鐩存挱鎾斁鍣ㄩ敊璇�:', camera.name, e.detail);
-    
+
     wx.showToast({
       title: '鐩存挱鎾斁澶辫触',
       icon: 'error'
     });
-    
+
     // 鏇存柊鎾斁鐘舵��
     const cameraList = this.data.cameraList.map(item => {
       if (item.id === camera.id) {
-        return { ...item, isPlaying: false };
+        return {
+          ...item,
+          isPlaying: false
+        };
       }
       return item;
     });
@@ -453,7 +721,7 @@
   fullscreenVideo(e) {
     const camera = e.currentTarget.dataset.camera;
     console.log('鍏ㄥ睆鎾斁:', camera.name);
-    
+
     if (!camera.online) {
       wx.showToast({
         title: '鎽勫儚澶寸绾�',
@@ -462,10 +730,10 @@
       return;
     }
 
-    // 浣跨敤PC鐩存挱URL杩涜鍏ㄥ睆鎾斁
-    if (camera.videoUrl4PcLive) {
-      console.log('鍏ㄥ睆瑙嗛URL:', camera.videoUrl4PcLive);
-      
+    // 浣跨敤RTMP URL杩涜鍏ㄥ睆鎾斁
+    if (camera.hslUrl) {
+      console.log('鍏ㄥ睆瑙嗛URL:', camera.hslUrl);
+
       wx.showModal({
         title: '鍏ㄥ睆鎾斁',
         content: `鍗冲皢鍏ㄥ睆鎾斁 ${camera.name} 鐨勮棰戞祦`,
@@ -477,7 +745,7 @@
               title: '姝e湪鍔犺浇鍏ㄥ睆瑙嗛...',
               icon: 'loading'
             });
-            
+
             // 妯℃嫙鍏ㄥ睆瑙嗛鍔犺浇
             setTimeout(() => {
               wx.showToast({
@@ -502,7 +770,7 @@
   cameraSettings(e) {
     const camera = e.currentTarget.dataset.camera;
     console.log('鎽勫儚澶磋缃�:', camera.name);
-    
+
     wx.showActionSheet({
       itemList: ['浜戝彴鎺у埗', '褰曞儚璁剧疆', '鐢昏川璋冭妭', '鎶ヨ璁剧疆'],
       success: (res) => {
@@ -513,5 +781,762 @@
         });
       }
     });
-  }
-}) 
\ No newline at end of file
+  },
+
+  /**
+   * 鑾峰彇姘旇薄绔欏垪琛紙鍏煎鎬ф柟娉曪紝鐜板湪璋冪敤缁熶竴鎺ュ彛锛�
+   */
+  getWeatherStationList() {
+    console.log('鑾峰彇姘旇薄绔欏垪琛紙璋冪敤缁熶竴鎺ュ彛锛�');
+    this.getAllDeviceInfo();
+  },
+
+  /**
+   * 閫夋嫨姘旇薄绔�
+   */
+  selectWeatherStation(index) {
+    const weatherStation = this.data.weatherStationList[index];
+    if (!weatherStation) return;
+
+    console.log('閫夋嫨姘旇薄绔�:', weatherStation.name);
+
+    // 鑾峰彇璇ユ皵璞$珯鐨勮缁嗘暟鎹�
+    this.getWeatherStationData(weatherStation.id);
+
+    this.setData({
+      selectedWeatherStationIndex: index
+    });
+  },
+
+  /**
+   * 鑾峰彇姘旇薄绔欒缁嗘暟鎹�
+   */
+  getWeatherStationData(stationId) {
+    console.log('鑾峰彇姘旇薄绔欐暟鎹�:', stationId);
+
+    // 璋冪敤鐪熷疄鎺ュ彛鑾峰彇姘旇薄绔欒缁嗕俊鎭�
+    this.getWeatherLastData(stationId);
+  },
+
+  /**
+   * 璋冪敤 /wx/mqttLast/oneWeatherLast 鎺ュ彛鑾峰彇姘旇薄绔欒缁嗕俊鎭�
+   */
+  getWeatherLastData(weatherId) {
+    console.log('寮�濮嬭皟鐢� /wx/mqttLast/oneWeatherLast 鎺ュ彛鑾峰彇姘旇薄绔欒缁嗕俊鎭�');
+    console.log('姘旇薄绔橧D:', weatherId);
+
+    get({url: `/wx/mqttLast/oneWeatherLast?weatherId=${weatherId}`})
+      .then(response => {
+        console.log('姘旇薄绔欒缁嗕俊鎭帴鍙h繑鍥炴暟鎹�:', response);
+        
+        if (response.success && response.code === '0001') {
+          const content = response.content;
+          
+          // 澶勭悊鎺ュ彛杩斿洖鐨勬皵璞$珯鏁版嵁
+          const weatherData = {
+            id: content.id,
+            weatherId: content.weatherId,
+            weatherName: content.weatherName || '姘旇薄绔�',
+            dt: content.dt,
+            // 姘旇薄鏁版嵁
+            temperature: content.airTemperature, // 绌烘皵娓╁害
+            humidity: content.airHumidity, // 绌烘皵婀垮害
+            uv: content.ultraviolet, // 绱绾�
+            light: content.lightIntensity, // 鍏夌収寮哄害
+            rainfall: content.rainfall, // 闆ㄩ噺
+            windSpeed: content.windSpeed, // 椋庨��
+            windDirection: content.windDirectionStr, // 椋庡悜鎻忚堪
+            windDirectionAngle: content.windDirection, // 椋庡悜瑙掑害
+            // 鍦ㄧ嚎鐘舵��
+            onLine: content.onLine,
+            // 璁$畻鍦ㄧ嚎鐘舵��
+            online: content.onLine === 1,
+            // 鏍煎紡鍖栨樉绀烘暟鎹�
+            lastUpdate: content.dt || new Date().toLocaleString()
+          };
+
+          this.setData({
+            currentWeatherStation: weatherData
+          });
+
+          console.log('澶勭悊鍚庣殑姘旇薄绔欐暟鎹�:', weatherData);
+          
+        } else {
+          console.error('鑾峰彇姘旇薄绔欒缁嗕俊鎭け璐�:', response.msg);
+          wx.showToast({
+            title: response.msg || '鑾峰彇姘旇薄绔欒缁嗕俊鎭け璐�',
+            icon: 'none'
+          });
+          
+          // 濡傛灉鎺ュ彛璋冪敤澶辫触锛屼娇鐢ㄦā鎷熸暟鎹綔涓哄閫�
+          this.setMockWeatherData(stationId);
+        }
+      })
+      .catch(error => {
+        console.error('璋冪敤姘旇薄绔欒缁嗕俊鎭帴鍙eけ璐�:', error);
+        wx.showToast({
+          title: '鑾峰彇姘旇薄绔欒缁嗕俊鎭け璐�',
+          icon: 'error'
+        });
+        
+        // 濡傛灉鎺ュ彛璋冪敤澶辫触锛屼娇鐢ㄦā鎷熸暟鎹綔涓哄閫�
+        this.setMockWeatherData(stationId);
+      });
+  },
+
+  /**
+   * 璁剧疆妯℃嫙姘旇薄绔欐暟鎹紙浣滀负鎺ュ彛璋冪敤澶辫触鐨勫閫夋柟妗堬級
+   */
+  setMockWeatherData(stationId) {
+    console.log('浣跨敤妯℃嫙姘旇薄绔欐暟鎹�:', stationId);
+    
+    const mockWeatherData = {
+      id: stationId,
+      weatherId: stationId,
+      weatherName: '姘旇薄绔�',
+      dt: new Date().toLocaleString(),
+      temperature: 0.0,
+      humidity: 0.0,
+      uv: 0,
+      light: 0,
+      rainfall: 0.00,
+      windSpeed: 0.00,
+      windDirection: '鍖�',
+      windDirectionAngle: 0,
+      onLine: 1,
+      online: true,
+      lastUpdate: new Date().toLocaleString()
+    };
+
+    this.setData({
+      currentWeatherStation: mockWeatherData
+    });
+  },
+
+
+
+  /**
+   * 姘旇薄绔欓�夋嫨鏀瑰彉
+   */
+  onWeatherStationChange(e) {
+    const index = e.detail.value;
+    this.selectWeatherStation(index);
+  },
+
+  /**
+   * 鍒锋柊姘旇薄鏁版嵁
+   */
+  refreshWeatherData() {
+    if (!this.data.currentWeatherStation) {
+      wx.showToast({
+        title: '璇峰厛閫夋嫨姘旇薄绔�',
+        icon: 'none'
+      });
+      return;
+    }
+
+    console.log('鍒锋柊姘旇薄鏁版嵁');
+
+    wx.showLoading({
+      title: '鍒锋柊涓�...'
+    });
+
+    // 閲嶆柊璋冪敤鎺ュ彛鑾峰彇鏈�鏂版暟鎹�
+    this.getWeatherLastData(this.data.currentWeatherStation.weatherId || this.data.currentWeatherStation.id);
+
+    wx.hideLoading();
+    wx.showToast({
+      title: '鍒锋柊鎴愬姛',
+      icon: 'success'
+    });
+  },
+
+  /**
+   * 閫夋嫨鍦熷¥澧掓儏绔�
+   */
+  selectSoilStation(index) {
+    const soilStation = this.data.soilStationList[index];
+    if (!soilStation) return;
+
+    console.log('閫夋嫨鍦熷¥澧掓儏绔�:', soilStation.name);
+
+    // 鑾峰彇璇ュ湡澹ゅ鎯呯珯鐨勮缁嗘暟鎹�
+    this.getSoilStationData(soilStation.id);
+
+    this.setData({
+      selectedSoilStationIndex: index
+    });
+  },
+
+  /**
+   * 鑾峰彇鍦熷¥澧掓儏绔欒缁嗘暟鎹�
+   */
+  getSoilStationData(stationId) {
+    console.log('鑾峰彇鍦熷¥澧掓儏绔欐暟鎹�:', stationId);
+
+    // 璋冪敤鐪熷疄鎺ュ彛鑾峰彇鍦熷¥澧掓儏绔欒缁嗕俊鎭�
+    this.getSoilLastData(stationId);
+  },
+
+  /**
+   * 璋冪敤 /wx/mqttLast/oneSoilLast 鎺ュ彛鑾峰彇鍦熷¥澧掓儏绔欒缁嗕俊鎭�
+   */
+  getSoilLastData(soilId) {
+    console.log('寮�濮嬭皟鐢� /wx/mqttLast/oneSoilLast 鎺ュ彛鑾峰彇鍦熷¥澧掓儏绔欒缁嗕俊鎭�');
+    console.log('鍦熷¥澧掓儏绔橧D:', soilId);
+
+    get({url: `/wx/mqttLast/oneSoilLast?soilId=${soilId}`})
+      .then(response => {
+        console.log('鍦熷¥澧掓儏绔欒缁嗕俊鎭帴鍙h繑鍥炴暟鎹�:', response);
+        
+        if (response.success && response.code === '0001') {
+          const content = response.content;
+          
+          // 澶勭悊鎺ュ彛杩斿洖鐨勫湡澹ゅ鎯呯珯鏁版嵁
+          const soilData = {
+            id: content.id,
+            soilId: content.soilId,
+            soilName: content.soilName || '鍦熷¥澧掓儏绔�',
+            dt: content.dt,
+            // 5灞傚湡澹ゆ箍搴︽暟鎹�
+            soilHumidity1: content.soilHumidity1,
+            soilHumidity2: content.soilHumidity2,
+            soilHumidity3: content.soilHumidity3,
+            soilHumidity4: content.soilHumidity4,
+            soilHumidity5: content.soilHumidity5,
+            // 5灞傚湡澹ゆ俯搴︽暟鎹�
+            soilTemperature1: content.soilTemperature1,
+            soilTemperature2: content.soilTemperature2,
+            soilTemperature3: content.soilTemperature3,
+            soilTemperature4: content.soilTemperature4,
+            soilTemperature5: content.soilTemperature5,
+            // 鍦ㄧ嚎鐘舵��
+            onLine: content.onLine,
+            // 璁$畻鍦ㄧ嚎鐘舵��
+            online: content.onLine === 1,
+            // 鏍煎紡鍖栨樉绀烘暟鎹�
+            lastUpdate: content.dt || new Date().toLocaleString()
+          };
+
+          this.setData({
+            currentSoilStation: soilData
+          });
+
+          console.log('澶勭悊鍚庣殑鍦熷¥澧掓儏绔欐暟鎹�:', soilData);
+          
+        } else {
+          console.error('鑾峰彇鍦熷¥澧掓儏绔欒缁嗕俊鎭け璐�:', response.msg);
+          wx.showToast({
+            title: response.msg || '鑾峰彇鍦熷¥澧掓儏绔欒缁嗕俊鎭け璐�',
+            icon: 'none'
+          });
+          
+          // 濡傛灉鎺ュ彛璋冪敤澶辫触锛屼娇鐢ㄦā鎷熸暟鎹綔涓哄閫�
+          this.setMockSoilData(stationId);
+        }
+      })
+      .catch(error => {
+        console.error('璋冪敤鍦熷¥澧掓儏绔欒缁嗕俊鎭帴鍙eけ璐�:', error);
+        wx.showToast({
+          title: '鑾峰彇鍦熷¥澧掓儏绔欒缁嗕俊鎭け璐�',
+          icon: 'error'
+        });
+        
+        // 濡傛灉鎺ュ彛璋冪敤澶辫触锛屼娇鐢ㄦā鎷熸暟鎹綔涓哄閫�
+        this.setMockSoilData(stationId);
+      });
+  },
+
+  /**
+   * 璁剧疆妯℃嫙鍦熷¥澧掓儏绔欐暟鎹紙浣滀负鎺ュ彛璋冪敤澶辫触鐨勫閫夋柟妗堬級
+   */
+  setMockSoilData(stationId) {
+    console.log('浣跨敤妯℃嫙鍦熷¥澧掓儏绔欐暟鎹�:', stationId);
+    
+    const mockSoilData = {
+      id: stationId,
+      soilId: stationId,
+      soilName: '鍦熷¥澧掓儏绔�',
+      dt: new Date().toLocaleString(),
+      // 5灞傚湡澹ゆ箍搴︽暟鎹�
+      soilHumidity1: 0.00,
+      soilHumidity2: 0.00,
+      soilHumidity3: 0.00,
+      soilHumidity4: 0.00,
+      soilHumidity5: 0.00,
+      // 5灞傚湡澹ゆ俯搴︽暟鎹�
+      soilTemperature1: 0.00,
+      soilTemperature2: 0.00,
+      soilTemperature3: 0.00,
+      soilTemperature4: 0.00,
+      soilTemperature5: 0.00,
+      // 鍦ㄧ嚎鐘舵��
+      onLine: 1,
+      online: true,
+      lastUpdate: new Date().toLocaleString()
+    };
+
+    this.setData({
+      currentSoilStation: mockSoilData
+    });
+  },
+
+  /**
+   * 鍦熷¥澧掓儏绔欓�夋嫨鏀瑰彉
+   */
+  onSoilStationChange(e) {
+    const index = e.detail.value;
+    this.selectSoilStation(index);
+  },
+
+  /**
+   * 鍒锋柊鍦熷¥澧掓儏鏁版嵁
+   */
+  refreshSoilData() {
+    if (!this.data.currentSoilStation) {
+      wx.showToast({
+        title: '璇峰厛閫夋嫨鍦熷¥澧掓儏绔�',
+        icon: 'none'
+      });
+      return;
+    }
+
+    console.log('鍒锋柊鍦熷¥澧掓儏鏁版嵁');
+
+    wx.showLoading({
+      title: '鍒锋柊涓�...'
+    });
+
+    // 閲嶆柊璋冪敤鎺ュ彛鑾峰彇鏈�鏂版暟鎹�
+    this.getSoilLastData(this.data.currentSoilStation.soilId || this.data.currentSoilStation.id);
+
+    wx.hideLoading();
+    wx.showToast({
+      title: '鍒锋柊鎴愬姛',
+      icon: 'success'
+    });
+  },
+
+  /**
+   * 鑾峰彇姘磋偉鏈哄垪琛紙鍏煎鎬ф柟娉曪紝鐜板湪璋冪敤缁熶竴鎺ュ彛锛�
+   */
+  getFertilizerStationList() {
+    console.log('鑾峰彇姘磋偉鏈哄垪琛紙璋冪敤缁熶竴鎺ュ彛锛�');
+    this.getAllDeviceInfo();
+  },
+
+  /**
+   * 閫夋嫨姘磋偉鏈�
+   */
+  selectFertilizerStation(index) {
+    const fertilizerStation = this.data.fertilizerStationList[index];
+    if (!fertilizerStation) return;
+
+    console.log('閫夋嫨姘磋偉鏈�:', fertilizerStation.name);
+
+    // 鑾峰彇璇ユ按鑲ユ満鐨勮缁嗘暟鎹�
+    this.getFertilizerStationData(fertilizerStation.id);
+
+    this.setData({
+      selectedFertilizerStationIndex: index
+    });
+  },
+
+  /**
+   * 鑾峰彇姘磋偉鏈鸿缁嗘暟鎹�
+   */
+  getFertilizerStationData(stationId) {
+    console.log('鑾峰彇姘磋偉鏈烘暟鎹�:', stationId);
+
+    // 璋冪敤鐪熷疄鎺ュ彛鑾峰彇姘磋偉鏈鸿缁嗕俊鎭�
+    this.getManureLastData(stationId);
+  },
+
+  /**
+   * 璋冪敤 /wx/mqttLast/oneManureLast 鎺ュ彛鑾峰彇姘磋偉鏈鸿缁嗕俊鎭�
+   */
+  getManureLastData(manureId) {
+    console.log('寮�濮嬭皟鐢� /wx/mqttLast/oneManureLast 鎺ュ彛鑾峰彇姘磋偉鏈鸿缁嗕俊鎭�');
+    console.log('姘磋偉鏈篒D:', manureId);
+
+    get({url: `/wx/mqttLast/oneManureLast?manureId=${manureId}`})
+      .then(response => {
+        console.log('姘磋偉鏈鸿缁嗕俊鎭帴鍙h繑鍥炴暟鎹�:', response);
+        
+        if (response.success && response.code === '0001') {
+          const content = response.content;
+          
+          // 澶勭悊鎺ュ彛杩斿洖鐨勬按鑲ユ満鏁版嵁
+          const fertilizerData = {
+            id: content.id,
+            manureId: content.manureId,
+            manureName: content.manureName || '姘磋偉鏈�',
+            dt: content.dt,
+            alarm: content.alarm,
+            // 鎼呮媽杩愯鐘舵��
+            stirRunning1: content.stirRunning1,
+            // 娉ㄨ偉杩愯鐘舵��
+            injectRunning: content.injectRunning,
+            // 娴侀噺鍜屾椂闂存暟鎹�
+            manureFlow: content.manureFlow,
+            manureTime: content.manureTime,
+            stirTime: content.stirTime,
+            stirDuration: content.stirDuration,
+            injectDuration: content.injectDuration,
+            // 鍦ㄧ嚎鐘舵��
+            onLine: content.onLine,
+            // 璁$畻杩愯鐘舵��
+            mixingEnabled: content.stirRunning1 === 1,
+            fertilizingEnabled: content.injectRunning === 1,
+            // 鏍煎紡鍖栨樉绀烘暟鎹�
+            lastUpdate: content.dt || new Date().toLocaleString()
+          };
+
+          this.setData({
+            currentFertilizerStation: fertilizerData
+          });
+
+          console.log('澶勭悊鍚庣殑姘磋偉鏈烘暟鎹�:', fertilizerData);
+          
+        } else {
+          console.error('鑾峰彇姘磋偉鏈鸿缁嗕俊鎭け璐�:', response.msg);
+          wx.showToast({
+            title: response.msg || '鑾峰彇姘磋偉鏈鸿缁嗕俊鎭け璐�',
+            icon: 'none'
+          });
+          
+          // 濡傛灉鎺ュ彛璋冪敤澶辫触锛屼娇鐢ㄦā鎷熸暟鎹綔涓哄閫�
+          this.setMockFertilizerData(stationId);
+        }
+      })
+      .catch(error => {
+        console.error('璋冪敤姘磋偉鏈鸿缁嗕俊鎭帴鍙eけ璐�:', error);
+        wx.showToast({
+          title: '鑾峰彇姘磋偉鏈鸿缁嗕俊鎭け璐�',
+          icon: 'error'
+        });
+        
+        // 濡傛灉鎺ュ彛璋冪敤澶辫触锛屼娇鐢ㄦā鎷熸暟鎹綔涓哄閫�
+        this.setMockFertilizerData(stationId);
+      });
+  },
+
+  /**
+   * 璁剧疆妯℃嫙姘磋偉鏈烘暟鎹紙浣滀负鎺ュ彛璋冪敤澶辫触鐨勫閫夋柟妗堬級
+   */
+  setMockFertilizerData(stationId) {
+    console.log('浣跨敤妯℃嫙姘磋偉鏈烘暟鎹�:', stationId);
+    
+    const mockFertilizerData = {
+      id: stationId,
+      manureId: stationId,
+      manureName: '姘磋偉鏈�',
+      dt: new Date().toLocaleString(),
+      alarm: 0,
+      stirRunning1: 0,
+      injectRunning: 0,
+      manureFlow: 0.00,
+      manureTime: 0,
+      stirTime: 0,
+      stirDuration: 300,
+      injectDuration: 300,
+      onLine: 1,
+      mixingEnabled: false,
+      fertilizingEnabled: false,
+      lastUpdate: new Date().toLocaleString()
+    };
+
+    this.setData({
+      currentFertilizerStation: mockFertilizerData
+    });
+  },
+
+
+
+  /**
+   * 姘磋偉鏈洪�夋嫨鏀瑰彉
+   */
+  onFertilizerStationChange(e) {
+    const index = e.detail.value;
+    this.selectFertilizerStation(index);
+  },
+
+  /**
+   * 鍒锋柊姘磋偉鏈烘暟鎹�
+   */
+  refreshFertilizerData() {
+    if (!this.data.currentFertilizerStation) {
+      wx.showToast({
+        title: '璇峰厛閫夋嫨姘磋偉鏈�',
+        icon: 'none'
+      });
+      return;
+    }
+
+    console.log('鍒锋柊姘磋偉鏈烘暟鎹�');
+
+    wx.showLoading({
+      title: '鍒锋柊涓�...'
+    });
+
+    // 閲嶆柊璋冪敤鎺ュ彛鑾峰彇鏈�鏂版暟鎹�
+    this.getManureLastData(this.data.currentFertilizerStation.manureId || this.data.currentFertilizerStation.id);
+
+    wx.hideLoading();
+    wx.showToast({
+      title: '鍒锋柊鎴愬姛',
+      icon: 'success'
+    });
+  },
+
+  /**
+   * 鍒囨崲鎼呮媽寮�鍏�
+   */
+  toggleMixing(e) {
+    const enabled = e.detail.value;
+    console.log('鎼呮媽寮�鍏�:', enabled ? '寮�鍚�' : '鍏抽棴');
+
+    if (!this.data.currentFertilizerStation) return;
+
+    // 鏇存柊鎼呮媽鐘舵��
+    const currentStation = {
+      ...this.data.currentFertilizerStation
+    };
+    currentStation.mixingEnabled = enabled;
+    
+    // 鏇存柊鍏蜂綋鐨勬悈鎷岃繍琛岀姸鎬侊紙杩欓噷鍋囪鍙帶鍒剁涓�涓悈鎷屽櫒锛�
+    currentStation.stirRunning1 = enabled ? 1 : 0;
+
+    this.setData({
+      currentFertilizerStation: currentStation
+    });
+
+    // 鏄剧ず鎿嶄綔缁撴灉
+    wx.showToast({
+      title: enabled ? '鎼呮媽宸插紑鍚�' : '鎼呮媽宸插叧闂�',
+      icon: 'success'
+    });
+  },
+
+  /**
+   * 鍒囨崲娉ㄨ偉寮�鍏�
+   */
+  toggleFertilizing(e) {
+    const enabled = e.detail.value;
+    console.log('娉ㄨ偉寮�鍏�:', enabled ? '寮�鍚�' : '鍏抽棴');
+
+    if (!this.data.currentFertilizerStation) return;
+
+    // 鏇存柊娉ㄨ偉鐘舵��
+    const currentStation = {
+      ...this.data.currentFertilizerStation
+    };
+    currentStation.fertilizingEnabled = enabled;
+    
+    // 鏇存柊娉ㄨ偉杩愯鐘舵��
+    currentStation.injectRunning = enabled ? 1 : 0;
+
+    this.setData({
+      currentFertilizerStation: currentStation
+    });
+
+    // 鏄剧ず鎿嶄綔缁撴灉
+    wx.showToast({
+      title: enabled ? '娉ㄨ偉宸插紑鍚�' : '娉ㄨ偉宸插叧闂�',
+      icon: 'success'
+    });
+  },
+
+
+  
+
+
+
+  /**
+   * 鎵嬪姩閲嶈瘯鑾峰彇鎾斁鍦板潃
+   */
+  retryGetHlsUrl(e) {
+    const camera = e.currentTarget.dataset.camera;
+    if (!camera) {
+      console.error('閲嶈瘯澶辫触锛氭憚鍍忓ご淇℃伅涓嶅畬鏁�');
+      wx.showToast({
+        title: '鎽勫儚澶翠俊鎭笉瀹屾暣',
+        icon: 'error'
+      });
+      return;
+    }
+
+    console.log('=== 鎵嬪姩閲嶈瘯鑾峰彇鎾斁鍦板潃 ===');
+    console.log(`鎽勫儚澶�: ${camera.name}, ID: ${camera.id}`);
+    console.log('褰撳墠鐘舵��:', {
+      online: camera.online,
+      hslUrl: camera.hslUrl,
+      isLoadingUrl: camera.isLoadingUrl,
+      urlError: camera.urlError
+    });
+    
+    // 閲嶇疆閿欒鐘舵�佸苟閲嶆柊鑾峰彇
+    this.updateCameraUrlLoadingState(camera.id, false, false);
+    this.getHlsUrlForCamera(camera);
+  },
+
+  /**
+   * 鏇存柊鎽勫儚澶碪RL鍔犺浇鐘舵��
+   */
+  updateCameraUrlLoadingState(cameraId, isLoading, hasError) {
+    console.log('=== 鏇存柊鎽勫儚澶碪RL鍔犺浇鐘舵�� ===');
+    console.log('鍙傛暟:', { cameraId, isLoading, hasError });
+    
+    const cameraList = this.data.cameraList.map(item => {
+      if (item.id === cameraId) {
+        const updatedItem = {
+          ...item,
+          isLoadingUrl: isLoading,
+          urlError: hasError
+        };
+        console.log(`鎽勫儚澶� ${cameraId} 鐘舵�佹洿鏂�:`, {
+          name: updatedItem.name,
+          isLoadingUrl: updatedItem.isLoadingUrl,
+          urlError: updatedItem.urlError
+        });
+        return updatedItem;
+      }
+      return item;
+    });
+
+    this.setData({
+      cameraList: cameraList
+    });
+
+    console.log('鐘舵�佹洿鏂板畬鎴愶紝褰撳墠鎽勫儚澶村垪琛�:', cameraList);
+  },
+
+  /**
+   * 涓哄崟涓憚鍍忓ご鑾峰彇HLS鎾斁鍦板潃
+   */
+  getHlsUrlForCamera(camera) {
+    if (!camera || !camera.deviceSerial) {
+      console.error('鎽勫儚澶翠俊鎭笉瀹屾暣:', camera);
+      return;
+    }
+
+    console.log('=== 鑾峰彇鎾斁鍦板潃寮�濮� ===');
+    console.log(`鎽勫儚澶�: ${camera.name}, ID: ${camera.id}, 璁惧搴忓垪鍙�: ${camera.deviceSerial}`);
+    console.log('褰撳墠accessToken:', this.data.accessToken);
+
+    // 鏇存柊鍔犺浇鐘舵��
+    this.updateCameraUrlLoadingState(camera.id, true, false);
+
+    // 璋冪敤钀ょ煶浜慉PI鑾峰彇鎾斁鍦板潃
+    this.getHlsUrl(this.data.accessToken, camera.deviceSerial, camera.id);
+  },
+
+  /**
+   * ezplayer閿欒澶勭悊
+   */
+  handleError(e) {
+    console.log('=== ezplayer 閿欒澶勭悊 ===');
+    console.log('閿欒浜嬩欢璇︽儏:', e);
+    console.log('閿欒璇︽儏:', e.detail);
+    
+    // 鑾峰彇鎽勫儚澶翠俊鎭�
+    const cameraId = e.currentTarget.id;
+    console.log('鍑洪敊鐨勬憚鍍忓ごID:', cameraId);
+    
+    // 鏌ユ壘瀵瑰簲鐨勬憚鍍忓ご
+    const camera = this.data.cameraList.find(item => `ezplayer-${item.id}` === cameraId);
+    if (camera) {
+      console.log('鍑洪敊鐨勬憚鍍忓ご淇℃伅:', camera);
+      
+      // 鏇存柊閿欒鐘舵��
+      this.updateCameraUrlLoadingState(camera.id, false, true);
+      
+      // 鏄剧ず閿欒鎻愮ず
+      wx.showToast({
+        title: '瑙嗛鎾斁鍑洪敊',
+        icon: 'error',
+        duration: 2000
+      });
+    } else {
+      console.error('鏈壘鍒板搴旂殑鎽勫儚澶�:', cameraId);
+    }
+  },
+
+  /**
+   * ezplayer鎺у埗浜嬩欢
+   */
+  onControlEvent(e) {
+    console.log('=== ezplayer 鎺у埗浜嬩欢 ===');
+    console.log('鎺у埗浜嬩欢璇︽儏:', e);
+    console.log('浜嬩欢绫诲瀷:', e.type);
+    console.log('浜嬩欢鏁版嵁:', e.detail);
+    
+    // 鑾峰彇鎽勫儚澶翠俊鎭�
+    const cameraId = e.currentTarget.id;
+    console.log('浜嬩欢鏉ユ簮鎽勫儚澶碔D:', cameraId);
+    
+    // 鏌ユ壘瀵瑰簲鐨勬憚鍍忓ご
+    const camera = this.data.cameraList.find(item => `ezplayer-${item.id}` === cameraId);
+    if (camera) {
+      console.log('浜嬩欢鏉ユ簮鎽勫儚澶翠俊鎭�:', camera);
+      
+      // 鏍规嵁浜嬩欢绫诲瀷澶勭悊
+      switch (e.type) {
+        case 'play':
+          console.log('瑙嗛寮�濮嬫挱鏀�');
+      
+          break;
+        case 'pause':
+          console.log('瑙嗛鏆傚仠鎾斁');
+
+          break;
+        case 'ended':
+          console.log('瑙嗛鎾斁缁撴潫');
+
+          break;
+        case 'error':
+          console.log('瑙嗛鎾斁閿欒');
+          this.updateCameraUrlLoadingState(camera.id, false, true);
+          break;
+      default:
+          console.log('鏈煡浜嬩欢绫诲瀷:', e.type);
+      }
+    } else {
+      console.error('鏈壘鍒板搴旂殑鎽勫儚澶�:', cameraId);
+    }
+  },
+
+
+
+
+  /**
+   * 鏇存柊鎽勫儚澶存挱鏀剧姸鎬�
+   */
+  updateCameraPlayState(cameraId, isPlaying) {
+    console.log('=== 鏇存柊鎽勫儚澶存挱鏀剧姸鎬� ===');
+    console.log('鍙傛暟:', { cameraId, isPlaying });
+    
+    const cameraList = this.data.cameraList.map(item => {
+      if (item.id === cameraId) {
+        const updatedItem = {
+          ...item,
+          isPlaying: isPlaying
+        };
+        console.log(`鎽勫儚澶� ${cameraId} 鎾斁鐘舵�佹洿鏂�:`, {
+          name: updatedItem.name,
+          isPlaying: updatedItem.isPlaying
+        });
+        return updatedItem;
+      }
+      return item;
+    });
+
+    this.setData({
+      cameraList: cameraList
+    });
+
+    console.log('鎾斁鐘舵�佹洿鏂板畬鎴�');
+  },
+
+
+})
\ No newline at end of file
diff --git a/pages/stationMonitor/stationMonitor.wxml b/pages/stationMonitor/stationMonitor.wxml
index 0807f36..1aa0714 100644
--- a/pages/stationMonitor/stationMonitor.wxml
+++ b/pages/stationMonitor/stationMonitor.wxml
@@ -1,23 +1,23 @@
 <!--pages/stationMonitor/stationMonitor.wxml-->
 <view class="container">
   <!-- 椤堕儴閫夐」鍗� -->
-  <view class="tab-container">
-    <view class="tab-item {{activeTab === 'weather' ? 'active' : ''}}" bind:tap="switchTab" data-tab="weather">
+  <view class="tabs">
+    <view class="tab {{activeTab === 'weather' ? 'active' : ''}}" bind:tap="switchTab" data-tab="weather">
       <image class="tab-icon" src="/images/weather.svg" />
       <text class="tab-name">姘旇薄绔�</text>
     </view>
 
-    <view class="tab-item {{activeTab === 'soil' ? 'active' : ''}}" bind:tap="switchTab" data-tab="soil">
+    <view class="tab {{activeTab === 'soil' ? 'active' : ''}}" bind:tap="switchTab" data-tab="soil">
       <image class="tab-icon" src="/images/soil.svg" />
       <text class="tab-name">鍦熷¥澧掓儏绔�</text>
     </view>
 
-    <view class="tab-item {{activeTab === 'fertilizer' ? 'active' : ''}}" bind:tap="switchTab" data-tab="fertilizer">
+    <view class="tab {{activeTab === 'fertilizer' ? 'active' : ''}}" bind:tap="switchTab" data-tab="fertilizer">
       <image class="tab-icon" src="/images/fertilizer.svg" />
       <text class="tab-name">姘磋偉鏈�</text>
     </view>
 
-    <view class="tab-item {{activeTab === 'camera' ? 'active' : ''}}" bind:tap="switchTab" data-tab="camera">
+    <view class="tab {{activeTab === 'camera' ? 'active' : ''}}" bind:tap="switchTab" data-tab="camera">
       <image class="tab-icon" src="/images/camera.svg" />
       <text class="tab-name">鎽勫儚澶�</text>
     </view>
@@ -27,25 +27,407 @@
   <view class="content-area">
     <!-- 姘旇薄绔欏唴瀹� -->
     <view wx:if="{{activeTab === 'weather'}}" class="tab-content">
-      <text class="content-title">姘旇薄绔欑洃娴�</text>
-      <!-- 鍦ㄨ繖閲屾坊鍔犳皵璞$珯鐩稿叧鍐呭 -->
+      <!-- <text class="content-title">姘旇薄绔欑洃娴�</text> -->
+
+      <!-- 姘旇薄绔欓�夋嫨涓嬫媺妗� -->
+      <view class="weather-station-selector">
+        <picker bindchange="onWeatherStationChange" value="{{selectedWeatherStationIndex}}" range="{{weatherStationList}}" range-key="name">
+          <view class="picker-container">
+            <text class="picker-label">閫夋嫨姘旇薄绔欙細</text>
+            <view class="picker-value">
+              <text>{{weatherStationList[selectedWeatherStationIndex].name || '璇烽�夋嫨姘旇薄绔�'}}</text>
+              <image class="picker-arrow" src="/images/arrow-down.svg" />
+            </view>
+          </view>
+        </picker>
+      </view>
+
+      <!-- 姘旇薄绔欎俊鎭崱鐗� -->
+      <view wx:if="{{currentWeatherStation}}" class="weather-info-card">
+        <!-- 鐘舵�佹爮 -->
+        <view class="status-bar">
+          <view class="status-item">
+            <view class="status-indicator {{currentWeatherStation.online ? 'online' : 'offline'}}"></view>
+            <text class="status-text">{{currentWeatherStation.online ? '鍦ㄧ嚎' : '绂荤嚎'}}</text>
+          </view>
+          <view class="refresh-btn" bind:tap="refreshWeatherData">
+            <image class="refresh-icon" src="/images/refresh.svg" />
+            <text class="refresh-text">鍒锋柊</text>
+          </view>
+        </view>
+
+        <!-- 姘旇薄鏁版嵁缃戞牸 -->
+        <view class="weather-data-grid">
+          <!-- 绌烘皵婀垮害 -->
+          <view class="weather-data-item humidity">
+            <view class="data-icon">
+              <image src="/images/humidity.svg" />
+            </view>
+            <view class="data-content">
+              <text class="data-label">绌烘皵婀垮害(%)</text>
+              <text class="data-value">{{currentWeatherStation.humidity || '--'}}%</text>
+            </view>
+          </view>
+
+          <!-- 绌烘皵娓╁害 -->
+          <view class="weather-data-item temperature">
+            <view class="data-icon">
+              <image src="/images/temperature.svg" />
+            </view>
+            <view class="data-content">
+              <text class="data-label">绌烘皵娓╁害(鈩�)</text>
+              <text class="data-value">{{currentWeatherStation.temperature || '--'}}掳C</text>
+            </view>
+          </view>
+
+          <!-- 绱绾� -->
+          <view class="weather-data-item uv">
+            <view class="data-icon">
+              <image src="/images/uv.svg" />
+            </view>
+            <view class="data-content">
+              <text class="data-label">绱绾�(mW/m虏)</text>
+              <text class="data-value">{{currentWeatherStation.uv || '--'}}</text>
+            </view>
+          </view>
+
+          <!-- 鍏夌収寮哄害 -->
+          <view class="weather-data-item light">
+            <view class="data-icon">
+              <image src="/images/light.svg" />
+            </view>
+            <view class="data-content">
+              <text class="data-label">鍏夌収寮哄害(lm/銕�)</text>
+              <text class="data-value">{{currentWeatherStation.light || '--'}} lux</text>
+            </view>
+          </view>
+
+          <!-- 闆ㄩ噺 -->
+          <view class="weather-data-item rainfall">
+            <view class="data-icon">
+              <image src="/images/rainfall.svg" />
+            </view>
+            <view class="data-content">
+              <text class="data-label">闆ㄩ噺(mm)</text>
+              <text class="data-value">{{currentWeatherStation.rainfall || '--'}} mm</text>
+            </view>
+          </view>
+
+          <!-- 椋庨�� -->
+          <view class="weather-data-item wind-speed">
+            <view class="data-icon">
+              <image src="/images/wind-speed.svg" />
+            </view>
+            <view class="data-content">
+              <text class="data-label">椋庨��(m/s)</text>
+              <text class="data-value">{{currentWeatherStation.windSpeed || '--'}} m/s</text>
+            </view>
+          </view>
+
+          <!-- 椋庡悜 -->
+          <view class="weather-data-item wind-direction">
+            <view class="data-icon">
+              <image src="/images/wind-direction.svg" />
+            </view>
+            <view class="data-content">
+              <text class="data-label">椋庡悜</text>
+              <view class="wind-direction-display">
+                <!-- <image class="wind-arrow" src="/images/wind-arrow.svg" style="transform: rotate({{currentWeatherStation.windDirectionAngle || 0}}deg)" /> -->
+                <text class="data-value">{{currentWeatherStation.windDirection || '--'}}</text>
+              </view>
+            </view>
+          </view>
+        </view>
+
+        <!-- 鏈�鍚庢洿鏂版椂闂� -->
+        <view class="last-update">
+          <text class="update-text">鏈�鍚庢洿鏂帮細{{currentWeatherStation.lastUpdate || '--'}}</text>
+        </view>
+      </view>
+
+      <!-- 鏃犳暟鎹彁绀� -->
+      <view wx:if="{{!currentWeatherStation}}" class="no-data">
+        <image class="no-data-icon" src="/images/no-data.svg" />
+        <text class="no-data-text">璇烽�夋嫨姘旇薄绔欐煡鐪嬫暟鎹�</text>
+      </view>
     </view>
 
     <!-- 鍦熷¥澧掓儏绔欏唴瀹� -->
     <view wx:elif="{{activeTab === 'soil'}}" class="tab-content">
-      <text class="content-title">鍦熷¥澧掓儏绔欑洃娴�</text>
-      <!-- 鍦ㄨ繖閲屾坊鍔犲湡澹ゅ鎯呯珯鐩稿叧鍐呭 -->
+      <!-- 鍦熷¥澧掓儏绔欓�夋嫨涓嬫媺妗� -->
+      <view class="weather-station-selector">
+        <picker bindchange="onSoilStationChange" value="{{selectedSoilStationIndex}}" range="{{soilStationList}}" range-key="name">
+          <view class="picker-container">
+            <text class="picker-label">閫夋嫨鍦熷¥澧掓儏绔欙細</text>
+            <view class="picker-value">
+              <text>{{soilStationList[selectedSoilStationIndex].name || '璇烽�夋嫨鍦熷¥澧掓儏绔�'}}</text>
+              <image class="picker-arrow" src="/images/arrow-down.svg" />
+            </view>
+          </view>
+        </picker>
+      </view>
+      
+      <!-- 鍦熷¥澧掓儏淇℃伅鍗$墖 -->
+      <view wx:if="{{currentSoilStation}}" class="weather-info-card">
+        <!-- 鐘舵�佹爮 -->
+        <view class="status-bar">
+          <view class="status-item">
+            <view class="status-indicator {{currentSoilStation.online ? 'online' : 'offline'}}"></view>
+            <text class="status-text">{{currentSoilStation.online ? '鍦ㄧ嚎' : '绂荤嚎'}}</text>
+          </view>
+          <view class="refresh-btn" bind:tap="refreshSoilData">
+            <image class="refresh-icon" src="/images/refresh.svg" />
+            <text class="refresh-text">鍒锋柊</text>
+          </view>
+        </view>
+
+        <!-- 鍦熷¥澧掓儏鏁版嵁缃戞牸 -->
+        <view class="weather-data-grid">
+          <!-- 鍦熷¥灞�1 -->
+          <view class="weather-data-item soil-item">
+            <view class="data-icon">
+              <image src="/images/one.svg" />
+            </view>
+            <view class="data-content">
+              <text class="data-label">鍦熷¥婀垮害1(%)</text>
+              <text class="data-value">{{currentSoilStation.soilHumidity1 || '--'}}%</text>
+            </view>
+          </view>
+
+          <view class="weather-data-item soil-item">
+            <view class="data-icon">
+              <image src="/images/one.svg" />
+            </view>
+            <view class="data-content">
+              <text class="data-label">鍦熷¥娓╁害1(鈩�)</text>
+              <text class="data-value">{{currentSoilStation.soilTemperature1 || '--'}}掳C</text>
+            </view>
+          </view>
+
+          <!-- 鍦熷¥灞�2 -->
+          <view class="weather-data-item soil-item">
+            <view class="data-icon">
+              <image src="/images/two.svg" />
+            </view>
+            <view class="data-content">
+              <text class="data-label">鍦熷¥婀垮害2(%)</text>
+              <text class="data-value">{{currentSoilStation.soilHumidity2 || '--'}}%</text>
+            </view>
+          </view>
+
+          <view class="weather-data-item soil-item">
+            <view class="data-icon">
+              <image src="/images/two.svg" />
+            </view>
+            <view class="data-content">
+              <text class="data-label">鍦熷¥娓╁害2(鈩�)</text>
+              <text class="data-value">{{currentSoilStation.soilTemperature2 || '--'}}掳C</text>
+            </view>
+          </view>
+
+          <!-- 鍦熷¥灞�3 -->
+          <view class="weather-data-item soil-item">
+            <view class="data-icon">
+              <image src="/images/three.svg" />
+            </view>
+            <view class="data-content">
+              <text class="data-label">鍦熷¥婀垮害3(%)</text>
+              <text class="data-value">{{currentSoilStation.soilHumidity3 || '--'}}%</text>
+            </view>
+          </view>
+
+          <view class="weather-data-item soil-item">
+            <view class="data-icon">
+              <image src="/images/three.svg" />
+            </view>
+            <view class="data-content">
+              <text class="data-label">鍦熷¥娓╁害3(鈩�)</text>
+              <text class="data-value">{{currentSoilStation.soilTemperature3 || '--'}}掳C</text>
+            </view>
+          </view>
+
+          <!-- 鍦熷¥灞�4 -->
+          <view class="weather-data-item soil-item">
+            <view class="data-icon">
+              <image src="/images/four.svg" />
+            </view>
+            <view class="data-content">
+              <text class="data-label">鍦熷¥婀垮害4(%)</text>
+              <text class="data-value">{{currentSoilStation.soilHumidity4 || '--'}}%</text>
+            </view>
+          </view>
+
+          <view class="weather-data-item soil-item">
+            <view class="data-icon">
+              <image src="/images/four.svg" />
+            </view>
+            <view class="data-content">
+              <text class="data-label">鍦熷¥娓╁害4(鈩�)</text>
+              <text class="data-value">{{currentSoilStation.soilTemperature4 || '--'}}掳C</text>
+            </view>
+          </view>
+
+          <!-- 鍦熷¥灞�5 -->
+          <view class="weather-data-item soil-item">
+            <view class="data-icon">
+              <image src="/images/five.svg" />
+            </view>
+            <view class="data-content">
+              <text class="data-label">鍦熷¥婀垮害5(%)</text>
+              <text class="data-value">{{currentSoilStation.soilHumidity5 || '--'}}%</text>
+            </view>
+          </view>
+
+          <view class="weather-data-item soil-item">
+            <view class="data-icon">
+              <image src="/images/five.svg" />
+            </view>
+            <view class="data-content">
+              <text class="data-label">鍦熷¥娓╁害5(鈩�)</text>
+              <text class="data-value">{{currentSoilStation.soilTemperature5 || '--'}}掳C</text>
+            </view>
+          </view>
+        </view>
+
+        <!-- 鏈�鍚庢洿鏂版椂闂� -->
+        <view class="last-update">
+          <text class="update-text">鏈�鍚庢洿鏂帮細{{currentSoilStation.lastUpdate || '--'}}</text>
+        </view>
+      </view>
+
+      <!-- 鏃犳暟鎹彁绀� -->
+      <view wx:if="{{!currentSoilStation}}" class="no-data">
+        <image class="no-data-icon" src="/images/no-data.svg" />
+        <text class="no-data-text">璇烽�夋嫨鍦熷¥澧掓儏绔欐煡鐪嬫暟鎹�</text>
+      </view>
     </view>
 
     <!-- 姘磋偉鏈哄唴瀹� -->
     <view wx:elif="{{activeTab === 'fertilizer'}}" class="tab-content">
-      <text class="content-title">姘磋偉鏈虹洃娴�</text>
-      <!-- 鍦ㄨ繖閲屾坊鍔犳按鑲ユ満鐩稿叧鍐呭 -->
+      <!-- <text class="content-title">姘磋偉鏈虹洃娴�</text> -->
+
+      <!-- 姘磋偉鏈洪�夋嫨涓嬫媺妗� -->
+      <view class="fertilizer-station-selector">
+        <picker bindchange="onFertilizerStationChange" value="{{selectedFertilizerStationIndex}}" range="{{fertilizerStationList}}" range-key="name">
+          <view class="picker-container">
+            <text class="picker-label">閫夋嫨姘磋偉鏈猴細</text>
+            <view class="picker-value">
+              <text>{{fertilizerStationList[selectedFertilizerStationIndex].name || '璇烽�夋嫨姘磋偉鏈�'}}</text>
+              <image class="picker-arrow" src="/images/arrow-down.svg" />
+            </view>
+          </view>
+        </picker>
+      </view>
+
+      <!-- 姘磋偉鏈轰俊鎭崱鐗� -->
+      <view wx:if="{{currentFertilizerStation}}" class="fertilizer-info-card">
+        <!-- 鐘舵�佹爮 -->
+        <view class="status-bar">
+          <view class="status-item">
+            <view class="status-indicator {{currentFertilizerStation.onLine === 1 ? 'online' : 'offline'}}"></view>
+            <text class="status-text">{{currentFertilizerStation.onLine === 1 ? '鍦ㄧ嚎' : '绂荤嚎'}}</text>
+          </view>
+          <view class="refresh-btn" bind:tap="refreshFertilizerData">
+            <image class="refresh-icon" src="/images/refresh.svg" />
+            <text class="refresh-text">鍒锋柊</text>
+          </view>
+        </view>
+
+        <!-- 鎺у埗寮�鍏冲尯鍩� -->
+        <view class="control-switches">
+          <text class="section-title">鎺у埗寮�鍏�</text>
+          <view class="switch-container">
+            <!-- 鎼呮媽寮�鍏� -->
+            <view class="switch-item">
+              <text class="switch-label">鎼呮媽</text>
+              <switch class="custom-switch" checked="{{currentFertilizerStation.mixingEnabled}}" bindchange="toggleMixing" disabled="{{currentFertilizerStation.onLine !== 1}}" color="#07c160" />
+            </view>
+
+            <!-- 娉ㄨ偉寮�鍏� -->
+            <view class="switch-item">
+              <text class="switch-label">娉ㄨ偉</text>
+              <switch class="custom-switch" checked="{{currentFertilizerStation.fertilizingEnabled}}" bindchange="toggleFertilizing" disabled="{{currentFertilizerStation.onLine !== 1}}" color="#07c160" />
+            </view>
+          </view>
+        </view>
+
+        <!-- 鐩戞祴鏁版嵁鍖哄煙 -->
+        <view class="monitoring-data">
+          <text class="section-title">鐩戞祴鏁版嵁</text>
+          <view class="data-grid">
+            <!-- 鑲ユ枡娴侀噺 -->
+            <view class="data-item waste-flow">
+              <view class="data-icon">
+                <image src="/images/flow.svg" />
+              </view>
+              <view class="data-content">
+                <text class="data-label">鑲ユ枡娴侀噺(鍗�)</text>
+                <text class="data-value">{{currentFertilizerStation.manureFlow || '--'}} L</text>
+              </view>
+            </view>
+
+            <!-- 娉ㄨ偉鏃堕暱 -->
+            <view class="data-item fertilizing-duration">
+              <view class="data-icon">
+                <image src="/images/timer.svg" />
+              </view>
+              <view class="data-content">
+                <text class="data-label">娉ㄨ偉鏃堕暱(绉�)</text>
+                <text class="data-value">{{currentFertilizerStation.manureTime || '--'}} s</text>
+              </view>
+            </view>
+
+            <!-- 鎼呮媽鏃堕暱 -->
+            <view class="data-item mixing-duration">
+              <view class="data-icon">
+                <image src="/images/mixing.svg" />
+              </view>
+              <view class="data-content">
+                <text class="data-label">鎼呮媽鏃堕暱(绉�)</text>
+                <text class="data-value">{{currentFertilizerStation.stirTime || '--'}} s</text>
+              </view>
+            </view>
+
+            <!-- 鎼呮媽璁惧畾鏃堕棿 -->
+            <view class="data-item mixing-set-time">
+              <view class="data-icon">
+                <image src="/images/settings.svg" />
+              </view>
+              <view class="data-content">
+                <text class="data-label">鎼呮媽璁惧畾鏃堕棿(绉�)</text>
+                <text class="data-value">{{currentFertilizerStation.stirDuration || '--'}} s</text>
+              </view>
+            </view>
+
+            <!-- 娉ㄨ偉璁惧畾鏃堕棿 -->
+            <view class="data-item fertilizing-set-time">
+              <view class="data-icon">
+                <image src="/images/settings-time.svg" />
+              </view>
+              <view class="data-content">
+                <text class="data-label">娉ㄨ偉璁惧畾鏃堕棿(绉�)</text>
+                <text class="data-value">{{currentFertilizerStation.injectDuration || '--'}} s</text>
+              </view>
+            </view>
+          </view>
+        </view>
+
+        <!-- 鏈�鍚庢洿鏂版椂闂� -->
+        <view class="last-update">
+          <text class="update-text">鏈�鍚庢洿鏂帮細{{currentFertilizerStation.dt || currentFertilizerStation.lastUpdate || '--'}}</text>
+        </view>
+      </view>
+
+      <!-- 鏃犳暟鎹彁绀� -->
+      <view wx:if="{{!currentFertilizerStation}}" class="no-data">
+        <image class="no-data-icon" src="/images/no-data.svg" />
+        <text class="no-data-text">璇烽�夋嫨姘磋偉鏈烘煡鐪嬫暟鎹�</text>
+      </view>
     </view>
 
     <!-- 鎽勫儚澶村唴瀹� -->
     <view wx:elif="{{activeTab === 'camera'}}" class="tab-content">
-
+      <!-- <text class="content-title">鎽勫儚澶寸洃鎺�</text> -->
 
       <!-- 鎽勫儚澶村垪琛� -->
       <view class="camera-list">
@@ -59,63 +441,66 @@
           </view>
 
           <!-- 鎽勫儚澶磋棰� -->
-          <view class="camera-video-container">
-            <view wx:if="{{item.online}}" class="video-wrapper">
+          <view class="camera-video-container" style="height: {{deviceSpecificConfig.videoHeight}}rpx;">
+            <!-- 鍔犺浇鐘舵�� -->
+            <view wx:if="{{item.isLoadingUrl}}" class="video-loading">
+              <view class="loading-spinner"></view>
+              <text class="loading-text">姝e湪鑾峰彇鎾斁鍦板潃...</text>
+            </view>
+
+            <!-- 閿欒鐘舵�� -->
+            <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}}">
+                <image class="retry-icon" src="/images/refresh.svg" />
+                <text>閲嶈瘯</text>
+              </button>
+            </view>
+
+            <!-- 姝e父鎾斁鐘舵�� -->
+            <view wx:elif="{{item.online && item.hslUrl}}" class="video-wrapper">
               <!-- 鐩存挱鎾斁鍣ㄧ粍浠� -->
-              <ezplayer id="ezplayer" accessToken="at.2o04glgs0q36cjugbvddqujz7tqrghx1-1ovr6lmf3k-03pij3c-304ziif7e" url="rtmp://open.ys7.com/BA7248908/1/live" plugins="talk,voice,capture" recPlayTime="" width="360" height="300" watermark="shuiyin" theme="{{ { showFullScreenBtn: true, showHdBtn: true, showTimeLine: true } }}" bind:handleError="handleError" bind:onControlEvent="onControlEvent" />
-
-              <!-- 澶囩敤HLS鎾斁鍣� -->
-              <video wx:if="{{item.isPlaying && !item.rtmpUrl}}" class="live-player" src="{{item.hlsUrl}}" autoplay="{{true}}" muted="{{true}}" controls="{{false}}" object-fit="contain" bind:load="onVideoLoad" bind:play="onVideoPlay" bind:pause="onVideoPause" bind:ended="onVideoEnded" bind:error="onVideoError" data-camera="{{item}}" />
-
-              <!-- 瑙嗛鎺у埗瑕嗙洊灞� -->
-              <view class="video-overlay" wx:if="{{!item.isPlaying}}">
-                <view class="play-overlay" bind:tap="playVideo" data-camera="{{item}}">
-                  <image class="play-icon" src="/images/play.svg" />
-                </view>
-              </view>
-
-              <!-- 瑙嗛淇℃伅 -->
-              <view class="video-info">
-                <text class="video-time">{{item.lastUpdate}}</text>
-                <text class="video-status">{{item.isPlaying ? '鐩存挱涓�' : '宸插仠姝�'}}</text>
-              </view>
-
-              <!-- 鎾斁鎺у埗鎸夐挳 -->
-              <view class="video-controls" wx:if="{{item.isPlaying}}">
-                <view class="control-btn" bind:tap="pauseVideo" data-camera="{{item}}">
-                  <image class="control-icon" src="/images/pause.svg" />
-                </view>
-                <view class="control-btn" bind:tap="stopVideo" data-camera="{{item}}">
-                  <image class="control-icon" src="/images/stop.svg" />
-                </view>
-              </view>
-
-              <!-- 璋冭瘯鎸夐挳 -->
-              <view class="debug-controls">
-                <view class="debug-btn" bind:tap="testVideoUrl" data-camera="{{item}}">
-                  <text>娴嬭瘯URL</text>
-                </view>
-              </view>
+              <ezplayer 
+                id="ezplayer-{{item.id}}" 
+                accessToken="{{item.accessToken}}" 
+                url="{{item.hslUrl}}" 
+                deviceSerial="{{item.deviceSerial}}"
+                channelNo="1"
+                width="300rpx"
+                height="300rpx"
+                plugins="talk,voice,capture,ptz,privacy,mirror" 
+                watermark="澶х"
+                autoPlay="{{true}}"
+                theme="{{ { showFullScreenBtn: true, showHdBtn: true, showTimeLine: true } }}" 
+                bind:handleError="handleError" 
+                bind:onControlEvent="onControlEvent"
+                style="width: 100vw; height: 100%; max-width: 100vw; min-width: 100vw; position: absolute; left: 0; right: 0; top: 0; bottom: 0; overflow: hidden; margin: 0; padding: 0; transform: none; border: none; border-radius: 0; box-shadow: none; background: transparent;"
+              />
             </view>
 
-            <!-- 绂荤嚎鐘舵�� -->
-            <view wx:else class="video-offline">
-              <image class="offline-icon" src="/images/offline.svg" />
-              <text class="offline-text">鎽勫儚澶寸绾�</text>
+            <!-- 绂荤嚎鐘舵�佹樉绀� -->
+            <view wx:elif="{{!item.online}}" class="video-offline">
+              <image class="offline-icon" src="/images/camera.svg" />
+              <text class="offline-text">璁惧绂荤嚎</text>
+            </view>
+
+            <!-- 鏃犳挱鏀惧湴鍧�鐘舵�� -->
+            <view wx:else class="video-no-url">
+              <image class="no-url-icon" src="/images/camera.svg" />
+              <text class="no-url-text">鏆傛棤鎾斁鍦板潃</text>
             </view>
           </view>
 
-          <!-- 鎽勫儚澶存搷浣滄寜閽� -->
-          <view class="camera-actions">
-            <button class="action-btn {{item.online ? 'primary' : 'disabled'}}" disabled="{{!item.online}}" bind:tap="fullscreenVideo" data-camera="{{item}}">
-              鍏ㄥ睆鎾斁
-            </button>
-            <button class="action-btn secondary" bind:tap="cameraSettings" data-camera="{{item}}">
-              璁剧疆
-            </button>
-          </view>
+         
         </view>
       </view>
+
+      <!-- 鏃犳暟鎹彁绀� -->
+      <view wx:if="{{cameraList.length === 0}}" class="no-data">
+        <image class="no-data-icon" src="/images/no-data.svg" />
+        <text class="no-data-text">鏆傛棤鎽勫儚澶磋澶�</text>
+      </view>
     </view>
   </view>
 </view>
\ No newline at end of file
diff --git a/pages/stationMonitor/stationMonitor.wxss b/pages/stationMonitor/stationMonitor.wxss
index b43ab1f..1a97158 100644
--- a/pages/stationMonitor/stationMonitor.wxss
+++ b/pages/stationMonitor/stationMonitor.wxss
@@ -6,79 +6,126 @@
   padding: 0;
   width: 100%;
   box-sizing: border-box;
+  /* 闃叉姘村钩婊氬姩 */
+  overflow-x: hidden !important;
+  /* 纭繚椤甸潰瀹藉害绾︽潫 */
+  max-width: 100vw;
+  /* 鏂板锛氬己鍒剁Щ闄ゆ墍鏈夊彲鑳界殑杈硅窛 */
+  min-width: 0;
 }
 
 .container {
   padding: 0;
   margin: 0;
   background-color: #f5f5f5;
-  min-height: 100vh;
+  height: 100vh; /* 鍥哄畾楂樺害涓鸿鍙i珮搴� */
   width: 100%;
   box-sizing: border-box;
-}
-
-/* 閫夐」鍗″鍣� */
-.tab-container {
+  /* 闃叉浠讳綍婊氬姩 */
+  overflow: hidden !important;
+  /* 浣跨敤flexbox甯冨眬 */
   display: flex;
+  flex-direction: column;
+  /* 纭繚瀹瑰櫒瀹藉害绾︽潫 */
+  max-width: 100vw;
+  min-width: 0;
+  /* 鏂板锛氬己鍒剁Щ闄ゆ墍鏈夊彲鑳界殑杈硅窛 */
+  left: 0 !important;
+  right: 0 !important;
+}
+
+/* 鏍囩椤垫牱寮� - 绾挎�у竷灞� */
+.tabs {
+  display: flex;
+  background-color: #fff;
+  padding: 4rpx 0;
   width: 100%;
-  background: white;
-  box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
-  position: sticky;
+  flex-shrink: 0; /* 闃叉琚帇缂� */
+  box-shadow: 0 4rpx 8rpx rgba(0, 0, 0, 0.05);
+  border-bottom: 1rpx solid #eaeaea;
+  position: sticky; /* 浣跨敤sticky瀹氫綅 */
   top: 0;
-  z-index: 100;
-  margin: 0;
-  padding: 0;
+  z-index: 9999;
+  background-color: #fff; /* 纭繚鑳屾櫙鑹� */
+  /* 鍑忓皬tabs楂樺害 */
+  height: 100rpx;
   box-sizing: border-box;
 }
 
-/* 閫夐」鍗¢」 */
-.tab-item {
+/* 绉婚櫎鏃х殑tab-container鏍峰紡 */
+
+
+
+/* 绉婚櫎杩囧害鐨凜SS瑙勫垯锛屼繚鎸佺畝娲佺殑tabs鏍峰紡 */
+
+/* 鏍囩椤甸」鏍峰紡 - 浼樺寲甯冨眬 */
+.tab {
   flex: 1;
-  width: 25%; /* 鏄庣‘璁剧疆姣忎釜閫夐」鍗″崰25%瀹藉害 */
+  text-align: center;
+  font-size: 29rpx;
+  color: #666;
+  position: relative;
+  padding: 12rpx 0;
   display: flex;
   flex-direction: column;
   align-items: center;
   justify-content: center;
-  padding: 20rpx 5rpx;
-  position: relative;
   transition: all 0.3s ease;
-  box-sizing: border-box;
+  border-radius: 16rpx;
+  margin: 0 4rpx;
 }
 
-.tab-item.active {
-  background-color: #f0f8ff;
+.tab.active {
+  color: #0052d9;
+  font-weight: 500;
+  /* 娣诲姞娓愬彉鑳屾櫙鑹� */
+  background: linear-gradient(135deg, #e6f3ff 0%, #f0f8ff 100%);
+  box-shadow: 0 2rpx 8rpx rgba(0, 82, 217, 0.15);
 }
 
-.tab-item.active::after {
+.tab.active::after {
   content: '';
   position: absolute;
   bottom: 0;
   left: 50%;
   transform: translateX(-50%);
-  width: 60rpx;
+  width: 50rpx;
   height: 4rpx;
-  background-color: #1890FF;
+  background: linear-gradient(90deg, #0052d9 0%, #1890ff 100%);
   border-radius: 2rpx;
 }
 
-/* 閫夐」鍗″浘鏍� */
+/* 娣诲姞鎮仠鏁堟灉 */
+.tab:hover {
+  background: linear-gradient(135deg, #f5f5f5 0%, #fafafa 100%);
+  transform: translateY(-1rpx);
+  box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
+}
+
+.tab.active:hover {
+  background: linear-gradient(135deg, #d9ecff 0%, #e6f3ff 100%);
+  transform: translateY(-1rpx);
+  box-shadow: 0 4rpx 12rpx rgba(0, 82, 217, 0.2);
+}
+
+/* 鏍囩椤靛浘鏍� */
 .tab-icon {
-  width: 48rpx;
-  height: 48rpx;
-  margin-bottom: 8rpx;
+  width: 36rpx;
+  height: 36rpx;
+  margin-bottom: 6rpx;
   transition: all 0.3s ease;
 }
 
-.tab-item.active .tab-icon {
+.tab.active .tab-icon {
   transform: scale(1.1);
   filter: brightness(0) saturate(100%) invert(41%) sepia(96%) saturate(1408%) hue-rotate(200deg) brightness(96%) contrast(103%);
 }
 
-.tab-item:not(.active) .tab-icon {
+.tab:not(.active) .tab-icon {
   filter: brightness(0) saturate(100%) invert(60%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(95%) contrast(85%);
 }
 
-/* 閫夐」鍗℃枃瀛� */
+/* 鏍囩椤垫枃瀛� */
 .tab-name {
   font-size: 22rpx;
   color: #666;
@@ -89,11 +136,12 @@
   overflow: hidden;
   text-overflow: ellipsis;
   max-width: 100%;
+  margin-bottom: 2rpx;
 }
 
-.tab-item.active .tab-name {
-  color: #1890FF;
-  font-weight: 600;
+.tab.active .tab-name {
+  color: #0052d9;
+  font-weight: 500;
 }
 
 /* 鍐呭鍖哄煙 */
@@ -101,8 +149,22 @@
   padding: 0;
   margin: 0;
   width: 100%;
-  min-height: calc(100vh - 140rpx);
   box-sizing: border-box;
+  /* 浣跨敤flex: 1濉厖鍓╀綑绌洪棿 */
+  flex: 1;
+  min-height: 0; /* 鍏佽flex椤圭洰鏀剁缉 */
+  overflow-y: auto; /* 鍨傜洿婊氬姩 */
+  overflow-x: hidden; /* 闅愯棌姘村钩婊氬姩 */
+  /* 闅愯棌婊氬姩鏉� */
+  -ms-overflow-style: none;  /* IE and Edge */
+  scrollbar-width: none;  /* Firefox */
+  /* 涓簍abs鐣欏嚭绌洪棿 */
+  margin-top: 0;
+}
+
+/* 闅愯棌Webkit娴忚鍣ㄧ殑婊氬姩鏉� */
+.content-area::-webkit-scrollbar {
+  display: none;
 }
 
 /* 閫夐」鍗″唴瀹� */
@@ -110,6 +172,7 @@
   width: 100%;
   background: white;
   border-radius: 0;
+  /* 杩樺師鍐呰竟璺� */
   padding: 20rpx 0;
   box-shadow: none;
   animation: fadeIn 0.3s ease-in-out;
@@ -134,10 +197,268 @@
   font-size: 32rpx;
   font-weight: 600;
   color: #333;
+  /* 杩樺師宸﹀彸杈硅窛 */
   margin: 0 20rpx 20rpx 20rpx;
   display: block;
   width: calc(100% - 40rpx);
   box-sizing: border-box;
+}
+
+/* 姘旇薄绔欓�夋嫨鍣� */
+.weather-station-selector {
+  /* 杩樺師宸﹀彸杈硅窛 */
+  margin: 10rpx 20rpx;
+  background: white;
+  border-radius: 12rpx;
+  padding: 20rpx;
+  box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
+}
+
+.picker-container {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+
+.picker-label {
+  font-size: 28rpx;
+  color: #666;
+  font-weight: 500;
+}
+
+.picker-value {
+  display: flex;
+  align-items: center;
+  gap: 12rpx;
+  font-size: 30rpx;
+  color: #333;
+  font-weight: 600;
+}
+
+.picker-arrow {
+  width: 24rpx;
+  height: 24rpx;
+  opacity: 0.6;
+}
+
+/* 姘旇薄绔欎俊鎭崱鐗� */
+.weather-info-card {
+  /* 杩樺師宸﹀彸杈硅窛 */
+  margin: 20rpx;
+  background: white;
+  border-radius: 16rpx;
+  padding: 24rpx;
+  box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.1);
+}
+
+/* 鐘舵�佹爮 */
+.status-bar {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 24rpx;
+  padding-bottom: 16rpx;
+  border-bottom: 1rpx solid #f0f0f0;
+}
+
+.status-item {
+  display: flex;
+  align-items: center;
+  gap: 8rpx;
+}
+
+.status-indicator {
+  width: 12rpx;
+  height: 12rpx;
+  border-radius: 50%;
+}
+
+.status-indicator.online {
+  background: #52c41a;
+  box-shadow: 0 0 8rpx rgba(82, 196, 26, 0.4);
+}
+
+.status-indicator.offline {
+  background: #ff4d4f;
+  box-shadow: 0 0 8rpx rgba(255, 77, 79, 0.4);
+}
+
+.status-text {
+  font-size: 26rpx;
+  color: #666;
+  font-weight: 500;
+}
+
+.refresh-btn {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  gap: 8rpx;
+  padding: 12rpx 20rpx;
+  min-width: 100rpx;
+  background: #1890ff;
+  color: white;
+  border-radius: 24rpx;
+  font-size: 24rpx;
+  transition: all 0.3s ease;
+  position: relative;
+}
+
+.refresh-btn:active {
+  transform: scale(0.95);
+  background: #096dd9;
+}
+
+.refresh-icon {
+  width: 28rpx;
+  height: 28rpx;
+  filter: brightness(0) invert(1);
+  left: 16rpx;
+}
+
+.refresh-text {
+  text-align: center;
+
+}
+
+/* 姘旇薄鏁版嵁缃戞牸 */
+.weather-data-grid {
+  display: grid;
+  grid-template-columns: 1fr 1fr;
+  gap: 20rpx;
+  margin-bottom: 24rpx;
+}
+
+.weather-data-item {
+  display: flex;
+  align-items: center;
+  gap: 16rpx;
+  padding: 24rpx;
+  background: #f8f9fa;
+  border-radius: 16rpx;
+  border-left: 4rpx solid;
+  transition: all 0.3s ease;
+  min-height: 120rpx;
+  box-sizing: border-box;
+}
+
+.weather-data-item:active {
+  transform: scale(0.98);
+}
+
+.weather-data-item.humidity {
+  border-left-color: #1890ff;
+}
+
+.weather-data-item.temperature {
+  border-left-color: #ff4d4f;
+}
+
+.weather-data-item.uv {
+  border-left-color: #faad14;
+}
+
+.weather-data-item.light {
+  border-left-color: #52c41a;
+}
+
+.weather-data-item.rainfall {
+  border-left-color: #722ed1;
+}
+
+.weather-data-item.wind-speed {
+  border-left-color: #13c2c2;
+}
+
+.weather-data-item.wind-direction {
+  border-left-color: #eb2f96;
+}
+
+.data-icon {
+  width: 56rpx;
+  height: 56rpx;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  background: white;
+  border-radius: 12rpx;
+  box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
+  flex-shrink: 0;
+}
+
+.data-icon image {
+  width: 36rpx;
+  height: 36rpx;
+}
+
+.data-content {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  gap: 8rpx;
+  min-width: 0;
+  overflow: hidden;
+}
+
+.data-label {
+  font-size: 26rpx;
+  color: #333;
+  font-weight: 500;
+  line-height: 1.4;
+}
+
+.data-value {
+  font-size: 36rpx;
+  color: #1890ff;
+  font-weight: 700;
+  line-height: 1.2;
+}
+
+/* 椋庡悜鏄剧ず */
+.wind-direction-display {
+  display: flex;
+  align-items: center;
+  gap: 8rpx;
+}
+
+.wind-arrow {
+  width: 24rpx;
+  height: 24rpx;
+  transition: transform 0.3s ease;
+}
+
+/* 鏈�鍚庢洿鏂版椂闂� */
+.last-update {
+  text-align: center;
+  padding-top: 16rpx;
+  border-top: 1rpx solid #f0f0f0;
+}
+
+.update-text {
+  font-size: 24rpx;
+  color: #999;
+}
+
+/* 鏃犳暟鎹彁绀� */
+.no-data {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  padding: 80rpx 20rpx;
+  color: #999;
+}
+
+.no-data-icon {
+  width: 120rpx;
+  height: 120rpx;
+  margin-bottom: 20rpx;
+  opacity: 0.5;
+}
+
+.no-data-text {
+  font-size: 28rpx;
+  color: #999;
 }
 
 /* 鍝嶅簲寮忛�傞厤 */
@@ -155,6 +476,25 @@
     padding: 16rpx 2rpx;
     width: 25%; /* 纭繚灏忓睆骞曚笅涔熷潎鍒� */
   }
+  
+  /* 姘旇薄绔欐暟鎹」鍝嶅簲寮忓瓧浣� */
+  .weather-data-item .data-label {
+    font-size: 22rpx;
+  }
+  
+  .weather-data-item .data-value {
+    font-size: 28rpx;
+  }
+  
+  .weather-data-item .data-icon {
+    width: 50rpx;
+    height: 50rpx;
+  }
+  
+  .weather-data-item .data-icon image {
+    width: 32rpx;
+    height: 32rpx;
+  }
 }
 
 /* 瓒呭皬灞忓箷閫傞厤 */
@@ -171,50 +511,106 @@
   .tab-item {
     padding: 12rpx 1rpx;
   }
+  
+  /* 姘旇薄绔欐暟鎹」瓒呭皬灞忓箷鍝嶅簲寮忓瓧浣� */
+  .weather-data-item .data-label {
+    font-size: 20rpx;
+  }
+  
+  .weather-data-item .data-value {
+    font-size: 24rpx;
+  }
+  
+  .weather-data-item .data-icon {
+    width: 46rpx;
+    height: 46rpx;
+  }
+  
+  .weather-data-item .data-icon image {
+    width: 30rpx;
+    height: 30rpx;
+  }
 }
 
 /* 鎽勫儚澶村垪琛ㄦ牱寮� */
 .camera-list {
   display: flex;
   flex-direction: column;
-  gap: 0;
+  /* gap: 20rpx; */
   margin: 0;
   width: 100%;
+  box-sizing: border-box;
+  /* 纭繚鍦ㄤ笉鍚岃澶囦笂鐨勪竴鑷存�� */
+  max-width: 100vw;
+  overflow-x: hidden;
+  /* 鏂板锛氱Щ闄ゅ乏鍙冲唴杈硅窛锛岀‘淇濆畬鍏ㄥ~鍏� */
+  /* padding: 0; */
+  /* 鏂板锛氬己鍒剁害鏉燂紝闃叉ezplayer瓒呭嚭 */
+  /* contain: layout style paint; */
+  /* 鏂板锛氬己鍒跺乏瀵归綈锛屾棤浠讳綍杈硅窛 */
+  /* left: 0 !important;
+  right: 0 !important; */
 }
 
 .camera-item {
-  width: 100vw;
-  background: #f8f9fa;
-  border-radius: 0;
-  padding: 20rpx;
-  box-shadow: none;
+  width: 100%;
+  max-width: 100%;
+  min-width: 0;
+  background: white;
+  border-radius: 16rpx;
+  /* 绉婚櫎宸﹀彸鍐呰竟璺濓紝纭繚瀹屽叏濉厖 */
+  padding: 24rpx 0;
+  box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.08);
   box-sizing: border-box;
-  margin: 0 0 2rpx 0;
+  margin: 0;
   position: relative;
-  left: 0;
-  right: 0;
+  overflow: hidden;
+  /* 纭繚鍦ㄤ笉鍚岃澶囦笂鐨勬樉绀轰竴鑷存�� */
+  flex-shrink: 0;
+  flex-grow: 0;
+  /* 鏂板锛氬己鍒剁害鏉燂紝闃叉ezplayer瓒呭嚭 */
+  contain: layout style paint;
+  /* 鏂板锛氬己鍒跺乏瀵归綈锛屾棤浠讳綍杈硅窛 */
+  left: 0 !important;
+  right: 0 !important;
 }
 
 /* 鎽勫儚澶村ご閮� */
 .camera-header {
   width: 100%;
+  max-width: 100%;
+  min-width: 0;
   display: flex;
   justify-content: space-between;
   align-items: center;
-  margin-bottom: 16rpx;
+  margin-bottom: 20rpx;
   box-sizing: border-box;
+  /* 闃叉鏂囧瓧婧㈠嚭 */
+  overflow: hidden;
+  margin: 20rpx 10rpx;
 }
 
 .camera-name {
-  font-size: 28rpx;
+  font-size: 32rpx;
   font-weight: 600;
   color: #333;
+  flex: 1;
+  min-width: 0;
+  /* 鏂囧瓧婧㈠嚭澶勭悊 */
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
 }
 
 .camera-status {
   padding: 8rpx 16rpx;
   border-radius: 20rpx;
-  font-size: 22rpx;
+  font-size: 24rpx;
+  font-weight: 500;
+  white-space: nowrap;
+  flex-shrink: 0;
+  /* 纭繚鐘舵�佹爣绛句笉琚帇缂� */
+  min-width: fit-content;
 }
 
 .camera-status.online {
@@ -233,24 +629,402 @@
 .camera-video-container {
   position: relative;
   width: 100%;
-  height: 400rpx;
+  max-width: 100%;
+  min-width: 0;
+  /* height: 400rpx; */
+  /* 绉婚櫎鎵�鏈夎楗版�ф牱寮忥紝纭繚瀹屽叏濉厖 */
   border-radius: 0;
   overflow: hidden;
-  margin-bottom: 16rpx;
+  margin: 0;
+  padding: 0;
   box-sizing: border-box;
+  background-color: transparent;
+  border: none;
+  /* 纭繚鍦ㄤ笉鍚岃澶囦笂鐨勬樉绀轰竴鑷存�� */
+  flex-shrink: 0;
+  /* 闃叉ezplayer瓒呭嚭瀹瑰櫒 - 寮哄寲绾︽潫 */
+  overflow: hidden !important;
+  /* 鏂板锛氱粷瀵瑰畾浣嶇害鏉� */
+  position: relative !important;
+  /* 鏂板锛氬己鍒跺搴︾害鏉燂紝闃叉ezplayer瓒呭嚭 */
+  max-width: 100vw !important;
+  /* 鏂板锛氱‘淇濆鍣ㄤ笉浼氳秴鍑虹埗鍏冪礌 */
+  contain: layout style paint !important;
+  /* 鏂板锛氬己鍒跺乏瀵归綈锛岄槻姝㈠彸绉� */
+  left: 0 !important;
+  right: 0 !important;
+  /* 鏂板锛氬己鍒跺~鍏呮暣涓睆骞� */
+  /* width: 100vw !important;
+  min-width: 100vw !important; */
+}
+
+/* 绉婚櫎璋冭瘯杈规锛岄伩鍏嶅奖鍝峞zplayer鏄剧ず */
+
+/* 鍔犺浇鐘舵�� */
+.video-loading {
+  width: 100%;
+  height: 100%;
+  max-width: 100%;
+  min-width: 0;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  background-color: #f8f9fa;
+  /* 纭繚鍦ㄤ笉鍚岃澶囦笂鐨勬樉绀轰竴鑷存�� */
+  flex-shrink: 0;
+}
+
+.loading-spinner {
+  width: 60rpx;
+  height: 60rpx;
+  border: 4rpx solid #e3e3e3;
+  border-top: 4rpx solid #1890ff;
+  border-radius: 50%;
+  animation: spin 1s linear infinite;
+  margin-bottom: 16rpx;
+  /* 纭繚鍔ㄧ敾鍦ㄤ笉鍚岃澶囦笂鐨勪竴鑷存�� */
+  flex-shrink: 0;
+}
+
+@keyframes spin {
+  0% { transform: rotate(0deg); }
+  100% { transform: rotate(360deg); }
+}
+
+.loading-text {
+  font-size: 26rpx;
+  color: #666;
+  font-weight: 500;
+  text-align: center;
+  /* 纭繚鏂囧瓧鍦ㄤ笉鍚岃澶囦笂鐨勪竴鑷存�� */
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  max-width: 100%;
+}
+
+/* 閿欒鐘舵�� */
+.video-error {
+  width: 100%;
+  height: 100%;
+  max-width: 100%;
+  min-width: 0;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  background-color: #fff2f0;
+  border: 1rpx solid #ffccc7;
+  /* 纭繚鍦ㄤ笉鍚岃澶囦笂鐨勬樉绀轰竴鑷存�� */
+  flex-shrink: 0;
+}
+
+.error-icon {
+  width: 80rpx;
+  height: 80rpx;
+  opacity: 0.6;
+  margin-bottom: 16rpx;
+  filter: grayscale(100%) brightness(0) saturate(100%) invert(27%) sepia(51%) saturate(2878%) hue-rotate(346deg) brightness(104%) contrast(97%);
+  /* 纭繚鍥炬爣鍦ㄤ笉鍚岃澶囦笂鐨勪竴鑷存�� */
+  flex-shrink: 0;
+}
+
+.error-text {
+  font-size: 26rpx;
+  color: #ff4d4f;
+  font-weight: 500;
+  margin-bottom: 20rpx;
+  text-align: center;
+  /* 纭繚鏂囧瓧鍦ㄤ笉鍚岃澶囦笂鐨勪竴鑷存�� */
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  max-width: 100%;
+}
+
+.retry-btn {
+  display: flex;
+  align-items: center;
+  gap: 8rpx;
+  padding: 12rpx 24rpx;
+  background-color: #ff4d4f;
+  color: white;
+  border: none;
+  border-radius: 20rpx;
+  font-size: 24rpx;
+  transition: all 0.3s ease;
+  /* 纭繚鎸夐挳鍦ㄤ笉鍚岃澶囦笂鐨勪竴鑷存�� */
+  flex-shrink: 0;
+  min-width: fit-content;
+}
+
+.retry-btn:active {
+  background-color: #cf1322;
+  transform: scale(0.98);
+}
+
+.retry-icon {
+  width: 24rpx;
+  height: 24rpx;
+  filter: brightness(0) invert(1);
+  /* 纭繚鍥炬爣鍦ㄤ笉鍚岃澶囦笂鐨勪竴鑷存�� */
+  flex-shrink: 0;
+}
+
+/* 鏃犳挱鏀惧湴鍧�鐘舵�� */
+.video-no-url {
+  width: 100%;
+  height: 100%;
+  max-width: 100%;
+  min-width: 0;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  background-color: #f5f5f5;
+  /* 纭繚鍦ㄤ笉鍚岃澶囦笂鐨勬樉绀轰竴鑷存�� */
+  flex-shrink: 0;
+}
+
+.no-url-icon {
+  width: 80rpx;
+  height: 80rpx;
+  opacity: 0.4;
+  margin-bottom: 16rpx;
+  filter: grayscale(100%);
+  /* 纭繚鍥炬爣鍦ㄤ笉鍚岃澶囦笂鐨勪竴鑷存�� */
+  flex-shrink: 0;
+}
+
+.no-url-text {
+  font-size: 26rpx;
+  color: #999;
+  font-weight: 500;
+  text-align: center;
+  /* 纭繚鏂囧瓧鍦ㄤ笉鍚岃澶囦笂鐨勪竴鑷存�� */
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  max-width: 100%;
 }
 
 .video-wrapper {
   position: relative;
   width: 100%;
   height: 100%;
+  max-width: 100%;
+  min-width: 0;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  /* 纭繚鍦ㄤ笉鍚岃澶囦笂鐨勬樉绀轰竴鑷存�� */
+  flex-shrink: 0;
+  /* 闃叉鍐呭婧㈠嚭 */
+  overflow: hidden !important;
+  /* 鏂板锛氱粷瀵瑰畾浣嶇害鏉� */
+  position: relative !important;
+  /* 鏂板锛氱Щ闄ゆ墍鏈夎竟璺濆拰鍐呰竟璺� */
+  margin: 0 !important;
+  padding: 0 !important;
+  /* 鏂板锛氬己鍒跺乏瀵归綈 */
+  left: 0 !important;
+  right: 0 !important;
+}
+
+/* ezplayer缁勪欢鏍峰紡浼樺寲 - 淇瓒呭嚭灞忓箷闂 */
+.video-wrapper ezplayer {
+  width: 100% !important;
+  height: 100% !important;
+  max-width: 100% !important;
+  min-width: 0 !important;
+  border-radius: 12rpx;
+  overflow: hidden !important;
+  /* 纭繚鍦ㄤ笉鍚岃澶囦笂鐨勬樉绀轰竴鑷存�� */
+  flex-shrink: 0;
+  /* 闃叉瓒呭嚭灞忓箷鐨勫叧閿缃� */
+  position: absolute !important;
+  left: 0 !important;
+  right: 0 !important;
+  top: 0 !important;
+  bottom: 0 !important;
+  /* 寮哄埗绾︽潫灏哄 - 淇鏈�灏忓搴﹂棶棰� */
+  max-width: 100% !important;
+  max-height: 100% !important;
+  /* 鏂板锛氬己鍒剁害鏉熷埌鐖跺鍣� */
+  transform: none !important;
+  transform-origin: center center !important;
+  /* 鏂板锛氱‘淇濅笉瓒呭嚭杈圭晫 */
+  clip-path: inset(0 0 0 0) !important;
+  /* 鏂板锛氶槻姝换浣曞舰寮忕殑婧㈠嚭 */
+  contain: layout style paint !important;
+  /* 鏂板锛氬己鍒跺搴︾害鏉燂紝瑕嗙洊ezplayer鐨勬渶灏忓搴﹂檺鍒� */
+  min-width: 0 !important;
+  min-height: 0 !important;
+  /* 鏂板锛氱‘淇濈粍浠跺畬鍏ㄧ害鏉熷湪瀹瑰櫒鍐� */
+  box-sizing: border-box !important;
+  /* 鏂板锛氱Щ闄ゆ墍鏈夎竟璺濆拰鍐呰竟璺� */
+  margin: 0 !important;
+  padding: 0 !important;
+  /* 鏂板锛氬己鍒跺畬鍏ㄥ~鍏呭鍣� */
+  inset: 0 !important;
+}
+
+/* 閽堝ezplayer缁勪欢鐨勭壒娈婄害鏉� */
+.video-wrapper ezplayer {
+  /* 纭繚缁勪欢涓嶄細瓒呭嚭鐖跺鍣� */
+  box-sizing: border-box !important;
+  /* 闃叉姘村钩婊氬姩 */
+  overflow-x: hidden !important;
+  overflow-y: hidden !important;
+  /* 纭繚鍦╢lex瀹瑰櫒涓殑琛屼负 */
+  flex: 0 0 auto !important;
+  /* 闃叉缂╂斁闂 */
+  transform-origin: top left !important;
+  /* 纭繚杈规鍦嗚鐢熸晥 */
+  border-radius: 12rpx !important;
+  /* 鏂板锛氬己鍒跺昂瀵哥害鏉� */
+  min-width: 0 !important;
+  min-height: 0 !important;
+  /* 鏂板锛氶槻姝换浣曞舰寮忕殑鎷変几 */
+  flex-basis: auto !important;
+  flex-grow: 0 !important;
+  flex-shrink: 0 !important;
+  /* 鏂板锛氱‘淇濆畾浣嶆纭� */
+  position: absolute !important;
+  top: 0 !important;
+  left: 0 !important;
+  right: 0 !important;
+  bottom: 0 !important;
+  /* 鏂板锛氬己鍒跺搴﹀拰楂樺害 */
+  width: 100% !important;
+  height: 100% !important;
+}
+
+/* 鏂板锛氫笓闂ㄥ鐞唀zplayer鏆傚仠鐘舵�佺殑鏍峰紡 */
+.video-wrapper ezplayer[data-paused="true"],
+.video-wrapper ezplayer.paused {
+  /* 寮哄埗绾︽潫瀹藉害锛岄槻姝㈣秴鍑哄睆骞� */
+  width: 100% !important;
+  max-width: 100% !important;
+  min-width: 0 !important;
+  /* 纭繚缁勪欢瀹屽叏鍦ㄥ鍣ㄥ唴 */
+  position: absolute !important;
+  left: 0 !important;
+  right: 0 !important;
+  /* 闃叉浠讳綍褰㈠紡鐨勬孩鍑� */
+  overflow: hidden !important;
+  /* 寮哄埗绾︽潫鍒扮埗瀹瑰櫒 */
+  contain: layout style paint !important;
+}
+
+/* 鏂板锛氫娇鐢–SS Grid寮哄埗绾︽潫ezplayer */
+.video-wrapper {
+  display: grid !important;
+  grid-template-columns: 1fr !important;
+  grid-template-rows: 1fr !important;
+  place-items: stretch !important;
+}
+
+/* 鏂板锛氬彧閽堝鎽勫儚澶寸浉鍏冲厓绱犲己鍒剁害鏉� */
+.camera-list,
+.camera-item,
+.camera-video-container,
+.video-wrapper,
+.camera-header,
+.camera-name,
+.camera-status,
+.camera-video-container > ezplayer,
+.video-wrapper > ezplayer {
+  max-width: 100% !important;
+  min-width: 0 !important;
+  box-sizing: border-box !important;
+  overflow: hidden !important;
+}
+
+/* 鏂板锛氬己鍒剁Щ闄ゆ墍鏈夊彲鑳界殑杈硅窛鍜岃楗� */
+.camera-list,
+.camera-item,
+.camera-video-container,
+.video-wrapper {
+  margin: 0 !important;
+  padding: 0 !important;
+  border: none !important;
+  border-radius: 0 !important;
+  box-shadow: none !important;
+  background: transparent !important;
+}
+
+/* 鏂板锛氱壒鍒拡瀵筫zplayer鐨勫己鍒剁害鏉� */
+ezplayer {
+  width: 100vw !important;
+  height: 100% !important;
+  max-width: 100vw !important;
+  max-height: 100% !important;
+  min-width: 100vw !important;
+  min-height: 0 !important;
+  position: absolute !important;
+  left: 0 !important;
+  right: 0 !important;
+  top: 0 !important;
+  bottom: 0 !important;
+  overflow: hidden !important;
+  box-sizing: border-box !important;
+  contain: layout style paint !important;
+  /* 鏂板锛氬己鍒跺~鍏呮暣涓睆骞曞搴� */
+  margin: 0 !important;
+  padding: 0 !important;
+  transform: none !important;
+  transform-origin: center center !important;
+  /* 鏂板锛氬己鍒剁Щ闄ゆ墍鏈夎楗� */
+  border: none !important;
+  border-radius: 0 !important;
+  box-shadow: none !important;
+  background: transparent !important;
+  /* 鏂板锛氬己鍒剁害鏉熷埌灞忓箷杈圭紭 */
+  inset: 0 !important;
+}
+
+.video-wrapper ezplayer {
+  grid-column: 1 !important;
+  grid-row: 1 !important;
+  place-self: stretch !important;
+  /* 寮哄埗瀹屽叏濉厖缃戞牸鍗曞厓鏍� */
+  width: 100% !important;
+  height: 100% !important;
+  max-width: 100% !important;
+  max-height: 100% !important;
+  min-width: 0 !important;
+  min-height: 0 !important;
+}
+
+/* 瑙嗛鍖呰鍣ㄧ殑缁濆瀹氫綅绾︽潫 */
+.video-wrapper {
+  position: relative;
+  width: 100%;
+  height: 100%;
+  max-width: 100%;
+  min-width: 0;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  /* 纭繚鍦ㄤ笉鍚岃澶囦笂鐨勬樉绀轰竴鑷存�� */
+  flex-shrink: 0;
+  /* 闃叉鍐呭婧㈠嚭 */
+  overflow: hidden !important;
+  /* 鏂板锛氱粷瀵瑰畾浣嶇害鏉� */
+  position: relative !important;
 }
 
 .live-player {
   width: 100%;
   height: 100%;
+  max-width: 100%;
+  min-width: 0;
   background-color: #000;
-  border-radius: 0;
+  border-radius: 12rpx;
+  /* 纭繚鍦ㄤ笉鍚岃澶囦笂鐨勬樉绀轰竴鑷存�� */
+  flex-shrink: 0;
 }
 
 .video-overlay {
@@ -363,44 +1137,67 @@
 .video-offline {
   width: 100%;
   height: 100%;
+  max-width: 100%;
+  min-width: 0;
   background-color: #f5f5f5;
   display: flex;
   flex-direction: column;
   align-items: center;
   justify-content: center;
   border-radius: 12rpx;
+  /* 纭繚鍦ㄤ笉鍚岃澶囦笂鐨勬樉绀轰竴鑷存�� */
+  flex-shrink: 0;
 }
 
 .offline-icon {
-  width: 60rpx;
-  height: 60rpx;
-  opacity: 0.5;
+  width: 80rpx;
+  height: 80rpx;
+  opacity: 0.4;
   margin-bottom: 16rpx;
+  filter: grayscale(100%);
+  /* 纭繚鍥炬爣鍦ㄤ笉鍚岃澶囦笂鐨勪竴鑷存�� */
+  flex-shrink: 0;
 }
 
 .offline-text {
-  font-size: 24rpx;
+  font-size: 28rpx;
   color: #999;
+  font-weight: 500;
+  text-align: center;
+  /* 纭繚鏂囧瓧鍦ㄤ笉鍚岃澶囦笂鐨勪竴鑷存�� */
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  max-width: 100%;
 }
 
 /* 鎿嶄綔鎸夐挳 */
 .camera-actions {
   width: 100%;
+  max-width: 100%;
+  min-width: 0;
   display: flex;
   gap: 16rpx;
   box-sizing: border-box;
+  /* 纭繚鍦ㄤ笉鍚岃澶囦笂鐨勬樉绀轰竴鑷存�� */
+  flex-shrink: 0;
 }
 
 .action-btn {
   flex: 1;
-  height: 64rpx;
-  border-radius: 32rpx;
+  height: 72rpx;
+  border-radius: 36rpx;
   font-size: 26rpx;
   border: none;
   display: flex;
   align-items: center;
   justify-content: center;
+  gap: 8rpx;
   transition: all 0.3s ease;
+  box-sizing: border-box;
+  /* 纭繚鎸夐挳鍦ㄤ笉鍚岃澶囦笂鐨勪竴鑷存�� */
+  min-width: 0;
+  overflow: hidden;
 }
 
 .action-btn.primary {
@@ -409,21 +1206,639 @@
 }
 
 .action-btn.primary:active {
-  background-color: #0050b3;
+  background-color: #096dd9;
+  transform: scale(0.98);
 }
 
 .action-btn.secondary {
-  background-color: white;
-  color: #1890FF;
-  border: 1rpx solid #1890FF;
+  background-color: #f5f5f5;
+  color: #666;
+  border: 1rpx solid #d9d9d9;
 }
 
 .action-btn.secondary:active {
-  background-color: #f0f8ff;
+  background-color: #e8e8e8;
+  transform: scale(0.98);
 }
 
-.action-btn.disabled {
-  background-color: #f5f5f5;
-  color: #bfbfbf;
+/* 绂佺敤鐘舵�� */
+.action-btn[disabled] {
+  background-color: #f5f5f5 !important;
+  color: #bfbfbf !important;
+  border-color: #d9d9d9 !important;
   cursor: not-allowed;
+  opacity: 0.6;
+  /* 纭繚绂佺敤鐘舵�佸湪涓嶅悓璁惧涓婄殑涓�鑷存�� */
+  transform: none !important;
+}
+
+.action-btn[disabled]:active {
+  transform: none !important;
+  background-color: #f5f5f5 !important;
+}
+
+.action-btn.primary[disabled] {
+  background-color: #d9d9d9 !important;
+  color: #bfbfbf !important;
+}
+
+.action-btn.secondary[disabled] {
+  background-color: #f5f5f5 !important;
+  color: #bfbfbf !important;
+  border-color: #d9d9d9 !important;
+}
+
+.action-icon {
+  width: 32rpx;
+  height: 32rpx;
+  /* 纭繚鍥炬爣鍦ㄤ笉鍚岃澶囦笂鐨勪竴鑷存�� */
+  flex-shrink: 0;
+}
+
+/* 鍝嶅簲寮忎紭鍖� - 纭繚鍦ㄤ笉鍚岃澶囦笂鐨勪竴鑷存�� */
+@media (max-width: 400px) {
+  .camera-item {
+    padding: 20rpx;
+    margin-bottom: 16rpx;
+  }
+  
+  .camera-header {
+    margin-bottom: 16rpx;
+  }
+  
+  .camera-name {
+    font-size: 28rpx;
+  }
+  
+  .camera-status {
+    font-size: 22rpx;
+    padding: 6rpx 12rpx;
+  }
+  
+  .camera-video-container {
+    height: 320rpx;
+    margin-bottom: 16rpx;
+  }
+  
+  .action-btn {
+    height: 64rpx;
+    font-size: 24rpx;
+  }
+  
+  .action-icon {
+    width: 28rpx;
+    height: 28rpx;
+  }
+}
+
+/* 纭繚鍦ㄤ笉鍚岃澶囦笂鐨勪竴鑷存�� - 棰濆鐨勫吋瀹规�у鐞� */
+.camera-item {
+  /* 闃叉鍦ㄤ笉鍚岃澶囦笂鐨勫竷灞�宸紓 */
+  transform: translateZ(0);
+  backface-visibility: hidden;
+  perspective: 1000px;
+}
+
+.camera-video-container {
+  /* 闃叉鍦ㄤ笉鍚岃澶囦笂鐨勬樉绀哄樊寮� */
+  transform: translateZ(0);
+  backface-visibility: hidden;
+}
+
+/* 淇鍙兘鐨勬孩鍑洪棶棰� */
+.camera-list {
+  max-width: 100%;
+  overflow: hidden;
+  /* 纭繚鍦ㄤ笉鍚岃澶囦笂鐨勪竴鑷存�� */
+  transform: translateZ(0);
+}
+
+.camera-item {
+  overflow: hidden;
+  /* 纭繚鍦ㄤ笉鍚岃澶囦笂鐨勪竴鑷存�� */
+  transform: translateZ(0);
+}
+
+/* 閽堝鐪熸満鐨勭壒娈婁紭鍖� */
+@media screen and (max-device-width: 750px) {
+  .camera-item {
+    /* 鐪熸満涓婂彲鑳介渶瑕佺◢寰皟鏁撮棿璺� */
+    margin-bottom: 16rpx;
+  }
+  
+  .camera-video-container {
+    /* 鐪熸満涓婂彲鑳介渶瑕佺◢寰皟鏁撮珮搴� */
+    height: 380rpx;
+  }
+  
+  .action-btn {
+    /* 鐪熸満涓婂彲鑳介渶瑕佺◢寰皟鏁撮珮搴� */
+    height: 68rpx;
+  }
+}
+
+/* 鍦熷¥澧掓儏绔欎笓鐢ㄦ牱寮� */
+.weather-data-item.soil-item {
+  border-left: 4rpx solid;
+  background: linear-gradient(135deg, #f8f9fa 0%, #ffffff 100%);
+  box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.08);
+  border-radius: 16rpx;
+  padding: 24rpx;
+  margin-bottom: 16rpx;
+  transition: all 0.3s ease;
+}
+
+.weather-data-item.soil-item:active {
+  transform: scale(0.98);
+  box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.12);
+}
+
+/* 鍦熷¥灞�1 - 钃濊壊绯� */
+.weather-data-item.soil-item:nth-child(1),
+.weather-data-item.soil-item:nth-child(2) {
+  border-left-color: #1890ff;
+  background: linear-gradient(135deg, #f0f8ff 0%, #ffffff 100%);
+}
+
+/* 鍦熷¥灞�2 - 缁胯壊绯� */
+.weather-data-item.soil-item:nth-child(3),
+.weather-data-item.soil-item:nth-child(4) {
+  border-left-color: #52c41a;
+  background: linear-gradient(135deg, #f6ffed 0%, #ffffff 100%);
+}
+
+/* 鍦熷¥灞�3 - 姗欒壊绯� */
+.weather-data-item.soil-item:nth-child(5),
+.weather-data-item.soil-item:nth-child(6) {
+  border-left-color: #fa8c16;
+  background: linear-gradient(135deg, #fff7e6 0%, #ffffff 100%);
+}
+
+/* 鍦熷¥灞�4 - 绱壊绯� */
+.weather-data-item.soil-item:nth-child(7),
+.weather-data-item.soil-item:nth-child(8) {
+  border-left-color: #722ed1;
+  background: linear-gradient(135deg, #f9f0ff 0%, #ffffff 100%);
+}
+
+/* 鍦熷¥灞�5 - 绾㈣壊绯� */
+.weather-data-item.soil-item:nth-child(9),
+.weather-data-item.soil-item:nth-child(10) {
+  border-left-color: #f5222d;
+  background: linear-gradient(135deg, #fff1f0 0%, #ffffff 100%);
+}
+
+/* 鍦熷¥澧掓儏绔欐暟鎹綉鏍间紭鍖� */
+.weather-data-grid:has(.soil-item) {
+  grid-template-columns: 1fr 1fr;
+  gap: 16rpx;
+}
+
+/* 鍦熷¥澧掓儏绔欐暟鎹」鍐呭浼樺寲 */
+.weather-data-item.soil-item .data-content {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  gap: 8rpx;
+  min-width: 0; /* 闃叉鍐呭婧㈠嚭 */
+  overflow: hidden; /* 闅愯棌婧㈠嚭鍐呭 */
+}
+
+.weather-data-item.soil-item .data-label {
+  font-size: 26rpx;
+  color: #333;
+  font-weight: 500;
+  line-height: 1.4;
+  white-space: nowrap; /* 闃叉鏍囩鎹㈣ */
+  overflow: hidden; /* 闅愯棌婧㈠嚭鍐呭 */
+  text-overflow: ellipsis; /* 鏄剧ず鐪佺暐鍙� */
+}
+
+.weather-data-item.soil-item .data-value {
+  font-size: 36rpx;
+  color: #1890ff;
+  font-weight: 700;
+  line-height: 1.2;
+  white-space: nowrap; /* 闃叉鏁板�兼崲琛� */
+  overflow: hidden; /* 闅愯棌婧㈠嚭鍐呭 */
+  text-overflow: ellipsis; /* 鏄剧ず鐪佺暐鍙� */
+}
+
+/* 鍦熷¥澧掓儏绔欏浘鏍囦紭鍖� */
+.weather-data-item.soil-item .data-icon {
+  width: 56rpx;
+  height: 56rpx;
+  background: white;
+  border-radius: 12rpx;
+  box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
+  border: 2rpx solid rgba(255, 255, 255, 0.8);
+}
+
+.weather-data-item.soil-item .data-icon image {
+  width: 36rpx;
+  height: 36rpx;
+}
+
+/* 鍦熷¥澧掓儏绔欐偓鍋滄晥鏋� */
+.weather-data-item.soil-item:hover {
+  transform: translateY(-2rpx);
+  box-shadow: 0 8rpx 24rpx rgba(0, 0, 0, 0.15);
+}
+
+/* 鍦熷¥澧掓儏绔欏搷搴斿紡浼樺寲 */
+@media (max-width: 400px) {
+  .weather-data-grid:has(.soil-item) {
+    grid-template-columns: 1fr 1fr;
+    gap: 12rpx;
+  }
+  
+  .weather-data-item.soil-item {
+    padding: 16rpx;
+    margin-bottom: 8rpx;
+  }
+  
+  .weather-data-item.soil-item .data-label {
+    font-size: 22rpx;
+  }
+  
+  .weather-data-item.soil-item .data-value {
+    font-size: 28rpx;
+  }
+  
+  .weather-data-item.soil-item .data-icon {
+    width: 50rpx;
+    height: 50rpx;
+  }
+  
+  .weather-data-item.soil-item .data-icon image {
+    width: 32rpx;
+    height: 32rpx;
+  }
+} 
+
+/* 瓒呭皬灞忓箷鍝嶅簲寮忎紭鍖� */
+@media (max-width: 320px) {
+  .weather-data-grid:has(.soil-item) {
+    grid-template-columns: 1fr 1fr;
+    gap: 8rpx;
+  }
+  
+  .weather-data-item.soil-item {
+    padding: 12rpx;
+    margin-bottom: 6rpx;
+  }
+  
+  .weather-data-item.soil-item .data-label {
+    font-size: 20rpx;
+  }
+  
+  .weather-data-item.soil-item .data-value {
+    font-size: 24rpx;
+  }
+  
+  .weather-data-item.soil-item .data-icon {
+    width: 46rpx;
+    height: 46rpx;
+  }
+  
+  .weather-data-item.soil-item .data-icon image {
+    width: 30rpx;
+    height: 30rpx;
+  }
+}
+
+/* ==================== 姘磋偉鏈烘牱寮� ==================== */
+
+/* 姘磋偉鏈洪�夋嫨鍣� */
+.fertilizer-station-selector {
+  /* 杩樺師宸﹀彸杈硅窛 */
+  margin: 10rpx 20rpx;
+  background: white;
+  border-radius: 12rpx;
+  padding: 20rpx;
+  box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
+}
+
+/* 姘磋偉鏈轰俊鎭崱鐗� */
+.fertilizer-info-card {
+  /* 杩樺師宸﹀彸杈硅窛 */
+  margin: 20rpx;
+  background: white;
+  border-radius: 16rpx;
+  padding: 24rpx;
+  box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.1);
+}
+
+/* 鎺у埗寮�鍏冲尯鍩� */
+.control-switches {
+  margin-bottom: 20rpx;
+  padding: 16rpx 20rpx;
+  background: #f8f9fa;
+  border-radius: 12rpx;
+  border: 1rpx solid #e9ecef;
+}
+
+.section-title {
+  font-size: 26rpx;
+  font-weight: 600;
+  color: #333;
+  margin-bottom: 16rpx;
+  display: block;
+}
+
+.switch-container {
+  display: flex;
+  gap: 60rpx;
+  justify-content: center;
+  align-items: center;
+}
+
+.switch-item {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  gap: 16rpx;
+}
+
+.switch-label {
+  font-size: 24rpx;
+  color: #666;
+  font-weight: 500;
+  white-space: nowrap;
+}
+
+.custom-switch {
+  transform: scale(1.1);
+}
+
+/* 鐩戞祴鏁版嵁鍖哄煙 */
+.monitoring-data {
+  margin-bottom: 24rpx;
+}
+
+.monitoring-data .section-title {
+  margin: 0 0 20rpx 0;
+  padding: 0 20rpx;
+}
+
+/* 姘磋偉鏈烘暟鎹綉鏍� */
+.monitoring-data .data-grid {
+  display: grid;
+  grid-template-columns: 1fr 1fr;
+  gap: 20rpx;
+  margin-bottom: 24rpx;
+}
+
+.monitoring-data .data-item {
+  display: flex;
+  align-items: center;
+  gap: 16rpx;
+  padding: 20rpx;
+  background: #f8f9fa;
+  border-radius: 16rpx;
+  border-left: 4rpx solid;
+  transition: all 0.3s ease;
+  min-height: 100rpx;
+  box-sizing: border-box;
+}
+
+.monitoring-data .data-item:active {
+  transform: scale(0.98);
+}
+
+/* 姘磋偉鏈烘暟鎹」鏍峰紡 */
+.monitoring-data .data-item.pump-status {
+  border-left-color: #1890ff;
+  background: linear-gradient(135deg, #e6f7ff 0%, #ffffff 100%);
+}
+
+.monitoring-data .data-item.waste-flow {
+  border-left-color: #52c41a;
+  background: linear-gradient(135deg, #f6ffed 0%, #ffffff 100%);
+}
+
+.monitoring-data .data-item.fertilizing-duration {
+  border-left-color: #fa8c16;
+  background: linear-gradient(135deg, #fff7e6 0%, #ffffff 100%);
+}
+
+.monitoring-data .data-item.mixing-duration {
+  border-left-color: #722ed1;
+  background: linear-gradient(135deg, #f9f0ff 0%, #ffffff 100%);
+}
+
+.monitoring-data .data-item.mixing-set-time {
+  border-left-color: #13c2c2;
+  background: linear-gradient(135deg, #e6fffb 0%, #ffffff 100%);
+}
+
+.monitoring-data .data-item.fertilizing-set-time {
+  border-left-color: #eb2f96;
+  background: linear-gradient(135deg, #fff0f6 0%, #ffffff 100%);
+}
+
+/* 鐘舵�佸窘绔� */
+.status-badge {
+  padding: 8rpx 16rpx;
+  border-radius: 20rpx;
+  font-size: 24rpx;
+  font-weight: 600;
+  text-align: center;
+  min-width: 80rpx;
+}
+
+.status-badge.normal {
+  background: #f6ffed;
+  color: #52c41a;
+  border: 1rpx solid #b7eb8f;
+}
+
+.status-badge.abnormal {
+  background: #fff2f0;
+  color: #ff4d4f;
+  border: 1rpx solid #ffccc7;
+}
+
+/* 姘磋偉鏈烘暟鎹」鍥炬爣 */
+.monitoring-data .data-item .data-icon {
+  width: 56rpx;
+  height: 56rpx;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  background: white;
+  border-radius: 12rpx;
+  box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
+  flex-shrink: 0;
+}
+
+.monitoring-data .data-item .data-icon image {
+  width: 36rpx;
+  height: 36rpx;
+}
+
+/* 姘磋偉鏈烘暟鎹」鍐呭 */
+.monitoring-data .data-item .data-content {
+  flex: 1;
+  display: flex;
+  flex-direction: column;
+  gap: 8rpx;
+  min-width: 0;
+  overflow: hidden;
+}
+
+.monitoring-data .data-item .data-label {
+  font-size: 26rpx;
+  color: #333;
+  font-weight: 500;
+  line-height: 1.4;
+}
+
+.monitoring-data .data-item .data-value {
+  font-size: 36rpx;
+  color: #1890ff;
+  font-weight: 700;
+  line-height: 1.2;
+}
+
+/* 姘磋偉鏈哄搷搴斿紡浼樺寲 */
+@media (max-width: 400px) {
+  .control-switches {
+    padding: 12rpx 16rpx;
+    margin-bottom: 16rpx;
+  }
+  
+  .section-title {
+    font-size: 24rpx;
+    margin-bottom: 12rpx;
+  }
+  
+  .switch-container {
+    gap: 40rpx;
+  }
+  
+  .switch-item {
+    gap: 12rpx;
+  }
+  
+  .switch-label {
+    font-size: 22rpx;
+  }
+  
+  .custom-switch {
+    transform: scale(1.0);
+  }
+  
+  .monitoring-data .data-grid {
+    grid-template-columns: 1fr;
+    gap: 16rpx;
+  }
+  
+  .monitoring-data .data-item {
+    padding: 20rpx;
+  }
+  
+  .monitoring-data .data-item .data-label {
+    font-size: 24rpx;
+  }
+  
+  .monitoring-data .data-item .data-value {
+    font-size: 32rpx;
+  }
+  
+  .monitoring-data .data-item .data-icon {
+    width: 50rpx;
+    height: 50rpx;
+  }
+  
+  .monitoring-data .data-item .data-icon image {
+    width: 32rpx;
+    height: 32rpx;
+  }
+} 
+
+/* ezplayer缁勪欢鏍峰紡 - 闃叉鍙樺舰鍜岃秴鍑哄睆骞� */
+.video-wrapper ezplayer {
+  /* 鍩虹灏哄绾︽潫 */
+  width: 100% !important;
+  height: 100% !important;
+  max-width: 100% !important;
+  max-height: 100% !important;
+  min-width: 0 !important;
+  min-height: 0 !important;
+  
+  /* 浣嶇疆绾︽潫 */
+  position: relative !important;
+  left: 0 !important;
+  right: 0 !important;
+  top: 0 !important;
+  bottom: 0 !important;
+  
+  /* 婧㈠嚭鎺у埗 */
+  overflow: hidden !important;
+  clip-path: inset(0 0 0 0) !important;
+  
+  /* 鍙樻崲绾︽潫 */
+  transform: none !important;
+  transform-origin: center center !important;
+  
+  /* 甯冨眬绾︽潫 */
+  contain: layout style paint !important;
+  flex-basis: auto !important;
+  flex-grow: 0 !important;
+  flex-shrink: 0 !important;
+  
+  /* 鐩掓ā鍨嬬害鏉� */
+  box-sizing: border-box !important;
+  margin: 0 !important;
+  padding: 0 !important;
+  
+  /* 娓叉煋浼樺寲 */
+  backface-visibility: hidden !important;
+  perspective: 1000px !important;
+  will-change: auto !important;
+  
+  /* 鐪熸満鐗规畩澶勭悊 */
+  -webkit-transform: none !important;
+  -webkit-transform-origin: center center !important;
+  -webkit-backface-visibility: hidden !important;
+  -webkit-perspective: 1000px !important;
+}
+
+/* 鐪熸満涓婄殑鐗规畩绾︽潫 */
+@media screen and (max-device-width: 750px) {
+  .video-wrapper ezplayer {
+    /* 鐪熸満涓婃洿涓ユ牸鐨勭害鏉� */
+    max-width: 100vw !important;
+    max-height: 100vh !important;
+    left: 0 !important;
+    right: 0 !important;
+    top: 0 !important;
+    bottom: 0 !important;
+    
+    /* 闃叉鐪熸満涓婄殑缂╂斁闂 */
+    -webkit-transform: scale(1) !important;
+    transform: scale(1) !important;
+    
+    /* 鐪熸満涓婄殑婧㈠嚭鎺у埗 */
+    overflow: hidden !important;
+    clip: rect(0, auto, auto, 0) !important;
+  }
+}
+
+/* 鏆傚仠鐘舵�佺殑鐗规畩澶勭悊 */
+.video-wrapper ezplayer[data-paused="true"] {
+  /* 鏆傚仠鏃朵繚鎸佸昂瀵� */
+  width: 100% !important;
+  height: 100% !important;
+  max-width: 100% !important;
+  max-height: 100% !important;
+  
+  /* 鏆傚仠鏃堕槻姝㈠彉褰� */
+  transform: none !important;
+  -webkit-transform: none !important;
+  
+  /* 鏆傚仠鏃剁殑婧㈠嚭鎺у埗 */
+  overflow: hidden !important;
+  clip-path: inset(0 0 0 0) !important;
 } 
\ No newline at end of file
diff --git a/project.config.json b/project.config.json
index afe1a45..f46c9a2 100644
--- a/project.config.json
+++ b/project.config.json
@@ -17,7 +17,8 @@
       "ignore": [],
       "disablePlugins": [],
       "outputPath": ""
-    }
+    },
+    "condition": true
   },
   "condition": {},
   "editorSetting": {
diff --git a/project.private.config.json b/project.private.config.json
index 92ec537..e555d42 100644
--- a/project.private.config.json
+++ b/project.private.config.json
@@ -5,5 +5,5 @@
     "compileHotReLoad": true,
     "urlCheck": false
   },
-  "libVersion": "trial"
+  "libVersion": "3.9.1"
 }
\ No newline at end of file
diff --git a/utils/projectConfig.js b/utils/projectConfig.js
index 5f5c602..543a770 100644
--- a/utils/projectConfig.js
+++ b/utils/projectConfig.js
@@ -1,10 +1,11 @@
 // 椤圭洰閰嶇疆锛屽寘鍚悇椤圭洰鐨勪笓鏈夎缃�
 // 鏈嶅姟鍣ㄥ湴鍧�閰嶇疆
 const SERVER_INFO = {
-  URL_233: 'https://sp.dayuyanjiuyuan.top/',
+  URL_233: 'https://wanzheng.dayuyanjiuyuan.top/',
   URL_55: 'https://irrigate.dayuyanjiuyuan.top/',
-  URL_166: 'https://no253541tf71.vicp.fun/',
-  URL_121: 'https://shifanqu1.dayuyanjiuyuan.top/',
+  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/'
 };
 
@@ -15,6 +16,7 @@
     operatorId: '2025040415305200007', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
     needLogin: false, // 涓嶉渶瑕佺櫥褰�
     loginType: 'code', // 楠岃瘉鐮佺櫥褰�
+    monitor:false,//鏄惁鍙互杩涘叆缁煎悎绔欑洃娴�
     serverId: '55',
     get serverUrl() {
       return SERVER_INFO.URL_55;
@@ -26,6 +28,7 @@
     operatorId: '2025033115305200006', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
     needLogin: false, // 涓嶉渶瑕佺櫥褰�
     loginType: 'code', // 楠岃瘉鐮佺櫥褰�
+    monitor:true,//鏄惁鍙互杩涘叆缁煎悎绔欑洃娴�
     serverId: '121',
     get serverUrl() {
       return SERVER_INFO.URL_121;
@@ -37,6 +40,7 @@
     operatorId: '', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
     needLogin: true, // 闇�瑕佺櫥褰�
     loginType: 'code', // 璐﹀彿瀵嗙爜鐧诲綍  account
+    monitor:true,//鏄惁鍙互杩涘叆缁煎悎绔欑洃娴�
     serverId: '166',
     get serverUrl() {
       return SERVER_INFO.URL_166;
@@ -48,6 +52,7 @@
     operatorId: '', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId 2025041710412400006
     needLogin: true, // 闇�瑕佺櫥褰�
     loginType: 'code', // 璐﹀彿瀵嗙爜鐧诲綍
+    monitor:false,//鏄惁鍙互杩涘叆缁煎悎绔欑洃娴�
     serverId: '121',
     get serverUrl() {
       return SERVER_INFO.URL_121;
@@ -59,6 +64,7 @@
     operatorId: '', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
     needLogin: true, // 涓嶉渶瑕佺櫥褰�
     loginType: 'code', // 楠岃瘉鐮佺櫥褰�
+    monitor:false,//鏄惁鍙互杩涘叆缁煎悎绔欑洃娴�
     serverId: '121',
     get serverUrl() {
       return SERVER_INFO.URL_121;
@@ -70,6 +76,7 @@
     operatorId: '', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
     needLogin: true, // 涓嶉渶瑕佺櫥褰�
     loginType: 'code', // 璐﹀彿瀵嗙爜鐧诲綍
+    monitor:false,//鏄惁鍙互杩涘叆缁煎悎绔欑洃娴�
     serverId: '233',
     get serverUrl() {
       return SERVER_INFO.URL_233;
@@ -81,6 +88,7 @@
     operatorId: '2025051317031200006', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
     needLogin: false, // 涓嶉渶瑕佺櫥褰�
     loginType: 'code', // 璐﹀彿瀵嗙爜鐧诲綍
+    monitor:false,//鏄惁鍙互杩涘叆缁煎悎绔欑洃娴�
     serverId: '233',
     get serverUrl() {
       return SERVER_INFO.URL_233;

--
Gitblit v1.8.0