Răsfoiți Sursa

Merge remote-tracking branch 'remotes/origin/wanghao'

7 luni în urmă
părinte
comite
f5b9985191

+ 221 - 20
pages/recruitmentData/communicationRecords.vue

@@ -71,18 +71,20 @@
                      </view>
                      <!-- 经验和薪资 -->
                      <view class="talent-experience">
-                       <text class="experience-text">{{ record.resumesWorkExperience }}</text>
-                       <text class="education-salary">{{ record.resumesEducation }} {{ record.minSalary }}-{{record.maxSalary}}</text>
+                       <text class="experience-text">{{ record.resumesWorkExperience }}</text>
+                       <text class="education-salary">{{ record.degree }} {{ record.minSalary }}-{{record.maxSalary}}</text>
                        <text class="status-text">{{ record.resumesStatus==1?'在职&考虑机会':"离职" }}</text>
                      </view>
                    </view>
                  </view>
                  
                  <!-- 当前职位 -->
-                 <view class="current-job" v-if="record.currentJob">
+                 <view class="current-job" v-if="record.companyName">
                    <image src="../../static/images/aixin.svg" class="job-icon" mode="aspectFit"></image>
-                   <text class="job-text">{{ record.currentJob }}</text>
-                   <text class="work-period">{{ record.workPeriod }}</text>
+                   <text class="job-text">{{ record.companyName }}</text>
+                   <text class="work-period">
+                    <span v-if="getYearMonthInterval(record.lastWorkStartTime, record.lastWorkEndTime)[0] > 0">{{ getYearMonthInterval(record.lastWorkStartTime, record.lastWorkEndTime)[0] }}年</span>
+                    {{ getYearMonthInterval(record.lastWorkStartTime, record.lastWorkEndTime)[1] }}个月</text>
                  </view>
                  
                  <!-- 求职期望 -->
@@ -95,7 +97,7 @@
                  <view class="skill-tags">
                    <view 
                      class="skill-tag" 
-                     v-for="(skill, skillIndex) in record.skills" 
+                     v-for="(skill, skillIndex) in record.skillName.split(',')" 
                      :key="skillIndex"
                    >
                      {{ skill }}
@@ -145,20 +147,20 @@
            <view v-if="interviewRecords.length > 0">
              <view 
                class="interview-record" 
-               :class="{ 'today': record.isToday, 'tomorrow': record.isTomorrow }"
+               :class="{ 'today': formatDate(record.interviewDateTime,'YYYY-MM-DD') === formatDate(selectDate,'YYYY-MM-DD') }"
                v-for="(record, index) in interviewRecords" 
                :key="index"
                @click="goToInterviewDetail(record)"
              >
                <view class="record-content">
                  <view class="record-left">
-                   <text class="date-label">{{ record.dateLabel }}</text>
-                   <text class="time-label">{{ record.time }}</text>
+                   <text class="date-label">{{ checkDate(record.interviewDateTime) === 1 ? '今天' : checkDate(record.interviewDateTime) === 2 ? '明天' : record.interviewDateTime.substring(5, 10) }}</text>
+                   <text class="time-label">{{ record.detailTime? record.detailTime : record.interviewDateTime.substring(11, 16) }}</text>
                  </view>
                  <view class="record-divider"></view>
                  <view class="record-right">
-                   <text class="candidate-name">{{ record.candidateName }}</text>
-                   <text class="candidate-details">{{ record.experience }} {{ record.education }} {{ record.salary }}</text>
+                   <text class="candidate-name">{{ record.resumesListDto[0].userName }}</text>
+                   <text class="candidate-details">{{ record.resumesListDto[0].resumesWorkExperience }}年 {{ record.resumesListDto[0].degree }} {{ record.resumesListDto[0].minSalary }}-{{ record.resumesListDto[0].maxSalary }}</text>
                  </view>
                </view>
              </view>
