55 lines
1.9 KiB
TypeScript
55 lines
1.9 KiB
TypeScript
// pinia
|
||
import { createPinia } from 'pinia'
|
||
// pinia持久化
|
||
import piniaPluginPersist from 'pinia-plugin-persist'
|
||
import * as THREE from 'three'
|
||
import { createApp } from 'vue'
|
||
import VueDOMPurifyHTML from 'vue-dompurify-html'
|
||
import svgIcon from '@/components/SvgIcon/index.vue'
|
||
import i18n from '@/locales/i18n'
|
||
// svg全局组件// 路由
|
||
import router from '@/router'
|
||
import App from './App.vue'
|
||
import './style.css'
|
||
import './style/markdown.css'
|
||
import './style/style.scss'
|
||
// 全局svg组件
|
||
import 'virtual:svg-icons-register'
|
||
|
||
// 在应用初始化时尽早设置主题和字体,避免页面加载时的闪烁
|
||
(function initializeThemeAndFont() {
|
||
try {
|
||
// 从localStorage获取全局配置
|
||
const globalConfigStr = localStorage.getItem('globalConfig')
|
||
|
||
if (globalConfigStr) {
|
||
const storageData = JSON.parse(globalConfigStr)
|
||
// 根据persist策略,数据存储在globalConfig属性下
|
||
const globalConfig = storageData.globalConfig || storageData
|
||
|
||
// 设置主题
|
||
if (globalConfig.theme?.name) {
|
||
const html = document.documentElement
|
||
html.setAttribute('data-theme', globalConfig.theme.name)
|
||
}
|
||
|
||
// 设置字体
|
||
if (globalConfig.theme?.font) {
|
||
// 更新CSS变量
|
||
document.documentElement.style.setProperty('--app-font-family', `"${globalConfig.theme.font}", -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif`)
|
||
}
|
||
}
|
||
}
|
||
catch (e) {
|
||
console.warn('Failed to set initial theme and font:', e)
|
||
}
|
||
})()
|
||
|
||
const app = createApp(App)
|
||
const pinia = createPinia()
|
||
pinia.use(piniaPluginPersist)
|
||
|
||
app.config.globalProperties.$THREE = THREE // 挂载到原型
|
||
app.component('svg-icon', svgIcon)
|
||
app.use(router).use(VueDOMPurifyHTML).use(pinia).use(i18n).mount('#app')
|