// pages/workorder/index.js const api = require('../../api/index.js'); Page({ /** * 页面的初始数据 */ data: { array:['日常','故障','其他'], namelist:[], typelist:['日常','故障','其他'], devicedata:[], index:1, nameindex:'', typeindex:0, deviceindex:'', date:'', partnerAvite:[], priority:'1', workorderContent:'', switchtype:true, datestart:'', dateend:'', powerindex:'', powerdata:[], workorderName:'', workorderAddress:'', visible:false, checkedItems:[], checkedPartnerIds:'', equipment:false, equipmentItems:[], equipmentPartnerIds:'' }, /** * 生命周期函数--监听页面加载 */ onLoad(options) { console.log(options.name); this.setData({ index:options.name }) this.getpowerdata() }, onworkorder(){ if (this.data.workorderName==''||this.data.dateend==''||this.data.datestart==''||this.data.checkedPartnerIds==''||this.data.equipmentPartnerIds==''||this.data.powerindex=='') { wx.showToast({ title: '请填写完整工单', icon: 'none' }); return } if (!this.data.switchtype) { return } this.setData({ switchtype:false }) let data = { workorderName:this.data.workorderName, workorderAddress:this.data.workorderAddress, workorderImg:this.data.partnerAvite.length>0?this.data.partnerAvite.toString():'', workorderContent:this.data.workorderContent, workoderPartner:this.data.checkedPartnerIds, workorderEndtime:this.data.dateend, // 开始时间 workorderStarttime:this.data.datestart, // 结束时间 workorderGrade:this.data.priority, powerstationId:this.data.powerdata[this.data.powerindex].powerstationId, type:(this.data.index*1)+1, deviceId:this.data.equipmentPartnerIds } api.request(`/workoder/createworkorder`, 'POST',data) .then((res) => { console.log(res); if (res.code==200) { // this.requestSubscribeMessage(); // this.loadMessages(); this.setData({ switchtype:true }) wx.switchTab({ url: '/pages/index/index', }) }else{ wx.showToast({ title: '提交失败', icon: 'none' }); } }) .catch((err) => { console.error('请求失败:', err); // 在这里处理请求失败的情况 this.setData({ switchtype:true }) }); }, bindpowerChange(e){ console.log('picker发送选择改变,携带值为', e.detail.value) this.setData({ powerindex: e.detail.value }) this.getselectdevicelist() this.getselectinformationall() }, // 电站 getpowerdata(){ api.request(`/syspowerstation/selectpowestation`, 'POST') .then((res) => { console.log(res); this.setData({ powerdata:res.data }) }) .catch((err) => { console.error('请求失败:', err); // 在这里处理请求失败的情况 }); }, // 用户信息 getselectinformationall(){ this.setData({ namelist:[] }) let data = { powerstationId:this.data.powerdata[this.data.powerindex].powerstationId } api.request(`/partner/selectinformationall`, 'POST',data) .then((res) => { console.log(res); const newNamelist = res.data.map(item => ({ ...item, // 保留原有字段(如partnerName) isChecked: false // 新增选中状态字段,默认未选中 })); this.setData({ namelist:newNamelist }) }) .catch((err) => { console.error('请求失败:', err); // 在这里处理请求失败的情况 }); }, onVisibleChange(e){ console.log(e); this.setData({ visible:false, equipment:false }) }, // 设备列表 getselectdevicelist(){ this.setData({ devicedata:[] }) let data = { powerstationId:this.data.powerdata[this.data.powerindex].powerstationId } api.request(`/device/selectdevicelist`, 'POST',data) .then((res) => { console.log(res); const newNamelist = res.data.map(item => ({ ...item, // 保留原有字段(如partnerName) isChecked: false // 新增选中状态字段,默认未选中 })); this.setData({ devicedata:newNamelist }) }) .catch((err) => { console.error('请求失败:', err); // 在这里处理请求失败的情况 }); }, onPeakprice(e){ console.log(e.detail.value); this.setData({ workorderName:e.detail.value }) }, onaddress(e){ console.log(e.detail.value); this.setData({ workorderAddress:e.detail.value }) }, ontextarea(e){ console.log(e); this.setData({ workorderContent:e.detail.value }) }, // 当namelist为空时,点击触发提示 showEmptyTip() { wx.showToast({ title: '请先选择电站', icon: 'none', // 不显示图标,只显示文字 duration: 2000 // 提示2秒 }); }, /** * 切换选项的选中状态 */ toggleCheck(e) { const index = e.currentTarget.dataset.index; // 复制原列表并切换当前选项的选中状态 const newNamelist = [...this.data.namelist]; newNamelist[index].isChecked = !newNamelist[index].isChecked; // 1. 筛选所有选中的选项 const checkedItems = newNamelist.filter(item => item.isChecked); // 2. 提取选中项的partnerId,并用逗号拼接(若没有选中项,返回空字符串) const checkedPartnerIds = checkedItems.map(item => item.partnerId).join(','); // 更新data:同时保存列表、选中项、拼接后的ID字符串 this.setData({ namelist: newNamelist, checkedItems: checkedItems, // 保存完整选中项(可选) checkedPartnerIds: checkedPartnerIds // 保存逗号拼接的ID字符串(方便后续使用) }); // 打印结果示例:若选中ID为1、3的项,会输出 "当前选中的partnerId:1,3" console.log("当前选中的partnerId:", this.data.checkedPartnerIds); }, /** * 切换选项的选中状态 */ togequipment(e) { const index = e.currentTarget.dataset.index; // 复制原列表并切换当前选项的选中状态 const newNamelist = [...this.data.devicedata]; newNamelist[index].isChecked = !newNamelist[index].isChecked; // 1. 筛选所有选中的选项 const checkedItems = newNamelist.filter(item => item.isChecked); // 2. 提取选中项的partnerId,并用逗号拼接(若没有选中项,返回空字符串) const checkedPartnerIds = checkedItems.map(item => item.deviceId).join(','); // 更新data:同时保存列表、选中项、拼接后的ID字符串 this.setData({ devicedata: newNamelist, equipmentItems: checkedItems, // 保存完整选中项(可选) equipmentPartnerIds: checkedPartnerIds // 保存逗号拼接的ID字符串(方便后续使用) }); if (this.data.index==1) { this.setData({ workorderAddress:this.data.equipmentItems.map(item => item.devicesName) }) } // 打印结果示例:若选中ID为1、3的项,会输出 "当前选中的partnerId:1,3" console.log("当前选中的partnerId:", this.data.equipmentPartnerIds); }, // 用户弹窗 bindPickerChange(e){ console.log('picker发送选择改变,携带值为', e.detail.value) this.setData({ visible:true }) // nameindex: e.detail.value }, Indeedbutton1(){ this.setData({ visible:false }) }, Indeedbutton2(){ this.setData({ equipment:false }) }, binddeviceChange(){ // console.log('picker发送选择改变,携带值为', e.detail.value) this.setData({ equipment:true // deviceindex: e.detail.value }) }, bindeventChange(e){ this.setData({ index: e.detail.value }) }, // 开始时间 bindstartChange: function(e) { console.log('picker发送选择改变,携带值为', e.detail.value) this.setData({ datestart: e.detail.value }) }, // 结束时间 bindendChange: function(e) { const selectedEnd = e.detail.value; console.log('picker发送选择改变,携带值为', e.detail.value) const { datestart } = this.data; // 检查结束时间是否早于开始时间 if (datestart && selectedEnd < datestart) { wx.showToast({ title: '结束时间不能早于开始时间', icon: 'none', duration: 2000 }); return; // 不更新结束时间 } // 验证通过,更新结束时间 this.setData({ dateend: selectedEnd }); }, // 工单优先级 onradio(e){ console.log(e.detail.value); this.setData({ priority:e.detail.value }) }, // 预览图片 previewImage(e) { const src = e.currentTarget.dataset.src; wx.previewImage({ current: src, // 当前显示图片的http链接 urls: [src] // 需要预览的图片http链接列表 }); }, bindCancel(e){ console.log(e.currentTarget.dataset.index); let index = e.currentTarget.dataset.index // 使用 filter 方法创建新数组(推荐) const newPartnerAvite = this.data.partnerAvite.filter((item, i) => i !== index); this.setData({ partnerAvite: newPartnerAvite }); }, // 上传头像--项目--文件1 bindtoImage(){ let _this = this // 先检查隐私授权状态 wx.getPrivacySetting({ success: (res) => { if (res.needAuthorization) { // 弹出隐私协议弹窗 wx.requirePrivacyAuthorize({ success: () => { console.log('用户已同意隐私协议'); _this.choosetoImage(); // 继续执行上传 }, fail: () => { console.log('用户拒绝了隐私协议'); wx.showToast({ title: '需同意隐私协议才能使用', icon: 'none' }); } }); } else { _this.choosetoImage(); // 已授权,直接上传 } } }); }, // 上传头像图片 choosetoImage() { let _this = this wx.chooseMedia({ count: 1, mediaType: ['image','video'], sourceType: ['album', 'camera'], success(res) { console.log(res); const tempFiles = res.tempFiles; _this.setData({ imageList: tempFiles.map(file => file.tempFilePath), }); _this.uploadtoImages(tempFiles); }, fail(err) { console.error("选择失败:", err); } }) }, // 上传到服务器 uploadtoImages(files) { let _this =this const token = wx.getStorageSync('token'); files.forEach((file) => { wx.uploadFile({ url: 'https://esos-iot.com:8443/config/upload/webPost', filePath: file.tempFilePath, name: 'file', formData: { file:file.tempFilePath }, header: { 'Authorization': 'Bearer ' + token // Also add to header if needed }, success: (res) => { console.log(res); const obj = JSON.parse(res.data); this.data.partnerAvite.push(obj.data.partnerAvite) this.setData({ partnerAvite:this.data.partnerAvite }) }, fail: (err) => { console.error('上传失败', err); }, }); }); }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady() { }, /** * 生命周期函数--监听页面显示 */ onShow() { }, /** * 生命周期函数--监听页面隐藏 */ onHide() { }, /** * 生命周期函数--监听页面卸载 */ onUnload() { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh() { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom() { }, /** * 用户点击右上角分享 */ onShareAppMessage() { } })