Browse Source

切换为招聘者

lifanagju_citu 1 năm trước cách đây
mục cha
commit
7b0f47b9c5

+ 8 - 0
src/api/personal/user.js

@@ -16,6 +16,14 @@ export const getUserBindEnterpriseList = async (params) => {
   })
 }
 
+// 根据手机号获取用户绑定的企业列表
+export const getUserBindEnterpriseListByPhone = async (params) => {
+  return await request.get({
+    url: '/app-api/menduner/system/enterprise-user-bind/get/enterprise/list/by/phone',
+    params
+  })
+}
+
 // 企业注册申请
 export const enterpriseRegisterApply = async (data) => {
   return await request.post({

+ 2 - 1
src/components/VerificationCode/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div>
     <v-form @submit.prevent ref="phoneForm">
-      <v-text-field v-model="loginData.phone" :disabled="loginUserPhone" :placeholder="$t('login.mobileNumberPlaceholder')" color="primary" variant="outlined" density="compact" :rules="phoneRules" validate-on="input">
+      <v-text-field v-model="loginData.phone" :disabled="props.phoneDisabled" :placeholder="$t('login.mobileNumberPlaceholder')" color="primary" variant="outlined" density="compact" :rules="phoneRules" validate-on="input">
         <template v-slot:prepend-inner>
           <span class="d-flex">
             <v-icon icon="mdi-cellphone" size="20"></v-icon>
@@ -48,6 +48,7 @@ import Snackbar from '@/plugins/snackbar'
 
 const emits = defineEmits(['handleEnter'])
 const { t } = useI18n()
+const props = defineProps({ phoneDisabled: Boolean })
 const phoneRules = ref([
   value => {
     if (value) return true

+ 2 - 1
src/locales/en.js

@@ -82,7 +82,8 @@ export default {
     agreeLogin: 'By logging in/registering, you agree to',
     smsOrPassword: 'SMS, password login or registration',
     scanWeChatCode: 'Scan WeChat QR code for quick login',
-    loginSuccess: 'Login successful'
+    loginSuccess: 'Login successful',
+    loginFailed: 'Login failed, And no enterprise was found under this user'
   },
   form: {},
   position: {

+ 2 - 1
src/locales/zh-CN.js

@@ -82,7 +82,8 @@ export default {
     agreeLogin: '登录/注册即代表您同意',
     smsOrPassword: '短信、密码登录或注册',
     scanWeChatCode: '微信扫码快速登录',
-    loginSuccess: '登录成功'
+    loginSuccess: '登录成功',
+    loginFailed: '登录失败 未查询到该用户下存在企业'
   },
   form: {},
   position: {

+ 2 - 2
src/views/login/components/passwordPage.vue

@@ -1,6 +1,6 @@
 <template>
   <v-form ref="passwordForm" @submit.prevent>
-    <v-text-field v-model="loginData.phone" :disabled="loginUserPhone" :placeholder="$t('login.mobileNumberPlaceholder')" color="primary" variant="outlined" density="compact" :rules="phoneRules" validate-on="input">
+    <v-text-field v-model="loginData.phone" :disabled="props.phoneDisabled" :placeholder="$t('login.mobileNumberPlaceholder')" color="primary" variant="outlined" density="compact" :rules="phoneRules" validate-on="input">
       <template v-slot:prepend-inner>
         <span class="d-flex">
           <v-icon icon="mdi-cellphone" size="20"></v-icon>
@@ -39,7 +39,7 @@ import { ref, reactive, defineExpose, defineEmits } from 'vue'
 defineOptions({ name: 'password-form' })
 import { useI18n } from '@/hooks/web/useI18n'
 const { t } = useI18n()
-
+const props = defineProps({ phoneDisabled: Boolean })
 const passwordType = ref(false)
 const emits = defineEmits(['handleEnter'])
 

+ 18 - 4
src/views/login/index.vue

@@ -39,16 +39,16 @@
             <v-tab :value="2">{{ $t('login.passwordLogin') }}</v-tab>
           </v-tabs>
           <div v-if="loginType" class="mt-9">
-            <companySelect v-model="enterpriseId"></companySelect>
+            <companySelect ref="companySelectRef" v-model="enterpriseId"></companySelect>
           </div>
           <v-window v-model="tab" :class="{'mt-9': !loginType}">
               <!-- 验证码登录 -->
             <v-window-item :value="1">
-              <phoneFrom ref="phoneRef" @handleEnter="handleLogin"></phoneFrom>
+              <phoneFrom ref="phoneRef" :phoneDisabled="Boolean(loginType)" @handleEnter="handleLogin"></phoneFrom>
             </v-window-item>
               <!-- 账号密码登录 -->
             <v-window-item :value="2">
-              <passwordFrom ref="passRef" @handleEnter="handleLogin"></passwordFrom>
+              <passwordFrom ref="passRef" :phoneDisabled="Boolean(loginType)" @handleEnter="handleLogin"></passwordFrom>
             </v-window-item>
           </v-window>
         </div>
@@ -79,6 +79,7 @@
 
 <script setup>
 import { ref } from 'vue'
+import { getUserBindEnterpriseListByPhone } from '@/api/personal/user'
 import passwordFrom from './components/passwordPage.vue'
 import phoneFrom from '@/components/VerificationCode'
 import qrCode from './components/qrCode.vue'
@@ -110,6 +111,16 @@ const phoneRef = ref()
 const passRef = ref()
 const loginLoading = ref(false)
 const userStore = useUserStore()
+
+const companySelectRef = ref()
+const beforeHandleLogin = async (params) => {
+  const data = await getUserBindEnterpriseListByPhone({ phone: params.phone}) // 申请通过才会数据,否则空数组
+  if (companySelectRef.value.item?.items) companySelectRef.value.item.items = data
+  localStorage.setItem('companyInfo', JSON.stringify(data))
+  const bool = Boolean(data?.length)
+  if (!bool) Snackbar.warning(t('login.loginFailed'))
+  return bool
+}
 const handleLogin = async () => {
   const { valid } = tab.value ? await phoneRef.value.phoneForm.validate() : await passRef.value.passwordForm.validate()
   if (!valid) return
@@ -120,7 +131,10 @@ const handleLogin = async () => {
     if (tab.value === 1) { params = { ...phoneRef.value.loginData }; api = 'handleSmsLogin'}
     else { params = { ...passRef.value.loginData }; api = 'handlePasswordLogin'}
     // 企业登录
-    if (type === 330)  params.loginType = type; params.enterpriseId = enterpriseId.value
+    if (type === 330) {
+      const bool = await beforeHandleLogin(params); if (!bool) return
+      params.loginType = type; params.enterpriseId = enterpriseId.value
+    }
     // await userStore.handlePasswordLogin({ ...passRef.value.loginData, type }) //tab.value === 1
     // await userStore.handleSmsLogin({ ...phoneRef.value.loginData, type })
     await userStore[api](params)