From f583c7daec76518bbb2e7044740337e0c15997e1 Mon Sep 17 00:00:00 2001 From: roymondchen Date: Tue, 7 Apr 2026 18:20:58 +0800 Subject: [PATCH] =?UTF-8?q?feat(editor,data-source):=20=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=BA=90=E6=94=AF=E6=8C=81=E5=86=85=E7=BD=AE"=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E6=95=B0=E6=8D=AE"=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 支持通过事件调用数据源的 setData 方法,可以选择数据源字段并根据字段类型动态设置数据; 重构 CodeParams 参数配置支持动态类型; DataSourceFieldSelect 支持指定数据源ID; 常量抽取到 utils/const.ts Made-with: Cursor --- packages/core/src/App.ts | 2 +- packages/data-source/src/data-sources/Base.ts | 8 +++- packages/editor/src/components/CodeParams.vue | 30 ++++++++++--- .../DataSourceFieldSelect/FieldSelect.vue | 45 ++++++++++++++++--- .../fields/DataSourceFieldSelect/Index.vue | 1 + .../src/fields/DataSourceMethodSelect.vue | 42 +++++++++++++++++ packages/editor/src/type.ts | 4 +- packages/form-schema/src/editor.ts | 2 + packages/utils/src/const.ts | 5 +++ packages/utils/src/index.ts | 8 ++-- 10 files changed, 126 insertions(+), 21 deletions(-) create mode 100644 packages/utils/src/const.ts diff --git a/packages/core/src/App.ts b/packages/core/src/App.ts index 14d17ec6..3e9ca3b2 100644 --- a/packages/core/src/App.ts +++ b/packages/core/src/App.ts @@ -297,7 +297,7 @@ class App extends EventEmitter { } if (typeof dataSource[methodName] === 'function') { - return await dataSource[methodName](); + return await dataSource[methodName]({ params }); } } catch (e: any) { if (this.errorHandler) { diff --git a/packages/data-source/src/data-sources/Base.ts b/packages/data-source/src/data-sources/Base.ts index 227eaba6..90965a4e 100644 --- a/packages/data-source/src/data-sources/Base.ts +++ b/packages/data-source/src/data-sources/Base.ts @@ -20,7 +20,7 @@ import EventEmitter from 'events'; import { cloneDeep } from 'lodash-es'; import type { CodeBlockContent, DataSchema, DataSourceSchema, default as TMagicApp } from '@tmagic/core'; -import { getDefaultValueFromFields } from '@tmagic/core'; +import { DATA_SOURCE_SET_DATA_METHOD_NAME, getDefaultValueFromFields } from '@tmagic/core'; import { ObservedData } from '@data-source/observed-data/ObservedData'; import { SimpleObservedData } from '@data-source/observed-data/SimpleObservedData'; @@ -51,6 +51,7 @@ export default class DataSource e super(); this.#id = options.schema.id; + this.#type = options.schema.type; this.#schema = options.schema; this.app = options.app; @@ -58,6 +59,11 @@ export default class DataSource e this.setFields(options.schema.fields); this.setMethods(options.schema.methods || []); + // @ts-ignore + this[DATA_SOURCE_SET_DATA_METHOD_NAME] = ({ params }: { params: { field?: string[]; data: any } }) => { + this.setData(params.data, params.field?.join('.')); + }; + let data = options.initialData; // eslint-disable-next-line @typescript-eslint/naming-convention const ObservedDataClass = options.ObservedDataClass || SimpleObservedData; diff --git a/packages/editor/src/components/CodeParams.vue b/packages/editor/src/components/CodeParams.vue index aac07fd9..d098697e 100644 --- a/packages/editor/src/components/CodeParams.vue +++ b/packages/editor/src/components/CodeParams.vue @@ -46,13 +46,29 @@ const getFormConfig = (items: FormItemConfig[] = []) => [ const codeParamsConfig = computed(() => getFormConfig( - props.paramsConfig.map(({ name, text, extra, ...config }) => ({ - type: 'data-source-field-select', - name, - text, - extra, - fieldConfig: config as FormItemConfig, - })), + props.paramsConfig.map(({ name, text, extra, ...config }) => { + let { type } = config; + if (typeof type === 'function') { + type = type(undefined, { + model: props.model[props.name], + }); + } + if (type && ['data-source-field-select', 'vs-code'].includes(type)) { + return { + ...config, + name, + text, + extra, + }; + } + return { + type: 'data-source-field-select' as const, + name, + text, + extra, + fieldConfig: config, + }; + }) as FormItemConfig[], ), ); diff --git a/packages/editor/src/fields/DataSourceFieldSelect/FieldSelect.vue b/packages/editor/src/fields/DataSourceFieldSelect/FieldSelect.vue index 940d1d76..f290ff01 100644 --- a/packages/editor/src/fields/DataSourceFieldSelect/FieldSelect.vue +++ b/packages/editor/src/fields/DataSourceFieldSelect/FieldSelect.vue @@ -1,6 +1,21 @@