Forráskód Böngészése

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

lifanagju_citu 8 hónapja
szülő
commit
ba94a7ee81

+ 2 - 2
src/layout/company/navBar.vue

@@ -79,8 +79,8 @@
             </v-list>
           </v-menu> -->
 
-          <!-- <v-btn size="small" icon="mdi-bell-outline" @click="router.push('/recruit/enterprise/interviewManagement/communicate')"></v-btn> -->
-          <MessageNotification path="/recruit/enterprise/interviewManagement/communicate"></MessageNotification>
+          <!-- <v-btn size="small" icon="mdi-bell-outline" @click="router.push('/recruit/enterprise/chatTools')"></v-btn> -->
+          <MessageNotification path="/recruit/enterprise/chatTools"></MessageNotification>
         </div>
       </div>
     </v-toolbar>

+ 1 - 1
src/layout/company/slider.vue

@@ -23,7 +23,7 @@ const router = useRouter()
 const list = [
   { mdi: 'mdi-arrow-up-bold', tips: '返回顶部' },
   { mdi: 'mdi-qrcode', tips: '微信公众号', showImg: 'https://minio.citupro.com/dev/static/mendunerCode.jpg' },
-  { mdi: 'mdi-bell-outline', tips: '消息', path: '/recruit/enterprise/interviewManagement/communicate' }
+  { mdi: 'mdi-bell-outline', tips: '消息', path: '/recruit/enterprise/chatTools' }
 ]
 
 const handleClick = (item, index) => {

+ 20 - 15
src/router/modules/components/recruit/enterprise.js

@@ -97,11 +97,27 @@ const enterprise = [
       }
     ]
   },
