front/src/main.ts
zzh b9702cd0bc
All checks were successful
Build and Deploy Front / deploy (push) Successful in 5m47s
fix: 订单详情编辑体验、接口参数与价格表批量填价
优化运单详情抽屉操作栏与申报表编辑观感,限制我的订单入库后不可编辑;完善接口参数全量替换/脏检查与全局 Message;修复价格表批量填价选中被清与弹窗被遮挡。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-10 16:27:22 +08:00

162 lines
4.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { createApp } from 'vue';
import ArcoVue from '@arco-design/web-vue';
import ArcoVueIcon from '@arco-design/web-vue/es/icon';
// eslint-disable-next-line import/no-unresolved
import 'uno.css';
import { installGlobalMessageDefaults } from '@/utils/message';
import router from './router';
import store, { useAppStore } from './store';
import i18n, { initPreferredLocale, ensureFullLocaleMessages } from './locale';
import directive from './directive';
import globalProperties from './plugins/globalProperties';
// 全局 Message:可手动关闭;错误/警告默认 8s
installGlobalMessageDefaults();
import {
bindHeavyPluginsContext,
ensureHeavyPlugins,
} from './plugins/heavy-plugins';
import { initAuthKeepAlive } from '@/utils/auth-keepalive';
import { installWeChatH5HistoryGuard } from '@/utils/device';
import { installChunkReloadHandlers, reloadOnChunkLoadError } from '@/utils/chunkReload';
import { setAuthToken } from './api/rbac';
import { useRbacUserStore } from '@/store/modules/rbac-user';
import { applyRbacUserToUserStore } from '@/utils/enter-system';
import App from './App.vue';
import '@/assets/style/global.less';
import '@/styles/list-action.less';
import '@/styles/app-button.less';
import '@/styles/dark-mode.less';
if (import.meta.env.DEV) {
void import('./mock');
}
/** Login / public pages: no VXE/HT on critical path */
const LIGHT_ENTRY_PATHS = [
'/',
'/admin',
'/login',
'/register',
'/track/query',
'/wechat/register',
'/wechat/bind',
'/h5',
];
/** Home uses Arco (+ optional echarts); do not block on VXE/HT */
function isHomePath(path: string) {
return path === '/home' || path.startsWith('/home/');
}
/** H5/微信/查件:纯 Arco,后台预热 VXE/HT 会注入全局 CSS 造成登录页闪乱 */
function isH5LikePath(path: string) {
const normalized = path.split('?')[0] || '/';
return (
normalized === '/h5' ||
normalized.startsWith('/h5/') ||
normalized.startsWith('/wechat/') ||
normalized === '/track/query'
);
}
function isLightEntry(path: string) {
const normalized = path.split('?')[0] || '/';
return LIGHT_ENTRY_PATHS.some(
(p) => normalized === p || normalized.startsWith(`${p}/`),
);
}
function routeNeedsHeavyPlugins(path: string) {
const normalized = path.split('?')[0] || '/';
if (isLightEntry(normalized) || isHomePath(normalized) || isH5LikePath(normalized)) {
return false;
}
return true;
}
const app = createApp(App);
app.use(ArcoVue, {});
app.use(ArcoVueIcon);
app.use(router);
installChunkReloadHandlers();
router.onError((error) => {
if (reloadOnChunkLoadError(error)) return;
throw error;
});
app.use(store);
useAppStore().hydrateTheme();
app.use(i18n);
app.use(directive);
app.use(globalProperties);
bindHeavyPluginsContext(app, i18n);
const rbacAccessToken =
localStorage.getItem('rbac_access_token') ||
localStorage.getItem('rbac_token');
if (rbacAccessToken) {
setAuthToken(rbacAccessToken);
}
router.beforeEach(async (to) => {
if (!isLightEntry(to.path)) {
void ensureFullLocaleMessages();
}
if (routeNeedsHeavyPlugins(to.path)) {
await ensureHeavyPlugins();
}
});
async function bootstrap() {
const entryPath =
typeof window !== 'undefined' ? window.location.pathname : '/';
const light = isLightEntry(entryPath);
const rbacUserStore = useRbacUserStore();
// F5:本地身份先灌进 userStore;缺 menus 时与 i18n 并行预取
if (rbacUserStore.isLoggedIn && rbacUserStore.userInfo?.id) {
applyRbacUserToUserStore(rbacUserStore.userInfo);
}
if (!light) {
rbacUserStore.prefetchCurrentUser();
}
await initPreferredLocale();
// Business / home refresh: need full i18n before paint
if (!light) {
await ensureFullLocaleMessages();
}
if (routeNeedsHeavyPlugins(entryPath)) {
await ensureHeavyPlugins();
}
app.mount('#app');
;(window as any).__APP_MOUNTED__ = true;
installWeChatH5HistoryGuard(router);
initAuthKeepAlive();
// 登录页勿预热 VXE/Element:体积大且会注入全局 CSS,和首屏抢带宽
if (isHomePath(entryPath) && !isH5LikePath(entryPath) && !light) {
void ensureHeavyPlugins();
}
// 等路由就绪 + 浏览器完成首帧绘制后再淡出 boot,避免 mount 瞬间替换抖动
try {
await router.isReady();
} catch {
/* ignore */
}
await new Promise<void>((resolve) => {
requestAnimationFrame(() => {
requestAnimationFrame(() => resolve());
});
});
;(window as any).__dismissAppBoot?.();
}
void bootstrap();