// 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 = [ '/top-list', //排行榜 '/weekly-star', //每周明星 ] // 活动页面 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) }