blob: ef519b2bffd63fcd3bef6e026817c6b0161628e2 [file] [log] [blame]
San3yuan03ab0642025-04-29 18:00:25 +08001import { createSlice } from "@reduxjs/toolkit";
2
3interface SettingState {
4 theme: string;
5 fontSize: string;
6 showSearch: boolean;
7}
8
9const initialState: SettingState = {
10 theme: localStorage.getItem("theme") || "light",
11 fontSize: localStorage.getItem("font") || "medium",
12 showSearch: false,
13};
14
15const fontSizeMap: Record<string, string> = {
16 small: "12px",
17 medium: "16px",
18 large: "20px",
19};
20document.body.className = initialState.theme; // 设置初始主题
21document.documentElement.style.fontSize = fontSizeMap[initialState.fontSize];
22export const settingSlice = createSlice({
23 name:"setting",
24 initialState,
25 reducers:{
26 toggleSearch: (state) => {
27 state.showSearch = !state.showSearch;
28 },
29 toggleFontSize: (state) => {
30 state.fontSize =
31 state.fontSize === "small"
32 ? "medium"
33 : state.fontSize === "medium"
34 ? "large"
35 : "small";
36 document.documentElement.style.fontSize = fontSizeMap[state.fontSize]; // 切换字体大小
37 localStorage.setItem("font", state.fontSize); // 保存到 localStorage
38 },
39 toggleTheme: (state) => {
40 const nextTheme = state.theme === "light" ? "dark" : "light";
41 state.theme = nextTheme;
42 document.body.className = nextTheme; // 切换 body 类名用于全局主题
43 localStorage.setItem("theme", nextTheme); // 保存到 localStorage
44 console.log("theme:", nextTheme)
45 },
46 },
47})
48
49export default settingSlice.reducer;
50export const { toggleSearch, toggleFontSize, toggleTheme } = settingSlice.actions;