| | |
| | | const app = getApp(); |
| | | const { get, post } = require('../../api/request'); |
| | | const dayjs = require('dayjs'); |
| | | |
| | | Page({ |
| | | /** |
| | | * 页面的初始数据 |
| | | */ |
| | | data: { |
| | | // 表单数据 |
| | | planCode: '', // 计划编号 |
| | | startTime: '', // 灌溉开始时间 |
| | | pickerValue: '', // 时间选择器的值 |
| | | timePickerVisible: false, // 时间选择器是否可见 |
| | | |
| | | // 项目和轮灌组数据 |
| | | projectList: [ |
| | | { |
| | | id: '1', |
| | | name: '项目一', |
| | | expanded: false, // 是否展开 |
| | | totalDuration: 0, // 总时长 |
| | | groups: [ |
| | | { id: '1-1', name: '轮灌组1', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 } |
| | | ] |
| | | }, |
| | | { |
| | | id: '2', |
| | | name: '项目二', |
| | | expanded: false, |
| | | totalDuration: 0, |
| | | groups: [ |
| | | { id: '2-1', name: '轮灌组A', selected: false, duration: 0 }, |
| | | { id: '2-2', name: '轮灌组B', selected: false, duration: 0 } |
| | | ] |
| | | }, |
| | | { |
| | | id: '4', |
| | | name: '项目一', |
| | | expanded: false, // 是否展开 |
| | | totalDuration: 0, // 总时长 |
| | | groups: [ |
| | | { id: '1-1', name: '轮灌组1', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 } |
| | | ] |
| | | }, |
| | | { |
| | | id: '5', |
| | | name: '项目一', |
| | | expanded: false, // 是否展开 |
| | | totalDuration: 0, // 总时长 |
| | | groups: [ |
| | | { id: '1-1', name: '轮灌组1', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 } |
| | | ] |
| | | }, |
| | | { |
| | | id: '6', |
| | | name: '项目一', |
| | | expanded: false, // 是否展开 |
| | | totalDuration: 0, // 总时长 |
| | | groups: [ |
| | | { id: '1-1', name: '轮灌组1', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 } |
| | | ] |
| | | }, |
| | | { |
| | | id: '7', |
| | | name: '项目一', |
| | | expanded: false, // 是否展开 |
| | | totalDuration: 0, // 总时长 |
| | | groups: [ |
| | | { id: '1-1', name: '轮灌组1', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 } |
| | | ] |
| | | }, |
| | | { |
| | | id: '8', |
| | | name: '项目8', |
| | | expanded: false, // 是否展开 |
| | | totalDuration: 0, // 总时长 |
| | | groups: [ |
| | | { id: '1-1', name: '轮灌组1', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 }, |
| | | { id: '1-2', name: '轮灌组2', selected: false, duration: 0 }, |
| | | { id: '1-3', name: '轮灌组3', selected: false, duration: 0 } |
| | | ] |
| | | }, |
| | | { |
| | | id: '3', |
| | | name: '项目3', |
| | | expanded: false, |
| | | totalDuration: 0, |
| | | groups: [ |
| | | { id: '3-1', name: '轮灌组X', selected: false, duration: 0 }, |
| | | { id: '3-2', name: '轮灌组Y', selected: false, duration: 0 }, |
| | | { id: '3-3', name: '轮灌组Z', selected: false, duration: 0 } |
| | | ] |
| | | }, |
| | | { |
| | | id: '9', |
| | | name: '项目9', |
| | | expanded: false, |
| | | totalDuration: 0, |
| | | groups: [ |
| | | { id: '3-1', name: '轮灌组X', selected: false, duration: 0 }, |
| | | { id: '3-2', name: '轮灌组Y', selected: false, duration: 0 }, |
| | | { id: '3-3', name: '轮灌组Z', selected: false, duration: 0 } |
| | | ] |
| | | } |
| | | , |
| | | { |
| | | id: '10', |
| | | name: '项目10', |
| | | expanded: false, |
| | | totalDuration: 0, |
| | | groups: [ |
| | | { id: '3-1', name: '轮灌组X', selected: false, duration: 0 }, |
| | | { id: '3-2', name: '轮灌组Y', selected: false, duration: 0 }, |
| | | { id: '3-3', name: '轮灌组Z', selected: false, duration: 0 } |
| | | ] |
| | | } |
| | | , |
| | | { |
| | | id: '11', |
| | | name: '项目11', |
| | | expanded: false, |
| | | totalDuration: 0, |
| | | groups: [ |
| | | { id: '3-1', name: '轮灌组X', selected: false, duration: 0 }, |
| | | { id: '3-2', name: '轮灌组Y', selected: false, duration: 0 }, |
| | | { id: '3-3', name: '轮灌组Z', selected: false, duration: 0 } |
| | | ] |
| | | } |
| | | ] |
| | | }, |
| | | /** |
| | | * 页面的初始数据 |
| | | */ |
| | | data: { |
| | | // 表单数据 |
| | | planCode: '', // 计划编号 |
| | | startTime: '', // 灌溉开始时间 |
| | | pickerValue: '', // 时间选择器的值 |
| | | timePickerVisible: false, // 时间选择器是否可见 |
| | | timeInfoVisible: false, // 时间提示弹窗是否可见 |
| | | // 项目选择器相关 |
| | | projectPickerVisible: false, |
| | | projectPickerValue: [], |
| | | selectedProject: null, |
| | | projectOptions: [], |
| | | totalDuration: 0, // 添加总灌溉时间 |
| | | // 项目列表 |
| | | projectList: [], |
| | | // 时间选择器选项 |
| | | timeOptions: [], |
| | | // 轮灌组列表刷新状态 |
| | | isRefreshing: false |
| | | }, |
| | | |
| | | /** |
| | | * 生命周期函数--监听页面加载 |
| | | */ |
| | | onLoad: function (options) { |
| | | // 页面加载时可以从API获取项目和轮灌组数据 |
| | | // this.fetchProjectsAndGroups(); |
| | | }, |
| | | /** |
| | | * 生命周期函数--监听页面加载 |
| | | */ |
| | | onLoad: function (options) { |
| | | // 生成计划编号 |
| | | this.generatePlanCode(); |
| | | // 设置时间选择器的初始值 |
| | | const now = dayjs(); |
| | | this.setData({ |
| | | pickerValue: now.add(8.5, 'hour').format('YYYY-MM-DD HH:mm') |
| | | }); |
| | | // 获取项目列表 |
| | | this.fetchProjects(); |
| | | }, |
| | | |
| | | /** |
| | | * 获取项目和轮灌组数据 |
| | | */ |
| | | fetchProjectsAndGroups: function () { |
| | | // 这里可以添加API请求逻辑,获取真实数据 |
| | | // wx.request({ |
| | | // url: 'your-api-url', |
| | | // success: (res) => { |
| | | // this.setData({ |
| | | // projectList: res.data |
| | | // }); |
| | | // } |
| | | // }); |
| | | }, |
| | | /** |
| | | * 生成计划编号 |
| | | */ |
| | | 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 }); |
| | | }, |
| | | |
| | | /** |
| | | * 处理计划编号输入 |
| | | */ |
| | | onPlanCodeInput: function (e) { |
| | | this.setData({ |
| | | planCode: e.detail.value |
| | | }); |
| | | }, |
| | | /** |
| | | * 获取项目列表 |
| | | */ |
| | | 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: [] |
| | | })); |
| | | |
| | | /** |
| | | * 显示时间选择器 |
| | | */ |
| | | showTimePicker: function () { |
| | | this.setData({ |
| | | timePickerVisible: true |
| | | }); |
| | | }, |
| | | const projectOptions = projectList.map(project => ({ |
| | | label: project.name, |
| | | value: project.id |
| | | })); |
| | | |
| | | /** |
| | | * 时间选择器确认回调 |
| | | */ |
| | | onTimePickerConfirm: function (e) { |
| | | this.setData({ |
| | | startTime: e.detail.formatValue, |
| | | pickerValue: e.detail.value, |
| | | timePickerVisible: false |
| | | }); |
| | | }, |
| | | 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); |
| | | }); |
| | | }, |
| | | |
| | | /** |
| | | * 时间选择器取消回调 |
| | | */ |
| | | onTimePickerCancel: function () { |
| | | this.setData({ |
| | | timePickerVisible: false |
| | | }); |
| | | }, |
| | | /** |
| | | * 获取轮灌组列表 |
| | | */ |
| | | fetchGroups: function (projectId) { |
| | | return get({ |
| | | url: '/wx/irrigation/getSimpleGroups', |
| | | data: { |
| | | projectId: projectId, |
| | | }, |
| | | isShowLoding: true |
| | | }).then(res => { |
| | | if (res.success) { |
| | | console.log('轮灌组数据:', res.content.obj); |
| | | |
| | | /** |
| | | * 切换项目展开/折叠状态 |
| | | */ |
| | | 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 |
| | | }); |
| | | }, |
| | | // 更新选中项目的轮灌组信息 |
| | | 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; |
| | | }); |
| | | |
| | | /** |
| | | * 切换轮灌组选中状态 |
| | | */ |
| | | 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); |
| | | }, |
| | | // 更新选中的项目 |
| | | const selectedProject = projectList.find(project => project.id === projectId); |
| | | console.log('更新后的选中项目:', selectedProject); |
| | | |
| | | /** |
| | | * 处理时长输入 |
| | | */ |
| | | onDurationInput: function (e) { |
| | | const projectIndex = e.currentTarget.dataset.projectIndex; |
| | | const groupIndex = e.currentTarget.dataset.groupIndex; |
| | | const value = parseInt(e.detail.value) || 0; |
| | | |
| | | // 更新轮灌组时长 |
| | | const durationKey = `projectList[${projectIndex}].groups[${groupIndex}].duration`; |
| | | this.setData({ |
| | | [durationKey]: value |
| | | }); |
| | | |
| | | // 自动选中该轮灌组 |
| | | const selectedKey = `projectList[${projectIndex}].groups[${groupIndex}].selected`; |
| | | if (value > 0 && !this.data.projectList[projectIndex].groups[groupIndex].selected) { |
| | | this.setData({ |
| | | [selectedKey]: true |
| | | }); |
| | | } |
| | | |
| | | // 计算并更新项目总时长 |
| | | this.updateProjectTotalDuration(projectIndex); |
| | | }, |
| | | 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); |
| | | }); |
| | | }, |
| | | |
| | | /** |
| | | * 计算并更新项目总时长 |
| | | */ |
| | | 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 |
| | | }); |
| | | }, |
| | | /** |
| | | * 显示时间选择器 |
| | | */ |
| | | showTimePicker: function () { |
| | | // 如果没有选择时间,使用当前时间 |
| | | if (!this.data.pickerValue) { |
| | | const now = dayjs(); |
| | | this.setData({ |
| | | pickerValue: now.format('YYYY-MM-DD HH:mm') |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 阻止事件冒泡 |
| | | */ |
| | | stopPropagation: function (e) { |
| | | // 阻止事件冒泡,防止点击输入框时触发父元素的点击事件 |
| | | }, |
| | | this.setData({ |
| | | timePickerVisible: true |
| | | }); |
| | | }, |
| | | |
| | | /** |
| | | * 跳转到轮灌组详情页 |
| | | */ |
| | | navigateToGroupDetail: function (e) { |
| | | const projectIndex = e.currentTarget.dataset.projectIndex; |
| | | const groupIndex = e.currentTarget.dataset.groupIndex; |
| | | const project = this.data.projectList[projectIndex]; |
| | | const group = project.groups[groupIndex]; |
| | | |
| | | wx.navigateTo({ |
| | | url: `/pages/groupDetail/groupDetail?projectId=${project.id}&projectName=${project.name}&groupId=${group.id}&groupName=${group.name}` |
| | | }); |
| | | }, |
| | | /** |
| | | * 时间选择器确认回调 |
| | | */ |
| | | onTimePickerConfirm: function (e) { |
| | | const { value } = e.detail; |
| | | this.setData({ |
| | | timePickerVisible: false, |
| | | startTime: value |
| | | }); |
| | | }, |
| | | |
| | | /** |
| | | * 确认按钮点击事件 |
| | | */ |
| | | onConfirm: function () { |
| | | // 验证表单 |
| | | if (!this.validateForm()) { |
| | | return; |
| | | } |
| | | |
| | | // 收集选中的轮灌组 |
| | | const selectedGroups = this.getSelectedGroups(); |
| | | |
| | | // 构建提交数据 |
| | | const formData = { |
| | | planCode: this.data.planCode, |
| | | startTime: this.data.startTime, |
| | | groups: selectedGroups |
| | | }; |
| | | |
| | | // 提交数据 |
| | | this.submitForm(formData); |
| | | }, |
| | | /** |
| | | * 时间选择器取消回调 |
| | | */ |
| | | onTimePickerCancel: function () { |
| | | this.setData({ |
| | | timePickerVisible: false |
| | | }); |
| | | }, |
| | | |
| | | /** |
| | | * 验证表单 |
| | | */ |
| | | validateForm: function () { |
| | | if (!this.data.planCode) { |
| | | wx.showToast({ |
| | | title: '请输入计划编号', |
| | | icon: 'none' |
| | | }); |
| | | return false; |
| | | } |
| | | |
| | | if (!this.data.startTime) { |
| | | wx.showToast({ |
| | | title: '请选择灌溉开始时间', |
| | | icon: 'none' |
| | | }); |
| | | return false; |
| | | } |
| | | |
| | | const selectedGroups = this.getSelectedGroups(); |
| | | if (selectedGroups.length === 0) { |
| | | wx.showToast({ |
| | | title: '请至少选择一个轮灌组', |
| | | icon: 'none' |
| | | }); |
| | | return false; |
| | | } |
| | | |
| | | // 检查选中的轮灌组是否都设置了时长 |
| | | const invalidGroups = selectedGroups.filter(group => !group.duration); |
| | | if (invalidGroups.length > 0) { |
| | | wx.showToast({ |
| | | title: '请为所有选中的轮灌组设置时长', |
| | | icon: 'none' |
| | | }); |
| | | return false; |
| | | } |
| | | |
| | | return true; |
| | | }, |
| | | /** |
| | | * 切换项目展开/折叠状态 |
| | | */ |
| | | toggleProject: function (e) { |
| | | const index = e.currentTarget.dataset.index; |
| | | const currentValue = this.data.projectList[index].expanded; |
| | | |
| | | /** |
| | | * 获取选中的轮灌组 |
| | | */ |
| | | getSelectedGroups: function () { |
| | | const selectedGroups = []; |
| | | |
| | | this.data.projectList.forEach(project => { |
| | | project.groups.forEach(group => { |
| | | if (group.selected) { |
| | | selectedGroups.push({ |
| | | projectId: project.id, |
| | | projectName: project.name, |
| | | // 创建新的项目列表,先将所有项目设为折叠状态 |
| | | 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, |
| | | groupName: group.name, |
| | | duration: group.duration |
| | | }); |
| | | } |
| | | }); |
| | | }); |
| | | |
| | | return selectedGroups; |
| | | }, |
| | | duration: parseInt(group.duration) || 0 |
| | | })); |
| | | |
| | | /** |
| | | * 提交表单数据 |
| | | */ |
| | | submitForm: function (formData) { |
| | | // 这里可以添加API请求逻辑,提交表单数据 |
| | | console.log('提交的表单数据:', formData); |
| | | |
| | | // 模拟API请求 |
| | | wx.showLoading({ |
| | | title: '提交中...', |
| | | }); |
| | | |
| | | setTimeout(() => { |
| | | wx.hideLoading(); |
| | | |
| | | wx.showToast({ |
| | | title: '创建成功', |
| | | icon: 'success', |
| | | duration: 2000, |
| | | success: () => { |
| | | // 延迟返回上一页 |
| | | setTimeout(() => { |
| | | wx.navigateBack(); |
| | | }, 2000); |
| | | const requestData = { |
| | | projectId: selectedProject.id, |
| | | planName: planCode, |
| | | startupMode: startTime ? 2 : 1, |
| | | operatorId: app.globalData.clientId, |
| | | schedules: schedules |
| | | }; |
| | | |
| | | // 如果有开始时间,添加到请求数据中 |
| | | if (startTime) { |
| | | requestData.planStartTime = startTime; |
| | | } |
| | | }); |
| | | }, 1500); |
| | | |
| | | // 实际API请求示例 |
| | | // wx.request({ |
| | | // url: 'your-api-url', |
| | | // method: 'POST', |
| | | // data: formData, |
| | | // success: (res) => { |
| | | // wx.showToast({ |
| | | // title: '创建成功', |
| | | // icon: 'success', |
| | | // duration: 2000, |
| | | // success: () => { |
| | | // setTimeout(() => { |
| | | // wx.navigateBack(); |
| | | // }, 2000); |
| | | // } |
| | | // }); |
| | | // }, |
| | | // fail: (err) => { |
| | | // wx.showToast({ |
| | | // title: '创建失败,请重试', |
| | | // icon: 'none' |
| | | // }); |
| | | // } |
| | | // }); |
| | | } |
| | | |
| | | // 发送请求 |
| | | 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({ |
| | | 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 |
| | | }); |
| | | }, |
| | | |
| | | /** |
| | | * 关闭时间提示弹窗 |
| | | */ |
| | | onTimeInfoConfirm: function () { |
| | | this.setData({ |
| | | timeInfoVisible: false |
| | | }); |
| | | }, |
| | | }); |