import { defineStore } from 'pinia'; import { useStorage } from '@vueuse/core'; import defaultSettings from '@/settings'; // 导入 Element Plus 中英文语言包 import zhCn from 'element-plus/es/locale/lang/zh-cn'; import en from 'element-plus/es/locale/lang/en'; // setup export const useAppStore = defineStore('app', () => { // state const device = useStorage('device', 'desktop'); const size = useStorage('size', defaultSettings.size); const language = useStorage('language', defaultSettings.language); const sidebarStatus = useStorage('sidebarStatus', 'closed'); const sidebar = reactive({ opened: sidebarStatus.value !== 'closed', withoutAnimation: false }); /** * 根据语言标识读取对应的语言包 */ const locale = computed(() => { if (language?.value == 'en') { return en; } else { return zhCn; } }); // actions function toggleSidebar(withoutAnimation: boolean) { sidebar.opened = !sidebar.opened; sidebar.withoutAnimation = withoutAnimation; if (sidebar.opened) { sidebarStatus.value = 'opened'; } else { sidebarStatus.value = 'closed'; } } function closeSideBar(withoutAnimation: boolean) { sidebar.opened = false; sidebar.withoutAnimation = withoutAnimation; sidebarStatus.value = 'closed'; } function openSideBar(withoutAnimation: boolean) { sidebar.opened = true; sidebar.withoutAnimation = withoutAnimation; sidebarStatus.value = 'opened'; } function toggleDevice(val: string) { device.value = val; } function changeSize(val: string) { size.value = val; } /** * 切换语言 * * @param val */ function changeLanguage(val: string) { language.value = val; } return { device, sidebar, language, locale, size, toggleDevice, changeSize, changeLanguage, toggleSidebar, closeSideBar, openSideBar }; });