From 7d56f6e20ab87cf6bb78cb5e6d02df0a15f5ed7a Mon Sep 17 00:00:00 2001
From: zuoxiao <zuoxiao>
Date: 星期五, 11 四月 2025 15:40:53 +0800
Subject: [PATCH] 优化灌溉计划页面,添加分页功能和加载更多数据的逻辑;更新样式以提升用户体验,确保在切换标签时只加载必要的数据。

---
 pages/irrigation/irrigation.js |  548 +++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 436 insertions(+), 112 deletions(-)

diff --git a/pages/irrigation/irrigation.js b/pages/irrigation/irrigation.js
index e906d7e..18aac0c 100644
--- a/pages/irrigation/irrigation.js
+++ b/pages/irrigation/irrigation.js
@@ -1,4 +1,7 @@
 // pages/irrigation/irrigation.js
+const { get, post } = require('../../api/request');
+const app = getApp();
+
 Page({
   /**
    * 椤甸潰鐨勫垵濮嬫暟鎹�
@@ -9,115 +12,224 @@
     completedList: [], // 宸插畬鎴愮殑杞亴鍒楄〃
     currentList: [], // 褰撳墠鏄剧ず鐨勫垪琛�
     isRefreshing: false, // 鏄惁姝e湪鍒锋柊
-    isWXRefreshing: false // 寰俊鍘熺敓涓嬫媺鍒锋柊鐘舵��
+    isWXRefreshing: false, // 寰俊鍘熺敓涓嬫媺鍒锋柊鐘舵��
+    projectId: null, // Added to store projectId
+    // 娣诲姞鍒嗛〉鐩稿叧鏁版嵁
+    pageCurr: 1, // 褰撳墠椤电爜锛屼粠1寮�濮�
+    pageSize: 10, // 姣忛〉璁板綍鏁�
+    hasMoreData: true, // 鏄惁杩樻湁鏇村鏁版嵁
+    loadingMore: false // 鏄惁姝e湪鍔犺浇鏇村
   },
 
   /**
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
    */
   onLoad: function (options) {
-    this.loadIrrigationData();
+    // 鑾峰彇椤圭洰ID
+    if (options.projectId) {
+      this.setData({
+        projectId: options.projectId
+      });
+    }
+    
+    // 璁剧疆鍔犺浇鐘舵��
+    wx.showLoading({
+      title: '鍔犺浇涓�',
+      mask: true
+    });
+    
+    // 榛樿鍏堝姞杞藉綋鍓嶇亴婧夎鍒�
+    this.loadIrrigationData()
+      .then(() => {
+        wx.hideLoading();
+      })
+      .catch(() => {
+        wx.hideLoading();
+      });
   },
 
   /**
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
    */
-  onShow: function () {
-    this.loadIrrigationData();
-  },
+  // onShow: function () {
+  //   // 璁剧疆椤甸潰涓哄姞杞戒腑鐘舵��
+  //   wx.showLoading({
+  //     title: '鍔犺浇涓�',
+  //     mask: true
+  //   });
+    
+  //   // 鍏堝姞杞藉綋鍓嶉〉闈㈡墍闇�鐨勬暟鎹�
+  //   const currentTab = this.data.currentTab;
+  //   if (currentTab === 0) {
+  //     // 褰撳墠鏍囩鏄�"褰撳墠鐏屾簤璁″垝"锛屽姞杞借繖涓�
+  //     this.loadIrrigationData()
+  //       .then(() => {
+  //         wx.hideLoading();
+  //       })
+  //       .catch(() => {
+  //         wx.hideLoading();
+  //       });
+  //   } else {
+  //     // 褰撳墠鏍囩鏄�"鍘嗗彶璁″垝"
+  //     // 鍙姞杞界涓�椤垫暟鎹紝淇濈暀鍒嗛〉鐘舵��
+  //     if (this.data.completedList.length === 0) {
+  //       // 濡傛灉鍘嗗彶鍒楄〃涓虹┖锛岄噸缃垎椤电姸鎬�
+  //       this.setData({
+  //         pageCurr: 1,
+  //         hasMoreData: true
+  //       });
+  //     }
+      
+  //     this.loadCompletedIrrigationData()
+  //       .then(() => {
+  //         wx.hideLoading();
+  //       })
+  //       .catch(() => {
+  //         wx.hideLoading();
+  //       });
+  //   }
+  // },
 
   /**
    * 鍔犺浇杞亴鏁版嵁
    */
   loadIrrigationData: function () {
-    // 杩欓噷搴旇璋冪敤API鑾峰彇鏁版嵁
-    // 妯℃嫙鏁版嵁
-    const mockData = {
-      activeList: [
-        {
-          id: '1',
-          title: 'LG-2023-001',
-          status: '鏈彂甯�',
-          irrigationTime: '2023-05-20 08:00 - 17:00'
-        },
-        {
-          id: '2',
-          title: 'LG-2023-002',
-          status: '宸插彂甯�',
-          irrigationTime: '2023-05-22 09:00 - 18:00'
-        },
-        {
-          id: '2',
-          title: 'LG-2023-002',
-          status: '宸插彂甯�',
-          irrigationTime: '2023-05-22 09:00 - 18:00'
-        },  {
-          id: '2',
-          title: 'LG-2023-002',
-          status: '宸插彂甯�',
-          irrigationTime: '2023-05-22 09:00 - 18:00'
-        },  {
-          id: '2',
-          title: 'LG-2023-002',
-          status: '宸插彂甯�',
-          irrigationTime: '2023-05-22 09:00 - 18:00'
-        },
-        {
-          id: '3',
-          title: 'LG-2023-003',
-          status: '鎵ц涓�',
-          irrigationTime: '2023-05-18 07:30 - 16:30',
-          irrigatedTime: '3灏忔椂25鍒嗛挓',
-          irrigatedGroups: '1缁勩��2缁勩��3缁�'
-        },   {
-          id: '2',
-          title: 'LG-2023-002',
-          status: '宸插彂甯�',
-          irrigationTime: '2023-05-22 09:00 - 18:00'
-        },
-        {
-          id: '3',
-          title: 'LG-2023-003',
-          status: '鎵ц涓�',
-          irrigationTime: '2023-05-18 07:30 - 16:30',
-          irrigatedTime: '3灏忔椂25鍒嗛挓',
-          irrigatedGroups: '1缁勩��2缁勩��3缁�'
-        },   {
-          id: '2',
-          title: 'LG-2023-002',
-          status: '宸插彂甯�',
-          irrigationTime: '2023-05-22 09:00 - 18:00'
-        },
-        {
-          id: '3',
-          title: 'LG-2023-003',
-          status: '鎵ц涓�',
-          irrigationTime: '2023-05-18 07:30 - 16:30',
-          irrigatedTime: '3灏忔椂25鍒嗛挓',
-          irrigatedGroups: '1缁勩��2缁勩��3缁�'
-        }
-        
-      ]
-      // completedList: [
-      //   {
-      //     id: '4',
-      //     title: 'LG-2023-004',
-      //     status: '宸插畬鎴�',
-      //     irrigationTime: '2023-05-10 10:00 - 19:00'
-      //   }
-      // ]
-    };
+    return new Promise((resolve, reject) => {
+      get({
+        url: '/wx/plan/getNotCompletePlans'
+      }).then(res => {
+        if (res.success) {
+          const activeList = res.content.map(item => {
+            // 纭繚灏唒lanState杞崲涓哄瓧绗︿覆
+            const planState = String(item.planState);
+            return {
+              id: item.planId,
+              title: item.planName,
+              projectName: item.projectName || '鏈垎閰嶉」鐩�',
+              status: planState,
+              planStartTime: item.planStartTime,
+              planStopTime: item.planStopTime,
+              duration: item.duration,
+              startupMode: item.startupMode
+            };
+          });
 
-    // 妯℃嫙缃戠粶璇锋眰寤惰繜
-    setTimeout(() => {
-      this.setData({
-        activeList: mockData.activeList || [],
-        completedList: mockData.completedList || [],
-        currentList: this.data.currentTab === 0 ? mockData.activeList || [] : mockData.completedList || [],
-        isRefreshing: false, // 缁撴潫鍒锋柊鐘舵��
-        isWXRefreshing: false // 缁撴潫寰俊鍘熺敓涓嬫媺鍒锋柊鐘舵��
+          console.log('杞亴璁″垝鏁版嵁锛�', activeList);
+
+          this.setData({
+            activeList: activeList,
+            currentList: this.data.currentTab === 0 ? activeList : this.data.completedList,
+            isRefreshing: false,
+            isWXRefreshing: false
+          });
+          resolve();
+        } else {
+          wx.showToast({
+            title: res.msg || '鍔犺浇澶辫触',
+            icon: 'none'
+          });
+          reject();
+        }
+      }).catch(err => {
+        console.error('鍔犺浇澶辫触:', err);
+        wx.showToast({
+          title: '鍔犺浇澶辫触',
+          icon: 'none'
+        });
+        this.setData({
+          isRefreshing: false,
+          isWXRefreshing: false
+        });
+        reject();
       });
-    }, 1000);
+    });
+  },
+
+  /**
+   * 鍔犺浇宸插畬鎴愮殑杞亴鏁版嵁
+   */
+  loadCompletedIrrigationData: function () {
+    // 濡傛灉姝e湪鍔犺浇鎴栨病鏈夋洿澶氭暟鎹紝鍒欎笉鍐嶈姹�
+    if (this.data.loadingMore && !this.data.hasMoreData) {
+      return Promise.resolve();
+    }
+    
+    // 璁剧疆鍔犺浇鐘舵��
+    this.setData({
+      loadingMore: true
+    });
+    
+    return new Promise((resolve, reject) => {
+      get({
+        url: '/wx/plan/getCompletedPlans',
+        data: {
+          pageCurr: this.data.pageCurr,
+          pageSize: this.data.pageSize
+        }
+      }).then(res => {
+        if (res.success) {
+          const newCompletedList = res.content.obj ? res.content.obj.map(item => {
+            // 纭繚灏唒lanState杞崲涓哄瓧绗︿覆
+            const planState = String(item.planState);
+            return {
+              id: item.planId,
+              title: item.planName,
+              projectName: item.projectName || '鏈垎閰嶉」鐩�',
+              status: planState,
+              planStartTime: item.planStartTime,
+              planStopTime: item.planStopTime,
+              duration: item.duration,
+              startupMode: item.startupMode
+            };
+          }) : [];
+
+          console.log('宸插畬鎴愯疆鐏岃鍒掓暟鎹細', newCompletedList);
+          
+          // 鑾峰彇鍒嗛〉淇℃伅
+          const pageInfo = {
+            itemTotal: res.content.itemTotal || 0, // 鎬昏褰曟暟
+            pageCurr: res.content.pageCurr || 1,   // 褰撳墠椤电爜
+            pageSize: res.content.pageSize || 20,  // 姣忛〉澶у皬
+            pageTotal: res.content.pageTotal || 1  // 鎬婚〉鏁�
+          };
+          
+          console.log('鍒嗛〉淇℃伅锛�', pageInfo);
+
+          // 鍒ゆ柇鏄惁杩樻湁鏇村鏁版嵁 - 褰撳墠椤靛皬浜庢�婚〉鏁�
+          const hasMoreData = pageInfo.pageCurr < pageInfo.pageTotal;
+
+          // 鍚堝苟鏁版嵁锛岀涓�椤电洿鎺ユ浛鎹紝涔嬪悗鐨勯〉闈㈣拷鍔�
+          const completedList = this.data.pageCurr === 1 ? 
+            newCompletedList : [...this.data.completedList, ...newCompletedList];
+
+          this.setData({
+            completedList: completedList,
+            currentList: this.data.currentTab === 1 ? completedList : this.data.activeList,
+            isRefreshing: false,
+            isWXRefreshing: false,
+            loadingMore: false,
+            hasMoreData: hasMoreData
+          });
+          resolve();
+        } else {
+          this.setData({
+            loadingMore: false
+          });
+          // 涓嶆樉绀烘彁绀猴紝鍥犱负鍙兘鏄湪鍚庡彴鍔犺浇
+          console.error('鍘嗗彶璁″垝鍔犺浇澶辫触:', res.msg);
+          reject();
+        }
+      }).catch(err => {
+        console.error('鍘嗗彶璁″垝鍔犺浇澶辫触:', err);
+        this.setData({
+          isRefreshing: false,
+          isWXRefreshing: false,
+          loadingMore: false
+        });
+        // 涓嶆樉绀烘彁绀猴紝鍥犱负鍙兘鏄湪鍚庡彴鍔犺浇
+        reject();
+      });
+    });
   },
 
   /**
@@ -132,10 +244,58 @@
     const activeList = this.data.activeList || [];
     const completedList = this.data.completedList || [];
     
-    this.setData({
-      currentTab: index,
-      currentList: index === 0 ? activeList : completedList
-    });
+    // 鍒囨崲鏍囩椤垫椂锛岀洿鎺ヤ娇鐢ㄥ凡鍔犺浇鐨勬暟鎹紝涓嶉噸鏂拌姹�
+    if (index === 1) {
+      // 鍒囨崲鍒板巻鍙茶鍒掓爣绛�
+      this.setData({
+        currentTab: index,
+        currentList: completedList
+      });
+      
+      // 濡傛灉鍘嗗彶鍒楄〃涓虹┖锛屾墠杩涜鍔犺浇
+      if (completedList.length === 0) {
+        wx.showLoading({
+          title: '鍔犺浇涓�',
+          mask: true
+        });
+        
+        this.setData({
+          pageCurr: 1,
+          hasMoreData: true,
+          loadingMore: true // 鏄剧ず鍔犺浇鎸囩ず鍣�
+        });
+        
+        this.loadCompletedIrrigationData()
+          .then(() => {
+            wx.hideLoading();
+          })
+          .catch(() => {
+            wx.hideLoading();
+          });
+      }
+    } else {
+      // 鍒囨崲鍒板綋鍓嶇亴婧夎鍒掓爣绛�
+      this.setData({
+        currentTab: index,
+        currentList: activeList
+      });
+      
+      // 濡傛灉褰撳墠鐏屾簤璁″垝鍒楄〃涓虹┖锛屾墠杩涜鍔犺浇
+      if (activeList.length === 0) {
+        wx.showLoading({
+          title: '鍔犺浇涓�',
+          mask: true
+        });
+        
+        this.loadIrrigationData()
+          .then(() => {
+            wx.hideLoading();
+          })
+          .catch(() => {
+            wx.hideLoading();
+          });
+      }
+    }
   },
 
   /**
@@ -145,9 +305,22 @@
     const id = e.currentTarget.dataset.id;
     const status = e.currentTarget.dataset.status;
     
+    console.log('鐐瑰嚮椤圭洰鐘舵��:', status, '绫诲瀷:', typeof status);
+    
+    // 鍒ゆ柇璁″垝鐘舵�侊紝濡傛灉鏄�1(鏈彂甯�)锛屽垯鎻愮ず鐢ㄦ埛
+    if (status === '1' || status === 1) {
+      wx.showModal({
+        title: '鎻愮ず',
+        content: '褰撳墠璁″垝鏈彂甯冿紝璇峰彂甯冨悗鏌ョ湅',
+        showCancel: false,
+        confirmText: '纭'
+      });
+      return;
+    }
+    
     // 瀵艰埅鍒扮亴婧夎鎯呴〉闈紝骞朵紶閫掑弬鏁�
     wx.navigateTo({
-      url: `/pages/irrigationDetail/irrigationDetail?id=${id}&fromList=true`
+      url: `/pages/irrigationDetail/irrigationDetail?planId=${id}&fromList=true`
     });
   },
 
@@ -161,13 +334,35 @@
       content: '纭畾瑕佸彂甯冭杞亴璁″垝鍚楋紵',
       success: (res) => {
         if (res.confirm) {
-          // 杩欓噷搴旇璋冪敤API鍙戝竷杞亴璁″垝
-          wx.showToast({
-            title: '鍙戝竷鎴愬姛',
-            icon: 'success'
+          // 璋冪敤鍙戝竷鎺ュ彛
+          post({
+            url: '/wx/plan/publishPlan',
+            data: {
+              planId: id,
+              operatorId: app.globalData.clientId
+            },
+            isShowLoding: true
+          }).then(res => {
+            if (res.success) {
+              wx.showToast({
+                title: '鍙戝竷鎴愬姛',
+                icon: 'success'
+              });
+              // 鍒锋柊鏁版嵁
+              this.loadIrrigationData();
+            } else {
+              wx.showToast({
+                title: res.msg || '鍙戝竷澶辫触',
+                icon: 'none'
+              });
+            }
+          }).catch(err => {
+            console.error('鍙戝竷澶辫触锛�', err);
+            wx.showToast({
+              title: '鍙戝竷澶辫触',
+              icon: 'none'
+            });
           });
-          // 鍒锋柊鏁版嵁
-          this.loadIrrigationData();
         }
       }
     });
@@ -183,17 +378,87 @@
       content: '纭畾瑕佺粓姝㈣杞亴璁″垝鍚楋紵',
       success: (res) => {
         if (res.confirm) {
-          // 杩欓噷搴旇璋冪敤API缁堟杞亴璁″垝
-          wx.showToast({
-            title: '宸茬粓姝�',
-            icon: 'success'
-          });
-          // 鍒锋柊鏁版嵁
-          this.loadIrrigationData();
+            this.postStop(id)
         }
       }
     });
   },
+
+  /**
+   * 鐐瑰嚮鍒犻櫎鎸夐挳
+   */
+  onDelete: function (e) {
+    const id = e.currentTarget.dataset.id;
+    wx.showModal({
+      title: '纭鍒犻櫎',
+      content: '纭畾瑕佸垹闄よ杞亴璁″垝鍚楋紵',
+      success: (res) => {
+        if (res.confirm) {
+          // 璋冪敤鍒犻櫎鎺ュ彛
+          post({
+            url: '/wx/plan/deletePlan',
+            data: {
+              planId: id,
+              operatorId: app.globalData.clientId
+            },
+            isShowLoding: true
+          }).then(res => {
+            if (res.success) {
+              wx.showToast({
+                title: '鍒犻櫎鎴愬姛',
+                icon: 'success'
+              });
+              // 鍒锋柊鏁版嵁
+              this.loadIrrigationData();
+            } else {
+              wx.showToast({
+                title: res.msg || '鍒犻櫎澶辫触',
+                icon: 'none'
+              });
+            }
+          }).catch(err => {
+            console.error('鍒犻櫎澶辫触锛�', err);
+            wx.showToast({
+              title: '鍒犻櫎澶辫触',
+              icon: 'none'
+            });
+          });
+        }
+      }
+    });
+  },
+  
+  //缁堟杞亴璁″垝
+   postStop(planID){
+    post({
+        url: '/wx/plan/terminatePlan',
+        data: {
+          planId: planID,
+          operatorId: app.globalData.clientId
+        },
+        isShowLoding: true
+      }).then(res => {
+        if (res.success) {
+          wx.showToast({
+            title: '缁堟鎴愬姛',
+            icon: 'success'
+          });
+          // 鍒锋柊鏁版嵁
+          this.loadIrrigationData();
+        } else {
+          wx.showToast({
+            title: res.msg || '缁堟澶辫触',
+            icon: 'none'
+          });
+        }
+      }).catch(err => {
+        console.error('缁堟澶辫触锛�', err);
+        wx.showToast({
+          title: '缁堟澶辫触',
+          icon: 'none'
+        });
+      });
+   },
 
   /**
    * 鐐瑰嚮绔嬪嵆鎵ц鎸夐挳
@@ -222,7 +487,7 @@
    */
   onAddIrrigation: function () {
     wx.navigateTo({
-      url: '/pages/createIrrigation/createIrrigation'
+      url: '/pages/createIrrigation/createIrrigation?projectId=' + this.data.projectId
     });
   },
 
@@ -242,7 +507,27 @@
       this.setData({
         isRefreshing: true
       });
-      this.loadIrrigationData();
+      
+      // 鏍规嵁褰撳墠鏍囩椤靛彧鍒锋柊瀵瑰簲鐨勬暟鎹�
+      const currentTab = this.data.currentTab;
+      if (currentTab === 0) {
+        // 褰撳墠鏍囩鏄�"褰撳墠鐏屾簤璁″垝"锛屽彧鍒锋柊杩欎釜
+        this.loadIrrigationData()
+          .finally(() => {
+            this.setData({ isRefreshing: false });
+          });
+      } else {
+        // 褰撳墠鏍囩鏄�"鍘嗗彶璁″垝"锛屽皢鍒嗛〉閲嶇疆鍒扮涓�椤靛苟鍒锋柊
+        this.setData({
+          pageCurr: 1,
+          hasMoreData: true
+        });
+        
+        this.loadCompletedIrrigationData()
+          .finally(() => {
+            this.setData({ isRefreshing: false });
+          });
+      }
     }
   },
 
@@ -253,6 +538,45 @@
     this.setData({
       isWXRefreshing: true
     });
-    this.loadIrrigationData();
+    
+    // 鏍规嵁褰撳墠鏍囩椤靛彧鍒锋柊瀵瑰簲鐨勬暟鎹�
+    const currentTab = this.data.currentTab;
+    if (currentTab === 0) {
+      // 褰撳墠鏍囩鏄�"褰撳墠鐏屾簤璁″垝"锛屽彧鍒锋柊杩欎釜
+      this.loadIrrigationData()
+        .finally(() => {
+          this.setData({ isWXRefreshing: false });
+        });
+    } else {
+      // 褰撳墠鏍囩鏄�"鍘嗗彶璁″垝"锛屽皢鍒嗛〉閲嶇疆鍒扮涓�椤靛苟鍒锋柊
+      this.setData({
+        pageCurr: 1,
+        hasMoreData: true
+      });
+      
+      this.loadCompletedIrrigationData()
+        .finally(() => {
+          this.setData({ isWXRefreshing: false });
+        });
+    }
+  },
+  
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom: function() {
+    console.log('瑙﹀簳鍔犺浇鏇村, 褰撳墠鏍囩:', this.data.currentTab);
+    // 褰撳墠鏄凡瀹屾垚鍒楄〃涓旇繕鏈夋洿澶氭暟鎹椂鍔犺浇鏇村
+    if (this.data.currentTab === 1 && this.data.hasMoreData && !this.data.loadingMore) {
+      this.setData({
+        pageCurr: this.data.pageCurr + 1
+      });
+      
+      // 鍔犺浇鏇村鍘嗗彶鏁版嵁
+      this.loadCompletedIrrigationData()
+        .catch(err => {
+          console.error('鍔犺浇鏇村鍘嗗彶鏁版嵁澶辫触:', err);
+        });
+    }
   }
 }) 
\ No newline at end of file

--
Gitblit v1.8.0