- 移除 config.tenantCode 死配置,注册页加租户输入 - 全局 errorHandler + unhandledrejection 兜底错误提示 - selectTenant 二次登录加 loading - 路由守卫支持 meta.freeAccess 白名单 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
50 lines
1.6 KiB
TypeScript
50 lines
1.6 KiB
TypeScript
import { createApp } from 'vue'
|
||
import { ElMessage } from 'element-plus'
|
||
import 'element-plus/theme-chalk/dark/css-vars.css'
|
||
|
||
import App from './App.vue'
|
||
import router, { installRouter } from './router'
|
||
import pinia, { installStore } from '@/stores'
|
||
import { installAssets } from '@/plugins/assets'
|
||
import { installI18n } from '@/i18n'
|
||
import { setAuthExpiredHandler } from '@/api/http'
|
||
import { useAuthStore } from '@/stores/modules/auth'
|
||
import { useMenuStore } from '@/stores/modules/menu'
|
||
import { useDictStore } from '@/stores/modules/dict'
|
||
import { usePermissionStore } from '@/stores/modules/permission'
|
||
import { useTabsStore } from '@/stores/modules/tabs'
|
||
import { vPermission } from '@/directives/permission'
|
||
|
||
const app = createApp(App)
|
||
|
||
app.directive('permission', vPermission)
|
||
|
||
installRouter(app)
|
||
installStore(app)
|
||
|
||
// 会话过期(401 刷新失败)时:清状态 + 跳登录
|
||
setAuthExpiredHandler(() => {
|
||
useAuthStore(pinia).reset()
|
||
useMenuStore(pinia).reset()
|
||
useDictStore(pinia).reset()
|
||
usePermissionStore(pinia).reset()
|
||
useTabsStore(pinia).removeAll()
|
||
if (router.currentRoute.value.path !== '/login') {
|
||
router.push('/login')
|
||
}
|
||
})
|
||
|
||
installI18n(app)
|
||
installAssets()
|
||
|
||
// 全局兜底:未捕获的组件错误 / Promise 拒绝,统一弹出错误提示(避免静默失败)
|
||
app.config.errorHandler = (err) => {
|
||
ElMessage.error(err instanceof Error ? err.message : String(err))
|
||
}
|
||
window.addEventListener('unhandledrejection', (e) => {
|
||
const reason = e.reason
|
||
ElMessage.error(reason instanceof Error ? reason.message : String(reason))
|
||
})
|
||
|
||
app.mount('#app')
|