| // 开阀选择虚拟卡 | 
| const { | 
|   get, | 
|   post | 
| } = require('../../api/request.js'); | 
| Page({ | 
|   | 
|   /** | 
|    * 页面的初始数据 | 
|    */ | 
|   data: { | 
|     intakeId: 0, | 
|     showDialog: false, | 
|     vcId: "", | 
|     activeIndex: -1, | 
|     datetimeVisible: false, | 
|     dateStartTime: new Date().getTime(), | 
|     dateEndTime: new Date().getTime() + 24 * 60 * 60 * 1000, | 
|     datetimeText: '', | 
|     allCardPoints: [], // 所有虚拟卡 | 
|     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, | 
|     intakeName: "" //扫码开阀从首页传来的取水口名称 | 
|   }, | 
|   openValva(event) { | 
|     const { | 
|       item | 
|     } = event.currentTarget.dataset; // 获取当前点击的 item | 
|     if (item.isAlarmValue === true) { | 
|       //金额报警 | 
|       wx.navigateTo({ | 
|         url: '/pages/rechargeMoney/rechargMoney?vcId=' + item.id, | 
|       }) | 
|     } else if (item.inUse === false) { | 
|       this.setData({ | 
|         vcId: item.id, | 
|       }) | 
|       if (this.data.intakeName) { | 
|         //扫码开阀逻辑 | 
|         this.postOpenValva(false); | 
|       } else { | 
|         // 选择虚拟卡后 | 
|         this.initDialogData(); | 
|       } | 
|   | 
|     } | 
|   }, | 
|   handleAutoIrrigation() {}, | 
|   | 
|   /** | 
|    * 生命周期函数--监听页面加载 | 
|    */ | 
|   onLoad(options) { | 
|     const { | 
|       intakeId, | 
|       intakeName | 
|     } = options; | 
|     this.setData({ | 
|       intakeId: intakeId, | 
|       intakeName: intakeName | 
|     }) | 
|     console.log('intakeId:' + this.data.intakeId); | 
|     this.getCardList(); | 
|   }, | 
|   | 
|   /** | 
|    * 生命周期函数--监听页面初次渲染完成 | 
|    */ | 
|   onReady() { | 
|   | 
|   }, | 
|   | 
|   /** | 
|    * 生命周期函数--监听页面显示 | 
|    */ | 
|   onShow() { | 
|     console.log("onShow>>>>" + this.data.isShowOpenTime) | 
|   }, | 
|   | 
|   /** | 
|    * 生命周期函数--监听页面隐藏 | 
|    */ | 
|   onHide() { | 
|   | 
|   }, | 
|   | 
|   /** | 
|    * 生命周期函数--监听页面卸载 | 
|    */ | 
|   onUnload() { | 
|   | 
|   }, | 
|   | 
|   /** | 
|    * 页面相关事件处理函数--监听用户下拉动作 | 
|    */ | 
|   onPullDownRefresh() { | 
|     this.setData({ | 
|       isWXRefreshing: true | 
|     }); | 
|     this.getCardList(); | 
|   }, | 
|   | 
|   /** | 
|    * 页面上拉触底事件的处理函数 | 
|    */ | 
|   onReachBottom() { | 
|   | 
|   }, | 
|   | 
|   /** | 
|    * 用户点击右上角分享 | 
|    */ | 
|   onShareAppMessage() { | 
|   | 
|   }, | 
|   //获取虚拟卡列表 | 
|   getCardList() { | 
|     get({ | 
|         url: 'wx/virtual_card/get', | 
|         data: { | 
|           clientId: getApp().globalData.clientId | 
|         } | 
|       }) | 
|       .then((data) => { | 
|         if (data.success && data.code === "0001") { | 
|           this.setData({ | 
|             allCardPoints: data.content | 
|           }); | 
|           this.updateDisplayText(); | 
|         } else { | 
|           wx.showToast({ | 
|             title: data.msg, | 
|           }) | 
|         } | 
|         console.log('Failed to add item:'); | 
|       }) | 
|       .catch((error) => { | 
|         console.error('Failed to add item:', error); | 
|       }); | 
|   }, | 
|   updateDisplayText() { | 
|     const updatedList = this.data.allCardPoints.map(item => { | 
|       let displayText = ''; | 
|       if (item.inUse) { | 
|         displayText = '使用中'; | 
|       } else { | 
|         if (item.isAlarmValue) { | 
|           displayText = '充值'; | 
|         } else { | 
|           displayText = '选择'; | 
|         } | 
|       } | 
|       return { | 
|         ...item, | 
|         displayText | 
|       }; // 保留所有其他字段,并添加 displayText 字段 | 
|     }); | 
|     // 更新列表数据 | 
|     this.setData({ | 
|       allCardPoints: updatedList, | 
|       isWXRefreshing: false | 
|     }); | 
|   }, | 
|   handleClost() { | 
|     this.setData({ | 
|       showDialog: false | 
|     }) | 
|   }, | 
|   //选择时间后的处理 | 
|   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, | 
|       }); | 
|     } | 
|   }, | 
|   // 选择水量后的处理 | 
|   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: "" | 
|       }); | 
|     } | 
|   }, | 
|   //获取常用用水时长及用水量 | 
|   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); | 
|       }); | 
|   }, | 
|   handleSetDuration() { | 
|     this.getIrrigateProfileData(1); | 
|   }, | 
|   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, | 
|       }) | 
|     } | 
|   }, | 
|   //显示时间选择器 | 
|   showPicker(e) { | 
|     this.setData({ | 
|       datetime: new Date().getTime(), | 
|       datetimeVisible: true, | 
|       isShowOpenTime: true | 
|     }); | 
|   }, | 
|   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, | 
|       }) | 
|     } | 
|   | 
|   }, | 
|   onConfirm(e) { | 
|     const { | 
|       value | 
|     } = e?.detail; | 
|     console.log(value); | 
|     this.setData({ | 
|       openTime: value, | 
|       openTimeText: "计划开阀时间:" + value | 
|     }) | 
|   }, | 
|   handleSetWaterVolume() { | 
|     this.getIrrigateProfileData(2); | 
|   }, | 
|   dialogBack() { | 
|     this.setData({ | 
|       dialog_time: false, | 
|       dialog_water: false, | 
|       dialog_mode: true, | 
|       group_time: false, | 
|       activeIndex: -1 | 
|     }) | 
|   }, | 
|   //立即开泵 | 
|   postOpenValva(isforce) { | 
|     wx.showLoading({ | 
|       title: '正在开阀请稍候...', // 加载提示文字 | 
|       mask: true // 是否显示透明蒙层,防止触摸穿透,默认为 false | 
|     }); | 
|     const app = getApp(); | 
|     const data = { | 
|       intakeId: this.data.intakeId, //取水口ID | 
|       vcId: this.data.vcId, //虚拟卡ID | 
|       intakeName: this.data.intakeName, //取水口名称 | 
|       operator: app.globalData.sessionId, //操作员 | 
|       forceOpen: !!isforce // 使用逻辑非操作符 !! 来确保 isForce 是布尔值   | 
|     }; | 
|     post({ | 
|       url: "wx/valve/open_wx", | 
|       data: data | 
|     }).then(response => { | 
|   | 
|       // 处理成功响应 | 
|       console.log('请求成功:', response); | 
|       // 加载完成后隐藏加载动画 | 
|       wx.hideLoading(); | 
|       //完成后回到首页 | 
|       wx.reLaunch({ | 
|         url: '/pages/home/home?param=1' // 首页的路径,根据实际情况填写 | 
|       }); | 
|   | 
|     }).catch(error => { | 
|       // 加载完成后隐藏加载动画 | 
|       wx.hideLoading(); | 
|       // 处理错误响应 | 
|       console.error('请求失败:', error); | 
|       // if (error.code === "10005") { | 
|       //   this.setData({ | 
|       //     showDialog: false, | 
|       //     showForceConfirm: true | 
|       //   }) | 
|       // } else { | 
|       this.setData({ | 
|         showErrorDialog: true, | 
|         errorData: error.msg | 
|       }) | 
|       // } | 
|     }); | 
|   }, | 
|   //定时关阀式开阀 | 
|   timeClose() { | 
|     const app = getApp(); | 
|     wx.showLoading({ | 
|       title: '正在开阀请稍候...', // 加载提示文字 | 
|       mask: true // 是否显示透明蒙层,防止触摸穿透,默认为 false | 
|     }); | 
|     const data = { | 
|       intakeId: this.data.intakeId, //取水口ID | 
|       vcId: this.data.vcId, //虚拟卡ID | 
|       minutes: this.data.postMinutes, //分钟 | 
|       operator: app.globalData.sessionId //操作员 | 
|     }; | 
|     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 | 
|       }) | 
|     }); | 
|   }, | 
|   //定时关阀式计划开阀 | 
|   timeClosePlaned() { | 
|     const app = getApp(); | 
|     wx.showLoading({ | 
|       title: '正在通信请稍候...', // 加载提示文字 | 
|       mask: true // 是否显示透明蒙层,防止触摸穿透,默认为 false | 
|     }); | 
|     const data = { | 
|       intakeId: this.data.intakeId, //取水口ID | 
|       vcId: this.data.vcId, //虚拟卡ID | 
|       minutes: this.data.postMinutes, //分钟 | 
|       operator: app.globalData.sessionId, //操作员 | 
|       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 | 
|       }) | 
|     }); | 
|   }, | 
|   //定量开阀 | 
|   quantifyOpen() { | 
|     const app = getApp(); | 
|     wx.showLoading({ | 
|       title: '正在开阀请稍候...', // 加载提示文字 | 
|       mask: true // 是否显示透明蒙层,防止触摸穿透,默认为 false | 
|     }); | 
|     const data = { | 
|       intakeId: this.data.intakeId, //取水口ID | 
|       vcId: this.data.vcId, //虚拟卡ID | 
|       waterAmount: this.data.waterAmount, //水量 | 
|       operator: app.globalData.sessionId //操作员 | 
|     }; | 
|     post({ | 
|       url: "wx/valve/quantify_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 | 
|       }) | 
|     }); | 
|   }, | 
|   //定量开阀式计划开阀 | 
|   quantifyOpenTime() { | 
|     const app = getApp(); | 
|     wx.showLoading({ | 
|       title: '正在通信请稍候...', // 加载提示文字 | 
|       mask: true // 是否显示透明蒙层,防止触摸穿透,默认为 false | 
|     }); | 
|     const data = { | 
|       intakeId: this.data.intakeId, //取水口ID | 
|       vcId: this.data.vcId, //虚拟卡ID | 
|       waterAmount: this.data.waterAmount, //水量 | 
|       operator: app.globalData.sessionId, //操作员 | 
|       plannedOpenTime: this.data.openTime | 
|     }; | 
|     post({ | 
|       url: "wx/valve/planed_open_quantify_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 | 
|       }) | 
|     }); | 
|   }, | 
|   // 通过小时转换成分钟 | 
|   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; | 
|   }, | 
|   //定时开泵按钮 | 
|   btnOpenOnTime() { | 
|     if (this.data.postMinutes > 0) { | 
|       if (this.data.isOpenTiming) { | 
|         this.timeClosePlaned(); | 
|       } else { | 
|         this.timeClose(); | 
|       } | 
|     } else { | 
|       wx.showToast({ | 
|         icon: 'error', | 
|         title: '请选择或输入灌溉时间!', | 
|       }) | 
|     } | 
|   | 
|   }, | 
|   cancelDialog() { | 
|     this.setData({ | 
|       showForceConfirm: false | 
|     }); | 
|   }, | 
|   //强制开阀 | 
|   confirmForceDialog() { | 
|     this.postOpenValva(this.data.forceIntakeId, true); | 
|   }, | 
|   //关闭错误提示 | 
|   closeErrorDialog() { | 
|     this.setData({ | 
|       showErrorDialog: false | 
|     }) | 
|   }, | 
|   hidePicker() { | 
|     this.setData({ | 
|       isShowOpenTime: false, | 
|       isOpenTiming: false, | 
|       radioValue: "0" | 
|     }) | 
|   }, | 
|   //初始化所有开泵的参数 | 
|   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: "" | 
|     }) | 
|   }, | 
|   //定灌溉时长自定义输入时间时修改时间单位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) | 
|       }) | 
|     } | 
|   }, | 
|   //输入自定义水量的监听 | 
|   onWaterInputChange(data) { | 
|     console.log(data.detail.value) | 
|     if (data.detail.value !== "") { | 
|       this.setData({ | 
|         activeIndex: -1, | 
|         waterAmount: parseInt(data.detail.value) | 
|       }) | 
|     } else { | 
|       this.setData({ | 
|         waterAmount: 0, | 
|       }) | 
|     } | 
|   }, | 
|   // 定量开泵按钮 | 
|   btnOpenOnWater() { | 
|     if (this.data.waterAmount > 0) { | 
|       if (this.data.isOpenTiming) { | 
|         this.quantifyOpenTime(); | 
|       } else { | 
|         this.quantifyOpen(); | 
|       } | 
|     } else { | 
|       wx.showToast({ | 
|         icon: 'error', | 
|         title: '请选择或输入灌溉时间!', | 
|       }) | 
|     } | 
|   }, | 
|   | 
|   | 
| }) |