瀏覽代碼

Merge branch 'master' of https://git.nanodreamtech.com/Boss/yizhizan-h5

wkw 7 月之前
父節點
當前提交
2de05bf963
共有 39 個文件被更改,包括 2733 次插入1051 次删除
  1. 3 2
      App.vue
  2. 63 1
      common/queue.js
  3. 1 1
      my/feedback/jubao.vue
  4. 191 36
      my/jilu/bossMianshiDetail.vue
  5. 17 14
      my/jilu/jilu.vue
  6. 2 2
      my/jilu/mianshiDetail.vue
  7. 1 1
      my/order/pay.vue
  8. 1 1
      my/renzheng/index.vue
  9. 2 1
      package/jobIntention/city.vue
  10. 1 1
      pages.json
  11. 96 76
      pages/index/index.vue
  12. 7 2
      pages/jobManagement/jobManagement.vue
  13. 17 6
      pages/msg/chathistory.vue
  14. 296 52
      pages/msg/im.vue
  15. 51 6
      pages/msg/interviewInvitation.vue
  16. 6 0
      pages/msg/selectInterview.vue
  17. 89 10
      pages/my/index.vue
  18. 4 2
      pages/my/jobApplicant/guidePage.vue
  19. 212 97
      pages/my/jobPosting.vue
  20. 63 5
      pages/my/jobPostingSecond.vue
  21. 96 6
      pages/my/switchRoles.vue
  22. 2 2
      pages/my/userinfo.vue
  23. 234 26
      pages/recruitmentData/communicationRecords.vue
  24. 94 19
      pages/recruitmentData/dataCenter.vue
  25. 40 0
      pages/recruitmentData/dateFormate.js
  26. 89 21
      pages/recruitmentData/index.vue
  27. 35 19
      pages/recruitmentData/interviewManage.vue
  28. 1015 637
      pages/talentSearch/index.vue
  29. 5 5
      pages/talentSearch/resumeDetail.vue
  30. 二進制
      static/images/my/icon/utils/benefits.png
  31. 二進制
      static/images/my/icon/utils/company.png
  32. 二進制
      static/images/my/icon/utils/invoice.png
  33. 二進制
      static/images/my/icon/utils/kefu.png
  34. 二進制
      static/images/my/icon/utils/privacy.png
  35. 二進制
      static/images/my/icon/utils/rulerCenter.png
  36. 二進制
      static/images/my/icon/utils/user.png
  37. 二進制
      static/images/my/icon/utils/wallet.png
  38. 二進制
      static/tabbar/niu.png
  39. 二進制
      static/tabbar/niu2.png

+ 3 - 2
App.vue

@@ -2,6 +2,7 @@
 export default {
   onLaunch: function () {
     let that = this;
+	that.$queue.changeTabbar(that.$queue.getData('userType')||1)
     // #ifdef APP
     // 检查是否首次启动 - 引导页逻辑
     let firstUpload = uni.getStorageSync("firstUpload") || false;
@@ -132,12 +133,12 @@ export default {
             let num = chatCount + messageCount;
             if (num == 0) {
               uni.removeTabBarBadge({
-                index: 1,
+                index: 2,
               });
               return;
             }
             uni.setTabBarBadge({
-              index: 1,
+              index: 2,
               text: num + "",
             });
           }

+ 63 - 1
common/queue.js

@@ -263,6 +263,33 @@ module.exports = {
 	
 	  return highestEducation;
 	},
+	
+	//职业状态
+	resumesStatus(){
+		
+		return [{
+				value: '0',
+				text: '离职-随时到岗',
+				recommended: true
+			},
+			{
+				value: '1',
+				text: '在职-月内到岗',
+				recommended: true
+			},
+			{
+				value: '2',
+				text: '在职-考虑机会',
+				recommended: false
+			},
+			{
+				value: '3',
+				text: '在职-暂不考虑',
+				recommended: false
+			}
+		]
+	},
+	
 	appConfirm:function(content='请确认您的操作?',callback,title='操作提示',button=["继续","取消"]){
 		// #ifndef APP-PLUS 
 		uni.showModal({
@@ -324,5 +351,40 @@ module.exports = {
 	  const hour24 = hour.toString().padStart(2, '0');
 	  
 	  return `${hour24}:${minute}`;
-	}
+	},
+	changeTabbar:function(res){
+		setTimeout(() => {
+			if(res==1){
+			uni.setTabBarItem({
+			  index: 0,
+			  text: '首页',
+			 iconPath: "/static/tabbar/Home.png",
+			 selectedIconPath: "/static/tabbar/Iconly_Bold_Home.png",
+			})
+			uni.setTabBarItem({
+			  index: 1,
+			  text: '急聘',
+			  "pagePath": "/pages/index/game/gameList",
+			  "iconPath": "/static/tabbar/jipin.png",
+			  "selectedIconPath": "/static/tabbar/ACjipin.png",
+			})
+			}else{
+				uni.setTabBarItem({
+				  index: 0,
+				  text: '牛人',
+				 iconPath: "/static/tabbar/niu.png",
+				 selectedIconPath: "/static/tabbar/niu2.png",
+				})
+				uni.setTabBarItem({
+				  index: 1,
+				  "pagePath": "/pages/talentSearch/index",
+				   	"iconPath": "/static/tabbar/Hrsearch.png",
+				   	"selectedIconPath": "/static/tabbar/ACsearch.png",
+				   	"text": "搜索"
+				})
+			}
+		    // 可以在这里添加 tabbar 更新后的后续操作
+		    console.log('tabbar 更新完成');
+		  },100);
+	},
 };

+ 1 - 1
my/feedback/jubao.vue

@@ -89,7 +89,7 @@
 							title: '上传中...'
 						});
 						uni.uploadFile({
-							url: 'https://zp.xianmaxiong.com/sqx_fast/alioss/upload',
+							url: 'https://h5.bosszan.com/sqx_fast/alioss/upload',
 							// url: config.APIHOST + '/alioss/upload',
 							filePath: res.tempFilePaths[0],
 							name: 'file',

+ 191 - 36
my/jilu/bossMianshiDetail.vue

@@ -3,15 +3,37 @@
     <view class="detail-bg"></view>
     <nav-bar title="面试详情"></nav-bar>
     <view class="detail-index">
-      <view class="detail-title">明天14:00面试</view>
+      <view class="detail-title"><block v-if="info.status==2">
+		  <block v-if="currentStep === 1&&info.restHour>3">
+	  {{info.statusText}} {{info.interviewDate}}
+	  </block>
+	  <block v-else-if="currentStep === 1&&info.restHour<=3&&info.restHour>0">
+		  {{info.restHour*60}}分钟后面试
+	  </block>
+	  <block v-else-if="currentStep === 1&&info.restHour==0">
+	  		  面试已开始,待签到
+	  </block>
+	  <block v-else-if="currentStep === 2">
+	  		  面试已签到
+	  </block>
+	  <block v-else-if="currentStep === 3">
+	  		  面试中
+	  </block>
+	  <block v-else-if="currentStep === 4">
+	  		  面试已完成
+	  </block>
+	  </block>
+	  <block v-else-if="info.status==3">
+		  面试已取消
+		</block></view>
       <view class="detail-item">
         <view class="user-title">
           <view class="user-img-name">
             <view class="user-img">
-              <image src="@/static/images/geren.png" mode="aspectFill" />
+              <image :src="info.userEntity&&info.userEntity.avatar||'@/static/images/geren.png'" mode="aspectFill" />
             </view>
-            <view class="user-name"
-              >孙先生
+            <view @click="goTo('/pages/talentSearch/resumeDetail?resumesId=255&postPushId='+info.postPush.postPushId)" class="user-name"
+              >{{info.userEntity&&info.userEntity.userName||'匿名'}}
               <u-icon
                 name="arrow-right"
                 color="#c6c5ca"
@@ -25,7 +47,7 @@
               <image src="@/static/images/my/fujianjianli.svg" mode="scaleToFill" />
               <text>附件简历</text>
             </view>
-            <view class="img-item-icon">
+            <view @click="callPhone(info.userEntity.phone)" class="img-item-icon">
               <image src="@/static/images/my/dianhua.svg" mode="scaleToFill" />
               <text>电话</text>
             </view>
@@ -37,30 +59,30 @@
         <view class="msg-box">
           <view class="msg-item">
             <view class="msg-label">时间</view>
-            <view class="msg-value">2025-09-19 20:00:00</view>
+            <view class="msg-value">{{info.interviewDateTime}}</view>
           </view>
           <view class="msg-item">
             <view class="msg-label">职位</view>
-            <view class="msg-value">资深产品经理 15-25K·16薪</view>
+            <view class="msg-value">{{info.postPush&&info.postPush.ruleClassifyName}} {{info.postPush&&info.postPush.salaryRange}} · {{info.postPush&&info.postPush.salaryTimes||12}}薪</view>
           </view>
           <view class="msg-item">
             <view class="msg-label">联系人</view>
-            <view class="msg-value">熊女士·18000000000</view>
+            <view class="msg-value">{{info.hrName}}  {{info.hrPhone}}</view>
           </view>
           <view class="msg-item">
             <view class="msg-label">备注</view>
-            <view class="msg-value">请携带一份最新的简历</view>
+            <view class="msg-value">{{info.remarks}}</view>
           </view>
           <view class="msg-item">
             <view class="msg-label">地址</view>
-            <view class="msg-value">光谷软件园F21602栋</view>
+            <view class="msg-value">{{info.address}} {{info.detailedAddress}}</view>
           </view>
         </view>
       </view>
       <view class="detail-item">
         <view class="txt-content">
           <view class="txt-desc">求职者不错?向他发起录用吧~</view>
-          <view class="txt-btn">录用邀约</view>
+          <view @click="showResult = true;resultType=0" class="txt-btn">录用邀约</view>
         </view>
       </view>
       <view class="detail-item">
@@ -68,49 +90,53 @@
           将面试结果发送给对方
         </view>
         <view class="txt-content">
-          <view class="txt-content-item">
+          <view class="txt-content-item" @click="showResult = true;resultType=0">
             <image src="@/static/images/my/mianshitongguo.svg" mode="scaleToFill" />
             <view class="txt-mianshi">通过</view>
           </view>
-          <view class="txt-content-item">
+          <view class="txt-content-item" @click="showResult = true;resultType=1">
             <image src="@/static/images/my/kaolvyixia.svg" mode="scaleToFill" />
             <view class="txt-mianshi">考虑一下</view>
           </view>
-          <view class="txt-content-item">
+          <view class="txt-content-item" @click="showResult = true;resultType=2">
             <image src="@/static/images/my/butongguo.svg" mode="scaleToFill" />
             <view class="txt-mianshi">不通过</view>
           </view>
         </view>
       </view>
-      <view class="detail-item" @click="showRecord = true">
+      <view v-if="info.interviewRecordType!=null" class="detail-item">
         <view class="user-title-second"> 面试记录 </view>
         <view class="tag-box">
-          <view class="mianshi-tag">待定</view>
+          <view v-for="item in info.interviewRecordType&&info.interviewRecordType.split(',')||[]" class="mianshi-tag">{{item}}</view>
         </view>
         <view class="mianshi-result-txt">
-          这是一条文案这是一条文案这是一条文案这是一条文案这是一条文案
-          这是一条文案这是一条文案这是一条文案这是一条文案这是一条文案
+          {{info.interviewRecordMsg}}
         </view>
       </view>
-      <view class="detail-item" @click="showResult = true">
+      <view v-if="info.interviewResultType!=null" class="detail-item">
         <view class="user-title-second">
           <text>面试结果</text>
           <view class="user-img-result">
             <image
-              src="@/static/images/my/mianshitongguo.svg"
+              :src="'@/static/images/my/'+info.interviewResultType==0?'mianshitongguo':(info.interviewResultType==1?'kaolvyixia':'butongguo')+'.svg'"
               mode="scaleToFill"
-            />面试通过
+            />{{info.interviewResultType==0?'面试通过':(info.interviewResultType==1?'考虑一下':'不通过')}}
           </view></view
         >
         <view class="mianshi-result-txt">
-          这是一条文案这是一条文案这是一条文案这是一条文案这是一条文案
-          这是一条文案这是一条文案这是一条文案这是一条文案这是一条文案
+          {{info.interviewResultMsg}}
         </view>
       </view>
     </view>
     <view class="btn-bottom">
+		<block v-if="info.restHour>3">
       <view class="btn-item" @click="cancelInterview = true">取消面试</view>
       <view class="btn-item" @click="onEdit">修改面试</view>
+	  </block>
+	  <block v-else>
+		 <view class="btn-item" @click="onEdit">重新邀约</view> 
+		 <view v-if="currentStep==4" class="btn-item" @click="showRecord=true">编辑面试记录</view> 
+	  </block>
     </view>
     <u-popup v-model="showRecord" mode="bottom" border-radius="40">
       <view class="mianshi-record">
@@ -131,7 +157,6 @@
               v-model="text"
               placeholder="请补充其他说明,不超过500个字"
               maxlength="500"
-              @input="onInput"
               class="textarea"
               style="width:100%;height:100%;"
             ></textarea>
@@ -140,23 +165,23 @@
             >
           </view>
         </view>
-        <view class="btn-mianshi">保存</view>
+        <view @click="updateRecord" class="btn-mianshi">保存</view>
       </view>
     </u-popup>
     <u-popup v-model="showResult" mode="bottom" border-radius="40">
       <view class="mianshi-record">
         <view class="mianshi-title"> 面试结果</view>
         <view class="mianshi-record-content">
-          <view class="txt-content" style="padding: 54rpx;box-sizing:border-box;">
-            <view class="txt-content-item">
+          <view class="txt-content" style="padding: 54rpx;box-sizing:border-box;justify-content: space-around;">
+            <view v-if="resultType==0" class="txt-content-item">
               <image src="@/static/images/my/mianshitongguo.svg" mode="scaleToFill" />
               <view class="txt-mianshi">通过</view>
             </view>
-            <view class="txt-content-item">
+            <view v-if="resultType==1" class="txt-content-item">
               <image src="@/static/images/my/kaolvyixia.svg" mode="scaleToFill" />
               <view class="txt-mianshi">考虑一下</view>
             </view>
-            <view class="txt-content-item">
+            <view v-if="resultType==2" class="txt-content-item">
               <image src="@/static/images/my/butongguo.svg" mode="scaleToFill" />
               <view class="txt-mianshi">不通过</view>
             </view>
@@ -166,7 +191,6 @@
               v-model="text"
               placeholder="请补充其他说明,不超过500个字"
               maxlength="500"
-              @input="onInput"
               class="textarea"
               style="width:100%;height:100%;"
             ></textarea>
@@ -175,7 +199,7 @@
             >
           </view>
         </view>
-        <view class="btn-mianshi">保存</view>
+        <view @click="submitResult()" class="btn-mianshi">保存</view>
       </view>
     </u-popup>
     <u-popup v-model="cancelInterview" mode="bottom" border-radius="40">
@@ -209,7 +233,7 @@
             >
           </view>
         </view>
-        <view class="btn-mianshi" hover-class="btn-pressed" @click="() => {cancelInterview = false;cancel = true;}">提交</view>
+        <view class="btn-mianshi" hover-class="btn-pressed" @click="quitInterview">提交</view>
       </view>
 		</u-popup>
     <u-popup v-model="cancel" mode="center" border-radius="40">
@@ -248,13 +272,62 @@ export default {
       text: "",
       cancelInterview:false,
       cancelList:['已招到人员','求职者已招到工作','面试官有事','时间不合适','其他'],
-      cancel:false
+      cancel:false,
+	  info:{},
+	  recordId:'',
+	  resultType:0,
+	  isWork:false
     };
   },
   components: {
     navBar,
   },
+  onLoad(options){
+  		this.recordId=options&&options.recordId?options.recordId:''
+  		this.getData()
+  },
   methods: {
+	  getData(){
+	  	var that=this
+	  	this.$Request.getT("/app/interviewRecord/getInterviewInfo", {recordId:this.recordId}).then((res) => {
+	  	  if (res.code == 0) {
+	  			  let statusArr=['','待接受','已同意','已拒绝','已过期']
+	  			  res.data.statusText=statusArr[res.data.status]
+	  			  var detailTime=res.data.detailTime?that.$queue.convert12to24(res.data.detailTime):''
+	  			  res.data.interviewDateTime=res.data.interviewDateTime.substring(0,10)+' '+detailTime
+	  			   var expired=that.$queue.isDateExpired(res.data.interviewDateTime)
+	  			   res.data.expired=expired[0]
+	  				res.data.restHour=expired[1]
+	  			  res.data.interviewDate=res.data.interviewDateTime.slice(0, 10)
+	  		  that.info=res.data
+	  			  console.log(that.info)
+	  			  that.currentStep=!res.data.interviewProcesses||res.data.interviewProcesses==0?res.data.interviewProcesses+1:res.data.interviewProcesses
+	  			  /* that.covers.push({
+	  				  id:1,
+	  				latitude: res.data.lat,
+	  				longitude: res.data.lng,
+	  				iconPath:'../../static/images/mapMarker.png',
+	  				alpha:0.5,
+	  				width:20,
+	  				height:20,
+	  					callout: {
+	  						content: res.data.detailedAddress,
+	  						color: '#000', //文字颜色
+	  						fontSize: 10, //文本大小
+	  						padding: 5, //附近留白
+	  						borderRadius: 24, //边框圆角
+	  						bgColor: '#FFFFFF', //背景颜色
+	  						display: 'ALWAYS', //常显
+	  					}
+	  			  }) */
+	  	  } else {
+	  	    uni.showToast({
+	  	      title: res.msg,
+	  	      icon: "none",
+	  	    });
+	  	  }
+	  	});
+	  }, 
     CheckTag(index) {
       this.isCheck = index;
     },
@@ -292,9 +365,91 @@ export default {
     },
     onEdit(){
       uni.navigateTo({
-        url: '/my/jilu/editInterview'
-      })
-    }
+      						url:`/pages/msg/interviewInvitation?recordId=${this.info.recordId}&postPushId=${this.info.postPush.postPushId}&resumesId=${this.info.resumesId}&interviewerId=${this.info.userEntity.userId}`
+      					})
+    },
+	goTo(url){
+		uni.navigateTo({
+		  url
+		})
+	},
+	callPhone(phone){
+		if (phone == ""||!phone) return;
+		uni.makePhoneCall({
+			phoneNumber: phone, //仅为示例
+		});
+	},
+	submitResult(){
+		var that=this
+		if(this.isWork)
+			return
+		this.isWork=true
+		that.$Request.postJson("/app/interviewRecord/saveInterview", {
+			recordId:that.recordId,
+			interviewResultType:that.resultType,
+			interviewResultMsg:that.text
+		}).then(res => {
+			that.isWork=false
+			that.showResult=false
+			if (res.code === 0) {
+				that.info.interviewResultMsg=that.text
+				that.info.interviewResultType=that.resultType
+			} else {
+				uni.showToast({
+					title: res.msg,
+					icon: "none"
+				})
+			}
+		})
+	},
+	updateRecord(){
+		var that=this
+		if(this.isWork)
+			return
+		this.isWork=true
+		that.$Request.postJson("/app/interviewRecord/saveInterview", {
+			recordId:that.recordId,
+			interviewRecordType:that.recordList[that.isCheck],
+			interviewRecordMsg:that.text
+		}).then(res => {
+			that.isWork=false
+			that.showRecord=false
+			if (res.code === 0) {
+				that.info.interviewRecordMsg=that.text
+				that.info.interviewRecordType=that.recordList[that.isCheck]
+			} else {
+				uni.showToast({
+					title: res.msg,
+					icon: "none"
+				})
+			}
+		})
+	},
+	quitInterview(){
+		var that=this
+		if(this.isWork)
+			return
+		this.isWork=true
+		that.$Request.postJson("/app/interviewRecord/saveInterview", {
+			recordId:that.recordId,
+			status:3,
+			interviewQuitType:that.cancelList[that.isCheck],
+			interviewQuitMsg:that.text
+		}).then(res => {
+			that.isWork=false
+			that.cancelInterview=false
+			if (res.code === 0) {
+				that.info.status=3
+				that.info.interviewQuitType=that.cancelList[that.isCheck]
+				that.info.interviewQuitMsg=that.text
+			} else {
+				uni.showToast({
+					title: res.msg,
+					icon: "none"
+				})
+			}
+		})
+	}
   },
 };
 </script>

