person.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <template>
  2. <div class="box">
  3. <navBar v-if="!isMobile" :showLoginBtn="false" class="navBar"></navBar>
  4. <div class="content pa-10">
  5. <div class="content-title text-center mt-4">{{ isLogin ? '请输入您申请企业账号时填入的手机号进行效验' : '请输入手机号码进行注册认证'}}</div>
  6. <phoneFrom class="mt-10" ref="phoneRef" @handleEnter="handleRegister" :phone="phone"></phoneFrom>
  7. <div v-if="!isMobile" class="font-size-14 tips color-primary cursor-pointer text-end" @click="router.push('/login')">已有账号?去登录</div>
  8. <v-btn :loading="loading" color="primary" class="white--text mt-5" min-width="370" @click="handleRegister">{{ isCompany ? '下一步' : '注册' }}</v-btn>
  9. <div class="login-tips mt-3" v-if="!isCompany">
  10. 点击注册即代表您同意
  11. <span class="color-primary" style="cursor: pointer;" @click="router.push('/userAgreement')"> [{{ $t('login.userAgreement') }}] </span>和
  12. <span class="color-primary" style="cursor: pointer;" @click="router.push('/privacyPolicy')">[{{ $t('login.privacyPolicy') }}]</span>
  13. </div>
  14. </div>
  15. </div>
  16. </template>
  17. <script setup>
  18. defineOptions({ name: 'registerPerson'})
  19. import { ref, onMounted } from 'vue'
  20. import { useRouter } from 'vue-router'
  21. import phoneFrom from '@/components/VerificationCode'
  22. import { useUserStore } from '@/store/user'
  23. import Snackbar from '@/plugins/snackbar'
  24. import { checkEmail } from '@/utils/validate'
  25. import navBar from '@/layout/personal/navBar.vue'
  26. const isMobile = ref(false)
  27. onMounted(() => {
  28. const userAgent = navigator.userAgent
  29. isMobile.value = /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i.test(userAgent)
  30. })
  31. const emit = defineEmits(['success'])
  32. const props = defineProps({
  33. isCompany: {
  34. type: Boolean,
  35. default: false
  36. },
  37. isLogin: {
  38. type: Boolean,
  39. default: false
  40. }
  41. })
  42. const router = useRouter()
  43. const phoneRef = ref()
  44. const loading = ref(false)
  45. const userStore = useUserStore()
  46. const phone = localStorage.getItem('loginAccount') && !checkEmail(localStorage.getItem('loginAccount')) ? localStorage.getItem('loginAccount') : ''
  47. // 注册
  48. const handleRegister = async () => {
  49. const { valid } = await phoneRef.value.phoneForm.validate()
  50. if (!valid) return
  51. loading.value = true
  52. try {
  53. // isLogin:企业注册申请被驳回后,再次提交时需先登录个人账号
  54. // props.isLogin ? await userStore.handleSmsLogin({ ...phoneRef.value.loginData, autoRegister: true }) : await userStore.handleUserRegister({ ...phoneRef.value.loginData })
  55. await userStore.handleSmsLogin({ ...phoneRef.value.loginData, autoRegister: true }) // 自动注册登录
  56. Snackbar.success(props.isCompany ? '手机号验证成功' : '注册成功')
  57. if (!props.isCompany) {
  58. localStorage.setItem('simpleCompleteDialogHaveBeenShow', true) // 个人登录简易基本信息填写弹窗open-status
  59. router.push({ path: '/recruitHome' })
  60. localStorage.removeItem('loginAccount')
  61. } else emit('success')
  62. } catch (err) {
  63. loading.value = false
  64. } finally {
  65. loading.value = false
  66. }
  67. }
  68. </script>
  69. <style scoped lang="scss">
  70. .navBar {
  71. position: absolute;
  72. top: 0;
  73. }
  74. .box {
  75. position: relative;
  76. width: 100%;
  77. height: 100%;
  78. background-image: url('https://minio.menduner.com/dev/menduner/login-banner.png');
  79. background-size: cover;
  80. }
  81. .content {
  82. position: absolute;
  83. top: 50%;
  84. left: 50%;
  85. translate: -50% -50%;
  86. width: 450px;
  87. height: 400px;
  88. background-color: #fff;
  89. border-radius: 10px;
  90. &-title {
  91. color: #4c4c4c;
  92. font-size: 24px;
  93. }
  94. }
  95. .login-tips {
  96. width: 100%;
  97. font-size: 14px;
  98. text-align: center;
  99. }
  100. .tips:hover {
  101. text-decoration: underline;
  102. }
  103. </style>