diff --git a/src/components/SimpleProcessDesignerV2/src/NodeHandler.vue b/src/components/SimpleProcessDesignerV2/src/NodeHandler.vue index 25532344..25e4ed74 100644 --- a/src/components/SimpleProcessDesignerV2/src/NodeHandler.vue +++ b/src/components/SimpleProcessDesignerV2/src/NodeHandler.vue @@ -306,6 +306,9 @@ const addNode = (type: number) => { }, timeoutSetting: { enable: false + }, + multiInstanceSetting: { + enable: false } } } diff --git a/src/components/SimpleProcessDesignerV2/src/consts.ts b/src/components/SimpleProcessDesignerV2/src/consts.ts index b8d08b79..e74ad58a 100644 --- a/src/components/SimpleProcessDesignerV2/src/consts.ts +++ b/src/components/SimpleProcessDesignerV2/src/consts.ts @@ -821,6 +821,7 @@ export type ChildProcessSetting = { skipStartUserNode: boolean, startUserSetting: StartUserSetting, timeoutSetting: TimeoutSetting, + multiInstanceSetting: MultiInstanceSetting, } export type IOParameter = { source: string @@ -836,6 +837,13 @@ export type TimeoutSetting = { type?: DelayTypeEnum, timeExpression?: string, } +export type MultiInstanceSetting = { + enable: boolean, + sequential?: boolean, + completeRatio?: number, + sourceType?: ChildProcessMultiInstanceSourceTypeEnum, + source?: string, +} export enum ChildProcessStartUserTypeEnum { /** * 同主流程发起人 @@ -869,3 +877,22 @@ export const CHILD_PROCESS_START_USER_EMPTY_TYPE = [ { label: '子流程管理员', value: ChildProcessStartUserEmptyTypeEnum.CHILD_PROCESS_ADMIN }, { label: '主流程管理员', value: ChildProcessStartUserEmptyTypeEnum.MAIN_PROCESS_ADMIN } ] +export enum ChildProcessMultiInstanceSourceTypeEnum { + /** + * 固定数量 + */ + FIXED_QUANTITY = 1, + /** + * 数字表单 + */ + DIGITAL_FORM = 2, + /** + * 多项表单 + */ + MULTI_FORM = 3, +} +export const CHILD_PROCESS_MULTI_INSTANCE_SOURCE_TYPE = [ + { label: '固定数量', value: ChildProcessMultiInstanceSourceTypeEnum.FIXED_QUANTITY }, + { label: '数字表单', value: ChildProcessMultiInstanceSourceTypeEnum.DIGITAL_FORM }, + { label: '多项表单', value: ChildProcessMultiInstanceSourceTypeEnum.MULTI_FORM } +] diff --git a/src/components/SimpleProcessDesignerV2/src/nodes-config/ChildProcessNodeConfig.vue b/src/components/SimpleProcessDesignerV2/src/nodes-config/ChildProcessNodeConfig.vue index 0289151b..b8f3172e 100644 --- a/src/components/SimpleProcessDesignerV2/src/nodes-config/ChildProcessNodeConfig.vue +++ b/src/components/SimpleProcessDesignerV2/src/nodes-config/ChildProcessNodeConfig.vue @@ -164,8 +164,10 @@ - {{ item.label }} + :value="item.value" + > + {{ item.label }} - {{ item.label }} + :value="item.value" + > + {{ item.label }} 后进入下一节点 + + 多实例设置 + + + +
+ + + + + 完成比例(%) + + + + 多实例来源 + + + + + + + + + + + + + + + + + +
@@ -276,7 +342,9 @@ import { ChildProcessStartUserTypeEnum, CHILD_PROCESS_START_USER_TYPE, ChildProcessStartUserEmptyTypeEnum, - CHILD_PROCESS_START_USER_EMPTY_TYPE + CHILD_PROCESS_START_USER_EMPTY_TYPE, + CHILD_PROCESS_MULTI_INSTANCE_SOURCE_TYPE, + ChildProcessMultiInstanceSourceTypeEnum } from '../consts' import { useWatchNode, useDrawer, useNodeName, useFormFieldsAndStartUser } from '../node' import { parseFormFields } from '@/components/FormCreate/src/utils' @@ -315,7 +383,8 @@ const formRules = reactive({ timeoutEnable: [{ required: true, message: '超时设置是否开启不能为空', trigger: 'change' }], timeoutType: [{ required: true, message: '超时设置时间不能为空', trigger: 'change' }], timeDuration: [{ required: true, message: '超时设置时间不能为空', trigger: 'change' }], - dateTime: [{ required: true, message: '超时设置时间不能为空', trigger: 'change' }] + dateTime: [{ required: true, message: '超时设置时间不能为空', trigger: 'change' }], + multiInstanceEnable: [{ required: true, message: '多实例设置不能为空', trigger: 'change' }] }) type ChildProcessFormType = { async: boolean @@ -331,6 +400,11 @@ type ChildProcessFormType = { timeDuration: number timeUnit: TimeUnitType dateTime: string + multiInstanceEnable: boolean + sequential: boolean + completeRatio: number + multiInstanceSourceType: ChildProcessMultiInstanceSourceTypeEnum + multiInstanceSource: string } const configForm = ref({ async: false, @@ -345,10 +419,21 @@ const configForm = ref({ timeoutType: DelayTypeEnum.FIXED_TIME_DURATION, timeDuration: 1, timeUnit: TimeUnitType.HOUR, - dateTime: '' + dateTime: '', + multiInstanceEnable: false, + sequential: false, + completeRatio: 100, + multiInstanceSourceType: ChildProcessMultiInstanceSourceTypeEnum.FIXED_QUANTITY, + multiInstanceSource: '' }) const childProcessOptions = ref() const formFieldOptions = useFormFieldsAndStartUser() +const digitalFormFieldOptions = computed(() => { + return formFieldOptions.filter((item) => item.type === 'inputNumber') +}) +const multiFormFieldOptions = computed(() => { + return formFieldOptions.filter((item) => item.type === 'select' || item.type === 'checkbox') +}) const childFormFieldOptions = ref() // 保存配置 @@ -393,6 +478,19 @@ const saveConfig = async () => { configForm.value.dateTime } } + // 8. 多实例设置 + currentNode.value.childProcessSetting.multiInstanceSetting = { + enable: configForm.value.multiInstanceEnable + } + if (configForm.value.multiInstanceEnable) { + currentNode.value.childProcessSetting.multiInstanceSetting.sequential = configForm.value.sequential + currentNode.value.childProcessSetting.multiInstanceSetting.completeRatio = + configForm.value.completeRatio + currentNode.value.childProcessSetting.multiInstanceSetting.sourceType = + configForm.value.multiInstanceSourceType + currentNode.value.childProcessSetting.multiInstanceSetting.source = + configForm.value.multiInstanceSource + } } currentNode.value.showText = `调用子流程:${childInfo.name}` @@ -436,6 +534,16 @@ const showChildProcessNodeConfig = (node: SimpleFlowNode) => { configForm.value.dateTime = node.childProcessSetting.timeoutSetting.timeExpression ?? '' } } + // 8. 多实例设置 + configForm.value.multiInstanceEnable = + node.childProcessSetting.multiInstanceSetting.enable ?? false + if (configForm.value.multiInstanceEnable) { + configForm.value.sequential = node.childProcessSetting.multiInstanceSetting.sequential ?? false + configForm.value.completeRatio = node.childProcessSetting.multiInstanceSetting.completeRatio ?? 100 + configForm.value.multiInstanceSourceType = + node.childProcessSetting.multiInstanceSetting.sourceType ?? ChildProcessMultiInstanceSourceTypeEnum.FIXED_QUANTITY + configForm.value.multiInstanceSource = node.childProcessSetting.multiInstanceSetting.source ?? '' + } } loadFormInfo() } @@ -481,6 +589,9 @@ const getIsoTimeDuration = () => { } return strTimeDuration } +const handleMultiInstanceSourceTypeChange = () => { + configForm.value.multiInstanceSource = '' +} onMounted(async () => { childProcessOptions.value = await getModelList(undefined)