import { tryOnUnmounted } from '@vueuse/core'; import { Component } from 'vue'; /** * @description 转换前端组件key, 兼容旧数据 * @param string */ export const transformComponentKey = (string: string) => { const CONNECTION_SYMBOL = '-'; const needTransformFlag = (string || '').includes(CONNECTION_SYMBOL); if (needTransformFlag) { return string .split(CONNECTION_SYMBOL) .map((item) => `${item.substring(0, 1).toUpperCase()}${item.substring(1).toLowerCase()}`) .join(''); } return string; }; export const componentMap = new Map(); export const registerComponent = (name: string, component: Component) => { const _name = transformComponentKey(name); if (componentMap.has(_name)) { return componentMap.get(_name); } componentMap.set(_name, component); tryOnUnmounted(() => { uninstallComponent(_name); }); return component; }; export const uninstallComponent = (name: string) => { componentMap.delete(transformComponentKey(name)); }; export const getComponent = (frontId: string) => { return componentMap.get(transformComponentKey(frontId)); };