+ 17 - 14
my/jilu/jilu.vue

@@ -13,7 +13,7 @@
       </view>
 
       <view>
-        <view class="box" v-for="(item, index) in goods" :key="index">
+        <view class="box" v-for="(item, index) in goods" :key="index" @click="goNav('bossMianshiDetail?recordId='+item.recordId)">
           <view class="flex align-center justify-between padding-lr padding-tb-sm">
             <view style="color: #016bf6; font-size: 28rpx; font-weight: bold">{{
               item.statusName
@@ -23,10 +23,10 @@
           <view style="width: 100%; height: 1rpx; background: #eeeeee"></view>
           <view class="padding-lr padding-tb-sm">
             <view class="flex align-center justify-between">
-              <view class="text-bold" style="color: #1f1f1f; font-size: 38upx">
+              <view class="text-bold" style="color: #1f1f1f; font-size: 38rpx">
                 {{ item.postPush ? item.postPush.stationName : "" }}
               </view>
-              <view class="" style="color: #016bf6; font-size: 38upx"
+              <view class="" style="color: #016bf6; font-size: 38rpx"
                 ><text class="text-lg text-bold">{{
                   item.postPush ? item.postPush.salaryRange : ""
                 }}</text></view
@@ -60,7 +60,7 @@
           <view style="width: 100%; height: 1rpx; background: #eeeeee"> </view>
           <view class="flex align-center padding-tb justify-end padding-lr">
             <view class="flex align-center">
-              <view class="btn" @click.stop="goInfo(item.userEntity)"> 简历详情</view>
+              <view class="btn" @click.stop="goInfo(item)"> 简历详情</view>
             </view>
             <view class="flex align-center">
               <view
@@ -247,7 +247,7 @@ export default {
       console.log(item, "1111111111111");
       if (item && item.resumesId) {
         uni.navigateTo({
-          url: "/pages/index/game/orderDet?resumesId=" + item.resumesId,
+          url:'/pages/talentSearch/resumeDetail?resumesId='+item.resumesId+'&postPushId='+item.postPush.postPushId
         });
       } else {
         uni.showToast({
@@ -257,6 +257,9 @@ export default {
       }
     },
     updataServeType(item) {
+		return uni.navigateTo({
+								url:`/pages/msg/interviewInvitation?recordId=${item.recordId}&postPushId=${item.postPush.postPushId}&resumesId=${item.resumesId}&interviewerId=${item.userEntity.userId}`
+							})
       this.miamshi = {
         interviewDateTime: item.interviewDateTime, //面试时间
         companyId: item.companyId, //公司id
@@ -548,25 +551,25 @@ page {
 
 .box {
   background: #ffffff;
-  border-radius: 24upx;
-  margin: 30upx;
+  border-radius: 24rpx;
+  margin: 30rpx;
 }
 
 .argrtn {
   background: #f6f6f6;
   color: #666666;
-  font-size: 24upx;
-  border-radius: 8upx;
-  padding: 5upx 20upx;
-  margin-right: 20upx;
-  margin-bottom: 20upx;
+  font-size: 24rpx;
+  border-radius: 8rpx;
+  padding: 5rpx 20rpx;
+  margin-right: 20rpx;
+  margin-bottom: 20rpx;
 }
 
 .btn {
   border: 1px solid #016bf6;
   border-radius: 30px;
   color: #016bf6;
-  padding: 14upx 35upx;
-  margin-left: 20upx;
+  padding: 14rpx 35rpx;
+  margin-left: 20rpx;
 }
 </style>

+ 2 - 2
my/jilu/mianshiDetail.vue

@@ -37,7 +37,7 @@
             <view class="user-name-com">{{info.company&&info.company.companyName||'匿名公司'}}</view>
             <view class="user-info-img">
               <image :src="info.hr&&info.hr.hrImg||'../../static/images/geren.png'" mode="aspectFill" />
-              <view class="user-name">{{info.userEntity&&info.userEntity.userName||'匿名'}}·{{info.hr&&info.hr.hrPosition||'匿名职务'}}</view>
+              <view class="user-name">{{info.hrUserEntity&&info.hrUserEntity.userName||'匿名'}}·{{info.hr&&info.hr.hrPosition||'匿名职务'}}</view>
             </view>
           </view>
         </view>
@@ -244,7 +244,7 @@ export default {
 			  res.data.interviewDate=res.data.interviewDateTime.slice(0, 10)
 	 		  that.info=res.data
 			  console.log(that.info)
-			  that.currentStep=res.data.interviewProcesses==0?res.data.interviewProcesses+1:res.data.interviewProcesses
+			  that.currentStep=!res.data.interviewProcesses||res.data.interviewProcesses==0?res.data.interviewProcesses+1:res.data.interviewProcesses
 			  that.covers.push({
 				  id:1,
 				latitude: res.data.lat,

+ 1 - 1
my/order/pay.vue

@@ -179,7 +179,7 @@
 				<!-- 公司介绍卡片 -->
 				<view class="company-intro-card" @click="goInfo(info.company.companyId)">
 					<view class="company-avatar">
-						<image :src="info.company.companyLogo!=null?info.company.companyLogo:'../../../static/logo.png'"
+						<image :src="info.company?info.company.companyLogo:'../../../static/logo.png'"
 							style="width: 95rpx;height: 95rpx;border-radius: 50%;" mode="aspectFill"></image>
 					</view>
 					<view class="company-info">

+ 1 - 1
my/renzheng/index.vue

@@ -602,7 +602,7 @@ export default {
             uni.uploadFile({
               // 上传接口
               // url:configdata.APIHOST1+'/alioss/upload',
-              url: "https://zp.xianmaxiong.com/sqx_fast/alioss/upload",
+              url: "https://h5.bosszan.com/sqx_fast/alioss/upload",
               filePath: res.tempFilePaths[i],
               name: "file",
               success: (uploadFileRes) => {

+ 2 - 1
package/jobIntention/city.vue

@@ -67,7 +67,7 @@
           :id="item.letter"
           class="content-map flex justify-between flex-wrap"
           v-for="(item, index) in cityList"
-          v-if="item.city.length > 0"
+          v-if="item&&item.city.length > 0"
           :key="index"
         >
           <view class="" style="width: 100%">
@@ -153,6 +153,7 @@ export default {
           let arr = res.data;
           let rightList = [];
           arr.map((item) => {
+			if(item&&item.letter)
             rightList.push(item.letter);
           });
           this.list = rightList;

+ 1 - 1
pages.json

@@ -1370,7 +1370,7 @@
 			{
 				"pagePath": "pages/index/index",
 				"iconPath": "static/tabbar/Home.png",
-				"selectedIconPath": "static/tabbar/Iconly_Bold_Home.png",
+				"selectedIconPath": "/static/tabbar/Iconly_Bold_Home.png",
 				"text": "首页"
 			},
 			{

+ 96 - 76
pages/index/index.vue

@@ -264,15 +264,16 @@
 											<view class="gwList-box-item-box-info-l flex align-center">
 												<image
 													:src="item.hr&&item.hr.hrImg?item.hr.hrImg:'../../static/logo.png'"
-													style="width: 58rpx;height: 58rpx;border-radius: 50%;"
-													mode=""></image>
+													style="width: 58rpx;height: 58rpx;border-radius: 50%;" mode="">
+												</image>
 												<view class="company-info-text">
 													{{item.user.userName?item.user.userName:'未知'}}·{{item.hr.hrPosition?item.hr.hrPosition:'未知'}}
 												</view>
-												<view v-if="item.respondTime" class="reply-time">{{item.respondTime}}</view>
+												<view v-if="item.respondTime" class="reply-time">{{item.respondTime}}
+												</view>
 											</view>
 											<view class="location-text">
-												{{item.distance}} {{item.county}} 
+												{{item.distance}} {{item.county}}
 											</view>
 										</view>
 									</view>
@@ -446,8 +447,9 @@
 				<view class="qyList flex justify-center">
 					<view class="qyList-box">
 						<view class="qyList-box-item flex justify-center" v-for="(item,index) in datasList" :key="index"
-							@click="goNav('/pages/talentSearch/resumeDetail?resumesId='+item.resumesId+'&postPushId='+jobSxTypeList[currentJobSx].id)">  <!-- /pages/index/game/orderDet  -->
-							
+							@click="goNav('/pages/talentSearch/resumeDetail?resumesId='+item.resumesId+'&postPushId='+jobSxTypeList[currentJobSx].id)">
+							<!-- /pages/index/game/orderDet  -->
+
 							<view class="qyList-box-item-box">
 								<view class="qyList-box-item-info flex justify-between align-center">
 									<view class="qyList-box-item-info-l">
@@ -470,8 +472,8 @@
 											style="width: 95rpx;height: 95rpx;border-radius: 50%;" mode=""></image>
 									</view>
 								</view>
-						
-								<view class="qyList-box-item-job flex align-center" >
+
+								<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>
 									<block v-if="item.workType">
@@ -488,16 +490,15 @@
 									求职期望:{{item.expectedPosition}}
 								</view>
 								<view class="resume-skills" v-if="item.skills && item.skills.length > 0">
-							<!-- 	  <text class="skills-label">技能标签:</text> -->
-								  <view class="skills-tags flex flex-wrap">
-								    <text class="tag-item" 
-								          v-for="(skill, skillIdx) in item.skills.split(',')" 
-								          :key="skillIdx">
-								      {{skill}}
-								    </text>
-								  </view>
+									<!-- 	  <text class="skills-label">技能标签:</text> -->
+									<view class="skills-tags flex flex-wrap">
+										<text class="tag-item" v-for="(skill, skillIdx) in item.skills.split(',')"
+											:key="skillIdx">
+											{{skill}}
+										</text>
+									</view>
 								</view>
-								
+
 								<view class="qyList-box-item-rem" v-if="item.workContent">
 									优势:{{item.workContent}}
 								</view>
@@ -743,7 +744,7 @@
 						// that.getUserList();
 						that.getPostType()
 					} else {
-						that.getPeopList()
+						that.getCompanyClassify()
 					}
 					// console.log(uni.getStorageSync('city') == '', '22222222222')
 					if (!uni.getStorageSync('city') || uni.getStorageSync('city') == '' || uni.getStorageSync(
@@ -768,7 +769,7 @@
 					if (that.userType == 1) {
 						that.getPostType()
 					} else {
-						that.getPeopList()
+						that.getCompanyClassify()
 					}
 				}
 			})
@@ -893,19 +894,29 @@
 					})
 					switch (item.name) {
 						case '学历要求':
-							this.education = arr.join(',')
+
+							//this.education = arr.join(',')
+							this.education = item.list[0].value == '不限' ? '' : item.list[0].value
 							break;
 						case '薪资范围(单选)':
-							this.salaryRange = arr.join(',')
+							//this.salaryRange = arr.join(',')
+
+							this.salaryRange = item.list[0].value == '不限' ? '' : item.list[0].value
 							break;
 						case '经验要求':
-							this.experience = arr.join(',')
+							//this.experience = arr.join(',')
+
+							this.experience = item.list[0].value == '不限' ? '' : item.list[0].value
 							break;
 						case '公司规模':
-							this.companyPeople = arr.join(',')
+							//this.companyPeople = arr.join(',')
+
+							this.companyPeople = item.list[0].value == '不限' ? '' : item.list[0].value
 							break;
 						case '行业':
-							this.industry = arr.join(',')
+							//this.industry = arr.join(',')
+
+							this.industry = item.list[0].value == '不限' ? '' : item.list[0].value
 							break;
 					}
 
@@ -988,7 +999,7 @@
 						this.getComanyList()
 					}
 				} else {
-					this.getPeopList()
+					this.getCompanyClassify()
 				}
 				// if (this.userType == 1) { //用户端岗位
 				// 	that.getPostType();
@@ -1035,7 +1046,7 @@
 			},
 			isSameName(className, name) {
 				let str1 = className.trim();
-				if(str2==null)
+				if (str2 == null)
 					return false;
 				let str2 = name.trim();
 				if (str1.length !== str2.length) {
@@ -1273,13 +1284,14 @@
 					expectedPosition: this.jobSxTypeList[this.currentJobSx].projectName, //岗位名称
 					screen: +this.currentJobSxs + 1, //1推荐 2最新
 					expectedCity: this.city == '全国' ? '' : this.city, //城市
-					resumesCompensation: this.salaryRange, //薪资范围
-					degree: this.education, //学历
-					resumesWorkExperience: this.experience, //经验
-					industryName: this.industry, //行业
+					salaryRange: this.salaryRange, //薪资范围
+					eduRange: this.education, //学历
+					expRange: this.experience, //经验
+					//industryName: this.industry, //行业
 					// companyPeople: this.companyPeople, //公司规模
 					lng: this.longitude,
 					lat: this.latitude,
+					//isRecommend:this.currentJobSxs==1?this.currentJobSxs:0,//推荐
 					companyId: uni.getStorageSync('companyId') ? uni.getStorageSync('companyId') : ''
 
 				}
@@ -1295,16 +1307,16 @@
 						// 		item.positionWelfare = []
 						// 	}
 						// })
-						
-						  const list = res.data.map(item => {
-						    // 若技能字段为其他名称(如 skillTags),需映射为 skills
-						    item.skills = item.skillTags || ''; 
-						    return item;
-						  });
+
+						const list = res.data.records.map(item => {
+							// 若技能字段为其他名称(如 skillTags),需映射为 skills
+							item.skills = item.skillTags || '';
+							return item;
+						});
 						if (this.page == 1) {
-							this.datasList = res.data
+							this.datasList = list
 						} else {
-							this.datasList = [...this.datasList, ...res.data]
+							this.datasList = [...this.datasList, ...list]
 						}
 						this.totlo = res.data.totalPage
 					} else {
@@ -1321,24 +1333,28 @@
 				}
 				this.$Request.getT('/app/postPush/getCompanyClassify', data).then(res => {
 					if (res.code == 0) {
-						let arr = [/* {
-							projectName: '',
-							name: '全部',
-						}, */]
-						if(res.data.length==0){
-							   uni.navigateTo({
-							   	url: '/pages/my/jobPosting?companyId='+companyId+'&status='+this.companyStatus+'&companyName='+this.companyName
-							   })       
+						let arr = [
+							/* {
+														projectName: '',
+														name: '全部',
+													}, */
+						]
+						if (res.data.length == 0) {
+							uni.navigateTo({
+								url: '/pages/my/jobPosting?companyId=' + companyId + '&status=' + this
+									.companyStatus + '&companyName=' + this.companyName
+							})
 						}
 						res.data.map(item => {
 							let obj = {
-								id:item.postPushId,
+								id: item.postPushId,
 								projectName: item.ruleClassifyName,
 								name: item.ruleClassifyName,
 							}
 							arr.push(obj)
 						})
 						this.jobSxTypeList = arr
+						this.getPeopList()
 					}
 				})
 			},
@@ -1466,11 +1482,13 @@
 				}).then(res => {
 					if (res.code == 0) {
 						let arr = res.data
-						let classRule = [/* {
-							id: '',
-							name: '',
-							label: '全部'
-						} */]
+						let classRule = [
+							/* {
+														id: '',
+														name: '',
+														label: '全部'
+													} */
+						]
 
 						let industry = this.directionList
 						var industryArr = this.industry == '' ? [] : this.industry.split(',')
@@ -2622,30 +2640,32 @@
 		width: 100%;
 		height: auto;
 
-  /* 技能标签区域 */
-  .resume-skills {
-    margin: 20rpx 0; // 与上下模块的间距
-
-    .skills-label {
-      font-size: 24rpx;
-      color: #212121;
-      font-weight: 500;
-      display: block;
-      margin-bottom: 12rpx;
-    }
-
-    .skills-tags {
-      gap: 16rpx; // 标签间距
-
-      .tag-item {
-        background: #F6F6F6;
-        color: #666666;
-        font-size: 22rpx;
-        padding: 8rpx 20rpx;
-        border-radius: 8rpx;
-        line-height: 32rpx;
-      }
-    }}
+		/* 技能标签区域 */
+		.resume-skills {
+			margin: 20rpx 0; // 与上下模块的间距
+
+			.skills-label {
+				font-size: 24rpx;
+				color: #212121;
+				font-weight: 500;
+				display: block;
+				margin-bottom: 12rpx;
+			}
+
+			.skills-tags {
+				gap: 16rpx; // 标签间距
+
+				.tag-item {
+					background: #F6F6F6;
+					color: #666666;
+					font-size: 22rpx;
+					padding: 8rpx 20rpx;
+					border-radius: 8rpx;
+					line-height: 32rpx;
+				}
+			}
+		}
+
 		.qyList-box {
 			width: 716rpx;
 			height: 100%;

+ 7 - 2
pages/jobManagement/jobManagement.vue

@@ -99,7 +99,7 @@ export default {
         { name: '已拒绝', status: 3 },
         { name: '已取消', status: 4 },
         { name: '已关闭', status: 5 },
-        { name: '已拒绝', status: 6 }
+        // { name: '已拒绝', status: 6 }
       ],
       jobList: [],
       page: 1,        // 当前页码
@@ -180,7 +180,12 @@ export default {
       this.getJobList();
     },
     // 原有方法保持不变...
-    goBack() { uni.navigateBack(); },
+    goBack() { 
+		uni.switchTab({
+			url: '/pages/my/index'
+		});
+		
+	 },
     goNav(url) { uni.navigateTo({ url }); },
     publishNewJob() { uni.navigateTo({ url: '/package/addJob/addJob' }); },
     getJobStatusClass(job) { /* 原有逻辑不变 */ },

+ 17 - 6
pages/msg/chathistory.vue

@@ -21,7 +21,7 @@
 				<view v-if="item.userId && userId != item.userId" style="width: 83%;margin-right: 15%;">
 					<view class="chat-listitem" style="float: left;margin-left: 10rpx;">
 						<view>
-							<image @tap="goGuanZhu(item)" :src="item.imageUrl ? item.imageUrl : '/static/logo.png'"
+							<image @tap="goGuanZhu(item)" :src="item.avatar ? item.avatar : '/static/logo.png'"
 								class="chat-listitem-image"></image>
 						</view>
 						<view v-if="item.content && item.messageType === 1" class="chat-listitem-text"
@@ -40,9 +40,9 @@
 						</view>
 						<image @tap="viewImg(item.content)" v-if="item.content && item.messageType === 2"
 							:src="item.content" style="height: 200rpx;width: 200rpx;margin-left: 20rpx;"></image>
-						<image class="chat-listitem-text" @tap="viewImg(item.content)"
+						<image class="chat-listitem-text"
 							v-if="item.content && item.messageType === 4"
-							:src="'https://xxpw.xianmxkj.com/emoji/' +item.content"
+							:src="ossUrl +item.content"
 							style="height: 80rpx;width: 80rpx;margin-left: 20rpx;"></image>
 
 
@@ -164,6 +164,15 @@
 								简历请求已同意
 							</view>
 						</view>
+						<view v-if="item.content && item.messageType === 9 && item.content!='简历请求'"
+							@longpress="copy(item.content)" class="chat-listitem-text"
+							style="padding-bottom: 20rpx;;padding-top: 20rpx;margin-left: 20rpx;color: #000000;background-color: #ffffff;border: 1rpx solid #c6fee7;background: linear-gradient(to bottom, #D9FEED, #ffffff);">
+							<view class="flex align-center">
+								<image src="../../static/im/orderInfo.png"
+									style="width: 60rpx;height: 60rpx;margin-right: 10rpx;" mode=""></image>
+								{{item.content}}
+							</view>
+						</view>
 						<view v-if="item.content && item.messageType === 10" class="chat-listitem-text"
 							style="margin-left: 20rpx;color: #000000;background-color: #ffffff;">
 							{{item.content}}
@@ -199,9 +208,9 @@
 							class="chat-listitem-text" style="margin-right: 20rpx;">{{item.content}}</view> -->
 						<image @tap="viewImg(item.content)" v-if="item.content && item.messageType === 2"
 							:src="item.content" style="height: 200rpx;width: 200rpx;margin-right: 20rpx;"></image>
-						<image class="chat-listitem-text" @tap="viewImg(item.content)"
+						<image class="chat-listitem-text"
 							v-if="item.content && item.messageType === 4"
-							:src="'https://xxpw.xianmxkj.com/emoji/' +item.content"
+							:src="ossUrl +item.content"
 							style="height: 80rpx;width: 80rpx;margin-right: 20rpx;">
 						</image>
 						<view v-if="item.messageType === 20" class="chat-listitem-text textColor flex align-center"
@@ -299,6 +308,7 @@
 </template>
 
 <script>
+	import configData from '../../common/config.js'
 	export default {
 		components: {},
 		data() {
@@ -360,7 +370,8 @@
 				chatConversationId: 0,
 				userId: 0,
 				ListItem: [],
-				search: ''
+				search: '',
+				ossUrl:configData.ossUrl
 			};
 		},
 		onLoad(d) {

+ 296 - 52
pages/msg/im.vue

@@ -47,18 +47,21 @@
 					<view class="" style="color: #999999;">
 						换电话
 					</view>
+					<view v-if="isSendPhone" class="status-indicator"><u-icon name="checkmark-circle-fill"></u-icon></view>
 				</view>
 				<view class="topSe-box-item flex flex-wrap justify-center" @click="currentWchat()">
 					<image src="../../static/im/weiChat2.svg" style="width: 48rpx;height: 48rpx;" mode=""></image>
 					<view class="" style="color: #999999;">
 						换微信
 					</view>
+					<view v-if="isSendWx" class="status-indicator"><u-icon name="checkmark-circle-fill"></u-icon></view>
 				</view>
 				<view class="topSe-box-item flex flex-wrap justify-center" @click="sendResumes()">
 					<image src="../../static/im/orderInfo2.svg" style="width: 48rpx;height: 48rpx;" mode=""></image>
 					<view class="" style="color: #999999;">
 						发简历
 					</view>
+					<view v-if="isSendResumes"  class="status-indicator"><u-icon name="checkmark-circle-fill"></u-icon></view>
 				</view>
 				<view class="topSe-box-item flex flex-wrap justify-center" @click="noIdtent()">
 					<image src="../../static/im/nowei.svg" style="width: 48rpx;height: 48rpx;" mode=""></image>
@@ -75,18 +78,21 @@
 					<view class="" style="color: #999999;">
 						换电话
 					</view>
+					<view v-if="isSendPhone" class="status-indicator"><u-icon name="checkmark-circle-fill"></u-icon></view>
 				</view>
 				<view class="topSe-box-item flex flex-wrap justify-center" @click="currentWchat()">
 					<image src="../../static/im/weiChat.png" style="width: 48rpx;height: 48rpx;" mode=""></image>
 					<view class="" style="color: #999999;">
 						换微信
 					</view>
+					<view v-if="isSendWx"  class="status-indicator"><u-icon name="checkmark-circle-fill"></u-icon></view>
 				</view>
 				<view class="topSe-box-item flex flex-wrap justify-center" @click="giveSendResumes()">
 					<image src="../../static/im/orderInfo.png" style="width: 48rpx;height: 48rpx;" mode=""></image>
 					<view class="" style="color: #999999;">
 						求简历
 					</view>
+					<view v-if="isSendResumes" class="status-indicator"><u-icon name="checkmark-circle-fill"></u-icon></view>
 				</view>
 				<view class="topSe-box-item flex flex-wrap justify-center" @click="mianshiF()">
 					<image src="../../static/im/mianshi.png" style="width: 48rpx;height: 48rpx;" mode=""></image>
@@ -112,7 +118,7 @@
 				</view>
 			</view> -->
 			<!-- 岗位简介 -->
-			<view class="jobs flex justify-center" v-if="JSON.stringify(postPushInfo)!='{}'">
+			<view class="jobs flex justify-center" v-if="JSON.stringify(postPushInfo)!='{}'&&userType==1">
 				<view class="jobs-box">
 					<view class="gwList-box-item flex justify-center" @click="gotoInfo(postPushInfo.postPushId)">
 						<view class="gwList-box-item-box">
@@ -142,14 +148,7 @@
 							<!-- <view class="gwList-box-item-box-line"></view> -->
 							<!-- 工作描述 -->
 							<view class="gwList-box-item-box-info-text">
-								<view class="job-description-item">1.负责Amazon英国、欧洲站、制定推广与销售计划,达成团队要求的销售业绩;</view>
-								<view class="job-description-item">2.做好数据的统计分析工作,收集、分析市场信息,竞争对手状况,并根据产品销售与排名变化,及时制定和调整产品的销售策略;</view>
-								<view class="job-description-item" v-if="isJobDescExpanded">3.熟悉Amazon店铺操作,负责店铺产品编辑上传,精准把握关键词选择,负责标题,详情页面的优化;</view>
-								<view class="job-description-item" v-if="isJobDescExpanded">4.熟悉Amazon平台规则,熟悉Amazon站内广告投放和促销式,站外促销,找红人营销等提高曝光率和转化率的引流方</view>
-								<view class="job-description-item" v-if="isJobDescExpanded">5.控制产品风险,合理规划FBA库存,及时合理处理滞销FBA库存;</view>
-								<view class="job-description-item" v-if="isJobDescExpanded">6.对产品销售进行跟踪,分析,及时汇报销售中存在的问题,并给出可行性意见;</view>
-								<view class="job-description-item" v-if="isJobDescExpanded">7.及时处理客户留言及回评,解答客户相关咨询与投诉,并进行问题整理统计分析,提高店铺的好评率,确保账号安全;</view>
-								<view class="job-description-item" v-if="isJobDescExpanded">8.每月定期整理分析运营各项数据,并提出相应的合理化建议。</view>
+								<view :class="['job-description-item',!isJobDescExpanded?'job-description-itemAll':'']">{{postPushInfo.positionDetails}}</view>
 								<!-- 展开/收起按钮 -->
 								<view class="expand-btn" @click.stop="toggleJobDesc">
 									<text class="expand-text">{{ isJobDescExpanded ? '收起' : '展开更多' }}</text>
@@ -178,8 +177,8 @@
 								<view class="time-text">
 									7月24日 14:34 向你发起的沟通
 								</view>
-								<view :class="['favorite-btn  flex align-center',postPushInfo.isCollect?'collectActived':'']" @click.stop="setCollection(postPushInfo.postPushId)">
-									<text class="favorite-icon"><u-icon :name="postPushInfo.isCollect?'star-fill':'star'"></u-icon></text>
+								<view :class="['favorite-btn  flex align-center',postPushInfo.isCollection?'collectActived':'']" @click.stop="setCollection(postPushInfo.postPushId)">
+									<text class="favorite-icon"><u-icon :name="postPushInfo.isCollection?'star-fill':'star'"></u-icon></text>
 									<text class="favorite-text">收藏职位</text>
 								</view>
 							</view>
@@ -189,51 +188,59 @@
 			</view>
 			<!-- 简历简介 -->
 			<view class="jobs flex justify-center" v-if="JSON.stringify(resumesInfo)!='{}'">
-				<view class="jobs-box">
-					<view class="qyList-box-item flex justify-center"
-						@click="goNav('/pages/index/game/orderDet?resumesId='+resumesInfo.resumesId)">
-						<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;">
-										{{resumesInfo.resumesName}}
+				<view class="talent-list">
+					<view class="talent-card">
+						<view class="talent-content">
+							<!-- 头像和基本信息 -->
+							<view class="talent-header">
+								<image :src="resumesInfo.avatar" class="talent-avatar" mode="aspectFill"></image>
+								<view class="talent-info">
+									<view class="talent-name-section">
+										<view class="talent-name">期望:{{ resumesInfo.intentionRuleClassifyName }} <text class="talentRange">{{resumesInfo.intentionSalaryRange}}</text></view>
+										<!-- <view class="talent-tags">
+											<view class="status-tag online" v-if="resumesInfo.isOnline">在线</view>
+												<view class="status-tag hot" v-if="talent.isHot">热门搜索</view>
+											<view class="status-tag active" v-if="resumesInfo.lastActive">{{ resumesInfo.lastActive }}
+											</view>
+										</view> -->
 									</view>
-									<view class="flex align-center flex-wrap"
-										style="color: #999999;font-size: 26rpx;margin-top: 10rpx;">
-										<text>{{resumesInfo.resumesAge}}岁</text>
-										<text style="margin-left: 20rpx;margin-right: 20rpx;">|</text>
-										<text>{{resumesInfo.resumesWorkExperience}}</text>
-										<text style="margin-left: 20rpx;margin-right: 20rpx;">|</text>
-										<text>{{resumesInfo.school}}</text>
-										<text style="margin-left: 20rpx;margin-right: 20rpx;">|</text>
-										<text>期望{{resumesInfo.resumesCompensation}}</text>
+									<!-- 经验和薪资 -->
+									<view class="talent-experience">
+										<text class="experience-text">{{ resumesInfo.resumesWorkExperience || 0 }}年</text>
+										<text class="education-salary">{{ postPushInfo.education}}</text>
+										<text class="education-salary">{{ postPushInfo.salaryRange}}</text>
+										<text class="status-text">{{ jobStatusList[resumesInfo.resumesStatus].text}}</text>
 									</view>
 								</view>
-								<view class="qyList-box-item-info-r">
-									<image :src="resumesInfo.avatar?resumesInfo.avatar:'../../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>
-								期望岗位:{{resumesInfo.resumesPost}}
+				
+							<!-- 当前职位 -->
+							<view class="current-job">
+								<image src="../../static/images/aixin.svg" class="job-icon" mode="aspectFit"></image>
+								<text class="job-text">{{ resumesInfo.companyName }}·{{ resumesInfo.lastWorkPosition }}</text>
 							</view>
-							<view class="qyList-box-item-job flex align-center"
-								v-if="resumesInfo.resumesCompanyList[0]">
-								<image src="../../static/images/qi.png"
-									style="width: 30rpx;height: 32rpx;margin-right: 16rpx;" mode=""></image>
-								{{resumesInfo.resumesCompanyList[0]?resumesInfo.resumesCompanyList[0].resumesTitle:''}}
-								/
-								{{resumesInfo.resumesCompanyList[0]?resumesInfo.resumesCompanyList[0].resumesPost:''}}
+				
+							<!-- 求职期望 -->
+							<view class="job-expectation">
+								<image src="../../static/images/xiangzi.svg" class="job-icon" mode="aspectFit"></image>
+								<text class="expectation-text">求职期望: {{ resumesInfo.expectedPosition }}</text>
 							</view>
-							<view class="qyList-box-item-job flex align-center" v-else>
-								<image src="../../static/images/qi.png"
-									style="width: 30rpx;height: 32rpx;margin-right: 16rpx;" mode=""></image>
-								暂无
+				
+							<!-- 技能标签 -->
+							<view class="skill-tags">
+								<view class="skill-tag" v-for="(skill, skillIndex) in resumesInfo.skills" :key="skillIndex">
+									{{ skill }}
+								</view>
+							</view>
+				
+							<!-- 工作描述 -->
+							<view class="job-description">
+								<text class="description-text">{{ resumesInfo.adv }}</text>
 							</view>
-							<view class="qyList-box-item-rem" v-if="resumesInfo.resumesDetails">
-								优势:{{resumesInfo.resumesDetails}}
+						</view>
+						<view class="time-favorite flex justify-between align-center">
+							<view class="time-text">
+								7月24日 14:34 沟通的职位-亚马逊
 							</view>
 						</view>
 					</view>
@@ -999,6 +1006,7 @@
 				resumesInfo: {}, //简历信息
 				isSendPhone: false, //是否交换手机号
 				isSendWx: false, //是否交换微信
+				isSendResumes:false,
 				mianshiShow: false, //约面试弹窗
 				phoneExchangeShow: false, //交换手机号弹窗
 				wechatExchangeShow: false, //交换微信弹窗
@@ -1014,7 +1022,8 @@
 				socketTimer: null, //心跳定时器
 				isVip: false, //是否是会员
 				isVideo: false, //是否打视频
-				ossUrl:configdata.ossUrl
+				ossUrl:configdata.ossUrl,
+				jobStatusList:[]
 			};
 		},
 		onUnload() {
@@ -1084,6 +1093,7 @@
 				this.recordEnd(e);
 			})
 			// #endif
+			this.jobStatusList = this.$queue.resumesStatus()
 		},
 		onShow() {
 			if (this.chatConversationId) {
@@ -1720,6 +1730,10 @@
 						} else {
 							this.isSendPhone = false
 						}
+						if(res.data.isSendResumes)
+							this.isSendResumes=true
+						else
+							this.isSendResumes=false
 					}
 				})
 			},
@@ -1828,6 +1842,7 @@
 			},
 			//获取简历数据
 			getResumesInfo(id) {
+				var that=this
 				this.$Request.getT("/app/resumes/selectResumesByResumesId", {
 					userId: uni.getStorageSync('userId'),
 					resumesId: id,
@@ -1838,6 +1853,16 @@
 						uni.setNavigationBarTitle({
 							title: title
 						})
+						res.data.intentionRuleClassifyName=this.postPushInfo.ruleClassifyName
+						res.data.intentionSalaryRange=this.postPushInfo.salaryRange
+						res.data.intentionExprence=[]
+						res.data.intentionList.forEach(function(item){
+							if(item.ruleClassifyName==that.postPushInfo.ruleClassifyName){
+								res.data.intentionRuleClassifyName=item.ruleClassifyName
+								res.data.intentionSalaryRange=item.salaryRange
+								res.data.intentionExprence=item.industry&&item.industry.split('/')||[]
+							}
+						})
 						this.resumesInfo = res.data
 						// this.postPushInfo.positionWelfare = this.postPushInfo.positionWelfare.split(',')
 					}
@@ -2353,7 +2378,7 @@
 					// url: 'wss://h5.youxb.icu/wss/sqx_fast/chatSocket/' + userId,
 					// url: this.config("WSHOST1") + userId,
 					url: configdata.WSHOST1 + '' + userId,
-					// url: 'wss://zp.xianmaxiong.com/wss/chatSocket/' + userId,
+					// url: 'wss://h5.bosszan.com/wss/chatSocket/' + userId,
 					// url: 'ws://192.168.0.128:7152/sqx_fast/chatSocket/' + userId,
 					data() {
 						return {
@@ -2672,7 +2697,7 @@
 						uni.showToast({
 							title: res.msg
 						})
-						this.getInfo()
+						this.postPushInfo.isCollection=1-(this.postPushInfo.isCollection?this.postPushInfo.isCollection:0)
 					}
 				})
 			},
@@ -2863,6 +2888,15 @@
 			.topSe-box-item {
 				font-size: 24rpx;
 				width: 80rpx;
+				position: relative;
+				.status-indicator{
+					position: absolute;
+					top: -12rpx;
+					right: 12rpx;
+					width: 20rpx;
+					height: 20rpx;
+					color: #4CAF50;
+				}
 			}
 		}
 	}
@@ -2955,6 +2989,13 @@
 					margin-bottom: 0;
 				}
 			}
+			.job-description-itemAll{
+				display: -webkit-box;
+				  -webkit-line-clamp: 4;
+				  -webkit-box-orient: vertical;
+				  overflow: hidden;
+				  text-overflow: ellipsis;
+			}
 		}
 
 		.gwList-box-item-box-info {
@@ -3065,4 +3106,207 @@
 		margin: 5rpx 10rpx 0;
 		line-height: 70rpx;
 	}
