浏览代码

查询求职者是否有关注某个企业,是否收藏某个职位

Xiao_123 1 年之前
父节点
当前提交
6107c4233c

+ 8 - 0
src/api/enterprise.js

@@ -14,4 +14,12 @@ export const getEnterpriseDetails = async (params) => {
     url: '/app-api/menduner/system/enterprise/detail',
     params
   })
+}
+
+// 效验求职者是否关注该企业
+export const getEnterpriseSubscribeCheck = async (params) => {
+  return await request.get({
+    url: '/app-api/menduner/system/person/enterprise/subscribe/check',
+    params
+  })
 }

+ 8 - 0
src/api/position.js

@@ -47,3 +47,11 @@ export const getJobAdvertisedSearch = async (params) => {
     params
   })
 }
+
+// 效验求职者是否收藏该职位
+export const getJobFavoriteCheck = async (params) => {
+  return await request.get({
+    url: '/app-api/menduner/system/person/job/favorite/check',
+    params
+  })
+}

+ 21 - 7
src/components/Enterprise/components/positions.vue

@@ -1,8 +1,15 @@
 <template>
   <div>
-    <div class="top">检索</div>
+    <!-- <div class="top">检索</div> -->
     <div class="bottom">
-      <div v-for="(val, i) in list" :key="i" :class="['bottom-item', {'border-bottom-dashed': i !== list.length -1}, 'd-flex', 'justify-space-between']" @mouseenter="val.active = true" @mouseleave="val.active = false">
+      <div 
+        v-for="(val, i) in list" 
+        :key="i" 
+        :class="['bottom-item', {'border-bottom-dashed': i !== list.length -1}, 'd-flex', 'justify-space-between', 'cursor-pointer']" 
+        @mouseenter="val.active = true"
+        @mouseleave="val.active = false"
+        @click="handlePosition(val)"
+       >
         <div>
           <p :class="['name', {'default-active': val.active }]">{{ val.name }}</p>
           <div style="line-height: 40px;">
@@ -50,6 +57,10 @@ const handleChangePage = (index) => {
   console.log(index, 'handle-page')
 }
 
