diff --git a/src/components/SecondDev/OpinionDialog.vue b/src/components/SecondDev/OpinionDialog.vue index bf72c35..840d815 100644 --- a/src/components/SecondDev/OpinionDialog.vue +++ b/src/components/SecondDev/OpinionDialog.vue @@ -24,6 +24,16 @@ {{ item.activityName }} + + @@ -123,9 +133,36 @@ } async function loadRejectNodeList() { + rejectNodeId.value=''; let res = await getRejectNodeList(_processId, _taskId); if (res && Array.isArray(res) && res.length > 0) { rejectNodeList.value = res; + dialogTitle.value = `退回`; + if (res?.length) { + res.forEach((nNode) => { + if (!nNode.userList?.length) { + return; + } + const selected = []; + nNode.nextAssignees = nNode.userList.map((item) => { + if (item.checked || nNode.userList.length === 1) { + // 只有一个人的时候必须选他 + selected.push(item['F_UserId']); + } + return { + value: item['F_UserId'], + label: item['F_RealName']+(item.remarks?"("+item.remarks+")":""), + item:item + }; + }); + nNode.assignees = selected; + if (!nNode.chooseAssign) { + // 不需要选审批人的时候 所有备选人都要放到下个节点 + nNode.assignees = nNode.userList.map((item) => item['F_UserId']); + } + nNode.chooseAssign = nNode.chooseAssign; + }); + } } } @@ -140,12 +177,24 @@ nextTaskUser[nNode.activityId] = isEnd.value ? '' : nNode.assignees.join(','); }); } + if (_action.value === 'reject') { + const isChoose = rejectNodeList.value.find((node) => node.activityId==rejectNodeId.value&&node.assignees?.length); + if (!isChoose) { + return message.error('请选择审批人'); + } + rejectNodeList.value.forEach((nNode) => { + if(nNode.activityId==rejectNodeId.value){ + nextTaskUser[nNode.activityId] = isEnd.value ? '' : nNode.assignees.join(','); + } + }); + } if (_callback && typeof _callback === 'function') { loading.value = true; _callback({ opinion: formState.opinion, rejectNodeId: rejectNodeId.value, - nextTaskUser + nextTaskUser, + isEnd }); } else { isOpen.value = false; diff --git a/src/model/workflow/bpmnConfig.ts b/src/model/workflow/bpmnConfig.ts index ea278a0..5026180 100644 --- a/src/model/workflow/bpmnConfig.ts +++ b/src/model/workflow/bpmnConfig.ts @@ -51,7 +51,9 @@ export interface FormInfoItem { } export interface FlowInfo { currentTaskAssigneeNames: string; - isCountersign: boolean; + currentTaskAssignees:{}; + taskInfo:{}; + isCountersign: boolean; isAddOrSubSign: boolean; schemaInfo: { category: string; @@ -98,7 +100,9 @@ export interface TaskApproveOpinion { } export interface BpmnFlowForm { // schemaId: string; - currentTaskAssignee: string; + currentTaskAssigneeNames:string; + currentTaskAssignees: any; + currentTaskInfo:any; item: BpmnFlowFormItem; xml: string; formInfos: Array; diff --git a/src/views/secondDev/approveFlowPage.vue b/src/views/secondDev/approveFlowPage.vue index c4f116c..f3b4a83 100644 --- a/src/views/secondDev/approveFlowPage.vue +++ b/src/views/secondDev/approveFlowPage.vue @@ -52,7 +52,10 @@ - + @@ -112,6 +115,7 @@ let approvalData = reactive({ isCountersign: false, isAddOrSubSign: false, + isEnd: false, stampInfo: { stampId: '', password: '' @@ -198,6 +202,7 @@ callback: (args) => { approvalData.approvedContent = args.opinion; approvalData.nextTaskUser = args.nextTaskUser; + approvalData.isEnd=args.isEnd; onFinish('approve'); } }); @@ -408,6 +413,7 @@ /*stampId: values.stampId, stampPassword: values.password,*/ isOldSystem: system, + isEnd:approvalData.isEnd, nextTaskUser: approvalData.nextTaskUser }; } diff --git a/src/views/workflow/design/bpmn/index.vue b/src/views/workflow/design/bpmn/index.vue index d55acb8..0616294 100644 --- a/src/views/workflow/design/bpmn/index.vue +++ b/src/views/workflow/design/bpmn/index.vue @@ -482,6 +482,11 @@ const rootElementsJson = bpmnModeler.getDefinitions().rootElements; const rootElementsFlowElementsArr = rootElementsJson[0].flowElements; + //过滤不存在元素的配置 + const exitsElements=bpmnModeler.get('elementRegistry').getAll(); + const exitsElementIds=exitsElements.map(x=>x.id); + json.childNodeConfig=json.childNodeConfig.filter(x=>exitsElementIds.indexOf(x.id)>-1); + if (validateProcessConfig(rootElementsFlowElementsArr, json)) { try { const { svg } = await bpmnModeler.saveSVG({ format: true }); diff --git a/src/views/workflow/task/components/flow/ProcessInformation.vue b/src/views/workflow/task/components/flow/ProcessInformation.vue index eff7ae3..60b4e92 100644 --- a/src/views/workflow/task/components/flow/ProcessInformation.vue +++ b/src/views/workflow/task/components/flow/ProcessInformation.vue @@ -1,6 +1,15 @@