+	
+	.talent-list {
+		// margin-top: 280rpx; // 已改为动态计算,在模板中通过 :style 设置
+		padding: 20rpx;
+		z-index: 100;
+		position: relative;
+		width:96%
+	}
+	
+	.talent-card {
+		background-color: #ffffff;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		padding: 30rpx;
+		box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
+		.time-favorite{
+			border-top: 1px solid #efefef;
+			margin-top: 20rpx;
+		}
+	}
+	
+	.talent-content {
+		.talent-header {
+			display: flex;
+			align-items: flex-start;
+	
+			.talent-avatar {
+				width: 80rpx;
+				height: 80rpx;
+				border-radius: 50%;
+				margin-right: 20rpx;
+			}
+	
+			.talent-info {
+				flex: 1;
+				.talentRange{
+					color: #016BF6;
+					font-size: 24rpx;
+					margin-left: 10rpx;
+				}
+				.talent-name-section {
+					display: flex;
+					align-items: center;
+					justify-content: flex-start;
+					width: 100%;
+					margin-bottom: 6rpx;
+				}
+	
+				.talent-name {
+					color: rgba(51, 51, 51, 1);
+					font-family: DM Sans;
+					font-size: 28rpx;
+					font-weight: 500;
+					line-height: 36rx;
+					letter-spacing: 0.5%;
+					text-align: left;
+					margin-right: 16rpx;
+				}
+	
+				.talent-tags {
+					display: flex;
+					flex-wrap: wrap;
+					gap: 10rpx;
+	
+					.status-tag {
+						padding: 8rpx;
+						border-radius: 12rpx;
+						font-size: 18rpx;
+						font-family: DM Sans;
+						font-weight: 400;
+						line-height: 20rpx;
+						letter-spacing: -0.5px;
+						text-align: left;
+	
+						&.online {
+							background: rgba(213, 255, 231, 1);
+							color: rgba(29, 209, 104, 1);
+						}
+	
+						&.hot {
+							background: rgba(252, 233, 220, 1);
+							color: rgba(1, 107, 246, 1);
+						}
+	
+						&.active {
+							color: rgba(153, 153, 153, 1);
+						}
+					}
+				}
+			}
+		}
+	
+		.talent-experience {
+			display: flex;
+			align-items: center;
+			margin-bottom: 12rpx;
+			gap: 16rpx;
+			color: rgba(156, 164, 171, 1);
+			font-family: DM Sans;
+			font-size: 24rpx;
+			font-weight: 400;
+			line-height: 32rpx;
+			letter-spacing: 0.5%;
+			text-align: left;
+		}
+	
+		.current-job {
+			display: flex;
+			align-items: center;
+			margin-bottom: 12rpx;
+	
+			.job-icon {
+				width: 40rpx;
+				height: 40rpx;
+				margin-right: 8rpx;
+			}
+	
+			.job-text {
+				color: rgba(156, 164, 171, 1);
+				font-family: DM Sans;
+				font-size: 24rpx;
+				font-weight: 400;
+				line-height: 40rpx;
+				letter-spacing: 0.5%;
+				text-align: left;
+			}
+		}
+	
+		.job-expectation {
+			display: flex;
+			align-items: center;
+			margin-bottom: 16rpx;
+	
+			.job-icon {
+				width: 40rpx;
+				height: 40rpx;
+				margin-right: 8rpx;
+			}
+	
+			.expectation-text {
+				color: rgba(156, 164, 171, 1);
+				font-family: DM Sans;
+				font-size: 24rpx;
+				font-weight: 400;
+				line-height: 40rpx;
+				letter-spacing: 0.5%;
+				text-align: left;
+			}
+		}
+	
+		.skill-tags {
+			display: flex;
+			flex-wrap: wrap;
+			gap: 10rpx;
+			margin-bottom: 16rpx;
+	
+			.skill-tag {
+				padding: 8rpx;
+				background: rgba(198, 198, 198, 0.1);
+				border-radius: 12rpx;
+				color: rgba(153, 153, 153, 1);
+				font-family: DM Sans;
+				font-size: 20rpx;
+				font-weight: 400;
+				line-height: 20rpx;
+				letter-spacing: -0.5px;
+				text-align: left;
+			}
+		}
+	
+		.job-description {
+			margin-bottom: 12rpx;
+			width: 100%;
+	
+			.description-text {
+				color: rgba(97, 110, 124, 1);
+				font-family: DM Sans;
+				font-size: 24rpx;
+				font-weight: 400;
+				line-height: 32rpx;
+				letter-spacing: 0px;
+				text-align: left;
+				display: -webkit-box;
+				-webkit-line-clamp: 2;
+				/* 只显示2行 */
+				-webkit-box-orient: vertical;
+				overflow: hidden;
+				/* 隐藏超出内容 */
+				text-overflow: ellipsis;
+				/* 显示省略号 */
+	
+			}
+		}
+	
+		.work-period {
+			text-align: right;
+	
+			.period-text {
+				font-size: 22rpx;
+				color: #999;
+			}
+		}
+	}
 </style>

