login.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. const { isMobile } = require('../../utils/validate')
  2. const { sendCode, miniPhoneLogin, miniLogin } = require('../../api/common')
  3. const { login, sessionStorageKey } = require('../../api/request')
  4. const app = getApp()
  5. Page({
  6. /**
  7. * 页面的初始数据
  8. */
  9. data: {
  10. form: {
  11. cellphone: '',
  12. code: ''
  13. },
  14. numCount: 60,
  15. checked: false,
  16. booLock: false
  17. },
  18. timer: null,
  19. wxCode: '',
  20. /**
  21. * 生命周期函数--监听页面加载
  22. */
  23. onLoad(options) {
  24. this.getWxCode()
  25. },
  26. /**
  27. * 生命周期函数--监听页面初次渲染完成
  28. */
  29. onReady() {
  30. },
  31. /**
  32. * 生命周期函数--监听页面显示
  33. */
  34. onShow() {
  35. },
  36. /**
  37. * 生命周期函数--监听页面隐藏
  38. */
  39. onHide() {
  40. },
  41. /**
  42. * 生命周期函数--监听页面卸载
  43. */
  44. onUnload() {
  45. clearInterval(this.timer)
  46. },
  47. bindTip() {
  48. wx.showToast({
  49. title: '请阅读并勾选协议',
  50. icon: 'none'
  51. })
  52. },
  53. bindChange() {
  54. this.setData({
  55. checked: !(this.data.checked)
  56. })
  57. },
  58. mobileEventhandle(e) {
  59. const val = e.detail.value.replace(/[^\d]$/, '').replace(/^0/, '').replace(/(\d{11}(.*))/, '$1')
  60. this.setData({
  61. 'form.cellphone': val
  62. })
  63. return {
  64. value: val
  65. }
  66. },
  67. codeEventhandle(e) {
  68. const val = e.detail.value.replace(/[^\d]$/, '').replace(/(\d{6}(.*))/, '$1')
  69. this.setData({
  70. 'form.code': val
  71. })
  72. return {
  73. value: val
  74. }
  75. },
  76. funCutDown() {
  77. let numCount = this.data.numCount
  78. this.timer = setInterval(() => {
  79. if (numCount === 0) {
  80. clearInterval(this.timer)
  81. this.setData({
  82. numCount: 0
  83. })
  84. return
  85. }
  86. numCount--
  87. this.setData({
  88. numCount: numCount
  89. })
  90. }, 1000)
  91. },
  92. async funGetCode() {
  93. const numCount = this.data.numCount
  94. const { cellphone } = this.data.form
  95. if (!isMobile(cellphone)) {
  96. wx.showToast({
  97. title: '请输入正确的手机号~',
  98. icon: 'none'
  99. })
  100. return
  101. }
  102. if (numCount < 60 && numCount > 0) {
  103. return
  104. }
  105. this.setData({
  106. numCount: 60,
  107. code: ''
  108. })
  109. this.funCutDown()
  110. try {
  111. const { status } = await sendCode({ phone: cellphone, type: 1 })
  112. let title = '验证码发送成功'
  113. if (status) {
  114. } else {
  115. title = '验证码发送失败'
  116. }
  117. wx.showToast({
  118. title: title,
  119. icon: 'none'
  120. })
  121. } catch (err) {}
  122. },
  123. async bindEvent() {
  124. const { cellphone, code } = this.data.form
  125. if (!this.data.checked) {
  126. this.bindTip()
  127. return
  128. }
  129. this.setData({
  130. booLock: true
  131. })
  132. try {
  133. const { status, data } = await miniPhoneLogin({
  134. wxCode: this.wxCode,
  135. cellphone,
  136. code
  137. })
  138. if (status) {
  139. try {
  140. wx.setStorageSync(sessionStorageKey, data.token)
  141. } catch (err) {}
  142. await app.fetchUserData()
  143. const pages = getCurrentPages()
  144. if (pages.length > 1) {
  145. const route = pages[pages.length - 2]
  146. wx.navigateBack({
  147. delta: 1
  148. })
  149. route.bindCallBack && route.bindCallBack()
  150. }
  151. } else {
  152. wx.showToast({
  153. title: '登录出错了,请重试',
  154. icon: 'none'
  155. })
  156. this.getWxCode()
  157. }
  158. } catch (err) {
  159. this.getWxCode()
  160. }
  161. this.setData({
  162. booLock: false
  163. })
  164. },
  165. async getPhoneNumber(e) {
  166. const { errMsg, encryptedData, iv } = e.detail
  167. if (errMsg === 'getPhoneNumber:ok') {
  168. this.setData({
  169. booLock: true
  170. })
  171. try {
  172. const { status, data } = await miniLogin({
  173. wxCode: this.wxCode,
  174. encryptedData,
  175. iv
  176. })
  177. if (status) {
  178. try {
  179. wx.setStorageSync(sessionStorageKey, data.token)
  180. } catch (err) {}
  181. await app.fetchUserData()
  182. const pages = getCurrentPages()
  183. if (pages.length > 1) {
  184. const route = pages[pages.length - 2]
  185. wx.navigateBack({
  186. delta: 1
  187. })
  188. route.bindCallBack && route.bindCallBack()
  189. }
  190. } else {
  191. wx.showToast({
  192. title: '登录出错了,请重试',
  193. icon: 'none'
  194. })
  195. this.getWxCode()
  196. }
  197. } catch (e) {
  198. this.getWxCode()
  199. }
  200. this.setData({
  201. booLock: false
  202. })
  203. }
  204. },
  205. async getWxCode() {
  206. try {
  207. this.wxCode = await login()
  208. } catch (e) {}
  209. }
  210. })