Ver código fonte

统计分析调整

Xiao_123 6 meses atrás
pai
commit
3e7ddc0c2f

+ 1 - 1
src/api/menduner/system/analysis/statisticAnalysis.ts

@@ -34,7 +34,7 @@ export const statisticAnalysisApi = {
 
 
   // 获取完成面试统计分析明细
   // 获取完成面试统计分析明细
   getAnalysisInterviewCompletePage: async (params: any) => {
   getAnalysisInterviewCompletePage: async (params: any) => {
-    return await request.get({ url: `/menduner/system/analysis/get/interview/wait/page`, params })
+    return await request.get({ url: `/menduner/system/analysis/get/interview/complete/page`, params })
   },
   },
 
 
   
   

+ 1 - 1
src/utils/dict.ts

@@ -239,7 +239,7 @@ export enum DICT_TYPE {
   MENDUNER_USER_TYPE = 'menduner_user_type', // 用户类型
   MENDUNER_USER_TYPE = 'menduner_user_type', // 用户类型
   MENDUNER_SEX = 'menduner_sex', // 性别
   MENDUNER_SEX = 'menduner_sex', // 性别
   MENDUNER_EXP_TYPE = 'menduner_exp_type', // 工作经验
   MENDUNER_EXP_TYPE = 'menduner_exp_type', // 工作经验
-  MENDUNER_JOB_STATUS = 'menduner_job_status', // 职状态
+  MENDUNER_JOB_STATUS = 'menduner_job_status', // 职状态
   MENDUNER_MARITAL_STATUS = 'menduner_marital_status', // 婚姻状况
   MENDUNER_MARITAL_STATUS = 'menduner_marital_status', // 婚姻状况
   MENDUNER_PAY_UNIT= 'menduner_pay_unit', // 薪资单位
   MENDUNER_PAY_UNIT= 'menduner_pay_unit', // 薪资单位
   MENDUNER_POINT_RULE_CONFIG_TRIGGER_TYPE= 'menduner_point_rule_config_trigger_type', // 积分规则触发类型
   MENDUNER_POINT_RULE_CONFIG_TRIGGER_TYPE= 'menduner_point_rule_config_trigger_type', // 积分规则触发类型

+ 31 - 16
src/views/menduner/system/analysis/statisticAnalysis/index.vue

@@ -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

+ 1 - 1
src/views/pay/currency/rechargePackage/CurrencyRechargePackageForm.vue

@@ -14,7 +14,7 @@
         <el-input-number v-model="formData.payPrice" :min="1" :step="10" />
         <el-input-number v-model="formData.payPrice" :min="1" :step="10" />
       </el-form-item>
       </el-form-item>
       <el-form-item label="赠送金额(元)" prop="bonusPrice">
       <el-form-item label="赠送金额(元)" prop="bonusPrice">
-        <el-input-number v-model="formData.bonusPrice" :min="1" :step="10" />
+        <el-input-number v-model="formData.bonusPrice" :min="0" :step="10" />
       </el-form-item>
       </el-form-item>
       <el-form-item label="开启状态" prop="status">
       <el-form-item label="开启状态" prop="status">
         <el-radio-group v-model="formData.status">
         <el-radio-group v-model="formData.status">