| | |
| | | const app = getApp(); |
| | | const { get, post } = require('../../api/request'); |
| | | 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 |
| | | }, |
| | | /** |
| | | * 页面的初始数据 |
| | | */ |
| | | 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(); |
| | | }, |
| | | /** |
| | | * 生命周期函数--监听页面加载 |
| | | */ |
| | | 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('YYYYMMDD'); |
| | | const randomNum = Math.floor(Math.random() * 10000).toString().padStart(4, '0'); |
| | | const planCode = `${dateStr}${randomNum}`; |
| | | this.setData({ planCode }); |
| | | }, |
| | | /** |
| | | * 生成计划编号 |
| | | */ |
| | | 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 () { |
| | | 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 |
| | | }); |
| | | } 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.obj); |
| | | |
| | | // 更新选中项目的轮灌组信息 |
| | | const projectList = this.data.projectList.map(project => { |
| | | if (project.id === projectId) { |
| | | return { |
| | | ...project, |
| | | groups: res.content.obj.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; |
| | | // TODO: 实现跳转逻辑 |
| | | }, |
| | | |
| | | /** |
| | | * 确认按钮点击事件 |
| | | */ |
| | | 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 |
| | | /** |
| | | * 获取项目列表 |
| | | */ |
| | | 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 requestData = { |
| | | projectId: selectedProject.id, |
| | | planName: planCode, |
| | | startupMode: startTime ? 2 : 1, |
| | | operatorId: app.globalData.clientId, |
| | | schedules: schedules |
| | | }; |
| | | const projectOptions = projectList.map(project => ({ |
| | | label: project.name, |
| | | value: project.id |
| | | })); |
| | | |
| | | // 如果有开始时间,添加到请求数据中 |
| | | 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(() => { |
| | | wx.navigateBack(); |
| | | }, 1500); |
| | | } else { |
| | | wx.showToast({ |
| | | title: res.msg || '创建失败', |
| | | icon: 'none' |
| | | }); |
| | | } |
| | | }).catch(err => { |
| | | console.error('创建计划失败:', err); |
| | | wx.showToast({ |
| | | title: '创建失败', |
| | | icon: 'none' |
| | | }); |
| | | }); |
| | | }, |
| | | |
| | | // 显示项目选择器 |
| | | showProjectPicker() { |
| | | this.setData({ |
| | | projectList, |
| | | projectOptions |
| | | }); |
| | | if (isShowDiaolog) { |
| | | this.setData({ |
| | | projectPickerVisible: 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 |
| | | } 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); |
| | | }); |
| | | }, |
| | | |
| | | /** |
| | | * 关闭时间提示弹窗 |
| | | */ |
| | | onTimeInfoConfirm: function () { |
| | | this.setData({ |
| | | timeInfoVisible: false |
| | | /** |
| | | * 获取轮灌组列表 |
| | | */ |
| | | 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 |
| | | }); |
| | | }, |
| | | }); |