import { defineStore } from 'pinia' import { ref, computed } from 'vue' import { useStorage } from '@vueuse/core' // 导入 Element Plus 中英文语言包 import zhCn from 'element-plus/es/locale/lang/zh-cn' import en from 'element-plus/es/locale/lang/en' import i18n from '@/locales' // 默认语言从环境变量获取 const DEFAULT_LANG = import.meta.env.VITE_APP_LANG || 'zh-cn' export const useAppStore = defineStore('app', () => { // 侧边栏状态 const sidebarOpened = ref(true) const loading = ref(false) // 语言和组件尺寸 const language = useStorage('language', DEFAULT_LANG) const size = ref<'default' | 'small' | 'large'>('default') /** * 根据语言标识读取对应的 Element Plus 语言包 */ const locale = computed(() => { if (language?.value === 'zh-cn') { return zhCn } return en }) function toggleSidebar() { sidebarOpened.value = !sidebarOpened.value } function setLoading(value: boolean) { loading.value = value } /** * 切换语言 */ function changeLanguage(val: string) { language.value = val // 同步更新 vue-i18n 的语言 i18n.global.locale.value = val as 'zh-cn' | 'en' } /** * 设置组件尺寸 */ function setSize(val: 'default' | 'small' | 'large') { size.value = val } return { sidebarOpened, loading, language, locale, size, toggleSidebar, setLoading, changeLanguage, setSize } })