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
|
});
|
},
|
});
|