소스 검색

职位管理:新增职位时效验名称是否重复,有重复的则弹窗展示

Xiao_123 1 개월 전
부모
커밋
4f93138d64
1개의 변경된 파일40개의 추가작업 그리고 0개의 파일을 삭제
  1. 40 0
      src/views/recruit/enterprise/positionManagement/components/baseInfo.vue

+ 40 - 0
src/views/recruit/enterprise/positionManagement/components/baseInfo.vue

@@ -31,6 +31,21 @@
         </div>
       </template>
     </CtForm>
+
+    <CtDialog :visible="showDialog" :widthType="1" titleClass="text-h6" :footer="false" title="重复职位列表" @close="showDialog = false">
+      <CtTable
+        :items="tableItems"
+        :headers="headers"
+        :loading="false"
+        :elevation="0"
+        :isTools="false"
+        :showPage="false"
+      >
+        <template #actions="{ item }">
+          <v-btn :disabled="!item.id" color="primary" variant="text" @click="handleDetails(item)">详情</v-btn>
+        </template>
+      </CtTable>
+    </CtDialog>
   </div>
 </template>
 
@@ -45,6 +60,9 @@ import Confirm from '@/plugins/confirm'
 import Snackbar from '@/plugins/snackbar'
 import { useI18n } from '@/hooks/web/useI18n';
 import { getJobAdvertised } from '@/api/enterprise'
+import { formatName } from '@/utils/getText'
+import { dealDictArrayData } from '@/utils/position'
+import { timesTampChange } from '@/utils/date'
 
 const { t } = useI18n()
 const props = defineProps({
@@ -63,11 +81,31 @@ const showTemplateBtn = ref(true)
 const formPageRef = ref()
 let query = reactive({})
 
+// 重复职位弹窗
+const showDialog = ref(false)
+const tableItems = ref([])
+const headers = [
+  { title: '职位名称', key: 'name', sortable: false, value: item => formatName(item.name) },
+  { title: '薪资', key: 'payTo', sortable: false, value: item => !item.payFrom && !item.payTo ? '面议' : `${item.payFrom}-${item.payTo}/${item.payName}` },
+  { title: '学历要求', key: 'eduName', sortable: false },
+  { title: '工作经验', key: 'expName', sortable: false },
+  { title: '地区', key: 'area', sortable: false, value: item => !item.areaId ? '全国' : item.area?.str },
+  { title: '状态', key: 'status', sortable: false, value: item => !item.status ? '' : item.status === '0' ? '招聘中' : '已关闭' },
+  { title: '创建时间', key: 'createTime', sortable: false, value: item => timesTampChange(item.createTime) },
+  { title: '更新时间', key: 'updateTime', sortable: false, value: item => timesTampChange(item.updateTime) },
+  { title: '操作', key: 'actions', sortable: false }
+]
+
+const handleDetails = (item) => {
+  window.open(`/recruit/enterprise/position/details?id=${item.id}`)
+}
+
 // 效验职位名称是否重复
 const handleValidName = async (item, val) => {
   if (!val) return
   try {
     const data = await getJobAdvertised({ jobName: val })
+    tableItems.value = data ? dealDictArrayData([], data) : []
 
     if (data && data.length > 0) {
       Confirm(
@@ -76,6 +114,7 @@ const handleValidName = async (item, val) => {
         { sureText: '查看已有职位', cancelText: '继续发布' }
       ).then(() => {
         // 弹窗查看已有职位
+        showDialog.value = true
       })
     }
   } catch {}
@@ -98,6 +137,7 @@ const items = ref({
       key: 'name',
       value: '',
       label: '职位名称 *',
+      blur: handleValidName, // 效验职位名称是否重复
       rules: [v => !!v || '请填写职位名称']
     },
     {