@@ -178,6 +180,72 @@
          <!-- 有数据时显示列表 -->
          <view v-if="favoriteRecords.length > 0">
            <!-- 收藏记录列表内容 -->
+           <view class="qyList flex justify-center">
+        <view class="qyList-box">
+          <view
+            class="qyList-box-item flex justify-center"
+            v-for="(item, index) in favoriteRecords"
+            :key="index"
+            @click="goNav(`/pages/talentSearch/resumeDetail?resumesId=${item.resumesId}&postPushId=${item.postPushId}`)"
+          >
+            <view class="qyList-box-item-box">
+              <view class="qyList-box-item-info flex justify-between align-center">
+                <view class="qyList-box-item-info-l">
+                  <view
+                    class=""
+                    style="color: #212121; font-size: 38rpx; font-weight: 800"
+                  >
+                    {{ item.resumesListDto[0].userName }}
+                  </view>
+                  <view
+                    class="flex align-center flex-wrap"
+                    style="color: #999999; font-size: 26rpx; margin-top: 10rpx"
+                  >
+                    <text>{{ item.resumesListDto[0].userAge }}岁</text>
+                    <text style="margin-left: 20rpx; margin-right: 20rpx">|</text>
+                    <text>{{ item.resumesListDto[0].resumesWorkExperience }}年</text>
+                    <text style="margin-left: 20rpx; margin-right: 20rpx">|</text>
+                    <text>{{ item.resumesListDto[0].school }}</text>
+                    <text style="margin-left: 20rpx; margin-right: 20rpx">|</text>
+                    <text>期望 {{ item.resumesListDto[0].minSalary }}-{{ item.resumesListDto[0].maxSalary }}</text>
+                  </view>
+                </view>
+                <view class="qyList-box-item-info-r">
+                  <image
+                    :src="item.resumesListDto[0].userAvatar ? item.resumesListDto[0].userAvatar : '../../static/logo.png'"
+                    style="width: 95rpx; height: 95rpx; border-radius: 50%"
+                    mode=""
+                  ></image>
+                </view>
+              </view>
+              <view class="qyList-box-item-job flex align-center">
+                <u-icon
+                  name="heart-fill"
+                  color="#016BF6"
+                  size="30"
+                  style="margin-right: 16rpx"
+                >
+                </u-icon>
+                期望岗位:{{ item.resumesListDto[0].expectedPosition }}
+              </view>
+              <view
+                class="qyList-box-item-job flex align-center"
+              >
+                <image
+                  src="../../static/images/qi.png"
+                  style="width: 30rpx; height: 32rpx; margin-right: 16rpx"
+                  mode=""
+                ></image>
+                {{ item.resumesListDto[0].companyName }} /
+                {{ item.resumesListDto[0].lastWorkPosition }}
+              </view>
+              <view class="qyList-box-item-rem" v-if="item.resumesDetails">
+                优势:{{ item.resumesListDto[0].workContent }}
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
          </view>
          
          <!-- 空状态显示 -->
