lifanagju_citu 10 månader sedan
förälder
incheckning
cc6ee72cb8

+ 63 - 19
src/views/recruit/personal/PersonalCenter/components/interviewSchedule.vue

@@ -3,47 +3,71 @@
   <div style="height: 100%; overflow: hidden;background-color: var(--default-bgc);">
     <div class="white-bgc px-3 py-5" style="font-size: 16px; display: flex; justify-content: space-between; border-bottom: 1px solid #e3e3e3;">
       <div>面试日程</div>
-      <div class="defaultLink" @click="null">查看全部</div>
+      <div class="defaultLink" @click="handleMore">查看全部</div>
     </div>
     <!-- 滚动区域 -->
      <div class="" style="height: calc(100% - 86px); overflow-y: auto;">
-      <div v-for="item in dataList" :key="'schedule' + item">
-        <div class="color-666 px-8 py-3" style="">{{ timesTampChange(item?.time, 'M月D日') || '--' }}</div>
+      <div v-for="val in props.dataList" :key="'schedule' + val">
+        <div class="color-666 px-8 py-3" style="">{{ timesTampChange(val?.time, 'M月D日') || '--' }}</div>
         <div class="white-bgc pa-6">
-          <div class="d-flex justify-space-between">
-            <div>{{ item?.enterprise?.anotherName || '--' }}</div>
-            <div>{{ getText(item?.status+'', statusList) || '--' }}</div>
+          <div class="mb-3 d-flex justify-space-between">
+            <div style="font-weight: bold;">{{ val?.enterprise?.anotherName || '--' }}</div>
+            <div
+              class="fz-15"
+              :style="{ 'color': val?.status.toString() === '0' ?
+                'var(--v-primary-base)': val?.status.toString() === '1' ?
+                'var(--v-primary-base)': val?.status.toString() === '2' ?
+                'var(--v-primary-base)': val?.status.toString() === '3' ?
+                'var(--v-primary-base)': val?.status.toString() === '4' ?
+                'var(--v-primary-base)': val?.status.toString() === '5' ?
+                'var(--v-error-base)': val?.status.toString() === '98' ?
+                'var(--v-error-base)': val?.status.toString() === '99' ? 'var(--v-error-base)' : ''
+              }"
+            >
+              {{ getText(val?.status+'', statusList) || '--' }}
+            </div>
           </div>
-          <div>
+          <div class="fz-14 mb-2">
             <span>时间:</span>
-            <span>{{ timesTampChange(item?.time, 'h:m') || '--' }}</span>
+            <span class="c-base">{{ timesTampChange(val?.time, 'h:m') || '--' }}</span>
           </div>
-          <div>
+          <div class="fz-14 mb-2">
             <span>职位:</span>
-            <span>{{ getText(item?.status+'', statusList) || '--' }}</span>
+            <span class="c-base">{{ val?.job?.name || '--' }}</span>
+          </div>
+          <div class="fz-14 mb-2">
+            <span>薪资:</span>
+            <span class="c-base">{{ val?.job?.payFrom || '--' }}-{{ val?.job?.payTo || '--' }}/{{ val?.job?.payName || '--' }}</span>
+          </div>
+          <div class="img-box">
+            <v-avatar size="small" :image="val.contact.avatar || 'https://minio.citupro.com/dev/menduner/7.png'"></v-avatar>
+            <span class="name">
+              <span class="mx-3">{{ val.contact.name }}</span>
+              <span class="septal-line"></span>
+              <span class="gray">{{ val.contact.postNameCn }}</span>
+            </span>
           </div>
         </div>
       </div>
-      <div class="text-center color-666 my-8" style="cursor: pointer;">{{ $t('common.more') }}</div>
+      <div class="text-center color-666 my-8" style="cursor: pointer;" @click="handleMore">{{ $t('common.more') }}</div>
      </div>
   </div>
 </template>
 
 <script setup>
-import { getUserInterviewInvitePage } from '@/api/recruit/personal/personalCenter'
 import { getDict } from '@/hooks/web/useDictionaries'
 import { getText } from '@/utils/getText'
 import { timesTampChange } from '@/utils/date'
 import { ref } from 'vue'
 defineOptions({name: 'PersonalCenter-interviewSchedule'})
+const emit = defineEmits(['handleMore'])
+const props = defineProps({
+  dataList: {
+    type: Array,
+    default: () => []
+  }
+})
 
-const dataList = ref([])
-const getSkillListFunc = async () => {
-  const res = await getUserInterviewInvitePage()
-  dataList.value = res?.list || []
-  console.log('1', dataList.value[0])
-}
-getSkillListFunc()
 
 // 状态字典
 const statusList = ref()
