aslan-h5/src/main.js

110 lines
3.0 KiB
JavaScript
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.

// src/main.js
import './assets/main.css'
import './styles/fonts.css'
import './styles/global.css' // 引入全局样式
import { logEnvInfo } from './utils/env.js'
import { versionChecker } from './utils/versionChecker.js'
import { smartImage } from './directives/smartImage.js'
import { createPinia } from 'pinia'
import { createApp } from 'vue'
import { useLangStore } from '@/stores/lang'
import i18n, { initI18n, setLocale } from './locales/i18n'
import App from './App.vue'
import router from './router'
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
// 初始化环境信息
logEnvInfo()
// 检查版本更新(首先判断执行一次对缓存的操作,最后返回检测结果)
if (await versionChecker.checkVersion()) {
console.log('版本已更新')
}
// 初始化权限系统
console.debug('🔐 Permission system initialized')
const pinia = createPinia()
pinia.use(piniaPluginPersistedstate) //将插件添加到 pinia 实例上
const app = createApp(App)
// 注册智能图片指令
app.directive('smart-img', smartImage)
app.use(router)
app.use(pinia)
// 然后初始化 i18n此时 Pinia 已可用)
// 获取 langStore 并传递给 initI18n
const langStore = useLangStore() // 直接使用 import 的函数
//排行榜
const RankingPage = []
// 活动页面
const ACTIVITIES = [
'/recharge-reward', //充值奖励页面
]
// 固定语言(布局)的页面
const enPages = [...RankingPage, ...ACTIVITIES]
const arPages = []
// 获取当前页面路径
const hashPath = window.location.hash.replace('#', '')
const currentPage = hashPath.split('?')[0] // 提取纯路径部分,去除查询参数
// 检测URL参数并设置语言
const queryParams = hashPath.split('?')[1]
const urlParams = queryParams ? new URLSearchParams(queryParams) : new URLSearchParams()
const langParam = urlParams.get('lang')
let finalLang = null // 最终使用的语言
if (langParam) {
if (langParam === 'en') {
finalLang = 'en'
} else if (langParam.startsWith('ar')) {
finalLang = 'ar'
}
}
// 检查当前页面是否在固定英语的页面列表中
if (enPages.includes(currentPage)) {
// 强制设置为英语不受URL参数影响
setLocale(langStore, 'en')
}
// 检查当前页面是否在固定阿拉伯语的页面列表中
else if (arPages.includes(currentPage)) {
// 强制设置为阿拉伯语不受URL参数影响
setLocale(langStore, 'ar')
}
// 对于其他页面如果有URL参数则按参数设置语言
else if (finalLang) {
console.log('langParam', langParam)
console.log('finalLang', finalLang)
setLocale(langStore, finalLang)
}
initI18n(langStore)
// 最后使用 i18n
app.use(i18n)
app.mount('#app')
// 定时检查是否更新
if (versionChecker.enableCheck) {
setInterval(
async () => {
const versionResult = await versionChecker.checkServerVersion()
if (versionResult.shouldUpdate) {
// 自动处理更新,不需要用户交互
await versionChecker.handleVersionUpdate(versionResult.versionType)
}
},
5 * 60 * 1000,
)
}