blob: 834e841992bb1b4c7c18f1ee43a45b86cc7f17fe [file] [log] [blame]
San3yuana2ee30b2025-06-05 21:20:17 +08001import React, { useEffect } from "react";
San3yuan4d0e8032025-04-04 17:21:40 +08002import { useAppSelector } from "../../hooks/store";
San3yuan2534d422025-04-08 21:43:18 +08003import style from "./style.module.css"
San3yuana2ee30b2025-06-05 21:20:17 +08004import { useApi } from "@/hooks/request";
5import request from "@/utils/request";
6import { getUserInfo } from "@/api/user";
7import { useAppDispatch } from "@/hooks/store";
San3yuan6f2ed692025-04-16 20:24:49 +08008interface SelfStatusProps {
9 className?: string;
10}
San3yuan4d0e8032025-04-04 17:21:40 +080011
San3yuan6f2ed692025-04-16 20:24:49 +080012const SelfStatus: React.FC<SelfStatusProps> = () => {
San3yuan2534d422025-04-08 21:43:18 +080013 const userName = useAppSelector(state => state.user.userName);
14 const role = useAppSelector(state => state.user.role);
15 const uploadTraffic = useAppSelector(state => state.user.uploadTraffic);
16 const downloadTraffic = useAppSelector(state => state.user.downloadTraffic);
17 const downloadPoints = useAppSelector(state => state.user.downloadPoints);
18 const avatar = useAppSelector(state => state.user.avatar);
San3yuana2ee30b2025-06-05 21:20:17 +080019 const dispatch = useAppDispatch();
20 const { data, refresh } = useApi(() => request.get(getUserInfo), false);
21 useEffect(() => {
22 if (avatar.length === 0) {
23 refresh(); // 触发 API 请求
24 }
25 }, [avatar, refresh]);
26
27 useEffect(() => {
28 if (data) {
29 dispatch({ type: "user/getUserInfo", payload: data });
30 }
31 }, [data, dispatch]);
San3yuan2534d422025-04-08 21:43:18 +080032
33 return (
34 <div className={style.container}>
35 <div className={style.left}>
San3yuana2ee30b2025-06-05 21:20:17 +080036 {avatar && avatar.length > 0 ? (
37 <img className={style.avatar} src={avatar} alt="User Avatar" />):null}
San3yuan4d0e8032025-04-04 17:21:40 +080038 </div>
San3yuan2534d422025-04-08 21:43:18 +080039 <div className={style.right}>
40 <div className={style.info}>
41 <p className={style.userName}>{userName}</p>
San3yuan03ab0642025-04-29 18:00:25 +080042 <p className={style.role}>用户组: {role && role.trim().length? role:'N/A'}</p>
43 <p className={style.uploadTraffic}>上传量: {uploadTraffic ? uploadTraffic : 0}</p>
44 <p className={style.downloadTraffic}>下载量: {downloadTraffic ? downloadTraffic : 0}</p>
San3yuan6f2ed692025-04-16 20:24:49 +080045
San3yuan2534d422025-04-08 21:43:18 +080046 <p className={style.shareRatio}>
47 分享率: {uploadTraffic && downloadTraffic ? (uploadTraffic / downloadTraffic).toFixed(2) : "N/A"}
48 </p>
San3yuan03ab0642025-04-29 18:00:25 +080049 <p className={style.downloadPoints}>下载积分: {downloadPoints ? downloadPoints : 0}</p>
San3yuan2534d422025-04-08 21:43:18 +080050 </div>
51 <button className={style.signInButton}>签到</button>
San3yuan4d0e8032025-04-04 17:21:40 +080052 </div>
San3yuan2534d422025-04-08 21:43:18 +080053 </div>
54 );
55};
San3yuan4d0e8032025-04-04 17:21:40 +080056
San3yuan2534d422025-04-08 21:43:18 +080057export default SelfStatus;