Browse Source

企业-职位管理:列表可查看招聘会职位,操作按钮只有查看详情可用

Xiao_123 3 weeks ago
parent
commit
bcd0af8446

+ 1 - 1
src/views/recruit/enterprise/jobFair/components/jobItem.vue

@@ -109,7 +109,7 @@ const handleToResume = (val) => {
 // 职位详情
 // 职位详情
 const handleDetail = async (val) => {
 const handleDetail = async (val) => {
   if (!val.id) return
   if (!val.id) return
-  window.open(`/recruit/enterprise/position/details?id=${val.id}`)
+  window.open(`/recruit/enterprise/position/details?id=${val.id}&jobFairId=${route.params.id}`)
 }
 }
 </script>
 </script>
 
 

+ 4 - 3
src/views/recruit/enterprise/jobFair/index.vue

@@ -3,14 +3,15 @@
     <div v-if="list.length > 0" class="card-box pa-5">
     <div v-if="list.length > 0" class="card-box pa-5">
       <v-card v-for="(k, i) in list" :key="i" class="elevation-3">
       <v-card v-for="(k, i) in list" :key="i" class="elevation-3">
         <img :src="k.pcPreviewImg" style="width: 100%; object-fit: contain;" />
         <img :src="k.pcPreviewImg" style="width: 100%; object-fit: contain;" />
-        <div class="px-5 py-3">
-          <div class="color-666">
+        <div class="px-5 py-3 color-666">
+          <div>活动主题:{{ k.title }}</div>
+          <div>
             活动状态:
             活动状态:
             <span class="font-weight-bold" :style="{'color': k.status === '0' ? 'var(--v-primary-base)' : 'var(--v-error-base)'}">
             <span class="font-weight-bold" :style="{'color': k.status === '0' ? 'var(--v-primary-base)' : 'var(--v-error-base)'}">
               {{ k.status === '0' ? '进行中' : '已结束' }}
               {{ k.status === '0' ? '进行中' : '已结束' }}
             </span>
             </span>
           </div>
           </div>
-          <div class="color-666">活动时间:{{ timesTampChange(k.startTime, 'Y-M-D') }}至{{ timesTampChange(k.endTime, 'Y-M-D') }}</div>
+          <div>活动时间:{{ timesTampChange(k.startTime, 'Y-M-D') }}至{{ timesTampChange(k.endTime, 'Y-M-D') }}</div>
           <div class="text-end">
           <div class="text-end">
             <v-btn color="primary" variant="outlined" @click.stop="handleBlockEnterprise(k)">
             <v-btn color="primary" variant="outlined" @click.stop="handleBlockEnterprise(k)">
               {{ k.status === '1' ? '查看详情' : '立即加入'}}
               {{ k.status === '1' ? '查看详情' : '立即加入'}}

+ 92 - 19
src/views/recruit/enterprise/positionManagement/components/item.vue

@@ -1,28 +1,38 @@
 <template>
 <template>
   <div>
   <div>
     <div v-if="props.items.length" class="d-flex align-center mb-1">
     <div v-if="props.items.length" class="d-flex align-center mb-1">
-      <v-checkbox v-if="tab === 1" v-model="selectAll" :label="!selectAll ? $t('common.selectAll') : `已选中${selectList.length}条`" hide-details color="primary" @update:model-value="handleChangeSelectAll"></v-checkbox>
+      <v-checkbox
+        v-if="tab === 1"
+        v-model="selectAll"
+        :label="!selectAll ? $t('common.selectAll') : `已选中${selectList.length}条`"
+        hide-details
+        color="primary"
+        @update:model-value="handleChangeSelectAll"
+      ></v-checkbox>
       <div v-if="tab === 1" class="ml-8">
       <div v-if="tab === 1" class="ml-8">
         <v-btn :disabled="!selectAll" color="primary" variant="tonal" size="small" @click="handleAction(2, 'batch', {})">一键刷新</v-btn>
         <v-btn :disabled="!selectAll" color="primary" variant="tonal" size="small" @click="handleAction(2, 'batch', {})">一键刷新</v-btn>
         <v-btn class="mx-3" :disabled="!selectAll" color="primary" variant="tonal" size="small" @click="handleAction(3, 'top', {})">{{ $t('common.topping') }}</v-btn>
         <v-btn class="mx-3" :disabled="!selectAll" color="primary" variant="tonal" size="small" @click="handleAction(3, 'top', {})">{{ $t('common.topping') }}</v-btn>
-        <!-- <v-btn class="mr-3" :disabled="!selectAll" color="primary" variant="tonal" size="small" @click="handleAction(4, 'top', {})">取消置顶</v-btn> -->
         <v-btn :disabled="!selectAll" color="primary" variant="tonal" size="small" @click="handleAction(0, 'close', {})">{{ $t('common.close') }}</v-btn>
         <v-btn :disabled="!selectAll" color="primary" variant="tonal" size="small" @click="handleAction(0, 'close', {})">{{ $t('common.close') }}</v-btn>
       </div>
       </div>
-      <!-- <v-btn v-if="tab === 2" class="ml-8" :disabled="!selectAll" color="primary" variant="tonal" size="small" @click="handleAction(1, 'activation', {})">一键激活</v-btn> -->
     </div>
     </div>
-    <div v-for="val in items" :key="val.id" class="itemBox mb-3" style="height: 134px;">
+    <div v-for="val in items" :key="val.id" class="itemBox mb-3" :style="{'height': val.jobFairName ? '160px' : '134px'}">
       <div v-if="val.top && tab === 1" style="position: absolute;">
       <div v-if="val.top && tab === 1" style="position: absolute;">
         <svg-icon name="top" size="50"></svg-icon>
         <svg-icon name="top" size="50"></svg-icon>
       </div>
       </div>
       <div class="d-flex justify-space-between" style="padding: 10px 20px;">
       <div class="d-flex justify-space-between" style="padding: 10px 20px;">
         <div class="position" :style="{'max-width': (val.status-0) === 99 && tab === 0 ? '70%' : '85%'}">
         <div class="position" :style="{'max-width': (val.status-0) === 99 && tab === 0 ? '70%' : '85%'}">
-          <div class="item-select ml-5" v-if="tab === 1">
+          <div class="item-select ml-5" v-if="tab === 1 && !val.jobFairName">
             <v-checkbox v-model="val.select" hide-details color="primary" @update:model-value="handleChangeSelect"></v-checkbox>
             <v-checkbox v-model="val.select" hide-details color="primary" @update:model-value="handleChangeSelect"></v-checkbox>
           </div>
           </div>
-          <div class="d-flex align-center" :class="{'cursor-pointer': tab === 1, 'ml-15': tab === 1}" @click="handleDetail(val)">
+          <div
+            class="d-flex align-center"
+            :class="{'cursor-pointer': tab === 1, 'ml-15': tab === 1 && !val.jobFairName}"
+            @click="handleDetail(val)"
+          >
+            <svg-icon v-if="val.jobFairName" name="jobFair" size="20"></svg-icon>
             <span class="position-name" v-ellipse-tooltip>{{ formatName(val.name) }}</span>
             <span class="position-name" v-ellipse-tooltip>{{ formatName(val.name) }}</span>
           </div>
           </div>
-          <div :class="['mt-3', 'other-info', 'ellipsis', {'ml-10': tab === 1}]">
+          <div :class="['mt-3', 'other-info', 'ellipsis', {'ml-10': tab === 1  && !val.jobFairName}]">
             <span>{{ !val.areaId ? '全国' : val.area?.str }}</span>
             <span>{{ !val.areaId ? '全国' : val.area?.str }}</span>
             <span class="lines" v-if="val.eduName"></span>
             <span class="lines" v-if="val.eduName"></span>
             <span>{{ val.eduName }}</span>
             <span>{{ val.eduName }}</span>
@@ -34,6 +44,12 @@
             <span class="lines" v-if="val.positionName"></span>
             <span class="lines" v-if="val.positionName"></span>
             <span>{{ val.positionName }}</span>
             <span>{{ val.positionName }}</span>
           </div>
           </div>
+          <div
+            v-if="val.jobFairName"
+            class="color-primary font-size-15 mt-3"
+            >
+            招聘会:{{ val.jobFairName }}
+          </div>
         </div>
         </div>
         <div v-if="tab !== 0" class="text-center color-primary d-flex flex-column justify-center cursor-pointer" @click="handleToResume(val)">
         <div v-if="tab !== 0" class="text-center color-primary d-flex flex-column justify-center cursor-pointer" @click="handleToResume(val)">
           <div class="font-weight-bold font-size-18">{{ val.count || 0 }}</div>
           <div class="font-weight-bold font-size-18">{{ val.count || 0 }}</div>
@@ -56,24 +72,78 @@
         <div class="d-flex bottom-item justify-end">
         <div class="d-flex bottom-item justify-end">
           <div class="ml-10 d-flex">
           <div class="ml-10 d-flex">
             <div v-if="tab === 1">
             <div v-if="tab === 1">
-              <span class="cursor-pointer actions" @click="handleAction(val.top ? 4 : 3, '', val)">{{ val.top ? '取消置顶' : $t('common.topping') }}</span>
+              <span>
+                <span
+                  class="cursor-pointer"
+                  :class="{'actions': !val.jobFairName}"
+                  :style="{'color': !val.jobFairName ? '#333' : '#999'}"
+                  @click="handleAction(val.top ? 4 : 3, '', val)"
+                  >
+                  {{ val.top ? '取消置顶' : $t('common.topping') }}
+                </span>
+                <v-tooltip v-if="val.jobFairName" activator="parent" location="top">该职位属于招聘会职位,无法置顶</v-tooltip>
+              </span>
               <span class="lines"></span>
               <span class="lines"></span>
-              <span class="cursor-pointer actions" @click="handleAction(0, '', val)">{{ $t('common.close') }}</span>
+              <span>
+                <span
+                  class="cursor-pointer"
+                  :class="{'actions': !val.jobFairName}"
+                  :style="{'color': !val.jobFairName ? '#333' : '#999'}"
+                  @click="handleAction(0, '', val)"
+                  >
+                  {{ $t('common.close') }}
+                </span>
+                <v-tooltip v-if="val.jobFairName" activator="parent" location="top">该职位属于招聘会职位,请前往招聘会中进行关闭</v-tooltip>
+              </span>
             </div>
             </div>
+
+            <!-- 待发布的职位有额度时可使用额度发布职位 -->
             <span v-if="jobNum && +jobNum > 0 && (val.status-0) === 99 && tab === 0">
             <span v-if="jobNum && +jobNum > 0 && (val.status-0) === 99 && tab === 0">
               <span class="cursor-pointer color-primary" @click="handleRelease(val)">使用额度发布</span>
               <span class="cursor-pointer color-primary" @click="handleRelease(val)">使用额度发布</span>
               <span class="lines"></span>
               <span class="lines"></span>
             </span>
             </span>
-            <span v-if="(val.status-0) === 99 && tab === 0" class="cursor-pointer color-primary" @click="toPay(val)">支付发布</span>
-            <span class="lines" v-if="tab !== 2 && tab !== 3"></span>
-            <span v-if="tab === 2" class="cursor-pointer actions" @click="handleAction(1, '', val, val)">激活</span>
+
+            <span
+              v-if="(val.status-0) === 99 && tab === 0"
+              class="cursor-pointer color-primary"
+              @click="toPay(val)"
+              >
+              支付发布
+            </span>
+
+            <span class="lines" v-if="tab !== 2"></span>
+            <span>
+              <span
+                v-if="tab === 2"
+                class="cursor-pointer"
+                :class="{'actions': !val.jobFairName}"
+                :style="{'color': !val.jobFairName ? '#333' : '#999'}"
+                @click="handleAction(1, '', val, val)"
+                >
+                激活
+              </span>
+              <v-tooltip v-if="val.jobFairName" activator="parent" location="top">该职位属于招聘会职位,请前往招聘会中进行激活</v-tooltip>
+            </span>
+
             <span class="lines" v-if="tab === 2"></span>
             <span class="lines" v-if="tab === 2"></span>
-            <span class="cursor-pointer actions" @click="handleDetail(val)">详情</span>  
-            <div v-if="tab !== 3">
+            <span class="cursor-pointer actions" @click="handleDetail(val)">详情</span>
+
+            <!-- 编辑(招聘会职位只可在招聘会中进行操作) -->
+            <div>
               <span class="lines"></span>
               <span class="lines"></span>
-              <span class="cursor-pointer" :class="{'actions': val.edit}" :style="{'color': val.edit ? '#333' : '#999'}" @click="handleEdit(val)">{{ $t('common.edit') }}</span>
+              <span
+                class="cursor-pointer"
+                :class="{'actions': val.edit && !val.jobFairName}"
+                :style="{'color': val.edit && !val.jobFairName ? '#333' : '#999'}"
+                @click="handleEdit(val)"
+              >
+                {{ $t('common.edit') }}
+              </span>
               <v-tooltip v-if="!val.edit" activator="parent" location="top">职位发布时间超过24小时的不支持编辑</v-tooltip>
               <v-tooltip v-if="!val.edit" activator="parent" location="top">职位发布时间超过24小时的不支持编辑</v-tooltip>
+              <v-tooltip v-if="val.jobFairName" activator="parent" location="top">该职位属于招聘会职位,请前往招聘会中进行编辑</v-tooltip>
             </div>
             </div>
+
+            <!-- 待发布职位删除 -->
             <span v-if="(val.status-0) === 99 && tab === 0">
             <span v-if="(val.status-0) === 99 && tab === 0">
               <span class="lines"></span>
               <span class="lines"></span>
               <span class="cursor-pointer actions color-error" @click="handleDelete(val)">删除</span>  
               <span class="cursor-pointer actions color-error" @click="handleDelete(val)">删除</span>  
@@ -137,7 +207,7 @@ const dealSelect = () => {
 // 全选
 // 全选
 const handleChangeSelectAll = () => {
 const handleChangeSelectAll = () => {
   props.items.map(k => {
   props.items.map(k => {
-    k.select = selectAll.value
+    k.select = k.jobFairName ? false : selectAll.value
     return k
     return k
   })
   })
   dealSelect()
   dealSelect()
@@ -228,7 +298,8 @@ const paySuccess = async () => {
 
 
 const apiList = [closeJobAdvertised, enableJobAdvertised, refreshJobAdvertised, topJobAdvertised, topJobAdvertisedCancel]
 const apiList = [closeJobAdvertised, enableJobAdvertised, refreshJobAdvertised, topJobAdvertised, topJobAdvertisedCancel]
 // 职位关闭、激活、刷新、置顶
 // 职位关闭、激活、刷新、置顶
-const handleAction = async (index, type, { id }, item) => {
+const handleAction = async (index, type, { id, jobFairName }, item) => {
+  if (jobFairName) return // 招聘会职位不可在职位管理中进行操作,只可查看详情
   const ids = type ? props.items.filter(e => e.select).map(k => k.id) : [id]
   const ids = type ? props.items.filter(e => e.select).map(k => k.id) : [id]
   if (!ids.length && !index) return
   if (!ids.length && !index) return
 
 
@@ -272,7 +343,7 @@ const handleAction = async (index, type, { id }, item) => {
 const router = useRouter()
 const router = useRouter()
 // 职位编辑
 // 职位编辑
 const handleEdit = async (val) => {
 const handleEdit = async (val) => {
-  if (!val.id || !val.edit) return
+  if (!val.id || val.jobFairName || !val.edit) return
   const data = await getEnterprisePubJobTypePermission()
   const data = await getEnterprisePubJobTypePermission()
   if (!data || !data.length) return Snackbar.warning('没有该操作权限,请联系平台管理员升级后再试')
   if (!data || !data.length) return Snackbar.warning('没有该操作权限,请联系平台管理员升级后再试')
   router.push(`/recruit/enterprise/position/edit?id=${val.id}`)
   router.push(`/recruit/enterprise/position/edit?id=${val.id}`)
@@ -281,7 +352,9 @@ const handleEdit = async (val) => {
 // 职位详情
 // 职位详情
 const handleDetail = async (val) => {
 const handleDetail = async (val) => {
   if (!val.id) return
   if (!val.id) return
-  window.open(`/recruit/enterprise/position/details?id=${val.id}`)
+  let path = `/recruit/enterprise/position/details?id=${val.id}`
+  if (val.jobFairId) path += `&jobFairId=${val.jobFairId}`
+  window.open(path)
 }
 }
 
 
 // 查看职位投递简历
 // 查看职位投递简历

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

@@ -158,7 +158,7 @@ const tipsText = ref(t('common.noData'))
 const query = ref({
 const query = ref({
   pageSize: 10,
   pageSize: 10,
   pageNo: 1,
   pageNo: 1,
-  jobFairId: 0, // 过滤非招聘会职位
+  // jobFairId: 0, // 过滤非招聘会职位
   status: 0, // 0招聘中 1已关闭
   status: 0, // 0招聘中 1已关闭
   hire: false // true 众聘岗位
   hire: false // true 众聘岗位
 })
 })

+ 3 - 2
src/views/recruit/personal/jobFair/index.vue

@@ -5,8 +5,9 @@
 			<div class="px-3 content">
 			<div class="px-3 content">
 				<v-card elevation="5" v-for="val in list" :key="val.id">
 				<v-card elevation="5" v-for="val in list" :key="val.id">
 					<img :src="val.pcPreviewImg" alt="" style="object-fit: contain; width: 100%;">
 					<img :src="val.pcPreviewImg" alt="" style="object-fit: contain; width: 100%;">
-					<div class="pa-3">
-						<div class="color-666">活动时间:{{ timesTampChange(val.startTime, 'Y-M-D') }}至{{ timesTampChange(val.endTime, 'Y-M-D') }}</div>
+					<div class="pa-3 color-666">
+						<div>活动主题:{{ val.title }}</div>
+						<div>活动时间:{{ timesTampChange(val.startTime, 'Y-M-D') }}至{{ timesTampChange(val.endTime, 'Y-M-D') }}</div>
 						<div class="text-end">
 						<div class="text-end">
 							<v-btn color="primary" variant="outlined" @click.stop="handleJoin(val)">查看详情</v-btn>
 							<v-btn color="primary" variant="outlined" @click.stop="handleJoin(val)">查看详情</v-btn>
 						</div>
 						</div>

+ 0 - 1
src/views/recruit/personal/recommend/index.vue

@@ -34,7 +34,6 @@
 defineOptions({ name: 'personalPositionRecommend'})
 defineOptions({ name: 'personalPositionRecommend'})
 import buttons from '@/views/recruit/personal/components/buttons.vue'
 import buttons from '@/views/recruit/personal/components/buttons.vue'
 import { ref, reactive, nextTick } from 'vue'
 import { ref, reactive, nextTick } from 'vue'
-// import { getJobAdvertisedSearch } from '@/api/position'
 import { getPromotedPosition } from '@/api/position'
 import { getPromotedPosition } from '@/api/position'
 import { dealDictArrayData } from '@/utils/position'
 import { dealDictArrayData } from '@/utils/position'
 import positionList from './components/positionList'
 import positionList from './components/positionList'