diff --git a/src/pages/user/profile.tsx b/src/pages/user/profile.tsx index b7afc38..0fdcd3a 100644 --- a/src/pages/user/profile.tsx +++ b/src/pages/user/profile.tsx @@ -1,229 +1,207 @@ -import React, { useState, useEffect } from 'react' -import { View, Text, Image, Input, Button as TaroButton } from '@tarojs/components' +import React, {useState, useEffect} from 'react' +import {View, Text, Image, Input, Button as TaroButton} from '@tarojs/components' import Taro from '@tarojs/taro' import BottomButton from '@/components/common/BottomButton' -import { useUser } from '@/hooks/useUser' -import { updateUser } from '@/api/system/user' -import type { User } from '@/api/system/user/model' -import { TenantId } from '@/config/app' +import {useUser} from '@/hooks/useUser' +import {updateUser} from '@/api/system/user' +import type {User} from '@/api/system/user/model' +import {TenantId} from '@/config/app' definePageConfig({ - navigationBarTitleText: '个人信息', + navigationBarTitleText: '个人信息', }) const genderOptions = ['保密', '男', '女'] const ProfilePage: React.FC = () => { - const { user, refreshUser } = useUser() - const [form, setForm] = useState>({}) - const [loading, setLoading] = useState(false) - const [showGenderSheet, setShowGenderSheet] = useState(false) + const {user, refreshUser} = useUser() + const [form, setForm] = useState>({}) + const [loading, setLoading] = useState(false) + const [showGenderSheet, setShowGenderSheet] = useState(false) - useEffect(() => { - if (user) { - setForm({ - userId: (user as any)?.userId || (user as any)?.id, - nickname: (user as any)?.nickname || '', - avatar: (user as any)?.avatar || '', - gender: (user as any)?.gender ?? 0, - phone: (user as any)?.phone || '', - merchantName: (user as any)?.merchantName || '', - address: (user as any)?.address || '', - }) - } - }, [user]) - - // 微信头像选择回调(open-type="chooseAvatar") - const handleWechatAvatar = (e: any) => { - const { avatarUrl } = e.detail - if (!avatarUrl) return - Taro.showLoading({ title: '上传中...' }) - Taro.uploadFile({ - url: 'https://server.websoft.top/api/oss/upload', - filePath: avatarUrl, - name: 'file', - header: { - 'content-type': 'application/json', - TenantId, - }, - success: (uploadRes) => { - const data = JSON.parse(uploadRes.data) - if (data.code === 0 && data.data?.url) { - setForm(prev => ({ ...prev, avatar: data.data.url })) - Taro.showToast({ title: '上传成功', icon: 'success' }) - } else { - Taro.showToast({ title: data.message || '上传失败', icon: 'none' }) + useEffect(() => { + if (user) { + setForm({ + userId: (user as any)?.userId || (user as any)?.id, + nickname: (user as any)?.nickname || '', + avatar: (user as any)?.avatar || '', + gender: (user as any)?.gender ?? 0, + phone: (user as any)?.phone || '', + merchantName: (user as any)?.merchantName || '', + address: (user as any)?.address || '', + }) } - }, - fail: () => { - Taro.showToast({ title: '上传失败', icon: 'none' }) - }, - complete: () => { - Taro.hideLoading() - }, - }) - } + }, [user]) - // 选择性别 - const handleGenderSelect = (index: number) => { - setForm(prev => ({ ...prev, gender: index })) - setShowGenderSheet(false) - } - - // 保存 - const handleSave = async () => { - if (!form.nickname?.trim()) { - Taro.showToast({ title: '昵称不能为空', icon: 'none' }) - return + // 微信头像选择回调(open-type="chooseAvatar") + const handleWechatAvatar = (e: any) => { + const {avatarUrl} = e.detail + if (!avatarUrl) return + Taro.showLoading({title: '上传中...'}) + Taro.uploadFile({ + url: 'https://server.websoft.top/api/oss/upload', + filePath: avatarUrl, + name: 'file', + header: { + 'content-type': 'application/json', + TenantId, + }, + success: (uploadRes) => { + const data = JSON.parse(uploadRes.data) + if (data.code === 0 && data.data?.url) { + setForm(prev => ({...prev, avatar: data.data.url})) + Taro.showToast({title: '上传成功', icon: 'success'}) + } else { + Taro.showToast({title: data.message || '上传失败', icon: 'none'}) + } + }, + fail: () => { + Taro.showToast({title: '上传失败', icon: 'none'}) + }, + complete: () => { + Taro.hideLoading() + }, + }) } - setLoading(true) - try { - await updateUser(form as User) - await refreshUser() - Taro.showToast({ title: '保存成功', icon: 'success' }) - } catch (error) { - console.error('保存失败:', error) - Taro.showToast({ title: '保存失败', icon: 'none' }) - } finally { - setLoading(false) + + // 选择性别 + const handleGenderSelect = (index: number) => { + setForm(prev => ({...prev, gender: index})) + setShowGenderSheet(false) } - } - const displayId = (user as any)?.userId || (user as any)?.id || '' - const registerTime = (user as any)?.createTime || (user as any)?.createdAt || '' + // 保存 + const handleSave = async () => { + if (!form.nickname?.trim()) { + Taro.showToast({title: '昵称不能为空', icon: 'none'}) + return + } + setLoading(true) + try { + await updateUser(form as User) + await refreshUser() + Taro.showToast({title: '保存成功', icon: 'success'}) + } catch (error) { + console.error('保存失败:', error) + Taro.showToast({title: '保存失败', icon: 'none'}) + } finally { + setLoading(false) + } + } - return ( - - {/* 头像 - 使用 Taro 原生 Button 支持 open-type="chooseAvatar" */} - - 头像 - - - {form.avatar ? ( - - ) : ( - - 头像 - + const displayId = (user as any)?.userId || (user as any)?.id || '' + const registerTime = (user as any)?.createTime || (user as any)?.createdAt || '' + + return ( + + {/* 用户ID */} + + 用户ID + {displayId || '未设置'} + + {/* 头像 - 使用 Taro 原生 Button 支持 open-type="chooseAvatar" */} + + 头像 + + + {form.avatar ? ( + + ) : ( + + 头像 + + )} + + {'>'} + + + + {/* 昵称 - 支持获取微信昵称 */} + + 昵称 + setForm(prev => ({...prev, nickname: e.detail.value}))} + maxlength={20} + type='nickname' + /> + + + {/* 性别 */} + setShowGenderSheet(true)}> + 性别 + + {genderOptions[form.gender ?? 0]} + {'>'} + + + + {/* 手机号 - 不可编辑 */} + + 手机号 + {form.phone || '未绑定'} + + + {/* 注册时间 */} + + 注册时间 + {registerTime || '未知'} + + + {/* 保存按钮 */} + + + {/* 性别选择弹窗 */} + {showGenderSheet && ( + + setShowGenderSheet(false)}/> + + + 选择性别 + + {genderOptions.map((label, index) => ( + handleGenderSelect(index)} + > + + {label} + + {(form.gender ?? 0) === index && } + + ))} + setShowGenderSheet(false)}> + 取消 + + + )} - - {'>'} - - - {/* 昵称 - 支持获取微信昵称 */} - - 昵称 - setForm(prev => ({ ...prev, nickname: e.detail.value }))} - maxlength={20} - type='nickname' - /> - - - {/* 性别 */} - setShowGenderSheet(true)}> - 性别 - - {genderOptions[form.gender ?? 0]} - {'>'} - - - - {/* 手机号 - 不可编辑 */} - - 手机号 - {form.phone || '未绑定'} - - - {/* 用户ID */} - - 用户ID - {displayId || '未设置'} - - - {/* 注册时间 */} - - 注册时间 - {registerTime || '未知'} - - - {/* 门店名称 */} - - 门店名称 - setForm(prev => ({ ...prev, merchantName: e.detail.value }))} - maxlength={50} - /> - - - {/* 门店地址 */} - - 门店地址 - setForm(prev => ({ ...prev, address: e.detail.value }))} - maxlength={100} - /> - - - {/* 保存按钮 */} - - - {/* 性别选择弹窗 */} - {showGenderSheet && ( - - setShowGenderSheet(false)} /> - - - 选择性别 - - {genderOptions.map((label, index) => ( - handleGenderSelect(index)} - > - - {label} - - {(form.gender ?? 0) === index && } - - ))} - setShowGenderSheet(false)}> - 取消 - - - - )} - - ) + ) } export default ProfilePage