diff --git a/packages/core/src/App.ts b/packages/core/src/App.ts index fce90a5c..6829049e 100644 --- a/packages/core/src/App.ts +++ b/packages/core/src/App.ts @@ -31,6 +31,7 @@ import { CodeBlockDSL, CodeItemConfig, CompItemConfig, + DataSourceItemConfig, DeprecatedEventConfig, EventConfig, Id, @@ -321,6 +322,28 @@ class App extends EventEmitter { } } + public async dataSourceActionHandler(eventConfig: DataSourceItemConfig) { + const { dataSourceMethod = [], params = {} } = eventConfig; + + const [id, methodName] = dataSourceMethod; + + if (!id || !methodName) return; + + const dataSource = this.dataSourceManager?.get(id); + + if (!dataSource) return; + + const methods = dataSource.getMethods() || []; + + const method = methods.find((item) => item.name === methodName); + + if (!method) return; + + if (typeof method.content === 'function') { + await method.content({ app: this, params, dataSource }); + } + } + public compiledNode(node: MNode, content: DataSourceManagerData, sourceId?: Id) { return compiledNode( (value: any) => { @@ -364,6 +387,8 @@ class App extends EventEmitter { } else if (actionItem.actionType === ActionType.CODE) { // 执行代码块 await this.codeActionHandler(actionItem as CodeItemConfig); + } else if (actionItem.actionType === ActionType.DATA_SOURCE) { + await this.dataSourceActionHandler(actionItem as DataSourceItemConfig); } } } else { diff --git a/packages/core/src/Node.ts b/packages/core/src/Node.ts index 762e6399..54396742 100644 --- a/packages/core/src/Node.ts +++ b/packages/core/src/Node.ts @@ -102,8 +102,11 @@ class Node extends EventEmitter { if (this.data[hook]?.hookType !== HookType.CODE || isEmpty(this.app.codeDsl)) return; for (const item of this.data[hook].hookData) { const { codeId, params = {} } = item; - if (this.app.codeDsl![codeId] && typeof this.app.codeDsl![codeId]?.content === 'function') { - await this.app.codeDsl![codeId].content({ app: this.app, params }); + + const functionContent = this.app.codeDsl?.[codeId]?.content; + + if (typeof functionContent === 'function') { + await functionContent({ app: this.app, params }); } } } diff --git a/packages/data-source/src/data-sources/Base.ts b/packages/data-source/src/data-sources/Base.ts index a8cba938..29fa06e8 100644 --- a/packages/data-source/src/data-sources/Base.ts +++ b/packages/data-source/src/data-sources/Base.ts @@ -17,7 +17,7 @@ */ import EventEmitter from 'events'; -import type { DataSchema } from '@tmagic/schema'; +import type { CodeBlockContent, DataSchema } from '@tmagic/schema'; import type { DataSourceOptions } from '@data-source/types'; import { getDefaultValueFromFields } from '@data-source/util'; @@ -35,12 +35,14 @@ export default class DataSource extends EventEmitter { public data: Record = {}; private fields: DataSchema[] = []; + private methods: CodeBlockContent[] = []; constructor(options: DataSourceOptions) { super(); this.id = options.schema.id; this.setFields(options.schema.fields); + this.setMethods(options.schema.methods || []); this.updateDefaultData(); } @@ -49,6 +51,14 @@ export default class DataSource extends EventEmitter { this.fields = fields; } + public setMethods(methods: CodeBlockContent[]) { + this.methods = methods; + } + + public getMethods() { + return this.methods; + } + public setData(data: Record) { // todo: 校验数据,看是否符合 schema this.data = data; diff --git a/packages/editor/src/Editor.vue b/packages/editor/src/Editor.vue index decd75f4..ee5f6438 100644 --- a/packages/editor/src/Editor.vue +++ b/packages/editor/src/Editor.vue @@ -40,10 +40,6 @@ - - diff --git a/packages/editor/src/components/CodeBlockEditor.vue b/packages/editor/src/components/CodeBlockEditor.vue new file mode 100644 index 00000000..25a4a1df --- /dev/null +++ b/packages/editor/src/components/CodeBlockEditor.vue @@ -0,0 +1,141 @@ + + + diff --git a/packages/editor/src/components/CodeDraftEditor.vue b/packages/editor/src/components/CodeDraftEditor.vue deleted file mode 100644 index 33a06026..00000000 --- a/packages/editor/src/components/CodeDraftEditor.vue +++ /dev/null @@ -1,148 +0,0 @@ - - diff --git a/packages/editor/src/components/CodeParams.vue b/packages/editor/src/components/CodeParams.vue index 613dc5bc..ce9b43a8 100644 --- a/packages/editor/src/components/CodeParams.vue +++ b/packages/editor/src/components/CodeParams.vue @@ -51,7 +51,6 @@ const codeParamsConfig = computed(() => getFormConfig(props.paramsConfig)); const onParamsChangeHandler = async () => { try { const value = await form.value?.submitForm(true); - console.log(value); emit('change', value); } catch (e) { console.log(e); diff --git a/packages/editor/src/components/FunctionEditor.vue b/packages/editor/src/components/FunctionEditor.vue deleted file mode 100644 index 51215a2b..00000000 --- a/packages/editor/src/components/FunctionEditor.vue +++ /dev/null @@ -1,198 +0,0 @@ - - diff --git a/packages/editor/src/fields/Code.vue b/packages/editor/src/fields/Code.vue index 3639b825..aa5369fb 100644 --- a/packages/editor/src/fields/Code.vue +++ b/packages/editor/src/fields/Code.vue @@ -1,32 +1,45 @@ diff --git a/packages/editor/src/fields/DataSourceFields.vue b/packages/editor/src/fields/DataSourceFields.vue index efe192a0..9425d57f 100644 --- a/packages/editor/src/fields/DataSourceFields.vue +++ b/packages/editor/src/fields/DataSourceFields.vue @@ -1,6 +1,6 @@