From 61e89d748cc7f5456c20866e672a4bde153534f1 Mon Sep 17 00:00:00 2001
From: zuoxiao <zuoxiao>
Date: 星期一, 21 四月 2025 17:18:53 +0800
Subject: [PATCH] 优化项目配置,重构项目URL管理逻辑,改为使用动态配置;更新灌溉组详情页面,添加详细信息展示和请求逻辑,提升用户体验;更新首页项目选择器,支持动态项目列表展示。

---
 pages/groupDetail/groupDetail.js           |  205 +++++++++++----
 pages/home/home.js                         |  185 ++++++++++++-
 api/config.js                              |   34 --
 pages/groupDetail/groupDetail.wxml         |   22 +
 pages/groupDetail/groupDetail.wxss         |   55 +++
 pages/createIrrigation/createIrrigation.js |   23 +
 pages/home/home.wxml                       |   35 --
 utils/projectConfig.js                     |  139 +++++++--
 pages/home/home.wxss                       |   73 ++---
 9 files changed, 540 insertions(+), 231 deletions(-)

diff --git a/api/config.js b/api/config.js
index f3763c3..cf4a428 100644
--- a/api/config.js
+++ b/api/config.js
@@ -1,19 +1,8 @@
 const {
   ENV
 } = require('./env')
+const { PROJECT_CONFIG } = require('../utils/projectConfig')
 let BASEURL
-
-const PROJECT_URLS = {
-  JYG: 'https://irrigate.dayuyanjiuyuan.top/', // 鍢夊唱鍏抽」鐩�
-  MQ: 'https://shifanqu1.dayuyanjiuyuan.top/', // 姘戝嫟椤圭洰
-  TEST: 'https://no253541tf71.vicp.fun/', // test椤圭洰
-  SCHOOL: 'https://school.dayuyanjiuyuan.top/', // 瀛︽牎椤圭洰
-  JC:'https://shifanqu1.dayuyanjiuyuan.top/',
-  GSCLT:'https://irrigate.dayuyanjiuyuan.top/'//鐢樿們鍐滅闄㈠磾榫欏ぉ
-  // TEST:'http://192.168.40.182:8087/'// test椤圭洰
-  // MQ: 'https://no253541tf71.vicp.fun/'    // 姘戝嫟椤圭洰
-  // TEST: 'http://192.168.40.166:54321/'
-}
 
 // 灏濊瘯浠庢湰鍦板瓨鍌ㄨ幏鍙栧凡閫夋嫨鐨勯」鐩�
 let selectedProject = 'JYG'; // 榛樿涓哄槈宄叧椤圭洰
@@ -41,31 +30,22 @@
   console.error('鑾峰彇宸查�夋嫨椤圭洰澶辫触:', e);
 }
 
