Files
admin-web/src/main.ts
T
2026-08-05 15:54:59 +08:00

45 lines
1.5 KiB
TypeScript

import { createApp } from 'vue'
import { createPinia } from 'pinia'
import { ElMessage } from 'element-plus'
import 'element-plus/es/components/message/style/css'
import 'element-plus/es/components/message-box/style/css'
import App from './App.vue'
import router from '@/app/router'
import { sanitizeInternalPath } from '@/core/routing/accessDecision'
import { useAccessPreviewStore } from '@/core/access/accessPreview'
import { useUnsavedWorkStore } from '@/core/unsaved-work/unsavedWork'
import { useWorkspaceTabsStore } from '@/core/workspace-tabs/workspaceTabs'
import { useAuthStore } from '@/core/auth/auth'
import { registerAuthSessionExpiredHandler } from '@/shared/api/http'
import './styles/index.css'
const pinia = createPinia()
const auth = useAuthStore(pinia)
const unsaved = useUnsavedWorkStore(pinia)
const workspace = useWorkspaceTabsStore(pinia)
await auth.restoreSession()
registerAuthSessionExpiredHandler(async () => {
const currentRoute = router.currentRoute.value
if (currentRoute.name === 'login') return
useAccessPreviewStore(pinia).reset()
unsaved.clear()
workspace.reset(true)
const redirect = sanitizeInternalPath(currentRoute.fullPath)
ElMessage.warning('登录状态已过期,请重新登录')
await router.replace({
name: 'login',
query: redirect === '/' ? undefined : { redirect },
})
})
window.addEventListener('beforeunload', (event) => {
if (!unsaved.entries.some((entry) => entry.dirty)) return
event.preventDefault()
event.returnValue = ''
})
createApp(App).use(pinia).use(router).mount('#app')