loginDialog.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <!-- 快速登录/注册 -->
  2. <template>
  3. <CtDialog
  4. :visible="openDialog"
  5. :widthType="2"
  6. :footer="false"
  7. titleClass="text-h6"
  8. title="快速登录"
  9. @close="openDialog = false"
  10. >
  11. <div class="my-5">
  12. <phoneFrom ref="phoneRef" @handleEnter="handleLogin"></phoneFrom>
  13. <v-btn :loading="loginLoading" color="primary" class="white--text mt-5" min-width="350" @click="handleLogin">
  14. {{ $t('login.loginOrRegister') }}
  15. </v-btn>
  16. <div class="text-center color-666 font-size-14 mt-3">未注册的手机号,验证后自动注册账号</div>
  17. </div>
  18. </CtDialog>
  19. </template>
  20. <script setup>
  21. defineOptions({name: 'dialog-login-common-page'})
  22. import phoneFrom from '@/components/VerificationCode'
  23. import { useUserStore } from '@/store/user'; const userStore = useUserStore()
  24. import { nextTick, ref } from 'vue'
  25. const emit = defineEmits(['loginSuccess'])
  26. const props = defineProps({
  27. // 是否需要退出后再登录,切换账号时使用
  28. hasLogout: {
  29. type: Boolean,
  30. default: false
  31. }
  32. })
  33. const openDialog = ref(false)
  34. nextTick(() => {
  35. openDialog.value = true
  36. })
  37. // 验证码登录
  38. const phoneRef = ref()
  39. const loginLoading = ref(false)
  40. const handleLogin = async () => {
  41. const { valid } = await phoneRef.value.phoneForm.validate()
  42. if (!valid) return
  43. if (props.hasLogout) {
  44. await userStore.userLogout(1)
  45. }
  46. loginLoading.value = true
  47. try {
  48. const params = { ...phoneRef.value.loginData, autoRegister: true } // autoRegister: 是否自动注册
  49. await userStore.handleSmsLogin(params)
  50. emit('loginSuccess')
  51. } catch (error) {
  52. console.error('error', error)
  53. }
  54. }
  55. </script>
  56. <style lang="scss" scoped>
  57. </style>