管灌系统农户端微信小程序(嘉峪关应用)
pages/irrigation/irrigation.js
@@ -13,7 +13,12 @@
    currentList: [], // 当前显示的列表
    isRefreshing: false, // 是否正在刷新
    isWXRefreshing: false, // 微信原生下拉刷新状态
    projectId: null // Added to store projectId
    projectId: null, // Added to store projectId
    // 添加分页相关数据
    pageCurr: 1, // 当前页码,从1开始
    pageSize: 10, // 每页记录数
    hasMoreData: true, // 是否还有更多数据
    loadingMore: false // 是否正在加载更多
  },
  /**
@@ -26,63 +31,114 @@
        projectId: options.projectId
      });
    }
    this.loadIrrigationData();
    this.loadCompletedIrrigationData();
    // 设置加载状态
    wx.showLoading({
      title: '加载中',
      mask: true
    });
    // 默认先加载当前灌溉计划
    this.loadIrrigationData()
      .then(() => {
        wx.hideLoading();
      })
      .catch(() => {
        wx.hideLoading();
      });
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    this.loadIrrigationData();
    this.loadCompletedIrrigationData();
    // 检查全局变量,判断是否需要刷新列表并切换到当前计划
    const app = getApp();
    // 刷新所有数据(当前计划和历史计划),确保数据最新
    wx.showLoading({
      title: '刷新数据中',
      mask: true
    });
    // 同时获取当前计划和历史计划数据
    Promise.all([
      this.loadIrrigationData(),
      this.loadCompletedIrrigationData(true) // 传入true表示是重新加载第一页
    ]).then(() => {
      wx.hideLoading();
      // 如果需要刷新并切换到当前计划
      if (app.globalData.needRefreshIrrigationList) {
        // 重置全局变量
        app.globalData.needRefreshIrrigationList = false;
        console.log('检测到需要刷新灌溉计划列表');
        // 切换到当前灌溉计划标签页
        if (this.data.currentTab !== 0) {
          this.setData({
            currentTab: 0,
            currentList: this.data.activeList
          });
        }
      }
    }).catch(() => {
      wx.hideLoading();
    });
  },
  /**
   * 加载轮灌数据
   */
  loadIrrigationData: function () {
    get({
      url: '/wx/plan/getNotCompletePlans'
    }).then(res => {
      if (res.success) {
        const activeList = res.content.map(item => {
          // 确保将planState转换为字符串
          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
          };
    return new Promise((resolve, reject) => {
      get({
        url: '/wx/plan/getNotCompletePlans'
      }).then(res => {
        if (res.success) {
          const activeList = res.content.map(item => {
            // 确保将planState转换为字符串
            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('轮灌计划数据:', 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'
        });
        console.log('轮灌计划数据:', activeList);
        this.setData({
          activeList: activeList,
          currentList: this.data.currentTab === 0 ? activeList : this.data.completedList,
          isRefreshing: false,
          isWXRefreshing: false
        });
      } else {
        wx.showToast({
          title: res.msg || '加载失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      wx.showToast({
        title: '加载失败',
        icon: 'none'
      });
      this.setData({
        isRefreshing: false,
        isWXRefreshing: false
        reject();
      });
    });
  },
@@ -90,48 +146,94 @@
  /**
   * 加载已完成的轮灌数据
   */
  loadCompletedIrrigationData: function () {
    get({
      url: '/wx/plan/getCompletedPlans'
    }).then(res => {
      if (res.success) {
        const completedList = res.content.map(item => {
          // 确保将planState转换为字符串
          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('已完成轮灌计划数据:', completedList);
        this.setData({
          completedList: completedList,
          currentList: this.data.currentTab === 1 ? completedList : this.data.activeList,
          isRefreshing: false,
          isWXRefreshing: false
        });
      } else {
        wx.showToast({
          title: res.msg || '加载失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      wx.showToast({
        title: '加载失败',
        icon: 'none'
      });
  loadCompletedIrrigationData: function (isFirstPage) {
    // 如果正在加载或没有更多数据,则不再请求
    if (this.data.loadingMore && !this.data.hasMoreData) {
      return Promise.resolve();
    }
    // 如果是重新加载第一页,重置页码和状态
    if (isFirstPage) {
      this.setData({
        isRefreshing: false,
        isWXRefreshing: false
        pageCurr: 1,
        hasMoreData: true
      });
    }
    // 设置加载状态
    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 => {
            // 确保将planState转换为字符串
            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();
      });
    });
  },
@@ -148,10 +250,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();
          });
      }
    }
  },
  /**
@@ -176,7 +326,7 @@
    
    // 导航到灌溉详情页面,并传递参数
    wx.navigateTo({
      url: `/pages/irrigationDetail/irrigationDetail?planId=${id}&fromList=true`
      url: `/pages/irrigationDetail/irrigationDetail?planId=${id}&fromList=true&status=${status}`
    });
  },
@@ -197,7 +347,8 @@
              planId: id,
              operatorId: app.globalData.clientId
            },
            isShowLoding: true
            isShowLoding: true,
            timeout: 180000
          }).then(res => {
            if (res.success) {
              wx.showToast({
@@ -214,10 +365,17 @@
            }
          }).catch(err => {
            console.error('发布失败:', err);
            wx.showToast({
              title: '发布失败',
              icon: 'none'
            });
            if(err.code==='1003'){
              wx.showToast({
                title: err.msg || '发布失败',
                icon: 'none'
              });
            }else{
              wx.showToast({
                title: '发布失败',
                icon: 'none'
              });
            }
          });
        }
      }
@@ -292,15 +450,21 @@
          planId: planID,
          operatorId: app.globalData.clientId
        },
        isShowLoding: true
        isShowLoding: true,
        timeout: 180000
      }).then(res => {
        if (res.success) {
          wx.showToast({
            title: '终止成功',
            icon: 'success'
          });
          // 刷新数据
          this.loadIrrigationData();
          // 同时刷新当前计划列表和历史计划列表
          Promise.all([
            this.loadIrrigationData(),
            this.loadCompletedIrrigationData(true) // 传入true表示重新加载第一页
          ]).catch(err => {
            console.error('刷新数据失败:', err);
          });
        } else {
          wx.showToast({
            title: res.msg || '终止失败',
@@ -363,8 +527,27 @@
      this.setData({
        isRefreshing: true
      });
      this.loadIrrigationData();
      this.loadCompletedIrrigationData();
      // 根据当前标签页只刷新对应的数据
      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 });
          });
      }
    }
  },
@@ -375,7 +558,75 @@
    this.setData({
      isWXRefreshing: true
    });
    this.loadIrrigationData();
    this.loadCompletedIrrigationData();
    // 根据当前标签页只刷新对应的数据
    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);
        });
    }
  },
  /**
   * 从创建灌溉计划页面返回时,切换到当前计划列表并刷新数据
   */
  switchToCurrentPlans: function() {
    console.log('从创建页面返回,切换到当前计划列表并刷新');
    // 如果当前不在 "当前灌溉计划" 标签页,先切换到该标签页
    if (this.data.currentTab !== 0) {
      this.setData({
        currentTab: 0,
        currentList: this.data.activeList
      });
    }
    // 显示加载提示
    wx.showLoading({
      title: '刷新数据中',
      mask: true
    });
    // 刷新当前灌溉计划数据
    this.loadIrrigationData()
      .then(() => {
        wx.hideLoading();
      })
      .catch(() => {
        wx.hideLoading();
      });
  }
})