Bladeren bron

Merge branch 'dev' of https://git.citupro.com/zhengnaiwen_citu/menduner into dev

Xiao_123 11 maanden geleden
bovenliggende
commit
98b8d6c623

+ 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

+ 0 - 1
src/layout/personal/navBar.vue

@@ -144,7 +144,6 @@ const changeLoginType = async () => {
 const getApplyInfo = async () => {
   const data = await getUserRegisterEnterpriseApply()
   const bool = data && Object.keys(data).length // 已经有数据说明已经申请过了
-  localStorage.setItem('userApplyInfo', JSON.stringify(data))
   const path = bool ? '/enterprise/inReview' : '/enterprise/register'
   router.push({ path })
 }

+ 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: {

+ 25 - 17
src/views/enterprise/components/inReview.vue

@@ -9,34 +9,34 @@
         </div>
 
         <!-- 等待审核 -->
-        <div v-else-if="status === '0'">
+        <div v-else-if="info.status === '0'">
           <span>您的申请正在审核中,审核时间在1~3个工作日内,申请结果会以短信方式通知到您的手机上,请注意查收</span>
           <div class="mt-5">
-            <span>提交时间:{{ commitTime }}</span>
+            <span>提交时间:{{ info.info.createTime }}</span>
           </div>
         </div>
 
         <!-- 审核不通过 -->
-        <div v-else-if="status === '2'">
+        <div v-else-if="info.status === '2'">
           <div class="mb-3" style="color: red;">审核不通过</div>
-          <div class="mb-3">原因:{{ reason }}</div>
-          <div v-if="remark">备注:{{ remark }}</div>
+          <div class="mb-3">原因:{{ info.reason }}</div>
+          <div v-if="info.remark">备注:{{ info.remark }}</div>
+          <!-- <div class="mt-5">
+            <span>审核时间:{{ updateTime }}</span>
+          </div> -->
           <div class="mt-5">
-            <span>更新时间:{{ updateTime }}</span>
-          </div>
-          <div class="mt-5">
-            <span>提交时间:{{ commitTime }}</span>
+            <span>提交时间:{{ info.info.createTime }}</span>
           </div>
         </div>
 
         <!-- 审核通过(审核通过不会进入此页面) -->
-        <div v-else-if="status === '1'">
+        <div v-else-if="info.status === '1'">
           <span>审核通过</span>
         </div>
         
         <div class="text-center">
           <v-btn class="mt-16" color="warning" to="/">{{ $t('common.toHome') }}</v-btn>
-          <v-btn class="mt-16 ml-12" color="primary" to="/enterprise/register">{{ $t('common.resubmit') }}</v-btn>
+          <v-btn v-if="info.status === '2'" class="mt-16 ml-12" color="primary" to="/enterprise/register">{{ $t('common.resubmit') }}</v-btn>
         </div>
       </div>
     </v-card>
@@ -46,15 +46,23 @@
 <script setup>
 import { ref } from 'vue';
 import { timesTampChange } from '@/utils/date'
+import { getUserRegisterEnterpriseApply } from '@/api/personal/user'
 defineOptions({name: 'enterprise-enterpriseRegister-inReview'})
 
+const info = ref({})
+
+// 查看用户是否有在申请中的数据
+const getApplyInfo = async () => {
+  const data = await getUserRegisterEnterpriseApply() // 已经有数据说明已经申请过了
+  localStorage.setItem('userApplyInfo', JSON.stringify(data))
+  info.value.info.createTime = ref(data?.createTime ? timesTampChange(data.createTime) : null) // 创建时间
+  // updateTime = ref(data?.createTime ? timesTampChange(data.updateTime) : null) // 更新时间
+  info.value.status = ref(data?.status) // 帐号状态(0正常 1停用 2 等待审核 3不通过) // 审核状态
+  info.value.reason = ref(data?.reason) // 审核原因
+  info.value.remark = ref(data?.remark) // 备注
+}
+getApplyInfo()
 
-const info = JSON.parse(localStorage.getItem('userApplyInfo'))
-const commitTime = ref(info?.createTime ? timesTampChange(info.createTime) : null) // 创建时间
-const updateTime = ref(info?.createTime ? timesTampChange(info.updateTime) : null) // 更新时间
-const status = ref(info?.status) // 帐号状态(0正常 1停用 2 等待审核 3不通过) // 审核状态
-const reason = ref(info?.reason) // 审核原因
-const remark = ref(info?.remark) // 备注
 </script>
 <style lang="scss" scoped>
 </style>

+ 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)