From ab8b53407a4d2213b1b3cdaf3cf649ef6c457dae Mon Sep 17 00:00:00 2001
From: zuoxiao <zuoxiao>
Date: 星期一, 28 四月 2025 15:52:19 +0800
Subject: [PATCH] 优化首页项目选择逻辑,添加临时选择变量以支持未确认的项目选择;更新登录页面逻辑,确保从登录页返回时正确刷新数据并处理项目选择确认,提升用户体验。

---
 pages/createIrrigation/createIrrigation.js |  437 +++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 303 insertions(+), 134 deletions(-)

diff --git a/pages/createIrrigation/createIrrigation.js b/pages/createIrrigation/createIrrigation.js
index ce7e83b..14c2a4c 100644
--- a/pages/createIrrigation/createIrrigation.js
+++ b/pages/createIrrigation/createIrrigation.js
@@ -1,4 +1,9 @@
 const app = getApp();
+const {
+  get,
+  post
+} = require('../../api/request');
+const dayjs = require('dayjs');
 
 Page({
   /**
@@ -10,119 +15,152 @@
     startTime: '', // 鐏屾簤寮�濮嬫椂闂�
     pickerValue: '', // 鏃堕棿閫夋嫨鍣ㄧ殑鍊�
     timePickerVisible: false, // 鏃堕棿閫夋嫨鍣ㄦ槸鍚﹀彲瑙�
+    timeInfoVisible: false, // 鏃堕棿鎻愮ず寮圭獥鏄惁鍙
     // 椤圭洰閫夋嫨鍣ㄧ浉鍏�
     projectPickerVisible: false,
     projectPickerValue: [],
     selectedProject: null,
     projectOptions: [],
     totalDuration: 0, // 娣诲姞鎬荤亴婧夋椂闂�
-    // 娴嬭瘯鏁版嵁
-    projectList: [
-      {
-        id: 1,
-        name: '娴嬭瘯椤圭洰涓�',
-        groups: [
-          {
-            id: 101,
-            name: '杞亴缁凙',
-            duration: 30,
-            selected: false
-          },
-          {
-            id: 102,
-            name: '杞亴缁凚',
-            duration: 45,
-            selected: false
-          },
-          {
-            id: 103,
-            name: '杞亴缁凜',
-            duration: 60,
-            selected: false
-          }
-        ]
-      },
-      {
-        id: 2,
-        name: '娴嬭瘯椤圭洰浜�',
-        groups: [
-          {
-            id: 201,
-            name: '杞亴缁�1',
-            duration: 40,
-            selected: false
-          },
-          {
-            id: 202,
-            name: '杞亴缁�2',
-            duration: 50,
-            selected: false
-          }
-        ]
-      },
-      {
-        id: 3,
-        name: '娴嬭瘯椤圭洰涓�',
-        groups: [
-          {
-            id: 301,
-            name: '涓滃尯杞亴缁�',
-            duration: 35,
-            selected: false
-          },
-          {
-            id: 302,
-            name: '瑗垮尯杞亴缁�',
-            duration: 55,
-            selected: false
-          },
-          {
-            id: 303,
-            name: '鍗楀尯杞亴缁�',
-            duration: 25,
-            selected: false
-          }
-        ]
-      }
-    ]
+    // 椤圭洰鍒楄〃
+    projectList: [],
+    // 鏃堕棿閫夋嫨鍣ㄩ�夐」
+    timeOptions: [],
+    // 杞亴缁勫垪琛ㄥ埛鏂扮姸鎬�
+    isRefreshing: false
   },
 
   /**
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
    */
   onLoad: function (options) {
-    // 鍒濆鍖栭」鐩�夋嫨鍣ㄩ�夐」
-    const projectOptions = this.data.projectList.map(project => ({
-      label: project.name,
-      value: project.id
-    }));
-    
+    // 鐢熸垚璁″垝缂栧彿
+    this.generatePlanCode();
+    // 璁剧疆鏃堕棿閫夋嫨鍣ㄧ殑鍒濆鍊�
+    const now = dayjs();
     this.setData({
-      projectOptions: projectOptions // 鐩存帴浣跨敤涓�缁存暟缁勶紝涓嶉渶瑕佸寘瑁呮垚浜岀淮鏁扮粍
+      pickerValue: now.add(8.5, 'hour').format('YYYY-MM-DD HH:mm')
+    });
+    // 鑾峰彇椤圭洰鍒楄〃
+    this.fetchProjects();
+  },
+
+  /**
+   * 鐢熸垚璁″垝缂栧彿
+   */
+  generatePlanCode: function () {
+    const now = dayjs();
+    const dateStr = now.format('YYYY-MM-DD');
+    const randomNum = Math.floor(Math.random() * 10000).toString().padStart(4, '0');
+    const planCode = `${dateStr}${-randomNum}`;
+    this.setData({
+      planCode
     });
   },
 
   /**
-   * 鑾峰彇椤圭洰鍜岃疆鐏岀粍鏁版嵁
+   * 鑾峰彇椤圭洰鍒楄〃
    */
-  fetchProjectsAndGroups: function () {
-    // 杩欓噷鍙互娣诲姞API璇锋眰閫昏緫锛岃幏鍙栫湡瀹炴暟鎹�
-    // wx.request({
-    //   url: 'your-api-url',
-    //   success: (res) => {
-    //     this.setData({
-    //       projectList: res.data
-    //     });
-    //   }
-    // });
+  fetchProjects: function (isShowDiaolog) {
+    return get({
+      url: '/wx/irrigation/getSimpleProjects',
+      isShowLoding: true
+    }).then(res => {
+      if (res.success) {
+        const projectList = res.content.map(project => ({
+          id: project.projectId,
+          name: project.projectName,
+          groupCount: project.groupCount,
+          groups: []
+        }));
+
+        const projectOptions = projectList.map(project => ({
+          label: project.name,
+          value: project.id
+        }));
+
+        this.setData({
+          projectList,
+          projectOptions
+        });
+        if (isShowDiaolog) {
+          this.setData({
+            projectPickerVisible: true
+          });
+        }
+      } else {
+        wx.showToast({
+          title: res.msg || '鑾峰彇椤圭洰鍒楄〃澶辫触',
+          icon: 'none'
+        });
+        return Promise.reject(new Error(res.msg || '鑾峰彇椤圭洰鍒楄〃澶辫触'));
+      }
+    }).catch(err => {
+      console.error('鑾峰彇椤圭洰鍒楄〃澶辫触锛�', err);
+      wx.showToast({
+        title: '鑾峰彇椤圭洰鍒楄〃澶辫触',
+        icon: 'none'
+      });
+      return Promise.reject(err);
+    });
   },
 
   /**
-   * 澶勭悊璁″垝缂栧彿杈撳叆
+   * 鑾峰彇杞亴缁勫垪琛�
    */
-  onPlanCodeInput: function (e) {
-    this.setData({
-      planCode: e.detail.value
+  fetchGroups: function (projectId) {
+    return get({
+      url: '/wx/irrigation/getSimpleGroups',
+      data: {
+        projectId: projectId,
+      },
+      isShowLoding: true
+    }).then(res => {
+      if (res.success) {
+        console.log('杞亴缁勬暟鎹細', res.content);
+
+        // 鏇存柊閫変腑椤圭洰鐨勮疆鐏岀粍淇℃伅
+        const projectList = this.data.projectList.map(project => {
+          if (project.id === projectId) {
+            return {
+              ...project,
+              groups: res.content.map(group => ({
+                id: group.groupId,
+                name: group.groupCode,
+                duration: group.defaultDuration || 0,
+                selected: false,
+                intakeCount: group.intakeCount
+              }))
+            };
+          }
+          return project;
+        });
+
+        // 鏇存柊閫変腑鐨勯」鐩�
+        const selectedProject = projectList.find(project => project.id === projectId);
+        console.log('鏇存柊鍚庣殑閫変腑椤圭洰锛�', selectedProject);
+
+        this.setData({
+          projectList,
+          selectedProject
+        }, () => {
+          // 璁$畻鎬绘椂闂�
+          this.calculateTotalDuration();
+        });
+      } else {
+        wx.showToast({
+          title: res.msg || '鑾峰彇杞亴缁勫垪琛ㄥけ璐�',
+          icon: 'none'
+        });
+        return Promise.reject(new Error(res.msg || '鑾峰彇杞亴缁勫垪琛ㄥけ璐�'));
+      }
+    }).catch(err => {
+      console.error('鑾峰彇杞亴缁勫垪琛ㄥけ璐ワ細', err);
+      wx.showToast({
+        title: '鑾峰彇杞亴缁勫垪琛ㄥけ璐�',
+        icon: 'none'
+      });
+      return Promise.reject(err);
     });
   },
 
@@ -130,6 +168,14 @@
    * 鏄剧ず鏃堕棿閫夋嫨鍣�
    */
   showTimePicker: function () {
+    // 濡傛灉娌℃湁閫夋嫨鏃堕棿锛屼娇鐢ㄥ綋鍓嶆椂闂�
+    if (!this.data.pickerValue) {
+      const now = dayjs();
+      this.setData({
+        pickerValue: now.format('YYYY-MM-DD HH:mm')
+      });
+    }
+
     this.setData({
       timePickerVisible: true
     });
@@ -139,7 +185,9 @@
    * 鏃堕棿閫夋嫨鍣ㄧ‘璁ゅ洖璋�
    */
   onTimePickerConfirm: function (e) {
-    const { value } = e.detail;
+    const {
+      value
+    } = e.detail;
     this.setData({
       timePickerVisible: false,
       startTime: value
@@ -161,7 +209,7 @@
   toggleProject: function (e) {
     const index = e.currentTarget.dataset.index;
     const currentValue = this.data.projectList[index].expanded;
-    
+
     // 鍒涘缓鏂扮殑椤圭洰鍒楄〃锛屽厛灏嗘墍鏈夐」鐩涓烘姌鍙犵姸鎬�
     const newProjectList = this.data.projectList.map((item, idx) => {
       return {
@@ -169,13 +217,13 @@
         expanded: false
       };
     });
-    
+
     // 濡傛灉褰撳墠鐐瑰嚮鐨勯」鐩凡缁忔槸灞曞紑鐘舵�侊紝鍒欎繚鎸佹墍鏈夐」鐩姌鍙�
     // 鍚﹀垯锛屽皢褰撳墠鐐瑰嚮鐨勯」鐩涓哄睍寮�鐘舵��
     if (!currentValue) {
       newProjectList[index].expanded = true;
     }
-    
+
     this.setData({
       projectList: newProjectList
     });
@@ -189,11 +237,11 @@
     const groupIndex = e.currentTarget.dataset.groupIndex;
     const key = `projectList[${projectIndex}].groups[${groupIndex}].selected`;
     const currentValue = this.data.projectList[projectIndex].groups[groupIndex].selected;
-    
+
     this.setData({
       [key]: !currentValue
     });
-    
+
     // 鏇存柊椤圭洰鎬绘椂闀�
     this.updateProjectTotalDuration(projectIndex);
   },
@@ -202,12 +250,16 @@
    * 澶勭悊鏃堕暱杈撳叆
    */
   onDurationInput: function (e) {
-    const { groupIndex } = e.currentTarget.dataset;
+    const {
+      groupIndex
+    } = e.currentTarget.dataset;
     const duration = parseInt(e.detail.value) || 0;
-    
-    const selectedProject = { ...this.data.selectedProject };
+
+    const selectedProject = {
+      ...this.data.selectedProject
+    };
     selectedProject.groups[groupIndex].duration = duration;
-    
+
     this.setData({
       selectedProject
     }, () => {
@@ -222,14 +274,14 @@
   updateProjectTotalDuration: function (projectIndex) {
     const project = this.data.projectList[projectIndex];
     let totalDuration = 0;
-    
+
     // 璁$畻鎵�鏈夐�変腑鐨勮疆鐏岀粍鐨勬椂闀挎�诲拰
     project.groups.forEach(group => {
       if (group.selected) {
         totalDuration += parseInt(group.duration) || 0;
       }
     });
-    
+
     // 鏇存柊椤圭洰鎬绘椂闀�
     const totalDurationKey = `projectList[${projectIndex}].totalDuration`;
     this.setData({
@@ -240,8 +292,11 @@
   /**
    * 闃绘浜嬩欢鍐掓场
    */
-  stopPropagation: function () {
-    // 闃绘浜嬩欢鍐掓场锛岄槻姝㈢偣鍑昏緭鍏ユ鏃惰Е鍙戠埗鍏冪礌鐨勭偣鍑讳簨浠�
+  stopPropagation: function (e) {
+    if (e && e.stopPropagation) {
+      e.stopPropagation();
+    }
+    return false;
   },
 
   /**
@@ -249,15 +304,36 @@
    */
   navigateToGroupDetail: function (e) {
     const { groupIndex } = e.currentTarget.dataset;
-    // TODO: 瀹炵幇璺宠浆閫昏緫
+    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}`
+    });
   },
 
   /**
    * 纭鎸夐挳鐐瑰嚮浜嬩欢
    */
   onConfirm: function () {
-    const { planCode, startTime, selectedProject } = this.data;
-    
+    const {
+      planCode,
+      startTime,
+      selectedProject
+    } = this.data;
+
     if (!planCode) {
       wx.showToast({
         title: '璇疯緭鍏ヨ鍒掔紪鍙�',
@@ -265,15 +341,7 @@
       });
       return;
     }
-    
-    if (!startTime) {
-      wx.showToast({
-        title: '璇烽�夋嫨鐏屾簤寮�濮嬫椂闂�',
-        icon: 'none'
-      });
-      return;
-    }
-    
+
     if (!selectedProject) {
       wx.showToast({
         title: '璇烽�夋嫨椤圭洰',
@@ -282,33 +350,86 @@
       return;
     }
 
-    // TODO: 瀹炵幇纭閫昏緫
-    console.log('鎻愪氦鏁版嵁锛�', {
-      planCode,
-      startTime,
-      project: selectedProject
+    // 鏋勫缓涓婃姤鏁版嵁
+    const schedules = selectedProject.groups.map(group => ({
+      groupId: group.id,
+      duration: parseInt(group.duration) || 0
+    }));
+
+    const requestData = {
+      projectId: selectedProject.id,
+      planName: planCode,
+      startupMode: startTime ? 2 : 1,
+      operatorId: app.globalData.clientId,
+      schedules: schedules
+    };
+
+    // 濡傛灉鏈夊紑濮嬫椂闂达紝娣诲姞鍒拌姹傛暟鎹腑
+    if (startTime) {
+      requestData.planStartTime = startTime;
+    }
+
+    // 鍙戦�佽姹�
+    post({
+      url: '/wx/plan/createPlan',
+      data: requestData,
+      isShowLoding: true
+    }).then(res => {
+      if (res.success) {
+        wx.showToast({
+          title: '鍒涘缓鎴愬姛',
+          icon: 'success'
+        });
+        // 杩斿洖涓婁竴椤碉紝骞朵紶閫掑弬鏁版寚绀洪渶瑕佸埛鏂板垪琛ㄥ苟鍒囨崲鍒板綋鍓嶈鍒掑垪琛�
+        setTimeout(() => {
+          // 浣跨敤鍏ㄥ眬鍙橀噺鏍囪闇�瑕佸埛鏂�
+          const app = getApp();
+          app.globalData.needRefreshIrrigationList = true;
+
+          // 鐩存帴杩斿洖涓婁竴椤�
+          wx.navigateBack({
+            delta: 1
+          });
+        }, 1500);
+      } else {
+        wx.showToast({
+          title: res.msg || '鍒涘缓澶辫触',
+          icon: 'none'
+        });
+      }
+    }).catch(err => {
+      console.error('鍒涘缓璁″垝澶辫触锛�', err);
+      wx.showToast({
+        title: '鍒涘缓澶辫触',
+        icon: 'none'
+      });
     });
   },
 
   // 鏄剧ず椤圭洰閫夋嫨鍣�
   showProjectPicker() {
-    this.setData({
-      projectPickerVisible: true
-    });
+    this.fetchProjects(true)
+
   },
 
   // 椤圭洰閫夋嫨鍣ㄧ‘璁�
   onProjectPickerConfirm(e) {
-    const { value } = e.detail;
+    const {
+      value
+    } = e.detail;
+    console.log('閫夋嫨鐨勯」鐩甀D锛�', value[0]); // 娣诲姞鏃ュ織鏌ョ湅鏁版嵁
     const selectedProject = this.data.projectList.find(project => project.id === value[0]);
-    
+    console.log('鎵惧埌鐨勯」鐩細', selectedProject); // 娣诲姞鏃ュ織鏌ョ湅鏁版嵁
+
     this.setData({
       projectPickerVisible: false,
       selectedProject: selectedProject,
       projectPickerValue: value
     }, () => {
-      // 閫夋嫨椤圭洰鍚庤绠楁�绘椂闂�
-      this.calculateTotalDuration();
+      // 閫夋嫨椤圭洰鍚庤幏鍙栬疆鐏岀粍鍒楄〃
+      if (selectedProject) {
+        this.fetchGroups(selectedProject.id);
+      }
     });
   },
 
@@ -319,16 +440,64 @@
     });
   },
 
-  // 璁$畻鎬荤亴婧夋椂闂�
-  calculateTotalDuration() {
+  /**
+   * 璁$畻鎬荤亴婧夋椂闂�
+   */
+  calculateTotalDuration: function () {
     if (!this.data.selectedProject) return;
-    
+
     const totalDuration = this.data.selectedProject.groups.reduce((sum, group) => {
       return sum + (parseInt(group.duration) || 0);
     }, 0);
-    
+
     this.setData({
       totalDuration
     });
   },
-}); 
\ No newline at end of file
+
+  /**
+   * 杞亴缁勫垪琛ㄤ笅鎷夊埛鏂�
+   */
+  onGroupListRefresh: function () {
+    if (!this.data.selectedProject) {
+      this.setData({
+        isRefreshing: false
+      });
+      return;
+    }
+
+    this.setData({
+      isRefreshing: true
+    });
+
+    this.fetchGroups(this.data.selectedProject.id)
+      .then(() => {
+        this.setData({
+          isRefreshing: false
+        });
+      })
+      .catch(() => {
+        this.setData({
+          isRefreshing: false
+        });
+      });
+  },
+
+  /**
+   * 鏄剧ず鏃堕棿鎻愮ず寮圭獥
+   */
+  showTimeInfo: function () {
+    this.setData({
+      timeInfoVisible: true
+    });
+  },
+
+  /**
+   * 鍏抽棴鏃堕棿鎻愮ず寮圭獥
+   */
+  onTimeInfoConfirm: function () {
+    this.setData({
+      timeInfoVisible: false
+    });
+  },
+});
\ No newline at end of file

--
Gitblit v1.8.0