+  {
+    path: '/recruit/enterprise/chatTools',
+    component: Layout,
+    name: 'chatTools',
+    meta: {
+      title: '聊天工具',
+      enName: 'Chat Tools',
+      icon: 'mdi-bell-outline'
+    },
+    children: [
+      {
+        path: '/recruit/enterprise/chatTools',
+        show: true,
+        component: () => import('@/views/recruit/enterprise/chatTools/index.vue')
+      }
+    ]
+  },
   {
     path: '/recruit/enterprise/interviewManagement',
     component: Layout,
     name: 'interviewManagement',
-    redirect: '/recruit/enterprise/interviewManagement/communicate',
     meta: {
       title: '面试管理',
       enName: 'Interview management',
@@ -109,20 +125,9 @@ const enterprise = [
     },
     children: [
       {
-        path: '/recruit/enterprise/interviewManagement/communicate',
-        meta: {
-          title: '沟通',
-          enName: 'Communicate'
-        },
-        component: () => import('@/views/recruit/enterprise/interviewManagement/communicate/index.vue')
-      },
-      {
-        path: '/recruit/enterprise/interviewManagement/interviewSchedule',
-        meta: {
-          title: '面试日程',
-          enName: 'Interview schedule'
-        },
-        component: () => import('@/views/recruit/enterprise/interviewManagement/interviewSchedule/index.vue')
+        path: '/recruit/enterprise/interviewManagement',
+        show: true,
+        component: () => import('@/views/recruit/enterprise/interviewManagement/index.vue')
       }
     ]
   },

+ 1 - 1
src/views/recruit/components/message/index.vue

@@ -142,7 +142,7 @@
 
 <script setup>
 defineOptions({ name: 'personal-message-index'})
-import InvitePage from '@/views/recruit/enterprise/interviewManagement/interviewSchedule/components/invite'
+import InvitePage from '@/views/recruit/enterprise/interviewManagement/components/invite'
 import { timesTampChange } from '@/utils/date'
 import { ref, inject, watch,onMounted, nextTick } from 'vue'
 import Chatting from './components/chatting.vue'

+ 1 - 1
src/views/recruit/enterprise/interviewManagement/communicate/index.vue → src/views/recruit/enterprise/chatTools/index.vue

@@ -3,7 +3,7 @@
 </template>
 
 <script setup>
-defineOptions({ name: 'enterprise-communication'})
+defineOptions({ name: 'enterprise-chat-tools'})
 import Message from '@/views/recruit/components/message'
 import { provide } from 'vue'
 provide('isEnterprise', true)

+ 0 - 0
src/views/recruit/enterprise/interviewManagement/interviewSchedule/components/invite.vue → src/views/recruit/enterprise/interviewManagement/components/invite.vue


+ 0 - 0
src/views/recruit/enterprise/interviewManagement/interviewSchedule/components/item.vue → src/views/recruit/enterprise/interviewManagement/components/item.vue


+ 0 - 0
src/views/recruit/enterprise/interviewManagement/interviewSchedule/index.vue → src/views/recruit/enterprise/interviewManagement/index.vue


+ 1 - 1
src/views/recruit/enterprise/resumeManagement/elite/components/table.vue

@@ -169,7 +169,7 @@ const handleToCommunicate = async (item) => {
   const userId = item.userId
   // const textObj = { text: defaultTextEnt }
   await talkToUser({userId, text: defaultTextEnt})
-  let url = `/recruit/enterprise/interviewManagement/communicate?id=${userId}`
+  let url = `/recruit/enterprise/chatTools?id=${userId}`
 
   router.push(url)
 }

+ 0 - 53
src/views/recruit/enterprise/statistics/components/daily.vue

@@ -1,53 +0,0 @@
-<template>
-  <v-data-table
-    :items="items"
-    :headers="headers"
-  > 
-    <template #bottom>
-      <CtPagination
-        :total="total"
-        :page="query.pageNo"
-        :limit="query.pageSize"
-        @handleChange="handleChangePage"
-      ></CtPagination>
-    </template>
-  </v-data-table>
-</template>
-
-<script setup>
-defineOptions({ name: 'daily-page'})
-import { ref } from 'vue'
-
-const total = ref(8)
-const query = ref({
-  pageSize: 10,
-  pageNo: 1
-})
-const headers = [
-  { title: '日期', key: 'date', sortable: false },
-  { title: '有效职位', key: 'effectivePositions', sortable: false },
-  { title: '刷新次数', key: 'refreshTimes', sortable: false },
-  { title: '职位浏览', key: 'jobBrowse', sortable: false },
-  { title: '简历投递', key: 'resumeDelivery', sortable: false},
-  { title: '简历处理', key: 'resumeDeal', sortable: false },
-  { title: '邀请面试', key: 'invite', sortable: false }
-]
-const items = ref([
-  { date: '2024-07-01', effectivePositions: 0, refreshTimes: 0, jobBrowse: 0, resumeDelivery: 0, resumeDeal: 0, invite: 0 },
-  { date: '2024-07-02', effectivePositions: 0, refreshTimes: 0, jobBrowse: 0, resumeDelivery: 0, resumeDeal: 0, invite: 0 },
-  { date: '2024-07-03', effectivePositions: 0, refreshTimes: 0, jobBrowse: 0, resumeDelivery: 0, resumeDeal: 0, invite: 0 },
-  { date: '2024-07-04', effectivePositions: 0, refreshTimes: 0, jobBrowse: 0, resumeDelivery: 0, resumeDeal: 0, invite: 0 },
-  { date: '2024-07-05', effectivePositions: 0, refreshTimes: 0, jobBrowse: 0, resumeDelivery: 0, resumeDeal: 0, invite: 0 },
-  { date: '2024-07-06', effectivePositions: 0, refreshTimes: 0, jobBrowse: 0, resumeDelivery: 0, resumeDeal: 0, invite: 0 },
-  { date: '2024-07-07', effectivePositions: 0, refreshTimes: 0, jobBrowse: 0, resumeDelivery: 0, resumeDeal: 0, invite: 0 },
-  { date: '2024-07-08', effectivePositions: 0, refreshTimes: 0, jobBrowse: 0, resumeDelivery: 0, resumeDeal: 0, invite: 0 }
-])
-
-const handleChangePage = (e) => {
-  query.value.pageNo = e
-}
-</script>
-
-<style scoped lang="scss">
-
-</style>

+ 28 - 127
src/views/recruit/enterprise/statistics/components/overview.vue

@@ -10,155 +10,56 @@
             </template>
           </v-tooltip>
         </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">
           环比
           <span class="color-error">{{ typeof val.ratio === 'number' ? val.ratio : overviewData[val.ratio] }}% ↑</span>
         </div>
       </div>
     </div>
-    <div id="myChart" style="width: 100%; height: 500px;background-color: #f7f8fa;border-radius: 8px;" class="pa-3"></div>
   </div>
 </template>
 
 <script setup>
 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({
   position: 0,
   resume: 0,
   viewResume: 0,
-  dealResume: 0,
-  interview: 0
+  interview: 0,
+  interviewFinish: 0
 })
 // 数据概况
 const overview = ref([
   { 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: '面试人数的总数' }
+  { 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>
 
 <style scoped lang="scss">
@@ -168,10 +69,10 @@ watch(
   flex-wrap: wrap; // 换行
 }
 .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;
   height: 175px;
   border-radius: 12px;

+ 0 - 7
src/views/recruit/enterprise/statistics/overallAnalysis.vue

@@ -26,12 +26,6 @@
       </v-tabs>
       <ResumeAnalysis :query="query"></ResumeAnalysis>
     </div>
-    <div>
-      <v-tabs v-model="tab" align-tabs="start" color="primary" bg-color="#f7f8fa">
-        <v-tab :value="1">每日统计</v-tab>
-      </v-tabs>
-      <DailyPage class="mt-5"></DailyPage>
-    </div>
   </v-card>
 </template>
 
@@ -39,7 +33,6 @@
 defineOptions({ name: 'overallAnalysis'})
 import { reactive, ref } from 'vue'
 import Overview from './components/overview.vue'
-import DailyPage from './components/daily.vue'
 import ResumeAnalysis from './components/resume.vue'
 import { convertTimestampsToDayRange } from '@/utils/date'
 

+ 2 - 2
src/views/recruit/personal/position/components/details.vue

@@ -129,8 +129,8 @@
     <PreviewImg v-if="showPreview" :list="[previewSrc]" @close="showPreview = false" :isImage="true"></PreviewImg>
 
     <Loading :visible="loading"></Loading>
-    <div style="position: absolute; left: -9999px; bottom: 0">
-      <PosterPage :jobId="id" ref="share"></PosterPage>
+    <div v-if="Object.keys(info).length && Object.keys(positionInfo).length" style="position: absolute; left: -9999px; bottom: 0">
+      <PosterPage :info="info" :positionInfo="positionInfo" ref="share"></PosterPage>
     </div>
 
     <!-- 快速登录 -->

+ 3 - 13
src/views/recruit/personal/position/components/poster.vue

@@ -69,13 +69,11 @@
 <script setup>
 import { commissionCalculation } from '@/utils/position'
 defineOptions({name: 'recruit-personal-shareJob-index'})
-import { ref } from 'vue';
-import { getPositionDetails } from '@/api/position'
-import { dealDictObjData } from '@/utils/position'
 
 // 职位详情
-const props = defineProps({
-  jobId: String,
+defineProps({
+  info: Object,
+  positionInfo: Object
 })
 
 import { useRouter } from 'vue-router'; const router = useRouter()
@@ -84,14 +82,6 @@ const shareUrlTxt = import.meta.env.VITE_ACCESS_BASE_URL + '/shareJob?' + new UR
     jobId: router.currentRoute.value.params?.id,
     sharedById: userInfo?.id,
   }).toString()
-const info = ref({})
-const positionInfo = ref({})
-const getPositionDetail = async () => {
-  const data = await getPositionDetails({ id: props.jobId })
-  info.value = data
-  positionInfo.value = { ...dealDictObjData({}, info.value), ...info.value }
-}
-if (props.jobId) getPositionDetail()
 
 const desc = [
   { mdi: 'mdi-map-marker-outline', value: 'areaName' },