+ 51 - 6
pages/msg/interviewInvitation.vue

@@ -24,7 +24,7 @@
 				</view>
 				<view class="cell" v-if="radioValue == 0">
 					<view class="cell-label">面试地址</view>
-					<view class="cell-input" hover-class="cell-hover" @click="goPage('address')">
+					<view class="cell-input" hover-class="cell-hover" @click="goPage('address',{detailedAddress,address,latitude,longitude})">
 						<view class="m-ellipsis">{{selectedAddress || '请选择地址'}}</view>
 						<image class="cell-icon" src="/static/images/msg/down_arrow.svg" mode="aspectFit"></image>
 					</view>
@@ -48,7 +48,7 @@
 			<view class="card-box" style="padding: 0;">
 				<view class="note">
 					<view class="note-label note-time">面试日期</view>
-					<uni-calendar class="uni-calendar--hook" :startDate="date" :showMonth="false" @change="change"
+					<uni-calendar class="uni-calendar--hook" :selected="selectedDate" :startDate="date" :showMonth="false" @change="change"
 						@monthSwitch="monthSwitch" />
 				</view>
 			</view>
@@ -230,9 +230,9 @@
 				hrName: "",
 				signTime: "",
 				date: "",
-				time: ""
-
-
+				time: "",
+				recordId:'',
+				selectedDate:[]
 			};
 		},
 		components: {
@@ -254,11 +254,15 @@
 				this.interviewerId = option.interviewerId
 				console.log("接收到的参数interviewerId:",option.interviewerId)
 			}
