diff --git a/src/pages/LevelPage/LevelPage.jsx b/src/pages/LevelPage/LevelPage.jsx
new file mode 100644
index 0000000..55ce6b6
--- /dev/null
+++ b/src/pages/LevelPage/LevelPage.jsx
@@ -0,0 +1,100 @@
+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;
