|
|
import http from '../../utils/api'const baseUrl = require('../../utils/baseUrl')
Page({ data: { // 用户信息
avatarUrl: '', userInfo: { user: {} }, baseUrl: baseUrl, // 弹窗状态
showFeedbackModal: false, showNicknameModal: false, showLogoutModal: false, showToast: false, // 反馈相关
feedbackContent: '', canSubmit: false, isSubmitting: false, // 编辑相关
newNickname: '', // 提示信息
toastText: '', // 表单数据
formData: { avatar: null, nickName: null }, // 上传状态
isUploadingAvatar: false, isUpdatingNickname: false },
onLoad() { this.getUserInfo() },
onShow() { this.getUserInfo() },
// 获取用户信息
getUserInfo() { http.UserInfo({ data: {}, success: (res) => { if (res.data && res.data.user) { wx.setStorageSync('userInfo', res.data) this.setData({ userInfo: res.data, avatarUrl: res.data.user?.avatar ? baseUrl + res.data.user.avatar : '' }) } }, fail: (err) => { console.error('获取用户信息失败:', err) // 使用缓存的用户信息
const cachedUserInfo = wx.getStorageSync('userInfo') if (cachedUserInfo) { this.setData({ userInfo: cachedUserInfo, avatarUrl: cachedUserInfo.user?.avatar ? baseUrl + cachedUserInfo.user.avatar : '' }) } } }) },
// 更新用户信息到服务器
updateUserInfo() { const formData = this.data.formData // 过滤掉空值
const dataToUpdate = {} if (formData.avatar) dataToUpdate.avatar = formData.avatar if (formData.nickName) dataToUpdate.nickName = formData.nickName if (Object.keys(dataToUpdate).length === 0) return http.revise({ data: dataToUpdate, success: (res) => { // 清空表单数据
this.setData({ 'formData.avatar': null, 'formData.nickName': null }) // 立即刷新用户信息
this.getUserInfo() }, fail: (err) => { console.error('更新失败:', err) this.showToast('更新失败,请重试') } }) },
// 选择头像
onChooseAvatar(e) { if (this.data.isUploadingAvatar) { this.showToast('正在上传中...') return } const { avatarUrl } = e.detail if (!avatarUrl) { this.showToast('选择头像失败') return } this.setData({ isUploadingAvatar: true }) wx.showLoading({ title: '上传中...', mask: true }) // 上传头像到服务器
wx.uploadFile({ url: baseUrl + '/common/upload', header: { 'Authorization': 'Bearer ' + wx.getStorageSync('token') }, filePath: avatarUrl, name: 'file', success: (uploadRes) => { wx.hideLoading() try { const result = JSON.parse(uploadRes.data) if (result && result.fileName) { // 立即更新本地显示
this.setData({ avatarUrl: avatarUrl, 'formData.avatar': result.fileName, 'userInfo.user.avatar': result.fileName }) // 更新到服务器
this.updateUserInfo() this.showToast('头像更新成功') } else { throw new Error('上传失败') } } catch (error) { console.error('解析上传结果失败:', error) this.showToast('上传失败,请重试') } }, fail: (err) => { wx.hideLoading() console.error('上传失败:', err) this.showToast('上传失败,请检查网络') }, complete: () => { this.setData({ isUploadingAvatar: false }) } }) },
// 编辑昵称
editNickname() { this.setData({ showNicknameModal: true, newNickname: this.data.userInfo.user?.nickName || '' }) },
hideNicknameModal() { this.setData({ showNicknameModal: false }) },
onNicknameInput(e) { this.setData({ newNickname: e.detail.value }) },
saveNickname() { const newNickname = this.data.newNickname.trim() if (!newNickname) { this.showToast('昵称不能为空') return } if (newNickname.length > 10) { this.showToast('昵称不能超过10个字符') return } // 如果昵称没有变化,直接关闭弹窗
if (newNickname === this.data.userInfo.user?.nickName) { this.hideNicknameModal() return } this.setData({ isUpdatingNickname: true }) // 立即更新本地显示
this.setData({ 'userInfo.user.nickName': newNickname, 'formData.nickName': newNickname }) // 更新到服务器
this.updateUserInfo() this.setData({ showNicknameModal: false, isUpdatingNickname: false }) this.showToast('昵称修改成功') },
// 查看问诊消息
goToConsultation() { wx.navigateTo({ url: '' }) },
// 查看问答消息
goToQA() { wx.navigateTo({ url: '' }) },
// 实名认证
goToAuth() { if (this.data.userInfo.authStatus) { this.showToast('您已完成实名认证') } else { wx.navigateTo({ url: '/pagesA/pages/attestation/attestation' }) } },
// 显示反馈弹窗
showFeedback() { this.setData({ showFeedbackModal: true, feedbackContent: '', canSubmit: false, isSubmitting: false }) },
hideFeedback() { this.setData({ showFeedbackModal: false }) },
// 反馈内容输入
onFeedbackInput(e) { const content = e.detail.value const canSubmit = content.trim().length > 0 this.setData({ feedbackContent: content, canSubmit }) },
// 提交反馈
submitFeedback() { if (!this.data.canSubmit || this.data.isSubmitting) return const content = this.data.feedbackContent.trim() if (content.length < 5) { this.showToast('请填写详细的反馈内容') return } this.setData({ isSubmitting: true }) // 提交
setTimeout(() => { console.log('提交反馈:', content) http.feedback({ data:{ content:content }, success:res=>{ if(res.code==200){ this.showToast('感谢您的反馈!') }else{ this.showToast('反馈失败!') } this.setData({ isSubmitting: false, showFeedbackModal: false }) } }) }, 1500) },
// 退出登录相关
showLogoutConfirm() { this.setData({ showLogoutModal: true }) },
hideLogoutModal() { this.setData({ showLogoutModal: false }) },
doLogout() { // 清除本地存储
wx.clearStorageSync()
// 跳转到登录页
wx.reLaunch({ url: '/pages/login/login' }) this.showToast('已退出登录') },
// 显示提示
showToast(text) { this.setData({ toastText: text, showToast: true }) setTimeout(() => { this.setData({ showToast: false }) }, 2000) },
// 下拉刷新
onPullDownRefresh() { this.getUserInfo() setTimeout(() => { wx.stopPullDownRefresh() this.showToast('刷新成功') }, 1000) },
// 分享
onShareAppMessage() { return { title: '健康守护 - 您的个人健康中心', path: '/pages/personal-center/index' } }})
|