|
@@ -10,155 +10,56 @@
|
|
</template>
|
|
</template>
|
|
</v-tooltip>
|
|
</v-tooltip>
|
|
</div>
|
|
</div>
|
|
- <div class="overview-item-value my-3">{{ overviewData[val.key] }}</div>
|
|
|
|
|
|
+ <div class="overview-item-value my-3 cursor-pointer">{{ overviewData[val.key] }}</div>
|
|
<div class="font-size-14">
|
|
<div class="font-size-14">
|
|
环比
|
|
环比
|
|
<span class="color-error">{{ typeof val.ratio === 'number' ? val.ratio : overviewData[val.ratio] }}% ↑</span>
|
|
<span class="color-error">{{ typeof val.ratio === 'number' ? val.ratio : overviewData[val.ratio] }}% ↑</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- <div id="myChart" style="width: 100%; height: 500px;background-color: #f7f8fa;border-radius: 8px;" class="pa-3"></div>
|
|
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
<script setup>
|
|
defineOptions({ name: 'overview-page'})
|
|
defineOptions({ name: 'overview-page'})
|
|
-import { ref, onMounted, watch } from 'vue'
|
|
|
|
-import * as echarts from 'echarts'
|
|
|
|
-import { getRecentConversations } from '@/api/recruit/enterprise/statistics'
|
|
|
|
-
|
|
|
|
-const props = defineProps({
|
|
|
|
- query: Object
|
|
|
|
-})
|
|
|
|
|
|
+import { ref } from 'vue'
|
|
|
|
+// import { getRecentConversations } from '@/api/recruit/enterprise/statistics'
|
|
|
|
+// const props = defineProps({
|
|
|
|
+// query: Object
|
|
|
|
+// })
|
|
|
|
|
|
const overviewData = ref({
|
|
const overviewData = ref({
|
|
position: 0,
|
|
position: 0,
|
|
resume: 0,
|
|
resume: 0,
|
|
viewResume: 0,
|
|
viewResume: 0,
|
|
- dealResume: 0,
|
|
|
|
- interview: 0
|
|
|
|
|
|
+ interview: 0,
|
|
|
|
+ interviewFinish: 0
|
|
})
|
|
})
|
|
// 数据概况
|
|
// 数据概况
|
|
const overview = ref([
|
|
const overview = ref([
|
|
{ title: '职位浏览量', key: 'position', ratio: 0, desc: '指全部职位被候选人查看的人数总和' },
|
|
{ title: '职位浏览量', key: 'position', ratio: 0, desc: '指全部职位被候选人查看的人数总和' },
|
|
{ title: '收到简历量', key: 'resume', ratio: 0, desc: '指全部职位收到简历的总数' },
|
|
{ title: '收到简历量', key: 'resume', ratio: 0, desc: '指全部职位收到简历的总数' },
|
|
{ title: '查看收到简历', key: 'viewResume', ratio: 0, desc: '指查看候选人主动发送的简历数量' },
|
|
{ title: '查看收到简历', key: 'viewResume', ratio: 0, desc: '指查看候选人主动发送的简历数量' },
|
|
- { title: '已处理简历', key: 'dealResume', ratio: 0, desc: '指招聘方标记"通过筛选"与"不合适"的简历数' },
|
|
|
|
- { title: '主动联系我的人', key: 'activeContactCount', ratio: 'qqactiveContactCount', desc: '指候选人主动发起沟通的人数' },
|
|
|
|
- { title: '我主动联系的人', key: 'usContactCount', ratio: 'qqUsContactCount', desc: '指候选人主动发起沟通的人数' },
|
|
|
|
- { title: '面试数量', key: 'interview', ratio: 0, desc: '面试人数的总数' }
|
|
|
|
|
|
+ { title: '面试-已邀约', key: 'interview', ratio: 0, desc: '已邀约的面试人数' },
|
|
|
|
+ { title: '面试-已完成', key: 'interviewFinish', ratio: 0, desc: '已完成面试的人数' },
|
|
])
|
|
])
|
|
|
|
|
|
// 主动联系我的、我主动联系的人
|
|
// 主动联系我的、我主动联系的人
|
|
-const accountInfo = localStorage.getItem('accountInfo') ? JSON.parse(localStorage.getItem('accountInfo')) : {}
|
|
|
|
-const getRecent = async () => {
|
|
|
|
- if (!accountInfo || !accountInfo.userId) return
|
|
|
|
- const data = await getRecentConversations({ userId: accountInfo.userId, ...props.query })
|
|
|
|
- overviewData.value = Object.assign(overviewData.value, data)
|
|
|
|
-}
|
|
|
|
-getRecent()
|
|
|
|
-
|
|
|
|
-onMounted(() => {
|
|
|
|
- var chartDom = document.getElementById('myChart')
|
|
|
|
- var myChart = echarts.init(chartDom)
|
|
|
|
- var option
|
|
|
|
-
|
|
|
|
- option = {
|
|
|
|
- title: {
|
|
|
|
- text: '历史数据走势图'
|
|
|
|
- },
|
|
|
|
- tooltip: {
|
|
|
|
- trigger: 'axis',
|
|
|
|
- axisPointer: {
|
|
|
|
- type: 'cross',
|
|
|
|
- label: {
|
|
|
|
- backgroundColor: '#6a7985'
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- },
|
|
|
|
- legend: {
|
|
|
|
- data: ['职位数', '刷新次数', '职位浏览', '简历投递数', '简历处理']
|
|
|
|
- },
|
|
|
|
- toolbox: {
|
|
|
|
- feature: {
|
|
|
|
- saveAsImage: {}
|
|
|
|
- }
|
|
|
|
- },
|
|
|
|
- grid: {
|
|
|
|
- left: '3%',
|
|
|
|
- right: '4%',
|
|
|
|
- bottom: '3%',
|
|
|
|
- containLabel: true
|
|
|
|
- },
|
|
|
|
- xAxis: [
|
|
|
|
- {
|
|
|
|
- type: 'category',
|
|
|
|
- boundaryGap: false,
|
|
|
|
- data: ['2024-07-10', '2024-07-11', '2024-07-12']
|
|
|
|
- }
|
|
|
|
- ],
|
|
|
|
- yAxis: [
|
|
|
|
- {
|
|
|
|
- type: 'value'
|
|
|
|
- }
|
|
|
|
- ],
|
|
|
|
- series: [
|
|
|
|
- {
|
|
|
|
- name: '职位数',
|
|
|
|
- type: 'line',
|
|
|
|
- emphasis: {
|
|
|
|
- focus: 'series'
|
|
|
|
- },
|
|
|
|
- data: [120, 132, 101, 134, 90, 230, 210]
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- name: '刷新次数',
|
|
|
|
- type: 'line',
|
|
|
|
- emphasis: {
|
|
|
|
- focus: 'series'
|
|
|
|
- },
|
|
|
|
- data: [220, 182, 191, 234, 290, 330, 310]
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- name: '职位浏览',
|
|
|
|
- type: 'line',
|
|
|
|
- emphasis: {
|
|
|
|
- focus: 'series'
|
|
|
|
- },
|
|
|
|
- data: [150, 232, 201, 154, 190, 330, 410]
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- name: '简历投递数',
|
|
|
|
- type: 'line',
|
|
|
|
- emphasis: {
|
|
|
|
- focus: 'series'
|
|
|
|
- },
|
|
|
|
- data: [320, 332, 301, 334, 390, 330, 320]
|
|
|
|
- },
|
|
|
|
- {
|
|
|
|
- name: '简历处理',
|
|
|
|
- type: 'line',
|
|
|
|
- label: {
|
|
|
|
- show: true,
|
|
|
|
- position: 'top'
|
|
|
|
- },
|
|
|
|
- emphasis: {
|
|
|
|
- focus: 'series'
|
|
|
|
- },
|
|
|
|
- data: [820, 932, 901, 934, 1290, 1330, 1320]
|
|
|
|
- }
|
|
|
|
- ]
|
|
|
|
- }
|
|
|
|
- option && myChart.setOption(option)
|
|
|
|
-})
|
|
|
|
|
|
+// const accountInfo = localStorage.getItem('accountInfo') ? JSON.parse(localStorage.getItem('accountInfo')) : {}
|
|
|
|
+// const getRecent = async () => {
|
|
|
|
+// if (!accountInfo || !accountInfo.userId) return
|
|
|
|
+// const data = await getRecentConversations({ userId: accountInfo.userId, ...props.query })
|
|
|
|
+// overviewData.value = Object.assign(overviewData.value, data)
|
|
|
|
+// }
|
|
|
|
+// getRecent()
|
|
|
|
|
|
-watch(
|
|
|
|
- () => props.query,
|
|
|
|
- (val) => {
|
|
|
|
- if (val) getRecent()
|
|
|
|
- },
|
|
|
|
- { deep: true }
|
|
|
|
-)
|
|
|
|
|
|
+// watch(
|
|
|
|
+// () => props.query,
|
|
|
|
+// (val) => {
|
|
|
|
+// if (val) getRecent()
|
|
|
|
+// },
|
|
|
|
+// { deep: true }
|
|
|
|
+// )
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
<style scoped lang="scss">
|
|
@@ -168,10 +69,10 @@ watch(
|
|
flex-wrap: wrap; // 换行
|
|
flex-wrap: wrap; // 换行
|
|
}
|
|
}
|
|
.overview-item {
|
|
.overview-item {
|
|
- // width: calc((100% - 84px) / 8);
|
|
|
|
- // min-width: calc((100% - 84px) / 8);
|
|
|
|
- // max-width: calc((100% - 84px) / 8);
|
|
|
|
- min-width: 200px;
|
|
|
|
|
|
+ width: calc((100% - 48px) / 5);
|
|
|
|
+ min-width: calc((100% - 48px) / 5);
|
|
|
|
+ max-width: calc((100% - 48px) / 5);
|
|
|
|
+ // min-width: 200px;
|
|
margin: 0 12px 12px 0;
|
|
margin: 0 12px 12px 0;
|
|
height: 175px;
|
|
height: 175px;
|
|
border-radius: 12px;
|
|
border-radius: 12px;
|