12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- 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";
- import { store } from "@/store";
- import { DeviceEnum } from "@/enums/DeviceEnum";
- import { SidebarStatusEnum } from "@/enums/SidebarStatusEnum";
- // setup
- export const useAppStore = defineStore("app", () => {
- // state
- const device = useStorage("device", DeviceEnum.DESKTOP);
- const size = useStorage("size", defaultSettings.size);
- const language = useStorage("language", defaultSettings.language);
- const sidebarStatus = useStorage("sidebarStatus", SidebarStatusEnum.CLOSED);
- const sidebar = reactive({
- opened: sidebarStatus.value === SidebarStatusEnum.OPENED,
- withoutAnimation: false,
- });
- const activeTopMenuPath = useStorage("activeTopMenuPath", "");
- /**
- * 根据语言标识读取对应的语言包
- */
- const locale = computed(() => {
- if (language?.value == "en") {
- return en;
- } else {
- return zhCn;
- }
- });
- // actions
- function toggleSidebar() {
- sidebar.opened = !sidebar.opened;
- sidebarStatus.value = sidebar.opened
- ? SidebarStatusEnum.OPENED
- : SidebarStatusEnum.CLOSED;
- }
- function closeSideBar() {
- sidebar.opened = false;
- sidebarStatus.value = SidebarStatusEnum.CLOSED;
- }
- function openSideBar() {
- sidebar.opened = true;
- sidebarStatus.value = SidebarStatusEnum.OPENED;
- }
- function toggleDevice(val: string) {
- device.value = val;
- }
- function changeSize(val: string) {
- size.value = val;
- }
- /**
- * 切换语言
- *
- * @param val
- */
- function changeLanguage(val: string) {
- language.value = val;
- }
- /**
- * 混合模式顶部切换
- */
- function activeTopMenu(val: string) {
- activeTopMenuPath.value = val;
- }
- return {
- device,
- sidebar,
- language,
- locale,
- size,
- activeTopMenu,
- toggleDevice,
- changeSize,
- changeLanguage,
- toggleSidebar,
- closeSideBar,
- openSideBar,
- activeTopMenuPath,
- };
- });
- // 手动提供给 useStore() 函数 pinia 实例
- // https://pinia.vuejs.org/zh/core-concepts/outside-component-usage.html#using-a-store-outside-of-a-component
- export function useAppStoreHook() {
- return useAppStore(store);
- }
|