| | |
| | | data: { |
| | | planCode: '', |
| | | startTime: '', |
| | | projects: [], |
| | | isRefreshing: false, // 下拉刷新状态 |
| | | planId: '' // 保存计划ID |
| | | isRefreshing: false, |
| | | projects: [] |
| | | }, |
| | | |
| | | /** |
| | | * 生命周期函数--监听页面加载 |
| | | */ |
| | | onLoad: function (options) { |
| | | if (options.id) { |
| | | this.setData({ |
| | | planId: options.id |
| | | }); |
| | | // 从列表页面进入时,所有项目默认收起 |
| | | const fromListPage = options.fromList === 'true'; |
| | | this.loadIrrigationDetail(options.id, !fromListPage); |
| | | } |
| | | }, |
| | | |
| | | /** |
| | | * 加载灌溉计划详情 |
| | | * @param {string} id 灌溉计划ID |
| | | * @param {boolean} isFirstLoad 是否首次加载 |
| | | */ |
| | | loadIrrigationDetail: function (id, isFirstLoad = false) { |
| | | // 开始加载,设置刷新状态 |
| | | // 模拟数据 |
| | | this.setData({ |
| | | isRefreshing: true |
| | | }); |
| | | |
| | | // 保存当前项目的展开状态 |
| | | const currentExpandStates = {}; |
| | | if (!isFirstLoad && this.data.projects.length > 0) { |
| | | this.data.projects.forEach((project, index) => { |
| | | currentExpandStates[project.id] = project.expanded; |
| | | }); |
| | | } |
| | | |
| | | // 这里应该是从API获取数据 |
| | | // 以下是模拟数据 |
| | | const mockData = { |
| | | planCode: 'IRG20240317001', |
| | | startTime: '2024-03-17 08:00', |
| | | projects: [ |
| | | { |
| | | id: 1, |
| | | name: '项目A', |
| | | expanded: isFirstLoad ? true : false, // 仅在非列表页进入且首次加载时展开第一个项目 |
| | | groups: [ |
| | | { |
| | | id: 1, |
| | | name: '轮灌组A-1', |
| | | status: 'irrigated', // 已灌溉 |
| | | statusText: '已灌溉', |
| | | startTime: '2024-03-17 08:00', |
| | | endTime: '2024-03-17 09:30', |
| | | duration: 90 |
| | | }, |
| | | { |
| | | id: 2, |
| | | name: '轮灌组A-2', |
| | | status: 'irrigating', // 正在灌溉 |
| | | statusText: '正在灌溉', |
| | | startTime: '2024-03-17 09:30', |
| | | endTime: '2024-03-17 11:00', |
| | | duration: 90 |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | id: 2, |
| | | name: '项目B', |
| | | expanded: false, |
| | | groups: [ |
| | | { |
| | | id: 3, |
| | | name: '轮灌组B-1', |
| | | status: 'waiting', // 未灌溉 |
| | | statusText: '未灌溉', |
| | | startTime: '2024-03-17 11:00', |
| | | endTime: '2024-03-17 12:30', |
| | | duration: 90 |
| | | }, |
| | | { |
| | | id: 4, |
| | | name: '轮灌组B-2', |
| | | status: 'waiting', // 未灌溉 |
| | | statusText: '未灌溉', |
| | | startTime: '2024-03-17 12:30', |
| | | endTime: '2024-03-17 14:00', |
| | | duration: 90 |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | | id: 3, |
| | | name: '项目C', |
| | | expanded: false, |
| | | groups: [ |
| | | { |
| | | id: 5, |
| | | name: '轮灌组C-1', |
| | | status: 'waiting', // 未灌溉 |
| | | statusText: '未灌溉', |
| | | startTime: '2024-03-17 14:00', |
| | | endTime: '2024-03-17 15:30', |
| | | duration: 90 |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | }; |
| | | |
| | | // 计算每个项目的总灌溉时长 |
| | | mockData.projects = this.calculateProjectTotalDuration(mockData.projects); |
| | | |
| | | // 如果不是首次加载,恢复项目的展开状态 |
| | | if (!isFirstLoad) { |
| | | mockData.projects.forEach(project => { |
| | | if (currentExpandStates[project.id] !== undefined) { |
| | | project.expanded = currentExpandStates[project.id]; |
| | | } |
| | | }); |
| | | } |
| | | |
| | | // 模拟网络请求延迟 |
| | | setTimeout(() => { |
| | | // 设置页面数据 |
| | | this.setData({ |
| | | planCode: mockData.planCode, |
| | | startTime: mockData.startTime, |
| | | projects: mockData.projects, |
| | | isRefreshing: false // 结束刷新状态 |
| | | }); |
| | | }, 1000); |
| | | |
| | | // 实际项目中应该使用wx.request获取数据 |
| | | // wx.request({ |
| | | // url: 'https://your-api-url/irrigation/' + id, |
| | | // method: 'GET', |
| | | // success: (res) => { |
| | | // if (res.data && res.data.code === 0) { |
| | | // // 获取新数据 |
| | | // let projects = res.data.data.projects; |
| | | // |
| | | // // 如果是首次加载,设置默认展开状态 |
| | | // if (isFirstLoad) { |
| | | // projects = projects.map((project, index) => { |
| | | // return { |
| | | // ...project, |
| | | // expanded: index === 0 // 默认只展开第一个项目 |
| | | // }; |
| | | // }); |
| | | // } else { |
| | | // // 如果不是首次加载,恢复项目的展开状态 |
| | | // projects = projects.map(project => { |
| | | // return { |
| | | // ...project, |
| | | // expanded: currentExpandStates[project.id] !== undefined |
| | | // ? currentExpandStates[project.id] |
| | | // : false |
| | | // }; |
| | | // }); |
| | | // } |
| | | // |
| | | // // 计算每个项目的总灌溉时长 |
| | | // projects = this.calculateProjectTotalDuration(projects); |
| | | // |
| | | // this.setData({ |
| | | // planCode: res.data.data.planCode, |
| | | // startTime: res.data.data.startTime, |
| | | // projects: projects, |
| | | // isRefreshing: false // 结束刷新状态 |
| | | // }); |
| | | // } else { |
| | | // wx.showToast({ |
| | | // title: '获取数据失败', |
| | | // icon: 'none' |
| | | // }); |
| | | // this.setData({ |
| | | // isRefreshing: false // 结束刷新状态 |
| | | // }); |
| | | // } |
| | | // }, |
| | | // fail: () => { |
| | | // wx.showToast({ |
| | | // title: '网络错误', |
| | | // icon: 'none' |
| | | // }); |
| | | // this.setData({ |
| | | // isRefreshing: false // 结束刷新状态 |
| | | // }); |
| | | // } |
| | | // }); |
| | | }, |
| | | |
| | | /** |
| | | * 计算每个项目的总灌溉时长 |
| | | */ |
| | | calculateProjectTotalDuration: function(projects) { |
| | | return projects.map(project => { |
| | | // 计算项目下所有轮灌组的总时长 |
| | | const totalDuration = project.groups.reduce((total, group) => { |
| | | return total + (group.duration || 0); |
| | | }, 0); |
| | | |
| | | return { |
| | | ...project, |
| | | totalDuration: totalDuration |
| | | }; |
| | | }); |
| | | }, |
| | | |
| | | /** |
| | | * 切换项目展开/收起状态 |
| | | */ |
| | | toggleProject: function (e) { |
| | | const index = e.currentTarget.dataset.index; |
| | | const expanded = this.data.projects[index].expanded; |
| | | |
| | | // 更新项目的展开状态 |
| | | const key = `projects[${index}].expanded`; |
| | | this.setData({ |
| | | [key]: !expanded |
| | | }); |
| | | }, |
| | | |
| | | /** |
| | | * 导航到轮灌组详情页面 |
| | | */ |
| | | navigateToGroupDetail: function (e) { |
| | | const projectName = e.currentTarget.dataset.projectName; |
| | | const groupName = e.currentTarget.dataset.groupName; |
| | | const groupId = e.currentTarget.dataset.groupId; |
| | | const status = e.currentTarget.dataset.status; |
| | | |
| | | console.log('跳转到组详情页面,原始状态:', status); |
| | | |
| | | // 导航到组详情页面,并传递参数 |
| | | // 注意:需要将status转换为isIrrigating参数,以便在组详情页面正确显示命令状态 |
| | | wx.navigateTo({ |
| | | url: `/pages/groupDetail/groupDetail?projectName=${projectName}&groupName=${groupName}&groupId=${groupId}&status=${status}&isIrrigating=${status === 'irrigating' ? 'true' : 'false'}` |
| | | planCode: 'IRR-2024-001', |
| | | startTime: '2024-03-20 08:00', |
| | | projects: [{ |
| | | id: 1, |
| | | name: '示例项目', |
| | | groups: [ |
| | | { |
| | | id: 1, |
| | | name: '轮灌组1', |
| | | status: 'pending', |
| | | statusText: '待灌溉', |
| | | startTime: '08:00', |
| | | endTime: '09:00', |
| | | duration: 60 |
| | | }, |
| | | { |
| | | id: 2, |
| | | name: '轮灌组2', |
| | | status: 'in_progress', |
| | | statusText: '灌溉中', |
| | | startTime: '09:00', |
| | | endTime: '10:00', |
| | | duration: 60 |
| | | }, |
| | | { |
| | | id: 3, |
| | | name: '轮灌组3', |
| | | status: 'completed', |
| | | statusText: '已完成', |
| | | startTime: '10:00', |
| | | endTime: '11:00', |
| | | duration: 60 |
| | | } |
| | | ] |
| | | }] |
| | | }); |
| | | }, |
| | | |
| | |
| | | * 下拉刷新处理函数 |
| | | */ |
| | | onPullDownRefresh: function () { |
| | | // 重新加载数据,但保持展开状态 |
| | | if (this.data.planId) { |
| | | this.loadIrrigationDetail(this.data.planId, false); |
| | | } else { |
| | | this.setData({ |
| | | isRefreshing: true |
| | | }); |
| | | |
| | | // 模拟刷新数据 |
| | | setTimeout(() => { |
| | | this.setData({ |
| | | isRefreshing: false |
| | | }); |
| | | } |
| | | }, 1000); |
| | | }, |
| | | |
| | | /** |
| | |
| | | */ |
| | | onShareAppMessage: function () { |
| | | |
| | | }, |
| | | |
| | | /** |
| | | * 导航到轮灌组详情页面 |
| | | */ |
| | | navigateToGroupDetail: function (e) { |
| | | const { projectName, groupName, groupId, status } = e.currentTarget.dataset; |
| | | wx.navigateTo({ |
| | | url: `/pages/groupDetail/groupDetail?projectName=${projectName}&groupName=${groupName}&groupId=${groupId}&status=${status}` |
| | | }); |
| | | } |
| | | }) |