app.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import defaultSettings from '@/settings'
  2. import { useStorage } from '@vueuse/core'
  3. import { useCookies } from '@vueuse/integrations/useCookies'
  4. // 导入 Element Plus 中英文语言包
  5. import zhCn from 'element-plus/es/locale/lang/zh-cn'
  6. import en from 'element-plus/es/locale/lang/en'
  7. const cookies = useCookies()
  8. // setup
  9. export const useAppStore = defineStore('app', () => {
  10. // state
  11. const device = useStorage('device', 'desktop')
  12. const size = useStorage('size', defaultSettings.size)
  13. let lang = cookies.get('locale')
  14. if(!lang) lang = defaultSettings.language
  15. const language = useStorage('language', lang)
  16. const sidebarStatus = useStorage('sidebarStatus', 'closed')
  17. const sidebar = reactive({
  18. opened: sidebarStatus.value !== 'closed',
  19. withoutAnimation: false
  20. })
  21. const activeTopMenuPath = useStorage('activeTopMenuPath', '')
  22. /**
  23. * 根据语言标识读取对应的语言包
  24. */
  25. const locale = computed(() => {
  26. if (language?.value == 'en-us') {
  27. return en
  28. } else {
  29. return zhCn
  30. }
  31. })
  32. // actions
  33. function toggleSidebar() {
  34. sidebar.opened = !sidebar.opened
  35. if (sidebar.opened) {
  36. sidebarStatus.value = 'opened'
  37. } else {
  38. sidebarStatus.value = 'closed'
  39. }
  40. }
  41. function closeSideBar() {
  42. sidebar.opened = false
  43. sidebarStatus.value = 'closed'
  44. }
  45. function openSideBar() {
  46. sidebar.opened = true
  47. sidebarStatus.value = 'opened'
  48. }
  49. function toggleDevice(val) {
  50. device.value = val
  51. }
  52. function changeSize(val) {
  53. size.value = val
  54. }
  55. /**
  56. * 切换语言
  57. *
  58. * @param val
  59. */
  60. function changeLanguage(val) {
  61. language.value = val
  62. // cookie切换
  63. cookies.set('locale', val, { path: '/' })
  64. }
  65. /**
  66. * 混合模式顶部切换
  67. */
  68. function activeTopMenu(val) {
  69. activeTopMenuPath.value = val
  70. }
  71. return {
  72. device,
  73. sidebar,
  74. language,
  75. locale,
  76. size,
  77. activeTopMenu,
  78. toggleDevice,
  79. changeSize,
  80. changeLanguage,
  81. toggleSidebar,
  82. closeSideBar,
  83. openSideBar,
  84. activeTopMenuPath
  85. }
  86. })