|
@@ -1,21 +1,38 @@
|
|
<!-- 精英管理 -->
|
|
<!-- 精英管理 -->
|
|
<template>
|
|
<template>
|
|
<v-card class="pa-3 card-box">
|
|
<v-card class="pa-3 card-box">
|
|
- <div class="d-flex justify-space-between">
|
|
|
|
|
|
+ <div class="d-flex justify-space-between mb-3">
|
|
<v-tabs v-model="tab" align-tabs="start" color="primary" bg-color="#f7f8fa" @update:model-value="handleChangeTab">
|
|
<v-tabs v-model="tab" align-tabs="start" color="primary" bg-color="#f7f8fa" @update:model-value="handleChangeTab">
|
|
<v-tab v-for="k in tabList" :value="k.value" :key="k.value">{{ k.label }}</v-tab>
|
|
<v-tab v-for="k in tabList" :value="k.value" :key="k.value">{{ k.label }}</v-tab>
|
|
</v-tabs>
|
|
</v-tabs>
|
|
- <TextInput v-model="textItems.value" :item="textItems" @appendInnerClick="handleSearch" @enter="handleSearch"></TextInput>
|
|
|
|
|
|
+ <div class="d-flex align-center">
|
|
|
|
+ <TextInput v-model="textItems.value" :item="textItems" @appendInnerClick="handleSearch" @enter="handleSearch"></TextInput>
|
|
|
|
+ <v-btn color="primary" prependIcon="mdi-filter-multiple-outline" class="ml-3" variant="tonal" @click="showDrawer = true">筛选{{ rawData.length > 0 ? rawData.length : '' }}</v-btn>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
- <Screen
|
|
|
|
- :tab="tab"
|
|
|
|
- :jobId="router.currentRoute.value?.query?.id"
|
|
|
|
- :hire="router.currentRoute.value?.query?.hire"
|
|
|
|
- @search="handleScreen"
|
|
|
|
- @reset="handleScreenReset"
|
|
|
|
- @select="handleSelect"
|
|
|
|
- @change="handleChangeBounty"
|
|
|
|
- ></Screen>
|
|
|
|
|
|
+
|
|
|
|
+ <div class="d-flex justify-space-between align-center mb-3" v-if="tab === 0">
|
|
|
|
+ <div class="mr-5 d-flex align-center">
|
|
|
|
+ <v-radio-group v-model="bounty" inline style="height: 28px;" @update:modelValue="handleChangeBounty">
|
|
|
|
+ <v-radio v-model="bounty" label="普通职位" :value="false" color="primary" hide-details density="compact" class="mr-3"></v-radio>
|
|
|
|
+ <v-radio v-model="bounty" label="赏金职位" :value="true" color="primary" hide-details density="compact"></v-radio>
|
|
|
|
+ </v-radio-group>
|
|
|
|
+
|
|
|
|
+ <v-radio-group class="ml-5" v-model="selected" inline style="height: 28px;" @update:modelValue="handleSelect">
|
|
|
|
+ <v-radio v-model="selected" label="新投递" value="0" color="primary" hide-details density="compact" class="mr-3"></v-radio>
|
|
|
|
+ <v-radio v-model="selected" label="已查看" value="1" color="primary" hide-details density="compact"></v-radio>
|
|
|
|
+ </v-radio-group>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="color-primary font-size-14 cursor-pointer" @click="FilterPageRef.handleReset(false)">重置</div>
|
|
|
|
+ </div>
|
|
|
|
+ <div v-if="rawData && rawData.length > 0">
|
|
|
|
+ <v-chip v-for="item in rawData" :key="item.id" closable class="mr-2 mb-2" label @click:close="handleClose(item)">{{ item.title }}: {{ item.label }}</v-chip>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <!-- 筛选抽屉 -->
|
|
|
|
+ <v-navigation-drawer v-model="showDrawer" location="right" absolute temporary width="700">
|
|
|
|
+ <FilterPage ref="FilterPageRef" :jobId="route.query?.id" :jobFairId="route.query?.jobFairId" @confirm="handleConfirm" @cancel="showDrawer = false" @reset="handleScreenReset" />
|
|
|
|
+ </v-navigation-drawer>
|
|
|
|
|
|
<v-window v-model="tab" class="mt-1">
|
|
<v-window v-model="tab" class="mt-1">
|
|
<v-window-item v-for="k in tabList" :value="k.value" :key="k.value">
|
|
<v-window-item v-for="k in tabList" :value="k.value" :key="k.value">
|
|
@@ -27,18 +44,18 @@
|
|
|
|
|
|
<script setup>
|
|
<script setup>
|
|
defineOptions({ name: 'enterprise-elite-management'})
|
|
defineOptions({ name: 'enterprise-elite-management'})
|
|
-import { ref } from 'vue'
|
|
|
|
|
|
+import { ref, onMounted } from 'vue'
|
|
import { getPersonCvPage } from '@/api/enterprise'
|
|
import { getPersonCvPage } from '@/api/enterprise'
|
|
import { personCvUnfitPage } from '@/api/recruit/enterprise/personnel'
|
|
import { personCvUnfitPage } from '@/api/recruit/enterprise/personnel'
|
|
import { dealDictObjData } from '@/utils/position'
|
|
import { dealDictObjData } from '@/utils/position'
|
|
import { getDict } from '@/hooks/web/useDictionaries'
|
|
import { getDict } from '@/hooks/web/useDictionaries'
|
|
import { getInterviewInvitePage } from '@/api/recruit/enterprise/interview'
|
|
import { getInterviewInvitePage } from '@/api/recruit/enterprise/interview'
|
|
import TablePage from './components/table.vue'
|
|
import TablePage from './components/table.vue'
|
|
-import Screen from './components/screen.vue'
|
|
|
|
import { timesTampChange } from '@/utils/date'
|
|
import { timesTampChange } from '@/utils/date'
|
|
-import { useRouter } from 'vue-router'
|
|
|
|
|
|
+import { useRoute } from 'vue-router'
|
|
|
|
+import FilterPage from './components/filterPage.vue'
|
|
|
|
|
|
-const router = useRouter()
|
|
|
|
|
|
+const route = useRoute()
|
|
const total = ref(0)
|
|
const total = ref(0)
|
|
const query = ref({
|
|
const query = ref({
|
|
pageNo: 1,
|
|
pageNo: 1,
|
|
@@ -46,6 +63,10 @@ const query = ref({
|
|
status: null,
|
|
status: null,
|
|
type: null
|
|
type: null
|
|
})
|
|
})
|
|
|
|
+const selected = ref()
|
|
|
|
+const bounty = ref(null)
|
|
|
|
+const showDrawer = ref(false)
|
|
|
|
+const FilterPageRef = ref()
|
|
const tab = ref(0)
|
|
const tab = ref(0)
|
|
const tabList = ref([
|
|
const tabList = ref([
|
|
{ label: '投递简历', value: 0, api: getPersonCvPage, status: null },
|
|
{ label: '投递简历', value: 0, api: getPersonCvPage, status: null },
|
|
@@ -59,6 +80,7 @@ const textItems = ref({
|
|
value: '',
|
|
value: '',
|
|
width: 250,
|
|
width: 250,
|
|
label: '搜索姓名',
|
|
label: '搜索姓名',
|
|
|
|
+ hideDetails: true,
|
|
clearable: true,
|
|
clearable: true,
|
|
appendInnerIcon: 'mdi-magnify'
|
|
appendInnerIcon: 'mdi-magnify'
|
|
})
|
|
})
|
|
@@ -96,7 +118,20 @@ const getList = async () => {
|
|
})
|
|
})
|
|
}
|
|
}
|
|
// 没有带id时一进来才刷新,带id由组件传值刷新
|
|
// 没有带id时一进来才刷新,带id由组件传值刷新
|
|
-if (!router.currentRoute.value?.query?.id) getList()
|
|
|
|
|
|
+if (!route.query?.id) getList()
|
|
|
|
+
|
|
|
|
+onMounted(() => {
|
|
|
|
+ // 众聘职位
|
|
|
|
+ if (route.query?.hire) {
|
|
|
|
+ query.value.hire = true
|
|
|
|
+ bounty.value = true
|
|
|
|
+ }
|
|
|
|
+ // 招聘会职位
|
|
|
|
+ if (route.query?.jobFairId) {
|
|
|
|
+ if (tab.value !== 0) return delete query.value.jobFairId
|
|
|
|
+ query.value.jobFairId = route.query.jobFairId
|
|
|
|
+ }
|
|
|
|
+})
|
|
|
|
|
|
// 分页
|
|
// 分页
|
|
const handleChangePage = (i) => {
|
|
const handleChangePage = (i) => {
|
|
@@ -112,16 +147,29 @@ const handleSearch = () => {
|
|
getList()
|
|
getList()
|
|
}
|
|
}
|
|
|
|
|
|
-// 下拉筛选
|
|
|
|
-const handleScreen = ({ value, key }) => {
|
|
|
|
- if (value) query.value[key] = value
|
|
|
|
- else delete query.value[key]
|
|
|
|
- if (router.currentRoute.value?.query?.hire) query.value.hire = true
|
|
|
|
|
|
+// 筛选
|
|
|
|
+const rawData = ref([])
|
|
|
|
+const handleConfirm = (params, data) => {
|
|
|
|
+ rawData.value = data
|
|
|
|
+ query.value.pageNo = 1
|
|
|
|
+ query.value = Object.assign(query.value, params)
|
|
|
|
+ showDrawer.value = false
|
|
|
|
+ getList()
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 筛选条件单个清除
|
|
|
|
+const handleClose = (item) => {
|
|
|
|
+ FilterPageRef.value.handleClear(item)
|
|
|
|
+ delete query.value[item.key]
|
|
|
|
+ rawData.value = rawData.value.filter(e => e.key !== item.key)
|
|
getList()
|
|
getList()
|
|
}
|
|
}
|
|
|
|
|
|
-// 下拉筛选重置
|
|
|
|
-const handleScreenReset = () => {
|
|
|
|
|
|
+// 重置
|
|
|
|
+const handleScreenReset = (close) => {
|
|
|
|
+ rawData.value = []
|
|
|
|
+ bounty.value = ''
|
|
|
|
+ selected.value = ''
|
|
query.value = {
|
|
query.value = {
|
|
pageSize: 10,
|
|
pageSize: 10,
|
|
pageNo: 1,
|
|
pageNo: 1,
|
|
@@ -131,10 +179,11 @@ const handleScreenReset = () => {
|
|
query.value.status = null
|
|
query.value.status = null
|
|
query.value.type = null
|
|
query.value.type = null
|
|
}
|
|
}
|
|
- textItems.value.value = ''
|
|
|
|
|
|
+ if (close) showDrawer.value = false
|
|
getList()
|
|
getList()
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// 职位类型选择
|
|
const handleSelect = (e) => {
|
|
const handleSelect = (e) => {
|
|
query.value.pageNo = 1
|
|
query.value.pageNo = 1
|
|
query.value.status = e
|
|
query.value.status = e
|