diff --git a/src/components/Form/src/components/Upload.vue b/src/components/Form/src/components/Upload.vue index 9bb933d..a225bd6 100644 --- a/src/components/Form/src/components/Upload.vue +++ b/src/components/Form/src/components/Upload.vue @@ -69,9 +69,9 @@ 点击上传 -
+
+ import { useRouter } from 'vue-router'; - import { onMounted, reactive, ref, unref, createVNode, provide } from 'vue'; + import { onMounted, reactive, ref, unref, createVNode, provide,computed,defineAsyncComponent } from 'vue'; import FormInformation from '/@/views/secondDev/FormInformation.vue'; import userTaskItem from '/@/views/workflow/task/hooks/userTaskItem'; import { getApprovalProcess, postApproval, postGetNextTaskMaybeArrival, postTransfer, getDrawNode, withdraw } from '/@/api/workflow/task'; @@ -97,6 +99,7 @@ import { TaskTypeUrl } from '/@/enums/workflowEnum'; import { postSetSign, postSetSignV2 } from '/@/api/workflow/task'; import FlowRecord from '/@/views/workflow/task/components/flow/FlowRecord.vue'; + import {customFormConfig} from './customFormConfig' const spinning = ref(false); const userStore = useUserStore(); @@ -174,7 +177,17 @@ nextTaskUser: {} // 格式为taskKey: 用户id(逗号分隔) }); let approvedType = ref(ApproveType.AGREE); - + + const componentName = computed(() => { + if (!data.formInfos.length) { + return defineAsyncComponent({ + loader: () => import('/@/views/secondDev/Empty.vue') + }); + } + return defineAsyncComponent({ + loader: () => import(`/@/views/${data.formInfos[0]?.functionalModule}/${data.formInfos[0]?.functionName}/components/createForm.vue`) + }); + }); function showButton(btn) { // 撤回有drawNode才显示,流程图任何情况下都显示 let show = @@ -380,12 +393,16 @@ async function onApproveClick(isAutoAgreeBreak = false) { try { openSpinning(); - if (!isAutoAgreeBreak) { - await submit(); - } - if (!validateSuccess.value) { - closeSpinning(); - return; + if (!customFormConfig.codeList.includes(curPageCode.value)) { + if (!isAutoAgreeBreak) { + await submit(); + } + if (!validateSuccess.value) { + closeSpinning(); + return; + } + } else { + validateSuccess.value = true } const params = await getApproveParams(); const nextNodes = await postGetNextTaskMaybeArrival(params); @@ -570,10 +587,11 @@ return data.taskApproveOpinions || []; } } - + const curPageCode = ref() onMounted(async () => { try { let res = await getApprovalProcess(unref(taskId), unref(processId)); + curPageCode.value = res?.schemaInfo?.code initProcessData(res); await getBackNode(); processInfo.value = res; @@ -667,9 +685,20 @@ async function getApproveParams() { try { + let formModels = {} + let system = {} + let fileFolderIds = [] + if (!customFormConfig.codeList.includes(curPageCode.value)) { let formModels = await formInformation.value.getFormModels(); let system = formInformation.value.getSystemType(); let fileFolderIds = getUploadFileFolderIds(formModels); + } else { + let value = await formInformation.value.getFormValue(); + let key = data.formInfos[0]?.formConfig?.key + formModels[key] = value + system[key] = false + fileFolderIds = [] + } return { approvedType: approvalData.approvedType, approvedResult: approvalData.approvedResult, // approvalData.approvedType 审批结果 如果为 4 就需要传buttonCode @@ -694,13 +723,16 @@ try { if (validateSuccess.value || values === 'reject' || values === 'finish' || values === 'disagree') { let params = await getApproveParams(); + openSpinning() let response = await postApproval(params); + closeSpinning() // 判断返回值是否带有isAutoAgree 来判断中间是否有自动审批的业务,如有再执行判断待审人员是否包含自己,不包含就直接flowSuccess if (checkIsAutoAgree(response)) return; flowSuccess(); data.submitLoading = false; } } catch (error) { + closeSpinning() flowFail(); throw new Error(error); } diff --git a/src/views/secondDev/createFlow.vue b/src/views/secondDev/createFlow.vue index c2b8a35..5aedb74 100644 --- a/src/views/secondDev/createFlow.vue +++ b/src/views/secondDev/createFlow.vue @@ -16,7 +16,10 @@ 提交 - + + 保存 + + @@ -29,10 +32,19 @@ 流程图 +
+ + 下载模板 + + + 导入 + +
- + +
@@ -53,8 +65,8 @@ import ProcessInformation from '/@/views/workflow/task/components/flow/ProcessInformation.vue'; import { getStartProcessInfo, getReStartProcessInfo, reLaunch, postLaunch, postApproval, postGetNextTaskMaybeArrival } from '/@/api/workflow/task'; import { useMultipleTabStore } from '/@/store/modules/multipleTab'; - import { CloseOutlined, SendOutlined, ClockCircleOutlined, PrinterOutlined, ApartmentOutlined } from '@ant-design/icons-vue'; - import { nextTick, onMounted, ref, toRaw, reactive } from 'vue'; + import { CloseOutlined, SendOutlined, ClockCircleOutlined, PrinterOutlined, ApartmentOutlined, SaveOutlined, DownloadOutlined, UploadOutlined } from '@ant-design/icons-vue'; + import { nextTick, onMounted, ref, toRaw, reactive, computed, defineAsyncComponent } from 'vue'; import { deleteDraft, postDraft, putDraft } from '/@/api/workflow/process'; import { useI18n } from '/@/hooks/web/useI18n'; import { separator } from '/@bpmn/config/info'; @@ -62,12 +74,13 @@ import OpinionDialog from '/@/components/SecondDev/OpinionDialog.vue'; import { ApproveCode, ApproveType } from '/@/enums/workflowEnum'; import useEventBus from '/@/hooks/event/useEventBus'; + import {customFormConfig} from './customFormConfig' const { bus, CREATE_FLOW } = useEventBus(); const router = useRouter(); const tabStore = useMultipleTabStore(); - + const curPageCode = ref() const { t } = useI18n(); const { data, approveUserData, initProcessData, notificationSuccess, notificationError } = userTaskItem(); const currentRoute = router.currentRoute.value; @@ -130,6 +143,17 @@ } }); + const componentName = computed(() => { + if (!data.formInfos.length) { + return defineAsyncComponent({ + loader: () => import('/@/views/secondDev/Empty.vue') + }); + } + return defineAsyncComponent({ + loader: () => import(`/@/views/${data.formInfos[0]?.functionalModule}/${data.formInfos[0]?.functionName}/components/createForm.vue`) + }); + }); + onMounted(async () => { try { // 发起流程 @@ -139,6 +163,7 @@ const tabPrefix = pageMode === 'new' ? '新建' : '草稿'; tabStore.changeTitle(fullPath, `${tabPrefix}:${title}`); } + curPageCode.value = res?.schemaInfo?.code initProcessData(res); } catch (error) {} randKey.value = Math.random() + ''; @@ -272,8 +297,18 @@ async function getApproveParams() { let formModels = mainFormModels.value; - let system = formInformation.value.getSystemType(); - let fileFolderIds = getUploadFileFolderIds(formModels); + let fileFolderIds = [] + let system = {} + if (customFormConfig.codeList.includes(curPageCode.value)) { + let key = data.formInfos[0]?.formConfig?.key + let obj = {} + system[key] = false + fileFolderIds = [] + } else { + system = formInformation.value.getSystemType(); + fileFolderIds = getUploadFileFolderIds(formModels); + } + return { approvedType: approvalData.approvedType, approvedResult: approvalData.approvedResult, // approvalData.approvedType 审批结果 如果为 4 就需要传buttonCode @@ -290,8 +325,118 @@ draftId: rDraftsId.value }; } + async function onSave() { + let value = await formInformation.value.handleSubmit(true); + } + async function saveLaunchNew() { + if (!taskId.value && rDraftsId.value != '0') { + try { + await new Promise((resolve, reject) => { + Modal.confirm({ + title: '提示', + content: '请确认是否提交流程,提交后流程不能删除', + okText: '确定', + cancelText: '取消', + onOk: () => resolve(), + onCancel: () => reject() + }); + }); + } catch { + return; + } + } + try { + // let validateForms = await formInformation.value.validateForm(); + // let system = formInformation.value.getSystemType(); + let key = data.formInfos[0]?.formConfig?.key + let system = {} + let obj = {} + system[key] = false + + let value = await formInformation.value.handleSubmit(); + obj[key] = value + mainFormModels.value = obj + console.log(mainFormModels.value, 6666) + if (!value) return + data.submitLoading = true; + loading.value = true; + // if (validateForms.length > 0) { + // let successValidate = validateForms.filter((ele) => { + // return ele.validate; + // }); + // console.info('validateForms:' + JSON.stringify(validateForms)); + // if (successValidate.length == validateForms.length) { + // mainFormModels.value = await formInformation.value.getFormModels(true); + /*for (let i in mainFormModels.value) { + const item = mainFormModels.value[i]; + if (!item['_id']) { + throw new Error('发起失败'); + } else { + delete item['_id']; + } + }*/ + let relationTasks = []; + if (data.predecessorTasks && data.predecessorTasks.length > 0) { + relationTasks = data.predecessorTasks.map((ele) => { + return { taskId: ele.taskId, schemaId: ele.schemaId }; + }); + } + // let fileFolderIds = getUploadFileFolderIds(mainFormModels.value); + let fileFolderIds = [] + if (taskId.value) { + // 如果在草稿节点取消,重新从草稿开始走 + return createFlowSuccess(true); + } + //如果传入了processId 代表是重新发起流程 + let res; + res = await postLaunch(rSchemaId, mainFormModels.value, relationTasks, fileFolderIds, system); + // 下一节点审批人 + let taskList = []; + if (res && res.length > 0) { + taskId.value = res[0].taskId; + taskList = res + .filter((ele) => { + return ele.isMultiInstance == false && ele.isAppoint == true; + }) + .map((ele) => { + return { + taskId: ele.taskId, + taskName: ele.taskName, + provisionalApprover: ele.provisionalApprover, + selectIds: [] + }; + }); + const strictDesign = false; + console.log(taskList, 'taskList') + if (strictDesign && taskList.length > 0) { + notificationError('提交失败', '流程设计错误,开始后的第一个节点必须是审批人为发起人的起草节点。'); + data.submitLoading = false; + loading.value = false; + } else { + createFlowSuccess(taskList); + } + } else { + createFlowSuccess(); + } + // } else { + // data.submitLoading = false; + // notificationError(t('发起流程'), t('表单校验未通过')); + // loading.value = false; + // } + // } + } catch (error) { + console.log(error, 'error') + data.submitLoading = false; + loading.value = false; + notificationError(t('发起流程'), t('发起流程失败')); + } + } async function saveLaunch() { + if (customFormConfig.codeList.includes(curPageCode.value)){ + saveLaunchNew() + return + } if (!taskId.value && rDraftsId.value != '0') { try { await new Promise((resolve, reject) => { diff --git a/src/views/secondDev/customFormConfig.ts b/src/views/secondDev/customFormConfig.ts new file mode 100644 index 0000000..b9c880e --- /dev/null +++ b/src/views/secondDev/customFormConfig.ts @@ -0,0 +1,6 @@ +export const customFormConfig = { + codeList: ['addCustomer'], + router: [ + {code: 'addCustomer', src: ''} + ] +}; \ No newline at end of file diff --git a/src/views/workflow/task/components/ApprovalProcess.vue b/src/views/workflow/task/components/ApprovalProcess.vue index 9623fd4..c3ffe97 100644 --- a/src/views/workflow/task/components/ApprovalProcess.vue +++ b/src/views/workflow/task/components/ApprovalProcess.vue @@ -10,6 +10,8 @@ @@ -27,11 +27,15 @@ let props = defineProps(['position', 'processId', 'taskId', 'schemaId']); let visible = ref(false); const { data, initProcessData } = userTaskItem(); + const curPageCode = ref() + const id = ref() onMounted(async () => { try { let res = await getApprovalProcess(props.taskId, props.processId); initProcessData(res); visible.value = true; + curPageCode.value = res?.schemaInfo?.code + id.value = res?.formInfos[0]?.formData?.id console.error('555555', data); } catch (error) {} });