0.3.0.0
This commit is contained in:
@@ -27,6 +27,7 @@ export default function MemberProfilePage() {
|
||||
const [isEditing, setIsEditing] = useState(false)
|
||||
const [avatarBlobUrl, setAvatarBlobUrl] = useState<string | undefined>(undefined)
|
||||
const [isUploadingAvatar, setIsUploadingAvatar] = useState(false)
|
||||
const [lastSaveTime, setLastSaveTime] = useState(Date.now())
|
||||
|
||||
// 未登录时重定向到登录页
|
||||
useEffect(() => {
|
||||
@@ -94,9 +95,10 @@ export default function MemberProfilePage() {
|
||||
)
|
||||
}
|
||||
|
||||
const handleSave = (updatedMember: FamilyMember) => {
|
||||
updateMember(updatedMember.id, updatedMember)
|
||||
const handleSave = async (updatedMember: FamilyMember) => {
|
||||
await updateMember(updatedMember.id, updatedMember)
|
||||
setIsEditing(false)
|
||||
setLastSaveTime(Date.now())
|
||||
}
|
||||
|
||||
const handleDelete = async () => {
|
||||
@@ -173,6 +175,7 @@ export default function MemberProfilePage() {
|
||||
|
||||
// 显示新头像
|
||||
setAvatarBlobUrl(url)
|
||||
setLastSaveTime(Date.now())
|
||||
} catch (error) {
|
||||
console.error('上传头像失败:', error)
|
||||
alert('上传头像失败: ' + (error instanceof Error ? error.message : '未知错误'))
|
||||
@@ -250,6 +253,18 @@ export default function MemberProfilePage() {
|
||||
<div className="min-h-screen flex flex-col bg-background">
|
||||
<SiteHeader />
|
||||
<main className="container mx-auto py-8 px-4 md:px-6">
|
||||
{/* 返回按钮 */}
|
||||
<div className="mb-6">
|
||||
<Button
|
||||
variant="ghost"
|
||||
onClick={() => router.push(`/members${typeof window !== 'undefined' ? window.location.search : ''}`)}
|
||||
className="gap-2 pl-0 hover:bg-transparent hover:text-primary text-2xl font-bold"
|
||||
>
|
||||
<ArrowLeft className="h-6 w-6" />
|
||||
返回成员列表
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
{/* 始祖特殊提示框 */}
|
||||
{member.isFounder && (
|
||||
<div className="mb-6 p-6 bg-gradient-to-br from-amber-50 via-orange-50 to-amber-50 border-2 border-amber-400 rounded-xl shadow-md">
|
||||
@@ -639,7 +654,10 @@ export default function MemberProfilePage() {
|
||||
<div className={`bg-card p-6 rounded-lg ${founderBorderClass} shadow-sm`}>
|
||||
<PhotoGallery
|
||||
photoIds={member.photoIds}
|
||||
onChange={(photoIds) => updateMember(member.id, { photoIds })}
|
||||
onChange={async (photoIds) => {
|
||||
await updateMember(member.id, { photoIds })
|
||||
setLastSaveTime(Date.now())
|
||||
}}
|
||||
readonly={false}
|
||||
/>
|
||||
</div>
|
||||
@@ -656,7 +674,10 @@ export default function MemberProfilePage() {
|
||||
<div className={`bg-card p-6 rounded-lg ${founderBorderClass} shadow-sm`}>
|
||||
<StoryManager
|
||||
stories={member.stories}
|
||||
onChange={(stories) => updateMember(member.id, { stories })}
|
||||
onChange={async (stories) => {
|
||||
await updateMember(member.id, { stories })
|
||||
setLastSaveTime(Date.now())
|
||||
}}
|
||||
readonly={false}
|
||||
/>
|
||||
</div>
|
||||
@@ -674,6 +695,7 @@ export default function MemberProfilePage() {
|
||||
<MemberVersionHistory
|
||||
memberId={member.id}
|
||||
treeId={currentTree?.id || ''}
|
||||
lastUpdated={lastSaveTime}
|
||||
/>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user