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')