blob: 55ce6b69c0c615c1e3889fb2771121e9dfb23b03 [file] [log] [blame]
Krishya2283d882025-05-27 22:25:19 +08001import React, { useEffect, useState } from 'react';
2import { getExperience, updateExperience, checkUpgrade, upgradeUserLevel } from '../../api/level';
3import LevelCard from '../../components/LevelCard';
4
5const user_id = 1; // 实际项目中请从用户上下文获取
6
7const LevelPage = () => {
8 const [levelInfo, setLevelInfo] = useState(null);
9 const [upgradeStatus, setUpgradeStatus] = useState(null);
10 const [message, setMessage] = useState('');
11
12 const fetchExperience = async () => {
13 try {
14 const res = await getExperience(user_id);
15 setLevelInfo(res.data);
16 } catch (error) {
17 console.error(error);
18 }
19 };
20
21 const handleUpdate = async () => {
22 try {
23 const res = await updateExperience({ user_id, experience: 50, source: '签到' });
24 setMessage(res.data.message || '经验更新成功');
25 fetchExperience();
26 } catch (error) {
27 console.error(error);
28 }
29 };
30
31 const handleCheckUpgrade = async () => {
32 try {
33 const res = await checkUpgrade(user_id);
34 setUpgradeStatus(res.data);
35 } catch (error) {
36 console.error(error);
37 }
38 };
39
40 const handleUpgrade = async () => {
41 try {
42 const res = await upgradeUserLevel({ user_id, can_upgrade: true });
43 setMessage(res.data.message || '升级成功');
44 fetchExperience();
45 } catch (error) {
46 setMessage(error.response?.data?.message || '升级失败');
47 }
48 };
49
50 useEffect(() => {
51 fetchExperience();
52 }, []);
53
54 return (
55 <div className="max-w-xl mx-auto p-4">
56 <h1 className="text-2xl font-bold mb-4">我的等级</h1>
57 {levelInfo && (
58 <LevelCard
59 level={levelInfo.level}
60 current={levelInfo.current_experience}
61 next={levelInfo.next_level_experience}
62 />
63 )}
64
65 <div className="space-x-2 mb-4">
66 <button
67 onClick={handleUpdate}
68 className="px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700"
69 >
70 模拟签到加经验
71 </button>
72 <button
73 onClick={handleCheckUpgrade}
74 className="px-4 py-2 bg-green-600 text-white rounded hover:bg-green-700"
75 >
76 检查是否可升级
77 </button>
78 </div>
79
80 {upgradeStatus && (
81 <div className="mb-4">
82 {upgradeStatus.can_upgrade ? (
83 <button
84 onClick={handleUpgrade}
85 className="px-4 py-2 bg-purple-600 text-white rounded hover:bg-purple-700"
86 >
87 升级到下一级
88 </button>
89 ) : (
90 <p className="text-gray-700">当前还不能升级。</p>
91 )}
92 </div>
93 )}
94
95 {message && <div className="text-sm text-green-700 mt-2">{message}</div>}
96 </div>
97 );
98};
99
100export default LevelPage;