diff --git a/src/components/SimpleProcessDesignerV2/src/NodeHandler.vue b/src/components/SimpleProcessDesignerV2/src/NodeHandler.vue
index 255323445a1822e744a197d7d3150322d36e503e..25e4ed74f912f7f64a5478589516f327cbdb5e02 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 c7285f93f5f02e3eefaea3b940afd55e26a6ac03..e74ad58a44745ee5ca798a41b36f10af98f92156 100644
--- a/src/components/SimpleProcessDesignerV2/src/consts.ts
+++ b/src/components/SimpleProcessDesignerV2/src/consts.ts
@@ -821,20 +821,78 @@ export type ChildProcessSetting = {
skipStartUserNode: boolean,
startUserSetting: StartUserSetting,
timeoutSetting: TimeoutSetting,
+ multiInstanceSetting: MultiInstanceSetting,
}
export type IOParameter = {
source: string
- sourceExpression: string
target: string
- targetExpression: string
}
export type StartUserSetting = {
- type: number
+ type: ChildProcessStartUserTypeEnum
formField?: string
- emptyType?: number
+ emptyType?: ChildProcessStartUserEmptyTypeEnum
}
export type TimeoutSetting = {
enable: boolean,
type?: DelayTypeEnum,
timeExpression?: string,
}
+export type MultiInstanceSetting = {
+ enable: boolean,
+ sequential?: boolean,
+ completeRatio?: number,
+ sourceType?: ChildProcessMultiInstanceSourceTypeEnum,
+ source?: string,
+}
+export enum ChildProcessStartUserTypeEnum {
+ /**
+ * 同主流程发起人
+ */
+ MAIN_PROCESS_START_USER = 1,
+ /**
+ * 表单
+ */
+ FROM_FORM = 2,
+}
+export const CHILD_PROCESS_START_USER_TYPE = [
+ { label: '同主流程发起人', value: ChildProcessStartUserTypeEnum.MAIN_PROCESS_START_USER },
+ { label: '表单', value: ChildProcessStartUserTypeEnum.FROM_FORM }
+]
+export enum ChildProcessStartUserEmptyTypeEnum {
+ /**
+ * 同主流程发起人
+ */
+ MAIN_PROCESS_START_USER = 1,
+ /**
+ * 子流程管理员
+ */
+ CHILD_PROCESS_ADMIN = 2,
+ /**
+ * 主流程管理员
+ */
+ MAIN_PROCESS_ADMIN = 3,
+}
+export const CHILD_PROCESS_START_USER_EMPTY_TYPE = [
+ { label: '同主流程发起人', value: ChildProcessStartUserEmptyTypeEnum.MAIN_PROCESS_START_USER },
+ { 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 9e2ce4a2d4d0125c41b6065eab6d6cd96f9b88fd..b8f3172eceb10932e63be6b17fa71c26373a34be 100644
--- a/src/components/SimpleProcessDesignerV2/src/nodes-config/ChildProcessNodeConfig.vue
+++ b/src/components/SimpleProcessDesignerV2/src/nodes-config/ChildProcessNodeConfig.vue
@@ -95,7 +95,7 @@
@@ -103,7 +103,6 @@
添加一行
-
@@ -160,11 +159,15 @@
添加一行
-
- 同主流程发起人
- 表单
+
+ {{ item.label }}
- 同主流程发起人
- 子流程管理员
- 主流程管理员
+
+ {{ item.label }}
后进入下一节点
+
+ 多实例设置
+
+
+
+
+
+
+
+
+ 完成比例(%)
+
+
+
+ 多实例来源
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -268,7 +337,14 @@ import {
TIME_UNIT_TYPES,
TimeUnitType,
DelayTypeEnum,
- DELAY_TYPE
+ DELAY_TYPE,
+ IOParameter,
+ ChildProcessStartUserTypeEnum,
+ CHILD_PROCESS_START_USER_TYPE,
+ ChildProcessStartUserEmptyTypeEnum,
+ 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'
@@ -307,25 +383,57 @@ 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' }]
})
-const configForm = ref({
+type ChildProcessFormType = {
+ async: boolean
+ calledProcessDefinitionKey: string
+ skipStartUserNode: boolean
+ inVariables?: IOParameter[]
+ outVariables?: IOParameter[]
+ startUserType: ChildProcessStartUserTypeEnum
+ startUserEmptyType: ChildProcessStartUserEmptyTypeEnum
+ startUserFormField: string
+ timeoutEnable: boolean
+ timeoutType: DelayTypeEnum
+ timeDuration: number
+ timeUnit: TimeUnitType
+ dateTime: string
+ multiInstanceEnable: boolean
+ sequential: boolean
+ completeRatio: number
+ multiInstanceSourceType: ChildProcessMultiInstanceSourceTypeEnum
+ multiInstanceSource: string
+}
+const configForm = ref({
async: false,
calledProcessDefinitionKey: '',
skipStartUserNode: false,
inVariables: [],
outVariables: [],
- startUserType: 1,
- startUserEmptyType: 1,
+ startUserType: ChildProcessStartUserTypeEnum.MAIN_PROCESS_START_USER,
+ startUserEmptyType: ChildProcessStartUserEmptyTypeEnum.MAIN_PROCESS_START_USER,
startUserFormField: '',
timeoutEnable: false,
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()
// 保存配置
@@ -334,9 +442,8 @@ const saveConfig = async () => {
if (!formRef) return false
const valid = await formRef.value.validate()
if (!valid) return false
- // TODO @lesan:这里的 option 黄色告警,也处理下哈
const childInfo = childProcessOptions.value.find(
- (option) => option.key === configForm.value.calledProcessDefinitionKey
+ (option: any) => option.key === configForm.value.calledProcessDefinitionKey
)
currentNode.value.name = nodeName.value!
if (currentNode.value.childProcessSetting) {
@@ -371,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}`
@@ -378,7 +498,6 @@ const saveConfig = async () => {
return true
}
// 显示子流程节点配置, 由父组件传过来
-// TODO @lesan:inVariables、outVariables 红色告警
const showChildProcessNodeConfig = (node: SimpleFlowNode) => {
nodeName.value = node.name
if (node.childProcessSetting) {
@@ -415,21 +534,30 @@ 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()
}
defineExpose({ openDrawer, showChildProcessNodeConfig }) // 暴露方法给父组件
-// TODO @lesan:这里的 arr 黄色告警,也处理下哈,可以用 cursor quick fix 哈
-const addVariable = (arr) => {
- arr.push({
+const addVariable = (arr?: IOParameter[]) => {
+ arr?.push({
source: '',
target: ''
})
}
-const deleteVariable = (arr, index: number) => {
- arr.splice(index, 1)
+const deleteVariable = (index: number, arr?: IOParameter[]) => {
+ arr?.splice(index, 1)
}
const handleCalledElementChange = () => {
configForm.value.inVariables = []
@@ -461,6 +589,9 @@ const getIsoTimeDuration = () => {
}
return strTimeDuration
}
+const handleMultiInstanceSourceTypeChange = () => {
+ configForm.value.multiInstanceSource = ''
+}
onMounted(async () => {
childProcessOptions.value = await getModelList(undefined)