From 6299d286ba07f5661f3d477b3d6fc1ad913a40ea Mon Sep 17 00:00:00 2001 From: roymondchen Date: Tue, 28 Nov 2023 19:32:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(editor):=20=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=AE=9A=E4=B9=89=E5=BF=AB=E9=80=9F=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=94=AF=E6=8C=81=E4=B8=8E=E5=B7=B2=E6=9C=89=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=90=88=E5=B9=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../editor/src/fields/DataSourceFields.vue | 24 ++++++++++++------- packages/utils/src/index.ts | 6 ++--- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/packages/editor/src/fields/DataSourceFields.vue b/packages/editor/src/fields/DataSourceFields.vue index 72a43f75..793814a2 100644 --- a/packages/editor/src/fields/DataSourceFields.vue +++ b/packages/editor/src/fields/DataSourceFields.vue @@ -38,6 +38,7 @@ import { TMagicButton, tMagicMessage, tMagicMessageBox } from '@tmagic/design'; import { type FieldProps, type FormConfig, type FormState, MFormDrawer } from '@tmagic/form'; import type { DataSchema } from '@tmagic/schema'; import { MagicTable } from '@tmagic/table'; +import { getDefaultValueFromFields } from '@tmagic/utils'; import type { Services } from '@editor/type'; @@ -96,7 +97,7 @@ const fieldColumns = [ }, { label: '属性描述', - prop: 'desc', + prop: 'description', }, { label: '默认值', @@ -229,6 +230,7 @@ const jsonFromValues = ref({ }); const newFromJsonHandler = () => { + jsonFromValues.value.data = getDefaultValueFromFields(props.model[props.name]); addFromJsonDialog.value?.show(); }; @@ -243,37 +245,41 @@ const getValueType = (value: any) => { return 'any'; }; -const getFieldsConfig = (value: any) => { +const getFieldsConfig = (value: any, fields: DataSchema[] = []) => { if (!value || typeof value !== 'object') throw new Error('数据格式错误'); - const fields: DataSchema[] = []; + const newFields: DataSchema[] = []; Object.entries(value).forEach(([key, value]) => { const type = getValueType(value); + const oldField = fields.find((field) => field.name === key); + let childFields: DataSchema[] = []; if (Array.isArray(value) && value.length > 0) { - childFields = getFieldsConfig(value[0]); + childFields = getFieldsConfig(value[0], oldField?.fields); } else if (type === 'object') { - childFields = getFieldsConfig(value); + childFields = getFieldsConfig(value, oldField?.fields); } - fields.push({ + newFields.push({ name: key, - title: key, + title: oldField?.title || key, type, + description: oldField?.description || '', + enable: oldField?.enable ?? true, defaultValue: value, fields: childFields, }); }); - return fields; + return newFields; }; const addFromJsonFromChange = ({ data }: { data: string }) => { try { const value = JSON.parse(data); - props.model[props.name] = getFieldsConfig(value); + props.model[props.name] = getFieldsConfig(value, props.model[props.name]); addFromJsonDialog.value?.hide(); diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index f5267e24..5477e12f 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -345,11 +345,11 @@ export const getDefaultValueFromFields = (fields: DataSchema[]) => { const data: Record = {}; const defaultValue: Record = { - string: '', + string: undefined, object: {}, array: [], - boolean: false, - number: 0, + boolean: undefined, + number: undefined, null: null, any: undefined, };