diff --git a/src/api/workflow/types.ts b/src/api/workflow/types.ts index c728ff69..b982149c 100644 --- a/src/api/workflow/types.ts +++ b/src/api/workflow/types.ts @@ -287,6 +287,8 @@ export interface CompleteTaskFormData { comment?: string; /** 流程变量(驱动后续网关条件) */ variables?: Record; + /** 发起表单数据(发起人节点重新提交时填写) */ + formData?: Record; } /** diff --git a/src/views/workflow/task/components/TodoTab.vue b/src/views/workflow/task/components/TodoTab.vue index 80cfb0af..ce202270 100644 --- a/src/views/workflow/task/components/TodoTab.vue +++ b/src/views/workflow/task/components/TodoTab.vue @@ -106,8 +106,15 @@ + (); +// 发起人节点可编辑表单:只有该节点允许修改申请内容,其余节点保持只读 +const editFormApi = ref(); +const editFormData = ref>({}); +const editRule = shallowRef([]); +const editOption = ref({ submitBtn: false, resetBtn: false }); +const isInitiatorTask = computed(() => Boolean(detail.value?.taskFormKey)); + +watch( + () => [ + detail.value?.taskFormKey, + detail.value?.formJson, + detail.value?.optionsJson, + detail.value?.dataJson, + ], + () => { + if (!isInitiatorTask.value) return; + try { + editRule.value = JSON.parse(detail.value?.formJson || "[]") as Rule[]; + editOption.value = { + ...(JSON.parse(detail.value?.optionsJson || "{}") as Options), + submitBtn: false, + resetBtn: false, + }; + editFormData.value = JSON.parse(detail.value?.dataJson || "{}") as Record; + } catch { + editRule.value = []; + editOption.value = { submitBtn: false, resetBtn: false }; + editFormData.value = {}; + } + }, + { immediate: true }, +); + // 审批意见(通过/驳回共用) const comment = ref(""); @@ -326,7 +368,17 @@ function closeRejectMode(): void { async function handleComplete(): Promise { submitting.value = true; try { - await WorkflowAPI.task.complete(detail.value!.taskId, { comment: comment.value }); + if (isInitiatorTask.value) { + const valid = await editFormApi.value + ?.validate() + .then(() => true) + .catch(() => false); + if (!valid) return; + } + await WorkflowAPI.task.complete(detail.value!.taskId, { + comment: comment.value, + formData: isInitiatorTask.value ? { ...editFormData.value } : undefined, + }); ElMessage.success("审批通过"); approveState.visible = false; fetchData();