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,
|
});
|
},
|
});
|