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