Просмотр исходного кода

:sparkles: 载入设置时读取用户设置

visuddhinanda 2 лет назад
Родитель
Сommit
90d012970f

+ 44 - 5
dashboard/src/components/auth/setting/default.ts

@@ -1,4 +1,5 @@
-import { ISettingItem } from "../../../reducers/setting";
+import { useAppSelector } from "../../../hooks";
+import { ISettingItem, settingInfo } from "../../../reducers/setting";
 
 export interface ISettingItemOption {
   label: string;
@@ -8,9 +9,9 @@ export interface ISetting {
   key: string;
   label: string;
   description?: string;
-  defaultValue: string | number | boolean;
+  defaultValue: string | number | boolean | string[];
   value?: string | number | boolean;
-  widget?: "input" | "select" | "radio" | "radio-button";
+  widget?: "input" | "select" | "radio" | "radio-button" | "transfer";
   options?: ISettingItemOption[];
   max?: number;
   min?: number;
@@ -19,7 +20,7 @@ export interface ISetting {
 export const GetUserSetting = (
   key: string,
   curr?: ISettingItem[]
-): string | number | boolean | undefined => {
+): string | number | boolean | string[] | undefined => {
   const currSetting = curr?.find((element) => element.key === key);
   if (typeof currSetting !== "undefined") {
     return currSetting.value;
@@ -34,7 +35,13 @@ export const GetUserSetting = (
 };
 
 export const SettingFind = (key: string): ISetting | undefined => {
-  return defaultSetting.find((element) => element.key === key);
+  const settings = useAppSelector(settingInfo);
+  const userSetting = GetUserSetting(key, settings);
+  let result = defaultSetting.find((element) => element.key === key);
+  if (userSetting && result) {
+    result.defaultValue = userSetting;
+  }
+  return result;
 };
 
 export const defaultSetting: ISetting[] = [
@@ -145,4 +152,36 @@ export const defaultSetting: ISetting[] = [
       },
     ],
   },
+  {
+    /**
+     * 字典语言
+     */
+    key: "setting.dict.lang",
+    label: "setting.dict.lang.label",
+    description: "setting.dict.lang.description",
+    defaultValue: ["zh-Hans"],
+    widget: "transfer",
+    options: [
+      {
+        value: "en",
+        label: "languages.en-US",
+      },
+      {
+        value: "zh-Hans",
+        label: "languages.zh-Hans",
+      },
+      {
+        value: "zh-Hant",
+        label: "languages.zh-Hant",
+      },
+      {
+        value: "my",
+        label: "languages.my",
+      },
+      {
+        value: "vi",
+        label: "languages.vi",
+      },
+    ],
+  },
 ];

+ 3 - 3
dashboard/src/reducers/setting.ts

@@ -4,13 +4,13 @@ import type { RootState } from "../store";
 
 export interface ISettingItem {
   key: string;
-  value: string | number | boolean | undefined;
+  value: string | number | boolean | string[] | undefined;
 }
 
 interface IState {
   settings?: ISettingItem[];
   key?: string;
-  value?: string | number | boolean;
+  value?: string | string[] | number | boolean;
 }
 
 const initialState: IState = {};
@@ -60,6 +60,6 @@ export const onChangeKey = (state: RootState): string | undefined =>
   state.setting.key;
 export const onChangeValue = (
   state: RootState
-): string | number | boolean | undefined => state.setting.value;
+): string | string[] | number | boolean | undefined => state.setting.value;
 
 export default slice.reducer;