소스 검색

页面内容无数据不展示(左侧、弹窗广告)

Xiao_123 5 달 전
부모
커밋
ff0c5ad365

+ 1 - 10
src/views/recruit/personal/PersonalCenter/resume/attachment/index.vue

@@ -49,7 +49,7 @@ import { ref } from 'vue'
 import Snackbar from '@/plugins/snackbar'
 import Confirm from '@/plugins/confirm'
 import { useI18n } from '@/hooks/web/useI18n'
-import { getPersonResumeCv, deletePersonResumeCv, savePersonResumeCv, resumeParser } from '@/api/recruit/personal/resume'
+import { getPersonResumeCv, deletePersonResumeCv, savePersonResumeCv } from '@/api/recruit/personal/resume'
 import { getBlob, saveAs } from '@/utils'
 import { previewFile } from '@/utils'
 
@@ -140,15 +140,6 @@ const handleDownload = (k) => {
     saveAs(blob, k.title)
   })
 }
-
-// const fileUrl = 'https://minio.menduner.com/test/person/1/attachment/7cde29dc69c1403649be55d4c2bfd3d8304c088dc79ab25afe9c4bf55d3b382f.docx'
-// const fileUrl = 'https://minio.menduner.com/dev/person/270960672278450176/attachment/ade0423206dfeabb6955ad9a885c0ad206e41e89bc375cc78d21eb2eb13d0e59.pdf'
-// const fileUrl = 'https://minio.menduner.com/dev/person/795358459037093888/attachment/2d48cb1b3e07df73765c41eba3852e7b147d9beb67722ff233c46fc933096cfd.pdf'
-// const handleResumeParser = async () => {
-//   const data = await resumeParser({ fileUrl })
-//   console.log(data, '简历解析')
-// }
-// handleResumeParser()
 </script>
 
 <style scoped lang="scss">

+ 43 - 2
src/views/recruit/personal/PersonalCenter/resume/online/index.vue

@@ -1,7 +1,10 @@
 <template>
   <div>
     <div class="tabHeader">
-      <ProgressBar :num="completeNum" :total="items?.length"></ProgressBar>
+      <div class="d-flex align-center justify-space-between">
+        <ProgressBar :num="completeNum" :total="items?.length" style="width: 100%;"></ProgressBar>
+        <!-- <v-btn variant="text" color="primary" @click="handleImportAttachment">导入已有简历</v-btn> -->
+      </div>
       <v-tabs v-model="tab" align-tabs="start" color="primary" bg-color="#f7f8fa">
         <v-tab v-for="k in items" :key="k.path" :value="k.value" @click="handleClick(k)">
           {{ k.text }}
@@ -23,6 +26,9 @@
       />
     </div>
   </div>
+
+  <selectResumeDialog v-model="showAttachment" title="请选择已有的简历导入" :list="attachmentList" @submit="handleAttachmentSubmit" @close="showAttachment = false" />
+  <resumeAnalysis v-model="showAnalysis" :url="selectAttachment" @submit="handleResumeAnalysisSubmit" @close="showAnalysis = false" />
 </template>
 
 <script setup>
@@ -37,8 +43,13 @@ import educationExp from './components/educationExp.vue'
 import workExperience from './components/workExperience.vue'
 // import projectExperience from './components/projectExperience.vue'
 import vocationalSkills from './components/vocationalSkills.vue'
-import { resumePersonFillAll } from '@/api/recruit/personal/resume'
+import { resumePersonFillAll, getPersonResumeCv } from '@/api/recruit/personal/resume'
+import Snackbar from '@/plugins/snackbar'
+import { useRouter } from 'vue-router'
+import selectResumeDialog from '@/views/recruit/personal/position/components/jobDetails/selectResumeDialog.vue'
+import resumeAnalysis from './resumeAnalysis.vue'
 
+const router = useRouter()
 const { t } = useI18n()
 const scrollBox = ref()
 const tab = ref(0)
@@ -94,6 +105,36 @@ const complete = (val) => {
     resumePersonFillAll()
   }
 }
+
+// 获取附件
+const attachmentList = ref([])
+const getAttachmentList = async () => {
+  const data = await getPersonResumeCv()
+  attachmentList.value = data
+}
+// getAttachmentList()
+
+// 导入附件简历
+const showAttachment = ref(false)
+const handleImportAttachment = () => {
+  if (!attachmentList.value.length) {
+    Snackbar.warning('请先上传附件简历')
+    router.push('/recruit/personal/personalCenter/resume/attachment')
+    return
+  }
+  showAttachment.value = true
+}
+
+const selectAttachment = ref('')
+const showAnalysis = ref(false)
+const handleAttachmentSubmit = (val) => {
+  if (!val) return
+  selectAttachment.value = attachmentList.value.find(e => e.id === val).url
+  showAttachment.value = false
+  showAnalysis.value = true
+}
+
+const handleResumeAnalysisSubmit = () => {}
 </script>
 
 <style scoped lang="scss">

+ 47 - 0
src/views/recruit/personal/PersonalCenter/resume/online/resumeAnalysis.vue