+			
+			if (option&&option.recordId) {
+				this.recordId = option.recordId
+					console.log("接收到的参数resumesId:",option.resumesId)
+			}
 
 			this.PostPushDetails()
 			this.getCurrentDateTime()
 			this.selectHrPhone()
-
 		},
 
 		methods: {
@@ -290,6 +294,8 @@
 							index: 0 // 添加下标
 						}];
 						this.companyId = res.data.companyId
+						if(this.recordId!='')
+							this.getData()
 						console.log(this.jobList)
 					} else {
 						uni.hideLoading()
@@ -435,9 +441,48 @@
 				this.methodActiveIndex = i
 				this.selecteMethodText = val
 			},
+			getData(){
+				var that=this
+				this.$Request.getT("/app/interviewRecord/getInterviewInfo", {recordId:this.recordId}).then((res) => {
+				  if (res.code == 0) {
+					  this.type=res.data.type
+					  this.popRadioValue = res.data.postPush.ruleClassifyId;
+					  this.jobList.forEach(function(item){
+						  if(item.ruleClassifyId==that.popRadioValue)
+							that.selectedJob = item
+					  })
+						this.latitude=res.data.lat
+					  this.longitude=res.data.lng
+					  
+					  this.textareaValue=res.data.remarks
+					  this.interviewDateTime=res.data.interviewDateTime.substring(0,10)
+					  this.selectedDate=[{date:this.interviewDateTime,info:'已预约'}]
+					  this.address=res.data.address
+					  this.detailedAddress=res.data.detailedAddress
+					  this.selectedAddress = this.address + this.detailedAddress
+					  this.hrPhone=res.data.hrPhone
+					  this.personText=res.data.hrName
+					  
+					this.selectedTime=res.data.detailTime
+					if(this.selectedTime){
+						var timeLimit=res.data.detailTime.split(' ')
+						var hourMinute=timeLimit[0].split(':')
+						this.timeValue=[this.hours.indexOf(parseInt(hourMinute[0])),this.minutes.indexOf(parseInt(hourMinute[1])),this.meridiem.indexOf(timeLimit[1])]
+					}
+					this.selecteMethodText=res.data.onlineType||''
+					this.onlineMsg=res.data=res.data.onlineMsg||''
+				  } else {
+				    uni.showToast({
+				      title: res.msg,
+				      icon: "none",
+				    });
+				  }
+				});
+			}, 
 			confirmRules() {
 				
 				var data = {
+					recordId:this.recordId,
 					interviewDateTime: this.interviewDateTime+' 00:00:00',
 					postPushId: this.postPushId,
 					resumesId: this.resumesId,

+ 6 - 0
pages/msg/selectInterview.vue

@@ -63,6 +63,12 @@
 					this.address = data.item.hrName
 					this.floor = data.item.hrPhone
 				}
+				if (data.type === 'address' && data.item) {
+					this.latitude = data.item.latitude
+					this.longitude = data.item.longitude
+					this.address = data.item.address
+					this.floor = data.item.detailedAddress
+				}
 			})
 		},
 		computed: {

+ 89 - 10
pages/my/index.vue

@@ -13,7 +13,7 @@
 					<view class="info-box-btn flex justify-end align-center" style="padding-right: 32rpx;"
 						v-if="token && XCXIsSelect != '否'">
 						<image src="@/static/images/jobApplicant/qiehuan.svg" mode="scaleToFill"
-							style="margin-top: 40rpx;margin-right:30rpx" @click="bindQe()" />
+							style="margin-top: 40rpx;margin-right:30rpx" @click="goNav('switchRoles')" />
 						<u-icon @click="goNav('/pages/my/userinfo')" color="#ffffff" top="16rpx" size="34rpx" name="setting"></u-icon>
 						<!-- <image
               src="../../static/images/my/icon/selectUser.png"
@@ -311,9 +311,9 @@
 							</view>
 						</view>
 					</view>
-					<view class="beian">客服电话 400-000-0100 工作时间08:00-22:00</view>
+					<!-- <view class="beian">客服电话 400-000-0100 工作时间08:00-22:00</view> -->
 					<view class="beian">人力资源服务许可证 营业执照 深圳市人社局监督电话</view>
-					<view class="beian">鄂ICP备 2312321232111 鄂ICP证123123号</view>
+					<view class="beian">粤ICP备2025494494号</view>
 				</view>
 			</view>
 		</block>
@@ -325,7 +325,7 @@
 						<view class="info-box">
 							<view v-if="XCXIsSelect != '否'" class="info-box-btn flex justify-end align-center">
 								<image src="@/static/images/jobApplicant/qiehuan.svg" mode="scaleToFill"
-									style="margin-top: 40rpx" @click="bindQe(userType)" />
+									style="margin-top: 40rpx" @click="goNav('switchRoles')" />
 							</view>
 							<view class="info-box-header flex align-center">
 								<view class="info-box-header-l">
@@ -454,7 +454,7 @@
 										<view class=""> 招聘数据 </view>
 									</view>
 									<view class="jobServer-box-btn-item flex justify-center flex-wrap"
-										@click="goNavStatus('/package/addJob/addJob')">
+										@click="goNavStatus('/pages/my/jobPosting')">
 										<image src="../../static/images/index/qwzn.svg" mode=""></image>
 										<view class=""> 发布招聘 </view>
 									</view>
@@ -574,7 +574,65 @@
 						<view class="utils-box flex justify-center">
 							<view class="utils-box-c">
 								<view class="util-list">
-									<view v-if="XCXIsSelect != '否'" class="util-item"
+									<view class="util-item"
+										@click="goNav('/pages/my/ruleCenter')">
+										<image src="../../static/images/my/icon/utils/rulerCenter.png"
+											style="width: 54rpx; height: 54rpx" mode=""></image>
+										<view class="" style="color: #1a1a1a; font-size: 24rpx; margin-top: 15rpx">
+											规则中心
+										</view>
+									</view>
+									<view class="util-item"
+										@click="goNav('/pages/my/VIP/benefits')">
+										<image src="../../static/images/my/icon/utils/benefits.png"
+											style="width: 54rpx; height: 54rpx" mode=""></image>
+										<view class="" style="color: #1a1a1a; font-size: 24rpx; margin-top: 15rpx">
+											我的权益
+										</view>
+									</view>
+									<view class="util-item">
+										<image src="../../static/images/my/icon/utils/wallet.png"
+											style="width: 54rpx; height: 54rpx" mode=""></image>
+										<view class="" style="color: #1a1a1a; font-size: 24rpx; margin-top: 15rpx">
+											钱包
+										</view>
+									</view>
+									<view class="util-item">
+										<image src="../../static/images/my/icon/utils/invoice.png"
+											style="width: 54rpx; height: 54rpx" mode=""></image>
+										<view class="" style="color: #1a1a1a; font-size: 24rpx; margin-top: 15rpx">
+											发票
+										</view>
+									</view>
+									<view class="util-item">
+										<image src="../../static/images/my/icon/utils/user.png"
+											style="width: 54rpx; height: 54rpx" mode=""></image>
+										<view class="" style="color: #1a1a1a; font-size: 24rpx; margin-top: 15rpx">
+											个人主页
+										</view>
+									</view>
+									<view class="util-item" @click="goNav('/pages/my/myCompany')">
+										<image src="../../static/images/my/icon/utils/company.png"
+											style="width: 54rpx; height: 54rpx" mode=""></image>
+										<view class="" style="color: #1a1a1a; font-size: 24rpx; margin-top: 15rpx">
+											企业管理
+										</view>
+									</view>
+									<view class="util-item" @click="goChat">
+										<image src="../../static/images/my/icon/utils/kefu.png"
+											style="width: 54rpx; height: 54rpx" mode=""></image>
+										<view class="" style="color: #1a1a1a; font-size: 24rpx; margin-top: 15rpx">
+											我的客服
+										</view>
+									</view>
+									<view class="util-item" @click="goNav('/my/setting/mimi')">
+										<image src="../../static/images/my/icon/utils/privacy.png"
+											style="width: 54rpx; height: 54rpx" mode=""></image>
+										<view class="" style="color: #1a1a1a; font-size: 24rpx; margin-top: 15rpx">
+											隐私规则
+										</view>
+									</view>
+									<!-- <view v-if="XCXIsSelect != '否'" class="util-item"
 										@click="goNav('/package/myLove/myLove')">
 										<image src="../../static/images/my/icon/utils/myLovere.png"
 											style="width: 54rpx; height: 54rpx" mode=""></image>
@@ -654,14 +712,14 @@
 										<view class="" style="color: #1a1a1a; font-size: 24rpx; margin-top: 15rpx">
 											退出登录
 										</view>
-									</view>
+									</view> --> 
 								</view>
 							</view>
 						</view>
 					</view>
-					<view class="beian">客服电话 400-000-0100 工作时间08:00-22:00</view>
+		<!-- 			<view class="beian">客服电话 400-000-0100 工作时间08:00-22:00</view> -->
 					<view class="beian">人力资源服务许可证 营业执照 深圳市人社局监督电话</view>
-					<view class="beian">鄂ICP备 2312321232111 鄂ICP证123123号</view>
+					<view class="beian">粤ICP备2025494494号</view>
 				</view>
 			</view>
 		</block>
@@ -742,6 +800,20 @@
 		onLoad(e) {
 			console.log(this.token);
 			this.XCXIsSelect = this.$queue.getData("XCXIsSelect");
+			var that=this
+			uni.$on('changeRole',function(res){
+				console.log(res.userType)
+				if(res.userType==1){
+				that.getUserInfo();
+				that.getUserData();
+				}else{
+					 that.getCompany();
+				}
+				that.$queue.changeTabbar(res.userType)
+			})
+		},
+		onUnload(){
+			uni.$off('changeRole')
 		},
 		onShow() {
 			this.token = uni.getStorageSync("token");
@@ -1230,23 +1302,30 @@
 							uni.setStorageSync("companyId", res.data.companyId);
 						}
 						if (res.data.userType == 1 || res.data.userType == null) {
+							
 							this.userType = 1;
 							uni.setStorageSync("userType", 1);
+							
 							if (res.data.isUserVip == 1) {
 								//判断用户是否是vip
 								this.isVip = true;
+								uni.setStorageSync("isUserVip", 1);
 							} else {
 								this.isVip = false;
 							}
 						} else {
 							this.userType = 2;
 							uni.setStorageSync("userType", 2);
+							uni.setStorageSync("vipDueTimes", res.data.vipDueTimes?res.data.vipDueTimes:0);
+							uni.setStorageSync("vipPostTimes", res.data.vipPostTimes?res.data.vipPostTimes:0);
 							if (res.data.isCompanyVip == 1) {
 								//判断企业用户是否是vip
 								this.isCompanyVip = true;
+								uni.setStorageSync("isCompanyVip", 0);
 							} else {
 								this.isCompanyVip = false;
 							}
+							
 						}
 					}
 				});
