import { defineStore } from "pinia"; import { type appType, store, getConfig, storageLocal, deviceDetection, responsiveStorageNameSpace } from "../utils"; export const useAppStore = defineStore("pure-app", { state: (): appType => ({ sidebar: { opened: true, withoutAnimation: false, isClickCollapse: false }, // 这里的layout用于监听容器拖拉后恢复对应的菜单布局 layout: storageLocal().getItem( `${responsiveStorageNameSpace()}layout` )?.layout ?? getConfig().Layout, device: deviceDetection() ? "mobile" : "desktop", // 浏览器窗口的可视区域大小 viewportSize: { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight }, // 作用于 src/views/components/draggable/index.vue 页面,当离开页面并不会销毁 new Swap(),sortablejs 官网也没有提供任何销毁的 api sortSwap: false }), 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) { this.sidebar.opened = true; }, 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); }