Files
schoolNews/schoolNewsWeb/src/main.ts

54 lines
1.4 KiB
TypeScript
Raw Normal View History

2025-09-25 14:58:50 +08:00
import { createApp } from "vue";
2025-09-28 14:19:57 +08:00
import ElementPlus from "element-plus";
import "element-plus/dist/index.css";
2025-09-25 14:58:50 +08:00
import App from "./App.vue";
import "./registerServiceWorker";
import router from "./router";
import store from "./store";
2025-10-07 13:31:06 +08:00
import { setupRouterGuards, setupTokenRefresh } from "@/utils/permission";
import { setupPermissionDirectives } from "@/directives/permission";
2025-09-25 14:58:50 +08:00
2025-10-18 18:19:19 +08:00
// 引入 Quill 富文本编辑器样式(全局)
import "quill/dist/quill.snow.css";
2025-10-08 14:11:54 +08:00
// 初始化应用
async function initApp() {
const app = createApp(App);
2025-10-07 13:31:06 +08:00
2025-10-08 14:11:54 +08:00
// 使用插件
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);
2025-09-25 14:58:50 +08:00
2025-10-08 14:11:54 +08:00
// 设置权限指令
setupPermissionDirectives(app, store);
2025-10-07 13:31:06 +08:00
2025-10-08 14:11:54 +08:00
// 设置路由守卫
setupRouterGuards(router, store);
2025-10-07 13:31:06 +08:00
2025-10-08 14:11:54 +08:00
// 设置Token自动刷新
setupTokenRefresh(store);
2025-10-07 13:31:06 +08:00
2025-10-08 14:11:54 +08:00
app.mount("#app");
console.log('[应用初始化] 应用挂载完成');
}
// 启动应用
initApp().catch(error => {
console.error('[应用初始化] 应用启动失败:', error);
});