app.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { defineStore } from 'pinia'
  2. import { getSidebarStatus, setSidebarStatus } from '@/utils/cache/local-storage'
  3. import { getLanguage, setLanguage } from '@/utils/cache/language'
  4. import { SIDEBAR_OPENED, SIDEBAR_CLOSED } from '@/constants/app-key'
  5. interface Sidebar {
  6. opened: boolean
  7. withoutAnimation: boolean
  8. }
  9. /** 设置侧边栏状态本地缓存 */
  10. function handleSidebarStatus(opened: boolean) {
  11. opened ? setSidebarStatus(SIDEBAR_OPENED) : setSidebarStatus(SIDEBAR_CLOSED)
  12. }
  13. export const useAppStore = defineStore('app', () => {
  14. /** 侧边栏状态 */
  15. const sidebar: Sidebar = reactive({
  16. opened: getSidebarStatus() !== SIDEBAR_CLOSED,
  17. withoutAnimation: false
  18. })
  19. /** 语言状态 */
  20. const language = ref<string>(getLanguage())
  21. /** 监听侧边栏 opened 状态 */
  22. watch(
  23. () => sidebar.opened,
  24. (opened) => handleSidebarStatus(opened)
  25. )
  26. /** 监听语言状态 */
  27. watch(
  28. () => language.value,
  29. (lang) => setLanguage(lang)
  30. )
  31. /** 切换侧边栏 */
  32. const toggleSidebar = (withoutAnimation: boolean) => {
  33. sidebar.opened = !sidebar.opened
  34. sidebar.withoutAnimation = withoutAnimation
  35. }
  36. /** 切换语言 */
  37. const changeLanguage = (lang: string) => {
  38. language.value = lang
  39. }
  40. return { sidebar, language, toggleSidebar, changeLanguage }
  41. })