From 2d133f47f13d8d3ea557e0b14028588cf37884b0 Mon Sep 17 00:00:00 2001 From: roymondchen Date: Thu, 30 May 2024 17:14:50 +0800 Subject: [PATCH] =?UTF-8?q?feat(core,editor,form):=20=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E7=89=87=E5=AE=B9=E5=99=A8=E6=94=AF=E6=8C=81=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=AE=B9=E5=99=A8=E5=86=85=E7=BB=84=E4=BB=B6=E7=9A=84=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/App.ts | 23 ++++- packages/editor/src/fields/EventSelect.vue | 106 +++++++++++++++++---- packages/form/src/containers/Container.vue | 16 +--- packages/form/src/fields/Cascader.vue | 16 ++-- packages/form/src/schema.ts | 4 +- 5 files changed, 125 insertions(+), 40 deletions(-) diff --git a/packages/core/src/App.ts b/packages/core/src/App.ts index 51f39840..3d45d818 100644 --- a/packages/core/src/App.ts +++ b/packages/core/src/App.ts @@ -18,7 +18,7 @@ import { EventEmitter } from 'events'; -import { has, isEmpty } from 'lodash-es'; +import { has, isArray, isEmpty } from 'lodash-es'; import { createDataSourceManager, DataSource, DataSourceManager, ObservedDataClass } from '@tmagic/data-source'; import { @@ -228,10 +228,20 @@ class App extends EventEmitter implements AppCore { for (const [, value] of this.page.nodes) { value.events?.forEach((event, index) => { - const eventName = `${event.name}_${value.data.id}`; - const eventHandler = (fromCpt: Node, ...args: any[]) => { + let eventName = `${event.name}_${value.data.id}`; + let eventHandler = (fromCpt: Node, ...args: any[]) => { this.eventHandler(index, fromCpt, args); }; + + // 页面片容器可以配置页面片内组件的事件,形式为“${nodeId}.${eventName}” + const eventNames = event.name.split('.'); + if (eventNames.length > 1) { + eventName = `${eventNames[1]}_${eventNames[0]}`; + eventHandler = (fromCpt: Node, ...args: any[]) => { + this.eventHandler(index, value, args); + }; + } + this.eventList.set(eventHandler, eventName); this.on(eventName, eventHandler); }); @@ -269,7 +279,12 @@ class App extends EventEmitter implements AppCore { public async compActionHandler(eventConfig: CompItemConfig, fromCpt: Node | DataSource, args: any[]) { if (!this.page) throw new Error('当前没有页面'); - const { method: methodName, to } = eventConfig; + let { method: methodName, to } = eventConfig; + + if (isArray(methodName)) { + [to, methodName] = methodName; + } + const toNode = this.page.getNode(to); if (!toNode) throw `ID为${to}的组件不存在`; diff --git a/packages/editor/src/fields/EventSelect.vue b/packages/editor/src/fields/EventSelect.vue index 891dea55..863fe0f3 100644 --- a/packages/editor/src/fields/EventSelect.vue +++ b/packages/editor/src/fields/EventSelect.vue @@ -26,14 +26,14 @@ @change="onChangeHandler" >