index.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. import {
  2. createStoreBindings
  3. } from 'mobx-miniprogram-bindings'
  4. import {
  5. store
  6. } from '~/store/index'
  7. import {
  8. setUserInfo,
  9. exchangePhone,
  10. getMyInfo,
  11. bindPhone
  12. } from '~/api/user'
  13. let storeBindings
  14. Page({
  15. data: {
  16. gradeIndex: 0,
  17. gradeArray: [{
  18. value: 'PRESCHOOL',
  19. key: '学前班'
  20. }, {
  21. value: 'PRIMARY_FIRST_GRADE',
  22. key: '一年级'
  23. },
  24. {
  25. value: 'PRIMARY_SECOND_GRADE',
  26. key: '二年级'
  27. },
  28. {
  29. value: 'PRIMARY_THREE_GRADE',
  30. key: '三年级'
  31. },
  32. {
  33. value: 'PRIMARY_SENIOR_GRADE',
  34. key: '四年级'
  35. }, {
  36. value: 'PRIMARY_FIVE_GRADE',
  37. key: '五年级'
  38. }, {
  39. value: 'PRIMARY_SIX_GRADE',
  40. key: '六年级'
  41. },
  42. ],
  43. },
  44. onLoad(options) {
  45. // 手工绑定
  46. this.storeBindings = createStoreBindings(this, {
  47. store,
  48. fields: {
  49. userInfo: 'userInfo'
  50. },
  51. actions: {
  52. setUser: 'setUser'
  53. }
  54. })
  55. // 立刻更新
  56. this.storeBindings.updateStoreBindings()
  57. let {
  58. grade
  59. } = this.data.userInfo
  60. let gradeIndex = this.data.gradeArray.findIndex(item => {
  61. return item.value == grade
  62. })
  63. this.setData({
  64. gradeIndex
  65. })
  66. },
  67. // 调用清理函数
  68. onUnload() {
  69. this.storeBindings.destroyStoreBindings()
  70. },
  71. changeAvatar(e) {
  72. const {
  73. avatarUrl
  74. } = e.detail
  75. wx.uploadFile({
  76. url: 'https://reader-api.ai160.com/file/upload',
  77. filePath: avatarUrl,
  78. name: '头像',
  79. header: {
  80. uid: wx.getStorageSync('uid')
  81. },
  82. success: (res) => {
  83. const newAvatar = JSON.parse(res.data).data;
  84. const str = 'userInfo.avatar'
  85. this.setData({
  86. [str]: newAvatar
  87. })
  88. this.setUserInfo({
  89. avatar: newAvatar
  90. })
  91. }
  92. })
  93. },
  94. saveNickName(e) {
  95. let nickName = e.detail.value;
  96. if (nickName == this.data.userInfo.nickName) {
  97. return
  98. }
  99. this.setUserInfo({
  100. nickName
  101. })
  102. },
  103. selectProfession() {
  104. wx.showActionSheet({
  105. itemList: ['学生', '家长', '老师'],
  106. success: (res) => {
  107. if (['学生', '家长', '老师'][res.tapIndex] == this.data.userInfo.profession) {
  108. return
  109. }
  110. this.setUserInfo({
  111. profession: ['学生', '家长', '老师'][res.tapIndex]
  112. })
  113. },
  114. })
  115. },
  116. selectGender() {
  117. wx.showActionSheet({
  118. itemList: ['女', '男'],
  119. success: (res) => {
  120. if (res.tapIndex == this.data.userInfo.gender) {
  121. return
  122. }
  123. this.setUserInfo({
  124. gender: res.tapIndex
  125. })
  126. },
  127. })
  128. },
  129. bindDateChange(e) {
  130. this.setUserInfo({
  131. birthday: e.detail.value
  132. })
  133. },
  134. bindGradeChange(e) {
  135. let grade = this.data.gradeArray[e.detail.value].value
  136. this.setUserInfo({
  137. grade
  138. })
  139. },
  140. saveSchool(e) {
  141. let schoolName = e.detail.value;
  142. if (schoolName == this.data.userInfo.schoolName) {
  143. return
  144. }
  145. this.setUserInfo({
  146. schoolName
  147. })
  148. },
  149. async setUserInfo(data) {
  150. wx.showLoading({
  151. title: '提交中',
  152. })
  153. let res = await setUserInfo(data, 'put').finally(() => {
  154. wx.hideLoading()
  155. })
  156. this.setUser(res)
  157. },
  158. async getPhoneNumber({
  159. detail
  160. }) {
  161. let mobile = await exchangePhone({
  162. code: detail.code
  163. })
  164. await bindPhone({
  165. mobile
  166. })
  167. let userInfo = await getMyInfo()
  168. this.setUser(userInfo.user)
  169. wx.showToast({
  170. title: '绑定成功!已获得7天VIP',
  171. icon: "none",
  172. duration: 4000
  173. })
  174. },
  175. })