管灌系统农户端微信小程序(嘉峪关应用)
zuoxiao
2025-04-11 fb805f6ff1d167951e94198b6e9fc320649e8643
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, // 是否正在刷新
    isWXRefreshing: false // 微信原生下拉刷新状态
    isWXRefreshing: false, // 微信原生下拉刷新状态
    projectId: null, // Added to store projectId
    // 添加分页相关数据
    pageCurr: 1, // 当前页码,从1开始
    pageSize: 10, // 每页记录数
    hasMoreData: true, // 是否还有更多数据
    loadingMore: false // 是否正在加载更多
  },
  /**
   * 生命周期函数--监听页面加载
   */
  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 => {
            // 确保将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
            };
          });
    // 模拟网络请求延迟
    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 () {
    // 如果正在加载或没有更多数据,则不再请求
    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 => {
            // 确保将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();
      });
    });
  },
  /**
@@ -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);
        });
    }
  }
})