Bläddra i källkod

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

Xiao_123 8 månader sedan
förälder
incheckning
f51fe4a030

+ 8 - 3
src/config/axios/service.js

@@ -64,6 +64,12 @@ service.interceptors.request.use(
         return (isToken = false)
       }
     })
+    // const ENT_ACCESS_TOKEN = getToken() === localStorage.getItem('ENT_ACCESS_TOKEN')
+    // const PER_ACCESS_TOKEN = getToken() === localStorage.getItem('PER_ACCESS_TOKEN')
+    // if (ENT_ACCESS_TOKEN) console.log('-----------------------------使用了企业token请求', config.url)
+    // if (PER_ACCESS_TOKEN) console.log('-----------------------------使用了个人token请求', config.url)
+    // // debugger
+    
     if (getToken() && !isToken) {
       (config).headers.Authorization = 'Bearer ' + getToken() // 让每个请求携带自定义token
     }
@@ -256,11 +262,10 @@ const handleAuthorized = () => {
 
 // 触发获取积分
 const getIntegral = (url, store) => {
-  const loginType = localStorage.getItem('loginType')
   rewardEventTrackClick(url).then(() => {
     setTimeout(() => {
-      if (loginType && loginType === 'enterprise') store.getEnterpriseUserAccountInfo()
-      else store.getUserAccountInfo()
+      // store.getEnterpriseUserAccountInfo() 目前企业没有积分,访问商城应该以个人的身份访问商城
+      store.getUserAccountInfo()
     }, 2000)
   })
 }

+ 1 - 39
src/layout/company/navBar.vue

@@ -84,11 +84,6 @@
         </div>
       </div>
     </v-toolbar>
-    <CtDialog :visible="show" title="请选择要切换的公司账号" :footer="true" widthType="2" @close="show = false" @submit="handleToAnotherEnterpriseSubmit">
-      <v-radio-group v-model="radios">
-        <v-radio v-for="item in enterpriseList" :key="item.enterpriseId" color="primary" :label="item.enterpriseName" :value="item.enterpriseId"></v-radio>
-      </v-radio-group>
-    </CtDialog>
   </div>
 </template>
 
@@ -155,7 +150,7 @@ const items = computed(() => {
 })
 
 // 企业logo、用户基本信息
-let baseInfo = ref(JSON.parse(localStorage.getItem('baseInfo')) || {})
+let baseInfo = ref(JSON.parse(localStorage.getItem('entBaseInfo')) || {})
 let enterpriseUserAccount = ref(JSON.parse(localStorage.getItem('enterpriseUserAccount')) || {}) // 账户信息
 
 userStore.$subscribe((mutation, state) => {
@@ -169,39 +164,6 @@ userStore.$subscribe((mutation, state) => {
 //   location.reload()
 // }
 
-// 企业相关操作
-const show = ref(false)
-const radios = ref(null)
-
-// // 注册新企业
-// const handleRegisteringNewEnterprise = async () => {
-//   const data = await getUserRegisterEnterpriseApply()
-//   const bool = data && Object.keys(data).length // 已经有数据说明已经申请过了
-//   const path = bool ? '/recruit/enterprise/register/inReview' : '/recruit/enterprise/register'
-//   router.push({ path })
-// }
-
-// // 切换其他企业
-// const handleSwitchToAnotherEnterprise = async () => {
-//   if (enterpriseList.value?.length) {
-//     if (enterpriseList.value.length > 1) {
-//       show.value = true
-//       radios.value = enterpriseList.value[0].enterpriseId
-//     } else {
-//       // 只有一个企业不能切换  只能再注册新的一个
-//       handleRegisteringNewEnterprise()
-//     }
-//   }
-// }
-// 手动切换企业提交
-const handleToAnotherEnterpriseSubmit = async () => { 
-  // 获取企业账号令牌以及企业用户个人信息
-  await userStore.changeRole(radios.value) // enterpriseId
-  // router.push({ path: '/recruit/enterprise' })
-  localStorage.setItem('loginType', 'enterprise')
-  window.location.href = '/recruit/enterprise'
-}
-
 const test = ref(false)
 // 企业列表
 const getEnterpriseListData = async () => {

+ 9 - 2
src/layout/personal/navBar.vue

@@ -124,6 +124,9 @@ import { useRouter } from 'vue-router'; const router = useRouter()
 import { getUserBindEnterpriseList, getUserRegisterEnterpriseApply } from '@/api/personal/user'
 import MessageNotification from '../message.vue'
 import { getUserAvatar } from '@/utils/avatar'
+import {
+  logout
+} from '@/api/common'
 
 // import { useIMStore } from '@/store/im'
 defineOptions({ name: 'personal-navbar' })
@@ -191,10 +194,14 @@ const handleSwitch = async () => {
 
 // 切换提交
 const switchSubmit = async () => {
-  // 获取企业账号令牌以及企业用户个人信息
-  await userStore.changeRole(radios.value)
+  await logout() // 先退出个人登录
+  localStorage.setItem('enterpriseId', radios.value)
+
   // 跳转企业路由 且验证是否已完善必填基本信息
   window.location.href = '/enterpriseVerification'
+
+  // 获取企业账号令牌以及企业用户个人信息
+  // await userStore.changeRole(radios.value)
 }
 
 const btnType = ref(0)

+ 1 - 1
src/locales/en.js

@@ -103,7 +103,7 @@ export default {
     enterCode: 'Please enter the verification code',
     enterPassword: 'Please enter password',
     smsLogin: 'SMS login',
-    passwordLogin: 'Password login',
+    passwordLogin: 'Account login',
     enterpriseLogin: 'Enterprise login',
     userAgreement: 'User Agreement',
     privacyPolicy: 'Privacy Policy',

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

@@ -103,7 +103,7 @@ export default {
     enterCode: '请输入验证码',
     enterPassword: '请输入密码',
     smsLogin: '短信登录',
-    passwordLogin: '密码登录',
+    passwordLogin: '账号登录',
     enterpriseLogin: '企业登录',
     userAgreement: '用户协议',
     privacyPolicy: '隐私政策',

+ 19 - 15
src/permission.js

@@ -1,7 +1,7 @@
 import router from './router'
 import { useNProgress } from '@/hooks/web/useNProgress'
 import { useTitle } from '@/hooks/web/useTitle'
-import { getToken, getEnterpriseToken, removeToken } from '@/utils/auth'
+import { getToken } from '@/utils/auth'
 import { useDictStore } from '@/store/dict'
 import { useUserStore } from '@/store/user'
 
@@ -9,34 +9,38 @@ const { start, done } = useNProgress()
 // loginType:1.enterprise: 企业路由
 //            2.personal: 个人路由
 //            3.common: 没有限制访问权限
-//            3.personalCommon: 无需登录也能访问的页面,但登录企业不能访问
+//            3.personalCommon: 无需登录也能访问的页面
 // 路由守卫
 router.beforeEach(async (to, from, next) => {
   start()
   // loadStart()
+  if (to.path === '/enterpriseVerification') {
+    // 校验企业必填信息
+    useUserStore().checkEnterpriseBaseInfo()
+    next()
+  }
   if (getToken()) {
-    if (to.path === '/enterpriseVerification') useUserStore().checkEnterpriseBaseInfo() // 校验企业必填信息
     if (to.path === '/login') {
-      if (getEnterpriseToken()) next({ path: '/enterprise' }) // 已登录企业
-      else next({ path: '/recruitHome' }) // 已登录个人账号
+      next({ path: '/recruitHome' })
     } else {
       // 获取字典信息
       const dictStore = useDictStore()
       dictStore.getDictTypeData()
-      
-      const type = localStorage.getItem('loginType')
-      // 判断企业路由和个人路由,防止互串
-      if (!type) { removeToken(); next(`/login?redirect=${to.fullPath}`) }
-      else if (to.meta?.loginType === 'common') next()
-      else if (type === 'enterprise' && to.meta?.loginType === 'personalCommon') next({ path: `/${type}` }) // 企业端不能访问任何个人端路由
-      else if (type === 'personal' && to.meta?.loginType === 'personalCommon') next()
-      else if (to.meta?.loginType === type) next()
-      else next({ path: `/${type}` })
-      // next()
+      next()
+      // const type = localStorage.getItem('loginType')
+      // // 判断企业路由和个人路由,防止互串
+      // if (!type) { removeToken(); next(`/login?redirect=${to.fullPath}`) }
+      // else if (to.meta?.loginType === 'common' || to.meta?.loginType === 'personalCommon') next()
+      // // else if (type === 'enterprise' && to.meta?.loginType === 'personalCommon') next({ path: `/${type}` }) // 企业端不能访问任何个人端路由
+      // // else if (type === 'personal' && to.meta?.loginType === 'personalCommon') next()
+      // else if (to.meta?.loginType === type) next()
+      // else next({ path: `/${type}` })
     }
   } else {
     if (to.meta?.loginType === 'personalCommon' || to.meta?.loginType === 'common') { // 路由不重定向
       next()
+    } else if (to.meta?.loginType === 'enterprise') { // 没有企业token->去个人首页
+      next({ path: '/recruitHome' })
     } else {
       next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页
     }

+ 8 - 0
src/router/modules/components/recruit/enterprise.js

@@ -7,6 +7,14 @@ const enterprise = [
     show: true,
     redirect: '/recruit/enterprise',
   },
+  // { 不能重定向,用于切换企业登录拦截
+  //   path: '/enterpriseVerification', // 切换企业后先校验是否具备必填信息
+  //   show: true,
+  //   meta: {
+  //     loginType: 'enterprise'
+  //   }
+  //   // redirect: '/enterprise',
+  // },
   {
     path: '/recruit/enterprise',
     show: true,

+ 14 - 14
src/store/user.js

@@ -32,6 +32,7 @@ export const useUserStore = defineStore('user',
       accountInfo: localStorage.getItem('accountInfo') ? JSON.parse(localStorage.getItem('accountInfo')) : {}, // 登录返回的信息
       userInfo: localStorage.getItem('userInfo') ? JSON.parse(localStorage.getItem('userInfo')) : {}, // 当前登录账号信息
       baseInfo: localStorage.getItem('baseInfo') ? JSON.parse(localStorage.getItem('baseInfo')) : {}, // 人才信息
+      entBaseInfo: localStorage.getItem('entBaseInfo') ? JSON.parse(localStorage.getItem('entBaseInfo')) : {}, // 企业个人信息
       userAccount: {}, // 用户账户信息
       enterpriseUserAccount: {} // 企业账户信息
     }),
@@ -41,13 +42,11 @@ export const useUserStore = defineStore('user',
         return new Promise((resolve, reject) => {
           const loginApi = data.loginType === 330 ? smsLoginOfEnterprise : smsLogin
           loginApi(data).then(async res => {
-            // this.loginType = data.loginType
             setToken(res.accessToken)
             setRefreshToken(res.refreshToken)
             this.accountInfo = res
             localStorage.setItem('accountInfo', JSON.stringify(res))
             localStorage.setItem('expiresTime', res.expiresTime) // token过期时间
-            localStorage.setItem('loginType', 'personal')
             await this.getUserInfos()
             this.getUserBaseInfos()
             resolve()
@@ -65,7 +64,6 @@ export const useUserStore = defineStore('user',
             this.accountInfo = res
             localStorage.setItem('accountInfo', JSON.stringify(res))
             localStorage.setItem('expiresTime', res.expiresTime) // token过期时间
-            localStorage.setItem('loginType', 'personal')
             this.getUserInfos()
             this.getUserBaseInfos()
             resolve()
@@ -75,8 +73,8 @@ export const useUserStore = defineStore('user',
       // 获取当前登录账户信息
       async getUserInfos () {
         try {
-          const api = localStorage.getItem('loginType') === 'enterprise' ? getEnterprisingUserInfo : getUserInfo
-          const data = await api({ id: this.accountInfo.userId })
+          // const api = getIsEnterprise() ? getEnterprisingUserInfo : getUserInfo
+          const data = await getUserInfo({ id: this.accountInfo.userId })
           this.userInfo = data
           localStorage.setItem('userInfo', JSON.stringify(data))
           updateEventList(true) // 获取规则配置跟踪列表
@@ -88,9 +86,8 @@ export const useUserStore = defineStore('user',
       // 获取当前登录账户的基本信息(人才信息)
       async getUserBaseInfos (userId = null) {
         try {
-          const api = localStorage.getItem('loginType') === 'enterprise' ? null : getBaseInfo
-          if (!api) return
-          const data = await api({ userId: userId || this.accountInfo.userId })
+          // const api = getIsEnterprise() ? null : getBaseInfo
+          const data = await getBaseInfo({ userId: userId || this.accountInfo.userId })
           if (!data) return localStorage.setItem('baseInfo', '{}')
           this.baseInfo = await this.getFieldText(data)
           localStorage.setItem('baseInfo', JSON.stringify(this.baseInfo))
@@ -125,20 +122,22 @@ export const useUserStore = defineStore('user',
         localStorage.clear()
       },
       // 切换为招聘者
-      async changeRole (enterpriseId) {
+      async changeRole () {
         // 先退出个人登录
-        await logout()
+        // await logout()
+        const enterpriseId = localStorage.getItem('enterpriseId') || ''
+        if (!enterpriseId) return Snackbar.error('切换失败,请重新登录!')
 
         const data = await switchLoginOfEnterprise({ enterpriseId })
-        setToken(data.accessToken)
-        setRefreshToken(data.refreshToken)
-        localStorage.setItem('loginType', 'enterprise')
+        setToken(data.accessToken, 1) // 个人切换企业->存放企业token
+        setRefreshToken(data.refreshToken, 1) // 个人切换企业->存放企业refreshToken
         localStorage.setItem('accountInfo', JSON.stringify(data))
         localStorage.setItem('expiresTime', data.expiresTime)
         localStorage.setItem('currentRole', 'enterprise')
         await this.getEnterpriseInfo()
         await this.getEnterpriseUserAccountInfo()
         updateEventList(false)
+        window.location.href = '/enterprise'
         Snackbar.success('切换成功')
       },
       // 获取当前登录的企业用户信息
@@ -150,7 +149,7 @@ export const useUserStore = defineStore('user',
         const isAdmin = result.userType === '1'
         localStorage.setItem('isAdmin', isAdmin)
 
-        localStorage.setItem('baseInfo', JSON.stringify(result))
+        localStorage.setItem('entBaseInfo', JSON.stringify(result))
       },
       // 获取企业账户信息
       async getEnterpriseUserAccountInfo () {
@@ -164,6 +163,7 @@ export const useUserStore = defineStore('user',
 
       // 获取《企业基本信息》
       async checkEnterpriseBaseInfo () {
+        await this.changeRole()
         const data = await getEnterpriseBaseInfo()
         // 检验必填信息
         const keyArr = ['industryId', 'financingStatus', 'scale', 'introduce', 'logoUrl'] // 必填信息列表

+ 26 - 19
src/utils/auth.js

@@ -1,26 +1,43 @@
+import router from '@/router'
+
+const isEnterprise = () => {
+  const currentRoute = router.currentRoute.value
+  let bool = currentRoute?.meta?.loginType === 'enterprise'
+  if (currentRoute?.path === '/enterpriseVerification') bool = true
+  return bool
+}
+
+export const getIsEnterprise = () => { isEnterprise() }
+
 // 获取token
-export const getToken = () => {
-  return localStorage.getItem('ACCESS_TOKEN')
+export const getToken = (num) => { // 1:ENT, 2:PER
+  const arr = ['ENT_ACCESS_TOKEN', 'PER_ACCESS_TOKEN']
+  let type = isEnterprise() ? arr[0] : arr[1]
+  //
+  if (num) type = arr[num-1]
+  return localStorage.getItem(type)
 }
 
 // 设置token
-export const setToken = (token) => {
-  return localStorage.setItem('ACCESS_TOKEN', token)
+export const setToken = (token, switchToEnt = 0) => { // 个人切换企业switchToEnt = 1
+  return localStorage.setItem((switchToEnt || isEnterprise() ? 'ENT_ACCESS_TOKEN' : 'PER_ACCESS_TOKEN'), token)
 }
 
 // 清除token
 export const removeToken = () => {
-  localStorage.removeItem('ACCESS_TOKEN')
-  localStorage.removeItem('REFRESH_TOKEN')
+  localStorage.removeItem('ENT_ACCESS_TOKEN')
+  localStorage.removeItem('PER_ACCESS_TOKEN')
+  localStorage.removeItem('ENT_REFRESH_TOKEN')
+  localStorage.removeItem('PER_REFRESH_TOKEN')
 }
 // 获取刷新token
 export const getRefreshToken = () => {
-  return localStorage.getItem('REFRESH_TOKEN')
+  return localStorage.getItem(isEnterprise() ? 'ENT_REFRESH_TOKEN' : 'PER_REFRESH_TOKEN')
 }
 
 // 设置刷新token
-export const setRefreshToken = (refreshToken) => {
-  return localStorage.setItem('REFRESH_TOKEN', refreshToken)
+export const setRefreshToken = (refreshToken, switchToEnt = 0) => { // 个人切换企业switchToEnt = 1
+  return localStorage.setItem((switchToEnt || isEnterprise() ? 'ENT_REFRESH_TOKEN' : 'PER_REFRESH_TOKEN'), refreshToken)
 }
 
 // 租户ID
@@ -31,13 +48,3 @@ export const getTenantId = () => {
 export const setTenantId = (username) => {
   localStorage.setItem('tenantId', username)
 }
-
-// 招聘-企业token
-export const getEnterpriseToken = () => {
-  return localStorage.getItem('loginType') === 'enterprise' && localStorage.getItem('ACCESS_TOKEN')
-}
-
-// 招聘-个人token
-export const getPersonalToken = () => {
-  return localStorage.getItem('loginType') === 'personal' && localStorage.getItem('ACCESS_TOKEN')
-}

+ 4 - 7
src/views/mall/index.vue

@@ -39,12 +39,9 @@ import { useRoute } from 'vue-router'; const route = useRoute()
 import { useRouter } from 'vue-router'; const router = useRouter()
 defineOptions({name: 'personal-pointsMall'})
 
-const loginType = localStorage.getItem('loginType')
-
 const toPointsDetails = () => {
-  router.push({ 
-    path: loginType === 'personal' ? '/recruit/personal/myWallet' : '/recruit/enterprise/memberCenter/myAccount'
-  })
+  // '/recruit/personal/myWallet' : '/recruit/enterprise/memberCenter/myAccount'
+  router.push({ path: '/recruit/personal/myWallet' })
 }
 
 const getPositionList = () => {
@@ -53,8 +50,8 @@ const getPositionList = () => {
 const tab = ref(+route.query?.tab || 1)
 
 const userStore = useUserStore()
-
-const key = loginType === 'personal' ? 'userAccount' : 'enterpriseUserAccount'
+// 'userAccount' : 'enterpriseUserAccount'
+const key = 'userAccount'
 let accountData = ref(JSON.parse(localStorage.getItem(key)) || {})
 
 userStore.$subscribe((mutation, state) => {

+ 2 - 1
src/views/recruit/components/message/index.vue

@@ -488,7 +488,8 @@ const handleAgree = (val) => {
   const query = {
     id: val.id
   }
-  const baseInfo = localStorage.getItem('baseInfo')
+  const type = route?.meta?.loginType === 'enterprise' ? 'entBaseInfo' : 'baseInfo'
+  const baseInfo = localStorage.getItem(type)
   if (baseInfo) {
     const { phone } = JSON.parse(baseInfo)
     query.phone = phone

+ 1 - 1
src/views/recruit/enterprise/informationSetting/index.vue

@@ -87,7 +87,7 @@ const formItems = ref({
 })
 
 // 用户基本信息
-const baseInfo = ref(JSON.parse(localStorage.getItem('baseInfo')) || {})
+const baseInfo = ref(JSON.parse(localStorage.getItem('entBaseInfo')) || {})
 const query = ref({})
 // 获取字典数据以及字段回显
 formItems.value.options.forEach(item => {

+ 1 - 1
src/views/recruit/enterprise/resumeManagement/elite/components/invite.vue

@@ -87,7 +87,7 @@ if (Object.keys(props.itemData).length) {
   obj.value = `${props.itemData?.job?.name}${props.itemData?.job?.areaName ? '_' + props.itemData?.job?.areaName : ''} ${props.itemData?.job?.payFrom}-${props.itemData?.job?.payTo}/${props.itemData?.job?.payName}`
   formItems.value.options.find(e => e.key === 'address').value = props.itemData.job?.address
 
-  const baseInfo = localStorage.getItem('baseInfo')
+  const baseInfo = localStorage.getItem('entBaseInfo')
   if (baseInfo) {
     const { phone } = JSON.parse(baseInfo)
     formItems.value.options.find(e => e.key === 'invitePhone').value = phone

+ 1 - 1
src/views/recruit/enterprise/systemManagement/groupAccount/components/record.vue

@@ -52,7 +52,7 @@ headers.forEach(e => { if (e.title === 'invited') e.title = props.inviteType - 0
 const getData = async () => {
   loading.value = true
   try {
-    const info = JSON.parse(localStorage.getItem('baseInfo')) || null
+    const info = JSON.parse(localStorage.getItem('entBaseInfo')) || null
     const { list, total: number } = await enterpriseInviteRecordPage(query.value)
     const invitedNames = await Promise.all(list.map(async () => getInvited()))
     tableData.value = list.map((e, index) => {

+ 0 - 1
src/views/recruit/enterprise/systemManagement/groupAccount/inviteConfirm.vue

@@ -77,7 +77,6 @@ const handleLogin = async () => {
     const res = await smsLogin(params)
     setToken(res.accessToken)
     setRefreshToken(res.refreshToken)
-    localStorage.setItem('loginType', 'personal') // 不存在时刷新会出现重定向
     getUserBaseInfos(res.userId)
   } catch (error) {
     Snackbar.error('加入失败! ' + error)

+ 0 - 1
src/views/recruit/enterprise/systemManagement/groupAccount/inviteConfirmEnt.vue

@@ -89,7 +89,6 @@ const handleConfirmJoin = async () => {
     const res = await smsLogin(phoneParams)
     setToken(res.accessToken)
     setRefreshToken(res.refreshToken)
-    localStorage.setItem('loginType', 'personal') // 不存在时刷新会出现重定向
     quickRegister.value ? getApplyInfo() : getEnterpriseList()
     // if (quickRegister.value) getApplyInfo()
     // else getEnterpriseList()

+ 4 - 4
src/views/recruit/personal/shareJob/index.vue

@@ -107,7 +107,7 @@ import selectPage from './sendResume/select.vue'
 import { onMounted, reactive, ref } from 'vue';
 import { getPositionDetails, jobCvRelCheckSend, getPersonJobUnfavorite, getPersonJobFavorite, getJobFavoriteCheck } from '@/api/position'
 import { dealDictObjData } from '@/utils/position'
-import { getPersonalToken, getToken } from '@/utils/auth'
+import { getToken } from '@/utils/auth'
 import Snackbar from '@/plugins/snackbar'
 import { useI18n } from '@/hooks/web/useI18n'; const { t } = useI18n()
 
@@ -150,7 +150,7 @@ const getCollectionStatus = async () => {
 // 收藏&取消收藏职位
 const handleCollection = async () => {
   // 效验登录状态
-  if (!getPersonalToken()) {
+  if (!getToken()) {
     actions.value = true
     // handleLogin()
     sendResume.showLogin = true
@@ -170,7 +170,7 @@ if (!jobId) { // !sharedById
   }, 2000)
 } else {
   getPositionDetail()
-  if (getPersonalToken()) {
+  if (getToken()) {
     handleCheckJobDelivery()
     getCollectionStatus()
   }
@@ -215,7 +215,7 @@ const sendResume = reactive({
 const sendResumeProcessVerify = async () => {
   try { // 1.登录 2.具备人才信息 3.有无附件简历,无则上传
     // 未登录
-    if (!getPersonalToken()) {
+    if (!getToken()) {
       sendResume.showLogin = true
       return
     }