@@ -1306,6 +1385,7 @@
 					if (res.code == 0 && res.data) {
 						this.companyStatus = res.data.status;
 						uni.setStorageSync("companyStatus", this.companyStatus);
+						uni.setStorageSync("companyName",  res.data.companyAllName);
 					} else {
 						this.companyStatus = "";
 					}
@@ -1392,7 +1472,6 @@
 			},
 			// 切换身份
 			bindQe() {
-
 				let that = this;
 				if (uni.getStorageSync("userId")) {
 				let index=3-this.userType

+ 4 - 2
pages/my/jobApplicant/guidePage.vue

@@ -110,17 +110,19 @@
 			},
 //修改用户身份状态
 			updateUserResumes(userType) {
+				var that=this
 				// 调用接口提交
 				uni.showLoading({
 					title: "提交中..."
 				});
-				this.$Request.postJson("/app/user/updateUserResumes", {
+				this.$Request.postJson("/app/user/updateUserEntity", {
 						userType: userType
 					})
 					.then((res) => {
 						uni.hideLoading();
 						if (res.code === 0) {
 							uni.setStorageSync('userType', userType)
+							that.$queue.changeTabbar(userType)
 							return true
 						} else {
 							return false
@@ -136,7 +138,7 @@
 						});
 						return false
 					});
-			}
+			},
 
 		},
 	};

+ 212 - 97
pages/my/jobPosting.vue

@@ -6,8 +6,27 @@
 				<view class="title">发布社招</view>
 				<view class="desc">{{companyName}}</view>
 				<view class="step">
-					<u-steps :list="numList" mode="number" :current="0" ></u-steps>
+					<u-steps :list="numList" mode="number" :current="0"></u-steps>
 				</view>
+
+				<view class="check-title-big">招聘模式</view>
+				<view class="check-select radioseletvi">
+					<radio-group @change="onRadioChange">
+						<view class="select-txt radioseletview">
+							<label class="radio radioselet">
+								<radio value="0" :checked="true" class="radio-size" />普通岗位招聘
+							</label>
+							<label class="radio radioselet">
+								<radio value="1" class="radio-size" />急聘
+							</label>
+							<text
+								style="position: absolute;right: 0;bottom: 18px;font-size: 12px;color: rgba(120, 130, 138, 1);">急聘职位剩余{{vipDueTimes}}个</text>
+						</view>
+					</radio-group>
+
+				</view>
+
+
 				<view class="check-title">招聘类型</view>
 				<view class="check-box">
 					<view class="check-item" :class="{ 'is-check': check == index }" v-for="(item, index) in peopleList"
@@ -20,9 +39,7 @@
 				</view>
 				<view class="check-title-big">岗位描述</view>
 				<view class="check-select" @click="goJobContent">
-					<view class="select-txt">{{
-            this.text ? this.text : "介绍工作内容、职位要求"
-          }}</view>
+					<view class="select-txt">{{this.text ? this.text : "介绍工作内容、职位要求" }}</view>
 					<u-icon name="arrow-down" color="#D3D3D6" size="22"></u-icon>
 				</view>
 				<view class="txt-desc">注:职位名称、职位类型等发布后不可修改</view>
@@ -36,12 +53,16 @@
 	export default {
 		data() {
 			return {
+				selectedValue: 0, // 默认选中值
 				peopleList: ["社招全职", "应届生校园招聘", "实习生招聘", "兼职招聘"],
 				check: 0,
+				isCompanyVip: 0,
+				vipDueTimes: 0,
+				vipPostTimes: 0,
 				text: "",
-				status:"",
+				status: "",
 				companyName: "",
-				companyId:"",
+				companyId: "",
 				numList: [{
 						name: "填写基本信息",
 					},
@@ -64,26 +85,36 @@
 			// 接收上个页面传递的公司名称参数
 			if (options.companyName) {
 				this.companyName = decodeURIComponent(options.companyName);
-				console.log('接收的公司名称:', this.companyName);
+			}else{
+				this.companyName = uni.getStorageSync('companyName')
 			}
-			 this.descListener = uni.$on("jobDescUpdated", (data) => {
-			      console.log("收到岗位描述数据:", data);
-			      this.text = data.desc; // 赋值给当前页变量
-			    });
+			this.descListener = uni.$on("jobDescUpdated", (data) => {
+				this.text = data.desc; // 赋值给当前页变量
+			});
 			this.jobListener = uni.$on('jobs', (data) => {
 				console.log('接收从B页传来的数据:', data);
 				// 手动更新 A 页的 data
 				this.jobInfo = data;
-
 			});
 			if (options.companyId) {
 				this.companyId = options.companyId;
-				console.log('接收的公司ID:', this.companyId);
+			}else{
+				this.companyId = uni.getStorageSync('companyId')
 			}
 			if (options.status) {
-				this.status = decodeURIComponent(options.status);
-				console.log('接收的公司状态:', this.status);
+				this.status = options.status;
+			}else{
+				this.status = uni.getStorageSync('companyStatus')
 			}
+			this.isCompanyVip = uni.getStorageSync('isCompanyVip') || 0
+			this.vipDueTimes = uni.getStorageSync('vipDueTimes') || 0
+			this.vipPostTimes = uni.getStorageSync('vipPostTimes') || 0
+			
+			
+			console.log('接收的公司名称:', this.companyName);
+			console.log("收到岗位描述数据:", this.text);
+			console.log('接收的公司ID:', this.companyId);
+			console.log('接收的公司状态:', this.status);
 
 		},
 		onUnload() {
@@ -109,6 +140,40 @@
 					url: `/package/jobIntention/editJob`,
 				});
 			},
+			//radio 选中变化时触发
+			onRadioChange(e) {
+				// 获取选中的值
+
+
+				// 根据值做不同处理
+				if (this.selectedValue === 0) {
+					console.log('选中了:普通岗位招聘');
+					// 执行普通岗位招聘的逻辑
+				} else if (this.selectedValue === 1) {
+					console.log('选中了:急聘');
+					if (!this.isCompanyVip) {
+						uni.showToast({
+							title: '对不起,您还不是会员,不能发布急聘。',
+							icon: 'none',
+							duration: 2000
+						});
+						return
+					}
+					if (this.vipDueTimes < 1) {
+						uni.showToast({
+							title: '对不起,您的次数已经用完,不能发布。',
+							icon: 'none',
+							duration: 2000
+						});
+						return
+					}
+
+					// 执行急聘的逻辑
+				}
+				this.selectedValue = e.detail.value;
+
+
+			},
 
 			//提交
 			goJobPostingSecond() {
@@ -118,102 +183,125 @@
 					title: '提交中...'
 				});
 
-//校验数据
-
-  // 校验数据
-  const validate = () => {
-
-    // 2. 校验岗位描述(positionDetails)
-    if (!this.text || this.text.trim() === '') {
-      uni.hideLoading();
-      uni.showToast({
-        title: '岗位描述不能为空',
-        icon: 'none',
-        duration: 2000
-      });
-      return false;
-    }
-    if (this.text.length > 500) {
-      uni.hideLoading();
-      uni.showToast({
-        title: '岗位描述不能超过500字',
-        icon: 'none',
-        duration: 2000
-      });
-      return false;
-    }
-    // 校验是否包含违规内容(简单示例,可根据实际需求扩展)
-    const illegalChars = /QQ|微信|电话|手机号|\?/g;
-    if (illegalChars.test(this.text)) {
-      uni.hideLoading();
-      uni.showToast({
-        title: '岗位描述不能包含联系方式或特殊符号',
-        icon: 'none',
-        duration: 2000
-      });
-      return false;
-    }
-
-    // 3. 校验岗位分类信息(假设ruleClassifyId是必选)
-    if (!this.jobInfo?.ruleClassifyId) {
-      uni.hideLoading();
-      uni.showToast({
-        title: '请选择岗位分类',
-        icon: 'none',
-        duration: 2000
-      });
-      return false;
-    }
-    if (!this.jobInfo?.ruleClassifyName || this.jobInfo?.ruleClassifyName=='请选择要招聘的职位') {
-      uni.hideLoading();
-      uni.showToast({
-        title: '岗位分类名称异常,请重新选择',
-        icon: 'none',
-        duration: 2000
-      });
-      return false;
-    }
-
-    // 4. 校验orderId(如果有实际业务含义,可根据需求调整)
-    // if (!this.orderId || this.orderId < 1) {
-    //   uni.hideLoading();
-    //   uni.showToast({
-    //     title: '订单信息异常',
-    //     icon: 'none',
-    //     duration: 2000
-    //   });
-    //   return false;
-    // }
-
-    // 所有校验通过
-    return true;
-  };
-
-  // 执行校验,通过后再提交
-  if (!validate()) {
-    return; // 校验失败,终止提交
-  }
+				//校验数据
+
+				// 校验数据
+				const validate = () => {
+
+					// 2. 校验岗位描述(positionDetails)
+					if (!this.text || this.text.trim() === '') {
+						uni.hideLoading();
+						uni.showToast({
+							title: '岗位描述不能为空',
+							icon: 'none',
+							duration: 2000
+						});
+						return false;
+					}
+					if (this.text.length > 500) {
+						uni.hideLoading();
+						uni.showToast({
+							title: '岗位描述不能超过500字',
+							icon: 'none',
+							duration: 2000
+						});
+						return false;
+					}
+					// 校验是否包含违规内容(简单示例,可根据实际需求扩展)
+					const illegalChars = /QQ|微信|电话|手机号|\?/g;
+					if (illegalChars.test(this.text)) {
+						uni.hideLoading();
+						uni.showToast({
+							title: '岗位描述不能包含联系方式或特殊符号',
+							icon: 'none',
+							duration: 2000
+						});
+						return false;
+					}
+
+					// 3. 校验岗位分类信息(假设ruleClassifyId是必选)
+					if (!this.jobInfo?.ruleClassifyId) {
+						uni.hideLoading();
+						uni.showToast({
+							title: '请选择岗位分类',
+							icon: 'none',
+							duration: 2000
+						});
+						return false;
+					}
+					if (!this.jobInfo?.ruleClassifyName || this.jobInfo?.ruleClassifyName == '请选择要招聘的职位') {
+						uni.hideLoading();
+						uni.showToast({
+							title: '岗位分类名称异常,请重新选择',
+							icon: 'none',
+							duration: 2000
+						});
+						return false;
+					}
+
+					// 4. 校验orderId(如果有实际业务含义,可根据需求调整)
+					// if (!this.orderId || this.orderId < 1) {
+					//   uni.hideLoading();
+					//   uni.showToast({
+					//     title: '订单信息异常',
+					//     icon: 'none',
+					//     duration: 2000
+					//   });
+					//   return false;
+					// }
+
+					// 所有校验通过
+					return true;
+				};
+
+				// 执行校验,通过后再提交
+				if (!validate()) {
+					return; // 校验失败,终止提交
+				}
+
+
+				if (this.selectedValue == 1) {//急聘刚
+					if (!this.isCompanyVip) {
+						uni.showToast({
+							title: '对不起,您还不是会员,不能发布急聘。',
+							icon: 'none',
+							duration: 2000
+						});
+						return
+					}
+					if (this.vipDueTimes < 1) {
+						uni.showToast({
+							title: '对不起,您的次数已经用完,不能发布。',
+							icon: 'none',
+							duration: 2000
+						});
+						return
+					}
+				}
+
+
 				const data = {
 					type: this.check,
+					isDue: this.selectedValue,
 					positionDetails: this.text,
 					ruleClassifyId: this.jobInfo.ruleClassifyId,
 					ruleClassifyName: this.jobInfo.ruleClassifyName,
-					orderId:1
+					orderId: 1
 				}