-switch (ENV) {
-  case 'production':
-    BASEURL = PROJECT_URLS[selectedProject] || PROJECT_URLS.JYG;
-    break;
-  case 'test':
-    // BASEURL 灏嗘牴鎹敤鎴烽�夋嫨鐨勯」鐩姩鎬佽缃�
-    BASEURL = PROJECT_URLS[selectedProject] || PROJECT_URLS.JYG;
-    break;
-  default:
-    BASEURL = PROJECT_URLS[selectedProject] || PROJECT_URLS.JYG;
-    break;
-}
+// 鏍规嵁鐜鍜岄」鐩缃瓸ASEURL
+BASEURL = PROJECT_CONFIG[selectedProject]?.serverUrl || PROJECT_CONFIG.JYG.serverUrl;
 
 // 瀵煎嚭鍔ㄦ�佽缃� BASEURL 鐨勫嚱鏁�
 function setBaseUrl(project) {
-  if (PROJECT_URLS[project]) {
-    BASEURL = PROJECT_URLS[project];
+  const serverUrl = PROJECT_CONFIG[project]?.serverUrl;
+  if (serverUrl) {
+    BASEURL = serverUrl;
     console.log('鍔ㄦ�佽缃� BASEURL:', BASEURL);
     return true;
   }
+  console.error('椤圭洰閰嶇疆涓嶅瓨鍦ㄦ垨鏈缃湇鍔″櫒鍦板潃:', project);
   return false;
 }
 
 module.exports = {
   BASEURL, // 椤圭洰鎺ュ彛鍦板潃锛屾敮鎸佸鍩熷悕
-  PROJECT_URLS,
   setBaseUrl
 }
\ No newline at end of file
diff --git a/pages/createIrrigation/createIrrigation.js b/pages/createIrrigation/createIrrigation.js
index 6915e8f..14c2a4c 100644
--- a/pages/createIrrigation/createIrrigation.js
+++ b/pages/createIrrigation/createIrrigation.js
@@ -303,10 +303,25 @@
    * 璺宠浆鍒拌疆鐏岀粍璇︽儏椤�
    */
   navigateToGroupDetail: function (e) {
-    const {
-      groupIndex
-    } = e.currentTarget.dataset;
-    // TODO: 瀹炵幇璺宠浆閫昏緫
+    const { groupIndex } = e.currentTarget.dataset;
+    const group = this.data.selectedProject.groups[groupIndex];
+    
+    // 鏋勫缓URL鍙傛暟
+    const params = {
+      projectName: this.data.selectedProject.name,
+      groupName: group.name,
+      groupId: group.id
+    };
+    
+    // 鏋勫缓URL鏌ヨ瀛楃涓�
+    const queryString = Object.keys(params)
+      .map(key => `${key}=${encodeURIComponent(params[key])}`)
+      .join('&');
+    
+    // 璺宠浆鍒拌疆鐏岀粍璇︽儏椤�
+    wx.navigateTo({
+      url: `/pages/groupDetail/groupDetail?${queryString}`
+    });
   },
 
   /**
diff --git a/pages/groupDetail/groupDetail.js b/pages/groupDetail/groupDetail.js
index 3a75ef0..600a6b4 100644
--- a/pages/groupDetail/groupDetail.js
+++ b/pages/groupDetail/groupDetail.js
@@ -46,74 +46,157 @@
       refreshing: true
     });
     
-    console.log('鍔犺浇鍙栨按鍙f暟鎹紝鐏屾簤鐘舵��:', this.data.isIrrigating);
+    console.log('寮�濮嬪姞杞借疆鐏岀粍璇︽儏锛実roupId:', this.data.groupId);
     
-    // 妯℃嫙鏁版嵁
-    let mockData = {
-      waterOutlets: []
-    };
-    
-    // 鐢熸垚鍙栨按鍙f暟鎹紝鎵�鏈夊彇姘村彛閮芥湁鍛戒护鐘舵��
-    mockData.waterOutlets = [
-      {
-        id: 1,
-        name: '鍙栨按鍙� A-1',
-        status: 'online',
-        commandStatus: 'sent' // 鍛戒护宸蹭笅鍙�
-      },
-      {
-        id: 2,
-        name: '鍙栨按鍙� A-2',
-        status: 'online',
-        commandStatus: 'unsent' // 鍛戒护鏈笅鍙�
-      },
-      {
-        id: 3,
-        name: '鍙栨按鍙� A-3',
-        status: 'offline',
-        commandStatus: 'unsent' // 鍛戒护鏈笅鍙�
+    // 妫�鏌piBaseUrl鏄惁瀛樺湪
+    if (!app.globalData.apiBaseUrl) {
+      try {
+        // 浠巆onfig妯″潡鑾峰彇鍩虹URL
+        const config = require('../../api/config');
+        const { PROJECT_CONFIG } = require('../../utils/projectConfig');
+        
+        // 鑾峰彇褰撳墠閫変腑鐨勯」鐩爣璇�
+        const tag = wx.getStorageSync('projectTag') || app.globalData.tag || 'mq';
+        
+        // 鏍规嵁tag鎵惧埌瀵瑰簲椤圭洰閰嶇疆
+        let selectedProject = 'MQ'; // 榛樿涓烘皯鍕ら」鐩�
+        for (const key in PROJECT_CONFIG) {
+          if (PROJECT_CONFIG[key].tag === tag) {
+            selectedProject = key;
+            break;
+          }
+        }
+        
+        // 璁剧疆apiBaseUrl
+        app.globalData.apiBaseUrl = PROJECT_CONFIG[selectedProject].serverUrl;
+        console.log('浠庨厤缃腑鑾峰彇apiBaseUrl:', app.globalData.apiBaseUrl);
+      } catch (error) {
+        console.error('鑾峰彇apiBaseUrl澶辫触:', error);
+        // 浣跨敤璇锋眰搴撲腑鐨勬柟娉�
+        const { get } = require('../../api/request');
+        
+        get({
+          url: '/wx/irrigation/getGroupDetails',
+          data: { groupId: this.data.groupId },
+          isShowLoding: true
+        }).then(res => {
+          if (res.success) {
+            this.handleGroupDetailsResponse(res);
+          } else {
+            wx.showToast({
+              title: res.msg || '鑾峰彇鏁版嵁澶辫触',
+              icon: 'none'
+            });
+          }
+        }).catch(err => {
+          console.error('璇锋眰澶辫触:', err);
+          wx.showToast({
+            title: '缃戠粶閿欒',
+            icon: 'none'
+          });
+        }).finally(() => {
+          this.setData({
+            refreshing: false
+          });
+        });
+        
+        return; // 宸茬粡浣跨敤璇锋眰搴撳鐞嗭紝鐩存帴杩斿洖
       }
-    ];
+    }
     
-    // 妯℃嫙缃戠粶璇锋眰寤惰繜
-    setTimeout(() => {
+    // 浣跨敤wx.request鍙戦�佽姹�
+    wx.request({
+      url: `${app.globalData.apiBaseUrl}/wx/irrigation/getGroupDetails`,
+      method: 'GET',
+      data: {
+        groupId: this.data.groupId
+      },
+      header: {
+        'content-type': 'application/json',
+        'Authorization': wx.getStorageSync('token') || '',
+        'tag': wx.getStorageSync('projectTag') || app.globalData.tag || '',
+        'appId': app.globalData.AppID || ''
+      },
+      success: (res) => {
+        console.log('杞亴缁勮鎯呮帴鍙h繑鍥�:', res.data);
+        
+        if (res.data && res.data.success) {
+          this.handleGroupDetailsResponse(res.data);
+        } else {
+          wx.showToast({
+            title: res.data.msg || '鑾峰彇鏁版嵁澶辫触',
+            icon: 'none'
+          });
+          this.setData({
+            refreshing: false
+          });
+        }
+      },
+      fail: (err) => {
+        console.error('璇锋眰澶辫触:', err);
+        // 灏濊瘯浣跨敤璇锋眰搴撻噸璇�
+        this.retryUsingRequestLib();
+      }
+    });
+  },
+  
+  /**
+   * 浣跨敤璇锋眰搴撻噸璇曡幏鍙栨暟鎹�
+   */
+  retryUsingRequestLib: function() {
+    console.log('浣跨敤璇锋眰搴撻噸璇曡幏鍙栨暟鎹�');
+    const { get } = require('../../api/request');
+    
+    get({
+      url: '/wx/irrigation/getGroupDetails',
+      data: { groupId: this.data.groupId },
+      isShowLoding: true
+    }).then(res => {
+      if (res.success) {
+        this.handleGroupDetailsResponse(res);
+      } else {
+        wx.showToast({
+          title: res.msg || '鑾峰彇鏁版嵁澶辫触',
+          icon: 'none'
+        });
+      }
+    }).catch(err => {
+      console.error('璇锋眰搴撻噸璇曞け璐�:', err);
+      wx.showToast({
+        title: '缃戠粶閿欒',
+        icon: 'none'
+      });
+    }).finally(() => {
       this.setData({
-        waterOutletList: mockData.waterOutlets,
         refreshing: false
       });
-      console.log('璁剧疆鍙栨按鍙f暟鎹畬鎴�:', this.data.waterOutletList);
-    }, 1000);
+    });
+  },
+  
+  /**
+   * 澶勭悊杞亴缁勮鎯呭搷搴旀暟鎹�
+   */
+  handleGroupDetailsResponse: function(response) {
+    const data = response.content;
     
-    // 瀹為檯椤圭洰涓簲璇ヤ娇鐢╳x.request鑾峰彇鏁版嵁
-    // wx.request({
-    //   url: `https://your-api-url/groups/${this.data.groupId}/waterOutlets`,
-    //   method: 'GET',
-    //   success: (res) => {
-    //     if (res.data && res.data.code === 0) {
-    //       this.setData({
-    //         waterOutletList: res.data.data.waterOutlets,
-    //         refreshing: false
-    //       });
-    //     } else {
-    //       wx.showToast({
-    //         title: '鑾峰彇鏁版嵁澶辫触',
-    //         icon: 'none'
-    //       });
-    //       this.setData({
-    //         refreshing: false
-    //       });
-    //     }
-    //   },
-    //   fail: () => {
-    //     wx.showToast({
-    //       title: '缃戠粶閿欒',
-    //       icon: 'none'
-    //     });
-    //     this.setData({
-    //       refreshing: false
-    //     });
-    //   }
-    // });
+    // 澶勭悊鍙栨按鍙f暟鎹�
+    const waterOutletList = data.intakes.map(item => {
+      return {
+        id: item.rtuAddr, // 浣跨敤rtuAddr浣滀负ID
+        name: item.intakeName,
+        rtuAddr: item.rtuAddr,
+        status: item.isOnLine ? 'online' : 'offline'
+      };
+    });
+    
+    this.setData({
+      projectName: data.projectName || this.data.projectName,
+      groupName: data.groupName || this.data.groupName,
+      waterOutletList: waterOutletList,
+      refreshing: false
+    });
+    
+    console.log('璁剧疆鍙栨按鍙f暟鎹畬鎴�:', this.data.waterOutletList);
   },
 
   /**
diff --git a/pages/groupDetail/groupDetail.wxml b/pages/groupDetail/groupDetail.wxml
index 512385b..1619d88 100644
--- a/pages/groupDetail/groupDetail.wxml
+++ b/pages/groupDetail/groupDetail.wxml
@@ -3,7 +3,10 @@
   <view class="page-header">
     <view class="header-content">
       <view class="project-info">
-        <view class="project-name">{{projectName}}</view>
+        <view class="project-name">
+          <text class="project-label">鎵�灞為」鐩細</text>
+          <text>{{projectName}}</text>
+        </view>
         <view class="group-name">{{groupName}}</view>
       </view>
     </view>
@@ -32,15 +35,18 @@
       <block wx:for="{{waterOutletList}}" wx:key="id">
         <view class="valve-item">
           <view class="valve-info">
-            <view class="valve-name">
-              <text>{{item.name}}</text>
-              <view class="valve-status-inline {{item.status === 'online' ? 'online' : 'offline'}}">
-                {{item.status === 'online' ? '鍦ㄧ嚎' : '绂荤嚎'}}
-              </view>
+            <view class="valve-name-container">
+              <text class="name-text">{{item.name}}</text>
+            </view>
+            <view class="valve-rtu-addr">
+              <text class="rtu-label">璁惧鍦板潃: </text>
+              <text class="rtu-value">{{item.rtuAddr}}</text>
             </view>
           </view>
-          <view class="command-status {{item.commandStatus}}">
-            {{item.commandStatus === 'sent' ? '鍛戒护宸蹭笅鍙�' : '鍛戒护鏈笅鍙�'}}
+          <view class="valve-status-container">
+            <view class="valve-status-inline {{item.status === 'online' ? 'online' : 'offline'}}">
+              {{item.status === 'online' ? '鍦ㄧ嚎' : '绂荤嚎'}}
+            </view>
           </view>
         </view>
       </block>
diff --git a/pages/groupDetail/groupDetail.wxss b/pages/groupDetail/groupDetail.wxss
index b614d46..78bdfba 100644
--- a/pages/groupDetail/groupDetail.wxss
+++ b/pages/groupDetail/groupDetail.wxss
@@ -27,6 +27,13 @@
   font-size: 28rpx;
   color: #666666;
   margin-bottom: 10rpx;
+  display: flex;
+  align-items: center;
+}
+
+.project-label {
+  color: #999999;
+  margin-right: 8rpx;
 }
 
 .group-name {
@@ -61,21 +68,51 @@
 
 .valve-info {
   flex: 1;
+  margin-right: 20rpx;
+  overflow: hidden;
 }
 
-.valve-name {
+.valve-name-container {
   font-size: 32rpx;
   font-weight: 500;
   color: #333333;
+  margin-bottom: 12rpx;
+  width: 100%;
+  overflow: hidden;
+}
+
+.name-text {
+  display: inline-block;
+  max-width: 100%;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.valve-rtu-addr {
+  font-size: 24rpx;
+  color: #666666;
   display: flex;
   align-items: center;
-  flex-wrap: wrap;
+}
+
+.rtu-label {
+  color: #999999;
+  white-space: nowrap;
+}
+
+.rtu-value {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
 }
 
 .valve-status-container {
   display: flex;
   flex-direction: column;
   align-items: flex-end;
+  justify-content: center;
+  min-width: 100rpx;
 }
 
 .valve-status {
@@ -100,24 +137,28 @@
 .valve-status-inline {
   font-size: 24rpx;
   font-weight: 500;
-  padding: 4rpx 12rpx;
-  border-radius: 20rpx;
-  margin-left: 12rpx;
-  display: inline-flex;
+  padding: 8rpx 20rpx;
+  border-radius: 30rpx;
+  display: flex;
   align-items: center;
   justify-content: center;
-  height: 32rpx;
+  height: 36rpx;
   line-height: 1;
+  min-width: 80rpx;
+  text-align: center;
+  white-space: nowrap;
 }
 
 .valve-status-inline.online {
   background-color: rgba(82, 196, 26, 0.1);
   color: #52C41A;
+  border: 1rpx solid rgba(82, 196, 26, 0.3);
 }
 
 .valve-status-inline.offline {
   background-color: rgba(245, 34, 45, 0.1);
   color: #F5222D;
+  border: 1rpx solid rgba(245, 34, 45, 0.3);
 }
 
 /* 鍛戒护鐘舵�佹牱寮� */
