|
|
|
@ -1,16 +1,19 @@ |
|
|
|
import http from '../../utils/api' |
|
|
|
const baseUrl = require('../../utils/baseUrl') |
|
|
|
|
|
|
|
Page({ |
|
|
|
data: { |
|
|
|
// 用户信息
|
|
|
|
avatarUrl: '', |
|
|
|
userInfo: { |
|
|
|
nickName: '', |
|
|
|
userId: '', |
|
|
|
isVerified: false |
|
|
|
user: {} |
|
|
|
}, |
|
|
|
baseUrl: baseUrl, |
|
|
|
|
|
|
|
// 弹窗状态
|
|
|
|
showFeedbackModal: false, |
|
|
|
showNicknameModal: false, |
|
|
|
showLogoutModal: false, |
|
|
|
showToast: false, |
|
|
|
|
|
|
|
// 反馈相关
|
|
|
|
@ -20,143 +23,226 @@ Page({ |
|
|
|
|
|
|
|
// 编辑相关
|
|
|
|
newNickname: '', |
|
|
|
|
|
|
|
// 提示信息
|
|
|
|
toastText: '' |
|
|
|
}, |
|
|
|
toastText: '', |
|
|
|
|
|
|
|
onLoad() { |
|
|
|
this.loadUserInfo(); |
|
|
|
// 表单数据
|
|
|
|
formData: { |
|
|
|
avatar: null, |
|
|
|
nickName: null |
|
|
|
}, |
|
|
|
|
|
|
|
// 上传状态
|
|
|
|
isUploadingAvatar: false, |
|
|
|
isUpdatingNickname: false |
|
|
|
}, |
|
|
|
|
|
|
|
// 跳转实名认证
|
|
|
|
bindrz(){ |
|
|
|
wx.navigateTo({ |
|
|
|
url: '/pagesA/pages/attestation/attestation', |
|
|
|
}) |
|
|
|
onLoad() { |
|
|
|
this.getUserInfo() |
|
|
|
}, |
|
|
|
|
|
|
|
onShow() { |
|
|
|
|
|
|
|
this.getUserInfo() |
|
|
|
}, |
|
|
|
|
|
|
|
// 加载用户信息
|
|
|
|
loadUserInfo() { |
|
|
|
// 从缓存获取用户信息
|
|
|
|
const userInfo = wx.getStorageSync('userInfo'); |
|
|
|
const avatarUrl = wx.getStorageSync('avatarUrl'); |
|
|
|
|
|
|
|
if (userInfo) { |
|
|
|
this.setData({ |
|
|
|
userInfo, |
|
|
|
avatarUrl |
|
|
|
}); |
|
|
|
} else { |
|
|
|
// 首次使用,生成默认用户信息
|
|
|
|
const defaultUserInfo = { |
|
|
|
nickName: '微信用户', |
|
|
|
isVerified: false |
|
|
|
}; |
|
|
|
|
|
|
|
wx.setStorageSync('userInfo', defaultUserInfo); |
|
|
|
this.setData({ userInfo: defaultUserInfo }); |
|
|
|
} |
|
|
|
// 获取用户信息
|
|
|
|
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) => { |
|
|
|
console.log('更新成功:', res) |
|
|
|
// 清空表单数据
|
|
|
|
this.setData({ |
|
|
|
'formData.avatar': null, |
|
|
|
'formData.nickName': null |
|
|
|
}) |
|
|
|
// 立即刷新用户信息
|
|
|
|
this.getUserInfo() |
|
|
|
}, |
|
|
|
fail: (err) => { |
|
|
|
console.error('更新失败:', err) |
|
|
|
this.showToast('更新失败,请重试') |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
|
|
|
|
// 选择头像
|
|
|
|
onChooseAvatar(e) { |
|
|
|
const { avatarUrl } = e.detail; |
|
|
|
|
|
|
|
// 显示加载
|
|
|
|
wx.showLoading({ |
|
|
|
title: '更新中...', |
|
|
|
mask: true |
|
|
|
}); |
|
|
|
if (this.data.isUploadingAvatar) { |
|
|
|
this.showToast('正在上传中...') |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
// 模拟上传过程
|
|
|
|
setTimeout(() => { |
|
|
|
this.setData({ avatarUrl }); |
|
|
|
const { avatarUrl } = e.detail |
|
|
|
if (!avatarUrl) { |
|
|
|
this.showToast('选择头像失败') |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
// 保存到缓存
|
|
|
|
wx.setStorageSync('avatarUrl', avatarUrl); |
|
|
|
this.setData({ isUploadingAvatar: true }) |
|
|
|
|
|
|
|
wx.hideLoading(); |
|
|
|
this.showToast('头像更新成功'); |
|
|
|
}, 800); |
|
|
|
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.nickName |
|
|
|
}); |
|
|
|
newNickname: this.data.userInfo.user?.nickName || '' |
|
|
|
}) |
|
|
|
}, |
|
|
|
|
|
|
|
hideNicknameModal() { |
|
|
|
this.setData({ showNicknameModal: false }); |
|
|
|
this.setData({ showNicknameModal: false }) |
|
|
|
}, |
|
|
|
|
|
|
|
onNicknameInput(e) { |
|
|
|
this.setData({ newNickname: e.detail.value }); |
|
|
|
this.setData({ newNickname: e.detail.value }) |
|
|
|
}, |
|
|
|
|
|
|
|
saveNickname() { |
|
|
|
const newNickname = this.data.newNickname.trim(); |
|
|
|
const newNickname = this.data.newNickname.trim() |
|
|
|
|
|
|
|
if (!newNickname) { |
|
|
|
this.showToast('昵称不能为空'); |
|
|
|
return; |
|
|
|
this.showToast('昵称不能为空') |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
if (newNickname.length > 20) { |
|
|
|
this.showToast('昵称不能超过20个字符'); |
|
|
|
return; |
|
|
|
if (newNickname.length > 10) { |
|
|
|
this.showToast('昵称不能超过10个字符') |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
// 更新用户信息
|
|
|
|
const updatedUserInfo = { |
|
|
|
...this.data.userInfo, |
|
|
|
nickName: newNickname |
|
|
|
}; |
|
|
|
// 如果昵称没有变化,直接关闭弹窗
|
|
|
|
if (newNickname === this.data.userInfo.user?.nickName) { |
|
|
|
this.hideNicknameModal() |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
this.setData({ isUpdatingNickname: true }) |
|
|
|
|
|
|
|
// 立即更新本地显示
|
|
|
|
this.setData({ |
|
|
|
userInfo: updatedUserInfo, |
|
|
|
showNicknameModal: false |
|
|
|
}); |
|
|
|
'userInfo.user.nickName': newNickname, |
|
|
|
'formData.nickName': newNickname |
|
|
|
}) |
|
|
|
|
|
|
|
// 更新到服务器
|
|
|
|
this.updateUserInfo() |
|
|
|
|
|
|
|
// 保存到缓存
|
|
|
|
wx.setStorageSync('userInfo', updatedUserInfo); |
|
|
|
this.setData({ |
|
|
|
showNicknameModal: false, |
|
|
|
isUpdatingNickname: false |
|
|
|
}) |
|
|
|
|
|
|
|
this.showToast('昵称修改成功'); |
|
|
|
this.showToast('昵称修改成功') |
|
|
|
}, |
|
|
|
|
|
|
|
// 查看问诊消息
|
|
|
|
goToConsultation() { |
|
|
|
wx.navigateTo({ |
|
|
|
url: '' |
|
|
|
}); |
|
|
|
}) |
|
|
|
}, |
|
|
|
|
|
|
|
// 查看问答消息
|
|
|
|
goToQA() { |
|
|
|
wx.navigateTo({ |
|
|
|
url: '' |
|
|
|
}); |
|
|
|
}) |
|
|
|
}, |
|
|
|
|
|
|
|
// 实名认证
|
|
|
|
goToAuth() { |
|
|
|
if (this.data.userInfo.isVerified) { |
|
|
|
this.showToast('您已完成实名认证'); |
|
|
|
return; |
|
|
|
if (this.data.userInfo.authStatus) { |
|
|
|
this.showToast('您已完成实名认证') |
|
|
|
} else { |
|
|
|
wx.navigateTo({ |
|
|
|
url: '/pagesA/pages/attestation/attestation' |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
wx.navigateTo({ |
|
|
|
url: '/pages/auth/realname' |
|
|
|
}); |
|
|
|
}, |
|
|
|
|
|
|
|
// 显示反馈弹窗
|
|
|
|
@ -166,77 +252,79 @@ Page({ |
|
|
|
feedbackContent: '', |
|
|
|
canSubmit: false, |
|
|
|
isSubmitting: false |
|
|
|
}); |
|
|
|
}) |
|
|
|
}, |
|
|
|
|
|
|
|
hideFeedback() { |
|
|
|
this.setData({ showFeedbackModal: false }); |
|
|
|
this.setData({ showFeedbackModal: false }) |
|
|
|
}, |
|
|
|
|
|
|
|
// 反馈内容输入
|
|
|
|
onFeedbackInput(e) { |
|
|
|
const content = e.detail.value; |
|
|
|
const canSubmit = content.trim().length > 0; |
|
|
|
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; |
|
|
|
if (!this.data.canSubmit || this.data.isSubmitting) return |
|
|
|
|
|
|
|
const content = this.data.feedbackContent.trim(); |
|
|
|
const content = this.data.feedbackContent.trim() |
|
|
|
if (content.length < 5) { |
|
|
|
this.showToast('请填写详细的反馈内容'); |
|
|
|
return; |
|
|
|
this.showToast('请填写详细的反馈内容') |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
this.setData({ isSubmitting: true }); |
|
|
|
this.setData({ isSubmitting: true }) |
|
|
|
|
|
|
|
// 模拟提交到服务器
|
|
|
|
// 提交
|
|
|
|
setTimeout(() => { |
|
|
|
console.log('提交反馈:', content); |
|
|
|
|
|
|
|
this.setData({ |
|
|
|
isSubmitting: false, |
|
|
|
showFeedbackModal: false |
|
|
|
}); |
|
|
|
|
|
|
|
this.showToast('感谢您的反馈!'); |
|
|
|
|
|
|
|
// 这里应该是实际的API调用
|
|
|
|
// wx.request({
|
|
|
|
// url: 'https://your-api.com/feedback',
|
|
|
|
// method: 'POST',
|
|
|
|
// data: { content },
|
|
|
|
// success: (res) => {
|
|
|
|
// this.showToast('提交成功');
|
|
|
|
// },
|
|
|
|
// complete: () => {
|
|
|
|
// this.setData({
|
|
|
|
// isSubmitting: false,
|
|
|
|
// showFeedbackModal: false
|
|
|
|
// });
|
|
|
|
// }
|
|
|
|
// });
|
|
|
|
}, 1500); |
|
|
|
console.log('提交反馈:', content) |
|
|
|
http.feedback({ |
|
|
|
data:{ |
|
|
|
content:content |
|
|
|
}, |
|
|
|
success:res=>{ |
|
|
|
console.log(111111,res); |
|
|
|
if(res.code==200){ |
|
|
|
this.showToast('感谢您的反馈!') |
|
|
|
}else{ |
|
|
|
this.showToast('反馈失败!') |
|
|
|
} |
|
|
|
this.setData({ |
|
|
|
isSubmitting: false, |
|
|
|
showFeedbackModal: false |
|
|
|
}) |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
}, 1500) |
|
|
|
}, |
|
|
|
|
|
|
|
// 关于我们
|
|
|
|
goToAbout() { |
|
|
|
wx.navigateTo({ |
|
|
|
url: '/pages/about/index' |
|
|
|
}); |
|
|
|
// 退出登录相关
|
|
|
|
showLogoutConfirm() { |
|
|
|
this.setData({ showLogoutModal: true }) |
|
|
|
}, |
|
|
|
|
|
|
|
// 设置
|
|
|
|
goToSettings() { |
|
|
|
wx.navigateTo({ |
|
|
|
url: '/pages/settings/index' |
|
|
|
}); |
|
|
|
hideLogoutModal() { |
|
|
|
this.setData({ showLogoutModal: false }) |
|
|
|
}, |
|
|
|
|
|
|
|
doLogout() { |
|
|
|
// 清除本地存储
|
|
|
|
wx.clearStorageSync() |
|
|
|
|
|
|
|
// 跳转到登录页
|
|
|
|
wx.reLaunch({ |
|
|
|
url: '/pages/login/login' |
|
|
|
}) |
|
|
|
this.showToast('已退出登录') |
|
|
|
}, |
|
|
|
|
|
|
|
// 显示提示
|
|
|
|
@ -244,22 +332,21 @@ Page({ |
|
|
|
this.setData({ |
|
|
|
toastText: text, |
|
|
|
showToast: true |
|
|
|
}); |
|
|
|
}) |
|
|
|
|
|
|
|
setTimeout(() => { |
|
|
|
this.setData({ showToast: false }); |
|
|
|
}, 2000); |
|
|
|
this.setData({ showToast: false }) |
|
|
|
}, 2000) |
|
|
|
}, |
|
|
|
|
|
|
|
// 下拉刷新
|
|
|
|
onPullDownRefresh() { |
|
|
|
this.loadUserInfo(); |
|
|
|
this.checkUnreadMessages(); |
|
|
|
this.getUserInfo() |
|
|
|
|
|
|
|
setTimeout(() => { |
|
|
|
wx.stopPullDownRefresh(); |
|
|
|
this.showToast('刷新成功'); |
|
|
|
}, 1000); |
|
|
|
wx.stopPullDownRefresh() |
|
|
|
this.showToast('刷新成功') |
|
|
|
}, 1000) |
|
|
|
}, |
|
|
|
|
|
|
|
// 分享
|
|
|
|
@ -267,6 +354,6 @@ Page({ |
|
|
|
return { |
|
|
|
title: '健康守护 - 您的个人健康中心', |
|
|
|
path: '/pages/personal-center/index' |
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
}) |