settings.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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. export const useSettingsStore = defineStore('setting', () => {
  7. const storageSetting = useStorage<LayoutSetting>('layout-setting', {
  8. topNav: defaultSettings.topNav,
  9. tagsView: defaultSettings.tagsView,
  10. fixedHeader: defaultSettings.fixedHeader,
  11. sidebarLogo: defaultSettings.sidebarLogo,
  12. dynamicTitle: defaultSettings.dynamicTitle,
  13. sideTheme: defaultSettings.sideTheme,
  14. theme: defaultSettings.theme
  15. });
  16. const title = ref<string>(defaultSettings.title);
  17. const theme = ref<string>(storageSetting.value.theme);
  18. const sideTheme = ref<string>(storageSetting.value.sideTheme);
  19. const showSettings = ref<boolean>(defaultSettings.showSettings);
  20. const topNav = ref<boolean>(storageSetting.value.topNav);
  21. const tagsView = ref<boolean>(storageSetting.value.tagsView);
  22. const fixedHeader = ref<boolean>(storageSetting.value.fixedHeader);
  23. const sidebarLogo = ref<boolean>(storageSetting.value.sidebarLogo);
  24. const dynamicTitle = ref<boolean>(storageSetting.value.dynamicTitle);
  25. const animationEnable = ref<boolean>(defaultSettings.animationEnable);
  26. const dark = ref<boolean>(defaultSettings.dark);
  27. const setTitle = (value: string) => {
  28. title.value = value;
  29. useDynamicTitle();
  30. };
  31. return {
  32. title,
  33. theme,
  34. sideTheme,
  35. showSettings,
  36. topNav,
  37. tagsView,
  38. fixedHeader,
  39. sidebarLogo,
  40. dynamicTitle,
  41. animationEnable,
  42. dark,
  43. setTitle
  44. };
  45. });