Jelajahi Sumber

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

lifanagju_citu 10 bulan lalu
induk
melakukan
2f328f5335
22 mengubah file dengan 266 tambahan dan 89 penghapusan
  1. 16 0
      src/api/publicRecruitment/index.js
  2. 7 0
      src/api/recruit/enterprise/system/post/index.js
  3. 5 0
      src/components/FormUI/TextInput/index.vue
  4. 4 1
      src/components/Position/item.vue
  5. 4 1
      src/components/PositionLongStrip/item.vue
  6. 8 8
      src/router/modules/enterprise.js
  7. 1 1
      src/views/integral/pointsManagement/components/integralTable.vue
  8. 1 1
      src/views/integral/pointsManagement/components/signInTable.vue
  9. 7 8
      src/views/publicRecruitment/components/table.vue
  10. 4 4
      src/views/publicRecruitment/index.vue
  11. 66 38
      src/views/publicRecruitment/myRecommendation.vue
  12. 1 1
      src/views/recruit/enterprise/memberCenter/myPoints/components/integralTable.vue
  13. 1 1
      src/views/recruit/enterprise/personnelManagement/components/table.vue
  14. 1 0
      src/views/recruit/enterprise/personnelManagement/index.vue
  15. 1 1
      src/views/recruit/enterprise/positionManagement/components/add.vue
  16. 81 6
      src/views/recruit/enterprise/positionManagement/components/baseInfo.vue
  17. 4 3
      src/views/recruit/enterprise/positionManagement/components/item.vue
  18. 20 2
      src/views/recruit/enterprise/positionManagement/components/jobRequirements.vue
  19. 5 5
      src/views/recruit/enterprise/publicRecruitmentManagement/deliver/components/table.vue
  20. 21 2
      src/views/recruit/enterprise/publicRecruitmentManagement/deliver/index.vue
  21. 6 4
      src/views/recruit/enterprise/systemManagement/postManagement/index.vue
  22. 2 2
      src/views/recruit/enterprise/systemManagement/userManagement/index.vue

+ 16 - 0
src/api/publicRecruitment/index.js

@@ -0,0 +1,16 @@
+import request from '@/config/axios'
+
+// 获取推荐职位投递状态数量
+export const getHireJobCvRelCount = async () => {
+  return await request.get({
+    url: '/app-api/menduner/system/hire-job-cv-rel/get/commend/count'
+  })
+}
+
+// 获取推荐邀请投递的职位信息
+export const getHireJobCvRelPage = async (params) => {
+  return await request.get({
+    url: '/app-api/menduner/system/hire-job-cv-rel/page',
+    params
+  })
+}

+ 7 - 0
src/api/recruit/enterprise/system/post/index.js

@@ -36,4 +36,11 @@ export const deleteEnterprisePost = async (id) => {
   return await request.delete({
     url: `/app-admin-api/menduner/system/enterprise-post/delete?id=${id}`
   })
+}
+
+// 效验岗位下是否绑定用户
+export const checkPost = async (postId) => {
+  return await request.get({
+    url: `/app-admin-api/menduner/system/user/check/post?postId=${postId}`
+  })
 }

+ 5 - 0
src/components/FormUI/TextInput/index.vue

@@ -28,6 +28,7 @@
       @click:append="appendClick"
       @click:append-inner="appendInnerClick"
       @keyup.enter="handleKeyup"
+      @click:clear="handleClear"
     ></v-text-field>
   </div>
 </template>
@@ -63,6 +64,10 @@ const appendInnerClick = () => {
   emit('appendInnerClick', value.value)
 }
 
+const handleClear = () => {
+  emit('enter', value.value)
+}
+
 const handleKeyup = () => {
   emit('enter', value.value)
 }

+ 4 - 1
src/components/Position/item.vue

@@ -23,7 +23,10 @@
             </div>
             <PublicRecruitment v-if="tab === 3 && item.hire"></PublicRecruitment>
           </div>
