mirror of
https://github.com/m-xlsea/ruoyi-plus-soybean.git
synced 2025-09-24 07:49:47 +08:00
refactor(hooks): 状态管理模块拆分
This commit is contained in:
@ -1,77 +1,42 @@
|
||||
import { defineStore } from 'pinia';
|
||||
import type { GlobalThemeOverrides } from 'naive-ui';
|
||||
import { themeSettings } from '@/settings';
|
||||
import { store } from '@/store';
|
||||
import type { ThemeSettings, NavMode } from '@/interface';
|
||||
import { getHoverAndPressedColor } from './helpers';
|
||||
|
||||
/** app状态 */
|
||||
interface AppState {
|
||||
/** 主题配置 */
|
||||
themeSettings: ThemeSettings;
|
||||
/** 主题配置抽屉 */
|
||||
menu: MenuState;
|
||||
settingDrawer: SettingDrawer;
|
||||
}
|
||||
|
||||
/** 菜单状态 */
|
||||
interface MenuState {
|
||||
/** 菜单折叠 */
|
||||
collapsed: boolean;
|
||||
}
|
||||
|
||||
/** 设置抽屉的状态 */
|
||||
interface SettingDrawer {
|
||||
/** 设置抽屉可见性 */
|
||||
visible: boolean;
|
||||
}
|
||||
|
||||
const appStore = defineStore({
|
||||
id: 'app-store',
|
||||
state: (): AppState => ({
|
||||
themeSettings,
|
||||
menu: {
|
||||
collapsed: false
|
||||
},
|
||||
settingDrawer: {
|
||||
visible: false
|
||||
}
|
||||
}),
|
||||
getters: {
|
||||
/** naive UI主题配置 */
|
||||
themeOverrids(): GlobalThemeOverrides {
|
||||
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);
|
||||
|
||||
const colorLoading = primaryColor;
|
||||
|
||||
return {
|
||||
common: {
|
||||
primaryColor,
|
||||
primaryColorHover,
|
||||
primaryColorPressed,
|
||||
infoColor,
|
||||
infoColorHover,
|
||||
infoColorPressed,
|
||||
successColor,
|
||||
successColorHover,
|
||||
successColorPressed,
|
||||
warningColor,
|
||||
warningColorHover,
|
||||
warningColorPressed,
|
||||
errorColor,
|
||||
errorColorHover,
|
||||
errorColorPressed
|
||||
},
|
||||
LoadingBar: {
|
||||
colorLoading
|
||||
}
|
||||
};
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
/** 折叠/展开菜单 */
|
||||
handleMenuCollapse(collapsed: boolean) {
|
||||
this.themeSettings.menuStyle.collapsed = collapsed;
|
||||
this.menu.collapsed = collapsed;
|
||||
},
|
||||
/** 切换折叠/展开菜单 */
|
||||
toggleMenu() {
|
||||
this.themeSettings.menuStyle.collapsed = !this.themeSettings.menuStyle.collapsed;
|
||||
this.menu.collapsed = !this.menu.collapsed;
|
||||
},
|
||||
/** 打开配置抽屉 */
|
||||
openSettingDrawer() {
|
||||
@ -80,26 +45,6 @@ const appStore = defineStore({
|
||||
/** 关闭配置抽屉 */
|
||||
closeSettingDrawer() {
|
||||
this.settingDrawer.visible = false;
|
||||
},
|
||||
/** 设置暗黑模式 */
|
||||
handleDarkMode(isDark: boolean) {
|
||||
this.themeSettings.darkMode = isDark;
|
||||
},
|
||||
/** 设置系统主题颜色 */
|
||||
setThemeColor(color: string) {
|
||||
this.themeSettings.themeColor = color;
|
||||
},
|
||||
/** 设置导航栏模式 */
|
||||
setNavMode(mode: NavMode) {
|
||||
this.themeSettings.navStyle.mode = mode;
|
||||
},
|
||||
/** 折叠菜单 */
|
||||
handleSplitMenu(isSplit: boolean) {
|
||||
this.themeSettings.menuStyle.splitMenu = isSplit;
|
||||
},
|
||||
/** 固定头部 */
|
||||
handleFixedHeader(isFixed: boolean) {
|
||||
this.themeSettings.headerStyle.fixed = isFixed;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -1,4 +1,5 @@
|
||||
import useThemeStore from './theme';
|
||||
import useAppStore from './app';
|
||||
import useAuthStore from './auth';
|
||||
|
||||
export { useAppStore, useAuthStore };
|
||||
export { useThemeStore, useAppStore, useAuthStore };
|
||||
|
8
src/store/modules/theme/helpers.ts
Normal file
8
src/store/modules/theme/helpers.ts
Normal file
@ -0,0 +1,8 @@
|
||||
import { brightenColor, darkenColor } from '@/utils';
|
||||
|
||||
export function getHoverAndPressedColor(color: string) {
|
||||
return {
|
||||
hover: brightenColor(color),
|
||||
pressed: darkenColor(color)
|
||||
};
|
||||
}
|
81
src/store/modules/theme/index.ts
Normal file
81
src/store/modules/theme/index.ts
Normal file
@ -0,0 +1,81 @@
|
||||
import { defineStore } from 'pinia';
|
||||
import type { GlobalThemeOverrides } from 'naive-ui';
|
||||
import { themeSettings } from '@/settings';
|
||||
import { store } from '@/store';
|
||||
import type { ThemeSettings, NavMode } from '@/interface';
|
||||
import { getHoverAndPressedColor } from './helpers';
|
||||
|
||||
type ThemeState = ThemeSettings;
|
||||
|
||||
const themeStore = defineStore({
|
||||
id: 'theme-store',
|
||||
state: (): ThemeState => ({
|
||||
...themeSettings
|
||||
}),
|
||||
getters: {
|
||||
/** naive UI主题配置 */
|
||||
themeOverrids(): GlobalThemeOverrides {
|
||||
const {
|
||||
themeColor: primaryColor,
|
||||
otherColor: { info: infoColor, success: successColor, warning: warningColor, error: errorColor }
|
||||
} = this;
|
||||
|
||||
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);
|
||||
|
||||
const colorLoading = primaryColor;
|
||||
|
||||
return {
|
||||
common: {
|
||||
primaryColor,
|
||||
primaryColorHover,
|
||||
primaryColorPressed,
|
||||
infoColor,
|
||||
infoColorHover,
|
||||
infoColorPressed,
|
||||
successColor,
|
||||
successColorHover,
|
||||
successColorPressed,
|
||||
warningColor,
|
||||
warningColorHover,
|
||||
warningColorPressed,
|
||||
errorColor,
|
||||
errorColorHover,
|
||||
errorColorPressed
|
||||
},
|
||||
LoadingBar: {
|
||||
colorLoading
|
||||
}
|
||||
};
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
/** 设置暗黑模式 */
|
||||
handleDarkMode(isDark: boolean) {
|
||||
this.darkMode = isDark;
|
||||
},
|
||||
/** 设置系统主题颜色 */
|
||||
setThemeColor(color: string) {
|
||||
this.themeColor = color;
|
||||
},
|
||||
/** 设置导航栏模式 */
|
||||
setNavMode(mode: NavMode) {
|
||||
this.navStyle.mode = mode;
|
||||
},
|
||||
/** 折叠菜单 */
|
||||
handleSplitMenu(isSplit: boolean) {
|
||||
this.menuStyle.splitMenu = isSplit;
|
||||
},
|
||||
/** 固定头部 */
|
||||
handleFixedHeader(isFixed: boolean) {
|
||||
this.headerStyle.fixed = isFixed;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
export default function useThemeStore() {
|
||||
return themeStore(store);
|
||||
}
|
Reference in New Issue
Block a user