From 56b3dd09aa6dac0ded429516cac078713d5b8695 Mon Sep 17 00:00:00 2001
From: pch <75729660@qq.com>
Date: Sun, 26 Jan 2025 22:47:29 +0800
Subject: [PATCH] =?UTF-8?q?=E6=84=8F=E8=A7=81=E5=BF=85=E5=A1=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../descriptor/flowableDescriptor.json | 14 +++++++
.../package/penal/form/ElementForm.vue | 39 +++++++++++++------
src/utils/dict.ts | 1 +
.../detail/ProcessInstanceOperationButton.vue | 21 ++++++++--
4 files changed, 59 insertions(+), 16 deletions(-)
diff --git a/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json b/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json
index 24706be..6b72a54 100644
--- a/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json
+++ b/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json
@@ -1477,6 +1477,20 @@
"isBody": true
}
]
+ },
+ {
+ "name": "OpinionRequired",
+ "superClass": ["Element"],
+ "meta": {
+ "allowedIn": ["bpmn:UserTask"]
+ },
+ "properties": [
+ {
+ "name": "value",
+ "type": "Integer",
+ "isBody": true
+ }
+ ]
}
],
"emumerations": []
diff --git a/src/components/bpmnProcessDesigner/package/penal/form/ElementForm.vue b/src/components/bpmnProcessDesigner/package/penal/form/ElementForm.vue
index ca924e7..1ed474a 100644
--- a/src/components/bpmnProcessDesigner/package/penal/form/ElementForm.vue
+++ b/src/components/bpmnProcessDesigner/package/penal/form/ElementForm.vue
@@ -108,16 +108,16 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+ {{ dict.label }}
+
+
@@ -176,6 +176,8 @@ const prefix = inject('prefix')
const width = inject('width')
const DefaultOpinion = ref('')
const DefaultOpinionEl = ref('')
+const OpinionRequired = ref('')
+const OpinionRequiredEl = ref('')
const formKey = ref('')
const businessKey = ref('')
const itemType = ref(0)
@@ -371,6 +373,14 @@ const resetFormList = () => { //
DefaultOpinion.value = DefaultOpinionEl.value.value
+ //意见必填
+ OpinionRequiredEl.value =
+ elExtensionElements.value.values?.filter(
+ (ex) => ex.$type === `${prefix}:OpinionRequired`
+ )?.[0] || bpmnInstances().moddle.create(`${prefix}:OpinionRequired`, { value: 0 })
+
+ OpinionRequired.value = OpinionRequiredEl.value.value
+
// 业务标识 businessKey, 绑定在 formData 中
businessKey.value = formData.value.businessKey
@@ -400,7 +410,8 @@ const resetFormList = () => { //
(ex) =>
ex.$type !== `${prefix}:ButtonsSetting` &&
ex.$type !== `${prefix}:FormData` &&
- ex.$type !== `${prefix}:DefaultOpinion`
+ ex.$type !== `${prefix}:DefaultOpinion` &&
+ ex.$type !== `${prefix}:OpinionRequired`
) ?? []
// 更新元素扩展属性,避免后续报错
updateElementExtensions()
@@ -582,7 +593,10 @@ const updateOpinion = () => {
DefaultOpinionEl.value.value = DefaultOpinion.value
updateElementExtensions()
}
-
+const updateElementOpinionRequired = () => {
+ OpinionRequiredEl.value.value = OpinionRequired.value
+ updateElementExtensions()
+}
const updateElementExtensions = () => {
// 更新回扩展元素
const newElExtensionElements = bpmnInstances().moddle.create(`bpmn:ExtensionElements`, {
@@ -594,6 +608,7 @@ const updateElementExtensions = () => {
values: [
...otherExtensions.value,
DefaultOpinionEl.value,
+ OpinionRequiredEl.value,
...buttonsSettingEl.value
]
})
diff --git a/src/utils/dict.ts b/src/utils/dict.ts
index 38a1c1d..bd374be 100644
--- a/src/utils/dict.ts
+++ b/src/utils/dict.ts
@@ -186,6 +186,7 @@ export enum DICT_TYPE {
BPM_TASK_FORM_ATTACH_TYPE = 'bpm_task_attach_type',
BPM_TASK_ATTACH_Upload = 'bpm_task_attach_upload',
BPM_TASK_FORM_APPROVE_REJECT_TYPE = 'bpm_task_approve_reject_type',
+ BPM_TASK_OPINION_REQUIRED = 'bpm_task_opinion_required',
BPM_TASK_APPROVE_NULL = 'bpm_task_approve_null',
BPM_TASK_APPROVE_SAME = 'bpm_task_approve_same',
// ========== PAY 模块 ==========
diff --git a/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue b/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue
index e9164a0..50d596f 100644
--- a/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue
+++ b/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue
@@ -740,8 +740,9 @@ const approveFormRef = ref()
const approveReasonForm = reactive({
reason: ''
})
+let approveReasonFlag = false
const approveReasonRule = reactive>({
- reason: [{ required: true, message: '审批意见不能为空', trigger: 'blur' }],
+ reason: [{ required: approveReasonFlag, message: '审批意见不能为空', trigger: 'blur' }],
})
// 拒绝表单
const rejectFormRef = ref()
@@ -1349,9 +1350,21 @@ const loadTodoTask = async(task: any) => {
} else {
approveForm.value = {} // 占位,避免为空
if( task ) {
- const defaultopinionpinion = await TaskApi.getTaskConfigFromBpmn( task.id ,"defaultOpinion")
- //console.log(defaultopinionpinion,"defaultopinionpinion")
- approveReasonForm.reason =defaultopinionpinion
+ const defaultopinion = await TaskApi.getTaskConfigFromBpmn( task.id ,"defaultOpinion")
+ if ( defaultopinion != null ) {
+ approveReasonForm.reason =defaultopinion
+ }
+
+ const opinionrequired = await TaskApi.getTaskConfigFromBpmn( task.id ,"opinionRequired")
+ if ( opinionrequired != null ) {
+ if ( opinionrequired == "1" ) {
+ approveReasonFlag = true
+ // 重新设置验证规则,以便生效
+ approveReasonRule.reason[0].required = true
+ // 强制表单更新
+ approveFormRef.value?.validate();
+ }
+ }
}
}
}