-		
+
 				// 发送请求
 				this.$Request.postJson("/app/postPush/savePostPush", data)
 					.then((res) => {
 						uni.hideLoading();
-							
+
 						if (res.code === 0) {
 							uni.showToast({
 								title: '提交成功',
 								icon: 'success'
 							});
-							console.log("sssssss",this.companyId)
-							var pid=res.data || ""
-							if(!pid){
+							console.log("sssssss", this.companyId)
+							var pid = res.data || ""
+							if (!pid) {
 								uni.showToast({
 									title: '系统错误,请重新提交',
 									icon: 'none'
@@ -223,7 +311,9 @@
 							// 提交成功后跳转到职位发布页面
 							setTimeout(() => {
 								uni.navigateTo({
-									url: "/pages/my/jobPostingSecond?pid="+pid+"&status="+this.status+"&companyName="+this.companyName+'&companyId='+this.companyId
+									url: "/pages/my/jobPostingSecond?pid=" + pid + "&status=" + this
+										.status + "&companyName=" + this.companyName + '&companyId=' +
+										this.companyId
 								});
 							}, 1500);
 						} else {
@@ -329,6 +419,31 @@
 					.select-txt {}
 				}
 
+				.radioseletvi {
+					position: relative;
+				}
+
+				.radioseletview {
+					display: flex;
+					flex-direction: column;
+					justify-content: space-between;
+					font-size: 14px;
+				}
+
+				.radioselet {
+					display: block;
+					margin-top: 10px;
+				}
+
+				.radio-size {
+					transform: scale(0.5);
+					/* 放大到1.5倍,可根据需要调整数值 */
+					/* 可选:调整位置避免偏移 */
+				}
+
+
+
+
 				.check-box {
 					width: 100%;
 					display: grid;

+ 63 - 5
pages/my/jobPostingSecond.vue

@@ -26,7 +26,7 @@
 				<!-- 薪资范围 -->
 				<view class="check-title-big">薪资范围</view>
 				<view class="check-select" @click="showMoney = true">
-					<view class="select-txt">{{ selectedSalary || "请选择合理的薪资范围" }}</view>
+					<view class="select-txt">{{ selectedSalary+'——'+salaryTimes || "请选择合理的薪资范围" }}</view>
 					<u-icon name="arrow-down" color="#D3D3D6" size="22"></u-icon>
 				</view>
 
@@ -90,11 +90,13 @@
 				companyId: "",
 				status: 1,
 				pid: "",
+				salaryTimes:"",
 
 				// 选择器显示控制
 				showExper: false,
 				showLevel: false,
 				showMoney: false,
+				
 
 				// 经验选择数据源
 				listExper: [{
@@ -114,12 +116,12 @@
 						value: "3-5年"
 					},
 					{
-						label: "5-10年",
-						value: "5-10年"
+						label: "5-8年",
+						value: "5-8年"
 					},
 					{
-						label: "10年以上",
-						value: "10年以上"
+						label: "8年以上",
+						value: "8年以上"
 					},
 				],
 
@@ -246,6 +248,56 @@
 							label: "50k"
 						},
 					],
+					[
+					    {
+					        "value": "12薪",
+					        "label": "12薪"
+					    },
+					    {
+					        "value": "13薪",
+					        "label": "13薪"
+					    },
+					    {
+					        "value": "14薪",
+					        "label": "14薪"
+					    },
+					    {
+					        "value": "15薪",
+					        "label": "15薪"
+					    },
+					    {
+					        "value": "16薪",
+					        "label": "16薪"
+					    },
+					    {
+					        "value": "17薪",
+					        "label": "17薪"
+					    },
+					    {
+					        "value": "18薪",
+					        "label": "18薪"
+					    },
+					    {
+					        "value": "19薪",
+					        "label": "19薪"
+					    },
+					    {
+					        "value": "20薪",
+					        "label": "20薪"
+					    },
+					    {
+					        "value": "21薪",
+					        "label": "21薪"
+					    },
+					    {
+					        "value": "22薪",
+					        "label": "22薪"
+					    },
+					    {
+					        "value": "23薪",
+					        "label": "23薪"
+					    }
+					]
 				],
 
 				numList: [{
@@ -270,6 +322,8 @@
 			if (options.status) {
 				this.status = decodeURIComponent(options.status);
 				console.log('接收的公司状态:', this.status);
+			}else{
+				this.status = uni.getStorageSync('companyStatus')
 			}
 			this.fundListener = uni.$on("fundData", (data) => {
 				console.log("接收到的福利数据:", data);
@@ -334,10 +388,13 @@
 			// 处理薪资范围选择(核心修复)
 			onMoneyConfirm(selectedItems) {
 				// 多列选择器返回数组,取每列选中的label拼接
+				console.log(selectedItems)
 				if (Array.isArray(selectedItems) && selectedItems.length >= 2) {
 					const min = selectedItems[0]?.label || "";
 					const max = selectedItems[1]?.label || "";
+					const xin = selectedItems[2]?.label || "";
 					this.selectedSalary = `${min}-${max}`;
+					this.salaryTimes=`${xin}`
 				}
 				this.showMoney = false;
 			},
@@ -436,6 +493,7 @@
 					province: this.stationName.province,
 					city: this.stationName.city,
 					county: this.stationName.district,
+					salaryTimes:this.salaryTimes
 
 				};
 

+ 96 - 6
pages/my/switchRoles.vue

@@ -4,8 +4,8 @@
     <view class="roles-content">
       <view class="content">
         <image src="/static/images/my/zhaopingzhe.svg" mode="scaleToFill" />
-        <view class="roles-desc">你当前的身份是“招聘者”</view>
-        <view class="roles-btn" @click="goBusinessLicense">切换为“求职者”身份</view>
+        <view class="roles-desc">你当前的身份是“{{userType==1?'求职者':'招聘者'}}”</view>
+        <view class="roles-btn" @click="bindQe">切换为“{{userType==2?'求职者':'招聘者'}}”身份</view>
       </view>
     </view>
   </view>
@@ -14,15 +14,105 @@
 import navBar from "@/components/nav-bar/index.vue";
 export default {
   data() {
-    return {};
+    return {
+		userType:1
+	}
   },
   components: {
     navBar,
   },
+  onLoad(){
+	this.getUserInfo()
+  },
   methods: {
-    goBusinessLicense(){
-        uni.navigateTo({ url: '/pages/my/businessLicense' })
-    }
+	/**
+	 * 获取个人信息
+	 */
+	getUserInfo() {
+		this.$Request.get("/app/user/selectUserById").then((res) => {
+			if (res.code == 0) {
+				
+				if (res.data.userType == 1 || res.data.userType == null) {
+					this.userType = 1;
+					uni.setStorageSync("userType", 1);
+				} else {
+					this.userType = 2;
+					uni.setStorageSync("userType", 2);
+				}
+			}
+		});
+	},
+	// 切换身份
+	bindQe() {
+		let that = this;
+		if (uni.getStorageSync("userId")) {
+		let index=3-this.userType
+	
+			if (index == 1) {
+				//企业换个人
+				uni.showModal({
+					title: "提示",
+					content: "确认切换到求职者身份吗?",
+					confirmColor: "#016BF6",
+					complete(ret) {
+						if (ret.confirm) {
+							let data = {
+							  userType: 1,
+							};
+							that.$Request.postT("/app/user/updateUserEntity", data).then((res) => {
+							  if (res.code == 0) {
+								  uni.$emit('changeRole',{userType:index})
+								  uni.navigateBack()
+							  }
+							});
+	
+	
+						}
+					},
+				});
+	
+			} else if (index == 2) {
+				//个人换企业
+				uni.showModal({
+					title: "提示",
+					content: "确认切换到招聘者身份吗?",
+					confirmColor: "#016BF6",
+					complete(ret) {
+						if (ret.confirm) {
+							 uni.$emit('changeRole',{userType:index})
+							 uni.navigateBack()
+						}
+					},
+				});
+			}
+		} else {
+			this.noLogin();
+		}
+	},
+	//未登录
+	noLogin() {
+		// uni.showModal({
+		// 	title: '提示',
+		// 	content: '您还未登录,请先登录',
+		// 	confirmColor:'#016BF6',
+		// 	success: function(res) {
+		// 		if (res.confirm) {
+		// 			console.log('用户点击确定');
+		// 			// uni.reLaunch({
+		// 			// 	url:'/pages/public/login'
+		// 			// })
+		// 			uni.navigateTo({
+		// 				url: '/pages/public/login'
+		// 			})
+		// 		} else if (res.cancel) {
+		// 			console.log('用户点击取消');
+		// 		}
+		// 	}
+		// })
+		uni.navigateTo({
+			url: "/pages/public/login",
+		});
+	},
   },
 };
 </script>

+ 2 - 2
pages/my/userinfo.vue

@@ -101,7 +101,7 @@
 			</view>
 			
 			<!-- 我的公司 -->
-			<view v-if="false" class="usermain-item item-padding">
+			<view class="usermain-item item-padding">
 				<view class="usermain-item-title">我的公司</view>
 				<view>
 					<view class="form-input-selector" @click="selectCompany">
@@ -113,7 +113,7 @@
 			</view>
 			
 			<!-- 我的职务 -->
-			<view v-if="false" class="usermain-item item-padding">
+			<view class="usermain-item item-padding">
 				<view class="usermain-item-title">我的职务</view>
 				<view>
 					<view class="form-input-selector" @click="selectPosition">

+ 234 - 26
pages/recruitmentData/communicationRecords.vue

@@ -59,10 +59,10 @@
                <view class="talent-content">
                  <!-- 头像和基本信息 -->
                  <view class="talent-header">
-                   <image :src="record.avatar" class="talent-avatar" mode="aspectFill"></image>
+                   <image :src="record.userAvatar" class="talent-avatar" mode="aspectFill"></image>
                    <view class="talent-info">
                      <view class="talent-name-section">
-                       <view class="talent-name">{{ record.name }}</view>
+                       <view class="talent-name">{{ record.userName }}</view>
                        <view class="talent-tags">
                          <view class="status-tag online" v-if="record.isOnline">在线</view>
                          <view class="status-tag hot" v-if="record.isHot">热门搜索</view>
@@ -71,31 +71,33 @@
                      </view>
                      <!-- 经验和薪资 -->
                      <view class="talent-experience">
-                       <text class="experience-text">{{ record.experience }}</text>
-                       <text class="education-salary">{{ record.education }} {{ record.salary }}</text>
-                       <text class="status-text">{{ record.jobStatus }}</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>
                  
                  <!-- 求职期望 -->
                  <view class="job-expectation">
                    <image src="../../static/images/xiangzi.svg" class="job-icon" mode="aspectFit"></image>
-                   <text class="expectation-text">求职期望: {{ record.jobExpectation }}</text>
+                   <text class="expectation-text">求职期望: {{ record.expectedPosition }}</text>
                  </view>
                  
                  <!-- 技能标签 -->
                  <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 }}
@@ -104,7 +106,7 @@
                  
                  <!-- 工作描述 -->
                  <view class="job-description">
-                   <text class="description-text">{{ record.description }}</text>
+                   <text class="description-text">{{ record.workContent }}</text>
                  </view>
                </view>
              </view>
@@ -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)
      },
@@ -348,8 +417,94 @@ export default {
   onLoad() {
     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()
     },
@@ -369,16 +524,27 @@ 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('跳转到面试管理')
       uni.navigateTo({
         url: '/pages/recruitmentData/interviewManage'
       })
-    }
+    },
+	getData(){
+		this.$Request.getT("/app/chat/chatUser").then(res=>{
+			console.log(res);
+			this.communicationRecords = res.records //沟通记录
+		})
+	},
+  goNav(url){
+    uni.navigateTo({
+      url: url
+    })
+  }
  }
 }
 </script>
@@ -858,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>

+ 94 - 19
pages/recruitmentData/dataCenter.vue

@@ -16,14 +16,26 @@
     <!-- Filter Section -->
     <view class="filter-section">
       <view class="filter-buttons">
-        <view class="filter-btn" @click="selectDateRange">
+        <!-- <view class="filter-btn" @click="selectDateRange">
           <text class="filter-text">2025.07.30-08.06</text>
           <u-icon name="arrow-down" color="#016BF6" size="16"></u-icon>
-        </view>
-        <view class="filter-btn" @click="selectPosition">
+        </view> -->
+        <!-- <view class="filter-btn" @click="selectPosition">
           <text class="filter-text">亚马逊运营总监</text>
           <u-icon name="arrow-down" color="#016BF6" size="16"></u-icon>
-        </view>
+        </view> -->
+        <picker @change="changeDate" :value="weekIndex" :range="weekList" :range-key="'name'">
+          <view class="filter-btn" >
+            <text class="filter-text">{{weekList.length?weekList[weekIndex].name:'/'}}</text>
+            <u-icon name="arrow-down" color="#016BF6" size="16"></u-icon>
+          </view>
+		    </picker>
+        <picker @change="changeZw" :value="zwIndex" :range="zwList" :range-key="'name'">
+			    <view class="filter-btn">
+			    	<text class="filter-text">{{zwList.length?zwList[zwIndex].name:'/'}}</text>
+			    	<u-icon name="arrow-down" color="#016BF6" size="16"></u-icon>
+			    </view>
+		    </picker>
       </view>
     </view>
 
@@ -49,14 +61,14 @@
              <view class="data-item">
                <text class="data-label">我看过</text>
                <view class="data-value-wrapper">
-                 <text class="data-value">1120</text>
+                 <text class="data-value">{{dataStatics.iSaw}}</text>
                  <text class="data-unit">人</text>
                </view>
              </view>
              <view class="data-item">
                <text class="data-label">看过我</text>
                <view class="data-value-wrapper">
-                 <text class="data-value">2120</text>
+                 <text class="data-value">{{dataStatics.sawMe}}</text>
                  <text class="data-unit">人</text>
                </view>
              </view>
@@ -78,14 +90,14 @@
              <view class="data-item">
                <text class="data-label">我沟通</text>
                <view class="data-value-wrapper">
-                 <text class="data-value">1120</text>
+                 <text class="data-value">{{ dataStatics.iCommunicated }}</text>
                  <text class="data-unit">人</text>
                </view>
              </view>
              <view class="data-item">
                <text class="data-label">求职者</text>
                <view class="data-value-wrapper">
-                 <text class="data-value">2120</text>
+                 <text class="data-value">{{ dataStatics.candidateCommunicated }}</text>
                  <text class="data-unit">人</text>
                </view>
              </view>
@@ -107,31 +119,31 @@
              <view class="data-item">
                <text class="data-label">合计</text>
                <view class="data-value-wrapper">
-                 <text class="data-value">1120</text>
+                 <text class="data-value">{{dataStatics.receivedResumes+dataStatics.exchangedContact}}</text>
                  <text class="data-unit">人</text>
                </view>
              </view>
              <view class="data-item">
                <text class="data-label">获取简历</text>
                <view class="data-value-wrapper">
-                 <text class="data-value">2120</text>
+                 <text class="data-value">{{dataStatics.receivedResumes}}</text>
                  <text class="data-unit">人</text>
                </view>
              </view>
              <view class="data-item">
-               <text class="data-label">交换电话</text>
+               <text class="data-label">交换电话/微信</text>
                <view class="data-value-wrapper">
