app.ts 897 Bytes
import { defineStore } from 'pinia'
import { useStorage } from '@vueuse/core'

export type LocaleType = 'zh-CN' | 'en'

/** 应用级 UI 状态:侧边栏折叠、语言、组件尺寸、移动端标记 */
export const useAppStore = defineStore('app', () => {
  const sidebarCollapsed = useStorage('app.sidebarCollapsed', false)
  const locale = useStorage<LocaleType>('app.locale', 'zh-CN')
  const size = useStorage<'default' | 'small' | 'large'>('app.size', 'default')
  const isMobile = ref(false)
  /** 是否已加载过动态路由(刷新后需重新拉菜单) */
  const routesLoaded = ref(false)

  function toggleSidebar() {
    sidebarCollapsed.value = !sidebarCollapsed.value
  }

  function setLocale(value: LocaleType) {
    locale.value = value
  }

  return {
    sidebarCollapsed,
    locale,
    size,
    isMobile,
    routesLoaded,
    toggleSidebar,
    setLocale
  }
})