Lazy load startup element plus modules
This commit is contained in:
@@ -13,21 +13,51 @@ import { defineAsyncComponent, defineComponent, h, ref } from 'vue';
|
||||
import { ApiComponent, globalShareState } from '@vben/common-ui';
|
||||
import { $t } from '@vben/locales';
|
||||
|
||||
import { ElButton } from 'element-plus/es/components/button/index';
|
||||
import {
|
||||
ElCheckbox,
|
||||
ElCheckboxButton,
|
||||
ElCheckboxGroup,
|
||||
} from 'element-plus/es/components/checkbox/index';
|
||||
import { ElDivider } from 'element-plus/es/components/divider/index';
|
||||
import { ElInput } from 'element-plus/es/components/input/index';
|
||||
import {
|
||||
ElRadio,
|
||||
ElRadioButton,
|
||||
ElRadioGroup,
|
||||
} from 'element-plus/es/components/radio/index';
|
||||
import { ElSpace } from 'element-plus/es/components/space/index';
|
||||
import { ElSwitch } from 'element-plus/es/components/switch/index';
|
||||
const ElButton = defineAsyncComponent(() =>
|
||||
import('element-plus/es/components/button/index').then((res) => res.ElButton),
|
||||
);
|
||||
const ElCheckbox = defineAsyncComponent(() =>
|
||||
import('element-plus/es/components/checkbox/index').then(
|
||||
(res) => res.ElCheckbox,
|
||||
),
|
||||
);
|
||||
const ElCheckboxButton = defineAsyncComponent(() =>
|
||||
import('element-plus/es/components/checkbox/index').then(
|
||||
(res) => res.ElCheckboxButton,
|
||||
),
|
||||
);
|
||||
const ElCheckboxGroup = defineAsyncComponent(() =>
|
||||
import('element-plus/es/components/checkbox/index').then(
|
||||
(res) => res.ElCheckboxGroup,
|
||||
),
|
||||
);
|
||||
const ElDivider = defineAsyncComponent(() =>
|
||||
import('element-plus/es/components/divider/index').then(
|
||||
(res) => res.ElDivider,
|
||||
),
|
||||
);
|
||||
const ElInput = defineAsyncComponent(() =>
|
||||
import('element-plus/es/components/input/index').then((res) => res.ElInput),
|
||||
);
|
||||
const ElRadio = defineAsyncComponent(() =>
|
||||
import('element-plus/es/components/radio/index').then((res) => res.ElRadio),
|
||||
);
|
||||
const ElRadioButton = defineAsyncComponent(() =>
|
||||
import('element-plus/es/components/radio/index').then(
|
||||
(res) => res.ElRadioButton,
|
||||
),
|
||||
);
|
||||
const ElRadioGroup = defineAsyncComponent(() =>
|
||||
import('element-plus/es/components/radio/index').then(
|
||||
(res) => res.ElRadioGroup,
|
||||
),
|
||||
);
|
||||
const ElSpace = defineAsyncComponent(() =>
|
||||
import('element-plus/es/components/space/index').then((res) => res.ElSpace),
|
||||
);
|
||||
const ElSwitch = defineAsyncComponent(() =>
|
||||
import('element-plus/es/components/switch/index').then((res) => res.ElSwitch),
|
||||
);
|
||||
|
||||
const ElCascader = defineAsyncComponent(() =>
|
||||
import('element-plus/es/components/cascader/index').then(
|
||||
|
||||
@@ -14,14 +14,19 @@ import {
|
||||
} from '@vben/request';
|
||||
import { useAccessStore } from '@vben/stores';
|
||||
|
||||
import { ElMessage } from 'element-plus/es/components/message/index';
|
||||
|
||||
import { useAuthStore } from '#/store';
|
||||
|
||||
import { refreshTokenApi } from './core';
|
||||
|
||||
const { apiURL } = useAppConfig(import.meta.env, import.meta.env.PROD);
|
||||
|
||||
async function showMessage(type: 'error' | 'warning', message: string) {
|
||||
const { ElMessage } = await import(
|
||||
'element-plus/es/components/message/index'
|
||||
);
|
||||
ElMessage[type](message);
|
||||
}
|
||||
|
||||
/** 解析 API 错误体中的用户可读文案(兼容 FastAPI 字符串 detail 与结构化 detail) */
|
||||
function resolveApiErrorMessage(
|
||||
responseData: Record<string, unknown>,
|
||||
@@ -86,7 +91,7 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) {
|
||||
|
||||
// 只有在有 token 的情况下才显示提示消息(说明是 token 失效)
|
||||
if (hasToken) {
|
||||
ElMessage.warning('登录已失效,请重新登录');
|
||||
await showMessage('warning', '登录已失效,请重新登录');
|
||||
|
||||
if (
|
||||
preferences.app.loginExpiredMode === 'modal' &&
|
||||
@@ -242,7 +247,7 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) {
|
||||
});
|
||||
// 显示错误消息
|
||||
if (errorMessage) {
|
||||
ElMessage.error(errorMessage || msg);
|
||||
void showMessage('error', errorMessage || msg);
|
||||
}
|
||||
}),
|
||||
);
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
import { preferences } from '@vben/preferences';
|
||||
import { useAccessStore } from '@vben/stores';
|
||||
|
||||
import { ElMessage } from 'element-plus/es/components/message/index';
|
||||
|
||||
import { useAuthStore } from '#/store';
|
||||
|
||||
import { refreshTokenApi } from './core';
|
||||
|
||||
async function showErrorMessage(message: string) {
|
||||
const { ElMessage } = await import(
|
||||
'element-plus/es/components/message/index'
|
||||
);
|
||||
ElMessage.error(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* 流式请求配置
|
||||
*/
|
||||
@@ -313,7 +318,7 @@ function doStreamRequest<T = any>(
|
||||
}
|
||||
}
|
||||
|
||||
ElMessage.error(errorMessage);
|
||||
void showErrorMessage(errorMessage);
|
||||
}
|
||||
|
||||
eventHandler.onError?.(error);
|
||||
|
||||
@@ -6,8 +6,6 @@ import type {
|
||||
import { generateAccessible } from '@vben/access';
|
||||
import { preferences } from '@vben/preferences';
|
||||
|
||||
import { ElMessage } from 'element-plus/es/components/message/index';
|
||||
|
||||
import { getAllMenusApi } from '#/api';
|
||||
import { BasicLayout, IFrameView } from '#/layouts';
|
||||
import { $t } from '#/locales';
|
||||
@@ -55,6 +53,9 @@ async function generateAccess(options: GenerateMenuAndRoutesOptions) {
|
||||
return await generateAccessible(preferences.app.accessMode, {
|
||||
...options,
|
||||
fetchMenuListAsync: async () => {
|
||||
const { ElMessage } = await import(
|
||||
'element-plus/es/components/message/index'
|
||||
);
|
||||
ElMessage({
|
||||
duration: 1500,
|
||||
message: `${$t('common.loadingMenu')}...`,
|
||||
|
||||
@@ -7,7 +7,6 @@ import { LOGIN_PATH } from '@vben/constants';
|
||||
import { preferences } from '@vben/preferences';
|
||||
import { resetAllStores, useAccessStore, useUserStore } from '@vben/stores';
|
||||
|
||||
import { ElNotification } from 'element-plus/es/components/notification/index';
|
||||
import { defineStore } from 'pinia';
|
||||
|
||||
import { getAccessCodesApi, getUserInfoApi, loginApi, logoutApi } from '#/api';
|
||||
@@ -70,6 +69,9 @@ export const useAuthStore = defineStore('auth', () => {
|
||||
}
|
||||
|
||||
if (userInfo?.realName) {
|
||||
const { ElNotification } = await import(
|
||||
'element-plus/es/components/notification/index'
|
||||
);
|
||||
ElNotification({
|
||||
message: `${$t('authentication.loginSuccessDesc')}:${userInfo?.realName}`,
|
||||
title: $t('authentication.loginSuccess'),
|
||||
|
||||
Reference in New Issue
Block a user