mirror of
https://gitee.com/myxzgzs/boyue-ui-admin-vue3
synced 2025-08-08 16:32:43 +08:00
feat: 子流程-多实例
This commit is contained in:
parent
2ff1bccbaf
commit
bad11ff29b
@ -306,6 +306,9 @@ const addNode = (type: number) => {
|
|||||||
},
|
},
|
||||||
timeoutSetting: {
|
timeoutSetting: {
|
||||||
enable: false
|
enable: false
|
||||||
|
},
|
||||||
|
multiInstanceSetting: {
|
||||||
|
enable: false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -821,6 +821,7 @@ export type ChildProcessSetting = {
|
|||||||
skipStartUserNode: boolean,
|
skipStartUserNode: boolean,
|
||||||
startUserSetting: StartUserSetting,
|
startUserSetting: StartUserSetting,
|
||||||
timeoutSetting: TimeoutSetting,
|
timeoutSetting: TimeoutSetting,
|
||||||
|
multiInstanceSetting: MultiInstanceSetting,
|
||||||
}
|
}
|
||||||
export type IOParameter = {
|
export type IOParameter = {
|
||||||
source: string
|
source: string
|
||||||
@ -836,6 +837,13 @@ export type TimeoutSetting = {
|
|||||||
type?: DelayTypeEnum,
|
type?: DelayTypeEnum,
|
||||||
timeExpression?: string,
|
timeExpression?: string,
|
||||||
}
|
}
|
||||||
|
export type MultiInstanceSetting = {
|
||||||
|
enable: boolean,
|
||||||
|
sequential?: boolean,
|
||||||
|
completeRatio?: number,
|
||||||
|
sourceType?: ChildProcessMultiInstanceSourceTypeEnum,
|
||||||
|
source?: string,
|
||||||
|
}
|
||||||
export enum ChildProcessStartUserTypeEnum {
|
export enum ChildProcessStartUserTypeEnum {
|
||||||
/**
|
/**
|
||||||
* 同主流程发起人
|
* 同主流程发起人
|
||||||
@ -869,3 +877,22 @@ export const CHILD_PROCESS_START_USER_EMPTY_TYPE = [
|
|||||||
{ label: '子流程管理员', value: ChildProcessStartUserEmptyTypeEnum.CHILD_PROCESS_ADMIN },
|
{ label: '子流程管理员', value: ChildProcessStartUserEmptyTypeEnum.CHILD_PROCESS_ADMIN },
|
||||||
{ label: '主流程管理员', value: ChildProcessStartUserEmptyTypeEnum.MAIN_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 }
|
||||||
|
]
|
||||||
|
@ -164,8 +164,10 @@
|
|||||||
<el-radio
|
<el-radio
|
||||||
v-for="item in CHILD_PROCESS_START_USER_TYPE"
|
v-for="item in CHILD_PROCESS_START_USER_TYPE"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
:value="item.value">
|
:value="item.value"
|
||||||
{{ item.label }}</el-radio>
|
>
|
||||||
|
{{ item.label }}</el-radio
|
||||||
|
>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
@ -177,8 +179,10 @@
|
|||||||
<el-radio
|
<el-radio
|
||||||
v-for="item in CHILD_PROCESS_START_USER_EMPTY_TYPE"
|
v-for="item in CHILD_PROCESS_START_USER_EMPTY_TYPE"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
:value="item.value">
|
:value="item.value"
|
||||||
{{ item.label }}</el-radio>
|
>
|
||||||
|
{{ item.label }}</el-radio
|
||||||
|
>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
@ -249,6 +253,68 @@
|
|||||||
<el-text>后进入下一节点</el-text>
|
<el-text>后进入下一节点</el-text>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<el-divider content-position="left">多实例设置</el-divider>
|
||||||
|
<el-form-item label="启用开关" prop="multiInstanceEnable">
|
||||||
|
<el-switch
|
||||||
|
v-model="configForm.multiInstanceEnable"
|
||||||
|
active-text="开启"
|
||||||
|
inactive-text="关闭"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<div v-if="configForm.multiInstanceEnable">
|
||||||
|
<el-form-item prop="sequential">
|
||||||
|
<el-switch
|
||||||
|
v-model="configForm.sequential"
|
||||||
|
active-text="串行"
|
||||||
|
inactive-text="并行"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item prop="completeRatio">
|
||||||
|
<el-text>完成比例(%)</el-text>
|
||||||
|
<el-input-number
|
||||||
|
class="ml-10px"
|
||||||
|
v-model="configForm.completeRatio"
|
||||||
|
:min="10"
|
||||||
|
:max="100"
|
||||||
|
:step="10"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item prop="multiInstanceSourceType">
|
||||||
|
<el-text>多实例来源</el-text>
|
||||||
|
<el-select class="ml-10px w-200px!" v-model="configForm.multiInstanceSourceType" @change="handleMultiInstanceSourceTypeChange">
|
||||||
|
<el-option
|
||||||
|
v-for="item in CHILD_PROCESS_MULTI_INSTANCE_SOURCE_TYPE"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item v-if="configForm.multiInstanceSourceType === 1">
|
||||||
|
<el-input-number v-model="configForm.multiInstanceSource" :min="1" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item v-if="configForm.multiInstanceSourceType === 2">
|
||||||
|
<el-select class="w-200px!" v-model="configForm.multiInstanceSource">
|
||||||
|
<el-option
|
||||||
|
v-for="(field, fIdx) in digitalFormFieldOptions"
|
||||||
|
:key="fIdx"
|
||||||
|
:label="field.title"
|
||||||
|
:value="field.field"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item v-if="configForm.multiInstanceSourceType === 3">
|
||||||
|
<el-select class="w-200px!" v-model="configForm.multiInstanceSource">
|
||||||
|
<el-option
|
||||||
|
v-for="(field, fIdx) in multiFormFieldOptions"
|
||||||
|
:key="fIdx"
|
||||||
|
:label="field.title"
|
||||||
|
:value="field.field"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</div>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
@ -276,7 +342,9 @@ import {
|
|||||||
ChildProcessStartUserTypeEnum,
|
ChildProcessStartUserTypeEnum,
|
||||||
CHILD_PROCESS_START_USER_TYPE,
|
CHILD_PROCESS_START_USER_TYPE,
|
||||||
ChildProcessStartUserEmptyTypeEnum,
|
ChildProcessStartUserEmptyTypeEnum,
|
||||||
CHILD_PROCESS_START_USER_EMPTY_TYPE
|
CHILD_PROCESS_START_USER_EMPTY_TYPE,
|
||||||
|
CHILD_PROCESS_MULTI_INSTANCE_SOURCE_TYPE,
|
||||||
|
ChildProcessMultiInstanceSourceTypeEnum
|
||||||
} from '../consts'
|
} from '../consts'
|
||||||
import { useWatchNode, useDrawer, useNodeName, useFormFieldsAndStartUser } from '../node'
|
import { useWatchNode, useDrawer, useNodeName, useFormFieldsAndStartUser } from '../node'
|
||||||
import { parseFormFields } from '@/components/FormCreate/src/utils'
|
import { parseFormFields } from '@/components/FormCreate/src/utils'
|
||||||
@ -315,7 +383,8 @@ const formRules = reactive({
|
|||||||
timeoutEnable: [{ required: true, message: '超时设置是否开启不能为空', trigger: 'change' }],
|
timeoutEnable: [{ required: true, message: '超时设置是否开启不能为空', trigger: 'change' }],
|
||||||
timeoutType: [{ required: true, message: '超时设置时间不能为空', trigger: 'change' }],
|
timeoutType: [{ required: true, message: '超时设置时间不能为空', trigger: 'change' }],
|
||||||
timeDuration: [{ 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 = {
|
type ChildProcessFormType = {
|
||||||
async: boolean
|
async: boolean
|
||||||
@ -331,6 +400,11 @@ type ChildProcessFormType = {
|
|||||||
timeDuration: number
|
timeDuration: number
|
||||||
timeUnit: TimeUnitType
|
timeUnit: TimeUnitType
|
||||||
dateTime: string
|
dateTime: string
|
||||||
|
multiInstanceEnable: boolean
|
||||||
|
sequential: boolean
|
||||||
|
completeRatio: number
|
||||||
|
multiInstanceSourceType: ChildProcessMultiInstanceSourceTypeEnum
|
||||||
|
multiInstanceSource: string
|
||||||
}
|
}
|
||||||
const configForm = ref<ChildProcessFormType>({
|
const configForm = ref<ChildProcessFormType>({
|
||||||
async: false,
|
async: false,
|
||||||
@ -345,10 +419,21 @@ const configForm = ref<ChildProcessFormType>({
|
|||||||
timeoutType: DelayTypeEnum.FIXED_TIME_DURATION,
|
timeoutType: DelayTypeEnum.FIXED_TIME_DURATION,
|
||||||
timeDuration: 1,
|
timeDuration: 1,
|
||||||
timeUnit: TimeUnitType.HOUR,
|
timeUnit: TimeUnitType.HOUR,
|
||||||
dateTime: ''
|
dateTime: '',
|
||||||
|
multiInstanceEnable: false,
|
||||||
|
sequential: false,
|
||||||
|
completeRatio: 100,
|
||||||
|
multiInstanceSourceType: ChildProcessMultiInstanceSourceTypeEnum.FIXED_QUANTITY,
|
||||||
|
multiInstanceSource: ''
|
||||||
})
|
})
|
||||||
const childProcessOptions = ref()
|
const childProcessOptions = ref()
|
||||||
const formFieldOptions = useFormFieldsAndStartUser()
|
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()
|
const childFormFieldOptions = ref()
|
||||||
|
|
||||||
// 保存配置
|
// 保存配置
|
||||||
@ -393,6 +478,19 @@ const saveConfig = async () => {
|
|||||||
configForm.value.dateTime
|
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}`
|
currentNode.value.showText = `调用子流程:${childInfo.name}`
|
||||||
@ -436,6 +534,16 @@ const showChildProcessNodeConfig = (node: SimpleFlowNode) => {
|
|||||||
configForm.value.dateTime = node.childProcessSetting.timeoutSetting.timeExpression ?? ''
|
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()
|
loadFormInfo()
|
||||||
}
|
}
|
||||||
@ -481,6 +589,9 @@ const getIsoTimeDuration = () => {
|
|||||||
}
|
}
|
||||||
return strTimeDuration
|
return strTimeDuration
|
||||||
}
|
}
|
||||||
|
const handleMultiInstanceSourceTypeChange = () => {
|
||||||
|
configForm.value.multiInstanceSource = ''
|
||||||
|
}
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
childProcessOptions.value = await getModelList(undefined)
|
childProcessOptions.value = await getModelList(undefined)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user