import { getCurrentNextOperation, setOtherSecurityMeasuresSave, setSecurityMeasuresSave, setTaskFile, setTaskSave } from "@/api"; import {addFormInfo} from "../api"; // 处理表单数据 // TYPE 0 纯文本 1 图片 2 视频 3 divider标签 4 动态添加 5 签字 const processFormData = async (formData, formItems) => { const form = [] for (let i = 0; i < formItems.length; i++) { const formItem = formItems[i] const obj = { ITEM: formItem.name || '', ITEM_NAME: formItem.key_name || '', ITEM_VALUE: formData[formItem.key_name] || '', FK_NAME: formItem.key_id || '', FK_VALUE: formData[formItem.key_id] || '', TYPE: formItem.type, SORT: i + 1 } if (formItem.type === 1 || formItem.type === 2) { if (typeof formData[formItem.key_name] === 'object') { const currentItem = uni.$u.deepClone(formData[formItem.key_name]) const codeList = [] for (let j = 0; j < currentItem.length; j++) { const {CODE} = await setTaskFile({formData: {type: 0}, name: 'files', filePath: currentItem[j].url}) codeList.push(CODE) } obj.ITEM_VALUE = '' obj.picList = codeList } else { throw Error('图片和视频只支持数组') } } if (formItem.type === 4) { if (typeof formData[formItem.key_name] === 'object') { const currentItem = uni.$u.deepClone(formData[formItem.key_name]) const itemList = [] for (let j = 0; j < currentItem.length; j++) { itemList.push(await processFormData(currentItem[j], formItem.listStructure)) } obj.ITEM_VALUE = '' obj.list = itemList } else { throw Error('动态表单只支持数组') } } if (formItem.type === 5) { if (typeof formData[formItem.key_name] === 'string') { const {CODE} = await setTaskFile({formData: {type: 0}, name: 'files', filePath: formData[formItem.key_name]}) obj.ITEM_VALUE = CODE } else { throw Error('签字只支持字符串') } } form.push(obj) } return form } // 提交表单基础信息 export const setSubmitForm = async ({form, formItems, TYPE, CORP_ID}) => { const {taskIds} = await setTaskSave({ data: [{form: await processFormData(form, formItems)}], TYPE, postMethod: 'application/json', }) await resolveNextOperation({ EW_RU_TASK_ID: taskIds[0], CORP_ID, TYPE }) } // 处理选择人员数据 const processSelectedPersonnelData = (formData, list) => { const form = [] for (let i = 0; i < list.length; i++) { for (let j = 0; j < list[i].list.length; j++) { const item = list[i].list[j] const link = item.key_id.substring(item.key_id.indexOf('&&') + 2) form.push({ TYPE_NAME: item.value, TYPE: item.code, TYPE_DESCRIBE: item.desc, DEPARTMENT_ID: item.type === '1' ? formData[item.key_id] : '', DEPARTMENT_NAME: item.type === '1' ? formData[item.key_name] : '', USER_ID: item.type === '0' ? formData[item.key_id] : '', USER_NAME: item.type === '0' ? formData[item.key_name] : '', isDepartment: item.type, link: list[i].multiple === '1' ? link : '', }) } } return form } // 提交人员信息 export const setPersonnelForm = async ({form, list, taskId, CORP_ID, TYPE,vernier}) => { await addFormInfo({ job: processSelectedPersonnelData(form,list), EW_RU_TASK_ID: taskId, TYPE, postMethod: 'application/json' } ) await resolveNextOperation({ EW_RU_TASK_ID: taskId, CORP_ID, TYPE, vernier }) } // 提交安全措施 export const setSecurityMeasures = async ({questionnaires, questionnaireInfo, taskId, EW_RU_JOB_ID, CORP_ID, TYPE}) => { await setSecurityMeasuresSave({ questionnaires: [{items: questionnaires, questionnaire: questionnaireInfo}], EW_RU_JOB_ID, EW_RU_TASK_ID: taskId, postMethod: 'application/json', }) await resolveNextOperation({ EW_RU_TASK_ID: taskId, CORP_ID, TYPE, EW_RU_JOB_ID }) } // 提交其它安全措施 export const setOtherSecurityMeasures = async ({value, taskId, EW_RU_JOB_ID, CORP_ID, TYPE, vernier}) => { const ADDITIONAL_COMMENT = value.map(item => item.value) await setOtherSecurityMeasuresSave({ ADDITIONAL_COMMENT, EW_RU_JOB_ID, EW_RU_TASK_ID: taskId, postMethod: 'application/json', }) await resolveNextOperation({ EW_RU_TASK_ID: taskId, CORP_ID, TYPE, EW_RU_JOB_ID, vernier }) } // 结束当前操作人流程提交 const endCurrentPersonnelTechnologicalProcess = async ({EW_RU_TASK_ID}) => { await setTaskSave({ COMPLETE_FLAG: '1', data: [{task: {EW_RU_TASK_ID}}], postMethod: 'application/json', }) } // 在审批过程中指定下一节点人 export const addFlowInfo = async ({form,list, taskId,EW_RU_JOB_ID, TYPE,CORP_ID, vernier}) => { // 在审批过程中添加节点信息 await addFormInfo({ job: processSelectedPersonnelData(form,list), EW_RU_TASK_ID: taskId, TYPE, postMethod: 'application/json' } ) // 结束后续流程 await resolveNextOperation({ EW_RU_TASK_ID: taskId, CORP_ID, TYPE, EW_RU_JOB_ID, vernier }) } // 决定下一步操作 // EW_RU_TASK_ID当前任务id // CORP_ID选择的企业id // TYPE作业类型 // EW_RU_JOB_ID当前操作节点的人员id // isLastStep是否还有下一步,纯前端确定,不去后台获取 export const resolveNextOperation = async ({EW_RU_TASK_ID = '', CORP_ID = '', TYPE = '', EW_RU_JOB_ID = '',vernier = ''}, isLastStep = true) => { if (isLastStep) { const {info} = await getCurrentNextOperation({EW_RU_TASK_ID, EW_RU_JOB_ID, VERNIER: vernier}) // 选人 if (info.chooseNextFlag === '1') { uni.navigateTo({ url: '/pages/eight_assignments/select_review_personnel?vernier='+ info.vernier, success: ({eventChannel}) => { eventChannel.emit('nextNodes', { nextNodes: info.nextNodes, initFlag: info.initFlag, taskId: EW_RU_TASK_ID, EW_RU_JOB_ID: EW_RU_JOB_ID, CORP_ID, TYPE }) } }) return } // 填写安全措施 if (info.completeFlag === '1') { uni.navigateTo({ url: '/pages/eight_assignments/security_measures', success: ({eventChannel}) => { eventChannel.emit('questionnaire', { questionnaire: info.questionnaire[0], taskId: EW_RU_TASK_ID, EW_RU_JOB_ID, TYPE, CORP_ID, vernier: info.vernier }) } }) return } // 填写其它安全措施 if (info.canAddFlag === '1') { uni.$u.route({ url: '/pages/eight_assignments/other_security_measures', params: {taskId: EW_RU_TASK_ID, EW_RU_JOB_ID, TYPE, CORP_ID,vernier: info.vernier} }) return } // 签字 if (info.submitFlag === '1') { uni.$u.route({ url: '/pages/eight_assignments/sign', params: {taskId: EW_RU_TASK_ID, EW_RU_JOB_ID, TYPE,vernier: info.vernier} }) return } // 流程特殊权限校验 if (info.otherFlag !== null && info.otherFlag.redirectFlag === '1') { uni.$u.route({ url: info.otherFlag.url, params: {taskId: EW_RU_TASK_ID, EW_RU_JOB_ID, TYPE,vernier: info.vernier} }) return } // 没有下一步,结束流程,因为无法确定之前有多少步骤,跳转了多少页面,所以直接跳转到首页 // await endCurrentPersonnelTechnologicalProcess({EW_RU_TASK_ID}) } uni.$u.toast('提交成功') setTimeout(() => { uni.switchTab({ url: '/pages/index/index' }) }, 1500) }