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
}
})