与牧同行-小程序用户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

271 lines
5.1 KiB

2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
  1. Page({
  2. data: {
  3. // 用户信息
  4. avatarUrl: '',
  5. userInfo: {
  6. nickName: '',
  7. userId: '',
  8. isVerified: false
  9. },
  10. // 弹窗状态
  11. showFeedbackModal: false,
  12. showNicknameModal: false,
  13. showToast: false,
  14. // 反馈相关
  15. feedbackContent: '',
  16. canSubmit: false,
  17. isSubmitting: false,
  18. // 编辑相关
  19. newNickname: '',
  20. // 提示信息
  21. toastText: ''
  22. },
  23. onLoad() {
  24. this.loadUserInfo();
  25. },
  26. // 跳转实名认证
  27. bindrz(){
  28. wx.navigateTo({
  29. url: '/pagesA/pages/attestation/attestation',
  30. })
  31. },
  32. onShow() {
  33. },
  34. // 加载用户信息
  35. loadUserInfo() {
  36. // 从缓存获取用户信息
  37. const userInfo = wx.getStorageSync('userInfo');
  38. const avatarUrl = wx.getStorageSync('avatarUrl');
  39. if (userInfo) {
  40. this.setData({
  41. userInfo,
  42. avatarUrl
  43. });
  44. } else {
  45. // 首次使用,生成默认用户信息
  46. const defaultUserInfo = {
  47. nickName: '微信用户',
  48. isVerified: false
  49. };
  50. wx.setStorageSync('userInfo', defaultUserInfo);
  51. this.setData({ userInfo: defaultUserInfo });
  52. }
  53. },
  54. // 选择头像
  55. onChooseAvatar(e) {
  56. const { avatarUrl } = e.detail;
  57. // 显示加载
  58. wx.showLoading({
  59. title: '更新中...',
  60. mask: true
  61. });
  62. // 模拟上传过程
  63. setTimeout(() => {
  64. this.setData({ avatarUrl });
  65. // 保存到缓存
  66. wx.setStorageSync('avatarUrl', avatarUrl);
  67. wx.hideLoading();
  68. this.showToast('头像更新成功');
  69. }, 800);
  70. },
  71. // 编辑昵称
  72. editNickname() {
  73. this.setData({
  74. showNicknameModal: true,
  75. newNickname: this.data.userInfo.nickName
  76. });
  77. },
  78. hideNicknameModal() {
  79. this.setData({ showNicknameModal: false });
  80. },
  81. onNicknameInput(e) {
  82. this.setData({ newNickname: e.detail.value });
  83. },
  84. saveNickname() {
  85. const newNickname = this.data.newNickname.trim();
  86. if (!newNickname) {
  87. this.showToast('昵称不能为空');
  88. return;
  89. }
  90. if (newNickname.length > 20) {
  91. this.showToast('昵称不能超过20个字符');
  92. return;
  93. }
  94. // 更新用户信息
  95. const updatedUserInfo = {
  96. ...this.data.userInfo,
  97. nickName: newNickname
  98. };
  99. this.setData({
  100. userInfo: updatedUserInfo,
  101. showNicknameModal: false
  102. });
  103. // 保存到缓存
  104. wx.setStorageSync('userInfo', updatedUserInfo);
  105. this.showToast('昵称修改成功');
  106. },
  107. // 查看问诊消息
  108. goToConsultation() {
  109. wx.navigateTo({
  110. url: ''
  111. });
  112. },
  113. // 查看问答消息
  114. goToQA() {
  115. wx.navigateTo({
  116. url: ''
  117. });
  118. },
  119. // 实名认证
  120. goToAuth() {
  121. if (this.data.userInfo.isVerified) {
  122. this.showToast('您已完成实名认证');
  123. return;
  124. }
  125. wx.navigateTo({
  126. url: '/pages/auth/realname'
  127. });
  128. },
  129. // 显示反馈弹窗
  130. showFeedback() {
  131. this.setData({
  132. showFeedbackModal: true,
  133. feedbackContent: '',
  134. canSubmit: false,
  135. isSubmitting: false
  136. });
  137. },
  138. hideFeedback() {
  139. this.setData({ showFeedbackModal: false });
  140. },
  141. // 反馈内容输入
  142. onFeedbackInput(e) {
  143. const content = e.detail.value;
  144. const canSubmit = content.trim().length > 0;
  145. this.setData({
  146. feedbackContent: content,
  147. canSubmit
  148. });
  149. },
  150. // 提交反馈
  151. submitFeedback() {
  152. if (!this.data.canSubmit || this.data.isSubmitting) return;
  153. const content = this.data.feedbackContent.trim();
  154. if (content.length < 5) {
  155. this.showToast('请填写详细的反馈内容');
  156. return;
  157. }
  158. this.setData({ isSubmitting: true });
  159. // 模拟提交到服务器
  160. setTimeout(() => {
  161. console.log('提交反馈:', content);
  162. this.setData({
  163. isSubmitting: false,
  164. showFeedbackModal: false
  165. });
  166. this.showToast('感谢您的反馈!');
  167. // 这里应该是实际的API调用
  168. // wx.request({
  169. // url: 'https://your-api.com/feedback',
  170. // method: 'POST',
  171. // data: { content },
  172. // success: (res) => {
  173. // this.showToast('提交成功');
  174. // },
  175. // complete: () => {
  176. // this.setData({
  177. // isSubmitting: false,
  178. // showFeedbackModal: false
  179. // });
  180. // }
  181. // });
  182. }, 1500);
  183. },
  184. // 关于我们
  185. goToAbout() {
  186. wx.navigateTo({
  187. url: '/pages/about/index'
  188. });
  189. },
  190. // 设置
  191. goToSettings() {
  192. wx.navigateTo({
  193. url: '/pages/settings/index'
  194. });
  195. },
  196. // 显示提示
  197. showToast(text) {
  198. this.setData({
  199. toastText: text,
  200. showToast: true
  201. });
  202. setTimeout(() => {
  203. this.setData({ showToast: false });
  204. }, 2000);
  205. },
  206. // 下拉刷新
  207. onPullDownRefresh() {
  208. this.loadUserInfo();
  209. this.checkUnreadMessages();
  210. setTimeout(() => {
  211. wx.stopPullDownRefresh();
  212. this.showToast('刷新成功');
  213. }, 1000);
  214. },
  215. // 分享
  216. onShareAppMessage() {
  217. return {
  218. title: '健康守护 - 您的个人健康中心',
  219. path: '/pages/personal-center/index'
  220. };
  221. }
  222. });