main.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. import VueAMap, { initAMapApiLoader } from '@vuemap/vue-amap'
  10. import '@vuemap/vue-amap/dist/style.css'
  11. initAMapApiLoader({
  12. key: 'YOUR_KEY',
  13. securityJsCode: 'securityJsCode' // 新版key需要配合安全密钥使用
  14. // Loca:{
  15. // version: '2.0.0'
  16. // } // 如果需要使用loca组件库,需要加载Loca
  17. })
  18. const store = createPinia()
  19. store.use(piniaPersist)
  20. // 动态路由
  21. const routes = Object.values(import.meta.glob('./views/*/route.ts', { eager: true, import: 'default' })) as unknown as RouteRecordRaw[]
  22. routes.push({ path: '/:path(.*)', redirect: '/' })
  23. const app = createApp(App)
  24. const router = createRouter({
  25. history: createWebHashHistory(),
  26. routes
  27. })
  28. app.component('Icon', Icon)
  29. // 路由守卫
  30. // router.beforeEach((to, from, next) => {
  31. // // do something
  32. // next()
  33. // })
  34. app.use(store)
  35. .use(naive)
  36. .use(router)
  37. .use(VueAMap)
  38. router.isReady().then(() => {
  39. const vm = app.mount('#app')
  40. app.config.errorHandler = (err: any) => {
  41. if (err.reason === 401) {
  42. router.replace('/')
  43. } else {
  44. console.log('提升', err)
  45. }
  46. }
  47. window.addEventListener('unhandledrejection', (evt) => {
  48. console.error(evt)
  49. evt.preventDefault()
  50. app.config.errorHandler?.(evt, vm, '')
  51. })
  52. window.addEventListener('error', (evt) => {
  53. console.error(evt)
  54. evt.preventDefault()
  55. app.config.errorHandler?.(evt.error, vm, '')
  56. })
  57. })