兰宝车间质量管理系统-前端
LiuHao
2023-04-02 251d2411f235e23209d57173857e05b637729ce8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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', () => {
    const storageSetting = JSON.parse(localStorage.getItem('layout-setting') || '{}');
 
    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),
        topNav: ref<boolean>(storageSetting.topNav || defaultSettings.topNav),
        tagsView: ref<boolean>(storageSetting.tagsView || defaultSettings.tagsView),
        fixedHeader: ref<boolean>(storageSetting.fixedHeader || defaultSettings.fixedHeader),
        sidebarLogo: ref<boolean>(storageSetting.sidebarLogo || defaultSettings.sidebarLogo),
        dynamicTitle: ref<boolean>(storageSetting.dynamicTitle || defaultSettings.dynamicTitle),
        animationEnable: ref<boolean>(storageSetting.animationEnable || defaultSettings.animationEnable),
        dark: ref<boolean>(storageSetting.dark || defaultSettings.dark)
    };
 
    const { title, theme, sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle, animationEnable, dark } = prop;
 
    // 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
    };
});
 
export default useSettingsStore;