// pages/irrigation/irrigation.js const { get, post } = require('../../api/request'); const app = getApp(); Page({ /** * 页面的初始数据 */ data: { currentTab: 0, // 当前选中的标签页索引 activeList: [], // 进行中的轮灌列表 completedList: [], // 已完成的轮灌列表 currentList: [], // 当前显示的列表 isRefreshing: false, // 是否正在刷新 isWXRefreshing: false, // 微信原生下拉刷新状态 projectId: null, // Added to store projectId // 添加分页相关数据 pageCurr: 1, // 当前页码,从1开始 pageSize: 10, // 每页记录数 hasMoreData: true, // 是否还有更多数据 loadingMore: false // 是否正在加载更多 }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { // 获取项目ID if (options.projectId) { this.setData({ projectId: options.projectId }); } // 设置加载状态 wx.showLoading({ title: '加载中', mask: true }); // 默认先加载当前灌溉计划 this.loadIrrigationData() .then(() => { wx.hideLoading(); }) .catch(() => { wx.hideLoading(); }); }, /** * 生命周期函数--监听页面显示 */ // 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 () { 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' }); this.setData({ isRefreshing: false, isWXRefreshing: false }); reject(); }); }); }, /** * 加载已完成的轮灌数据 */ 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(); }); }); }, /** * 切换标签页 */ switchTab: function (e) { const index = parseInt(e.currentTarget.dataset.index); if (this.data.currentTab === index) { return; } const activeList = this.data.activeList || []; const completedList = this.data.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(); }); } } }, /** * 点击列表项 */ onItemTap: function (e) { 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?planId=${id}&fromList=true` }); }, /** * 点击发布按钮 */ onPublish: function (e) { const id = e.currentTarget.dataset.id; wx.showModal({ title: '确认发布', content: '确定要发布该轮灌计划吗?', success: (res) => { if (res.confirm) { // 调用发布接口 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' }); }); } } }); }, /** * 点击终止按钮 */ onStop: function (e) { const id = e.currentTarget.dataset.id; wx.showModal({ title: '确认终止', content: '确定要终止该轮灌计划吗?', success: (res) => { if (res.confirm) { 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' }); }); }, /** * 点击立即执行按钮 */ onExecute: function (e) { const id = e.currentTarget.dataset.id; wx.showModal({ title: '确认执行', content: '确定要立即执行该轮灌计划吗?', success: (res) => { if (res.confirm) { // 这里应该调用API立即执行轮灌计划 wx.showToast({ title: '执行成功', icon: 'success' }); // 刷新数据 this.loadIrrigationData(); } } }); }, /** * 点击新建轮灌按钮 */ onAddIrrigation: function () { wx.navigateTo({ url: '/pages/createIrrigation/createIrrigation?projectId=' + this.data.projectId }); }, /** * 阻止事件冒泡 */ stopPropagation: function (e) { // 阻止事件冒泡 return false; }, /** * 开始下拉刷新 */ startPullDownRefresh: function() { if (!this.data.isWXRefreshing) { this.setData({ isRefreshing: true }); // 根据当前标签页只刷新对应的数据 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 }); }); } } }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { this.setData({ isWXRefreshing: true }); // 根据当前标签页只刷新对应的数据 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); }); } } })