소스 검색

翻页数据

lifanagju_citu 8 달 전
부모
커밋
7986c3d649
2개의 변경된 파일157개의 추가작업 그리고 100개의 파일을 삭제
  1. 20 0
      src/api/menduner/system/analysis/statisticAnalysis.ts
  2. 137 100
      src/views/menduner/system/analysis/statisticAnalysis/index.vue

+ 20 - 0
src/api/menduner/system/analysis/statisticAnalysis.ts

@@ -2,6 +2,11 @@ import request from '@/config/axios'
 
 // 统计分析 API
 export const statisticAnalysisApi = {
+  // 获取发布职位浏览量总数
+  getAnalysisJobBrowseNum: async (params: any) => {
+    return await request.get({ url: `/menduner/system/analysis/get/job/browse/num`, params })
+  },
+
   // 获取发布职位浏览量统计分析明细
   getAnalysisJobBrowseNumPage: async (params: any) => {
     return await request.get({ url: `/menduner/system/analysis/get/job/browse/num/page`, params })
@@ -47,4 +52,19 @@ export const statisticAnalysisApi = {
   getAnalysisJobCvEduCount: async (params: any) => {
     return await request.get({ url: `/menduner/system/analysis/get/job/cv/edu/count`, params })
   },
+
+  // 下拉框
+  // 获取企业精简信息列表
+  getAnalysisEnterpriseSimpleList: async (params: any) => {
+    return await request.get({ url: `/menduner/system/enterprise/simple-list`, params })
+  },
+
+  // 根据条件查询企业用户列表
+  getAnalysisEnterpriseUserList: async (params: any) => {
+    return await request.get({ url: `/menduner/system/enterprise-user-bind/list`, params })
+  },
+  // 获得招聘职位列表
+  getAnalysisJobAdvertisedList: async (params: any) => {
+    return await request.get({ url: `/menduner/system/job-advertised/list`, params })
+  },
 }

+ 137 - 100
src/views/menduner/system/analysis/statisticAnalysis/index.vue

@@ -20,8 +20,8 @@
               <el-option
                 v-for="dict in enterpriseOption"
                 :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
+                :label="dict.name"
+                :value="dict.id"
               />
             </el-select>
           </el-form-item>
@@ -50,8 +50,8 @@
               <el-option
                 v-for="dict in userOption"
                 :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
+                :label="dict.name"
+                :value="dict.userId"
               />
             </el-select>
           </el-form-item>
@@ -65,8 +65,8 @@
               <el-option
                 v-for="dict in jobOption"
                 :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
+                :label="dict.name"
+                :value="dict.positionId"
               />
             </el-select>
           </el-form-item>
@@ -78,9 +78,9 @@
             <el-radio-button label="上季度" value="2" />
           </el-radio-group>
         </el-form-item>
-        <el-form-item label="" prop="dateRange">
+        <el-form-item label="" prop="time">
           <el-date-picker
-            v-model="queryParams.dateRange"
+            v-model="queryParams.time"
             value-format="YYYY-MM-DD HH:mm:ss"
             type="daterange"
             start-placeholder="开始日期"
@@ -168,6 +168,7 @@ import { statisticAnalysisApi } from '@/api/menduner/system/analysis/statisticAn
 defineOptions({name: 'StatisticAnalysis'})
 
 const loading = ref(true) // 加载中
+const dialogLoading = ref(false)
 
 /** 初始化 **/
 onMounted(async () => {
@@ -176,14 +177,12 @@ onMounted(async () => {
 
 const page = reactive({ pageNo: 1, pageSize: 10 })
 const queryParams = reactive({
-  pageNo: 1,
-  pageSize: 10,
   type: '0',
   enterpriseId: undefined,
   deptId: undefined,
   userId: undefined,
   jobId: undefined,
-  dateRange: [],
+  time: [],
 })
 
 const queryFormRef = ref() // 搜索的表单
@@ -195,23 +194,22 @@ const resetQuery = () => {
 
 const typeChange = (value) => { // 
   if (value) {
-    queryParams.dateRange = []
-    handleQuery()
+    queryParams.time = []
   }
 }
 const timeRangeChange = (value) => {
   if (value?.length) queryParams.type = '99' // 自定义
   else queryParams.type = '0'
-  handleQuery()
 }
 
 const apiArr = reactive({
   // 统计
-  pageViews: statisticAnalysisApi.getAnalysisJobBrowseNumPage,
-  resumeReceived: statisticAnalysisApi.getAnalysisJobCvNewPage,
-  resumeViewed: statisticAnalysisApi.getAnalysisJobCvLookPage,
-  invitedInterviews: statisticAnalysisApi.getAnalysisInterviewWaitPage,
-  invitedCompleted: statisticAnalysisApi.getAnalysisInterviewCompletePage,
+  pageViewsTotal: statisticAnalysisApi.getAnalysisJobBrowseNum, // 职位浏览量-总数据
+  pageViews: statisticAnalysisApi.getAnalysisJobBrowseNumPage, // 职位浏览量-钻取
+  resumeReceived: statisticAnalysisApi.getAnalysisJobCvNewPage, // 钻取
+  resumeViewed: statisticAnalysisApi.getAnalysisJobCvLookPage, // 钻取
+  invitedInterviews: statisticAnalysisApi.getAnalysisInterviewWaitPage, // 钻取
+  invitedCompleted: statisticAnalysisApi.getAnalysisInterviewCompletePage, // 钻取
   // 分布
   sexDistributionData: statisticAnalysisApi.getAnalysisJobCvSexCount,
   ageDistributionData: statisticAnalysisApi.getAnalysisJobCvAgeCount,
@@ -245,13 +243,27 @@ const distribution = reactive({
 })
 
 // 统计
-const getList = async (typeName, deal = '') => {
+const tableData = ref([])
+const total = ref(0)
+const getList = async (typeName, details = '') => {
   loading.value = true
   try {
-    const data = await apiArr[typeName]({ ...queryParams, ...customTimeObj })
-    tableData.value = data.list || []
-    statistic[typeName] = data.total
-    if (deal) dealTableData()
+    let data
+    if (!details && typeName === 'pageViews') {
+      // 职位浏览量-总数据
+      const res = await apiArr.pageViewsTotal(queryParams)
+      data ={ total: res || 0 }
+    } else {
+      // 使用钻取接口
+      data = await apiArr[typeName]({ ...queryParams, ...page })
+    }
+    if (details) {
+      tableData.value = data.list || []
+      total.value = data.total || 0
+      dealTableData()
+    } else {
+      statistic[typeName] = data.total || data || 0
+    }
   } finally {
     loading.value = false
     dialogLoading.value = false
@@ -269,64 +281,11 @@ const getText = (value, arr, itemText = 'name', itemValue = 'id') => { // 一维
   return item[itemText]
 }
 
-const dealTableData = async () => {
-  if (currentItem.value.name === 'pageViews') {
-    const areaList = await getDictOptions('areaList')
-    tableData.value = tableData.value.map(item => {
-      item.salaryDisplay = `${item.payFrom}-${item.payTo}/${getDictLabel(DICT_TYPE.MENDUNER_PAY_UNIT, item.payUnit)}`
-      item.areaName = getText(item.areaId, areaList)
-      item.expName = getDictLabel(DICT_TYPE.MENDUNER_EXP_TYPE, item.expType)
-      item.eduName = getDictLabel(DICT_TYPE.MENDUNER_EDUCATION_TYPE, item.eduType)
-      return item
-    })
-  }
-  if (currentItem.value.name === 'resumeReceived') {
-    const areaList = await getDictOptions('areaList')
-    tableData.value = tableData.value.map(item => {
-      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.expName = getDictLabel(DICT_TYPE.MENDUNER_EXP_TYPE, item.job.expType)
-      item.eduName = getDictLabel(DICT_TYPE.MENDUNER_EDUCATION_TYPE, item.job.eduType)
-      item.personName = item.person.name
-      return item
-    })
-  }
-  if (currentItem.value.name === 'resumeViewed') {
-    tableData.value = tableData.value.map(item => {
-      item.personName = item.person.name
-      item.address = item.job.address
-      item.typeName = item.type === 0 ? '平台投递': '赏金投递'
-      item.recommendPersonName = item.recommendPerson?.name || ''
-      return item
-    })
-  }
-  if (currentItem.value.name === 'invitedInterviews') {
-    tableData.value = tableData.value.map(item => {
-      item.personName = item.person.name
-      item.jobName = item.job.name
-      item.typeName = item.type === 0 ? '线上面试': '线下面试'
-      item.timeName = timesTampChange(item.time, 'Y-M-D h:m')
-      item.addressName = item.job.address
-      return item
-    })
-  }
-  if (currentItem.value.name === 'invitedCompleted') {
-    tableData.value = tableData.value.map(item => {
-      item.personName = item.person.name
-      item.jobName = item.job.name
-      item.typeName = item.type === 0 ? '线上面试': '线下面试'
-      item.timeName = timesTampChange(item.time, 'Y-M-D h:m')
-      item.addressName = item.job.address
-      return item
-    })
-  }
-}
 
 // 分布
 const getDistributionCount = async (typeName) => {
   try {
-    const data = await apiArr[typeName]({ ...queryParams, ...customTimeObj })
+    const data = await apiArr[typeName](queryParams)
     distribution[typeName] = data || {}
   } catch (error) {
     console.log(error)
@@ -334,9 +293,7 @@ const getDistributionCount = async (typeName) => {
 }
 
 /** 搜索按钮操作 */
-let customTimeObj
 const handleQuery = () => {
-  customTimeObj = queryParams.type === '99' && queryParams.dateRange?.length === 2 ? customTimeObj = { 'time[0]': queryParams.dateRange.date[0] + ' 00:00:00', 'time[1]': queryParams.dateRange.date[1] + ' 23:59:59' } : {}
   if (Object.keys(statistic).length) {
     Object.keys(statistic).forEach(name => {
       getList(name)
@@ -352,29 +309,30 @@ const handleQuery = () => {
 handleQuery()
 
 const showDialog = ref(false)
-const dialogLoading = ref(false)
-const tableData = ref([])
 const currentItem = ref({})
 // 打开弹窗
 const openDialog = (item) => {
   dialogLoading.value = true
-  queryParams.pageNo = 1
   currentItem.value = item
+  page.pageNo = 1
   tableData.value = []
   getList(item.name, '钻取')
   showDialog.value = true
 }
 const closeDialog = () => {
 }
+const paginationChange = () => {
+  getList(currentItem.value.name, '钻取')
+}
 
 const tableHeaders = {
   pageViews: [
+    { name: '浏览量', prop: 'num' },
     { name: '招聘职位', prop: 'name' },
     { name: '薪酬', prop: 'salaryDisplay' },
     { name: '工作地区', prop: 'areaName' },
     { name: '工作经验', prop: 'expName' },
     { name: '学历要求', prop: 'eduName' },
-    { name: '浏览量', prop: 'num' }
   ],
   resumeReceived: [
     { name: '投递人', prop: 'personName' },
@@ -408,22 +366,101 @@ const tableHeaders = {
   ],
 }
 
-const enterpriseOption = [
-  { label: '企业 1', value: '1' },
-  { label: '企业 2', value: '2' },
-]
-const deptOption = [
-  { label: '部门 1', value: '1' },
-  { label: '部门 2', value: '2' },
-]
-const userOption = [
-  { label: '用户 1', value: '1' },
-  { label: '用户 2', value: '2' },
-]
-const jobOption = [
-  { label: '职位 1', value: '1' },
-  { label: '职位 2', value: '2' },
-]
+const dealTableData = async () => {
+  if (currentItem.value.name === 'pageViews') {
+    const areaList = await getDictOptions('areaList')
+    tableData.value = tableData.value.map(item => {
+      item.salaryDisplay = `${item.payFrom}-${item.payTo}/${getDictLabel(DICT_TYPE.MENDUNER_PAY_UNIT, item.payUnit)}`
+      item.areaName = getText(item.areaId, areaList)
+      item.expName = getDictLabel(DICT_TYPE.MENDUNER_EXP_TYPE, item.expType)
+      item.eduName = getDictLabel(DICT_TYPE.MENDUNER_EDUCATION_TYPE, item.eduType)
+      return item
+    })
+  }
+  if (currentItem.value.name === 'resumeReceived') {
+    const areaList = await getDictOptions('areaList')
+    tableData.value = tableData.value.map(item => {
+      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.expName = getDictLabel(DICT_TYPE.MENDUNER_EXP_TYPE, item.job.expType)
+      item.eduName = getDictLabel(DICT_TYPE.MENDUNER_EDUCATION_TYPE, item.job.eduType)
+      item.personName = item.person.name
+      return item
+    })
+  }
+  if (currentItem.value.name === 'resumeViewed') {
+    tableData.value = tableData.value.map(item => {
+      item.personName = item.person.name
+      item.address = item.job.address
+      item.typeName = item.type === 0 ? '平台投递': '赏金投递'
+      item.recommendPersonName = item.recommendPerson?.name || ''
+      return item
+    })
+  }
+  if (currentItem.value.name === 'invitedInterviews') {
+    tableData.value = tableData.value.map(item => {
+      item.personName = item.person.name
+      item.jobName = item.job.name
+      item.typeName = item.type === 0 ? '线上面试': '线下面试'
+      item.timeName = timesTampChange(item.time, 'Y-M-D h:m')
+      item.addressName = item.job.address
+      return item
+    })
+  }
+  if (currentItem.value.name === 'invitedCompleted') {
+    tableData.value = tableData.value.map(item => {
+      item.personName = item.person.name
+      item.jobName = item.job.name
+      item.typeName = item.type === 0 ? '线上面试': '线下面试'
+      item.timeName = timesTampChange(item.time, 'Y-M-D h:m')
+      item.addressName = item.job.address
+      return item
+    })
+  }
+}
+
+
+// 企业
+const enterpriseOption = ref([])
+const getEnterpriseOption = async () => {
+  try {
+    const data = await statisticAnalysisApi.getAnalysisEnterpriseSimpleList()
+    enterpriseOption.value = data || []
+  } catch (error) {
+    console.log(error)
+  }
+}
+getEnterpriseOption()
+
+// 部门
+const deptOption = ref([])
+
+// 用户
+const userOption = ref([])
+const getUserOption = async () => {
+  try {
+    // const params = {}
+    const data = await statisticAnalysisApi.getAnalysisEnterpriseUserList()
+    userOption.value = data || []
+  } catch (error) {
+    console.log(error)
+  }
+}
+getUserOption()
+
+// 用户
+const jobOption = ref([])
+const getJobOption = async () => {
+  try {
+    // const params = {}
+    const data = await statisticAnalysisApi.getAnalysisJobAdvertisedList()
+    jobOption.value = data || []
+  } catch (error) {
+    console.log(error)
+  }
+}
+getJobOption()
 
 </script>
 <style lang="scss" scoped>