-          <v-chip v-if="tab === 3 && item.hire && item.hirePrice" size="small" label class="mr-1" color="primary">赏金:{{ item.hirePrice }}元</v-chip>
+          <div v-if="tab === 3 && item.hire">
+            <v-chip v-if="item.hirePrice" size="small" label class="mr-1" color="primary">赏金:{{ item.hirePrice }}元</v-chip>
+            <v-chip v-if="item.hirePoint" size="small" label class="mr-1" color="primary">积分:{{ item.hirePoint }}点</v-chip>
+          </div>
         </div>
         <div class="sub-li-bottom" @click="handleEnterprise(item)">
           <div class="user-info">

+ 4 - 1
src/components/PositionLongStrip/item.vue

@@ -11,7 +11,10 @@
           <p v-if="item.job.name.indexOf('style')" v-html="item.job.name" :class="['title1', {'default-active': item.positionActive }]"></p>
           <p v-else :class="['title1', {'default-active': item.positionActive }]">{{ item.job.name }}{{ item.job.pos ? ' [' + item.job.pos + '] ' : '' }}</p>
           <p class="salary ml-1">{{ item.job.payFrom }}-{{ item.job.payTo }}/{{ item.job.payName }}</p>
-          <v-chip v-if="item?.job?.hirePrice" class="ml-3" label color="primary" size="small">赏金:{{ item.job.hirePrice }}元</v-chip>
+          <div v-if="item?.job?.hire">
+            <v-chip v-if="item?.job?.hirePrice" class="ml-3" label color="primary" size="small">赏金:{{ item.job.hirePrice }}元</v-chip>
+            <v-chip v-if="item?.job?.hirePoint" class="ml-3" label color="primary" size="small">积分:{{ item.job.hirePoint }}点</v-chip>
+          </div>
         </div>
         <div class="mt-2">
           <v-chip size="x-small" label v-for="(j, i) in desc" :key="i" class="mr-1" color="var(--color-666)" :prepend-icon="j.mdi">{{ item.job[j.value] }}</v-chip>

+ 8 - 8
src/router/modules/enterprise.js

@@ -170,14 +170,14 @@ const enterprise = [
         },
         component: () => import('@/views/recruit/enterprise/publicRecruitmentManagement/deliver')
       },
