import { toLabel } from '../../../common/dataSceneTypes'; import { fetchSelfPatrolType, fetchPublish, } from '../../../services/patrol/fetchSelfPatrol'; import dayjs from 'dayjs'; const app = getApp(); Page({ data: { taskTag: '应急自巡查', publishUnit: app.globalData.userInfo.name, popupRefresh: false, popupVisible: false, receiver: [], receiverText: '点击选择企业', timeText: dayjs().add(1, 'day').format('YYYY-MM-DD HH时'), startTime: dayjs().format('YYYY-MM-DD HH:mm:ss'), endTime: dayjs().add(1, 'month').format('YYYY-MM-DD HH:mm:ss'), selectedSceneTypes: [], selectedSceneTypesText: [], selectedPatrolTypes: [], patrolPopupVisible: false, patrolPopupIndex: 0, }, onLoad(options) {}, ontimePickerChange(e) { const { timeText, timeValue } = e.detail; this.setData({ timeText, timeValue }); }, bindInputChange(e) { const { type } = e; const { tag } = e.currentTarget.dataset; const { value } = e.detail; switch (type) { case 'clear': this.setData({ [`${tag}`]: '', }); break; case 'change': this.setData({ [`${tag}`]: value, }); break; default: break; } }, /** UserPopupWindow-start *************************************************/ openUserList() { const { popupRefresh } = this.data; this.setData({ popupVisible: true, // popupRefresh: !popupRefresh, }); }, onVisibleChange(e) { const { visible } = e.detail; this.setData({ popupVisible: visible }); }, popupConfirm(e) { console.log(e); const receiver = e.detail; let receiverText = ''; let receiverIds = ''; for (let i = 0; i < receiver.length; i++) { const r = receiver[i]; receiverText += r.realname + '、'; receiverIds += r.guid + ';'; } // this.setData({ // ['notice.receiverId']: receiverIds, // }); if (receiverText == '') { receiverText = '点击选择企业'; } else if (receiverText.length > 4) { receiverText = receiverText.substring(0, 5); receiverText += `...等${receiver.length}个企业`; // break; } this.setData({ popupVisible: false, receiver, receiverText, }); this.onSceneTypeConfirm(); }, popupCancel() { this.setData({ popupVisible: false }); }, /** PatrolPopupWindow-start *************************************************/ openPatrolList(e) { const { index } = e.currentTarget.dataset; let { sceneType, patrolTypes } = this.data.selectedPatrolTypes[index]; this.setData({ patrolPopupIndex: index }); if (patrolTypes.length == 0) { fetchSelfPatrolType({ sceneType: parseInt(sceneType) }).then(res => { patrolTypes = res; this.setData({ [`selectedPatrolTypes[${index}].patrolTypes`]: patrolTypes, patrolPopupVisible: true, }); }); } else { this.setData({ patrolPopupVisible: true }); } }, // 取消并关闭自巡查类别选择弹出框 closePatrolList() { const { selectedPatrolTypes, patrolPopupIndex } = this.data; const { patrolTypes, patrolTasks } = selectedPatrolTypes[patrolPopupIndex]; patrolTypes.forEach(p => { if (patrolTasks.indexOf(p.ledgerSubTypeId) == -1) { p.selected = false; } else { p.selected = { color: 'green', count: '✓', shape: 'square', }; } }); this.setData({ [`selectedPatrolTypes[${patrolPopupIndex}].patrolTypes`]: patrolTypes, patrolPopupVisible: false, }); this._isCheckAll(); }, // 根据所选用户确定有多少种场景类型 onSceneTypeConfirm() { const { receiver } = this.data; const selectedSceneTypes = [], selectedPatrolTypes = []; let selectedSceneTypesText = []; receiver.forEach(r => { const sceneTypeText = toLabel(r.extension2); if (selectedSceneTypes.indexOf(sceneTypeText) == -1) { selectedSceneTypes.push(sceneTypeText); selectedPatrolTypes.push({ sceneType: r.extension2, sceneTypeText, patrolText: '点击选择', patrolTasks: [], patrolTypes: [], checkAll: false, selectedCount: 0, }); } }); selectedSceneTypesText.push( `已选企业为${selectedSceneTypes.join('、')}等${ selectedSceneTypes.length }种行业`, ); selectedSceneTypesText.push(`请分别选择行业所需提交自巡查类别。`); this.setData({ selectedSceneTypes, selectedPatrolTypes, selectedSceneTypesText, }); }, // 对应场景类型下的自巡查任务选择事件 onSelfPatrolPickerChange() { const { selectedPatrolTypes, patrolPopupIndex } = this.data; const { patrolTypes, patrolTasks } = selectedPatrolTypes[patrolPopupIndex]; let patrolText = ''; patrolTypes.forEach(p => { const i = patrolTasks.indexOf(p.ledgerSubTypeId); if (p.selected) { if (i == -1) { patrolTasks.push(p.ledgerSubTypeId); } patrolText += p.ledgerName + '、'; } else { if (i != -1) { patrolTasks.splice(i, 1); } } }); if (patrolText == '') { patrolText = '点击选择'; } else if (patrolTasks.length == patrolTypes.length) { patrolText = '已选全部类别'; } else if (patrolText.length > 4) { patrolText = patrolText.substring(0, 5); patrolText += `...等${patrolTasks.length}个类别`; } this.setData({ [`selectedPatrolTypes[${patrolPopupIndex}].patrolTasks`]: patrolTasks, [`selectedPatrolTypes[${patrolPopupIndex}].patrolText`]: patrolText, patrolPopupVisible: false, }); }, onPatrolTaskVisibleChange(e) { const { visible } = e.detail; this.setData({ patrolPopupVisible: visible }); }, chosePatrolTask(e) { const { index } = e.currentTarget.dataset; const { selectedPatrolTypes, patrolPopupIndex } = this.data; const { patrolTypes, patrolTasks } = selectedPatrolTypes[patrolPopupIndex]; let { selected, ledgerSubTypeId } = patrolTypes[index]; if (selected) { selected = null; // const i = patrolTasks.indexOf(ledgerSubTypeId); // if (i != -1) { // patrolTasks.splice(i, 1); // } } else { selected = { color: 'green', count: '✓', shape: 'square', }; // patrolTasks.push(ledgerSubTypeId); } this.setData({ [`selectedPatrolTypes[${patrolPopupIndex}].patrolTypes[${index}].selected`]: selected, // [`selectedPatrolTypes[${patrolPopupIndex}].patrolTasks`]: patrolTasks, }); this._isCheckAll(); }, onCheckAll(e) { const { checked } = e.detail; const { selectedPatrolTypes, patrolPopupIndex } = this.data; const { patrolTypes } = selectedPatrolTypes[patrolPopupIndex]; // let patrolTasks = []; patrolTypes.forEach(p => { if (checked) { p.selected = { color: 'green', count: '✓', shape: 'square', }; // patrolTasks.push(p.ledgerSubTypeId); } else { p.selected = null; // patrolTasks = []; } }); this.setData({ // [`selectedPatrolTypes[${patrolPopupIndex}].checkAll`]: checked, [`selectedPatrolTypes[${patrolPopupIndex}].patrolTypes`]: patrolTypes, // [`selectedPatrolTypes[${patrolPopupIndex}].patrolTasks`]: patrolTasks, }); this._isCheckAll(); }, _isCheckAll() { const { selectedPatrolTypes, patrolPopupIndex } = this.data; const { patrolTypes } = selectedPatrolTypes[patrolPopupIndex]; // 判断是否全选中 const p = patrolTypes.filter(v => { return ( v.selected == undefined || v.selected == null || v.selected == false ); }); this.setData({ [`selectedPatrolTypes[${patrolPopupIndex}].selectedCount`]: patrolTypes.length - p.length, [`selectedPatrolTypes[${patrolPopupIndex}].checkAll`]: p.length == 0, }); }, /** bottom-btn-start *************************************************/ onConfirmCheck(e) { const [result, tips] = this._editCheck(); if (result) { this.showDialog(e); } else { wx.showToast({ title: tips, duration: 1000, icon: 'none', }); } }, // 检查是否填写完成 _editCheck() { const { taskTag, publishUnit, receiver, selectedPatrolTypes } = this.data; //任务标签 if (taskTag.trim() == '') return [false, '请填写任务标签']; //发布单位 if (publishUnit.trim() == '') return [false, '请填写发布单位']; //巡查企业 if (receiver.length == 0) return [false, '请选择巡查企业']; //巡查清单 let pass = true; for (let i = 0; i < selectedPatrolTypes.length; i++) { const t = selectedPatrolTypes[i]; if (t.patrolTasks.length == 0) { pass = false; break; } } if (!pass) return [false, '请选择巡查清单']; return [true, 'pass']; }, onCancelCheck(e) { const { receiver } = this.data; if (receiver.length == 0) { this.onCancel(); } else { this.showDialog(e); } }, showDialog(e) { const { key } = e.currentTarget.dataset; this.setData({ [key]: true, dialogKey: key }); }, closeDialog() { const { dialogKey } = this.data; this.setData({ [dialogKey]: false }); }, parseTask() { const { selectedPatrolTypes, receiver } = this.data; const map = new Map(); selectedPatrolTypes.forEach(p => { map.set(p.sceneType, p.patrolTasks); }); const task = []; const [year, month, day] = this.data.timeText.split('-'); const deadline = dayjs(this.data.timeText.replace('时', ':00:00')); receiver.forEach(r => { task.push({ spToUserId: r.guid, spFromUserId: app.globalData.accessToken.userId, spSceneTypeId: parseInt(r.extension2), spLedgerTypeId: map.get(r.extension2).join(';'), spTaskYear: year, spTaskMonth: month, spDeadline: deadline, spTag: this.data.taskTag, spPublishUnit: this.data.publishUnit, }); }); return task; }, onConfirm() { this.closeDialog(); const tasks = this.parseTask(); fetchPublish(tasks).then(res => { this.getOpenerEventChannel().emit('uploadOver'); wx.navigateBack({ delta: 1, }); }); }, onCancel() { this.closeDialog(); wx.navigateBack({ delta: 1, }); }, });