소스 검색

feat: 增加查询用户信息

xyh 2 년 전
부모
커밋
08f0a84762
6개의 변경된 파일56개의 추가작업 그리고 17개의 파일을 삭제
  1. 6 1
      src/apis/user.js
  2. 31 1
      src/pages/index/hooks.js
  3. 4 3
      src/pages/index/index.jsx
  4. 1 4
      src/pages/index/login/hooks.js
  5. 13 7
      src/stores/user.js
  6. 1 1
      src/utils/constants.js

+ 6 - 1
src/apis/user.js

@@ -1,4 +1,4 @@
-import {post} from './request';
+import {get, post} from './request';
 
 /**
  * 用户登录
@@ -8,3 +8,8 @@ import {post} from './request';
 export function login(data) {
   return post({url: '/user/login', data});
 }
+
+/** 获取用户权限 */
+export function getUserPower(userName) {
+  return get({url: '/user/getUser', data: {userName}});
+}

+ 31 - 1
src/pages/index/hooks.js

@@ -15,6 +15,8 @@ import {useStore} from 'zustand';
 import {userStore} from '@stores';
 import {useEffect, useState} from 'react';
 import {klona} from 'klona/json';
+import {useQuery} from '@tanstack/react-query';
+import {getUserPower} from '@apis';
 
 const defaultBtnList = [
   {
@@ -31,7 +33,7 @@ const defaultBtnList = [
 ];
 
 export function useBtnList() {
-  const {power} = useStore(userStore);
+  const power = useStore(userStore, state => state.power);
 
   const [btnList, setBtnList] = useState(klona(defaultBtnList));
 
@@ -82,3 +84,31 @@ export function useBtnList() {
 
   return btnList;
 }
+
+export function useQueryUserInfo() {
+  const userName = useStore(userStore, state => state.userName);
+
+  const {data} = useQuery({
+    queryKey: [getUserPower.name, userName],
+    enabled: userName.length > 0,
+    async queryFn() {
+      const data = await getUserPower(userName);
+
+      if (data.code === '200' && data.data.length > 0)
+        return data.data[0].power;
+
+      return '';
+    },
+  });
+
+  const setPower = useStore(userStore, state => state.setPower);
+
+  useEffect(
+    function () {
+      if (data && data.length > 0) {
+        setPower(data);
+      }
+    },
+    [data, setPower],
+  );
+}

+ 4 - 3
src/pages/index/index.jsx

@@ -6,7 +6,7 @@ import Login from './login';
 import {useBoolean} from 'ahooks';
 import {ORDER_PATH} from '@routes';
 import {useNavigate} from '@hooks';
-import {useBtnList} from './hooks';
+import {useBtnList, useQueryUserInfo} from './hooks';
 import {userStore} from '@stores';
 import {showModal} from '@tarojs/taro';
 
@@ -14,7 +14,8 @@ export default function App() {
   const btnList = useBtnList();
   const [visible, {toggle, setFalse}] = useBoolean();
   const {navigateWithLogin, navigate} = useNavigate();
-  const {userName, token, logout} = useStore(userStore);
+  const {userName, logout} = useStore(userStore);
+  useQueryUserInfo();
 
   function onLogout() {
     showModal({
@@ -94,7 +95,7 @@ export default function App() {
           );
         })}
 
-        {token ? (
+        {userName ? (
           <Button
             onClick={onLogout}
             className='mt-10 text-sm bg-primary h-10 text-white leading-10 rounded-full'

+ 1 - 4
src/pages/index/login/hooks.js

@@ -1,8 +1,7 @@
 import {login} from '@apis';
 import {useMutation} from '@tanstack/react-query';
 import {useEffect, useState} from 'react';
-import {showToast, setStorageSync} from '@tarojs/taro';
-import {USER_TOKEN_STORAGE} from '@utils';
+import {showToast} from '@tarojs/taro';
 import {useStore} from 'zustand';
 import {userStore} from '@stores';
 
@@ -32,14 +31,12 @@ export function useLogin(userName, password, {onClose}) {
     onSuccess(data) {
       if (data.code === '200') {
         const userData = {
-          token: data.data.token,
           userName: data.data.userName,
           power: data.data.power,
         };
 
         onClose();
         showToast({title: '登录成功', icon: 'success'});
-        setStorageSync(USER_TOKEN_STORAGE, userData);
         setUser(userData);
       }
     },

+ 13 - 7
src/stores/user.js

@@ -1,26 +1,32 @@
-import {removeStorageSync, getStorageSync} from '@tarojs/taro';
+import {setStorageSync, removeStorageSync, getStorageSync} from '@tarojs/taro';
 import {USER_TOKEN_STORAGE} from '@utils';
 import {createStore} from 'zustand';
 
 export const userStore = createStore(function (set) {
   const storage = getStorageSync(USER_TOKEN_STORAGE);
-  let token = '',
-    userName = '',
-    power = '000000';
+  let userName = '',
+    power = '0x000000';
 
   if (storage) {
-    ({token, userName, power} = storage);
+    ({userName, power} = storage);
   }
 
   return {
-    token,
     userName,
     power,
     init(data) {
       set(data);
+      setStorageSync(USER_TOKEN_STORAGE, data);
+    },
+    setPower(power) {
+      set(function (prev) {
+        setStorageSync(USER_TOKEN_STORAGE, {userName: prev.userName, power});
+
+        return {power};
+      });
     },
     logout() {
-      set({token: '', userName: '', power: '000000'});
+      set({token: '', userName: '', power: '0x000000'});
       removeStorageSync(USER_TOKEN_STORAGE);
     },
   };

+ 1 - 1
src/utils/constants.js

@@ -1,7 +1,7 @@
 /** 请求地址 */
 export const NETWORK_URL =
   process.env.NODE_ENV === 'development'
-    ? 'http://192.168.0.147:8090'
+    ? 'https://tms.tuyatrip.com'
     : 'https://tms.tuyatrip.com';
 /** token存储 */
 export const USER_TOKEN_STORAGE = 'userToken';