| const app = getApp(); | 
| const { | 
|   get, | 
|   post | 
| } = require('../../api/request'); | 
| const dayjs = require('dayjs'); | 
|   | 
| Page({ | 
|   /** | 
|    * 页面的初始数据 | 
|    */ | 
|   data: { | 
|     // 表单数据 | 
|     planCode: '', // 计划编号 | 
|     startTime: '', // 灌溉开始时间 | 
|     pickerValue: '', // 时间选择器的值 | 
|     timePickerVisible: false, // 时间选择器是否可见 | 
|     timeInfoVisible: false, // 时间提示弹窗是否可见 | 
|     // 项目选择器相关 | 
|     projectPickerVisible: false, | 
|     projectPickerValue: [], | 
|     selectedProject: null, | 
|     projectOptions: [], | 
|     totalDuration: 0, // 添加总灌溉时间 | 
|     // 项目列表 | 
|     projectList: [], | 
|     // 时间选择器选项 | 
|     timeOptions: [], | 
|     // 轮灌组列表刷新状态 | 
|     isRefreshing: false | 
|   }, | 
|   | 
|   /** | 
|    * 生命周期函数--监听页面加载 | 
|    */ | 
|   onLoad: function (options) { | 
|     // 生成计划编号 | 
|     this.generatePlanCode(); | 
|     // 设置时间选择器的初始值 | 
|     const now = dayjs(); | 
|     this.setData({ | 
|       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 | 
|     }); | 
|   }, | 
|   | 
|   /** | 
|    * 获取项目列表 | 
|    */ | 
|   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); | 
|     }); | 
|   }, | 
|   | 
|   /** | 
|    * 获取轮灌组列表 | 
|    */ | 
|   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); | 
|     }); | 
|   }, | 
|   | 
|   /** | 
|    * 显示时间选择器 | 
|    */ | 
|   showTimePicker: function () { | 
|     // 如果没有选择时间,使用当前时间 | 
|     if (!this.data.pickerValue) { | 
|       const now = dayjs(); | 
|       this.setData({ | 
|         pickerValue: now.format('YYYY-MM-DD HH:mm') | 
|       }); | 
|     } | 
|   | 
|     this.setData({ | 
|       timePickerVisible: true | 
|     }); | 
|   }, | 
|   | 
|   /** | 
|    * 时间选择器确认回调 | 
|    */ | 
|   onTimePickerConfirm: function (e) { | 
|     const { | 
|       value | 
|     } = e.detail; | 
|     this.setData({ | 
|       timePickerVisible: false, | 
|       startTime: value | 
|     }); | 
|   }, | 
|   | 
|   /** | 
|    * 时间选择器取消回调 | 
|    */ | 
|   onTimePickerCancel: function () { | 
|     this.setData({ | 
|       timePickerVisible: false | 
|     }); | 
|   }, | 
|   | 
|   /** | 
|    * 切换项目展开/折叠状态 | 
|    */ | 
|   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 { | 
|         ...item, | 
|         expanded: false | 
|       }; | 
|     }); | 
|   | 
|     // 如果当前点击的项目已经是展开状态,则保持所有项目折叠 | 
|     // 否则,将当前点击的项目设为展开状态 | 
|     if (!currentValue) { | 
|       newProjectList[index].expanded = true; | 
|     } | 
|   | 
|     this.setData({ | 
|       projectList: newProjectList | 
|     }); | 
|   }, | 
|   | 
|   /** | 
|    * 切换轮灌组选中状态 | 
|    */ | 
|   toggleGroupSelection: function (e) { | 
|     const projectIndex = e.currentTarget.dataset.projectIndex; | 
|     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); | 
|   }, | 
|   | 
|   /** | 
|    * 处理时长输入 | 
|    */ | 
|   onDurationInput: function (e) { | 
|     const { | 
|       groupIndex | 
|     } = e.currentTarget.dataset; | 
|     const duration = parseInt(e.detail.value) || 0; | 
|   | 
|     const selectedProject = { | 
|       ...this.data.selectedProject | 
|     }; | 
|     selectedProject.groups[groupIndex].duration = duration; | 
|   | 
|     this.setData({ | 
|       selectedProject | 
|     }, () => { | 
|       // 输入时长后重新计算总时间 | 
|       this.calculateTotalDuration(); | 
|     }); | 
|   }, | 
|   | 
|   /** | 
|    * 计算并更新项目总时长 | 
|    */ | 
|   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({ | 
|       [totalDurationKey]: totalDuration | 
|     }); | 
|   }, | 
|   | 
|   /** | 
|    * 阻止事件冒泡 | 
|    */ | 
|   stopPropagation: function (e) { | 
|     if (e && e.stopPropagation) { | 
|       e.stopPropagation(); | 
|     } | 
|     return false; | 
|   }, | 
|   | 
|   /** | 
|    * 跳转到轮灌组详情页 | 
|    */ | 
|   navigateToGroupDetail: function (e) { | 
|     const { groupIndex } = e.currentTarget.dataset; | 
|     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; | 
|   | 
|     if (!planCode) { | 
|       wx.showToast({ | 
|         title: '请输入计划编号', | 
|         icon: 'none' | 
|       }); | 
|       return; | 
|     } | 
|   | 
|     if (!selectedProject) { | 
|       wx.showToast({ | 
|         title: '请选择项目', | 
|         icon: 'none' | 
|       }); | 
|       return; | 
|     } | 
|   | 
|     // 构建上报数据 | 
|     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.fetchProjects(true) | 
|   | 
|   }, | 
|   | 
|   // 项目选择器确认 | 
|   onProjectPickerConfirm(e) { | 
|     const { | 
|       value | 
|     } = e.detail; | 
|     console.log('选择的项目ID:', value[0]); // 添加日志查看数据 | 
|     const selectedProject = this.data.projectList.find(project => project.id === value[0]); | 
|     console.log('找到的项目:', selectedProject); // 添加日志查看数据 | 
|   | 
|     this.setData({ | 
|       projectPickerVisible: false, | 
|       selectedProject: selectedProject, | 
|       projectPickerValue: value | 
|     }, () => { | 
|       // 选择项目后获取轮灌组列表 | 
|       if (selectedProject) { | 
|         this.fetchGroups(selectedProject.id); | 
|       } | 
|     }); | 
|   }, | 
|   | 
|   // 项目选择器取消 | 
|   onProjectPickerCancel() { | 
|     this.setData({ | 
|       projectPickerVisible: false | 
|     }); | 
|   }, | 
|   | 
|   /** | 
|    * 计算总灌溉时间 | 
|    */ | 
|   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 | 
|     }); | 
|   }, | 
|   | 
|   /** | 
|    * 轮灌组列表下拉刷新 | 
|    */ | 
|   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 | 
|     }); | 
|   }, | 
| }); |