diff --git a/src/hooks/useLifeHandler.hook.ts b/src/hooks/useLifeHandler.hook.ts index 1c805806..fde94eef 100644 --- a/src/hooks/useLifeHandler.hook.ts +++ b/src/hooks/useLifeHandler.hook.ts @@ -1,4 +1,4 @@ -import { CreateComponentType, EventLife } from '@/packages/index.d' +import { CreateComponentType, CreateComponentGroupType, EventLife, BaseEvent } from '@/packages/index.d' import * as echarts from 'echarts' // 所有图表组件集合对象 @@ -7,9 +7,20 @@ const components: { [K in string]?: any } = {} // 项目提供的npm 包变量 export const npmPkgs = { echarts } -export const useLifeHandler = (chartConfig: CreateComponentType) => { - const events = chartConfig.events.advancedEvents || {} +// 组件事件处理 hook +export const useLifeHandler = (chartConfig: CreateComponentType | CreateComponentGroupType) => { + // 处理基础事件 + const baseEvent: { [key: string]: any } = {} + for (const key in chartConfig.events.baseEvent) { + const fnStr: string | undefined = (chartConfig.events.baseEvent as any)[key] + // 动态绑定基础事件 + if (fnStr) { + baseEvent[key] = generateBaseFunc(fnStr) + } + } + // 生成生命周期事件 + const events = chartConfig.events.advancedEvents || {} const lifeEvents = { [EventLife.VNODE_BEFORE_MOUNT](e: any) { // 存储组件 @@ -22,11 +33,29 @@ export const useLifeHandler = (chartConfig: CreateComponentType) => { generateFunc(fnStr, e) } } - return lifeEvents + return { ...baseEvent, ...lifeEvents } } /** - * + * 生成基础函数 + * @param fnStr 用户方法体代码 + * @param event 鼠标事件 + */ + export function generateBaseFunc(fnStr: string) { + try { + return new Function(` + return ( + async function(mouseEvent){ + ${fnStr} + } + )`)() + } catch (error) { + console.error(error) + } +} + +/** + * 生成高级函数 * @param fnStr 用户方法体代码 * @param e 执行生命周期的动态组件实例 */ diff --git a/src/packages/index.d.ts b/src/packages/index.d.ts index 283d9dd8..fbdfa2f5 100644 --- a/src/packages/index.d.ts +++ b/src/packages/index.d.ts @@ -90,16 +90,16 @@ export const BlendModeEnumList = [ { label: '亮度', value: 'luminosity' } ] -// 基础事件类型 +// 基础事件类型(vue不加 on) export enum BaseEvent { // 点击 - ON_CLICK = 'onClick', + ON_CLICK = 'click', // 双击 - ON_DBL_CLICK = 'onDblClick', + ON_DBL_CLICK = 'dblclick', // 移入 - ON_MOUSE_ENTER = 'onMouseenter', + ON_MOUSE_ENTER = 'mouseenter', // 移出 - ON_MOUSE_LEAVE = 'onMouseleave', + ON_MOUSE_LEAVE = 'mouseleave', } // vue3 生命周期事件 diff --git a/src/views/chart/ContentConfigurations/components/ChartEvent/components/ChartEventAdvancedHandle/index.vue b/src/views/chart/ContentConfigurations/components/ChartEvent/components/ChartEventAdvancedHandle/index.vue index d91e67e4..fe89c656 100644 --- a/src/views/chart/ContentConfigurations/components/ChartEvent/components/ChartEventAdvancedHandle/index.vue +++ b/src/views/chart/ContentConfigurations/components/ChartEvent/components/ChartEventAdvancedHandle/index.vue @@ -40,7 +40,7 @@ - 提示 + 说明 通过提供的参数可为图表增加定制化的tooltip、交互事件等等 diff --git a/src/views/chart/ContentConfigurations/components/ChartEvent/components/ChartEventBaseHandle/index.vue b/src/views/chart/ContentConfigurations/components/ChartEvent/components/ChartEventBaseHandle/index.vue index bfe0157f..90151736 100644 --- a/src/views/chart/ContentConfigurations/components/ChartEvent/components/ChartEventBaseHandle/index.vue +++ b/src/views/chart/ContentConfigurations/components/ChartEvent/components/ChartEventBaseHandle/index.vue @@ -39,6 +39,10 @@ + +

async function    - {{ eventName }}(mouseEvent, components)  { + {{ eventName }}(mouseEvent)  {

@@ -88,10 +92,7 @@ - 事件对象 - - - 当前图表组件实例 + 鼠标事件对象 @@ -107,7 +108,7 @@ - 提示 + 说明 编写方式同正常 JavaScript 写法 @@ -188,10 +189,10 @@ const saveEvents = () => { if (Object.values(baseEvent.value).join('').trim() === '') { // 清空事件 targetData.value.events.baseEvent = { - onClick: undefined, - onDblClick: undefined, - onMouseenter: undefined, - onMouseleave: undefined, + [BaseEvent.ON_CLICK]: undefined, + [BaseEvent.ON_DBL_CLICK]: undefined, + [BaseEvent.ON_MOUSE_ENTER]: undefined, + [BaseEvent.ON_MOUSE_LEAVE]: undefined } } else { targetData.value.events.baseEvent = { ...baseEvent.value } diff --git a/src/views/preview/components/PreviewRenderGroup/index.vue b/src/views/preview/components/PreviewRenderGroup/index.vue index 422fd441..cc149e88 100644 --- a/src/views/preview/components/PreviewRenderGroup/index.vue +++ b/src/views/preview/components/PreviewRenderGroup/index.vue @@ -14,6 +14,7 @@ > , diff --git a/src/views/preview/components/PreviewRenderList/index.vue b/src/views/preview/components/PreviewRenderList/index.vue index af55e9c1..9bb0cbec 100644 --- a/src/views/preview/components/PreviewRenderList/index.vue +++ b/src/views/preview/components/PreviewRenderList/index.vue @@ -25,6 +25,7 @@ ,