Files
schoolNews/schoolNewsWeb/src/main.ts
2025-10-30 17:59:04 +08:00

57 lines
1.5 KiB
TypeScript

import { createApp } from "vue";
import ElementPlus from "element-plus";
import "element-plus/dist/index.css";
import App from "./App.vue";
import "./registerServiceWorker";
import router from "./router";
import store from "./store";
import { setupRouterGuards, setupTokenRefresh } from "@/utils/permission";
import { setupPermissionDirectives } from "@/directives/permission";
// 引入 Quill 富文本编辑器样式(全局)
import "quill/dist/quill.snow.css";
// 引入全局通用样式
import "@/assets/styles/common.scss";
// 初始化应用
async function initApp() {
const app = createApp(App);
// 使用插件
app.use(ElementPlus);
app.use(store);
// 在路由初始化前,尝试恢复登录状态并生成动态路由
const authState = (store.state as any).auth;
if (authState.token && authState.menus && authState.menus.length > 0) {
try {
await store.dispatch('auth/generateRoutes');
} catch (error) {
console.error('[应用初始化] 动态路由生成失败:', error);
}
} else {
console.log('[应用初始化] 无需生成动态路由(未登录或无菜单)');
}
app.use(router);
// 设置权限指令
setupPermissionDirectives(app, store);
// 设置路由守卫
setupRouterGuards(router, store);
// 设置Token自动刷新
setupTokenRefresh(store);
app.mount("#app");
console.log('[应用初始化] 应用挂载完成');
}
// 启动应用
initApp().catch(error => {
console.error('[应用初始化] 应用启动失败:', error);
});