@@ -0,0 +1,47 @@
+<!-- 选择简历 -->
+<template>
+  <CtDialog
+    :visible="show"
+    :widthType="2"
+    titleClass="text-h6"
+    title="附件简历解析内容"
+    @close="emit('close')"
+    @submit="emit('submit')"
+  >
+  111
+  </CtDialog>
+</template>
+
+<script setup>
+defineOptions({name: 'position-details-selectResumeDialog'})
+import { watch, computed } from 'vue'
+import { resumeParser } from '@/api/recruit/personal/resume'
+
+const props = defineProps({
+  modelValue: [Boolean, Number],
+  url: {
+    type: String,
+    default: ''
+  }
+})
+const emit = defineEmits(['update:modelValue', 'submit', 'close'])
+const show = computed(() => {
+  return props.modelValue
+})
+
+const fileUrl = 'https://minio.menduner.com/test/person/1/attachment/7cde29dc69c1403649be55d4c2bfd3d8304c088dc79ab25afe9c4bf55d3b382f.docx'
+// const fileUrl = 'https://minio.menduner.com/dev/person/270960672278450176/attachment/ade0423206dfeabb6955ad9a885c0ad206e41e89bc375cc78d21eb2eb13d0e59.pdf'
+// const fileUrl = 'https://minio.menduner.com/dev/person/795358459037093888/attachment/2d48cb1b3e07df73765c41eba3852e7b147d9beb67722ff233c46fc933096cfd.pdf'
+const handleResumeParser = async () => {
+  const data = await resumeParser({ fileUrl })
+  console.log(data, '简历解析', props.url)
+}
+
+watch(() => show.value, (newVal) => {
+  emit('update:modelValue', newVal)
+  if (newVal) handleResumeParser()
+})
+</script>
+
+<style lang="scss" scoped>
+</style>

+ 11 - 10
src/views/recruit/personal/home/index.vue

@@ -6,7 +6,7 @@
       <headSearch @handleSearch="handleSearch"></headSearch>
     </div>
     <hotJobs></hotJobs>
-    <div class="advertiseBox">
+    <div v-if="leftAdvertise.length" class="advertiseBox">
       <div v-for="val in leftAdvertise" :key="val.mark" class="advertise" :style="{'width': val.show ? '180px' : '20px'}">
         <div v-if="val.show">
           <div class="advertise-title d-inline-block">
@@ -18,7 +18,7 @@
         <div v-else class="advertise-box cursor-pointer" @mouseenter="val.show = true"></div>
       </div>
     </div>
-    <div class="default-width content-box mb-5">
+    <div class="default-width mb-5" :style="{'margin-top': leftAdvertise.length * (-372) + 'px'}">
       <homeJobTypeCard></homeJobTypeCard>
       <advertisementPage class="my-3"></advertisementPage>
       <hotPromotedPositions></hotPromotedPositions>
@@ -63,15 +63,14 @@ const leftAdvertise = ref([])
 const dialogAdvertise = ref({})
 const getSystemWebContent = async () => {
   const data = await getWebContent()
+  // 弹窗广告
+  dialogAdvertise.value = data.pcAdvertisement ? data.pcAdvertisement[0] : {}
   // 左侧广告
   if (data.pcLeft) leftAdvertise.value = data.pcLeft.map(e => {
     e.show = true
     return e
   })
-  // 弹窗广告
-  dialogAdvertise.value = data.pcAdvertisement ? data.pcAdvertisement[0] : {}
 }
-getSystemWebContent()
 
 // 弹窗广告跳转
 const adClick = () => {
@@ -118,11 +117,13 @@ const adImgWidth = ref(document?.documentElement?.clientWidth ?
 )
 
 const adDialog = ref(false)
-onMounted(() => {
+onMounted(async () => {
+  await getSystemWebContent()
   const lastTime = localStorage.getItem('adDialogTime')
   localStorage.setItem('adDialogTime', Date.now())
   if (!lastTime || (Date.now() - Number(lastTime) > 300000)) {
-    adDialog.value = true
+    // 无数据不弹窗
+    adDialog.value = dialogAdvertise.value && Object.keys(dialogAdvertise.value).length ? true : false
   }
 })
 </script>
@@ -178,9 +179,9 @@ onMounted(() => {
     object-fit: cover;
   }
 }
-.content-box {
-  margin-top: -372px - 372px;
-}
+// .content-box {
+//   margin-top: -372px - 372px;
+// }
 .banner {
   width: 100%;
   height: 110px;

+ 6 - 2
src/views/recruit/personal/position/components/jobDetails/selectResumeDialog.vue

@@ -4,7 +4,7 @@
     :visible="show"
     :widthType="2"
     titleClass="text-h6"
-    :title="$t('resume.selectResumeToSubmit')"
+    :title="title"
     @close="emit('close')"
     @submit="emit('submit', selectResume)"
   >
@@ -36,7 +36,11 @@ const props = defineProps({
     type: Array,
     default: () => []
   },
-  modelValue: [Boolean, Number]
+  modelValue: [Boolean, Number],
+  title: {
+    type: String,
+    default: '请选择要投递的简历'
+  }
 })
 const emit = defineEmits(['update:modelValue', 'handleToUpload', 'submit', 'close', 'handleLocalFileClick'])
 const show = computed(() => {