YimoEx
init
bb9df9e
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);
}