+const handlePosition = (val) => {
+  window.open(`/recruit/position/details/${val.positionId}`)
+}
+
 const list = ref([
   {
     name: '产品经理',
@@ -60,7 +71,8 @@ const list = ref([
     areaName: '广州',
     eduName: '本科',
     expName: '1-3年',
-    active: false
+    active: false,
+    positionId: 4
   },
   {
     name: '产品经理',
@@ -71,7 +83,8 @@ const list = ref([
     areaName: '广州',
     eduName: '本科',
     expName: '1-3年',
-    active: false
+    active: false,
+    positionId: 4
   },
   {
     name: '产品经理',
@@ -82,7 +95,8 @@ const list = ref([
     areaName: '广州',
     eduName: '本科',
     expName: '1-3年',
-    active: false
+    active: false,
+    positionId: 4
   }
 ])
 const desc = [
@@ -95,8 +109,8 @@ const desc = [
 <style scoped lang="scss">
 .bottom-item {
   width: 100%;
-  height: 82px;
-  padding: 12px 0;
+  height: 68px;
+  margin-bottom: 12px;
 }
 .name {
   position: relative;

+ 16 - 3
src/components/Enterprise/details.vue

@@ -16,8 +16,13 @@
           <div class="tools-box-number">{{ info.jobAdvertisedCount }}</div>
           <div class="tools-box-text">职位在招</div>
         </div>
-        <v-icon class="ml-5 mr-2" size="25" :color="info.attention ? 'primary' : ''">{{ info.attention ? 'mdi-heart' : 'mdi-heart-outline' }}</v-icon>
-        <v-icon size="25">mdi-alert-outline</v-icon> 
+        <!-- 是否关注该企业 -->
+        <v-tooltip location="bottom">
+          <template v-slot:activator="{ props }">
+            <v-icon v-bind="props" class="ml-5 mr-2" size="25" :color="isCollection ? 'primary' : ''">{{ isCollection ? 'mdi-heart' : 'mdi-heart-outline' }}</v-icon>
+          </template>
+          <span>关注该企业</span>
+        </v-tooltip>
       </div>
     </div>
     <v-divider></v-divider>
@@ -78,7 +83,7 @@ defineOptions({ name: 'enterprise-details'})
 import { ref } from 'vue'
 import EnterpriseIntroduction from './components/introduction.vue'
 import recruitmentPositions from './components/positions.vue'
-import { getEnterpriseDetails } from '@/api/enterprise'
+import { getEnterpriseDetails, getEnterpriseSubscribeCheck } from '@/api/enterprise'
 import { timesTampChange } from '@/utils/date'
 import { dealDictData } from '@/views/recruit/position/components/dict.js'
 
@@ -101,9 +106,17 @@ const getDetails = async () => {
   data.business.establishmentTime = time.slice(0, 10)
 
   info.value = { ...data, ...dealDictData({}, data.enterprise) }
+  getCollectionStatus(id)
 }
 getDetails()
 
+// 效验求职者是否关注该企业
+const isCollection = ref(false)
+const getCollectionStatus = async (id) => {
+  const data = await getEnterpriseSubscribeCheck({ enterpriseId: id })
+  isCollection.value = data
+}
+
 // 工商信息
 const businessList = [
   { label: '企业类型:', value: 'type' },

+ 16 - 4
src/views/recruit/position/components/details.vue

@@ -17,9 +17,9 @@
             <v-chip size="small" label v-for="(k, i) in info.tagList" :key="i" class="mr-1" color="primary">{{ k }}</v-chip>
           </div>
           <div class="banner-tools-btns float-right">
-            <v-btn class="half-button radius" color="warning" variant="outlined" prepend-icon="mdi-star-outline">收藏</v-btn>
-            <v-btn class="half-button mx-2 radius" color="success" variant="outlined">立即沟通</v-btn>
-            <v-btn class="half-button radius" color="primary" variant="outlined">投递简历</v-btn>
+            <v-btn class="button-item radius" color="warning" variant="outlined" :prepend-icon="isCollection ? 'mdi-heart' : 'mdi-heart-outline'">{{ isCollection ? '取消收藏': '收藏' }}</v-btn>
+            <v-btn class="button-item mx-2 radius" color="success" variant="outlined">立即沟通</v-btn>
+            <v-btn class="button-item radius" color="primary" variant="outlined">投递简历</v-btn>
           </div>
         </div>
         <v-divider></v-divider>
@@ -73,7 +73,7 @@ defineOptions({ name: 'position-details' })
 import { ref } from 'vue'
 import { useRouter } from 'vue-router'
 import { timesTampChange } from '@/utils/date'
-import { getPositionDetails, getSimilarPosition } from '@/api/position'
+import { getPositionDetails, getSimilarPosition, getJobFavoriteCheck } from '@/api/position'
 import { dealDictData } from '@/views/recruit/position/components/dict'
 import similarPositions from '@/components/Position/similarPositions.vue'
 import EnterpriseInfo from '@/components/Enterprise/info.vue'
@@ -107,6 +107,14 @@ const getSimilarPositionList = async () => {
 }
 
 getSimilarPositionList()
+
+// 效验求职者是否有收藏该职位
+const isCollection = ref(true)
+const getCollectionStatus = async () => {
+  const data = await getJobFavoriteCheck({ jobId: id })
+  isCollection.value = data
+}
+getCollectionStatus()
 </script>
 
 <style lang="scss" scoped>
@@ -128,6 +136,10 @@ getSimilarPositionList()
   max-width: 360px;
   vertical-align: middle;
 }
+.button-item {
+  width: 110px;
+  height: 36px
+}
 .salary {
   color: var(--v-error-base);
   line-height: 41px;