From 4f65156a9579f8e13f0b010b126c60f6baeacea1 Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Mon, 25 Aug 2025 09:42:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20[BPM=20=E5=B7=A5=E4=BD=9C=E6=B5=81]=20?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E8=A1=A8=E5=8D=95=E5=AD=97=E6=AE=B5=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E8=B0=83=E6=95=B4=E4=B8=BA=E4=BD=BF=E7=94=A8=E5=BA=93?= =?UTF-8?q?=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/src/utils/formCreate.ts | 7 ++++--- .../views/bpm/processInstance/create/modules/form.vue | 9 +++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/apps/web-antd/src/utils/formCreate.ts b/apps/web-antd/src/utils/formCreate.ts index a653a44bb..070b394ad 100644 --- a/apps/web-antd/src/utils/formCreate.ts +++ b/apps/web-antd/src/utils/formCreate.ts @@ -4,6 +4,7 @@ // TODO @芋艿:后续这些 form-create 的优化;另外需要使用 form-create-helper 会好点 import { isRef } from 'vue'; +import formCreate from '@form-create/ant-design-vue'; // 编码表单 Conf export const encodeConf = (designerRef: any) => { return JSON.stringify(designerRef.value.getOption()); @@ -23,7 +24,7 @@ export const encodeFields = (designerRef: any) => { export const decodeFields = (fields: string[]) => { const rule: object[] = []; fields.forEach((item) => { - rule.push(JSON.parse(item)); + rule.push(formCreate.parseJson(item)); }); return rule; }; @@ -34,7 +35,7 @@ export const setConfAndFields = ( conf: string, fields: string | string[], ) => { - designerRef.value.setOption(JSON.parse(conf)); + designerRef.value.setOption(formCreate.parseJson(conf)); // 处理 fields 参数类型,确保传入 decodeFields 的是 string[] 类型 const fieldsArray = Array.isArray(fields) ? fields : [fields]; designerRef.value.setRule(decodeFields(fieldsArray)); @@ -50,7 +51,7 @@ export const setConfAndFields2 = ( if (isRef(detailPreview)) { detailPreview = detailPreview.value; } - detailPreview.option = JSON.parse(conf); + detailPreview.option = formCreate.parseJson(conf); detailPreview.rule = decodeFields(fields); if (value) { detailPreview.value = value; diff --git a/apps/web-antd/src/views/bpm/processInstance/create/modules/form.vue b/apps/web-antd/src/views/bpm/processInstance/create/modules/form.vue index b91202d1c..29474006e 100644 --- a/apps/web-antd/src/views/bpm/processInstance/create/modules/form.vue +++ b/apps/web-antd/src/views/bpm/processInstance/create/modules/form.vue @@ -7,6 +7,7 @@ import { computed, nextTick, ref, watch } from 'vue'; import { useTabs } from '@vben/hooks'; import { IconifyIcon } from '@vben/icons'; +import formCreate from '@form-create/ant-design-vue'; import { Button, Card, Col, message, Row, Space, Tabs } from 'ant-design-vue'; import { getProcessDefinition } from '#/api/bpm/definition'; @@ -126,11 +127,11 @@ async function initProcessInfo(row: any, formVariables?: any) { // 注意:需要从 formVariables 中,移除不在 row.formFields 的值。 // 原因是:后端返回的 formVariables 里面,会有一些非表单的信息。例如说,某个流程节点的审批人。 // 这样,就可能导致一个流程被审批不通过后,重新发起时,会直接后端报错!!! - const allowedFields = new Set( - decodeFields(row.formFields).map((fieldObj: any) => fieldObj.field), - ); + const formApi = formCreate.create(decodeFields(row.formFields)); + const allowedFields = formApi.fields(); + console.error('allowedFields===>', allowedFields); for (const key in formVariables) { - if (!allowedFields.has(key)) { + if (!allowedFields.includes(key)) { delete formVariables[key]; } }