与牧同行-小程序用户端
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.

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