diff --git a/apps/web-antd/src/utils/formCreate.ts b/apps/web-antd/src/utils/formCreate.ts index a653a44bbfd03c5622e9669219ef692a95c680c1..070b394ad9fc443cf14039e15d9649f06089c8e9 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 4f1ca680024b8347f541822b2ccf512b5c19827e..43a331aca900b969917c650c2d8979c3447ede62 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'; @@ -51,7 +52,7 @@ const props = defineProps({ const emit = defineEmits(['cancel']); // 增加表单就绪状态变量 表单就绪后再渲染form-create -const isFormReady = ref(false) +const isFormReady = ref(false); const { closeCurrentTab } = useTabs(); @@ -129,18 +130,17 @@ 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(); for (const key in formVariables) { - if (!allowedFields.has(key)) { + if (!allowedFields.includes(key)) { delete formVariables[key]; } } setConfAndFields2(detailForm, row.formConf, row.formFields, formVariables); // 设置表单就绪状态 - isFormReady.value = true + isFormReady.value = true; await nextTick(); fApi.value?.btn.show(false); // 隐藏提交按钮