diff --git a/src/components/BpmnDesign/panel/TaskPanel.vue b/src/components/BpmnDesign/panel/TaskPanel.vue index 3a0cf88..098256f 100644 --- a/src/components/BpmnDesign/panel/TaskPanel.vue +++ b/src/components/BpmnDesign/panel/TaskPanel.vue @@ -40,7 +40,7 @@ - + @@ -65,7 +65,7 @@ - + @@ -168,6 +168,7 @@ import { TaskPanel } from 'bpmnDesign'; import { AllocationTypeEnum, MultipleUserAuditTypeEnum, SpecifyDescEnum } from '@/enums/bpmn/IndexEnums'; import { BellFilled, Checked, InfoFilled } from '@element-plus/icons-vue'; import { UserVO } from '@/api/system/user/types'; +import useModelerStore from '@/store/modules/modeler'; const { proxy } = getCurrentInstance() as ComponentInternalInstance; @@ -175,13 +176,14 @@ interface PropType { element: Element; } const props = withDefaults(defineProps(), {}); -const { nameChange, idChange, showConfig, updateProperties, updateProperty } = usePanel({ +const { modeling, showConfig, nameChange, idChange, updateProperties, getExtensionElements, createModdleElement } = usePanel({ element: toRaw(props.element) }); const { parseData } = useParseElement({ element: toRaw(props.element) }); -const initData = { + +const initFormData = { id: '', name: '', dueDate: '', @@ -189,7 +191,10 @@ const initData = { allocationType: AllocationTypeEnum.USER, specifyDesc: SpecifyDescEnum.SPECIFY_SINGLE }; -const formData = ref({ ...initData, ...parseData() }); +const formData = ref({ ...initFormData, ...parseData() }); +const assignee = ref>({ + userName: '' +}); const currentCollapseItem = ref(['1', '2']); const userSelectRef = ref>(); const singleUserSelectRef = ref>(); @@ -211,25 +216,42 @@ const openDueDate = () => { }; const singleUserSelectCallBack = (data: UserVO[]) => { - if (data.length !== 0) { - const user = data[0]; - formData.value.userName = user.userName; - const userId = user.userId; - updateProperties({ 'flowable:assignee': userId }); - } else { - updateProperties({ 'flowable:assignee': undefined }); + const user: UserVO = data.length !== 0 ? data[0] : undefined; + updateProperties({ 'flowable:assignee': user?.userId }); + assignee.value = user; + const extensionElements = getExtensionElements(); + let extAssigneeElement = extensionElements.get('values').find((item) => item.$type === 'flowable:extAssignee'); + if (!extAssigneeElement) { + extAssigneeElement = createModdleElement('flowable:extAssignee', { body: '' }, extensionElements); + extensionElements.get('values').push(extAssigneeElement); } + extAssigneeElement.body = JSON.stringify({ userName: user.userName, userId: user.userId }); + updateProperties({ extensionElements: extensionElements }); }; const userSelectCallBack = (data: UserVO[]) => { - if (data?.length !== 0) { - // 获取userId 用逗号,隔开 - const userIds = data.map((item) => item.userId).join(','); - updateProperties({ 'flowable:candidateUsers': userIds }); - formData.value.candidateUsers = userIds; - } else { + let extensionElements = getExtensionElements(); + extensionElements.values = extensionElements.values.filter((item) => item.$type !== 'flowable:extCandidateUsers'); + if (data.length === 0) { + formData.value.candidateUsers = ''; updateProperties({ 'flowable:candidateUsers': undefined }); - formData.value.candidateUsers = undefined; + } else { + const userIds = data.map((item) => item.userId).join(','); + formData.value.candidateUsers = userIds; + updateProperties({ 'flowable:candidateUsers': userIds }); + const extCandidateUsersElement = createModdleElement('flowable:extCandidateUsers', { body: '' }, extensionElements); + extensionElements.values.push(extCandidateUsersElement); + const users = data.map((item) => { + return { + userId: item.userId, + userName: item.userName + }; + }); + extCandidateUsersElement.body = JSON.stringify(users); } + if (extensionElements.values.length === 0) { + extensionElements = undefined; + } + updateProperties({ extensionElements: extensionElements }); }; const taskTabClick = (e) => { @@ -253,62 +275,68 @@ const selectRoleLength = computed(() => { return 0; } }); -// watch( -// () => formData.value.roles, -// (newVal: Record[]) => { -// if (newVal?.length > 0) { -// // 获取userId 用逗号,隔开 -// const roleIds = newVal.map((item) => item.roleId).join(','); -// updateProperties({ 'flowable:candidateGroups': roleIds }); -// } else { -// updateProperties({ 'flowable:candidateGroups': undefined }); -// } -// }, -// { deep: true } -// ); -// watch( -// () => formData.value.async, -// (newVal: boolean) => { -// if (newVal) { -// updateProperties({ 'flowable:async': true }); -// } else { -// updateProperties({ 'flowable:async': undefined }); -// } -// } -// ); -// watch( -// () => formData.value.skipExpression, -// (newVal: string) => { -// if (newVal) { -// updateProperties({ 'flowable:skipExpression': newVal }); -// } else { -// updateProperties({ 'flowable:skipExpression': undefined }); -// } -// } -// ); -// watch( -// () => formData.value.priority, -// (newVal: number) => { -// if (newVal) { -// updateProperties({ 'flowable:priority': newVal }); -// } else { -// updateProperties({ 'flowable:priority': undefined }); -// } -// } -// ); -// watch( -// () => formData.value.dueDate, -// (newVal: string) => { -// if (newVal) { -// updateProperties({ 'flowable:dueDate': newVal }); -// } else { -// updateProperties({ 'flowable:dueDate': undefined }); -// } -// } -// ); +watch( + () => formData.value.roles, + (newVal: Record[]) => { + if (newVal?.length > 0) { + const roleIds = newVal.map((item) => item.roleId).join(','); + updateProperties({ 'flowable:candidateGroups': roleIds }); + } else { + updateProperties({ 'flowable:candidateGroups': undefined }); + } + }, + { deep: true } +); +watch( + () => formData.value.async, + (newVal: boolean) => { + if (newVal) { + updateProperties({ 'flowable:async': true }); + } else { + updateProperties({ 'flowable:async': undefined }); + } + } +); +watch( + () => formData.value.skipExpression, + (newVal: string) => { + if (newVal) { + updateProperties({ 'flowable:skipExpression': newVal }); + } else { + updateProperties({ 'flowable:skipExpression': undefined }); + } + } +); +watch( + () => formData.value.priority, + (newVal: number) => { + if (newVal) { + updateProperties({ 'flowable:priority': newVal }); + } else { + updateProperties({ 'flowable:priority': undefined }); + } + } +); +watch( + () => formData.value.dueDate, + (newVal: string) => { + if (newVal) { + updateProperties({ 'flowable:dueDate': newVal }); + } else { + updateProperties({ 'flowable:dueDate': undefined }); + } + } +); onBeforeMount(() => { // formData.value = { ...initData, ...parseData() }; + const extensionElements = getExtensionElements(false); + if (extensionElements && extensionElements.get('values')) { + let extAssigneeElement = extensionElements.get('values').find((item) => item.$type === 'flowable:extAssignee'); + if (extAssigneeElement) { + assignee.value = JSON.parse(extAssigneeElement.body); + } + } }); const formRules = ref({