diff --git a/backend/app/schemas/user.py b/backend/app/schemas/user.py index c7d4876..9ebfb45 100644 --- a/backend/app/schemas/user.py +++ b/backend/app/schemas/user.py @@ -27,6 +27,7 @@ class UserProfileUpdate(BaseModel): multiple_pregnancy: Optional[str] = None pregnancy_count: Optional[int] = None emergency_contact: Optional[EmergencyContactSchema] = None + avatar_url: Optional[str] = None class OnboardingRequest(BaseModel): diff --git a/frontend/src/app/pages/LoginPage.tsx b/frontend/src/app/pages/LoginPage.tsx index b339675..43a3190 100644 --- a/frontend/src/app/pages/LoginPage.tsx +++ b/frontend/src/app/pages/LoginPage.tsx @@ -3,7 +3,7 @@ import { useNavigate } from "react-router"; import { motion } from "motion/react"; import { Heart } from "lucide-react"; import { useUser } from "../context/UserContext"; -import { devLogin, createDummyToken } from "../services/api"; +import { devLogin, createDummyToken, updateUserProfile } from "../services/api"; import { debugLog, clearDebugLogs } from "../services/debug"; export function LoginPage() { @@ -35,6 +35,18 @@ export function LoginPage() { setTokenAndUser(token, { id: String(uid), openid: openidParam, phone }); debugLog(`setTokenAndUser: id=${uid}, openid=${openidParam}, phone=${phone}`); + // 同步昵称和头像到后端 + const nameParam = params.get('name'); + const avatarParam = params.get('avatar'); + if (nameParam || avatarParam) { + const updateData: Record = {}; + if (nameParam) updateData.name = decodeURIComponent(nameParam); + if (avatarParam) updateData.avatar_url = decodeURIComponent(avatarParam); + updateUserProfile(updateData).then(() => { + debugLog(`synced: name=${nameParam}, avatar=${(avatarParam || '').substring(0, 30)}...`); + }).catch((e) => debugLog(`sync error: ${e.message}`)); + } + fetchProfile().then((dto) => { if (dto) debugLog(`fetchProfile: name=${dto.name}, phone=${dto.phone}, onboarded=${dto.is_onboarded}`); navigate(dto?.is_onboarded ? "/home" : "/onboarding", { replace: true }); diff --git a/frontend/src/app/pages/ProfilePage.tsx b/frontend/src/app/pages/ProfilePage.tsx index df5a785..cfab072 100644 --- a/frontend/src/app/pages/ProfilePage.tsx +++ b/frontend/src/app/pages/ProfilePage.tsx @@ -32,6 +32,7 @@ interface UserInfo { phone: string; email: string; address: string; + avatar_url: string | null; lastPeriod: string; dueDate: string; currentWeek: number; @@ -59,6 +60,7 @@ export function ProfilePage() { phone: user.phone || "未设置", email: "", address: "", + avatar_url: user.avatar_url || null, lastPeriod: user.lastPeriodDate || "", dueDate: user.dueDate || "", currentWeek: user.currentWeek, @@ -232,9 +234,13 @@ export function ProfilePage() {
-
- -
+ {userInfo.avatar_url ? ( + 头像 + ) : ( +
+ +
+ )} @@ -252,6 +258,26 @@ export function ProfilePage() { + {/* 基本信息 */} + +

+ + 基本信息 +

+ + + +
+ {/* 孕期信息 */}