|
@@ -8,12 +8,15 @@
|
|
|
:inline="true"
|
|
|
>
|
|
|
<el-form-item label="" prop="type">
|
|
|
- <el-radio-group v-model="queryParams.type" @change="typeChange" class="!w-300px">
|
|
|
+ <el-radio-group v-model="queryParams.type" @change="typeChange" class="!w-390px">
|
|
|
<!-- <el-radio-button label="全部" value="-1" /> -->
|
|
|
- <el-radio-button label="每天" value="3" />
|
|
|
- <el-radio-button label="每周" value="0" />
|
|
|
- <el-radio-button label="每月" value="4" />
|
|
|
- <el-radio-button label="每年" value="5" />
|
|
|
+ <el-radio-button label="24小时内" value="3" />
|
|
|
+ <el-radio-button label="7天内" value="0" />
|
|
|
+ <!-- <el-radio-button label="上个月" value="1" /> -->
|
|
|
+ <el-radio-button label="30天内" value="4" />
|
|
|
+ <el-radio-button label="3个月内" value="6" />
|
|
|
+ <!-- <el-radio-button label="上个季度" value="2" /> -->
|
|
|
+ <el-radio-button label="1年内" value="5" />
|
|
|
</el-radio-group>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="" prop="time">
|
|
@@ -35,7 +38,29 @@
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
</ContentWrap>
|
|
|
-
|
|
|
+ <!-- 统计 -->
|
|
|
+ <div>
|
|
|
+ <CardTitle title="招聘进展" style="margin-left: 5px;"/>
|
|
|
+ <!-- <div style="text-align: end;">
|
|
|
+ <el-button type="success" plain @click="handleExport" :loading="exportLoading">
|
|
|
+ <Icon icon="ep:download" class="mr-5px" /> 明细导出
|
|
|
+ </el-button>
|
|
|
+ </div> -->
|
|
|
+ <el-row :gutter="16" class="row" style="margin-top: 10px;">
|
|
|
+ <el-col v-for="item in statisticList" :key="item.name" :md="4" :sm="12" :xs="24" :loading="loading">
|
|
|
+ <ComparisonCard
|
|
|
+ :title="item.title"
|
|
|
+ :value="statistic[item.name]"
|
|
|
+ style="cursor: pointer;"
|
|
|
+ />
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ <!-- 图表 -->
|
|
|
+
|
|
|
+ <div style="margin-top: 15px;">
|
|
|
+ <CardTitle title="数量统计" style="margin-left: 5px; margin-top: 20px;"/>
|
|
|
+ </div>
|
|
|
<el-row class="mt-8px" :gutter="10" justify="space-between">
|
|
|
<el-col :xl="12" :lg="12" :md="24" :sm="24" :xs="24" class="mb-8px" v-for="(val, index) in list" :key="index">
|
|
|
<el-skeleton :loading="val.loading" animated>
|
|
@@ -58,6 +83,8 @@
|
|
|
defineOptions({ name: 'Home' })
|
|
|
import { cloneDeep } from 'lodash-es'
|
|
|
import { getNewResumeNum, getNewRegisterUserNum, getNewRegisterEnterpriseNum, getNewEnterpriseUserNum } from '@/api/home'
|
|
|
+import { statisticAnalysisApi } from '@/api/menduner/system/analysis/statisticAnalysis'
|
|
|
+import ComparisonCard from '@/views/menduner/system/analysis/statisticAnalysis/components/ComparisonCard.vue'
|
|
|
|
|
|
const queryFormRef = ref()
|
|
|
const queryParams = reactive({
|
|
@@ -166,7 +193,7 @@ async function fetchAllData() {
|
|
|
list.value.forEach(item => item.loading = false)
|
|
|
}
|
|
|
}
|
|
|
-fetchAllData()
|
|
|
+// fetchAllData()
|
|
|
|
|
|
/** 类型选择操作 */
|
|
|
const typeChange = (value) => {
|
|
@@ -179,10 +206,71 @@ const timeRangeChange = (value) => {
|
|
|
else queryParams.type = '0'
|
|
|
}
|
|
|
|
|
|
+const loading = ref(true) // 加载中
|
|
|
+/** 初始化 **/
|
|
|
+onMounted(async () => {
|
|
|
+ loading.value = true
|
|
|
+})
|
|
|
+
|
|
|
+// 统计
|
|
|
+const statisticList = [
|
|
|
+ { title: '发布职位数量', name: 'pushNum' },
|
|
|
+ { title: '职位浏览量', name: 'pageViews' },
|
|
|
+ { title: '收到的简历', name: 'resumeReceived' },
|
|
|
+ { title: '已查看简历', name: 'resumeViewed' },
|
|
|
+ { title: '已邀面试', name: 'invitedInterviews' },
|
|
|
+ { title: '面试完成', name: 'invitedCompleted' },
|
|
|
+]
|
|
|
+
|
|
|
+// 统计
|
|
|
+const statistic = reactive({
|
|
|
+ pageViews: 0,
|
|
|
+ pushNum: 0,
|
|
|
+ resumeReceived: 0,
|
|
|
+ resumeViewed: 0,
|
|
|
+ invitedInterviews: 0,
|
|
|
+ invitedCompleted: 0,
|
|
|
+})
|
|
|
+
|
|
|
+const apiArr = reactive({
|
|
|
+ // 统计
|
|
|
+ pageViewsTotal: statisticAnalysisApi.getAnalysisJobBrowseNum, // 职位浏览量-总数据
|
|
|
+ pageViews: statisticAnalysisApi.getAnalysisJobBrowseNumPage, // 职位浏览量-钻取
|
|
|
+ resumeReceived: statisticAnalysisApi.getAnalysisJobCvNewPage, // 钻取
|
|
|
+ pushNum: statisticAnalysisApi.getAnalysisJobNumPage, // 钻取
|
|
|
+ resumeViewed: statisticAnalysisApi.getAnalysisJobCvLookPage, // 钻取
|
|
|
+ invitedInterviews: statisticAnalysisApi.getAnalysisInterviewWaitPage, // 钻取
|
|
|
+ invitedCompleted: statisticAnalysisApi.getAnalysisInterviewCompletePage, // 钻取
|
|
|
+ // 分布
|
|
|
+ // sexDistributionData: statisticAnalysisApi.getAnalysisJobCvSexCount,
|
|
|
+ // ageDistributionData: statisticAnalysisApi.getAnalysisJobCvAgeCount,
|
|
|
+ // workExperienceData: statisticAnalysisApi.getAnalysisJobCvExpCount,
|
|
|
+ // educationData: statisticAnalysisApi.getAnalysisJobCvEduCount,
|
|
|
+})
|
|
|
+
|
|
|
+const getList = async (typeName) => {
|
|
|
+ loading.value = true
|
|
|
+ try {
|
|
|
+ // 职位浏览量-总数据
|
|
|
+ const res = await apiArr.pageViewsTotal(queryParams)
|
|
|
+ const data = { total: res || 0 }
|
|
|
+ statistic[typeName] = data.total || 0
|
|
|
+ } finally {
|
|
|
+ loading.value = false
|
|
|
+ dialogLoading.value = false
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/** 搜索按钮操作 */
|
|
|
const handleQuery = async () => {
|
|
|
+ if (Object.keys(statistic).length) { // 招聘进展
|
|
|
+ Object.keys(statistic).forEach(name => {
|
|
|
+ getList(name)
|
|
|
+ })
|
|
|
+ }
|
|
|
fetchAllData()
|
|
|
}
|
|
|
+handleQuery() // 默认展示数据
|
|
|
|
|
|
/** 重置按钮操作 */
|
|
|
const resetQuery = () => {
|