main.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { createApp } from 'vue'
  2. import App from './App.vue'
  3. import { createPinia } from 'pinia'
  4. import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'
  5. import piniaPersist from 'pinia-plugin-persist'
  6. import VueAMap, { initAMapApiLoader } from '@vuemap/vue-amap'
  7. import '@vuemap/vue-amap/dist/style.css'
  8. import Icon from '@/components/icon.vue'
  9. import 'virtual:svg-icons-register'
  10. import naive from '@/assets/native-plugin'
  11. initAMapApiLoader({
  12. key: '0c5c83112cafefa77154769b4433c3df',
  13. securityJsCode: '184c86be3bbd9a8a941bcaaf6b09c7cd' // 新版key需要配合安全密钥使用
  14. })
  15. const store = createPinia()
  16. store.use(piniaPersist)
  17. // 动态路由
  18. const routes = Object.values(import.meta.glob('./views/*/route.ts', { eager: true, import: 'default' })) as unknown as RouteRecordRaw[]
  19. routes.push({ path: '/:path(.*)', redirect: '/' })
  20. const app = createApp(App)
  21. const router = createRouter({
  22. history: createWebHashHistory(),
  23. routes
  24. })
  25. // 路由守卫
  26. // router.beforeEach((to, from, next) => {
  27. // // do something
  28. // next()
  29. // })
  30. app.use(store)
  31. .use(router)
  32. .use(VueAMap)
  33. .use(naive)
  34. .component('Icon', Icon)
  35. router.isReady().then(() => {
  36. const vm = app.mount('#app')
  37. app.config.errorHandler = (err: any) => {
  38. if (err.reason === 401) {
  39. router.replace('/')
  40. } else {
  41. console.log('提升', err)
  42. }
  43. }
  44. window.addEventListener('unhandledrejection', (evt) => {
  45. console.error(evt)
  46. evt.preventDefault()
  47. app.config.errorHandler?.(evt, vm, '')
  48. })
  49. window.addEventListener('error', (evt) => {
  50. console.error(evt)
  51. evt.preventDefault()
  52. app.config.errorHandler?.(evt.error, vm, '')
  53. })
  54. })