main.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { createApp } from 'vue'
  2. import App from './App.vue'
  3. import { createPinia } from 'pinia'
  4. import naive from '@/assets/native-plugin'
  5. import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'
  6. import Icon from '@/components/icon.vue'
  7. import 'virtual:svg-icons-register'
  8. import piniaPersist from 'pinia-plugin-persist'
  9. const store = createPinia()
  10. store.use(piniaPersist)
  11. // 动态路由
  12. const routes = Object.values(import.meta.glob('./pages/*/route.ts', { eager: true, import: 'default' })) as unknown as RouteRecordRaw[]
  13. routes.push({ path: '/:path(.*)', redirect: '/' })
  14. const app = createApp(App)
  15. const router = createRouter({
  16. history: createWebHashHistory(),
  17. routes
  18. })
  19. app.component('Icon', Icon)
  20. // 路由守卫
  21. // router.beforeEach((to, from, next) => {
  22. // // do something
  23. // next()
  24. // })
  25. app.use(store)
  26. .use(naive)
  27. .use(router)
  28. router.isReady().then(() => {
  29. const vm = app.mount('#app')
  30. app.config.errorHandler = (err: any) => {
  31. if (err.reason === 401) {
  32. router.replace('/')
  33. } else {
  34. console.log('错误', err)
  35. }
  36. }
  37. window.addEventListener('unhandledrejection', (evt) => {
  38. console.error(evt)
  39. evt.preventDefault()
  40. app.config.errorHandler?.(evt, vm, '')
  41. })
  42. window.addEventListener('error', (evt) => {
  43. console.error(evt)
  44. evt.preventDefault()
  45. app.config.errorHandler?.(evt.error, vm, '')
  46. })
  47. })