settings.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import defaultSettings from '@/settings'
  2. import { useDark, useToggle } from '@vueuse/core'
  3. import { useDynamicTitle } from '@/utils/dynamicTitle'
  4. import { handleThemeStyle } from '@/utils/theme'
  5. const isDark = useDark()
  6. const toggleDark = useToggle(isDark)
  7. const { sideTheme, showSettings, navType, tagsView, tagsViewPersist, tagsIcon, tagsViewStyle, fixedHeader, sidebarLogo, dynamicTitle, footerVisible, footerContent } = 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. navType: storageSetting.navType === undefined ? navType : storageSetting.navType,
  18. tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView,
  19. tagsViewPersist: storageSetting.tagsViewPersist === undefined ? tagsViewPersist : storageSetting.tagsViewPersist,
  20. tagsIcon: storageSetting.tagsIcon === undefined ? tagsIcon : storageSetting.tagsIcon,
  21. tagsViewStyle: storageSetting.tagsViewStyle === undefined ? tagsViewStyle : storageSetting.tagsViewStyle,
  22. fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader,
  23. sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo,
  24. dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle,
  25. footerVisible: storageSetting.footerVisible === undefined ? footerVisible : storageSetting.footerVisible,
  26. footerContent: footerContent,
  27. isDark: isDark.value
  28. }),
  29. actions: {
  30. // 修改布局设置
  31. changeSetting(data) {
  32. const { key, value } = data
  33. if (this.hasOwnProperty(key)) {
  34. this[key] = value
  35. }
  36. },
  37. // 设置网页标题
  38. setTitle(title) {
  39. this.title = title
  40. useDynamicTitle()
  41. },
  42. // 切换暗黑模式
  43. toggleTheme() {
  44. this.isDark = !this.isDark
  45. toggleDark()
  46. nextTick(() => {
  47. handleThemeStyle(this.theme)
  48. })
  49. }
  50. }
  51. })
  52. export default useSettingsStore