Files
chart-view/src/main.ts
2025-12-27 12:57:38 +08:00

113 lines
3.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { createApp } from 'vue'
import App from './App.vue'
import router, { setupRouter } from '@/router'
import i18n from '@/i18n/index'
import { setupStore } from '@/store'
import { setupNaive, setupDirectives, setupCustomComponents, initFunction } from '@/plugins'
import { GoAppProvider } from '@/components/GoAppProvider/index'
import { setHtmlTheme, getUrlQueryParams } from '@/utils'
import { useSystemStore } from '@/store/modules/systemStore/systemStore'
import { SystemStoreUserInfoEnum, SystemStoreEnum } from '@/store/modules/systemStore/systemStore.d'
import { useDesignStore } from '@/store/modules/designStore/designStore'
import { ThemeEnum } from '@/enums/styleEnum'
import { addCollection } from 'iconify-icon'
import uimIcons from '@iconify/json/json/uim.json'
import lineMdIcons from '@iconify/json/json/line-md.json'
import wiIcons from '@iconify/json/json/wi.json'
// 引入全局样式
import '@/styles/pages/index.scss'
// 引入动画
import 'animate.css/animate.min.css'
// 引入标尺
import 'vue3-sketch-ruler/lib/style.css'
// 注册图标
addCollection(uimIcons)
addCollection(lineMdIcons)
addCollection(wiIcons)
async function appInit() {
const goAppProvider = createApp(GoAppProvider)
const app = createApp(App)
// 注册全局常用的 naive-ui 组件
setupNaive(app)
// 注册全局自定义指令
setupDirectives(app)
// 注册全局自定义组件
setupCustomComponents(app)
// 挂载状态管理
setupStore(app)
// iframe 嵌入模式:从 URL 参数中提取 token 并自动登录
const urlParams = getUrlQueryParams()
const systemStore = useSystemStore()
if (urlParams.token) {
// URL 中有 token保存到本地
systemStore.setItem(SystemStoreEnum.USER_INFO, {
[SystemStoreUserInfoEnum.USER_TOKEN]: urlParams.token,
[SystemStoreUserInfoEnum.TOKEN_NAME]: 'token',
[SystemStoreUserInfoEnum.USER_ID]: 'iframe-user',
[SystemStoreUserInfoEnum.USER_NAME]: 'iframe-user',
[SystemStoreUserInfoEnum.NICK_NAME]: 'iframe-user',
})
console.log('[GoView] iframe 模式:已从 URL 参数中获取 token 并保存到本地')
} else {
// URL 中没有 token从本地读取
const localToken = systemStore.getUserInfo?.[SystemStoreUserInfoEnum.USER_TOKEN]
if (localToken) {
console.log('[GoView] iframe 模式:已从本地存储读取 token')
} else {
console.warn('[GoView] iframe 模式URL 和本地都没有 token')
}
}
// iframe 嵌入模式:从 URL 参数中提取 mode 并设置主题
const designStore = useDesignStore()
if (urlParams.mode) {
// URL 中有 mode设置主题并保存到本地
const isDark = urlParams.mode === 'dark'
const themeName = isDark ? ThemeEnum.DARK : ThemeEnum.LIGHT
if (designStore.themeName !== themeName) {
designStore.setTheme(isDark)
console.log(`[GoView] iframe 模式:已设置主题为 ${urlParams.mode} 并存储到本地`)
}
} else {
// URL 中没有 mode使用本地已保存的主题
console.log(`[GoView] iframe 模式:使用本地主题 ${designStore.themeName}`)
}
// 解决路由守卫Axios中可使用DialogMessage 等全局组件
goAppProvider.mount('#appProvider', true)
// 挂载路由
setupRouter(app)
// 路由准备就绪后挂载APP实例
await router.isReady()
// Store 准备就绪后处理主题色
setHtmlTheme()
// 语言注册
app.use(i18n)
// 挂载到页面
app.mount('#app', true)
// 挂载到 window
window['$vue'] = app
}
appInit().then(() => {
initFunction()
})