// package/troubleshooting/shootingForm/index.js import { getPatrolRecordIssueHandleById, getStructuresUsers, editPatrolRecordIssueHandle, getPatrolRecord } from "../../../utils/getApiUrl"; import { Request } from "../../../common"; const moment = require("../../../utils/moment"); Page({ /** * 页面的初始数据 */ data: { imgServer: getApp().globalData.imgUrl, userInfo: wx.getStorageSync("userInfo"), data: {}, strucFocusUser: {}, focusPerson: [], tabIndex: '', shootingid: '', pointItemCollapseActiveNames: undefined, maintenancePersonIndex: undefined, maintenancePersonId: null, maintenancePersonDepartmentShow: '', maintenanceRequirement: '', qualityPersonIndex: undefined, planStartTimePopupShow: false, planStartTime: '', planStartTimeShow: '', planEndTimePopupShow: false, planEndTime: '', planEndTimeShow: '', planApproval: '', planApprovalPerson: '', planApprovalTime: '', repair: '', repairImgs: [], checkDesc: '', cost: '', checkImgs: [], // 表单控制 isPlanState: false, isApprove: false, isRepair: false, isCheck: false, }, /** * 生命周期函数--监听页面加载 */ onLoad(options) { const { shootingid, tabIndex } = options if (shootingid) { this.setData({ shootingid, tabIndex }) Promise.all( [ Request.get(getPatrolRecordIssueHandleById(shootingid), {}), Request.get(getStructuresUsers(), {}) ] ).then(res => { const [issue, strucUser] = res const nextData = { ...issue, PatrolRecord: { ...issue.PatrolRecord, inspectionTime: moment(issue.PatrolRecord.inspectionTime).format('YYYY-MM-DD HH:mm:ss'), points: { ...issue.PatrolRecord.points, inspectContent: (() => { // 1.1 版本(2023-10-18)之前 dataList.points.inspectContent 为 Object, 1.1版本因增加点位关联设备改为 Array const priorToV1_1 = moment(issue.PatrolRecord.inspectionTime).isBefore(moment('2023-10-18')) if (priorToV1_1) { let inspectContent = [] for (let k in issue.PatrolRecord.points.inspectContent) { inspectContent.push({ ...issue.PatrolRecord.points.inspectContent[k], name: k, }) } return [{ checkItems: inspectContent }] } else { return issue.PatrolRecord.points.inspectContent } })() } } } this.setData({ data: nextData, isPlanState: tabIndex == 0 && (issue.state == 1 || issue.state == 3), isApprove: tabIndex == 0 && issue.state == 2, isRepair: tabIndex == 0 && (issue.state == 4 || issue.state == 7), isCheck: tabIndex == 0 && issue.state == 5, }) console.log(nextData, 'nextData') this.setData({ strucFocusUser: { ...strucUser, } }) const focusPerson = (strucUser.find(s => s.id == issue.PatrolRecord.points.project.id) || {}).users || [] this.setData({ focusPerson: focusPerson }) if (issue.state > 1) { let maintenancePersonIndex = focusPerson.findIndex(f => f.id == issue.repairPerson.id) this.setData({ maintenancePersonIndex: maintenancePersonIndex, maintenancePersonDepartmentShow: maintenancePersonIndex >= 0 ? focusPerson[maintenancePersonIndex].department.name : '', qualityPersonIndex: focusPerson.findIndex(f => f.id == issue.checkPerson.id), planStartTime: moment(issue.startTime).unix(), planStartTimeShow: moment(issue.startTime).format('YYYY-MM-DD'), planEndTimeShow: moment(issue.endTime).format('YYYY-MM-DD'), maintenanceRequirement: issue.repairAsk }) } if (issue.state > 2) { this.setData({ planApproval: issue.approveOpinion, planApprovalPerson: issue.approvePerson ? issue.approvePerson.name : '', planApprovalTime: issue.approveDate ? moment(issue.approveDate).format('YYYY-MM-DD HH:mm:ss') : '', }) } if (issue.state > 3) { this.setData({ repair: issue.repairDesc, repairImgs: issue.repairImage || [], }) } if (issue.state > 4) { this.setData({ checkDesc: issue.checkOpinion, cost: issue.cost, checkImgs: issue.checkImage || [], }) } }) } else { } }, onPointItemCollapseActiveChange(event) { this.setData({ pointItemCollapseActiveNames: event.detail, }); }, onMaintenancePersonPopupChange(e) { if (e.target.dataset.type == 'zhijian') { this.setData({ qualityPersonIndex: e.detail.value }) } else { let selectedUser = this.data.focusPerson[e.detail.value] this.setData({ maintenancePersonIndex: e.detail.value, maintenancePersonDepartmentShow: selectedUser ? selectedUser.department.name : '' }) } }, showPlanStartTimePopup() { if (this.data.isPlanState) { this.setData({ planStartTimePopupShow: true }) } }, closePlanStartTimePopup(e) { this.setData({ planStartTimePopupShow: false }) if (e.target.dataset.option == 'cancel') { // this.setData({ planStartTime: '' }) } else if (e.target.dataset.option == 'confirmed') { this.setData({ planStartTimeShow: this.data.planStartTime ? moment(this.data.planStartTime).format('YYYY-MM-DD') : '' }) } }, onPlanStartTimeChange(event) { this.setData({ planStartTime: event.detail, }) }, showPlanEndTimePopup() { if (this.data.isPlanState) { this.setData({ planEndTimePopupShow: true }) } }, closePlanEndTimePopup(e) { this.setData({ planEndTimePopupShow: false }) if (e.target.dataset.option == 'confirmed') { this.setData({ planEndTimeShow: this.data.planEndTime ? moment(this.data.planEndTime).format('YYYY-MM-DD') : '' }) } }, onPlanEndTimeChange(event) { this.setData({ planEndTime: event.detail, }) }, onInputChange(e) { let value = e.detail.value if (e.target.dataset.type === 'cost' && !/^(\d?)+(\.\d{0,2})?$/.test(e.detail.value)) { wx.showToast({ title: '只能输入两位小数', icon: 'none' }) value = value.substring(0, value.length - 1); } this.setData({ [e.target.dataset.type]: value }) }, // 预览图片 previewImg: function (e) { const { index, itemindex, deviceidx, type } = e.currentTarget.dataset const imgs = type == 'point' ? this.data.data.PatrolRecord.points.inspectContent[deviceidx].checkItems[itemindex].imgs : this.data[type]; const newImgs = imgs.map(i => this.data.imgServer + i); wx.previewImage({ current: newImgs[index], urls: newImgs }) }, // 上传图片 chooseImg: function (e) { // 这里是选取图片的方法 const that = this; const { type } = e.currentTarget.dataset let pics = []; const detailPics = that.data[type] if (detailPics.length >= 20) { wx.showToast({ title: '最多选择20张图片上传', icon: 'none' }); return; } wx.chooseMedia({ count: 20, // 基础库2.25.0前,最多可支持9个文件,2.25.0及以后最多可支持20个文件 mediaType: ['image'], // 文件类型 sizeType: ['original', 'compressed'], // original 原图,compressed 压缩图,默认二者都有 sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有 success: function (res) { const imgs = res.tempFiles; for (let i = 0; i < imgs.length; i++) { if (res.tempFiles[i].size > 15728640) { wx.showToast({ title: '图片大于15M,不可上传', icon: 'none' }); return; } const fileNameArr = res.tempFiles[i].tempFilePath.split('.'); const extension = res.tempFiles[i].tempFilePath.split('.')[fileNameArr.length - 1]; if (extension !== 'jpg' && extension !== 'png' && extension !== 'jpeg') { wx.showToast({ title: '只能上传jpg、jpeg、png格式的图片', icon: 'none' }); return; } pics.push(imgs[i].tempFilePath) } that.uploadimg({ url: getApp().globalData.webUrl + '_upload/attachments/project', // 图片上传的接口 path: pics, // 选取的图片的地址数组 }, type); }, }) }, //多张图片上传 uploadimg: function (data, itemName) { wx.showLoading({ title: '上传中...', mask: true, }) let that = this, i = data.i ? data.i : 0, success = data.success ? data.success : 0, fail = data.fail ? data.fail : 0; let imgs = that.data[itemName]; wx.uploadFile({ url: data.url, filePath: data.path[i], name: 'file', success: (resp) => { wx.hideLoading(); success++; let str = JSON.parse(resp.data) // 返回的结果,可能不同项目结果不一样 str = str.uploaded if (imgs.length >= 20) { return false; } else { let imgs_ = JSON.parse(JSON.stringify(imgs)) imgs_.push(str); that.setData({ [itemName]: imgs_, }) } }, fail: (res) => { fail++; console.log('fail:' + i + "fail:" + fail); }, complete: () => { i++; if (i == data.path.length) { // 当图片传完时,停止调用 console.log('执行完毕'); console.log('成功:' + success + " 失败:" + fail); } else { // 若图片还没有传完,则继续调用函数 data.i = i; data.success = success; data.fail = fail; that.uploadimg(data, itemName); // 递归,回调自己 } } }); }, // 删除图片 deleteImg: function (e) { const { type, index } = e.currentTarget.dataset const imgs = this.data[type] imgs.splice(index, 1); this.setData({ [type]: imgs }); }, async confirm(e) { const { approve } = e.target.dataset const { state } = this.data.data const { shootingid, focusPerson, maintenancePersonIndex, maintenancePersonDepartmentShow, qualityPersonIndex, planStartTime, planEndTime, planStartTimeShow, planEndTimeShow, maintenanceRequirement, userInfo, planApproval, repair, repairImgs, checkDesc, cost, checkImgs } = this.data let nextState = '' let confirmData = state===1?{ createTime:moment()}:{}//解决小程序端创建计划没有任务下发时间问题 let successMsg = '' if (state == 1 || state == 3) { nextState = 2 confirmData = { ...confirmData, repairPerson: focusPerson[maintenancePersonIndex], repairUnit: maintenancePersonDepartmentShow, checkPerson: focusPerson[qualityPersonIndex], startTime: moment(planStartTime).format(), endTime: moment(planEndTime).format(), repairAsk: maintenanceRequirement, } if (!this.mustInput({ repairPerson: focusPerson[maintenancePersonIndex], checkPerson: focusPerson[qualityPersonIndex], startTime: planStartTimeShow, endTime: planStartTimeShow, })) { return } successMsg = '制定完成' } else if (state == 2) { confirmData = { ...confirmData, approveOpinion: planApproval, approvePerson: userInfo, approveDate: moment().format(), } if (approve == 'agree') { nextState = 4 } else { nextState = 3 } successMsg = '审核完成' } else if (state == 4 || state == 7) { confirmData = { ...confirmData, repairDesc: repair, repairImage: repairImgs, } nextState = 5 successMsg = '上报成功' } else if (state == 5) { if (approve == 'agree') { // 统计web预计管理要用的数据 const { PatrolRecord } = this.data.data; let yanshoushijian = moment().format('YYYY-MM-DD HH:mm:ss'); let yanshoucishu = undefined; let yujingafchishu = undefined; let yujingshijian = undefined; let isgaojing = undefined; await Request.get(getPatrolRecord('all', moment().subtract(50, 'years').format('YYYY-MM-DD HH:mm:ss'), moment().format('YYYY-MM-DD HH:mm:ss'), true, null,{home:false})).then(res => { const formatData = res.filter(r => ( r.pointId === PatrolRecord.pointId && r.points.projectId === PatrolRecord.points.projectId && r.patrolRecordIssueHandles && r.patrolRecordIssueHandles.length && r.patrolRecordIssueHandles[0].yanshoushijian )).sort((a, b) => moment(b.patrolRecordIssueHandles[0].yanshoushijian).valueOf() - moment(a.patrolRecordIssueHandles[0].yanshoushijian).valueOf()) if (formatData.length) { if (!formatData[0].patrolRecordIssueHandles[0].isgaojing) { // 未告警 if (formatData[0].patrolRecordIssueHandles[0].yanshoucishu === 2) { // 验收次数等于2 yujingshijian = moment().format('YYYY-MM-DD HH:mm:ss'); yanshoucishu = formatData[0].patrolRecordIssueHandles[0].yanshoucishu + 1; } else if (formatData[0].patrolRecordIssueHandles[0].yanshoucishu >= 3) { yujingshijian = formatData[0].patrolRecordIssueHandles[0].yujingshijian; yanshoucishu = formatData[0].patrolRecordIssueHandles[0].yanshoucishu + 1; } else { // 验收不等于2 yanshoucishu = formatData[0].patrolRecordIssueHandles[0].yanshoucishu + 1; } } else { // 告警 if (formatData[0].patrolRecordIssueHandles[0].yujingafchishu === 2) { isgaojing = false; yanshoucishu = 3; yujingshijian = moment().format('YYYY-MM-DD HH:mm:ss'); } else { isgaojing = true; yujingafchishu = formatData[0].patrolRecordIssueHandles[0].yujingafchishu + 1; } } } else { // 没验收过 yanshoucishu = 1; } confirmData = { ...confirmData, checkOpinion: checkDesc, cost, checkImage: checkImgs, yanshoushijian, yanshoucishu, yujingafchishu, yujingshijian, isgaojing, // checkPerson: { id: userInfo.id, name: userInfo.name } } }) nextState = 6 } else { confirmData = { ...confirmData, checkOpinion: checkDesc, cost, checkImage: checkImgs, // checkPerson: { id: userInfo.id, name: userInfo.name } } nextState = 7 } successMsg = '验收完成' } Request.put(editPatrolRecordIssueHandle(shootingid), { ...confirmData, state: nextState, }).then(res => { wx.navigateBack({ complete: () => { wx.showToast({ title: successMsg, icon: 'success' }) } }) }) }, mustInput(field) { let fieldMap = { repairPerson: '维修人', checkPerson: '质检人', startTime: '计划开始时间', endTime: '计划结束时间', } let fieldKeys = Object.keys(field) for (let k of fieldKeys) { if (!field[k]) { wx.showToast({ title: `请填写/选择 ${fieldMap[k]}`, icon: 'none' }) return false } } return true }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady() { }, /** * 生命周期函数--监听页面显示 */ onShow() { }, /** * 生命周期函数--监听页面隐藏 */ onHide() { }, /** * 生命周期函数--监听页面卸载 */ onUnload() { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh() { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom() { }, /** * 用户点击右上角分享 */ onShareAppMessage() { } })