settings.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { defineStore } from 'pinia';
  2. import defaultSettings from '@/settings';
  3. import { useDynamicTitle } from '@/utils/dynamicTitle';
  4. import { useStorage } from '@vueuse/core';
  5. import { ref } from 'vue';
  6. import { NavTypeEnum } from '@/enums/NavTypeEnum';
  7. export const useSettingsStore = defineStore('setting', () => {
  8. const storageSetting = useStorage<LayoutSetting>('layout-setting', {
  9. tagsView: defaultSettings.tagsView,
  10. tagsIcon: defaultSettings.tagsIcon,
  11. fixedHeader: defaultSettings.fixedHeader,
  12. sidebarLogo: defaultSettings.sidebarLogo,
  13. dynamicTitle: defaultSettings.dynamicTitle,
  14. sideTheme: defaultSettings.sideTheme,
  15. theme: defaultSettings.theme,
  16. navType: defaultSettings.navType,
  17. radiusBase: defaultSettings.radiusBase
  18. });
  19. const title = ref<string>(defaultSettings.title);
  20. const theme = ref<string>(storageSetting.value.theme);
  21. const sideTheme = ref<string>(storageSetting.value.sideTheme);
  22. const showSettings = ref<boolean>(defaultSettings.showSettings);
  23. const tagsView = ref<boolean>(storageSetting.value.tagsView);
  24. const tagsIcon = ref<boolean>(storageSetting.value.tagsIcon);
  25. const fixedHeader = ref<boolean>(storageSetting.value.fixedHeader);
  26. const sidebarLogo = ref<boolean>(storageSetting.value.sidebarLogo);
  27. const dynamicTitle = ref<boolean>(storageSetting.value.dynamicTitle);
  28. const animationEnable = ref<boolean>(defaultSettings.animationEnable);
  29. const dark = ref<boolean>(defaultSettings.dark);
  30. const navType = ref<NavTypeEnum>(storageSetting.value.navType || NavTypeEnum.LEFT);
  31. const radiusBase = ref<number>(storageSetting.value.radiusBase ?? defaultSettings.radiusBase);
  32. const setTitle = (value: string) => {
  33. title.value = value;
  34. useDynamicTitle();
  35. };
  36. return {
  37. title,
  38. theme,
  39. sideTheme,
  40. showSettings,
  41. tagsView,
  42. tagsIcon,
  43. fixedHeader,
  44. sidebarLogo,
  45. dynamicTitle,
  46. animationEnable,
  47. dark,
  48. navType,
  49. radiusBase,
  50. setTitle
  51. };
  52. });