main.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { autoAnimatePlugin } from '@formkit/auto-animate/vue'
  2. import { createCosyProConfig } from '@uozi-admin/curd'
  3. import { createRequestConfig } from '@uozi-admin/request'
  4. import { createPinia } from 'pinia'
  5. import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
  6. import { createApp } from 'vue'
  7. import VueDOMPurifyHTML from 'vue-dompurify-html'
  8. import { setupInterceptors } from '@/lib/http/interceptors'
  9. import { initPWAThemeColor, watchThemeChanges } from '@/lib/pwa'
  10. import { useSettingsStore } from '@/pinia'
  11. import i18n from '../i18n.json'
  12. import App from './App.vue'
  13. import gettext from './gettext'
  14. import router from './routes'
  15. import '@uozi-admin/curd/dist/index.css'
  16. import 'virtual:uno.css'
  17. const pinia = createPinia()
  18. const app = createApp(App)
  19. function setupTranslations() {
  20. return Object.keys(i18n).reduce((acc, cur) => {
  21. acc[cur] = gettext.translations[cur]
  22. return acc
  23. }, {})
  24. }
  25. createRequestConfig({
  26. baseURL: './api',
  27. })
  28. pinia.use(piniaPluginPersistedstate)
  29. app.use(pinia)
  30. .use(gettext)
  31. .use(VueDOMPurifyHTML, {
  32. hooks: {
  33. uponSanitizeElement: (node, data) => {
  34. if (node.tagName && node.tagName.toLowerCase() === 'think') {
  35. data.allowedTags.think = true
  36. }
  37. },
  38. },
  39. })
  40. .use(setupInterceptors)
  41. .use(createCosyProConfig({
  42. i18n: {
  43. legacy: false,
  44. locale: 'zh-CN',
  45. fallbackLocale: 'en-US',
  46. messages: setupTranslations(),
  47. },
  48. time: {
  49. timestamp: false,
  50. },
  51. selector: {
  52. omitZeroString: true,
  53. },
  54. }))
  55. // after pinia created
  56. const settings = useSettingsStore()
  57. gettext.current = settings.language || 'en'
  58. app.use(router).use(autoAnimatePlugin).mount('#app')
  59. // Initialize PWA theme color functionality after app is mounted
  60. nextTick(() => {
  61. initPWAThemeColor()
  62. watchThemeChanges()
  63. })
  64. export default app