@@ -53,8 +77,28 @@ const getStatusList = async () => {
 }
 getStatusList()
 
+const handleMore = () => {
+  emit('handleMore')
+}
+
 </script>
 <style lang="scss" scoped>
+.fz-13 { font-size: 13px; }
+.fz-14 { font-size: 14px; }
+.fz-15 { font-size: 15px; }
+.c-base { color: var(--v-primary-base); }
+.img-box {
+  height: 48px;
+  padding: 12px 0;
+  .name {
+    color: var(--color-222);
+    font-weight: 400;
+    font-size: 13px;
+    .gray {
+      color: var(--color-666);
+    }
+  }
+}
 ::-webkit-scrollbar {
   width: 4px;
   height: 10px;

+ 6 - 1
src/views/recruit/personal/PersonalCenter/dynamic/left.vue

@@ -83,7 +83,12 @@ const list = [
   { title: t('position.interested'), path: interested },
   { title: t('position.haveSeenMe'), path: seenMe }
 ]
-const tab = ref(2)
+
+import { useRoute } from 'vue-router'; const route = useRoute()
+let leftTabs = route?.query?.leftTabs ? route?.query?.leftTabs - 0 : null
+const tab = ref(leftTabs || 1)
+// nextTick(() => { leftTabs = null })
+
 const selectVal = ref('0')
 const items = ref([])
 const userStore = useUserStore()

+ 27 - 5
src/views/recruit/personal/PersonalCenter/dynamic/right.vue

@@ -58,9 +58,9 @@
       style="height: 100vh; overflow: hidden;"
       temporary
       location="right"
-      width="700"
+      width="300"
     >
-      <interviewSchedule></interviewSchedule>
+      <interviewSchedule :dataList="invitePageList" @handleMore="interviewScheduleMore()"></interviewSchedule>
     </v-navigation-drawer>
   </div>
 </template>
@@ -71,12 +71,15 @@ import { ref } from 'vue'
 import { uploadFile } from '@/api/common'
 import { previewFile } from '@/utils'
 import { useRouter } from 'vue-router'
+import { useRoute } from 'vue-router'; const route = useRoute()
 import { getPersonResumeCv, savePersonResumeCv, deletePersonResumeCv } from '@/api/recruit/personal/resume'
 import { useI18n } from '@/hooks/web/useI18n'
 import { useUserStore } from '@/store/user'
 import Snackbar from '@/plugins/snackbar'
 import Confirm from '@/plugins/confirm'
 import interviewSchedule from './../components/interviewSchedule.vue'
+import { getUserInterviewInvitePage } from '@/api/recruit/personal/personalCenter'
+import { dealDictObjData } from '@/utils/position'
 
 const { t } = useI18n()
 const router = useRouter()
@@ -91,11 +94,11 @@ userStore.$subscribe((mutation, state) => {
   userAccount.value = state.userAccount || {}
 })
 
-const resumeList = [
+const resumeList = ref([
   // { icon: 'mdi-upload', title: t('resume.topResume'), desc: t('resume.increaseMoreExposure') },
   { name: 'refresh', icon: 'mdi-refresh', title: t('resume.refreshResume'), desc: t('resume.enhanceResumeActivity') },
-  { name: 'interview', icon: 'mdi-account-multiple-check-outline', title: t('resume.interviewSchedule'), desc: '有2个待面试' },
-]
+  { name: 'interview', icon: 'mdi-account-multiple-check-outline', title: t('resume.interviewSchedule'), desc: '' },
+])
 const showInterviewSchedule = ref(false)
 const resumeClick = (val) => {
   if (val.name === 'interview') {
@@ -179,6 +182,25 @@ const handleDownload = (k) => {
     saveAs(blob, k.title)
   })
 }
+
+// 面试日程
+const invitePageList = ref([])
+const getUserInterviewInvitePageList = async () => {
+  const res = await getUserInterviewInvitePage()
+  invitePageList.value = res?.list.map(e => {
+    e.job = { ...e.job, ...dealDictObjData({}, e.job) }
+    e.enterprise = { ...e.enterprise, ...dealDictObjData({}, e.enterprise)}
+    return e
+  }) || []
+  const interview = resumeList.value.find(f => f.name === 'interview')
+  if (interview) interview.desc = '有' + (res?.total || '0') + '个待面试'
+}
+getUserInterviewInvitePageList()
+const interviewScheduleMore = () => {
+  showInterviewSchedule.value = false
+  const path = route.path
+  router.push({ path, query: { leftTabs: 2 } })
+}
 </script>
 
 <style scoped lang="scss">