fix: 修改头像

This commit is contained in:
郭文文 2026-01-26 13:55:30 +08:00
parent 9b34b51caf
commit e89b3c0bd8
2 changed files with 42 additions and 7 deletions

View File

@ -1,3 +1,4 @@
import * as ImagePicker from 'expo-image-picker'
import { Ionicons } from '@expo/vector-icons' import { Ionicons } from '@expo/vector-icons'
import { Block, ConfirmModal, Img, Input, Text, Toast } from '@share/components' import { Block, ConfirmModal, Img, Input, Text, Toast } from '@share/components'
import { router, Stack } from 'expo-router' import { router, Stack } from 'expo-router'
@ -5,8 +6,10 @@ import { observer } from 'mobx-react-lite'
import React, { useEffect, useState } from 'react' import React, { useEffect, useState } from 'react'
import { ScrollView } from 'react-native' import { ScrollView } from 'react-native'
import { imgPicker } from '@/@share/apis'
import { authClient } from '@/lib/auth' import { authClient } from '@/lib/auth'
import { userStore } from '@/stores' import { userStore } from '@/stores'
import { uploadFile } from '@/utils'
type InfoItem = { type InfoItem = {
id: string id: string
@ -55,9 +58,41 @@ function EditNicknameModal({ initialName, onConfirm, onCancel }: EditNicknameMod
export default observer(function ProfilePage() { export default observer(function ProfilePage() {
const { user } = userStore const { user } = userStore
const handleEditAvatar = () => { const handleEditAvatar = async () => {
// TODO: 打开相册/拍照更换头像 try {
Toast.show({ title: '更换头像功能开发中' }) const assets = await imgPicker({
maxImages: 1,
type: ImagePicker.MediaTypeOptions.Images,
resultType: 'asset',
})
const asset = assets[0] as ImagePicker.ImagePickerAsset
if (!asset) return
Toast.showLoading({ title: '上传中...', duration: 0 })
const url = await uploadFile({
uri: asset.uri,
mimeType: asset.mimeType ?? 'image/jpeg',
fileName: asset.fileName ?? `avatar_${Date.now()}.jpg`,
})
const res = await authClient.updateUser({ image: url })
const err = (res as { error?: { message?: string } }).error
if (err) {
Toast.hideLoading()
Toast.show({ title: err.message || '头像更新失败,请重试' })
return
}
if (userStore.user) {
userStore.setUser({ ...userStore.user, image: url })
}
Toast.hideLoading()
Toast.show({ title: '头像已更新' })
} catch (e) {
Toast.hideLoading()
if (e instanceof Error && e.message !== '未选择任何图片') {
Toast.show({ title: '上传失败,请重试' })
}
}
} }
const handleEditNickname = () => { const handleEditNickname = () => {

View File

@ -106,12 +106,12 @@ export default observer(function SettingsPage() {
)} )}
</Block> </Block>
<Block className="flex-1"> <Block className="flex-1">
<Text className="text-[16px] font-[700] text-black">{user?.name || user?.email || '未登录'}</Text> <Text className="text-[16px] font-[700] text-black">{user?.name || user?.phoneNumber || '未登录'}</Text>
{user?.email && user?.name && ( {user?.phoneNumber && user?.name && (
<Text className="mt-[4px] text-[12px] text-gray-500">{user.email}</Text> <Text className="mt-[4px] text-[12px] text-gray-500">{user.phoneNumber}</Text>
)} )}
</Block> </Block>
<Ionicons color="#9CA3AF" name="chevron-forward" size={20} /> <Ionicons color="#323232" name="chevron-forward" size={20} />
</Block> </Block>
) )