@@ -215,8 +283,8 @@ export default {
       tabs: [
         { name: '沟通过' },
         { name: '面试' },
-        { name: '收藏' },
-        { name: '收藏职位' }
+        { name: '收藏简历' },
+        // { name: '收藏职位' }
       ],
       communicationRecords: [
         {
@@ -297,13 +365,14 @@ export default {
      groupedRecords() {
        const groups = {}
        this.communicationRecords.forEach(record => {
-         if (!groups[record.date]) {
-           groups[record.date] = {
-             date: record.date,
+        const date = record.lastTime.substring(0, 10) 
+         if (!groups[date]) {
+           groups[date] = {
+             date: date,
              records: []
            }
          }
-         groups[record.date].records.push(record)
+         groups[date].records.push(record)
        })
        return Object.values(groups)
      },
@@ -349,8 +418,93 @@ export default {
     const systemInfo = uni.getSystemInfoSync()
     this.statusBarHeight = systemInfo.statusBarHeight || 0
 	  this.getData()
+    this.getInterviewRecords()
+    this.getFavoriteRecords()
   },
   methods: {
+    getFavoriteRecords(){
+      this.$Request.getT("/app/myCollection/getCompanyCollectionList").then(res=>{
+        console.log(res);
+        this.favoriteRecords = res.data.records //收藏记录
+      })
+    },
+    checkDate(targetDate) {
+      const today = new Date();
+      const tomorrow = new Date();
+      tomorrow.setDate(today.getDate() + 1);
+       
+      const inputDate = new Date(targetDate);
+       
+      // 重置时间为 00:00:00 进行比较
+      today.setHours(0, 0, 0, 0);
+      tomorrow.setHours(0, 0, 0, 0);
+      inputDate.setHours(0, 0, 0, 0);
+       
+      if (inputDate.getTime() === today.getTime()) {
+          return 1; // 今天
+      } else if (inputDate.getTime() === tomorrow.getTime()) {
+          return 2; // 明天
+      } else {
+          return 0; // 其他日期
+      }
+    },
+    formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') {
+      const d = new Date(date);
+      const padZero = (num) => String(num).padStart(2, '0');
+      const replacements = {
+          'YYYY': d.getFullYear(),
+          'MM': padZero(d.getMonth() + 1),
+          'DD': padZero(d.getDate()),
+          'HH': padZero(d.getHours()),
+          'mm': padZero(d.getMinutes()),
+          'ss': padZero(d.getSeconds()),
+          'SSS': padZero(d.getMilliseconds()).padStart(3, '0'),
+          'M': d.getMonth() + 1,
+          'D': d.getDate(),
+          'H': d.getHours(),
+          'm': d.getMinutes(),
+          's': d.getSeconds()
+      };
+      return format.replace(/YYYY|MM|DD|HH|mm|ss|SSS|M|D|H|m|s/g, match => replacements[match]);
+    },
+    getInterviewRecords(){
+      this.$Request.getT("/app/interviewRecord/getHrInterviewList").then(res=>{
+        console.log(res);
+        this.interviewRecords = res.data.records //沟通记录
+      })
+    },
+    getYearMonthInterval(startDate, endDate) {
+      // 确保传入的是 Date 对象
+      const start = new Date(startDate);
+      const end = new Date(endDate);
+
+      // 确保结束日期在开始日期之后
+      if (end < start) {
+        throw new Error('结束日期必须在开始日期之后');
+      }
+
+      // 计算年份差异
+      let yearDiff = end.getFullYear() - start.getFullYear();
+
+      // 计算月份差异
+      let monthDiff = end.getMonth() - start.getMonth();
+
+      // 如果结束日期的月份小于开始日期的月份,需要借年
+      if (monthDiff < 0) {
+        yearDiff--;
+        monthDiff += 12;
+      }
+
+      // 如果月份相同,但结束日期的日期小于开始日期的日期,也需要借月
+      if (monthDiff === 0 && end.getDate() < start.getDate()) {
+        yearDiff--;
+        monthDiff = 11;
+      } else if (end.getDate() < start.getDate()) {
+        monthDiff--;
+      }
+
+      return [yearDiff, monthDiff];
+    },
     goBack() {
       uni.navigateBack()
     },
@@ -370,9 +524,9 @@ export default {
      },
     goToInterviewDetail(record) {
       console.log('查看面试详情:', record)
-      // uni.navigateTo({
-      //   url: `/pages/interview/detail?id=${record.id}`
-      // })
+      uni.navigateTo({
+        url: `/my/jilu/bossMianshiDetail?recordId=${record.recordId}`
+      })
     },
     goToInterviewManage() {
       console.log('跳转到面试管理')
@@ -386,6 +540,11 @@ export default {
 			this.communicationRecords = res.records //沟通记录
 		})
 	},
+  goNav(url){
+    uni.navigateTo({
+      url: url
+    })
+  }
  }
 }
 </script>
@@ -865,4 +1024,46 @@ export default {
      text-align: center;
    }
  }
+ 
+.qyList {
+  width: 100%;
+  height: auto;
+  margin-top: 20rpx;
+
+  .qyList-box {
+    width: 686rpx;
+    height: 100%;
+
+    .qyList-box-item {
+      width: 100%;
+      // height: 400rpx;
+      padding-bottom: 40rpx;
+      background-color: #ffffff;
+      border-radius: 24rpx;
+      margin-bottom: 20rpx;
+
+      .qyList-box-item-box {
+        width: 626rpx;
+        height: 100%;
+      }
+
+      .qyList-box-item-info {
+        margin-top: 40rpx;
+      }
+
+      .qyList-box-item-job {
+        color: #121212;
+        font-size: 28rpx;
+        font-weight: 500;
+        margin-top: 20rpx;
+      }
+
+      .qyList-box-item-rem {
+        color: #999999;
+        font-size: 26rpx;
+        margin-top: 20rpx;
+      }
+    }
+  }
+}
  </style>

+ 2 - 4
pages/recruitmentData/index.vue

@@ -57,7 +57,7 @@
       </view>
 
       <!-- 今日权益使用量卡片 -->
-      <view class="benefits-card">
+      <!-- <view class="benefits-card">
         <view class="card-title">今日权益使用量</view>
         
         <view class="benefits-list">
@@ -66,7 +66,6 @@
             v-for="(benefit, index) in benefitsData" 
             :key="index"
           >
-            <!-- 图标、查看和急聘标签区域 -->
             <view class="benefit-header">
               <view class="benefit-icon-container">
                 <image :src="getBenefitIcon(benefit.action)" class="benefit-icon" mode="aspectFit"></image>
@@ -75,7 +74,6 @@
               </view>
             </view>
             
-            <!-- 招聘职位和进度条区域 -->
             <view class="benefit-content">
               <view class="benefit-type-container">
                 <text class="benefit-type">{{ benefit.type }}</text>
@@ -94,7 +92,7 @@
             </view>
           </view>
         </view>
-      </view>
+      </view> -->
     </view>
     </view>
   </view>

+ 35 - 19
pages/recruitmentData/interviewManage.vue

@@ -39,13 +39,18 @@
         <view v-if="pendingFeedback.length > 0" class="interview-list">
           <!-- 待反馈面试列表 -->
           <view class="interview-item" v-for="interview in pendingFeedback" :key="interview.id" @click="goToInterviewDetail(interview)">
-            <view class="interview-info">
-              <view class="candidate-name">{{ interview.candidateName }}</view>
-              <view class="interview-time">{{ interview.interviewTime }}</view>
-              <view class="position">{{ interview.position }}</view>
+            <view class="interview-avatar">
+              <image :src="interview.resumesListDto[0].userAvatar" class="avatar-image" mode="aspectFill"></image>
+            </view>
+            <view class="interview-content">
+              <view class="interview-title">与{{ interview.resumesListDto[0].userName }}的面试</view>
+              <view class="position-info">面试职位: {{ interview.postPush.ruleClassifyName }} | {{ interview.resumesListDto[0].minSalary }}-{{ interview.resumesListDto[0].maxSalary }}</view>
+              <view class="interview-time">面试时间: {{ interview.interviewDateTime }}</view>
             </view>
-            <view class="interview-status">
-              <text class="status-text pending">待反馈</text>
+            <view class="interview-result">
+              <text class="result-text failed" >
+                待反馈
+              </text>
             </view>
           </view>
         </view>
@@ -62,12 +67,12 @@
           <!-- 已反馈面试列表 -->
           <view class="interview-item" v-for="interview in feedbackReceived" :key="interview.id" @click="goToInterviewDetail(interview)">
             <view class="interview-avatar">
-              <image :src="interview.avatar" class="avatar-image" mode="aspectFill"></image>
+              <image :src="interview.resumesListDto[0].userAvatar" class="avatar-image" mode="aspectFill"></image>
             </view>
             <view class="interview-content">
-              <view class="interview-title">与{{ interview.candidateName }}的面试</view>
-              <view class="position-info">面试职位: {{ interview.position }} | {{ interview.salary }}</view>
-              <view class="interview-time">面试时间: {{ interview.interviewTime }}</view>
+              <view class="interview-title">与{{ interview.resumesListDto[0].userName }}的面试</view>
+              <view class="position-info">面试职位: {{ interview.postPush.ruleClassifyName }} | {{ interview.resumesListDto[0].minSalary }}-{{ interview.resumesListDto[0].maxSalary }}</view>
+              <view class="interview-time">面试时间: {{ interview.interviewDateTime }}</view>
             </view>
             <view class="interview-result">
               <text class="result-text" :class="interview.status === 'passed' ? 'passed' : 'failed'">
@@ -89,12 +94,12 @@
           <!-- 全部面试列表 -->
           <view class="interview-item" v-for="interview in allInterviews" :key="interview.id" @click="goToInterviewDetail(interview)">
             <view class="interview-avatar">
-              <image :src="interview.avatar" class="avatar-image" mode="aspectFill"></image>
+              <image :src="interview.resumesListDto[0].userAvatar" class="avatar-image" mode="aspectFill"></image>
             </view>
             <view class="interview-content">
-              <view class="interview-title">与{{ interview.candidateName }}的面试</view>
-              <view class="position-info">面试职位: {{ interview.position }} | {{ interview.salary }}</view>
-              <view class="interview-time">面试时间: {{ interview.interviewTime }}</view>
+              <view class="interview-title">与{{ interview.resumesListDto[0].userName }}的面试</view>
+              <view class="position-info">面试职位: {{ interview.postPush.ruleClassifyName }} | {{ interview.resumesListDto[0].minSalary }}-{{ interview.resumesListDto[0].maxSalary }}</view>
+              <view class="interview-time">面试时间: {{ interview.interviewDateTime }}</view>
             </view>
             <view class="interview-result">
               <text class="result-text" :class="interview.status === 'passed' ? 'passed' : 'failed'">
@@ -120,8 +125,8 @@ export default {
       statusBarHeight: 0,
       activeTab: 0,
       tabs: [
-        { name: '待反馈 (0)' },
-        { name: '已反馈 (2)' },
+        { name: '待反馈' },
+        { name: '已反馈' },
         { name: '全部面试' }
       ],
       // 待反馈面试数据
@@ -173,6 +178,7 @@ export default {
   onLoad() {
     const systemInfo = uni.getSystemInfoSync()
     this.statusBarHeight = systemInfo.statusBarHeight || 0
+    this.getInterviewRecords()
   },
   methods: {
     goBack() {
@@ -183,9 +189,19 @@ export default {
     },
     goToInterviewDetail(interview) {
       console.log('查看面试详情:', interview)
-      // uni.navigateTo({
-      //   url: `/pages/interview/detail?id=${interview.id}`
-      // })
+      uni.navigateTo({
+        url: `/my/jilu/bossMianshiDetail?recordId=${interview.recordId}`
+      })
+    },
+    getInterviewRecords(){
+      this.$Request.getT("/app/interviewRecord/getHrInterviewList").then(res=>{
+        console.log(res);
+        this.allInterviews = res.data.records //沟通记录
+        this.pendingFeedback = res.data.records.filter(item=>item.interviewProcesses === 3)
+        this.feedbackReceived = res.data.records.filter(item=>item.interviewProcesses === 4)
+        this.tabs[0].name = '待反馈 (' + this.pendingFeedback.length + ')'
+        this.tabs[1].name = '已反馈 (' + this.feedbackReceived.length + ')'
+      })
     }
   }
 }