diff --git a/pages/home/home.js b/pages/home/home.js
index 02da0b4..9f9c353 100644
--- a/pages/home/home.js
+++ b/pages/home/home.js
@@ -4,12 +4,13 @@
     get,
     post
 } = require('../../api/request.js');
-const {
-    PROJECT_URLS
-} = require('../../api/config.js');
+const config = require('../../api/config.js');
 const {
     PROJECT_CONFIG
 } = require('../../utils/projectConfig.js');
+const {
+    ENV
+} = require('../../api/env.js');
 
 Page({
 
@@ -42,7 +43,8 @@
         isFromLogin: false,
         showTipDialog: '',
         projectConfig: PROJECT_CONFIG, // 娣诲姞椤圭洰閰嶇疆鍒癲ata涓�
-        showInfoDialog: false
+        showInfoDialog: false,
+        projectList: []
     },
 
     openValve: function (e) {
@@ -93,6 +95,10 @@
      */
     onLoad(options) {
         console.log('home椤甸潰onLoad寮�濮嬶紝鍙傛暟:', options);
+        
+        // 鍒濆鍖栭」鐩垪琛ㄦ暟鎹�
+        this.initProjectList();
+        
         //褰撳紑闃�鎴愬姛鍚庤皟鐢ㄥ埛鏂�
         if (options.param === "1" || options.param === "2") {
             this.setData({
@@ -124,6 +130,44 @@
         }, 100);
     },
 
+    // 鍒濆鍖栭」鐩垪琛ㄦ暟鎹�
+    initProjectList() {
+        // 灏哖ROJECT_CONFIG瀵硅薄杞崲涓烘暟缁勶紝鏂逛究鍦ㄨ鍥句腑閬嶅巻
+        const projectList = Object.entries(PROJECT_CONFIG).map(([key, config]) => ({
+            key: key, // 浣跨敤key浣滀负椤圭洰鏍囪瘑(JYG銆丮Q绛�)
+            tag: config.tag, // 淇濈暀tag瀛楁锛堝師閰嶇疆涓凡鏈夌殑鏍囪瘑锛屽ym銆乵q绛夛級
+            displayName: config.displayName, // 鏄剧ず鍚嶇О
+            ...config // 鍏朵粬閰嶇疆灞炴��
+        }));
+        
+        // 鑾峰彇褰撳墠宸查�夋嫨鐨勯」鐩紝榛樿涓篔YG
+        let currentSelectedProject = 'JYG';
+        
+        // 灏濊瘯浠庡叏灞�鍙橀噺鑾峰彇
+        const app = getApp();
+        if (app && app.globalData && app.globalData.selectedProject) {
+            currentSelectedProject = app.globalData.selectedProject;
+        } else {
+            // 灏濊瘯浠庢湰鍦板瓨鍌ㄨ幏鍙�
+            try {
+                const savedProject = wx.getStorageSync('selectedProject');
+                if (savedProject) {
+                    currentSelectedProject = savedProject;
+                }
+            } catch (e) {
+                console.error('浠庢湰鍦板瓨鍌ㄨ幏鍙栭」鐩け璐�:', e);
+            }
+        }
+        
+        // 璁剧疆鍒伴〉闈㈡暟鎹腑
+        this.setData({ 
+            projectList,
+            selectedProject: currentSelectedProject
+        });
+        
+        console.log('椤圭洰鍒楄〃宸插垵濮嬪寲:', projectList, '褰撳墠閫変腑椤圭洰:', currentSelectedProject);
+    },
+
     // 鏂板鐨勫垵濮嬪寲椤甸潰杈呭姪鍑芥暟锛屽垎绂诲嚭onLoad涓殑閫昏緫浠ヤ究寤惰繜鎵ц
     initializePage(options, fromLogin) {
         // 妫�鏌ユ槸鍚﹀凡閫夋嫨椤圭洰
@@ -142,9 +186,12 @@
                     });
 
                     // 璁剧疆 baseUrl
-                    const baseUrl = PROJECT_URLS[project];
-                    getApp().globalData.baseUrl = baseUrl;
-                    getApp().globalData.selectedProject = project;
+                    const serverUrl = PROJECT_CONFIG[project]?.serverUrl;
+                    if (serverUrl) {
+                        getApp().globalData.baseUrl = serverUrl;
+                        getApp().globalData.selectedProject = project;
+                        console.log('璁剧疆baseUrl:', serverUrl);
+                    }
 
                     // 鏍规嵁椤圭洰璁剧疆瀵瑰簲鐨則ag
                     const projectConfig = PROJECT_CONFIG[project];
@@ -364,23 +411,36 @@
         const currentProject = getApp().globalData.selectedProject;
         const projectConfig = PROJECT_CONFIG[currentProject];
 
-        // 濡傛灉褰撳墠椤圭洰閰嶇疆涓轰笉闇�瑕佺櫥褰曪紝鍒欐彁绀虹敤鎴蜂笉鍙В缁�
+        // 濡傛灉褰撳墠椤圭洰閰嶇疆涓轰笉闇�瑕佺櫥褰曪紝鍒欐彁绀虹敤鎴峰苟鎵撳紑椤圭洰閫夋嫨寮圭獥
         if (projectConfig && !projectConfig.needLogin) {
-            wx.showToast({
-                title: '褰撳墠鐢ㄦ埛涓嶅彲瑙g粦',
-                icon: 'none',
-                duration: 2000
+            wx.showModal({
+                title: '鍒囨崲椤圭洰',
+                content: '鏄惁纭畾瑙g粦锛�',
+                confirmText: '纭',
+                cancelText: '鍙栨秷',
+                success: (res) => {
+                    if (res.confirm) {
+                        // 鏄剧ず椤圭洰閫夋嫨寮圭獥
+                        this.setData({
+                            showProjectDialog: true
+                        });
+                    }
+                }
             });
             return;
         }
 
+        // 濡傛灉宸茬櫥褰曪紝鏄剧ず瑙g粦纭瀵硅瘽妗�
         if (getApp().globalData.isLoggedIn) {
             wx.showModal({
                 title: '瑙g粦纭',
-                content: '纭畾瑕佽В缁戝綋鍓嶈处鍙峰悧锛�',
+                content: '纭畾瑕佽В缁戝綋鍓嶈处鍙峰悧锛熻В缁戝悗灏嗘棤娉曚娇鐢ㄧ浉鍏冲姛鑳斤紝闇�閲嶆柊缁戝畾銆�',
+                confirmText: '纭瑙g粦',
+                confirmColor: '#e34d59',
+                cancelText: '鍙栨秷',
                 success: (res) => {
                     if (res.confirm) {
-                        this.unBindPost()
+                        this.unBindPost();
                     }
                 }
             });
@@ -388,7 +448,7 @@
             wx.showToast({
                 title: '杩樻湭缁戝畾',
                 icon: 'error'
-            })
+            });
         }
     },
     //杞亴
@@ -939,6 +999,8 @@
 
     // 澶勭悊椤圭洰閫夋嫨纭
     handleProjectConfirm() {
+        console.log('寮�濮嬪鐞嗛」鐩�夋嫨纭', this.data.selectedProject, this.data.projectList);
+        
         if (!this.data.selectedProject) {
             wx.showToast({
                 title: '璇烽�夋嫨椤圭洰',
@@ -950,7 +1012,11 @@
         // 鑾峰彇褰撳墠宸查�夐」鐩拰鏂伴�夋嫨鐨勯」鐩�
         const currentProject = getApp().globalData.selectedProject;
         const newProject = this.data.selectedProject;
+        console.log('褰撳墠椤圭洰:', currentProject, '鏂伴�夋嫨椤圭洰:', newProject);
+        console.log('PROJECT_CONFIG 鍐呭:', PROJECT_CONFIG);
+        
         const projectConfig = PROJECT_CONFIG[newProject];
+        console.log('閫夋嫨鐨勯」鐩厤缃�:', projectConfig);
 
         if (!projectConfig) {
             wx.showToast({
@@ -963,6 +1029,30 @@
         // 妫�鏌ユ槸鍚﹀垏鎹簡椤圭洰锛堝鏋滃綋鍓嶉」鐩笉鍚屼簬鏂伴�夋嫨鐨勯」鐩級
         const isProjectChanged = currentProject && currentProject !== newProject;
 
+        // 娣诲姞浜屾纭
+        const confirmText = isProjectChanged 
+            ? `纭畾瑕佸皢椤圭洰浠�"${PROJECT_CONFIG[currentProject]?.displayName || '褰撳墠椤圭洰'}"鍒囨崲鍒�"${projectConfig.displayName}"鍚楋紵`
+            : `纭畾閫夋嫨"${projectConfig.displayName}"椤圭洰鍚楋紵`;
+            
+        wx.showModal({
+            title: isProjectChanged ? '纭鍒囨崲椤圭洰' : '纭閫夋嫨椤圭洰',
+            content: confirmText,
+            confirmText: isProjectChanged ? '纭鍒囨崲' : '纭',
+            cancelText: '鍙栨秷',
+            success: (res) => {
+                if (res.confirm) {
+                    // 鐢ㄦ埛纭閫夋嫨锛岀户缁鐞�
+                    this.processProjectSelection(currentProject, newProject, projectConfig, isProjectChanged);
+                } else {
+                    // 鐢ㄦ埛鍙栨秷锛屼笉杩涜浠讳綍鎿嶄綔
+                    console.log('鐢ㄦ埛鍙栨秷浜嗛」鐩�夋嫨');
+                }
+            }
+        });
+    },
+
+    // 澶勭悊椤圭洰閫夋嫨鐨勫悗缁搷浣�
+    processProjectSelection(currentProject, newProject, projectConfig, isProjectChanged) {
         // 濡傛灉鍒囨崲浜嗛」鐩紝鍏堟竻闄ょ櫥褰曠姸鎬�
         if (isProjectChanged) {
             console.log(`姝e湪浠庨」鐩� ${currentProject} 鍒囨崲鍒� ${newProject}锛屽皢娓呴櫎鐧诲綍鐘舵�乣);
@@ -994,13 +1084,21 @@
 
         // 淇濆瓨椤圭洰閫夋嫨鍒版湰鍦板瓨鍌�
         storage.setItem('selectedProject', newProject).then(() => {
-            // 鏇存柊 BASEURL
-            const baseUrl = PROJECT_URLS[newProject];
-
+            // 璋冪敤setBaseUrl鏉ユ洿鏂板熀纭�URL
+            try {
+                console.log('灏濊瘯璁剧疆鍩虹URL锛岄」鐩�:', newProject);
+                const result = config.setBaseUrl(newProject);
+                console.log('璁剧疆鍩虹URL缁撴灉:', result);
+            } catch (error) {
+                console.error('璁剧疆鍩虹URL鍑洪敊:', error);
+                // 缁х画鎵ц锛屼笉涓柇娴佺▼
+            }
+            
             // 鏇存柊鍏ㄥ眬鍙橀噺
             getApp().globalData = getApp().globalData || {};
-            getApp().globalData.baseUrl = baseUrl;
             getApp().globalData.selectedProject = newProject;
+            getApp().globalData.baseUrl = projectConfig.serverUrl;
+            getApp().globalData.serverId = projectConfig.serverId;
 
             // 閫氳繃閰嶇疆瀵硅薄缁熶竴璁剧疆椤圭洰鍙傛暟
             getApp().globalData.tag = projectConfig.tag;
@@ -1038,7 +1136,7 @@
                 storage.setItem(`${newProject}_params`, params);
             }
 
-            console.log('宸插垏鎹㈠埌椤圭洰:', projectConfig.displayName, '鍩熷悕:', baseUrl, 'tag:', getApp().globalData.tag);
+            console.log('宸插垏鎹㈠埌椤圭洰:', projectConfig.displayName, '鏈嶅姟鍣�:', projectConfig.serverId, 'tag:', getApp().globalData.tag);
 
             this.setData({
                 showProjectDialog: false
@@ -1595,4 +1693,51 @@
       return `${hours}:${minutes}:${seconds}`;
     },
   
+    // 鍒囨崲椤圭洰
+    switchProject(e) {
+        const project = e.currentTarget.dataset.project;
+        
+        if (config.setBaseUrl(project)) {
+            this.setData({
+                selectedProject: project
+            });
+            
+            // 淇濆瓨閫夋嫨鍒版湰鍦板瓨鍌�
+            try {
+                wx.setStorageSync('selectedProject', project);
+            } catch (e) {
+                console.error('淇濆瓨椤圭洰閫夋嫨澶辫触:', e);
+            }
+            
+            // 鏇存柊鍏ㄥ眬鍙橀噺
+            const app = getApp();
+            if (app && app.globalData) {
+                app.globalData.selectedProject = project;
+                
+                // 鏍规嵁椤圭洰閰嶇疆璁剧疆鐩稿叧鍙傛暟
+                const projectConfig = PROJECT_CONFIG[project];
+                if (projectConfig) {
+                    app.globalData.tag = projectConfig.tag;
+                    if (!projectConfig.needLogin) {
+                        app.globalData.operator = projectConfig.operatorId;
+                        app.globalData.clientId = projectConfig.operatorId;
+                        app.globalData.isLoggedIn = true;
+                        app.globalData.sessionId = projectConfig.operatorId;
+                        // 濡傛灉鏈塿cId锛屼篃璁剧疆
+                        if (projectConfig.vcId) {
+                            app.globalData.vcId = projectConfig.vcId;
+                        }
+                    }
+                }
+            }
+            
+            // 閲嶆柊鍔犺浇椤甸潰鏁版嵁
+            this.initData();
+        } else {
+            wx.showToast({
+                title: '鍒囨崲椤圭洰澶辫触',
+                icon: 'none'
+            });
+        }
+    },
 })
\ No newline at end of file
diff --git a/pages/home/home.wxml b/pages/home/home.wxml
index eab6ee6..327b1dd 100644
--- a/pages/home/home.wxml
+++ b/pages/home/home.wxml
@@ -98,33 +98,14 @@
         <text class="project-modal-title">璇烽�夋嫨椤圭洰</text>
       </view>
       <view class="project-modal-body">
-       
-        <radio-group class="project-radio-group" bindchange="onProjectChange">
-          <label class="project-radio {{selectedProject === 'JYG' ? 'project-radio-selected' : ''}}">
-            <radio value="JYG" checked="{{selectedProject === 'JYG'}}" color="#1890FF" />
-            <text>鍢夊唱鍏抽」鐩�</text>
-          </label>
-          <label class="project-radio {{selectedProject === 'MQ' ? 'project-radio-selected' : ''}}">
-            <radio value="MQ" checked="{{selectedProject === 'MQ'}}" color="#1890FF" />
-            <text>姘戝嫟椤圭洰</text>
-          </label>
-          <label class="project-radio {{selectedProject === 'TEST' ? 'project-radio-selected' : ''}}">
-            <radio value="TEST" checked="{{selectedProject === 'TEST'}}" color="#1890FF" />
-            <text>娴嬭瘯椤圭洰</text>
-          </label>
-          <label class="project-radio {{selectedProject === 'SCHOOL' ? 'project-radio-selected' : ''}}">
-            <radio value="SCHOOL" checked="{{selectedProject === 'SCHOOL'}}" color="#1890FF" />
-            <text>瀛︽牎椤圭洰</text>
-          </label>
-          <label class="project-radio {{selectedProject === 'JC' ? 'project-radio-selected' : ''}}">
-            <radio value="JC" checked="{{selectedProject === 'JC'}}" color="#1890FF" />
-            <text>閲戞槍椤圭洰</text>
-          </label>
-          <label class="project-radio {{selectedProject === 'GSCLT' ? 'project-radio-selected' : ''}}">
-            <radio value="GSCLT" checked="{{selectedProject === 'GSCLT'}}" color="#1890FF" />
-            <text>鐢樿們鍐滅闄�-宕�</text>
-          </label>
-        </radio-group>
+        <scroll-view scroll-y class="project-scroll-view">
+          <radio-group class="project-radio-group" bindchange="onProjectChange">
+            <label wx:for="{{projectList}}" wx:key="index" class="project-radio {{selectedProject === item.key ? 'project-radio-selected' : ''}}">
+              <radio value="{{item.key}}" checked="{{selectedProject === item.key}}" color="#1890FF" />
+              <text>{{item.displayName}}</text>
+            </label>
+          </radio-group>
+        </scroll-view>
       </view>
       <view class="project-modal-footer">
         <button class="project-modal-btn" disabled="{{!selectedProject}}" bindtap="handleProjectConfirm">纭</button>
diff --git a/pages/home/home.wxss b/pages/home/home.wxss
index 286f2f7..4f09e97 100644
--- a/pages/home/home.wxss
+++ b/pages/home/home.wxss
@@ -633,10 +633,7 @@
     left: 0;
     right: 0;
     bottom: 0;
-    z-index: 9999;
-    display: flex;
-    align-items: center;
-    justify-content: center;
+    z-index: 999;
 }
 
 .project-modal-mask {
@@ -645,12 +642,15 @@
     left: 0;
     right: 0;
     bottom: 0;
-    background-color: rgba(0, 0, 0, 0.6);
+    background-color: rgba(0, 0, 0, 0.5);
 }
 
 .project-modal-content {
-    position: relative;
-    width: 80%;
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    transform: translate(-50%, -50%);
+    width: 85%;
     max-width: 600rpx;
     background-color: #fff;
     border-radius: 16rpx;
@@ -660,72 +660,67 @@
 }
 
 .project-modal-header {
-    padding: 30rpx;
+    padding: 24rpx;
     text-align: center;
-    border-bottom: 1rpx solid #f0f0f0;
-}
-
-.project-modal-title {
-    font-size: 36rpx;
+    font-size: 32rpx;
     font-weight: bold;
-    color: #333;
+    border-bottom: 1rpx solid #eee;
 }
 
 .project-modal-body {
-    padding: 30rpx;
+    padding: 0;
+    max-height: 60vh;
 }
 
-.project-modal-tip {
-    display: block;
-    font-size: 28rpx;
-    color: #999;
-    margin-bottom: 30rpx;
-    text-align: center;
+.project-scroll-view {
+    max-height: 55vh; /* 绋嶅井鍑忓皬楂樺害锛岀‘淇濆湪灏忓睆骞曚笂涔熻兘鐪嬪埌搴曢儴鎸夐挳 */
+    height: auto;
 }
 
 .project-radio-group {
     display: flex;
     flex-direction: column;
-    gap: 20rpx;
+    width: 100%;
 }
 
 .project-radio {
+    padding: 24rpx;
     display: flex;
     align-items: center;
-    padding: 20rpx;
-    background-color: #f5f5f5;
-    border-radius: 8rpx;
+    border-bottom: 1rpx solid #f5f5f5;
+    width: 100%;
+    box-sizing: border-box;
 }
 
-.project-radio-selected {
-    background-color: #e6f4ff;
-    border: 2rpx solid #1890FF;
+.project-radio radio {
+    margin-right: 16rpx;
 }
 
 .project-radio text {
-    margin-left: 10rpx;
-    font-size: 32rpx;
+    font-size: 30rpx;
+    color: #333;
+}
+
+.project-radio-selected {
+    background-color: #f0f9ff;
 }
 
 .project-modal-footer {
-    padding: 30rpx;
-    border-top: 1rpx solid #f0f0f0;
+    padding: 24rpx;
+    border-top: 1rpx solid #eee;
 }
 
 .project-modal-btn {
-    width: 100%;
-    height: 80rpx;
-    line-height: 80rpx;
-    text-align: center;
     background-color: #1890FF;
-    color: #fff;
-    font-size: 32rpx;
+    color: white;
     border-radius: 8rpx;
+    font-size: 28rpx;
+    padding: 16rpx 0;
 }
 
 .project-modal-btn[disabled] {
     background-color: #cccccc;
-    color: #ffffff;
+    color: #666666;
 }
 
 .info-img {
diff --git a/utils/projectConfig.js b/utils/projectConfig.js
index 83ca845..4c14689 100644
--- a/utils/projectConfig.js
+++ b/utils/projectConfig.js
@@ -1,44 +1,107 @@
 // 椤圭洰閰嶇疆锛屽寘鍚悇椤圭洰鐨勪笓鏈夎缃�
+// 鏈嶅姟鍣ㄥ湴鍧�閰嶇疆
+const SERVER_INFO = {
+  URL_233: 'https://sp.dayuyanjiuyuan.top/',
+  URL_55: 'https://irrigate.dayuyanjiuyuan.top/',
+  URL_166: 'https://no253541tf71.vicp.fun/',
+  URL_121: 'https://shifanqu1.dayuyanjiuyuan.top/'
+};
+
 const PROJECT_CONFIG = {
-    JYG: {
-        tag: 'ym',
-        displayName: '鍢夊唱鍏抽」鐩�',
-        operatorId: '2025040415305200007', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
-        needLogin: false // 涓嶉渶瑕佺櫥褰�
-    },
-    MQ: {
-        tag: 'mq',
-        displayName: '姘戝嫟椤圭洰',
-        operatorId: '2025033115305200006', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
-        needLogin: false // 涓嶉渶瑕佺櫥褰�
-    },
-    TEST: {
-        tag: 'ym',
-        displayName: '娴嬭瘯椤圭洰',
-        operatorId: '2024122617295800009', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
-        vcId: '2024122617295800009',
-        needLogin: false // 涓嶉渶瑕佺櫥褰�
-    },
-    SCHOOL: {
-        tag: 'XX',
-        displayName: '瀛︽牎椤圭洰',
-        operatorId: '2025040215305200006', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
-        needLogin: false // 涓嶉渶瑕佺櫥褰�
-    },
-    JC: {
-        tag: 'jc',
-        displayName: '閲戞槍椤圭洰',
-        operatorId: '2025041710412400006', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
-        needLogin: false // 涓嶉渶瑕佺櫥褰�
-    },
-    GSCLT:{
-      tag: 'test',
-      displayName: '鐢樿們鍐滅闄�-宕�',
-      operatorId: '2025041912201400006', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
-      needLogin: false // 涓嶉渶瑕佺櫥褰�
+  JYG: {
+    tag: 'ym',
+    displayName: '鍢夊唱鍏抽」鐩�',
+    operatorId: '2025040415305200007', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
+    needLogin: false, // 涓嶉渶瑕佺櫥褰�
+    serverId: '55',
+    get serverUrl() {
+      return SERVER_INFO.URL_55;
     }
+  },
+  MQ: {
+    tag: 'mq',
+    displayName: '姘戝嫟椤圭洰',
+    operatorId: '2025033115305200006', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
+    needLogin: false, // 涓嶉渶瑕佺櫥褰�
+    serverId: '121',
+    get serverUrl() {
+      return SERVER_INFO.URL_121;
+    }
+  },
+  TEST: {
+    tag: 'ym',
+    displayName: '娴嬭瘯椤圭洰',
+    operatorId: '2024122617295800009', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
+    vcId: '2024122617295800009',
+    needLogin: false, // 涓嶉渶瑕佺櫥褰�
+    serverId: '166',
+    get serverUrl() {
+      return SERVER_INFO.URL_166;
+    }
+  },
+  JC: {
+    tag: 'jc',
+    displayName: '閲戞槍椤圭洰',
+    operatorId: '2025041710412400006', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
+    needLogin: false, // 涓嶉渶瑕佺櫥褰�
+    serverId: '121',
+    get serverUrl() {
+      return SERVER_INFO.URL_121;
+    }
+  },
+  GSCLT: {
+    tag: 'test',
+    displayName: '鐢樿們鍐滅闄�-宕旈緳澶�',
+    operatorId: '2025041912201400006', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
+    needLogin: false, // 涓嶉渶瑕佺櫥褰�
+    serverId: '233',
+    get serverUrl() {
+      return SERVER_INFO.URL_233;
+    }
+  },
+  GSWJ: {
+    tag: 'test',
+    displayName: '鐢樿們鍐滅闄�-鐜嬪',
+    operatorId: '2025042115424500006', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
+    needLogin: false, // 涓嶉渶瑕佺櫥褰�
+    serverId: '233',
+    get serverUrl() {
+      return SERVER_INFO.URL_233;
+    }
+  },
+  GSCLT2: {
+    tag: 'test',
+    displayName: '鐢樿們鍐滅闄�-鏅佺帀浜�',
+    operatorId: '2025042115452400006', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
+    needLogin: false, // 涓嶉渶瑕佺櫥褰�
+    serverId: '233',
+    get serverUrl() {
+      return SERVER_INFO.URL_233;
+    }
+  },
+  GSCLT3: {
+    tag: 'test',
+    displayName: '鐢樿們鍐滅闄�-榛勮檸鐢�',
+    operatorId: '2025042115454100006', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
+    needLogin: false, // 涓嶉渶瑕佺櫥褰�
+    serverId: '233',
+    get serverUrl() {
+      return SERVER_INFO.URL_233;
+    }
+  },
+  GSCLT4: {
+    tag: 'test',
+    displayName: '鐢樿們鍐滅闄�-鏈卞厗瀹�',
+    operatorId: '2025042115455900006', // 缁熶竴ID鐢ㄤ簬operator鍜宑lientId
+    needLogin: false, // 涓嶉渶瑕佺櫥褰�
+    serverId: '233',
+    get serverUrl() {
+      return SERVER_INFO.URL_233;
+    }
+  }
 };
 
 module.exports = {
-    PROJECT_CONFIG
-}; 
\ No newline at end of file
+  PROJECT_CONFIG,
+  SERVER_INFO
+};
\ No newline at end of file

--
Gitblit v1.8.0