|
@@ -62,6 +62,7 @@
|
|
<el-select
|
|
<el-select
|
|
v-model="queryParams.jobId"
|
|
v-model="queryParams.jobId"
|
|
placeholder="请选择职位"
|
|
placeholder="请选择职位"
|
|
|
|
+ :no-data-text="!jobOption.length && queryParams.enterpriseId ? '当前选中企业暂无发布职位' : '请先选择企业'"
|
|
clearable
|
|
clearable
|
|
class="!w-240px"
|
|
class="!w-240px"
|
|
>
|
|
>
|
|
@@ -146,7 +147,7 @@
|
|
<!-- 弹窗 -->
|
|
<!-- 弹窗 -->
|
|
<Dialog :title="currentItem.title+'详情'" v-model="showDialog" width="1200" @close="closeDialog">
|
|
<Dialog :title="currentItem.title+'详情'" v-model="showDialog" width="1200" @close="closeDialog">
|
|
<ContentWrap>
|
|
<ContentWrap>
|
|
- <el-table v-loading="dialogLoading" :data="tableData" :stripe="true" :show-overflow-tooltip="true">
|
|
|
|
|
|
+ <el-table v-loading="dialogLoading" :data="tableData" :stripe="true">
|
|
<el-table-column
|
|
<el-table-column
|
|
v-for="item in tableHeaders[currentItem.name]"
|
|
v-for="item in tableHeaders[currentItem.name]"
|
|
:key="item.prop"
|
|
:key="item.prop"
|
|
@@ -174,7 +175,6 @@ import ageDistribution from './components/AgeDistribution.vue'
|
|
import workExperience from './components/WorkExperience.vue'
|
|
import workExperience from './components/WorkExperience.vue'
|
|
import education from './components/Education.vue'
|
|
import education from './components/Education.vue'
|
|
import { statisticAnalysisApi } from '@/api/menduner/system/analysis/statisticAnalysis'
|
|
import { statisticAnalysisApi } from '@/api/menduner/system/analysis/statisticAnalysis'
|
|
-// import { dealDictArrayData, dealDictObjData } from '@/utils/position'
|
|
|
|
defineOptions({name: 'StatisticAnalysis'})
|
|
defineOptions({name: 'StatisticAnalysis'})
|
|
import download from '@/utils/download'
|
|
import download from '@/utils/download'
|
|
|
|
|
|
@@ -205,7 +205,7 @@ const handleExport = async () => {
|
|
await message.exportConfirm()
|
|
await message.exportConfirm()
|
|
// 发起导出
|
|
// 发起导出
|
|
exportLoading.value = true
|
|
exportLoading.value = true
|
|
- const data = await statisticAnalysisApi.analysisExport(queryParams)
|
|
|
|
|
|
+ const data = await statisticAnalysisApi.analysisExport({ ...queryParams, jobStatus: '0' })
|
|
download.excel(data, '招聘进展明细')
|
|
download.excel(data, '招聘进展明细')
|
|
} catch {
|
|
} catch {
|
|
} finally {
|
|
} finally {
|
|
@@ -283,7 +283,7 @@ const getList = async (typeName, details = '') => {
|
|
if (!details && typeName === 'pageViews') {
|
|
if (!details && typeName === 'pageViews') {
|
|
// 职位浏览量-总数据
|
|
// 职位浏览量-总数据
|
|
const res = await apiArr.pageViewsTotal(queryParams)
|
|
const res = await apiArr.pageViewsTotal(queryParams)
|
|
- data ={ total: res || 0 }
|
|
|
|
|
|
+ data = { total: res || 0 }
|
|
} else {
|
|
} else {
|
|
// 使用钻取接口
|
|
// 使用钻取接口
|
|
const params = { ...queryParams, ...page }
|
|
const params = { ...queryParams, ...page }
|
|
@@ -295,7 +295,7 @@ const getList = async (typeName, details = '') => {
|
|
total.value = data.total || 0
|
|
total.value = data.total || 0
|
|
dealTableData()
|
|
dealTableData()
|
|
} else {
|
|
} else {
|
|
- statistic[typeName] = data.total || data || 0
|
|
|
|
|
|
+ statistic[typeName] = data.total || 0
|
|
}
|
|
}
|
|
} finally {
|
|
} finally {
|
|
loading.value = false
|
|
loading.value = false
|
|
@@ -359,49 +359,60 @@ const paginationChange = () => {
|
|
}
|
|
}
|
|
|
|
|
|
const tableHeaders = {
|
|
const tableHeaders = {
|
|
|
|
+ // 职位浏览量
|
|
pageViews: [
|
|
pageViews: [
|
|
{ name: '浏览量', prop: 'num' },
|
|
{ name: '浏览量', prop: 'num' },
|
|
{ name: '招聘职位', prop: 'name' },
|
|
{ name: '招聘职位', prop: 'name' },
|
|
|
|
+ { name: '发布企业', prop: 'enterpriseName' },
|
|
{ name: '薪酬', prop: 'salaryDisplay' },
|
|
{ name: '薪酬', prop: 'salaryDisplay' },
|
|
{ name: '工作地区', prop: 'areaName' },
|
|
{ name: '工作地区', prop: 'areaName' },
|
|
{ name: '工作经验', prop: 'expName' },
|
|
{ name: '工作经验', prop: 'expName' },
|
|
{ name: '学历要求', prop: 'eduName' },
|
|
{ name: '学历要求', prop: 'eduName' },
|
|
],
|
|
],
|
|
|
|
+ // 发布职位数量
|
|
pushNum: [
|
|
pushNum: [
|
|
{ name: '职位名称', prop: 'name' },
|
|
{ name: '职位名称', prop: 'name' },
|
|
|
|
+ { name: '发布企业', prop: 'enterpriseName' },
|
|
{ name: '职位类型', prop: 'positionName' },
|
|
{ name: '职位类型', prop: 'positionName' },
|
|
{ name: '薪酬', prop: 'salaryDisplay' },
|
|
{ name: '薪酬', prop: 'salaryDisplay' },
|
|
{ name: '工作地区', prop: 'areaName' },
|
|
{ name: '工作地区', prop: 'areaName' },
|
|
{ name: '工作经验', prop: 'expName' },
|
|
{ name: '工作经验', prop: 'expName' },
|
|
{ name: '学历要求', prop: 'eduName' },
|
|
{ name: '学历要求', prop: 'eduName' },
|
|
- // { name: '职位标签', prop: 'tagList' },
|
|
|
|
{ name: '众聘', prop: 'hire' },
|
|
{ name: '众聘', prop: 'hire' },
|
|
],
|
|
],
|
|
|
|
+ // 收到的简历
|
|
resumeReceived: [
|
|
resumeReceived: [
|
|
{ name: '投递人', prop: 'personName' },
|
|
{ name: '投递人', prop: 'personName' },
|
|
{ name: '求职状态', prop: 'jobStatus' },
|
|
{ name: '求职状态', prop: 'jobStatus' },
|
|
|
|
+ { name: '投递职位', prop: 'job.name' },
|
|
|
|
+ { name: '发布企业', prop: 'enterpriseName' },
|
|
{ name: '薪酬', prop: 'salaryDisplay' },
|
|
{ name: '薪酬', prop: 'salaryDisplay' },
|
|
{ name: '工作地区', prop: 'areaName' },
|
|
{ name: '工作地区', prop: 'areaName' },
|
|
{ name: '工作经验', prop: 'expName' },
|
|
{ name: '工作经验', prop: 'expName' },
|
|
{ name: '学历要求', prop: 'eduName' },
|
|
{ name: '学历要求', prop: 'eduName' },
|
|
],
|
|
],
|
|
|
|
+ // 已查看简历
|
|
resumeViewed: [
|
|
resumeViewed: [
|
|
{ name: '简历标题', prop: 'title' },
|
|
{ name: '简历标题', prop: 'title' },
|
|
{ name: '投递人', prop: 'personName' },
|
|
{ name: '投递人', prop: 'personName' },
|
|
|
|
+ { name: '投递职位', prop: 'job.name' },
|
|
|
|
+ { name: '发布企业', prop: 'enterpriseName' },
|
|
{ name: '投递类型', prop: 'typeName' },
|
|
{ name: '投递类型', prop: 'typeName' },
|
|
{ name: '推荐人', prop: 'recommendPersonName' },
|
|
{ name: '推荐人', prop: 'recommendPersonName' },
|
|
],
|
|
],
|
|
|
|
+ // 已邀面试
|
|
invitedInterviews: [
|
|
invitedInterviews: [
|
|
{ name: '求职者', prop: 'personName' },
|
|
{ name: '求职者', prop: 'personName' },
|
|
{ name: '面试岗位', prop: 'jobName' },
|
|
{ name: '面试岗位', prop: 'jobName' },
|
|
{ name: '面试类型', prop: 'typeName' },
|
|
{ name: '面试类型', prop: 'typeName' },
|
|
{ name: '面试时间', prop: 'timeName' },
|
|
{ name: '面试时间', prop: 'timeName' },
|
|
{ name: '面试地点', prop: 'addressName' },
|
|
{ name: '面试地点', prop: 'addressName' },
|
|
-
|
|
|
|
],
|
|
],
|
|
|
|
+ // 面试完成
|
|
invitedCompleted: [
|
|
invitedCompleted: [
|
|
{ name: '求职者', prop: 'personName' },
|
|
{ name: '求职者', prop: 'personName' },
|
|
{ name: '面试岗位', prop: 'jobName' },
|
|
{ name: '面试岗位', prop: 'jobName' },
|
|
|
|
+ { name: '发布企业', prop: 'enterpriseName' },
|
|
{ name: '面试类型', prop: 'typeName' },
|
|
{ name: '面试类型', prop: 'typeName' },
|
|
{ name: '面试时间', prop: 'timeName' },
|
|
{ name: '面试时间', prop: 'timeName' },
|
|
{ name: '面试地点', prop: 'addressName' },
|
|
{ name: '面试地点', prop: 'addressName' },
|
|
@@ -410,53 +421,56 @@ const tableHeaders = {
|
|
}
|
|
}
|
|
|
|
|
|
const dealTableData = async () => {
|
|
const dealTableData = async () => {
|
|
|
|
+ // 职位浏览量
|
|
if (currentItem.value.name === 'pageViews') {
|
|
if (currentItem.value.name === 'pageViews') {
|
|
const areaList = await getDictOptions('areaList')
|
|
const areaList = await getDictOptions('areaList')
|
|
tableData.value = tableData.value.map(item => {
|
|
tableData.value = tableData.value.map(item => {
|
|
- item.salaryDisplay = `${item.payFrom}-${item.payTo}/${getDictLabel(DICT_TYPE.MENDUNER_PAY_UNIT, item.payUnit)}`
|
|
|
|
|
|
+ item.salaryDisplay = item.payFrom && item.payTo ? `${item.payFrom}-${item.payTo}/${getDictLabel(DICT_TYPE.MENDUNER_PAY_UNIT, item.payUnit)}` : '面议'
|
|
item.areaName = getText(item.areaId, areaList)
|
|
item.areaName = getText(item.areaId, areaList)
|
|
item.expName = getDictLabel(DICT_TYPE.MENDUNER_EXP_TYPE, item.expType)
|
|
item.expName = getDictLabel(DICT_TYPE.MENDUNER_EXP_TYPE, item.expType)
|
|
item.eduName = getDictLabel(DICT_TYPE.MENDUNER_EDUCATION_TYPE, item.eduType)
|
|
item.eduName = getDictLabel(DICT_TYPE.MENDUNER_EDUCATION_TYPE, item.eduType)
|
|
return item
|
|
return item
|
|
})
|
|
})
|
|
}
|
|
}
|
|
|
|
+ // 发布职位数量
|
|
if (currentItem.value.name === 'pushNum') {
|
|
if (currentItem.value.name === 'pushNum') {
|
|
const areaList = await getDictOptions('areaList')
|
|
const areaList = await getDictOptions('areaList')
|
|
const positionData = await getDictOptions('positionData')
|
|
const positionData = await getDictOptions('positionData')
|
|
tableData.value = tableData.value.map(item => {
|
|
tableData.value = tableData.value.map(item => {
|
|
item.areaName = getText(item.areaId, areaList)
|
|
item.areaName = getText(item.areaId, areaList)
|
|
item.positionName = getText(item.positionId, positionData, 'nameCn', 'id')
|
|
item.positionName = getText(item.positionId, positionData, 'nameCn', 'id')
|
|
- console.log(item.positionId)
|
|
|
|
- console.log(positionData)
|
|
|
|
- item.salaryDisplay = `${item.payFrom}-${item.payTo}/${getDictLabel(DICT_TYPE.MENDUNER_PAY_UNIT, item.payUnit)}`
|
|
|
|
- item.jobStatus = getDictLabel(DICT_TYPE.MENDUNER_JOB_STATUS, item.jobStatus)
|
|
|
|
|
|
+ item.salaryDisplay = item.payFrom && item.payTo ? `${item.payFrom}-${item.payTo}/${getDictLabel(DICT_TYPE.MENDUNER_PAY_UNIT, item.payUnit)}` : '面议'
|
|
|
|
+ item.jobStatus = getDictLabel(DICT_TYPE.MENDUNER_JOB_SEEK_STATUS, item.jobStatus)
|
|
item.expName = getDictLabel(DICT_TYPE.MENDUNER_EXP_TYPE, item.expType)
|
|
item.expName = getDictLabel(DICT_TYPE.MENDUNER_EXP_TYPE, item.expType)
|
|
item.eduName = getDictLabel(DICT_TYPE.MENDUNER_EDUCATION_TYPE, item.eduType)
|
|
item.eduName = getDictLabel(DICT_TYPE.MENDUNER_EDUCATION_TYPE, item.eduType)
|
|
item.hire = item.hire ? '是' : '否'
|
|
item.hire = item.hire ? '是' : '否'
|
|
return item
|
|
return item
|
|
})
|
|
})
|
|
}
|
|
}
|
|
|
|
+ // 收到的简历
|
|
if (currentItem.value.name === 'resumeReceived') {
|
|
if (currentItem.value.name === 'resumeReceived') {
|
|
const areaList = await getDictOptions('areaList')
|
|
const areaList = await getDictOptions('areaList')
|
|
tableData.value = tableData.value.map(item => {
|
|
tableData.value = tableData.value.map(item => {
|
|
item.areaName = getText(item.job.areaId, areaList)
|
|
item.areaName = getText(item.job.areaId, areaList)
|
|
- item.salaryDisplay = `${item.job.payFrom}-${item.job.payTo}/${getDictLabel(DICT_TYPE.MENDUNER_PAY_UNIT, item.job.payUnit)}`
|
|
|
|
- item.jobStatus = getDictLabel(DICT_TYPE.MENDUNER_JOB_STATUS, item.person.jobStatus)
|
|
|
|
|
|
+ item.salaryDisplay = item.job?.payFrom && item.job.payTo ? `${item.job.payFrom}-${item.job.payTo}/${getDictLabel(DICT_TYPE.MENDUNER_PAY_UNIT, item.job.payUnit)}` : '面议'
|
|
|
|
+ item.jobStatus = getDictLabel(DICT_TYPE.MENDUNER_JOB_SEEK_STATUS, item.person.jobStatus)
|
|
item.expName = getDictLabel(DICT_TYPE.MENDUNER_EXP_TYPE, item.job.expType)
|
|
item.expName = getDictLabel(DICT_TYPE.MENDUNER_EXP_TYPE, item.job.expType)
|
|
item.eduName = getDictLabel(DICT_TYPE.MENDUNER_EDUCATION_TYPE, item.job.eduType)
|
|
item.eduName = getDictLabel(DICT_TYPE.MENDUNER_EDUCATION_TYPE, item.job.eduType)
|
|
item.personName = item.person.name
|
|
item.personName = item.person.name
|
|
return item
|
|
return item
|
|
})
|
|
})
|
|
}
|
|
}
|
|
|
|
+ // 已查看简历
|
|
if (currentItem.value.name === 'resumeViewed') {
|
|
if (currentItem.value.name === 'resumeViewed') {
|
|
tableData.value = tableData.value.map(item => {
|
|
tableData.value = tableData.value.map(item => {
|
|
item.personName = item.person.name
|
|
item.personName = item.person.name
|
|
item.address = item.job.address
|
|
item.address = item.job.address
|
|
- item.typeName = item.type === 0 ? '平台投递': '赏金投递'
|
|
|
|
|
|
+ item.typeName = Number(item.type) === 0 ? '平台投递': '赏金投递'
|
|
item.recommendPersonName = item.recommendPerson?.name || ''
|
|
item.recommendPersonName = item.recommendPerson?.name || ''
|
|
return item
|
|
return item
|
|
})
|
|
})
|
|
}
|
|
}
|
|
|
|
+ // 已邀面试
|
|
if (currentItem.value.name === 'invitedInterviews') {
|
|
if (currentItem.value.name === 'invitedInterviews') {
|
|
tableData.value = tableData.value.map(item => {
|
|
tableData.value = tableData.value.map(item => {
|
|
item.personName = item.person.name
|
|
item.personName = item.person.name
|
|
@@ -467,6 +481,7 @@ const dealTableData = async () => {
|
|
return item
|
|
return item
|
|
})
|
|
})
|
|
}
|
|
}
|
|
|
|
+ // 面试完成
|
|
if (currentItem.value.name === 'invitedCompleted') {
|
|
if (currentItem.value.name === 'invitedCompleted') {
|
|
tableData.value = tableData.value.map(item => {
|
|
tableData.value = tableData.value.map(item => {
|
|
item.personName = item.person.name
|
|
item.personName = item.person.name
|
|
@@ -523,7 +538,7 @@ const getJobOption = async () => {
|
|
console.log(error)
|
|
console.log(error)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-getJobOption()
|
|
|
|
|
|
+// getJobOption()
|
|
|
|
|
|
const enterpriseIdSelectChange = (val) => {
|
|
const enterpriseIdSelectChange = (val) => {
|
|
queryParams.deptId = undefined
|
|
queryParams.deptId = undefined
|