Kaynağa Gözat

Merge branch 'dev' of https://git.citupro.com/zhengnaiwen_citu/menduner into dev

lifanagju_citu 9 ay önce
ebeveyn
işleme
67ce88869b

+ 8 - 0
src/api/recruit/enterprise/statistics/index.js

@@ -31,3 +31,11 @@ export const getJobCvSexCount = async (params) => {
     params
   })
 }
+
+// 联系我的和我联系的统计
+export const getRecentConversations = async (data) => {
+  return await request.post({
+    url: '/app-api/im/recent/conversations/statistics',
+    data
+  })
+}

+ 6 - 1
src/views/recruit/enterprise/informationManagement/informationSettings.vue

@@ -7,7 +7,7 @@
       </v-tabs>
       <v-window v-model="tab" class="mt-3">
         <v-window-item :value="val.value" v-for="val in tabList" :key="val.value">
-          <component :is="val.path"></component>
+          <component :is="val.path" ref="tabRef"></component>
         </v-window-item>
       </v-window>
     </v-card>
@@ -33,6 +33,7 @@ const route = useRoute()
 // const router = useRouter()
 const { t } = useI18n()
 // tab
+const tabRef = ref()
 const tab = ref(1)
 const tabList = [
   { label: t('enterprise.infoSetting.basicInfo'), value: 1, path: basicInfo },
@@ -46,6 +47,10 @@ const tabList = [
 
 watch(() => route?.query?.tabKey, (newVal) => { if (newVal) tab.value = newVal - 0 })
 const handleTabClick = () => {
+  // 基本信息-获取企业管理员实名认证信息
+  if (tab.value === 1) {
+    tabRef.value[0].getAuthInfo()
+  }
   // router.push(`${route.path}?tabKey=${tab.value.toString()}`)
 }
 </script>

+ 4 - 0
src/views/recruit/enterprise/informationManagement/informationSettingsComponents/basicInfo.vue

@@ -241,6 +241,10 @@ const handleSave = async () => {
   Snackbar.success(t('common.saveMsg'))
   getBaseInfo()
 }
+
+defineExpose({
+  getAuthInfo
+})
 </script>
 
 <style lang="scss" scoped>

+ 39 - 10
src/views/recruit/enterprise/statistics/components/overview.vue

@@ -10,10 +10,10 @@
             </template>
           </v-tooltip>
         </div>
-        <div class="overview-item-value my-3">{{ val.value }}</div>
+        <div class="overview-item-value my-3">{{ overviewData[val.key] }}</div>
         <div class="font-size-14">
           环比
-          <span class="color-error">0% ↑</span>
+          <span class="color-error">{{ typeof val.ratio === 'number' ? val.ratio : overviewData[val.ratio] }}% ↑</span>
         </div>
       </div>
     </div>
@@ -23,20 +23,41 @@
 
 <script setup>
 defineOptions({ name: 'overview-page'})
-import { ref, onMounted } from 'vue'
+import { ref, onMounted, watch } from 'vue'
 import * as echarts from 'echarts'
+import { getRecentConversations } from '@/api/recruit/enterprise/statistics'
 
+const props = defineProps({
+  query: Object
+})
+
+const overviewData = ref({
+  position: 0,
+  resume: 0,
+  viewResume: 0,
+  dealResume: 0,
+  interview: 0
+})
 // 数据概况
 const overview = ref([
-  { title: '职位浏览量', value: 86, desc: '指全部职位被候选人查看的人数总和' },
-  { title: '收到简历量', value: 12, desc: '指全部职位收到简历的总数' },
-  { title: '查看收到简历', value: 0, desc: '指查看候选人主动发送的简历数量' },
-  { title: '已处理简历', value: 4, desc: '指招聘方标记"通过筛选"与"不合适"的简历数' },
-  { title: '主动联系我的人', value: 0, desc: '指候选人主动发起沟通的人数' },
-  { title: '我主动联系的人', value: 5, desc: '指候选人主动发起沟通的人数' },
-  { title: '面试数量', value: 0, desc: '面试人数的总数' }
+  { title: '职位浏览量', key: 'position', ratio: 0, desc: '指全部职位被候选人查看的人数总和' },
+  { title: '收到简历量', key: 'resume', 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: '面试人数的总数' }
 ])
 
+// 主动联系我的、我主动联系的人
+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)
@@ -130,6 +151,14 @@ onMounted(() => {
   }
   option && myChart.setOption(option)
 })
+
+watch(
+  () => props.query,
+  (val) => {
+    if (val) getRecent()
+  },
+  { deep: true }
+)
 </script>
 
 <style scoped lang="scss">

+ 1 - 1
src/views/recruit/enterprise/statistics/overallAnalysis.vue

@@ -18,7 +18,7 @@
       <v-tabs v-model="tab" align-tabs="start" color="primary" bg-color="#f7f8fa">
         <v-tab :value="1">招聘进展</v-tab>
       </v-tabs>
-      <Overview class="mt-5"></Overview>
+      <Overview class="mt-5" :query="query"></Overview>
     </div>
     <div class="my-10">
       <v-tabs class="mb-5" v-model="tab" align-tabs="start" color="primary" bg-color="#f7f8fa">