// pages/waterIntake/waterIntake.js const { get, post } = require('../../api/request.js'); Page({ data: { currentTab: 0, // 当前显示的表格,默认为第一个表格 searchQuery: "", commonWaterPoints: [], // 常用取水口数据 allWaterPoints: [], // 所有取水口数据 searchData: [{ intakeNum: "1111111" }, { intakeNum: "2222222" }], isRefreshing_all: false, isRefreshing_common: false, showConfirm: false, waterIntakeName: "", choseItem: null, errorData: '', //错误内容 showErrorDialog: false, confirmBtn: { content: '确认' }, showForceConfirm: false, forceIntakeId: "", //强制开阀的取水口id inputValue: "", //以下为开阀弹窗相关 isShowOpenTime: "false", isOpenTiming: false, //是否是计划开阀时间样式的开阀 postMinutes: 0, //定灌溉时长的时间 showForceConfirm: false, showErrorDialog: false, //错误提示 showDialog: false, dialog_mode: false, dialog_time: false, dialog_water: false, openTimeText: "", openTime: "", irrigateProfile: [], //获取所选灌溉方式的详细数据 dialog_mode: true, dialog_time: false, dialog_water: false, group_time: false, //是否显示选择分钟或小时的单选框 openTime: "", //计划开泵的开始时间 openTimeText: "", isShowOpenTime: "false", isOpenTiming: false, //是否是计划开阀时间样式的开阀 postMinutes: 0, //定灌溉时长的时间 showForceConfirm: false, showErrorDialog: false, //错误提示 errorData: "", confirmBtn: { content: '确认' }, radioValue: "0", //开阀方式选中的类型 costiomTime: "", //自定义灌溉时间 waterAmount: 0, //定量开阀的水量 costiomWater: "", //输入的自定义水量 isWXRefreshing: false, irrigateProfile: [], //获取所选灌溉方式的详细数据 datetimeVisible: false, }, // 切换 Tabs switchTab: function (e) { const tab = parseInt(e.currentTarget.dataset.tab); this.setData({ currentTab: tab }); }, onInput(e) { this.setData({ searchQuery: e.detail.value // 将输入框的值存储到 inputValue }); }, onSearch: function () { const query = this.data.searchQuery; if (query) { this.getallWaterPoints(query) // 在这里进行搜索操作,更新 allWaterPoints 数据 } else { this.setData({ allWaterPoints: [] }) } }, /** * 选择虚拟卡 * @param {} event */ choseCard(event) { //显示二次确认弹窗 this.setData({ // showConfirm: true, choseItem: event.currentTarget.dataset.item, allWaterPoints: [] }) this.initDialogData(); // console.log(intakeId); // wx.navigateTo({ // url: '/pages/openCard/openCard?intakeId='+intakeId, // }) }, //开泵通信 /** * * @param {*} intakeId 取水口id * @param {*} isforce 是否强制开阀 */ postOpenValva(intakeId, isforce) { this.setData({ inputValue: "" }) console.log("intakeId:" + intakeId + " isforce:" + isforce) wx.showLoading({ title: '正在开阀请稍候...', // 加载提示文字 mask: true // 是否显示透明蒙层,防止触摸穿透,默认为 false }); const app = getApp(); const data = { intakeId: this.data.choseItem.intakeId, //取水口ID // vcId: app.globalData.vcId, //虚拟卡ID operator: app.globalData.clientId, //操作员 forceOpen: !!isforce // 使用逻辑非操作符 !! 来确保 isForce 是布尔值 }; post({ url: "wx/valve/open_wx", data: data, timeout: 180000 }).then(response => { // 处理成功响应 console.log('请求成功:', response); // 加载完成后隐藏加载动画 wx.hideLoading(); //完成后回到首页 wx.reLaunch({ url: '/pages/home/home?param=true' // 首页的路径,根据实际情况填写 }); }).catch(error => { // 加载完成后隐藏加载动画 wx.hideLoading(); // 处理错误响应 console.error('请求失败:', error); if (error.code === "10005") { this.setData({ forceIntakeId: intakeId, showForceConfirm: true }) } else { this.setData({ showErrorDialog: true, errorData: error.msg }) } }); }, /** * 生命周期函数--监听页面加载 */ onLoad(options) { }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady() { this.getcommonWaterPoints(); }, /** * 生命周期函数--监听页面显示 */ onShow() { }, /** * 生命周期函数--监听页面隐藏 */ onHide() { }, /** * 生命周期函数--监听页面卸载 */ onUnload() { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom() { }, /** * 用户点击右上角分享 */ onShareAppMessage() { }, /** *在所有取水口搜索 */ getallWaterPoints: function (intakeNum) { let params = { url: 'wx/intake/all_intakes' }; if (intakeNum) { params.data = { intakeNum: intakeNum }; } get(params) .then((data) => { this.setData({ isRefreshing_all: false }); if (data.success && data.code === "0001") { if (!data.content) { wx.showToast({ title: '没有搜索到取水口', icon: 'error', }) } else { this.setData({ allWaterPoints: [data.content] }); } } else { wx.showToast({ title: data.msg, }) } console.log('Failed to add item:'); }) .catch((error) => { this.setData({ isRefreshing_all: false }); wx.showToast({ title: error.msg, icon: 'error', duration: 3000 // 提示的持续时间,单位毫秒 }) console.error('Failed to add item:', error); }); }, //获取常用取水口 getcommonWaterPoints() { get({ url: 'wx/intake/used_intakes', data: { operatorId: getApp().globalData.clientId } }) .then((data) => { this.setData({ isRefreshing_common: false }); if (data.success && data.code === "0001") { this.setData({ commonWaterPoints: data.content }); } else { wx.showToast({ title: data.msg, }) } console.log('Failed to add item:'); }) .catch((error) => { this.setData({ isRefreshing_common: false }); wx.showToast({ title: error.msg, icon: 'error', duration: 3000 // 提示的持续时间,单位毫秒 }) console.error('Failed to add item:', error); }); }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh_all() { this.getallWaterPoints(); }, onPullDownRefresh_common() { this.getcommonWaterPoints(); }, confirmDialog() { // this.setData({ // showConfirm: false // }) // this.postOpenValva(this.data.choseItem.intakeId); this.setData({ showConfirm: false }) this.initDialogData(); }, closeDialog() { this.setData({ showConfirm: false }) }, closeErrorDialog() { this.setData({ showErrorDialog: false }) }, cancelDialog() { this.setData({ showForceConfirm: false }); }, //强制开阀 confirmForceDialog() { this.postOpenValva(this.data.forceIntakeId, true); }, closeSearch() { this.setData({ allWaterPoints: [], inputValue: "" }) }, //以下为定时定量相关代码 //初始化所有开泵的参数 initDialogData() { this.setData({ isShowOpenTime: "false", isOpenTiming: false, //是否是计划开阀时间样式的开阀 postMinutes: 0, //定灌溉时长的时间 showForceConfirm: false, showErrorDialog: false, //错误提示 showDialog: true, dialog_mode: true, dialog_time: false, dialog_water: false, openTimeText: "", openTime: "" }) }, handleClost() { this.setData({ showDialog: false }) }, handleSetDuration() { this.getIrrigateProfileData(1); }, //获取常用用水时长及用水量 getIrrigateProfileData(type) { get({ url: 'wx/valve/irrigate_profile', data: { type: type } }) .then((data) => { if (data.success && data.code === "0001") { const items = data.content.obj.map(item => { return { defaultValue: item.defaultValue, unit: item.unit, unitText: item.unit === "1" ? "小时" : item.unit === "2" ? "分钟" : "立方米" }; }); this.setData({ dialog_mode: false, dialog_time: type === 1, dialog_water: type === 2, irrigateProfile: items }); } else { wx.showToast({ title: data.msg, }) } console.log('Failed to add item:'); }) .catch((error) => { console.error('Failed to add item:', error); }); }, handleSetWaterVolume() { this.getIrrigateProfileData(2); }, dialogBack() { this.setData({ dialog_time: false, dialog_water: false, dialog_mode: true, group_time: false, activeIndex: -1 }) }, //选择时间后的处理 handleTimeWrapperTap(e) { const index = e.currentTarget.dataset.index; console.log(index) if (index !== undefined) { let minutes; if (this.data.irrigateProfile[index].unit === "1") { minutes = this.hourToMinutes(this.data.irrigateProfile[index].defaultValue) } else { minutes = this.data.irrigateProfile[index].defaultValue; } this.setData({ activeIndex: parseInt(index), postMinutes: minutes, costiomTime: "", group_time: false, }); } }, onTimeInputChange(data) { console.log(data.detail.value) if (data.detail.value !== "") { this.setData({ group_time: true, activeIndex: -1, postMinutes: parseInt(data.detail.value) }) } else { this.setData({ group_time: false, postMinutes: 0, }) } }, //定灌溉时长自定义输入时间时修改时间单位0:分钟,1:小时 onGroupOpenTimeTypeChange(event) { let value = event.detail.value; if (value === "1") { this.setData({ postMinutes: this.hourToMinutes(this.data.postMinutes) }) } else { this.setData({ postMinutes: this.minutesToHours(this.data.postMinutes) }) } }, onGroupOpenTimeChange(event) { const { value } = event.detail; console.log('onGroupOpenTimeChange:' + value); if (value == 1) { this.showPicker(); this.setData({ isOpenTiming: true, radioValue: value, dateStartTime: new Date().getTime() }) } else { this.setData({ isShowOpenTime: false, isOpenTiming: false, radioValue: value, }) } }, //定时开泵按钮 btnOpenOnTime() { if (this.data.postMinutes > 0) { if (this.data.isOpenTiming) { this.timeClosePlaned(); } else { this.timeClose(); } } else { wx.showToast({ icon: 'error', title: '请选择或输入灌溉时间!', }) } }, //定时关阀式计划开阀 timeClosePlaned() { const app = getApp(); wx.showLoading({ title: '正在通信请稍候...', // 加载提示文字 mask: true // 是否显示透明蒙层,防止触摸穿透,默认为 false }); const data = { intakeId: this.data.choseItem.intakeId, //取水口ID // vcId: app.globalData.vcId, //虚拟卡ID minutes: this.data.postMinutes, //分钟 operator: app.globalData.clientId, //操作员 plannedOpenTime: this.data.openTime }; post({ url: "wx/valve/planed_open_timed_close", data: data }).then(response => { // 处理成功响应 console.log('请求成功:', response); // 加载完成后隐藏加载动画 wx.hideLoading(); //完成后回到首页 wx.reLaunch({ url: '/pages/home/home?param=2' // 首页的路径,根据实际情况填写 }); }).catch(error => { // 加载完成后隐藏加载动画 wx.hideLoading(); // 处理错误响应 console.error('请求失败:', error); this.setData({ showErrorDialog: true, errorData: error.msg }) }); }, //定时关阀式开阀 timeClose() { const app = getApp(); wx.showLoading({ title: '正在开阀请稍候...', // 加载提示文字 mask: true // 是否显示透明蒙层,防止触摸穿透,默认为 false }); const data = { intakeId: this.data.choseItem.intakeId, //取水口ID // vcId: app.globalData.vcId, //虚拟卡ID minutes: this.data.postMinutes, //分钟 operator: app.globalData.clientId //操作员 }; post({ url: "wx/valve/timed_close", data: data }).then(response => { // 处理成功响应 console.log('请求成功:', response); // 加载完成后隐藏加载动画 wx.hideLoading(); //完成后回到首页 wx.reLaunch({ url: '/pages/home/home?param=1' // 首页的路径,根据实际情况填写 }); }).catch(error => { // 加载完成后隐藏加载动画 wx.hideLoading(); // 处理错误响应 console.error('请求失败:', error); this.setData({ showErrorDialog: true, errorData: error.msg }) }); }, // 通过小时转换成分钟 hourToMinutes(hours) { // 检查输入是否合法 if (isNaN(hours) || hours < 0) { console.error('请输入有效的小时数'); return null; } // 将小时转换为分钟 const minutes = hours * 60; return minutes; }, minutesToHours(minutes) { // 检查输入是否合法 if (isNaN(minutes) || hours < 0) { console.error('请输入有效的小时数'); return null; } // 将小时转换为分钟 const hours = minutes / 60; return hours; }, // 选择水量后的处理 handleWaterWrapperTap(e) { const index = e.currentTarget.dataset.index; console.log(index) if (index !== undefined) { this.data.waterAmount = parseInt(this.data.irrigateProfile[index].defaultValue) this.setData({ activeIndex: parseInt(index), costiomWater: "" }); } }, //显示时间选择器 showPicker(e) { this.setData({ datetime: new Date().getTime(), datetimeVisible: true, isShowOpenTime: true }); }, onConfirm(e) { const { value } = e?.detail; console.log(value); this.setData({ openTime: value, openTimeText: "计划开阀时间:" + value }) }, hidePicker() { this.setData({ isShowOpenTime: false, isOpenTiming: false, radioValue: "0" }) }, })