RegisterBar.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <script>
  2. import qs from 'qs'
  3. export default {
  4. data() {
  5. const regPhone = /^1[3456789]\d{9}$/
  6. const regEmail = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/
  7. return {
  8. form: {
  9. username: '',
  10. password: '',
  11. passwordConfirm:'',
  12. verifyCode: '',
  13. // phone_zone: '86'
  14. },
  15. errMsg: '',
  16. sending: false,
  17. clock: 60,
  18. showVcode: true,
  19. regEmail,
  20. regPhone,
  21. }
  22. },
  23. computed: {
  24. loginBtnDisabled() {
  25. return !(this.form.username && this.form.password && this.form.passwordConfirm)
  26. }
  27. },
  28. methods: {
  29. // 点击注册前置校验
  30. vailidate() {
  31. if(!this.regPhone.test(this.form.username) && !this.regEmail.test(this.form.username)) {
  32. this.errMsg = '手机号/邮箱格式不对'
  33. }else if(this.form.password !== this.form.passwordConfirm) {
  34. this.errMsg = '两次输入的密码不一致'
  35. }else if(this.form.password.length < 6) {
  36. this.errMsg = '密码位数不能少于6位'
  37. }else if(this.form.password.length> 16){
  38. this.errMsg = '密码位数不能大于16位'
  39. }else {
  40. this.errMsg = ''
  41. this.handlerRegisterUser()
  42. }
  43. },
  44. //注册
  45. handlerRegisterUser() {
  46. this.$axios.post('members/register',this.form).then((res)=> {
  47. if(res.code === 200) {
  48. this.handlerLogin(this.form)
  49. }
  50. if(res.data && res?.data?.code !== 200){
  51. this.errMsg = res.data.msg
  52. }
  53. })
  54. },
  55. //发送验证码
  56. handlePostCode() {
  57. if(this.sending) return
  58. if(!this.regPhone.test(this.form.username) && !this.regEmail.test(this.form.username)) {
  59. this.errMsg = '手机号/邮箱格式不对'
  60. }else if(this.form.password !== this.form.passwordConfirm) {
  61. this.errMsg = '两次输入的密码不一致'
  62. }else if(this.form.password.length < 6) {
  63. this.errMsg = '密码位数不能少于6位'
  64. }else if(this.form.password.length> 16){
  65. this.errMsg = '密码位数不能大于16位'
  66. }else{
  67. const params = {
  68. action: '0', // 注册用户
  69. receiver: this.form.username
  70. }
  71. if(this.regPhone.test(this.form.username)) params.type = '1'
  72. if(this.regEmail.test(this.form.username)) params.type = '0'
  73. this.$axios.get('auth/getVerifyCode', {params}).then((res)=> {
  74. if(res.code === 200) {
  75. this.sending = true
  76. let interval = setInterval(() => {
  77. this.clock--
  78. if(this.clock === 0) {
  79. clearInterval(interval)
  80. interval = null
  81. this.clock = 60
  82. this.sending = false
  83. }
  84. }, 1000);
  85. } else {
  86. this.errMsg = '验证码发送失败,请检查账号'
  87. }
  88. })
  89. }
  90. },
  91. //登录
  92. handlerLogin() {
  93. this.$axios.post('login',qs.stringify(this.form)).then((res)=> {
  94. this.$store.dispatch('login',res.result).then((token)=> {
  95. this.$axios.setToken(token, 'Bearer')
  96. this.handlerClose()
  97. this.getUserInfo()
  98. })
  99. })
  100. },
  101. getUserInfo() {
  102. this.$axios.get('members/getMemberInfo').then((res)=> {
  103. if(res.code === 200) {
  104. this.$store.commit('setUser',res.result.memberInfo)
  105. this.$emit('loginSucess')
  106. }
  107. })
  108. },
  109. handlerUsernameBlur(e) {
  110. // this.showVcode = this.regPhone.test(e.target.value)
  111. this.showVcode = true
  112. },
  113. // 弹窗关闭,初始化注册面板
  114. resetInterfaceStatus() {
  115. this.errMsg = '';
  116. this.form.username = ''
  117. this.form.password = ''
  118. this.form.passwordConfirm = ''
  119. this.form.verifyCode = ''
  120. this.showVcode = true
  121. },
  122. handlerChangeLogin() {
  123. this.$emit('login','login')
  124. },
  125. handlerClose() {
  126. this.$emit('close')
  127. },
  128. changeErr(){
  129. this.errMsg = ''
  130. },
  131. keydown(event){
  132. if(event.keyCode == 32){
  133. event.returnValue = false
  134. this.errMsg = '请勿输入空格'
  135. }
  136. },
  137. }
  138. }
  139. </script>
  140. <template>
  141. <div class="user-login">
  142. <div class="logo">
  143. <h4 id="loginModalLabel" class="logo_PDF"></h4>
  144. </div>
  145. <div class="login_content relative">
  146. <div class="login_input_user_span w-20px h-20px absolute top-30px left-34px"></div>
  147. <input id="signup_account" v-model="form.username" class="login_input_user" type="text" placeholder="手机号/邮箱" @blur="handlerUsernameBlur" @input="changeErr" @keydown.enter="vailidate">
  148. <br />
  149. <div class="login_input_password_span w-20px h-20px absolute top-90px left-34px"></div>
  150. <input id="signup_pwd1" v-model="form.password" class="login_input_password" type="password" placeholder="密码(6-16个字符,区分大小写)"
  151. @input="changeErr"
  152. @keydown="keydown($event)"
  153. @keydown.enter="vailidate"
  154. oncut="return false" onpaste="return false" oncopy="return false">
  155. <br />
  156. <div class="login_input_password_span w-20px h-20px absolute top-150px left-34px"></div>
  157. <input id="signup_pwd2" v-model="form.passwordConfirm" class="login_input_password" type="password" placeholder="确认密码"
  158. @input="changeErr"
  159. @keydown="keydown($event)"
  160. @keydown.enter="vailidate"
  161. oncut="return false" onpaste="return false" oncopy="return false">
  162. <br />
  163. <div v-if="showVcode" class="vcode_content">
  164. <input v-model="form.verifyCode" class="input_vcode_signup" placeholder="验证码" @input="changeErr" @keydown.enter="vailidate">
  165. <span class="sent-vcode sent-vcode-signup" :class="{'sent-vcode-disabled': sending}" @click="handlePostCode"><a>{{sending ? clock+'秒' : '发送验证码'}}</a></span>
  166. </div>
  167. <div v-if="errMsg !== ''" class="error-mess error-mess-signup mb-5px">
  168. <span id="error-message error-tip">{{errMsg}}</span>
  169. </div>
  170. <button id="btn-signup" type="submit" class="logging" :class="{'btn-signin': loginBtnDisabled}" :disabled="loginBtnDisabled" @click="vailidate">注册</button>
  171. <div class="login-now">
  172. <div class="term">
  173. <span>轻触上面的“注册”按钮,即表示你同意我们的<a target="_blank" href="/terms">条款</a></span>
  174. </div>
  175. <div class="switch_login">
  176. <span>已经有账号?<a class="cursor-pointer" @click="handlerChangeLogin">登录</a></span>
  177. </div>
  178. </div>
  179. </div>
  180. </div>
  181. </template>