blob: 55ce6b69c0c615c1e3889fb2771121e9dfb23b03 [file] [log] [blame]
import React, { useEffect, useState } from 'react';
import { getExperience, updateExperience, checkUpgrade, upgradeUserLevel } from '../../api/level';
import LevelCard from '../../components/LevelCard';
const user_id = 1; // 实际项目中请从用户上下文获取
const LevelPage = () => {
const [levelInfo, setLevelInfo] = useState(null);
const [upgradeStatus, setUpgradeStatus] = useState(null);
const [message, setMessage] = useState('');
const fetchExperience = async () => {
try {
const res = await getExperience(user_id);
setLevelInfo(res.data);
} catch (error) {
console.error(error);
}
};
const handleUpdate = async () => {
try {
const res = await updateExperience({ user_id, experience: 50, source: '签到' });
setMessage(res.data.message || '经验更新成功');
fetchExperience();
} catch (error) {
console.error(error);
}
};
const handleCheckUpgrade = async () => {
try {
const res = await checkUpgrade(user_id);
setUpgradeStatus(res.data);
} catch (error) {
console.error(error);
}
};
const handleUpgrade = async () => {
try {
const res = await upgradeUserLevel({ user_id, can_upgrade: true });
setMessage(res.data.message || '升级成功');
fetchExperience();
} catch (error) {
setMessage(error.response?.data?.message || '升级失败');
}
};
useEffect(() => {
fetchExperience();
}, []);
return (
<div className="max-w-xl mx-auto p-4">
<h1 className="text-2xl font-bold mb-4">我的等级</h1>
{levelInfo && (
<LevelCard
level={levelInfo.level}
current={levelInfo.current_experience}
next={levelInfo.next_level_experience}
/>
)}
<div className="space-x-2 mb-4">
<button
onClick={handleUpdate}
className="px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700"
>
模拟签到加经验
</button>
<button
onClick={handleCheckUpgrade}
className="px-4 py-2 bg-green-600 text-white rounded hover:bg-green-700"
>
检查是否可升级
</button>
</div>
{upgradeStatus && (
<div className="mb-4">
{upgradeStatus.can_upgrade ? (
<button
onClick={handleUpgrade}
className="px-4 py-2 bg-purple-600 text-white rounded hover:bg-purple-700"
>
升级到下一级
</button>
) : (
<p className="text-gray-700">当前还不能升级。</p>
)}
</div>
)}
{message && <div className="text-sm text-green-700 mt-2">{message}</div>}
</div>
);
};
export default LevelPage;