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

117 lines
1.8 KiB
TypeScript
Raw Normal View History

import { QueryClient, VueQueryPlugin } from '@tanstack/vue-query'
import {
Alert,
App as AntApp,
Avatar,
Badge,
Button,
Card,
Checkbox,
ConfigProvider,
DatePicker,
Descriptions,
Drawer,
Dropdown,
Empty,
Form,
Input,
InputNumber,
Layout,
Menu,
Modal,
Pagination,
Popconfirm,
Radio,
Result,
2026-05-25 19:23:49 +08:00
Segmented,
Select,
Skeleton,
Space,
Spin,
Statistic,
Switch,
Table,
Tabs,
Tag,
Tooltip,
2026-05-25 19:23:49 +08:00
Upload,
message,
} from 'ant-design-vue'
import { createApp } from 'vue'
import { registerChunkReloadHandlers } from '@/lib/chunk-reload'
import { bindUnauthorizedHandler } from '@/lib/http'
import { router } from '@/router'
import { useAuthStore } from '@/stores/auth'
import { pinia } from '@/stores/pinia'
import 'ant-design-vue/dist/reset.css'
import App from './App.vue'
import './styles.css'
registerChunkReloadHandlers()
const queryClient = new QueryClient({
defaultOptions: {
queries: {
staleTime: 30000,
refetchOnWindowFocus: false,
retry: false,
},
},
})
const app = createApp(App)
message.config({
maxCount: 1,
})
bindUnauthorizedHandler(() => {
const auth = useAuthStore(pinia)
auth.logout()
void router.replace({ name: 'login' })
message.destroy()
message.warning('登录已过期,请重新登录')
})
;[
Alert,
AntApp,
Avatar,
Badge,
Button,
Card,
Checkbox,
ConfigProvider,
DatePicker,
Descriptions,
Drawer,
Dropdown,
Empty,
Form,
Input,
InputNumber,
Layout,
Menu,
Modal,
Pagination,
Popconfirm,
Radio,
Result,
Select,
2026-05-25 19:23:49 +08:00
Segmented,
Skeleton,
Space,
Spin,
Statistic,
Switch,
Table,
Tabs,
Tag,
Tooltip,
2026-05-25 19:23:49 +08:00
Upload,
].forEach((component) => {
app.use(component)
})
app.use(pinia).use(router).use(VueQueryPlugin, { queryClient }).mount('#app')