settings.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import defaultSettings from '@/settings'
  2. import { useDark, useToggle } from '@vueuse/core'
  3. import { useDynamicTitle } from '@/utils/dynamicTitle'
  4. const isDark = useDark()
  5. if(isDark.value) isDark.value=false; //固定为深色模式
  6. const toggleDark = useToggle(isDark)
  7. const { sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle } = defaultSettings
  8. const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || ''
  9. const useSettingsStore = defineStore(
  10. 'settings',
  11. {
  12. state: () => ({
  13. title: '',
  14. theme: storageSetting.theme || '#409EFF',
  15. sideTheme: storageSetting.sideTheme || sideTheme,
  16. showSettings: showSettings,
  17. topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav,
  18. tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView,
  19. fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader,
  20. sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo,
  21. dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle,
  22. isDark: isDark.value
  23. }),
  24. actions: {
  25. // 修改布局设置
  26. changeSetting(data) {
  27. const { key, value } = data
  28. if (this.hasOwnProperty(key)) {
  29. this[key] = value
  30. }
  31. },
  32. // 设置网页标题
  33. setTitle(title) {
  34. this.title = title
  35. useDynamicTitle()
  36. },
  37. // 切换暗黑模式
  38. toggleTheme() {
  39. if(this.isDark.value) return //深色模式时不切换,保持深色模式
  40. this.isDark = !this.isDark
  41. toggleDark()
  42. }
  43. }
  44. })
  45. export default useSettingsStore