-      {
-        path: '/recruit/enterprise/publicRecruitmentManagement/commission',
-        meta: {
-          title: '佣金比例',
-          enName: 'Commission rate'
-        },
-        component: () => import('@/views/recruit/enterprise/publicRecruitmentManagement/commission')
-      }
+      // {
+      //   path: '/recruit/enterprise/publicRecruitmentManagement/commission',
+      //   meta: {
+      //     title: '佣金比例',
+      //     enName: 'Commission rate'
+      //   },
+      //   component: () => import('@/views/recruit/enterprise/publicRecruitmentManagement/commission')
+      // }
     ]
   },
   {

+ 1 - 1
src/views/integral/pointsManagement/components/integralTable.vue

@@ -23,7 +23,7 @@ const headers = [
   { title: '来源', key: 'description' },
   { title: '积分数', key: 'point' },
   { title: '总积分数', key: 'totalPoint' },
-  { title: '获得时间', key: 'createTime', value: item =>  timesTampChange(item.createTime) }
+  { title: '获得时间', key: 'createTime', value: item =>  timesTampChange(item.createTime), sortable: false }
 ]
 </script>
 

+ 1 - 1
src/views/integral/pointsManagement/components/signInTable.vue

@@ -24,7 +24,7 @@ const { t } = useI18n()
 const headers = [
   { title: t('taskCenter.signInDays'), key: 'day' },
   { title: t('taskCenter.points'), key: 'point' },
-  { title: t('taskCenter.createTime'), key: 'createTime', value: item => timesTampChange(item.createTime)}
+  { title: t('taskCenter.createTime'), key: 'createTime', value: item => timesTampChange(item.createTime), sortable: false }
 ]
 </script>
 

+ 7 - 8
src/views/publicRecruitment/components/table.vue

@@ -11,7 +11,7 @@
     <template #bottom></template>
     <template v-slot:item.name="{ item }">
       <div class="d-flex align-center cursor-pointer" >
-        <v-avatar size="40" :image="item.avatar || 'https://minio.citupro.com/dev/menduner/7.png'"></v-avatar>
+        <v-avatar size="40" :image="item?.recommendPerson?.avatar || 'https://minio.citupro.com/dev/menduner/7.png'"></v-avatar>
         <span class="ml-2" style="color: #000000DE;">{{ item?.name }}</span>
       </div>
     </template>
@@ -21,22 +21,21 @@
 <script setup>
 defineOptions({ name: 'myPublicRecruitment-table-page'})
 import { ref } from 'vue'
+import { timesTampChange } from '@/utils/date'
 
-// const emit = defineEmits(['refresh'])
 defineProps({
   tab: String,
   items: Array
 })
 
-
 const selected = ref([])
 const headers = [
   { title: '牛人', value: 'name' },
-  { title: '应聘公司', value: '应聘公司' },
-  { title: '应聘职位', key: '应聘职位' },
-  { title: '岗位薪资', key: '岗位薪资' },
-  { title: '赏金', value: '赏金' },
-  { title: '推荐进度', key: '推荐进度' },
+  { title: '应聘公司', key: 'enterpriseName', value: item => item?.enterprise?.name, sortable: false },
+  { title: '应聘职位', key: 'job', value: item => item?.job?.name, sortable: false },
+  { title: '岗位薪资', key: 'salary', value: item => `${item?.job?.payFrom}-${item?.job?.payTo}`, sortable: false },
+  { title: '赏金', key: 'hirePrice', value: item => item?.job.hirePrice, sortable: false },
+  { title: '推荐时间', key: 'createTime', value: item => timesTampChange(item.createTime), sortable: false },
 ]
 
 </script>

+ 4 - 4
src/views/publicRecruitment/index.vue

@@ -3,15 +3,15 @@
   <div class="default-width py-3">
     <v-tabs v-model="tab" align-tabs="start" color="primary" bg-color="#fff" @update:model-value="getPositionList">
       <v-tab :value="1">{{ $t('publicRecruitment.myRecommendation') }}</v-tab>
-      <v-tab :value="2">{{ $t('publicRecruitment.withdrawalRecords') }}</v-tab>
+      <!-- <v-tab :value="2">{{ $t('publicRecruitment.withdrawalRecords') }}</v-tab> -->
     </v-tabs>
     <div class="mt-3">
       <div v-if="tab === 1">
         <myRecommendation></myRecommendation>
       </div>
-      <div v-if="tab === 2" class="pa-3 white-bgc" style="border-radius: 5px;">
-        <!-- <myRegistration></myRegistration> -->
-      </div>
+      <!-- <div v-if="tab === 2" class="pa-3 white-bgc" style="border-radius: 5px;">
+        <myRegistration></myRegistration>
+      </div> -->
     </div>
   </div>
 </template>

+ 66 - 38
src/views/publicRecruitment/myRecommendation.vue

@@ -5,14 +5,21 @@
       <div style="width: 100%;">
         <!-- 统计 -->
         <div class="statisticsBox">
-          <div class="statisticsBox-item" :class="{'act': index === active}" v-for="(item, index) in statisticsList" :key="item.name" @click="statisticsClick(item, index)">
-            <div style="font-size: 18px; color: var(--color-333); font-weight: bold;">{{ statistics[item.name] || '0' }}</div>
+          <div class="statisticsBox-item" :class="{'act': index === active}" v-for="(item, index) in statisticsList" :key="item.value" @click="handleStatisticsItem(item, index)">
+            <div style="font-size: 18px; color: var(--color-333); font-weight: bold;">{{ item.count }}</div>
             <div style="font-size: 13px; color: var(--color-666);">{{ item.label }}</div>
           </div>
         </div>
         <div class="topTip">推荐好友入职得赏金</div>
         <!-- 数据 -->
-        <TablePage :items="dataList"></TablePage>
+        <TablePage :items="items"></TablePage>
+        <CtPagination
+          v-if="total > 0"
+          :total="total"
+          :page="query.pageNo"
+          :limit="query.pageSize"
+          @handleChange="handleChangePage"
+        ></CtPagination>
       </div>
     </div>
     <!-- 滚动区域 -->
@@ -23,49 +30,70 @@
 </template>
 
 <script setup>
+defineOptions({name: 'defineOptions-name'})
+import { ref } from 'vue'
+import { getDict } from '@/hooks/web/useDictionaries'
+import { getHireJobCvRelCount, getHireJobCvRelPage } from '@/api/publicRecruitment'
 import TablePage from './components/table.vue'
 import bountyDisplay from './components/bountyDisplay.vue'
-import { ref } from 'vue'
-defineOptions({name: 'defineOptions-name'})
+
+const active = ref(0)
+
 // 数据统计
-const statistics = ref({ statisticsA: '3', statisticsB: '7', statisticsC: '5', statisticsD: '2', statisticsE: '1' })
-const statisticsList = ref([
-  { count: '', label: '已报名', name: 'statisticsA' },
-  { count: '', label: '已过筛', name: 'statisticsB' },
-  { count: '', label: '已过面', name: 'statisticsC' },
-  { count: '', label: '已入职', name: 'statisticsD' },
-  { count: '', label: '已结算', name: 'statisticsE' }
-])
+const statisticsList = ref([])
+const getData = async () => {
+  const data = await getHireJobCvRelCount()
+  if (!data || !data.length) return
+  statisticsList.value.forEach(e => {
+    const obj = data.find(k => k.key === e.value)
+    if (!obj) return
+    e.count = obj.value
+  })
+}
 
-const avatarList = [
-  'https://img0.baidu.com/it/u=230622178,1565949306&fm=253&fmt=auto&app=138&f=JPEG?w=449&h=300',
-  'https://img0.baidu.com/it/u=1401084042,2724457850&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=726',
-  'https://q7.itc.cn/q_70/images03/20240423/6d236fae5c8f44ed9b60d977f32debb7.jpeg',
-  'https://q1.itc.cn/q_70/images03/20240609/1c1be14298be4dbe978e55bde6e958b0.jpeg',
-  'https://q4.itc.cn/q_70/images03/20240528/298d4abda5e4469d98fa77e7cde46525.jpeg',
-  'https://q5.itc.cn/q_70/images03/20240520/ceb0d77d1be24eea8cd3826994eac1c1.jpeg',
-  'https://img1.baidu.com/it/u=3995643348,1848098846&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=800',
-]
-const dataList = ref([])
-const dataItem = {
-  name: '用户',
-  应聘公司: '门墩儿科技',
-  应聘职位: '酒店前台',
-  岗位薪资: '8000-10000/月',
-  推荐进度: '已报名',
-  赏金: '100积分',
+// 列表
+const items = ref([])
+const total = ref(0)
+const query = ref({
+  pageSize: 10,
+  pageNo: 1,
+  status: null
+})
+const getTableList = async () => {
+  const res = await getHireJobCvRelPage(query.value)
+  items.value = res.list
+  total.value = res.total
 }
-const active = ref(0)
-const statisticsClick = (item, index) => {
+
+// 状态
+const getStatusData = () => {
+  getDict('menduner_hire_job_cv_status').then(({ data }) => {
+    data = data?.length && data || []
+    statisticsList.value = data.map(e => {
+      return { ...e, count: 0 }
+    })
+    query.value.status = data[0].value
+    getData()
+    getTableList()
+  })
+}
+getStatusData()
+
+// 分页
+const handleChangePage = (e) => {
+  query.value.pageNo = e
+  getTableList()
+}
+
+// 钻取
+const handleStatisticsItem = (item, index) => {
   active.value = index
-  const count = statistics.value[item.name] ? statistics.value[item.name] - 0 : 0
-  dataList.value = []
-  for (let i = 0; i < count; i++) {
-    dataList.value.push({ ...dataItem, avatar: avatarList[i], name: dataItem.name+(i+1) })
-  }
+  query.value.pageNo = 1
+  query.value.status = item.value
+  getTableList()
 }
-statisticsClick(statisticsList.value[0], 0)
 </script>
+
 <style lang="scss" scoped>
 .topTip {
   color: var(--color-999);

+ 1 - 1
src/views/recruit/enterprise/memberCenter/myPoints/components/integralTable.vue

@@ -23,7 +23,7 @@ const headers = [
   { title: '来源', key: 'description' },
   { title: '积分数', key: 'point' },
   { title: '总积分数', key: 'totalPoint' },
-  { title: '获得时间', key: 'createTime', value: item =>  timesTampChange(item.createTime) },
+  { title: '获得时间', key: 'createTime', value: item =>  timesTampChange(item.createTime), sortable: false },
 ]
 
 </script>

+ 1 - 1
src/views/recruit/enterprise/personnelManagement/components/table.vue

@@ -70,7 +70,7 @@ const headers = ref([
   { title: '求职状态', key: 'person.jobStatusName' },
   { title: '工作经验', key: 'person.expName' },
   { title: '最高学历', key: 'person.eduName' },
-  { title: '岗位薪资', key: 'job', value: item => `${item.job.payFrom}-${item.job.payTo}/${item.job.payName}`},
+  { title: '岗位薪资', key: 'job', value: item => `${item.job.payFrom}-${item.job.payTo}/${item.job.payName}`, sortable: false },
   { title: '操作', value: 'actions' }
 ])
 

+ 1 - 0
src/views/recruit/enterprise/personnelManagement/index.vue

@@ -46,6 +46,7 @@ const textItems = ref({
   value: '',
   width: 250,
   label: '搜索姓名',
+  clearable: true,
   appendInnerIcon: 'mdi-magnify'
 })
 

+ 1 - 1
src/views/recruit/enterprise/positionManagement/components/add.vue

@@ -71,7 +71,7 @@ const handleSave = async () => {
   const requirement = await jobRequirementsRef.value[0].getQuery()
   if (!baseInfo || !requirement) return Snackbar.warning('请将信息填写完整')
   const query = Object.assign(baseInfo, requirement)
-// 有id则为编辑
+  // 有id则为编辑
   if (route.query && route.query.id) query.id = route.query.id
   await saveJobAdvertised(query)
   Snackbar.success(route.query.id ? t('common.editSuccessMsg') : t('common.publishSuccessMsg'))

+ 81 - 6
src/views/recruit/enterprise/positionManagement/components/baseInfo.vue

@@ -35,10 +35,44 @@ const props = defineProps({
   itemData: Object
 })
 
-const handleChangePublic = () => {
-  const value = items.value.options.find(e => e.key === 'hire').value
-  const obj = items.value.options.find(e => e.key === 'hirePrice')
-  obj.hide = value === '1' ? false : true
+const getValue = (key) => {
+  return items.value.options.find(e => e.key === key)
+}
+
+// 众聘奖励类型
+const handleChangeHireType = () => {
+  const hireType = getValue('hireType')
+  let hirePrice = getValue('hirePrice')
+  let hirePoint = getValue('hirePoint')
+  if (hireType.value === '0') {
+    hirePrice.hide = false
+    hirePoint.hide = true
+    hirePoint.value = null
+  } else {
+    hirePoint.hide = false
+    hirePrice.hide = true
+    hirePrice.value = null
+  }
+}
+
+// 是否众聘岗位
+const handleChangePublic = (editHire) => {
+  const hire = getValue('hire').value
+  const hireType = getValue('hireType')
+  const hirePrice = getValue('hirePrice')
+  const hirePoint = getValue('hirePoint')
+  if (editHire && editHire.hire) {
+    hireType.hide = false
+    hireType.value = editHire.hirePoint ? '1' : '0'
+    handleChangeHireType()
+  } else hireType.hide = hire === '1' ? false : true
+  if (hire === '0') {
+    hireType.value = '0'
+    hirePoint.value = null
+    hirePrice.value = null
+    hirePoint.hide = true
+    hirePrice.hide = true
+  }
 }
 
 const formPageRef = ref()
@@ -57,6 +91,20 @@ const items = ref({
       ],
       change: handleChangePublic
     },
+    {
+      type: 'ifRadio',
+      key: 'hireType',
+      value: '0',
+      label: '众聘奖励类型 *',
+      width: 120,
+      hide: true,
+      noParam: true,
+      items: [
+        { label: '赏金', value: '0' },
+        { label: '积分', value: '1' }
+      ],
+      change: handleChangeHireType
+    },
     {
       type: 'number',
       key: 'hirePrice',
@@ -64,7 +112,34 @@ const items = ref({
       label: '众聘赏金 *',
       suffix: '元',
       hide: true,
-      rules: [v => !!v || '请填写众聘赏金']
+      rules: [
+        value => {
+          if (value) return true
+          return '请填写众聘赏金'
+        },
+        value => {
+          if (value >= 1) return true
+          return '赏金金额不得小于1'
+        }
+      ]
+    },
+    {
+      type: 'number',
+      key: 'hirePoint',
+      value: null,
+      label: '众聘奖励积分数 *',
+      suffix: '点',
+      hide: true,
+      rules: [
+        value => {
+          if (value) return true
+          return '请填写众聘众聘奖励积分数'
+        },
+        value => {
+          if (value >= 1) return true
+          return '积分数不得小于1'
+        }
+      ]
     },
     {
       type: 'text',
@@ -152,10 +227,10 @@ watch(
       if (e.noParam) return
       if (e.key === 'hire') {
         e.value = val[e.key] ? '1' : '0'
-        handleChangePublic()
       }
       else e.value = val[e.key]
     })
+    handleChangePublic(val)
   },
   { immediate: true },
   { deep: true }

+ 4 - 3
src/views/recruit/enterprise/positionManagement/components/item.vue

@@ -9,7 +9,7 @@
       </div>
       <v-btn v-if="tab === 2" class="ml-8" :disabled="!selectAll" color="primary" variant="tonal" size="small" @click="handleAction(1, 'activation', {})">{{ $t('common.activation') }}</v-btn>
     </div>
-    <div v-for="val in items" :key="val.id" class="itemBox mb-3" :style="{'height': (val?.hire && val?.hirePrice) ? '162px' : '134px'}">
+    <div v-for="val in items" :key="val.id" class="itemBox mb-3" :style="{'height': val?.hire ? '162px' : '134px'}">
       <div class="d-flex justify-space-between" style="padding: 10px 20px;">
         <div class="position">
           <div class="item-select">
@@ -31,8 +31,9 @@
             <span class="lines"></span>
             <span>{{ val.positionName }}</span>
           </div>
-          <div v-if="val?.hire && val?.hirePrice" class="ml-10 mt-2">
-            <v-chip label color="primary" size="small">赏金:{{ val.hirePrice }}</v-chip>
+          <div v-if="val?.hire" class="ml-10 mt-2">
+            <v-chip v-if="val?.hirePrice" label color="primary" size="small">赏金:{{ val.hirePrice }}元</v-chip>
+            <v-chip v-if="val?.hirePoint" label color="primary" size="small">积分:{{ val.hirePoint }}点</v-chip>
           </div>
         </div>
         <div class="d-flex align-center">

+ 20 - 2
src/views/recruit/enterprise/positionManagement/components/jobRequirements.vue

@@ -77,7 +77,16 @@ const items = ref({
       col: 4,
       label: '最低薪资 *',
       suffix: '元',
-      rules: [v => !!v || '请填写最低薪资'],
+      rules: [
+        value => {
+          if (value) return true
+          return '请填写最低薪资'
+        },
+        value => {
+          if (value >= 1) return true
+          return '数额不得小于1'
+        }
+      ]
     },
     {
       type: 'text',
@@ -87,7 +96,16 @@ const items = ref({
       label: '最高薪资 *',
       flexStyle: 'mx-3',
       suffix: '元',
-      rules: [v => !!v || '请填写最高薪资'],
+      rules: [
+        value => {
+          if (value) return true
+          return '请填写最高薪资'
+        },
+        value => {
+          if (value >= 1) return true
+          return '数额不得小于1'
+        }
+      ]
     },
     {
       type: 'autocomplete',

+ 5 - 5
src/views/recruit/enterprise/publicRecruitmentManagement/deliver/components/table.vue

@@ -65,11 +65,11 @@ const badgeIcon = computed(() => (item) => {
 const selected = ref([])
 const headers = ref([
   { title: '姓名', value: 'name' },
-  { title: '应聘职位', value: 'job.name' },
-  { title: '求职状态', key: 'person.jobStatusName' },
-  { title: '工作经验', key: 'person.expName' },
-  { title: '最高学历', key: 'person.eduName' },
-  { title: '岗位薪资', key: 'job', value: item => `${item.job.payFrom}-${item.job.payTo}/${item.job.payName}`},
+  { title: '应聘职位', value: 'job.name', sortable: false },
+  { title: '求职状态', key: 'person.jobStatusName', sortable: false },
+  { title: '工作经验', key: 'person.expName', sortable: false },
+  { title: '最高学历', key: 'person.eduName', sortable: false },
+  { title: '岗位薪资', key: 'job', value: item => `${item.job.payFrom}-${item.job.payTo}/${item.job.payName}`, sortable: false },
   { title: '结果反馈', key: '' },
   { title: '操作', value: 'actions' }
 ])

+ 21 - 2
src/views/recruit/enterprise/publicRecruitmentManagement/deliver/index.vue

@@ -1,7 +1,7 @@
 <template>
   <v-card class="pa-5 card-box">
     <div class="d-flex justify-space-between">
-      <v-tabs v-model="query.status" align-tabs="start" color="primary" bg-color="#f7f8fa" @update:model-value="handleSearch">
+      <v-tabs v-model="query.status" align-tabs="start" color="primary" bg-color="#f7f8fa" @update:model-value="handleUpdateTab">
         <v-tab v-for="k in tabList" :value="k.value" :key="k.value">{{ k.label }}</v-tab>
       </v-tabs>
       <TextInput v-model="textItems.value" :item="textItems" @appendInnerClick="handleSearch" @enter="handleSearch"></TextInput>
@@ -27,6 +27,7 @@ defineOptions({ name: 'public-recruitment-deliver'})
 import { ref } from 'vue'
 import { getDict } from '@/hooks/web/useDictionaries'
 import { getHireJobCvPage } from '@/api/recruit/public/delivery'
+import { dealDictObjData } from '@/views/recruit/personal/position/components/dict'
 import TablePage from './components/table.vue'
 
 const total = ref(0)
@@ -42,6 +43,7 @@ const textItems = ref({
   value: '',
   width: 250,
   label: '搜索姓名',
+  clearable: true,
   appendInnerIcon: 'mdi-magnify'
 })
 
@@ -56,12 +58,29 @@ getTabData()
 
 const getList = async () => {
   const res = await getHireJobCvPage(query.value)
-  items.value = res.list
+  if (!res.list.length) {
+    items.value = []
+    total.value = 0
+    return
+  }
+  items.value = res.list.map(e => {
+    let obj = e
+    obj.person = Object.assign(e.person, dealDictObjData({}, e.person))
+    obj.job = Object.assign(e.job, dealDictObjData({}, e.job))
+    return obj
+  })
   total.value = res.total
 }
 getList()
 
 const handleSearch = () => {
+  if (textItems.value.value) query.value.name = textItems.value.value
+  else delete query.value.name
+  query.value.pageNo = 1
+  getList()
+}
+
+const handleUpdateTab = () => {
   query.value.pageNo = 1
   getList()
 }

+ 6 - 4
src/views/recruit/enterprise/systemManagement/postManagement/index.vue

@@ -31,7 +31,7 @@ import { ref } from 'vue'
 import { useRouter } from 'vue-router'
 import { timesTampChange } from '@/utils/date'
 import { useI18n } from '@/hooks/web/useI18n'
-import { getEnterprisePostPage, deleteEnterprisePost } from '@/api/recruit/enterprise/system/post'
+import { getEnterprisePostPage, deleteEnterprisePost, checkPost } from '@/api/recruit/enterprise/system/post'
 import Confirm from '@/plugins/confirm'
 import Snackbar from '@/plugins/snackbar'
 
@@ -49,9 +49,9 @@ const headers = [
   { title: '英文名称', key: 'nameEn' },
   { title: '岗位缩写', key: 'code' },
   { title: '显示顺序', key: 'sort' },
-  { title: '状态', key: 'status', value: item => item.status === '1' ? '停用' : '正常'},
+  { title: '状态', key: 'status', value: item => item.status === '1' ? '停用' : '正常', sortable: false },
   { title: '备注', key: 'remark' },
-  { title: '更新时间', key: 'updateTime', value: item => timesTampChange(item.updateTime)},
+  { title: '更新时间', key: 'updateTime', value: item => timesTampChange(item.updateTime), sortable: false },
   { title: t('common.actions'), key: 'actions' }
 ]
 
@@ -76,7 +76,9 @@ const handleEdit = (item) => {
   router.push(`/recruit/enterprise/systemManagement/postManagement/edit?id=${item.id}`)
 }
 
-const handleDelete = ({ id }) => {
+const handleDelete = async ({ id }) => {
+  const check = await checkPost(id)
+  if (check) return Snackbar.warning('查询到该岗位有绑定用户,请先到用户管理里面修改后再试')
   Confirm(t('common.confirmTitle'), '是否确认删除此项内容?').then(async () => {
     await deleteEnterprisePost(id)
     Snackbar.success(t('common.delMsg'))

+ 2 - 2
src/views/recruit/enterprise/systemManagement/userManagement/index.vue

@@ -64,8 +64,8 @@ const headers = [
   { title: t('enterprise.userManagement.post'), key: 'postId' },
   { title: t('enterprise.userManagement.phone'), key: 'phone' },
   { title: t('enterprise.userManagement.email'), key: 'email' },
-  { title: t('enterprise.userManagement.accountType'), key: 'userType', value: item => item.userType === '1' ? t('enterprise.userManagement.administrators') : t('enterprise.userManagement.regularUser')},
-  { title: t('enterprise.userManagement.lastLoginTime'), key: 'loginDate', value: item => timesTampChange(item.loginDate) },
+  { title: t('enterprise.userManagement.accountType'), key: 'userType', value: item => item.userType === '1' ? t('enterprise.userManagement.administrators') : t('enterprise.userManagement.regularUser'), sortable: false },
+  { title: t('enterprise.userManagement.lastLoginTime'), key: 'loginDate', value: item => timesTampChange(item.loginDate), sortable: false },
   { title: t('common.actions'), key: 'actions' }
 ]
 const formItems = ref({