55 lines
2.2 KiB
TypeScript
Raw Normal View History

2023-04-02 01:01:56 +08:00
import { defineStore } from 'pinia';
import defaultSettings from '@/settings';
import { SettingTypeEnum } from '@/enums/SettingTypeEnum';
import { useDynamicTitle } from '@/utils/dynamicTitle';
import { Ref } from 'vue';
export const useSettingsStore = defineStore('setting', () => {
2023-04-03 00:05:09 +08:00
const storageSetting = JSON.parse(localStorage.getItem('layout-setting') || '{}');
2023-04-02 01:01:56 +08:00
2023-04-03 00:05:09 +08:00
const prop: { [key: string]: Ref<any> } = {
title: ref<string>(''),
theme: ref<string>(storageSetting.theme || defaultSettings.theme),
sideTheme: ref<string>(storageSetting.sideTheme || defaultSettings.sideTheme),
showSettings: ref<boolean>(storageSetting.showSettings || defaultSettings.showSettings),
topNav: ref<boolean>(storageSetting.topNav === undefined ? defaultSettings.topNav : storageSetting.topNav),
tagsView: ref<boolean>(storageSetting.tagsView === undefined ? defaultSettings.tagsView : storageSetting.tagsView),
fixedHeader: ref<boolean>(storageSetting.fixedHeader === undefined ? defaultSettings.fixedHeader : storageSetting.fixedHeader),
sidebarLogo: ref<boolean>(storageSetting.sidebarLogo === undefined ? defaultSettings.sidebarLogo : storageSetting.sidebarLogo),
dynamicTitle: ref<boolean>(storageSetting.dynamicTitle === undefined ? defaultSettings.dynamicTitle : storageSetting.dynamicTitle),
animationEnable: ref<boolean>(storageSetting.animationEnable === undefined ? defaultSettings.animationEnable : storageSetting.animationEnable),
2023-04-03 00:05:09 +08:00
dark: ref<boolean>(storageSetting.dark || defaultSettings.dark)
};
2023-04-02 01:01:56 +08:00
2023-04-03 00:05:09 +08:00
const { title, theme, sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle, animationEnable, dark } = prop;
2023-04-02 01:01:56 +08:00
2023-04-03 00:05:09 +08:00
// actions
const changeSetting = (param: { key: SettingTypeEnum; value: any }) => {
const { key, value } = param;
if (key in prop) {
prop[key].value = value;
}
};
const setTitle = (value: string) => {
title.value = value;
useDynamicTitle();
};
return {
title,
theme,
sideTheme,
showSettings,
topNav,
tagsView,
fixedHeader,
sidebarLogo,
dynamicTitle,
animationEnable,
dark,
changeSetting,
setTitle
};
2023-04-02 01:01:56 +08:00
});
export default useSettingsStore;