Files
geo/apps/admin-web/src/main.ts
T

162 lines
2.7 KiB
TypeScript
Raw Normal View History

import { createFromIconfontCN } from '@ant-design/icons-vue'
import { QueryClient, VueQueryPlugin } from '@tanstack/vue-query'
import {
Alert,
App as AntApp,
Avatar,
Badge,
Button,
Card,
Checkbox,
Col,
ConfigProvider,
DatePicker,
Descriptions,
Divider,
Drawer,
Dropdown,
Empty,
Form,
Input,
InputNumber,
Layout,
List,
Menu,
Modal,
2026-04-16 20:40:41 +08:00
Pagination,
Popconfirm,
Popover,
Progress,
Radio,
Result,
Row,
Select,
Skeleton,
Slider,
Space,
Spin,
Statistic,
Steps,
Switch,
Table,
Tabs,
Tag,
TimePicker,
Tooltip,
Tree,
TreeSelect,
Upload,
message,
} from 'ant-design-vue'
import { createApp } from 'vue'
import 'ant-design-vue/dist/reset.css'
import App from './App.vue'
import { i18n } from './i18n'
import { registerChunkReloadHandlers } from './lib/chunk-reload'
import { subscribeAuthExpired, subscribeStoredSession } from './lib/session'
import { router } from './router'
import { pinia } from './stores/pinia'
import './styles.css'
registerChunkReloadHandlers()
const queryClient = new QueryClient({
defaultOptions: {
queries: {
staleTime: 30000,
refetchOnWindowFocus: false,
retry: false,
},
},
})
const app = createApp(App)
let authExpiredNotified = false
message.config({
maxCount: 1,
})
subscribeStoredSession((snapshot) => {
if (snapshot.accessToken) {
authExpiredNotified = false
}
})
subscribeAuthExpired(() => {
const current = router.currentRoute.value
if (current.name === 'login') {
return
}
if (!authExpiredNotified) {
authExpiredNotified = true
message.destroy()
message.warning('登录已过期,请重新登录')
void router.replace({
name: 'login',
query: current.fullPath ? { redirect: current.fullPath } : undefined,
})
}
})
const IconFont = createFromIconfontCN({
// 需要替换为你自己真实项目的 js 地址,才能显示出你的 '#icon-line-global_undo'。
scriptUrl: '//at.alicdn.com/t/c/font_5154382_922oh81rh1.js',
})
app.component('IconFont', IconFont)
app.component('ATextarea', Input.TextArea)
;[
Alert,
AntApp,
Avatar,
Badge,
Button,
Card,
Checkbox,
Col,
ConfigProvider,
DatePicker,
Descriptions,
Divider,
Drawer,
Dropdown,
Empty,
Form,
Input,
InputNumber,
Layout,
List,
Menu,
Modal,
2026-04-16 20:40:41 +08:00
Pagination,
Popconfirm,
Popover,
Progress,
Radio,
Result,
Row,
Select,
Skeleton,
Space,
Spin,
Statistic,
Switch,
Slider,
Steps,
Table,
Tabs,
Tag,
TimePicker,
Tooltip,
Tree,
TreeSelect,
Upload,
].forEach((component) => {
app.use(component)
})
app.use(i18n).use(pinia).use(router).use(VueQueryPlugin, { queryClient }).mount('#app')