| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- 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<StorageConfigs>(
- `${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);
- }
|