diff --git a/src/views/sales/Customer/components/bankListModal.vue b/src/views/sales/Customer/components/bankListModal.vue index 7234cd4..e99db73 100644 --- a/src/views/sales/Customer/components/bankListModal.vue +++ b/src/views/sales/Customer/components/bankListModal.vue @@ -1,6 +1,7 @@ diff --git a/src/views/secondDev/approveFlowPage.vue b/src/views/secondDev/approveFlowPage.vue index 91d456f..edcfe76 100644 --- a/src/views/secondDev/approveFlowPage.vue +++ b/src/views/secondDev/approveFlowPage.vue @@ -38,7 +38,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 = @@ -570,10 +583,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; diff --git a/src/views/secondDev/createFlow.vue b/src/views/secondDev/createFlow.vue index c2b8a35..0774a9e 100644 --- a/src/views/secondDev/createFlow.vue +++ b/src/views/secondDev/createFlow.vue @@ -32,7 +32,8 @@
- + +
@@ -54,7 +55,7 @@ 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 { 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 +63,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 +132,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 +152,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 +286,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 @@ -291,7 +315,115 @@ }; } + 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(true); + 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..10d9de5 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) {} });