diff --git a/packages/amis-editor/src/renderer/event-control/actionsPanelPlugins/otherActionsPanel/broadcast.tsx b/packages/amis-editor/src/renderer/event-control/actionsPanelPlugins/otherActionsPanel/broadcast.tsx new file mode 100644 index 00000000000..8a9dd61c80e --- /dev/null +++ b/packages/amis-editor/src/renderer/event-control/actionsPanelPlugins/otherActionsPanel/broadcast.tsx @@ -0,0 +1,74 @@ +import React from 'react'; +import {registerActionPanel} from '../../actionsPanelManager'; +import {getSchemaTpl, EditorManager} from 'amis-editor-core'; + +registerActionPanel('broadcast', { + label: '全局广播事件', + tag: '其他', + description: '触发全局广播事件', + innerArgs: [], + descDetail: (info: any, context: any, props: any) => { + const globalEvents = props.globalEvents || []; + const event = globalEvents.find( + (item: any) => item.name === info?.eventName + ); + return ( +
+ 触发 + {event?.label || info?.eventName} + 全局广播事件 +
+ ); + }, + schema: (manager: EditorManager) => { + const globalEvents = + manager.config?.actionOptions?.globalEventGetter?.(manager) || []; + return { + type: 'wrapper', + body: [ + { + type: 'select', + name: 'eventName', + required: true, + label: '请选择全局事件', + options: globalEvents.map(item => ({ + label: item.label, + value: item.name, + mapping: item.mapping + })), + size: 'lg', + mode: 'horizontal', + initAutoFill: true, + autoFill: { + __mapping: '${mapping}' + }, + onChange: async (val: any, oldVal: any, props: any, form: any) => { + form.setValueByName('data', void 0); + } + }, + { + type: 'input-kv', + name: 'data', + label: '参数映射', + mode: 'horizontal', + draggable: false, + visibleOn: 'this.eventName', + keySchema: { + type: 'select', + label: false, + name: 'key', + source: '${ARRAYMAP(__mapping, i => i.key)}' + }, + valueSchema: getSchemaTpl('tplFormulaControl', { + label: false, + name: 'value', + clearable: true, + placeholder: '请输入参数值', + variables: '${variables}', + header: '配置参数值' + }) + } + ] + }; + } +}); diff --git a/packages/amis-editor/src/renderer/event-control/actionsPanelPlugins/otherActionsPanel/index.ts b/packages/amis-editor/src/renderer/event-control/actionsPanelPlugins/otherActionsPanel/index.ts index f8d49ff1843..dcdeea3efb8 100644 --- a/packages/amis-editor/src/renderer/event-control/actionsPanelPlugins/otherActionsPanel/index.ts +++ b/packages/amis-editor/src/renderer/event-control/actionsPanelPlugins/otherActionsPanel/index.ts @@ -1,2 +1,3 @@ import './copy'; import './custom'; +import './broadcast'; diff --git a/packages/amis-editor/src/renderer/event-control/eventControlConfigHelper.ts b/packages/amis-editor/src/renderer/event-control/eventControlConfigHelper.ts index 7c4e998a836..c6ed96f25af 100644 --- a/packages/amis-editor/src/renderer/event-control/eventControlConfigHelper.ts +++ b/packages/amis-editor/src/renderer/event-control/eventControlConfigHelper.ts @@ -403,7 +403,9 @@ export const actionConfigInitFormatterHoc = } } - delete config.data; + if (config.actionType !== 'broadcast') { + delete config.data; + } // 处理下 addItem 的初始化 if (action.actionType === 'addItem') {