-                 <text class="data-value">2120</text>
+                 <text class="data-value">{{dataStatics.exchangedContact}}</text>
                  <text class="data-unit">人</text>
                </view>
              </view>
-             <view class="data-item">
+             <!-- <view class="data-item">
                <text class="data-label">交换微信</text>
                <view class="data-value-wrapper">
                  <text class="data-value">2120</text>
                  <text class="data-unit">人</text>
                </view>
-             </view>
+             </view> -->
            </view>
          </view>
        </view>
@@ -150,14 +162,14 @@
              <view class="data-item">
                <text class="data-label">邀约面试</text>
                <view class="data-value-wrapper">
-                 <text class="data-value">1120</text>
+                 <text class="data-value">{{dataStatics.acceptedInterview}}</text>
                  <text class="data-unit">人</text>
                </view>
              </view>
              <view class="data-item">
                <text class="data-label">接受面试</text>
                <view class="data-value-wrapper">
-                 <text class="data-value">2120</text>
+                 <text class="data-value">{{dataStatics.acceptedInterview}}</text>
                  <text class="data-unit">人</text>
                </view>
              </view>
@@ -170,21 +182,84 @@
 
 <script>
 import navBar from "@/components/nav-bar/index.vue";
-
+import { getPrevious8Weeks } from './dateFormate'
 export default {
   components: {
     navBar
   },
   data() {
     return {
-      statusBarHeight: 0
+      statusBarHeight: 0,
+      zwList:[],
+      zwIndex:0,
+      weekList:[],
+      weekIndex:0,
+      dataStatics:{}
     }
   },
   onLoad() {
     const systemInfo = uni.getSystemInfoSync()
-    this.statusBarHeight = systemInfo.statusBarHeight || 0
+    this.statusBarHeight = systemInfo.statusBarHeight || 0;
+    this.getZwList()
+    this.weekList=[]
+    getPrevious8Weeks(new Date()).forEach(it=>{
+      // this.weekList.push([
+      //   it[0],it[1],it.join('~')
+      // ]),
+      this.weekList.push({
+        start:it[0],
+        end:it[1],
+        name:it.join('~')
+      })
+    })
   },
   methods: {
+    changeDate(e){
+      this.weekIndex=e.detail.value;
+      this.getDataStatics()
+    },
+    getZwList(){
+	    this.$Request.getT("/app/postPush/getMyPostPush").then(res=>{
+		    res.data.records.forEach(item=>{
+		    	this.zwList.push({
+		    		name:item.ruleClassifyName,
+		    		id:item.postPushId
+		    	})
+		    })
+        this.getDataStatics()
+	    })
+	  },
+    changeZw(e){
+      this.zwIndex=e.detail.value;
+      this.getDataStatics()
+    },
+    getDataStatics(){
+		  let data = {
+		  	postPushId:this.zwList[this.zwIndex].id,
+		  	todayStart:this.formatDateRange(new Date(),new Date())[0],
+		  	todayEnd:this.formatDateRange(new Date(),new Date())[1],
+		  }
+		  this.$Request.getT("/app/user/userYesterdayData",data).then(res=>{
+        this.dataStatics=res.data;
+		  })
+	  },
+    formatDateRange(startDate, endDate) {
+	    // 格式化日期为 YYYY-MM-DD 格式
+	    const formatDate = (date) => {
+	        const year = date.getFullYear();
+	        const month = String(date.getMonth() + 1).padStart(2, '0');
+	        const day = String(date.getDate()).padStart(2, '0');
+	        return `${year}-${month}-${day}`;
+	    };
+	    
+	    // 创建开始日期的 00:00:00
+	    const startDateTime = `${formatDate(startDate)} 00:00:00`;
+	    
+	    // 创建结束日期的 23:59:59
+	    const endDateTime = `${formatDate(endDate)} 23:59:59`;
+	    
+	    return [startDateTime, endDateTime];
+	  },
     goBack() {
       uni.navigateBack()
     },

+ 40 - 0
pages/recruitmentData/dateFormate.js

@@ -0,0 +1,40 @@
+export function  getPrevious8Weeks(currentDate) {
+    // 确保传入的是Date对象
+    const date = new Date(currentDate);
+    
+    // 获取当前日期是星期几(0-6,0代表周日)
+    const currentDay = date.getDay();
+    
+    // 计算当前周的周一(将周日作为一周的最后一天)
+    const mondayOffset = currentDay === 0 ? -6 : 1 - currentDay;
+    const currentMonday = new Date(date);
+    currentMonday.setDate(date.getDate() + mondayOffset);
+    
+    const result = [];
+    
+    // 生成前8个自然周的日期范围(从上一周开始,不包含当前周)
+    for (let i = 1; i <= 8; i++) {
+      const weekStart = new Date(currentMonday);
+      weekStart.setDate(currentMonday.getDate() - i * 7);
+      
+      const weekEnd = new Date(weekStart);
+      weekEnd.setDate(weekStart.getDate() + 6);
+      
+      // 格式化日期为 YYYY-MM-DD
+      const startStr = formatDate(weekStart);
+      const endStr = formatDate(weekEnd);
+      
+      result.push([startStr, endStr]);
+    }
+    
+    return result;
+  }
+  
+  // 辅助函数:格式化日期为 YYYY-MM-DD
+  function formatDate(date) {
+    const year = date.getFullYear();
+    const month = String(date.getMonth() + 1).padStart(2, '0');
+    const day = String(date.getDate()).padStart(2, '0');
+    return `${year}-${month}-${day}`;
+  }
+  

+ 89 - 21
pages/recruitmentData/index.vue

@@ -28,10 +28,12 @@
             <text>今日数据</text>
             <image src="/static/images/qiehuan.svg" class="switch-icon" mode="aspectFit" @click="goToDataCenter"></image>
           </view>
-          <view class="filter-btn" @click="goToDataCenter">
-            <text class="filter-text">亚马逊运营总监</text>
-            <u-icon name="arrow-down" color="#016BF6" size="16"></u-icon>
-          </view>
+		  <picker @change="changeZw" :value="zwIndex" :range="zwList" :range-key="'name'">
+			<view class="filter-btn">
+				<text class="filter-text">{{zwList.length?zwList[zwIndex].name:''}}</text>
+				<u-icon name="arrow-down" color="#016BF6" size="16"></u-icon>
+			</view>
+		  </picker>
         </view>
         
         <view class="data-grid">
@@ -55,7 +57,7 @@
       </view>
 
       <!-- 今日权益使用量卡片 -->
-      <view class="benefits-card">
+      <!-- <view class="benefits-card">
         <view class="card-title">今日权益使用量</view>
         
         <view class="benefits-list">
@@ -64,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>
@@ -73,7 +74,6 @@
               </view>
             </view>
             
-            <!-- 招聘职位和进度条区域 -->
             <view class="benefit-content">
               <view class="benefit-type-container">
                 <text class="benefit-type">{{ benefit.type }}</text>
@@ -92,7 +92,7 @@
             </view>
           </view>
         </view>
-      </view>
+      </view> -->
     </view>
     </view>
   </view>
@@ -109,52 +109,112 @@ export default {
     return {
       statusBarHeight: 0,
       todayData: [
-        { title: '我看过', number: 1120, change: -9 },
-        { title: '看过我', number: 1120, change: -9 },
-        { title: '我沟通', number: 1120, change: -9 },
-        { title: '求职者沟通', number: 1120, change: -9 },
-        { title: '收获简历', number: 1120, change: -9 },
-        { title: '交换电话微信', number: 1120, change: -9 },
-        { title: '接受面试', number: 1120, change: -9 }
+        { title: '我看过', number: 0, change: 0 },
+        { title: '看过我', number: 0, change: -9 },
+        { title: '我沟通', number: 0, change: -9 },
+        { title: '求职者沟通', number: 0, change:0 },
+        { title: '收获简历', number: 0, change: 0 },
+        { title: '交换电话微信', number: 0, change: 0 },
+        { title: '接受面试', number: 0, change: 0 }
       ],
       benefitsData: [
         {
           action: '查看',
           type: '招聘职位',
-          used: 4,
+          used: 0,
           total: 10,
           isUrgent: false
         },
         {
           action: '沟通',
           type: '招聘职位',
-          used: 4,
+          used: 0,
           total: 10,
           isUrgent: false
         },
         {
           action: '查看',
           type: '急聘职位',
-          used: 4,
+          used: 0,
           total: 10,
           isUrgent: true
         },
         {
           action: '沟通',
           type: '急聘职位',
-          used: 4,
+          used: 0,
           total: 10,
           isUrgent: true
         }
-      ]
+      ],
+	    zwList:[],
+	    zwIndex:0,
+	  
     }
   },
   onLoad() {
     // 获取状态栏高度
     const systemInfo = uni.getSystemInfoSync()
     this.statusBarHeight = systemInfo.statusBarHeight || 0
+	// this.getData()
+	this.getZwList()
   },
   methods: {
+	getZwList(){
+	  this.$Request.getT("/app/postPush/getMyPostPush").then(res=>{
+		  res.data.records.forEach(item=>{
+		  	this.zwList.push({
+		  		name:item.ruleClassifyName,
+		  		id:item.postPushId
+		  	})
+		  })
+			this.getDataStatics()
+	  })
+	},
+	getDataStatics(){
+		let data = {
+			postPushId:this.zwList[this.zwIndex].id,
+			todayStart:this.formatDateRange(new Date(),new Date())[0],
+			todayEnd:this.formatDateRange(new Date(),new Date())[1],
+		}
+		this.$Request.getT("/app/user/userYesterdayData",data).then(res=>{
+      this.todayData[0].number=res.data.iSaw;
+      this.todayData[0].change=res.data.tyIsaw;
+      this.todayData[1].number=res.data.sawMe;
+      this.todayData[1].change=res.data.tySawMe;
+      this.todayData[2].number=res.data.iCommunicated;
+      this.todayData[2].change=res.data.tyICommunicated;
+      this.todayData[3].number=res.data.tyCandidateCommunicated;
+      this.todayData[3].change=res.data.tyCandidateCommunicated;
+      this.todayData[4].number=res.data.receivedResumes;
+      this.todayData[4].change=res.data.tyReceivedResumes;
+      this.todayData[5].number=res.data.exchangedContact;
+      this.todayData[5].change=res.data.tyExchangedContact;
+      this.todayData[6].number=res.data.acceptedInterview;
+      this.todayData[6].change=res.data.tyAcceptedInterview;
+
+    })
+	},
+	formatDateRange(startDate, endDate) {
+	    // 格式化日期为 YYYY-MM-DD 格式
+	    const formatDate = (date) => {
+	        const year = date.getFullYear();
+	        const month = String(date.getMonth() + 1).padStart(2, '0');
+	        const day = String(date.getDate()).padStart(2, '0');
+	        return `${year}-${month}-${day}`;
+	    };
+	    
+	    // 创建开始日期的 00:00:00
+	    const startDateTime = `${formatDate(startDate)} 00:00:00`;
+	    
+	    // 创建结束日期的 23:59:59
+	    const endDateTime = `${formatDate(endDate)} 23:59:59`;
+	    
+	    return [startDateTime, endDateTime];
+	},
+	changeZw (e){
+		this.zwIndex=e.detail.value
+	},
     getBenefitIcon(action) {
       switch(action) {
         case '查看':
@@ -176,11 +236,19 @@ export default {
     toggleWeekData() {
       // 切换周数据视图
       console.log('切换周数据')
+	  uni.navigateTo({
+	    url: '/pages/recruitmentData/dataCenter'
+	  })
     },
     showDetail(item) {
       // 显示详情
       console.log('显示详情:', item)
-    }
+    },
+	getData(){
+		this.$Request.getT("/app/user/userData").then(res=>{
+			
+		})
+	},
   }
 }
 </script>

+ 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 + ')'
+      })
     }
   }
 }

文件差異過大導致無法顯示
+ 1015 - 637
pages/talentSearch/index.vue


+ 5 - 5
pages/talentSearch/resumeDetail.vue

@@ -29,7 +29,7 @@
 
 			<view class="current-job">
 				<image src="../../static/images/aixin.svg" class="job-icon" mode="aspectFit"></image>
-				<text class="job-text">{{workExpList[0].position || '暂无'}}</text>
+				<text class="job-text">{{workExpList&&workExpList[0].position || '暂无'}}</text>
 			</view>
 
 			<view class="availability">
@@ -54,7 +54,7 @@
 			<!-- 个人优势 -->
 			<view class="section-item">
 				<view class="advantage-content">
-					{{resumeList.adv || '这是求职者的个人优势这是求职者的个人优势这是求职者的个人优势这是求职者的个人优势这是求职者的个人优势这是求职者的个人优势这是求职者的个人优。(最多展示三行)'}}
+					{{resumeList.adv || '暂无个人优势。(最多展示三行)'}}
 				</view>
 			</view>
 
@@ -74,8 +74,8 @@
 
 				<view class="job-expectation">
 					<text
-						class="expectation-text">{{intentions[0].ruleClassifyName || '无'}},{{intentions[0].citys || '无'}}</text>
-					<text class="salary-range">{{intentions[0].salaryRange}}元</text>
+						class="expectation-text">{{intentions&&intentions[0].ruleClassifyName || '无'}},{{intentions&&intentions[0].citys || '无'}}</text>
+					<text class="salary-range">{{intentions&&intentions[0].salaryRange}}元</text>
 				</view>
 			</view>
 
@@ -166,7 +166,7 @@
 				</view>
 
 				<view class="certificates-grid">
-					<view class="certificate-tag" v-for="skll in skills || {}" :key="index">{{skll.skillName}}</view>
+					<view class="certificate-tag" v-for="(skll,index) in skills || {}" :key="index">{{skll.skillName}}</view>
 				</view>
 			</view>
 

二進制
static/images/my/icon/utils/benefits.png


二進制
static/images/my/icon/utils/company.png


二進制
static/images/my/icon/utils/invoice.png


二進制
static/images/my/icon/utils/kefu.png


二進制
static/images/my/icon/utils/privacy.png


二進制
static/images/my/icon/utils/rulerCenter.png


二進制
static/images/my/icon/utils/user.png


二進制
static/images/my/icon/utils/wallet.png


二進制
static/tabbar/niu.png


二進制
static/tabbar/niu2.png


部分文件因文件數量過多而無法顯示