From 7c715d9a85ada3a78c88381e3c11a121bff7f9ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Fri, 5 Sep 2025 12:22:43 +0800 Subject: [PATCH] =?UTF-8?q?refactor(user):=20=E9=87=8D=E6=9E=84=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=8D=A1=E7=89=87=E7=BB=84=E4=BB=B6=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E7=99=BB=E5=BD=95=E7=8A=B6=E6=80=81=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E9=80=BB=E8=BE=91-=20=E9=87=8D=E6=9E=84=E4=BA=86=20UserCard=20?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=EF=BC=8C=E7=BB=9F=E4=B8=80=E4=BA=86=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E5=92=8C=E5=90=8E=E5=8F=B0=E7=9A=84=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=20-=20=E7=A7=BB=E9=99=A4=E4=BA=86=E5=86=97=E4=BD=99=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=8E=B7=E5=8F=96=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E4=BD=BF=E7=94=A8=20useUserData=20Hook=20-?= =?UTF-8?q?=20=E4=BC=98=E5=8C=96=E4=BA=86=E7=99=BB=E5=BD=95=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=9B=B4=E6=96=B0=E6=B5=81=E7=A8=8B=EF=BC=8C=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=20loginUser=20=E6=96=B9=E6=B3=95=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E5=A4=84=E7=90=86=E7=99=BB=E5=BD=95=20-=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BA=86=E7=99=BB=E5=BD=95=E6=88=90=E5=8A=9F=E5=90=8E=E7=9A=84?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E5=92=8C=E9=A1=B5=E9=9D=A2=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LOGIN_STATUS_UPDATE_TEST.md | 8 ++ src/admin/components/UserCard.tsx | 133 ++++++++++--------------- src/pages/user/components/UserCard.tsx | 63 ++---------- 3 files changed, 70 insertions(+), 134 deletions(-) diff --git a/LOGIN_STATUS_UPDATE_TEST.md b/LOGIN_STATUS_UPDATE_TEST.md index 9eba6dd..1d6a338 100644 --- a/LOGIN_STATUS_UPDATE_TEST.md +++ b/LOGIN_STATUS_UPDATE_TEST.md @@ -8,6 +8,14 @@ 1. **Header组件** (`src/pages/index/Header.tsx`) 2. **UserCard组件** (`src/pages/user/components/UserCard.tsx`) +3. **Admin UserCard组件** (`src/admin/components/UserCard.tsx`) + +## 额外优化:清理冗余代码 +发现 UserCard 组件中存在冗余的数据获取逻辑: +- `useUserData` Hook 已经动态获取了优惠券、礼品卡、积分、余额等数据 +- 删除了重复的本地状态:`couponCount`, `pointsCount`, `giftCount` +- 删除了重复的数据获取方法:`loadUserStats` +- 统一使用 `useUserData` 提供的数据 ### 主要修改内容 diff --git a/src/admin/components/UserCard.tsx b/src/admin/components/UserCard.tsx index 132dc49..e7f4cdd 100644 --- a/src/admin/components/UserCard.tsx +++ b/src/admin/components/UserCard.tsx @@ -1,21 +1,23 @@ import {Button} from '@nutui/nutui-react-taro' import {Avatar, Tag} from '@nutui/nutui-react-taro' -import {getUserInfo, getWxOpenId} from '@/api/layout'; +import {getWxOpenId} from '@/api/layout'; import Taro from '@tarojs/taro'; -import {useEffect, useState} from "react"; -import {User} from "@/api/system/user/model"; +import {useEffect} from "react"; import navTo from "@/utils/common"; import {TenantId} from "@/config/app"; -import {getMyAvailableCoupons} from "@/api/shop/shopUserCoupon"; import {useUser} from "@/hooks/useUser"; +import {useUserData} from "@/hooks/useUserData"; function UserCard() { - const {getDisplayName, getRoleName} = useUser(); - const [IsLogin, setIsLogin] = useState(false) - const [userInfo, setUserInfo] = useState() - const [couponCount, setCouponCount] = useState(0) - // const [pointsCount, setPointsCount] = useState(0) - const [giftCount, setGiftCount] = useState(0) + const { + user, + isLoggedIn, + loginUser, + fetchUserInfo, + getDisplayName, + getRoleName + } = useUser(); + const {data} = useUserData() useEffect(() => { // Taro.getSetting:获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限。 @@ -34,67 +36,27 @@ function UserCard() { }); }, []); - const loadUserStats = (userId: number) => { - // 加载优惠券数量 - getMyAvailableCoupons() - .then((coupons: any) => { - setCouponCount(coupons?.length || 0) - }) - .catch((error: any) => { - console.error('Coupon count error:', error) - }) - // 加载积分数量 - console.log(userId) - // getUserPointsStats(userId) - // .then((res: any) => { - // setPointsCount(res.currentPoints || 0) - // }) - // .catch((error: any) => { - // console.error('Points stats error:', error) - // }) - // 加载礼品劵数量 - setGiftCount(0) - // pageUserGiftLog({userId, page: 1, limit: 1}).then(res => { - // setGiftCount(res.count || 0) - // }) - } - - const reload = () => { - Taro.getUserInfo({ - success: (res) => { - const avatar = res.userInfo.avatarUrl; - setUserInfo({ - avatar, - nickname: res.userInfo.nickName, - sexName: res.userInfo.gender == 1 ? '男' : '女' - }) - getUserInfo().then((data) => { - if (data) { - setUserInfo(data) - setIsLogin(true); - Taro.setStorageSync('UserId', data.userId) - - // 加载用户统计数据 - if (data.userId) { - loadUserStats(data.userId) - } - - // 获取openId - if (!data.openid) { - Taro.login({ - success: (res) => { - getWxOpenId({code: res.code}).then(() => { - }) - } - }) - } + const reload = async () => { + // 如果已登录,获取最新用户信息 + if (isLoggedIn) { + try { + const data = await fetchUserInfo(); + if (data) { + // 获取openId + if (!data.openid) { + Taro.login({ + success: (res) => { + getWxOpenId({code: res.code}).then(() => { + }) + } + }) } - }).catch(() => { - console.log('未登录') - }); + } + } catch (error) { + console.error('获取用户信息失败:', error) } - }); + } }; const showAuthModal = () => { @@ -132,7 +94,7 @@ function UserCard() { }; /* 获取用户手机号 */ - const handleGetPhoneNumber = ({detail}: {detail: {code?: string, encryptedData?: string, iv?: string}}) => { + const handleGetPhoneNumber = ({detail}: { detail: { code?: string, encryptedData?: string, iv?: string } }) => { const {code, encryptedData, iv} = detail Taro.login({ success: function () { @@ -163,10 +125,21 @@ function UserCard() { return false; } // 登录成功 - Taro.setStorageSync('access_token', res.data.data.access_token) - Taro.setStorageSync('UserId', res.data.data.user.userId) - setUserInfo(res.data.data.user) - setIsLogin(true) + const token = res.data.data.access_token; + const userData = res.data.data.user; + + // 使用useUser Hook的loginUser方法更新状态 + loginUser(token, userData); + + // 显示登录成功提示 + Taro.showToast({ + title: '登录成功', + icon: 'success', + duration: 1500 + }) + + // 刷新页面数据 + reload(); } }) } else { @@ -192,17 +165,17 @@ function UserCard() {
{ - IsLogin ? ( - + isLoggedIn ? ( + ) : ( ) }
{getDisplayName()}
- {IsLogin ? ( + {isLoggedIn ? (
@@ -222,17 +195,17 @@ function UserCard() {
navTo('/user/wallet/wallet', true)}> 余额 - ¥ {userInfo?.balance || '0.00'} + ¥ {data?.balance || '0.00'}
navTo('/user/coupon/index', true)}> 优惠券 - {couponCount} + {data?.coupons || 0}
navTo('/user/gift/index', true)}> 礼品卡 - {giftCount} + {data?.giftCards || 0}
{/*
*/} {/* 积分*/} diff --git a/src/pages/user/components/UserCard.tsx b/src/pages/user/components/UserCard.tsx index e9be33b..7640167 100644 --- a/src/pages/user/components/UserCard.tsx +++ b/src/pages/user/components/UserCard.tsx @@ -2,13 +2,11 @@ import {Button} from '@nutui/nutui-react-taro' import {Avatar, Tag} from '@nutui/nutui-react-taro' import {View, Text} from '@tarojs/components' import {Scan} from '@nutui/icons-react-taro'; -import {getUserInfo, getWxOpenId} from '@/api/layout'; +import {getWxOpenId} from '@/api/layout'; import Taro from '@tarojs/taro'; -import {useEffect, useState} from "react"; -import {User} from "@/api/system/user/model"; +import {useEffect} from "react"; import navTo from "@/utils/common"; import {TenantId} from "@/config/app"; -import {getMyAvailableCoupons} from "@/api/shop/shopUserCoupon"; import {useUser} from "@/hooks/useUser"; import {useUserData} from "@/hooks/useUserData"; @@ -22,19 +20,7 @@ function UserCard() { getDisplayName, getRoleName } = useUser(); - const { data, refresh } = useUserData() - const [couponCount, setCouponCount] = useState(0) - const [pointsCount, setPointsCount] = useState(0) - const [giftCount, setGiftCount] = useState(0) - - // 下拉刷新 - const handleRefresh = async () => { - await refresh() - Taro.showToast({ - title: '刷新成功', - icon: 'success' - }) - } + const {data} = useUserData() useEffect(() => { // Taro.getSetting:获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限。 @@ -53,32 +39,6 @@ function UserCard() { }); }, []); - const loadUserStats = (userId: number) => { - // 加载优惠券数量 - getMyAvailableCoupons() - .then((coupons: any) => { - setCouponCount(coupons?.length || 0) - }) - .catch((error: any) => { - console.error('Coupon count error:', error) - }) - - // 加载积分数量 - console.log(userId) - setPointsCount(0) - // getUserPointsStats(userId) - // .then((res: any) => { - // setPointsCount(res.currentPoints || 0) - // }) - // .catch((error: any) => { - // console.error('Points stats error:', error) - // }) - // 加载礼品劵数量 - setGiftCount(0) - // pageUserGiftLog({userId, page: 1, limit: 1}).then(res => { - // setGiftCount(res.count || 0) - // }) - } const reload = async () => { // 如果已登录,获取最新用户信息 @@ -86,11 +46,6 @@ function UserCard() { try { const data = await fetchUserInfo(); if (data) { - // 加载用户统计数据 - if (data.userId) { - loadUserStats(data.userId) - } - // 获取openId if (!data.openid) { Taro.login({ @@ -142,7 +97,7 @@ function UserCard() { }; /* 获取用户手机号 */ - const handleGetPhoneNumber = ({detail}: {detail: {code?: string, encryptedData?: string, iv?: string}}) => { + const handleGetPhoneNumber = ({detail}: { detail: { code?: string, encryptedData?: string, iv?: string } }) => { const {code, encryptedData, iv} = detail Taro.login({ success: function () { @@ -234,15 +189,15 @@ function UserCard() { ) : ''} - {isAdmin() && navTo('/user/store/verification', true)} />} + {isAdmin() && navTo('/user/store/verification', true)}/>} navTo('/user/profile/profile', true)}> + onClick={() => navTo('/user/profile/profile', true)}> {'个人资料'} navTo('/user/wallet/wallet', true)}> + onClick={() => navTo('/user/wallet/wallet', true)}> 余额 {data?.balance || '0.00'} @@ -251,12 +206,12 @@ function UserCard() { {data?.points || 0} navTo('/user/coupon/index', true)}> + onClick={() => navTo('/user/coupon/index', true)}> 优惠券 {data?.coupons || 0} navTo('/user/gift/index', true)}> + onClick={() => navTo('/user/gift/index', true)}> 礼品卡 {data?.giftCards || 0}