2021-08-13 14:22:35 +08:00
|
|
|
import { defineStore } from 'pinia';
|
2021-08-18 12:02:59 +08:00
|
|
|
import type { GlobalThemeOverrides } from 'naive-ui';
|
|
|
|
import { themeSettings } from '@/settings';
|
2021-09-07 11:57:35 +08:00
|
|
|
import { store } from '@/store';
|
2021-09-02 23:15:07 +08:00
|
|
|
import type { ThemeSettings, NavMode } from '@/interface';
|
2021-08-27 12:00:09 +08:00
|
|
|
import { getHoverAndPressedColor } from './helpers';
|
2021-08-13 14:22:35 +08:00
|
|
|
|
|
|
|
interface AppState {
|
2021-08-18 12:02:59 +08:00
|
|
|
/** 主题配置 */
|
|
|
|
themeSettings: ThemeSettings;
|
2021-09-01 17:43:25 +08:00
|
|
|
/** 主题配置抽屉 */
|
|
|
|
settingDrawer: SettingDrawer;
|
|
|
|
}
|
|
|
|
|
|
|
|
interface SettingDrawer {
|
|
|
|
visible: boolean;
|
2021-08-13 14:22:35 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
const appStore = defineStore({
|
|
|
|
id: 'app-store',
|
|
|
|
state: (): AppState => ({
|
2021-08-18 12:02:59 +08:00
|
|
|
themeSettings,
|
2021-09-01 17:43:25 +08:00
|
|
|
settingDrawer: {
|
|
|
|
visible: false
|
|
|
|
}
|
2021-08-13 14:22:35 +08:00
|
|
|
}),
|
2021-08-18 12:02:59 +08:00
|
|
|
getters: {
|
|
|
|
/** naive UI主题配置 */
|
|
|
|
themeOverrids(): GlobalThemeOverrides {
|
2021-08-27 12:00:09 +08:00
|
|
|
const {
|
|
|
|
themeColor: primaryColor,
|
|
|
|
otherColor: { info: infoColor, success: successColor, warning: warningColor, error: errorColor }
|
|
|
|
} = this.themeSettings;
|
|
|
|
|
|
|
|
const { hover: primaryColorHover, pressed: primaryColorPressed } = getHoverAndPressedColor(primaryColor);
|
|
|
|
const { hover: infoColorHover, pressed: infoColorPressed } = getHoverAndPressedColor(infoColor);
|
|
|
|
const { hover: successColorHover, pressed: successColorPressed } = getHoverAndPressedColor(successColor);
|
|
|
|
const { hover: warningColorHover, pressed: warningColorPressed } = getHoverAndPressedColor(warningColor);
|
|
|
|
const { hover: errorColorHover, pressed: errorColorPressed } = getHoverAndPressedColor(errorColor);
|
|
|
|
|
2021-08-18 12:02:59 +08:00
|
|
|
const colorLoading = primaryColor;
|
|
|
|
|
|
|
|
return {
|
|
|
|
common: {
|
|
|
|
primaryColor,
|
|
|
|
primaryColorHover,
|
2021-08-27 12:00:09 +08:00
|
|
|
primaryColorPressed,
|
|
|
|
infoColor,
|
|
|
|
infoColorHover,
|
|
|
|
infoColorPressed,
|
|
|
|
successColor,
|
|
|
|
successColorHover,
|
|
|
|
successColorPressed,
|
|
|
|
warningColor,
|
|
|
|
warningColorHover,
|
|
|
|
warningColorPressed,
|
|
|
|
errorColor,
|
|
|
|
errorColorHover,
|
|
|
|
errorColorPressed
|
2021-08-18 12:02:59 +08:00
|
|
|
},
|
|
|
|
LoadingBar: {
|
|
|
|
colorLoading
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
},
|
2021-08-13 14:22:35 +08:00
|
|
|
actions: {
|
2021-09-01 17:43:25 +08:00
|
|
|
/** 折叠/展开菜单 */
|
|
|
|
handleMenuCollapse(collapsed: boolean) {
|
|
|
|
this.themeSettings.menuStyle.collapsed = collapsed;
|
|
|
|
},
|
|
|
|
/** 切换折叠/展开菜单 */
|
|
|
|
toggleMenu() {
|
|
|
|
this.themeSettings.menuStyle.collapsed = !this.themeSettings.menuStyle.collapsed;
|
|
|
|
},
|
|
|
|
/** 打开配置抽屉 */
|
|
|
|
openSettingDrawer() {
|
|
|
|
this.settingDrawer.visible = true;
|
2021-08-13 14:22:35 +08:00
|
|
|
},
|
2021-09-01 17:43:25 +08:00
|
|
|
/** 关闭配置抽屉 */
|
|
|
|
closeSettingDrawer() {
|
|
|
|
this.settingDrawer.visible = false;
|
2021-09-01 23:36:06 +08:00
|
|
|
},
|
2021-09-07 11:57:35 +08:00
|
|
|
/** 设置暗黑模式 */
|
|
|
|
handleDarkMode(isDark: boolean) {
|
|
|
|
this.themeSettings.darkMode = isDark;
|
|
|
|
},
|
2021-09-01 23:36:06 +08:00
|
|
|
/** 设置系统主题颜色 */
|
|
|
|
setThemeColor(color: string) {
|
|
|
|
this.themeSettings.themeColor = color;
|
2021-09-02 23:15:07 +08:00
|
|
|
},
|
|
|
|
/** 设置导航栏模式 */
|
|
|
|
setNavMode(mode: NavMode) {
|
|
|
|
this.themeSettings.navStyle.mode = mode;
|
2021-09-07 11:57:35 +08:00
|
|
|
},
|
|
|
|
/** 折叠菜单 */
|
|
|
|
handleSplitMenu(isSplit: boolean) {
|
|
|
|
this.themeSettings.menuStyle.splitMenu = isSplit;
|
|
|
|
},
|
|
|
|
/** 固定头部 */
|
|
|
|
handleFixedHeader(isFixed: boolean) {
|
|
|
|
this.themeSettings.headerStyle.fixed = isFixed;
|
2021-08-13 14:22:35 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
export default function useAppStore() {
|
|
|
|
return appStore(store);
|
|
|
|
}
|