Skip to content

Commit eafb8c4

Browse files
Update customizer.ts
1 parent f394645 commit eafb8c4

1 file changed

Lines changed: 39 additions & 6 deletions

File tree

dashboard/src/stores/customizer.ts

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,33 @@
11
import { defineStore } from 'pinia';
2-
import config from '@/config';
2+
import config, { type ThemeMode } from '@/config';
33

44
const DARK_THEMES: ReadonlySet<string> = new Set(['PurpleThemeDark']);
55

6-
export const useCustomizerStore = defineStore("customizer", {
6+
function resolveUiThemeFromMode(mode: ThemeMode): string {
7+
if (mode === 'dark') return 'PurpleThemeDark';
8+
if (mode === 'light') return 'PurpleTheme';
9+
const prefersDark =
10+
typeof window !== 'undefined' &&
11+
window.matchMedia('(prefers-color-scheme: dark)').matches;
12+
return prefersDark ? 'PurpleThemeDark' : 'PurpleTheme';
13+
}
14+
15+
export const useCustomizerStore = defineStore('customizer', {
716
state: () => ({
817
Sidebar_drawer: config.Sidebar_drawer,
918
Customizer_drawer: config.Customizer_drawer,
1019
mini_sidebar: config.mini_sidebar,
11-
fontTheme: "Noto Sans SC",
20+
fontTheme: 'Noto Sans SC',
1221
uiTheme: config.uiTheme,
22+
themeMode: config.themeMode as ThemeMode,
1323
inputBg: config.inputBg,
14-
chatSidebarOpen: false // chat mode mobile sidebar state
24+
chatSidebarOpen: false, // chat mode mobile sidebar state
1525
}),
1626

1727
getters: {
1828
isDark: (state) => state.uiTheme ? DARK_THEMES.has(state.uiTheme) : false,
1929
},
30+
2031
actions: {
2132
SET_SIDEBAR_DRAWER() {
2233
this.Sidebar_drawer = !this.Sidebar_drawer;
@@ -27,9 +38,31 @@ export const useCustomizerStore = defineStore("customizer", {
2738
SET_FONT(payload: string) {
2839
this.fontTheme = payload;
2940
},
41+
42+
/**
43+
* 保留原有 action,兼容未改动的调用方。
44+
* 调用方传入 'PurpleTheme' 或 'PurpleThemeDark' 时,同时把
45+
* themeMode 推断并更新,保持两个字段一致。
46+
*/
3047
SET_UI_THEME(payload: string) {
3148
this.uiTheme = payload;
32-
localStorage.setItem("uiTheme", payload);
49+
localStorage.setItem('uiTheme', payload);
50+
// 同步推断 themeMode(仅在直接调用此 action 时用作兜底)
51+
const mode: ThemeMode = payload === 'PurpleThemeDark' ? 'dark' : 'light';
52+
this.themeMode = mode;
53+
localStorage.setItem('themeMode', mode);
54+
},
55+
56+
/**
57+
* 新 action:切换主题意图
58+
* 同时更新 themeMode、uiTheme 和 localStorage,Vuetify theme 由调用方负责。
59+
*/
60+
SET_THEME_MODE(mode: ThemeMode) {
61+
this.themeMode = mode;
62+
localStorage.setItem('themeMode', mode);
63+
const uiTheme = resolveUiThemeFromMode(mode);
64+
this.uiTheme = uiTheme;
65+
localStorage.setItem('uiTheme', uiTheme);
3366
},
3467

3568
TOGGLE_CHAT_SIDEBAR() {
@@ -38,5 +71,5 @@ export const useCustomizerStore = defineStore("customizer", {
3871
SET_CHAT_SIDEBAR(payload: boolean) {
3972
this.chatSidebarOpen = payload;
4073
},
41-
}
74+
},
4275
});

0 commit comments

Comments
 (0)