diff --git a/client/mobile/mobile_app.tsx b/client/mobile/mobile_app.tsx
index 8430e30..8f3b4ce 100644
--- a/client/mobile/mobile_app.tsx
+++ b/client/mobile/mobile_app.tsx
@@ -191,72 +191,7 @@ const ErrorPage = () => {
);
};
-// 添加个人页面组件
-const ProfilePage = () => {
- const { logout, user } = useAuth();
- const navigate = useNavigate();
-
- const handleLogout = async () => {
- if (confirm('确定要退出登录吗?')) {
- await logout();
- navigate('/mobile/login');
- }
- };
-
- return (
-
-
我的
-
-
-
- {user?.avatar ? (
-

- ) : (
-
用户
- )}
-
-
-
{user?.nickname || user?.username || '未登录用户'}
-
个人信息
-
-
-
-
-
- 设置
-
-
-
- 账号安全
- ›
-
-
- 通知设置
- ›
-
-
- 隐私
- ›
-
-
- 关于
- ›
-
-
-
-
-
- );
-};
+import ProfilePage from './pages_profile.tsx'
// 移动端布局组件 - 包含底部导航
const MobileLayout = () => {
diff --git a/client/mobile/pages_profile.tsx b/client/mobile/pages_profile.tsx
index 6fc9456..0ed74c4 100644
--- a/client/mobile/pages_profile.tsx
+++ b/client/mobile/pages_profile.tsx
@@ -1,63 +1,114 @@
import React from 'react'
import { useNavigate } from 'react-router'
import { useForm } from 'react-hook-form'
+import { useQuery, useMutation } from '@tanstack/react-query'
import { UserAPI } from './api.ts'
import type { User } from '../share/types.ts'
+import { useAuth } from './hooks.tsx'
export default function ProfilePage() {
const navigate = useNavigate()
- const { register, handleSubmit, formState: { errors }, setValue } = useForm & { password?: string }>()
- const [loading, setLoading] = React.useState(false)
- const [user, setUser] = React.useState(null)
+ const { register, handleSubmit, formState: { errors }, setValue } = useForm<{
+ username: string
+ nickname: string
+ email: string
+ phone?: string
+ password?: string
+ }>()
// 获取当前用户信息
- React.useEffect(() => {
- const fetchUser = async () => {
- try {
- const res = await UserAPI.getUsers({ limit: 1 })
- if (res.data?.length > 0) {
- const userData = res.data[0]
- setUser(userData)
- setValue('username', userData.username)
- setValue('nickname', userData.nickname)
- setValue('email', userData.email)
- setValue('phone', userData.phone)
- }
- } catch (error) {
- console.error('获取用户信息失败:', error)
+ const { data: user } = useQuery({
+ queryKey: ['currentUser'],
+ queryFn: async () => {
+ const res = await UserAPI.getUsers({ limit: 1 })
+ if (res.data?.length > 0) {
+ const userData = res.data[0]
+ setValue('username', userData.username)
+ setValue('nickname', userData.nickname || '')
+ setValue('email', userData.email || '')
+ setValue('phone', userData.phone || '')
+ return userData
}
+ return null
}
- fetchUser()
- }, [setValue])
+ })
- // 提交表单更新用户信息
- const onSubmit = async (data: User) => {
- try {
- setLoading(true)
- if (!user?.id) return
-
- const updatedUser = await UserAPI.updateUser(user.id, {
- nickname: data.nickname,
- email: data.email,
- phone: data.phone,
- ...(data.password ? { password: data.password } : {})
- })
-
- setUser(updatedUser.data)
- alert('更新成功')
- } catch (error) {
- console.error('更新失败:', error)
- alert('更新失败')
- } finally {
- setLoading(false)
+
+ // 更新用户信息
+ const { mutate: updateUser, isPending } = useMutation({
+ mutationFn: async (data: {
+ nickname: string
+ email: string
+ phone?: string
+ password?: string
+ }) => {
+ if (!user?.id) throw new Error('用户ID不存在')
+ return UserAPI.updateUser(user.id, {
+ nickname: data.nickname,
+ email: data.email,
+ phone: data.phone,
+ ...(data.password ? { password: data.password } : {})
+ })
+ },
+ onSuccess: (updatedUser) => {
+ alert('更新成功')
+ },
+ onError: (error) => {
+ console.error('更新失败:', error)
+ alert('更新失败')
+ }
+ })
+
+ const onSubmit = (data: {
+ username: string
+ nickname: string
+ email: string
+ phone?: string
+ password?: string
+ }) => {
+ updateUser({
+ nickname: data.nickname,
+ email: data.email,
+ phone: data.phone,
+ password: data.password
+ })
+ }
+
+ const { logout } = useAuth()
+
+ const handleLogout = async () => {
+ if (confirm('确定要退出登录吗?')) {
+ await logout()
+ navigate('/mobile/login')
}
}
return (
-
-
个人信息
+
+
我的
+
+
+
+ {user?.avatar ? (
+

+ ) : (
+
用户
+ )}
+
+
+
{user?.nickname || user?.username || '未登录用户'}
+
个人信息
+
+
+
-
)
}
\ No newline at end of file