phoneValidate.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <template>
  2. <view class="ss-p-30">
  3. <view class="head-title ss-m-b-30">请输入您申请企业账号时填入的手机号进行效验</view>
  4. <view class="ss-m-t-50">
  5. <uni-forms
  6. ref="smsLoginRef"
  7. v-model="state.sms"
  8. :rules="state.smsRules"
  9. validateTrigger="bind"
  10. labelWidth="140"
  11. labelAlign="center"
  12. >
  13. <uni-forms-item name="phone" label="手机号">
  14. <uni-easyinput placeholder="请输入手机号" v-model="state.sms.phone" :inputBorder="false" type="number">
  15. </uni-easyinput>
  16. </uni-forms-item>
  17. <uni-forms-item name="code" label="验证码">
  18. <uni-easyinput
  19. placeholder="请输入验证码"
  20. v-model="state.sms.code"
  21. :inputBorder="false"
  22. type="number"
  23. maxlength="6"
  24. >
  25. <template v-slot:right>
  26. <button
  27. class="login-code"
  28. :disabled="state.isMobileEnd"
  29. :class="{ 'code-btn-end': state.isMobileEnd }"
  30. @tap="handleCode"
  31. >
  32. {{ getSmsTimer('smsRegister') }}
  33. </button>
  34. </template>
  35. </uni-easyinput>
  36. </uni-forms-item>
  37. </uni-forms>
  38. <button class="send-button" @tap="handleLogin"> 验 证 </button>
  39. </view>
  40. </view>
  41. </template>
  42. <script setup>
  43. import { ref, unref } from 'vue'
  44. import { mobile, code } from '@/utils/validate'
  45. import { getSmsCode, getSmsTimer } from '@/utils/code'
  46. import { userStore } from '@/store/user'
  47. import { onLoad } from '@dcloudio/uni-app'
  48. import { closeAuthModal } from '@/hooks/useModal'
  49. const useUserStore = userStore()
  50. const smsLoginRef = ref()
  51. const state = ref({
  52. isMobileEnd: false, // 手机号输入完毕
  53. codeText: '获取验证码',
  54. sms: {
  55. phone: '',
  56. code: ''
  57. },
  58. smsRules: {
  59. code,
  60. phone: mobile
  61. }
  62. })
  63. onLoad((options) => {
  64. if (options.phone) state.value.sms.phone = options.phone
  65. })
  66. // 获取验证码
  67. const handleCode = () => {
  68. if (!state.value.sms.phone) {
  69. uni.showToast({
  70. title: '请输入手机号',
  71. icon: 'none',
  72. duration: 2000
  73. })
  74. return
  75. }
  76. getSmsCode('smsLogin', state.value.sms.phone)
  77. }
  78. // 验证
  79. const handleLogin = async () => {
  80. const validate = await unref(smsLoginRef).validate()
  81. if (!validate) return
  82. const query = state.value.sms
  83. Object.assign(query, {
  84. sms: query.phone
  85. })
  86. console.log(query, '手机号效验参数')
  87. try {
  88. await useUserStore.handleSmsLogin(query, 0, false)
  89. uni.showToast({
  90. title: '手机号效验成功',
  91. icon: 'none',
  92. duration: 2000
  93. })
  94. closeAuthModal()
  95. uni.navigateTo({
  96. url: '/pages/register/index'
  97. })
  98. } catch (err) {
  99. closeAuthModal()
  100. console.log(err, '手机号效验')
  101. }
  102. }
  103. </script>
  104. <style scoped lang="scss">
  105. .login-code {
  106. width: 73px;
  107. min-width: 73px;
  108. color: #00B760;
  109. text-align: center;
  110. font-size: 12px;
  111. cursor: pointer;
  112. padding: 0;
  113. }
  114. .head-title {
  115. font-size: 40rpx;
  116. text-align: center;
  117. color: #00B760;
  118. margin-top: 30rpx;
  119. }
  120. .quickLogon {
  121. display: flex;
  122. justify-content: space-between;
  123. padding: 0 20rpx;
  124. align-items: center;
  125. }
  126. .wxLogon {
  127. font-size: .85em;
  128. color: #00B760;
  129. border: none;
  130. margin: 0;
  131. padding: 0;
  132. }
  133. .register {
  134. widows: 100%;
  135. font-size: .85em;
  136. color: red;
  137. // text-align: right;
  138. &.login {
  139. color: #00B760;
  140. }
  141. }
  142. .pb-20 {
  143. padding-bottom: 40rpx;
  144. }
  145. </style>