Leon 2 tahun lalu
induk
melakukan
a1f8618be6
4 mengubah file dengan 67 tambahan dan 27 penghapusan
  1. 31 17
      src/context/locales/index.ts
  2. 27 2
      src/pages/account/EditPage.tsx
  3. 3 3
      src/services/user.tsx
  4. 6 5
      src/store/user.tsx

+ 31 - 17
src/context/locales/index.ts

@@ -5,25 +5,39 @@ import zh from './zh'
 import en from './en'
 import { initReactI18next } from 'react-i18next';
 
-i18n.use(LanguageDetector) //嗅探当前浏览器语言
-  .use(initReactI18next) //init i18next
-  .init({
-    //引入资源文件
-    resources: {
-      en: {
-        translation: en,
+function getLanguageSetting(){
+  var key = Taro.getStorageSync('language')
+  if (key){
+    initLocale(key)
+  }
+  else {
+    initLocale('zh')
+  }
+}
+
+function initLocale(strLocale: string) {
+  i18n.use(LanguageDetector) //嗅探当前浏览器语言
+    .use(initReactI18next) //init i18next
+    .init({
+      //引入资源文件
+      resources: {
+        en: {
+          translation: en,
+        },
+        zh: {
+          translation: zh,
+        },
       },
-      zh: {
-        translation: zh,
+      //选择默认语言,选择内容为上述配置中的key,即en/zh
+      lng: strLocale,//Taro.getStorageSync('language') ? Taro.getStorageSync('language') : 'en',
+      debug: false,
+      interpolation: {
+        escapeValue: false, // not needed for react as it escapes by default
       },
-    },
-    //选择默认语言,选择内容为上述配置中的key,即en/zh
-    lng: 'zh',//Taro.getStorageSync('language') ? Taro.getStorageSync('language') : 'en',
-    debug: false,
-    interpolation: {
-      escapeValue: false, // not needed for react as it escapes by default
-    },
-  })
+    })
+}
+
+getLanguageSetting();
 
 
 

+ 27 - 2
src/pages/account/EditPage.tsx

@@ -1,7 +1,32 @@
-import { Input, View } from "@tarojs/components";
+import { update } from "@/services/user";
+import { Input, View, Text } from "@tarojs/components";
+import Taro from "@tarojs/taro";
+import { useState } from "react";
+import { useDispatch, useSelector } from "react-redux";
 
 export default function Page() {
+    const user = useSelector((state: any) => state.user);
+    const [value, setValue] = useState(user.nickname);
+    const dispatch = useDispatch();
+
+    const handleChange = (e) => {
+        setValue(e.target.value);
+    };
+
+    function save() {
+        if (value.length == 0) {
+            Taro.showToast({
+                title: '请输入昵称',
+                icon: 'none'
+            })
+            return;
+        }
+        dispatch(update({nickname:value}) as any)
+    }
+
     return <View>
-        <Input type="nickname" placeholder="请输入昵称" style={{color:'#fff'}}/>
+        <Input type="nickname" placeholder="请输入昵称" style={{ color: '#fff' }} value={value} onInput={handleChange} />
+
+        <Text onClick={save} style={{ color: '#fff' }}>保存</Text>
     </View>
 }

+ 3 - 3
src/services/user.tsx

@@ -90,11 +90,11 @@ export const getInfo = () => (dispatch: any) => {
 }
 
 
-export const update = () => (dispatch: any) => {
+export const update = (params:any) => (dispatch: any) => {
     request({
-        url: API_USER_INFO, method: 'POST', data: {}
+        url: API_USER_INFO, method: 'POST', data: params
     }).then(res => {
-        dispatch(updateSuccess(res));
+        dispatch(updateSuccess(params));
     })
 }
 

+ 6 - 5
src/store/user.tsx

@@ -85,12 +85,13 @@ const userSlice = createSlice({
             Taro.setStorage({ key: 'userData', data: JSON.stringify(action.payload) });
         },
         updateSuccess(state, action: PayloadAction<any>) {
-            const { nickname, avatar, token } = action.payload;
-            state.nickname = nickname;
-            state.avatar = avatar;
-            state.token = token;
+            const { nickname, avatar } = action.payload;
+            if (nickname)
+                state.nickname = nickname;
+            if (avatar)
+                state.avatar = avatar;
             state.isLogin = true;
-            Taro.setStorage({ key: 'userData', data: JSON.stringify(action.payload) });
+            Taro.setStorage({ key: 'userData', data: JSON.stringify(state) });
         }
     },
 });