mirror of
https://github.com/pure-admin/pure-admin-thin.git
synced 2025-04-25 07:57:18 +08:00
90 lines
2.5 KiB
TypeScript
90 lines
2.5 KiB
TypeScript
import { defineStore } from "pinia";
|
|
import {
|
|
type appType,
|
|
store,
|
|
getConfig,
|
|
storageLocal,
|
|
deviceDetection,
|
|
responsiveStorageNameSpace
|
|
} from "../utils";
|
|
|
|
export const useAppStore = defineStore({
|
|
id: "pure-app",
|
|
state: (): appType => ({
|
|
sidebar: {
|
|
opened:
|
|
storageLocal().getItem<StorageConfigs>(
|
|
`${responsiveStorageNameSpace()}layout`
|
|
)?.sidebarStatus ?? getConfig().SidebarStatus,
|
|
withoutAnimation: false,
|
|
isClickCollapse: false
|
|
},
|
|
// 这里的layout用于监听容器拖拉后恢复对应的导航模式
|
|
layout:
|
|
storageLocal().getItem<StorageConfigs>(
|
|
`${responsiveStorageNameSpace()}layout`
|
|
)?.layout ?? getConfig().Layout,
|
|
device: deviceDetection() ? "mobile" : "desktop",
|
|
// 浏览器窗口的可视区域大小
|
|
viewportSize: {
|
|
width: document.documentElement.clientWidth,
|
|
height: document.documentElement.clientHeight
|
|
}
|
|
}),
|
|
getters: {
|
|
getSidebarStatus(state) {
|
|
return state.sidebar.opened;
|
|
},
|
|
getDevice(state) {
|
|
return state.device;
|
|
},
|
|
getViewportWidth(state) {
|
|
return state.viewportSize.width;
|
|
},
|
|
getViewportHeight(state) {
|
|
return state.viewportSize.height;
|
|
}
|
|
},
|
|
actions: {
|
|
TOGGLE_SIDEBAR(opened?: boolean, resize?: string) {
|
|
const layout = storageLocal().getItem<StorageConfigs>(
|
|
`${responsiveStorageNameSpace()}layout`
|
|
);
|
|
if (opened && resize) {
|
|
this.sidebar.withoutAnimation = true;
|
|
this.sidebar.opened = true;
|
|
layout.sidebarStatus = true;
|
|
} else if (!opened && resize) {
|
|
this.sidebar.withoutAnimation = true;
|
|
this.sidebar.opened = false;
|
|
layout.sidebarStatus = false;
|
|
} else if (!opened && !resize) {
|
|
this.sidebar.withoutAnimation = false;
|
|
this.sidebar.opened = !this.sidebar.opened;
|
|
this.sidebar.isClickCollapse = !this.sidebar.opened;
|
|
layout.sidebarStatus = this.sidebar.opened;
|
|
}
|
|
storageLocal().setItem(`${responsiveStorageNameSpace()}layout`, layout);
|
|
},
|
|
async toggleSideBar(opened?: boolean, resize?: string) {
|
|
await this.TOGGLE_SIDEBAR(opened, resize);
|
|
},
|
|
toggleDevice(device: string) {
|
|
this.device = device;
|
|
},
|
|
setLayout(layout) {
|
|
this.layout = layout;
|
|
},
|
|
setViewportSize(size) {
|
|
this.viewportSize = size;
|
|
},
|
|
setSortSwap(val) {
|
|
this.sortSwap = val;
|
|
}
|
|
}
|
|
});
|
|
|
|
export function useAppStoreHook() {
|
|
return useAppStore(store);
|
|
}
|