diff --git a/src/components/SimpleProcessDesignerV2/src/consts.ts b/src/components/SimpleProcessDesignerV2/src/consts.ts
index 8aa3859b9099cd7c7983f7556f6f1668af19d6e8..243d0cfee56da99c442e5b4d86d8cfb721ef77e3 100644
--- a/src/components/SimpleProcessDesignerV2/src/consts.ts
+++ b/src/components/SimpleProcessDesignerV2/src/consts.ts
@@ -120,6 +120,8 @@ export interface SimpleFlowNode {
defaultFlowId?: string
// 签名
signEnable?: boolean
+ // 审批意见
+ reasonRequire?: boolean
}
// 候选人策略枚举 ( 用于审批节点。抄送节点 )
export enum CandidateStrategy {
diff --git a/src/components/SimpleProcessDesignerV2/src/node.ts b/src/components/SimpleProcessDesignerV2/src/node.ts
index 79bb5d3886ae87e8ef11ae0c13f44edf412a2fae..af65bcfc67c9b3efd8c2348896cb7719b2f3dd07 100644
--- a/src/components/SimpleProcessDesignerV2/src/node.ts
+++ b/src/components/SimpleProcessDesignerV2/src/node.ts
@@ -149,6 +149,7 @@ export type UserTaskFormType = {
taskCompleteListenerHeader?: ListenerParam[]
taskCompleteListenerBody?: ListenerParam[]
signEnable: boolean
+ reasonRequire: boolean
}
export type CopyTaskFormType = {
diff --git a/src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue b/src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue
index 8e18b7568dc079777761279b67fb0349264e6277..6a76beebdd97f42b1b72a557000b48efe7e069e1 100644
--- a/src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue
+++ b/src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue
@@ -361,6 +361,11 @@
+
+ 审批意见
+
+
+
@@ -698,6 +703,8 @@ const saveConfig = async () => {
}
// 签名
currentNode.value.signEnable = configForm.value.signEnable
+ // 审批意见
+ currentNode.value.reasonRequire = configForm.value.reasonRequire
currentNode.value.showText = showText
settingVisible.value = false
@@ -767,6 +774,8 @@ const showUserTaskNodeConfig = (node: SimpleFlowNode) => {
configForm.value.taskCompleteListenerBody = node.taskCompleteListener?.body ?? []
// 6. 签名
configForm.value.signEnable = node?.signEnable ?? false
+ // 7. 审批意见
+ configForm.value.reasonRequire = node?.reasonRequire ?? false
}
defineExpose({ openDrawer, showUserTaskNodeConfig }) // 暴露方法给父组件
diff --git a/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json b/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json
index 9f3ae16ce1e0a56c9e91e52b950ea606a0876cc2..130b594139c2e340f793ad86d54fb130044a3744 100644
--- a/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json
+++ b/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json
@@ -1463,6 +1463,20 @@
"type": "String"
}
]
+ },
+ {
+ "name": "ReasonRequire",
+ "superClass": ["Element"],
+ "meta": {
+ "allowedIn": ["bpmn:UserTask"]
+ },
+ "properties": [
+ {
+ "name": "value",
+ "type": "Boolean",
+ "isBody": true
+ }
+ ]
}
],
"emumerations": []
diff --git a/src/components/bpmnProcessDesigner/package/penal/custom-config/components/UserTaskCustomConfig.vue b/src/components/bpmnProcessDesigner/package/penal/custom-config/components/UserTaskCustomConfig.vue
index 206c3889244da144799ddd0f1a79d2bae6e5c5f8..aab130d087aa243b2e89c8c89fef76b50b21bb9b 100644
--- a/src/components/bpmnProcessDesigner/package/penal/custom-config/components/UserTaskCustomConfig.vue
+++ b/src/components/bpmnProcessDesigner/package/penal/custom-config/components/UserTaskCustomConfig.vue
@@ -167,6 +167,11 @@
+
+ 审批意见
+
+
+
@@ -227,6 +232,9 @@ const approveType = ref({ value: ApproveType.USER })
// 是否需要签名
const signEnable = ref({ value: false })
+// 审批意见
+const reasonRequire = ref({ value: false })
+
const elExtensionElements = ref()
const otherExtensions = ref()
const bpmnElement = ref()
@@ -320,6 +328,16 @@ const resetCustomConfigList = () => {
})
}
+ // 是否需要签名
+ signEnable.value =
+ elExtensionElements.value.values?.filter((ex) => ex.$type === `${prefix}:SignEnable`)?.[0] ||
+ bpmnInstances().moddle.create(`${prefix}:SignEnable`, { value: false })
+
+ // 审批意见
+ reasonRequire.value =
+ elExtensionElements.value.values?.filter((ex) => ex.$type === `${prefix}:ReasonRequire`)?.[0] ||
+ bpmnInstances().moddle.create(`${prefix}:ReasonRequire`, { value: false })
+
// 保留剩余扩展元素,便于后面更新该元素对应属性
otherExtensions.value =
elExtensionElements.value.values?.filter(
@@ -331,14 +349,11 @@ const resetCustomConfigList = () => {
ex.$type !== `${prefix}:AssignEmptyUserIds` &&
ex.$type !== `${prefix}:ButtonsSetting` &&
ex.$type !== `${prefix}:FieldsPermission` &&
- ex.$type !== `${prefix}:ApproveType`
+ ex.$type !== `${prefix}:ApproveType` &&
+ ex.$type !== `${prefix}:SignEnable` &&
+ ex.$type !== `${prefix}:ReasonRequire`
) ?? []
- // 是否需要签名
- signEnable.value =
- elExtensionElements.value.values?.filter((ex) => ex.$type === `${prefix}:SignEnable`)?.[0] ||
- bpmnInstances().moddle.create(`${prefix}:SignEnable`, { value: false })
-
// 更新元素扩展属性,避免后续报错
updateElementExtensions()
}
@@ -388,7 +403,8 @@ const updateElementExtensions = () => {
approveType.value,
...buttonsSettingEl.value,
...fieldsPermissionEl.value,
- signEnable.value
+ signEnable.value,
+ reasonRequire.value
]
})
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
diff --git a/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue b/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue
index 402644e9370997bcf8381997039a26efbe840c96..849338784deaa22e590d50eb3635ff0d0d677ad4 100644
--- a/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue
+++ b/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue
@@ -548,6 +548,7 @@ const approveForm = ref({}) // 审批通过时,额外的补充信息
const approveFormFApi = ref({}) // approveForms 的 fAPi
// 审批通过意见表单
+const reasonRequire = ref()
const approveFormRef = ref()
const signRef = ref()
const approveSignFormRef = ref()
@@ -555,17 +556,21 @@ const approveReasonForm = reactive({
reason: '',
signPicUrl: ''
})
-const approveReasonRule = reactive>({
- reason: [{ required: true, message: '审批意见不能为空', trigger: 'blur' }],
- signPicUrl: [{ required: true, message: '签名不能为空', trigger: 'change' }]
+const approveReasonRule = computed(() => {
+ return {
+ reason: [{ required: reasonRequire.value, message: '审批意见不能为空', trigger: 'blur' }],
+ signPicUrl: [{ required: true, message: '签名不能为空', trigger: 'change' }]
+ }
})
// 拒绝表单
const rejectFormRef = ref()
const rejectReasonForm = reactive({
reason: ''
})
-const rejectReasonRule = reactive>({
- reason: [{ required: true, message: '审批意见不能为空', trigger: 'blur' }]
+const rejectReasonRule = computed(() => {
+ return {
+ reason: [{ required: reasonRequire.value, message: '审批意见不能为空', trigger: 'blur' }]
+ }
})
// 抄送表单
@@ -966,6 +971,7 @@ const loadTodoTask = (task: any) => {
approveForm.value = {}
approveFormFApi.value = {}
runningTask.value = task
+ reasonRequire.value = task?.reasonRequire ?? false
// 处理 approve 表单.
if (task && task.formId && task.formConf) {
const tempApproveForm = {}