qa-prevention-xgf-app/utils/submitHomeworkProcess.js

312 lines
9.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import {
getCurrentNextOperation, getTaskInfo,
setOtherSecurityMeasuresSave,
setSecurityMeasuresSave,
setTaskFile,
setTaskSave
} from "@/api";
import {addFormInfo} from "../api";
import {filePath} from '@/utils/tools.js'
// 处理表单数据
// 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: currentItem[j].oldUrl}, 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: formData[formItem.key_name + 'oldUrl']}, 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, EW_RU_TASK_ID}) => {
const {taskIds} = await setTaskSave({
data: [{form: await processFormData(form, formItems),task:{EW_RU_TASK_ID:EW_RU_TASK_ID}}],
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, EW_RU_JOB_ID, 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,
EW_RU_JOB_ID,
vernier
})
}
// 提交安全措施
export const setSecurityMeasures = async ({questionnaires, questionnaireInfo, taskId, EW_RU_JOB_ID, CORP_ID, TYPE, vernier}) => {
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,
vernier
})
}
// 提交其它安全措施
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) => {
let stepNum = 0
if (isLastStep) {
const {info} = await getCurrentNextOperation({EW_RU_TASK_ID, EW_RU_JOB_ID, VERNIER: vernier, REQUEST_SOURCE: '2'})
// 选人
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?vernier=' + info.vernier,
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
}
// 根据后端返回的页数退回到指定页面
stepNum = info.stepNum
}
uni.$u.toast('提交成功')
setTimeout(() => {
uni.navigateBack(
{
delta: stepNum
}
)
}, 1500)
}
export const getData = async (taskId) => {
const resData = await getTaskInfo({ EW_RU_TASK_ID: taskId });
if (resData.list.fromTrans && resData.list.fromTrans.length > 0) {
const form = {};
resData.list.fromTrans.forEach((item) => {
form[item.ITEM_NAME] = item.ITEM_VALUE;
if (item.FK_NAME) {
form[item.FK_NAME] = item.FK_VALUE;
}
if (item.TYPE === 1) {
form[item.ITEM_NAME] = item.list.map((item) => ({
url: filePath + item.ITEM_VALUE,
oldUrl: item.ITEM_VALUE
}));
}
if (item.TYPE === 4) {
form[item.ITEM_NAME] = [];
for (let i = 0; i < item.list.length; i++) {
form[item.ITEM_NAME].push({});
for (let j = 0; j < item.list[i].list.length; j++) {
form[item.ITEM_NAME][i][item.list[i].list[j].ITEM_NAME] =
item.list[i].list[j].ITEM_VALUE;
}
}
}
if (item.TYPE === 5) {
form[item.ITEM_NAME] = filePath + item.ITEM_VALUE;
form[item.ITEM_NAME + 'oldUrl'] = item.ITEM_VALUE;
}
});
return form;
}
};
// 针对在某些节点要新增报表信息
export const addReport = async ({form, formItems, TYPE, CORP_ID, EW_RU_TASK_ID, EW_RU_JOB_ID, vernier}) => {
// 在审批过程中添加节点信息
await addFormInfo({
reports: await processFormData(form,formItems),
EW_RU_TASK_ID: EW_RU_TASK_ID,
EW_RU_JOB_ID: EW_RU_JOB_ID,
TYPE,
postMethod: 'application/json'
}
)
// 结束后续流程
await resolveNextOperation({
EW_RU_TASK_ID: EW_RU_TASK_ID,
CORP_ID,
TYPE,
EW_RU_JOB_ID,
vernier
})
}