diff --git a/web/apps/web-ele/src/adapter/component/index.ts b/web/apps/web-ele/src/adapter/component/index.ts index 3d3f9a3..c3aef80 100644 --- a/web/apps/web-ele/src/adapter/component/index.ts +++ b/web/apps/web-ele/src/adapter/component/index.ts @@ -174,6 +174,8 @@ const withDefaultPlaceholder = ( }; // 这里需要自行根据业务组件库进行适配,需要用到的组件都需要在这里类型说明 +let initialized = false; + export type ComponentType = | 'ApiSelect' | 'ApiTreeSelect' @@ -203,7 +205,11 @@ export type ComponentType = | 'UserSelector' | BaseFormComponentType; -async function initComponentAdapter() { +function initComponentAdapter() { + if (initialized) { + return; + } + const components: Partial> = { // 如果你的组件体积比较大,可以使用异步加载 // Button: () => @@ -349,6 +355,7 @@ async function initComponentAdapter() { // 将组件注册到全局共享状态中 globalShareState.setComponents(components); + initialized = true; // 定义全局共享状态中的消息提示 globalShareState.defineMessage({ diff --git a/web/apps/web-ele/src/adapter/form.ts b/web/apps/web-ele/src/adapter/form.ts index e32d0a5..f2f9b29 100644 --- a/web/apps/web-ele/src/adapter/form.ts +++ b/web/apps/web-ele/src/adapter/form.ts @@ -8,7 +8,16 @@ import type { ComponentType } from './component'; import { setupVbenForm, useVbenForm as useForm, z } from '@vben-core/form-ui'; import { $t } from '@vben/locales'; -async function initSetupVbenForm() { +import { initComponentAdapter } from './component'; + +let initialized = false; + +function initSetupVbenForm() { + if (initialized) { + return; + } + + initComponentAdapter(); setupVbenForm({ config: { modelPropNameMap: { @@ -31,8 +40,11 @@ async function initSetupVbenForm() { }, }, }); + initialized = true; } +initSetupVbenForm(); + const useVbenForm = useForm; export { initSetupVbenForm, useVbenForm, z }; diff --git a/web/apps/web-ele/src/adapter/message.ts b/web/apps/web-ele/src/adapter/message.ts new file mode 100644 index 0000000..a8cd30b --- /dev/null +++ b/web/apps/web-ele/src/adapter/message.ts @@ -0,0 +1,21 @@ +import { globalShareState } from '@vben-core/shared/global-state'; + +function initMessageAdapter() { + globalShareState.defineMessage({ + copyPreferencesSuccess: (title, content) => { + void import('element-plus/es/components/notification/index').then( + ({ ElNotification }) => { + ElNotification({ + title, + message: content, + position: 'bottom-right', + duration: 0, + type: 'success', + }); + }, + ); + }, + }); +} + +export { initMessageAdapter }; diff --git a/web/apps/web-ele/src/bootstrap.ts b/web/apps/web-ele/src/bootstrap.ts index cb63398..599df02 100644 --- a/web/apps/web-ele/src/bootstrap.ts +++ b/web/apps/web-ele/src/bootstrap.ts @@ -12,6 +12,7 @@ import { $t, setupI18n } from '#/locales'; import { useAppContextStore } from '#/store/app-context'; import App from './app.vue'; +import { initMessageAdapter } from './adapter/message'; import { setupElementPlus } from './plugins/element-plus'; import { router } from './router'; @@ -27,6 +28,7 @@ async function bootstrap(namespace: string) { const app = createApp(App); setupElementPlus(app); + initMessageAdapter(); // 国际化 i18n 配置 await setupI18n(app); diff --git a/web/apps/web-ele/src/components/zq-table/init.ts b/web/apps/web-ele/src/components/zq-table/init.ts index c43c47c..f2d1617 100644 --- a/web/apps/web-ele/src/components/zq-table/init.ts +++ b/web/apps/web-ele/src/components/zq-table/init.ts @@ -1,12 +1,12 @@ import type { SetupZqTable } from './types'; -import { useVbenForm } from '@vben-core/form-ui'; +import { useVbenForm } from '#/adapter/form'; // 是否加载过 let isInit = false; // eslint-disable-next-line import/no-mutable-exports -export let useTableForm: typeof useVbenForm; +export let useTableForm: typeof useVbenForm = useVbenForm; export function initZqTable() { if (isInit) { diff --git a/web/apps/web-ele/src/router/guard.ts b/web/apps/web-ele/src/router/guard.ts index 98561b4..16e3686 100644 --- a/web/apps/web-ele/src/router/guard.ts +++ b/web/apps/web-ele/src/router/guard.ts @@ -169,9 +169,6 @@ function setupAccessGuard(router: Router) { const userInfo = userStore.userInfo || (await authStore.fetchUserInfo()); const userRoles = userInfo.roles ?? []; - const { ensureAdminRuntime } = await import('#/runtime/admin'); - await ensureAdminRuntime(); - // 生成菜单和路由 const { accessibleMenus, accessibleRoutes } = await generateAccess({ roles: userRoles,