settings.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import defaultSettings from '@/settings'
  2. import { useDark, useToggle } from '@vueuse/core'
  3. import { useDynamicTitle } from '@/utils/dynamicTitle'
  4. const isDark = useDark()
  5. const toggleDark = useToggle(isDark)
  6. const { sideTheme, showSettings, topNav, tagsView, tagsIcon, fixedHeader, sidebarLogo, dynamicTitle } = defaultSettings
  7. const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || ''
  8. const useSettingsStore = defineStore(
  9. 'settings',
  10. {
  11. state: () => ({
  12. title: '',
  13. theme: storageSetting.theme || '#409EFF',
  14. sideTheme: storageSetting.sideTheme || sideTheme,
  15. showSettings: showSettings,
  16. topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav,
  17. tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView,
  18. tagsIcon: storageSetting.tagsIcon === undefined ? tagsIcon : storageSetting.tagsIcon,
  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. this.isDark = !this.isDark
  40. toggleDark()
  41. }
  42. }
  43. })
  44. export default useSettingsStore