index.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  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. } else if (!nickName) {
  99. return this.setData({
  100. ['userInfo.nickName']: this.data.userInfo.nickName
  101. })
  102. }
  103. this.setUserInfo({
  104. nickName
  105. })
  106. },
  107. selectProfession() {
  108. wx.showActionSheet({
  109. itemList: ['学生', '家长', '老师'],
  110. success: (res) => {
  111. if (['学生', '家长', '老师'][res.tapIndex] == this.data.userInfo.profession) {
  112. return
  113. }
  114. this.setUserInfo({
  115. profession: ['学生', '家长', '老师'][res.tapIndex]
  116. })
  117. },
  118. })
  119. },
  120. selectGender() {
  121. wx.showActionSheet({
  122. itemList: ['女', '男'],
  123. success: (res) => {
  124. if (res.tapIndex == this.data.userInfo.gender) {
  125. return
  126. }
  127. this.setUserInfo({
  128. gender: res.tapIndex
  129. })
  130. },
  131. })
  132. },
  133. bindDateChange(e) {
  134. this.setUserInfo({
  135. birthday: e.detail.value
  136. })
  137. },
  138. bindGradeChange(e) {
  139. let grade = this.data.gradeArray[e.detail.value].value
  140. this.setUserInfo({
  141. grade
  142. })
  143. },
  144. saveSchool(e) {
  145. let schoolName = e.detail.value;
  146. if (schoolName == this.data.userInfo.schoolName) {
  147. return
  148. }
  149. this.setUserInfo({
  150. schoolName
  151. })
  152. },
  153. async setUserInfo(data) {
  154. wx.showLoading({
  155. title: '提交中',
  156. })
  157. let res = await setUserInfo(data, 'put').finally(() => {
  158. wx.hideLoading()
  159. })
  160. this.setUser(res)
  161. },
  162. async getPhoneNumber({
  163. detail
  164. }) {
  165. let mobile = await exchangePhone({
  166. code: detail.code
  167. })
  168. await bindPhone({
  169. mobile
  170. })
  171. let userInfo = await getMyInfo()
  172. this.setUser(userInfo.user)
  173. wx.showToast({
  174. title: '绑定成功!',
  175. icon: "none",
  176. duration: 4000
  177. })
  178. },
  179. })