communicationRecords.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868
  1. <template>
  2. <view class="page">
  3. <!-- Custom Navbar -->
  4. <view class="custom-navbar">
  5. <view class="navbar-content">
  6. <view class="navbar-left" @click="goBack">
  7. <u-icon name="arrow-leftward" color="color: rgba(51, 51, 51, 1);" size="36"></u-icon>
  8. </view>
  9. <view class="navbar-title">沟通记录</view>
  10. <view class="navbar-right"></view>
  11. </view>
  12. </view>
  13. <view class="tab-section-bg">
  14. <text class="title-text">沟通记录</text>
  15. <text class="interview-manage" @click="goToInterviewManage">面试管理</text>
  16. </view>
  17. <!-- Tab Navigation -->
  18. <view class="tab-section">
  19. <u-tabs
  20. :list="tabs"
  21. :current="activeTab"
  22. @change="switchTab"
  23. :is-scroll="false"
  24. :height="88"
  25. :font-size="24"
  26. active-color="rgba(1, 107, 246, 1)"
  27. inactive-color="rgba(102, 102, 102, 1)"
  28. :bar-width="80"
  29. :bar-height="4"
  30. :gutter="40"
  31. bg-color="#ffffff"
  32. :bar-style="{
  33. borderRadius: '2rpx'
  34. }"
  35. ></u-tabs>
  36. </view>
  37. <!-- Content Section -->
  38. <view class="content-section">
  39. <!-- Communication Records List -->
  40. <view class="communication-list" v-if="activeTab === 0">
  41. <!-- 有数据时显示列表 -->
  42. <view v-if="communicationRecords.length > 0">
  43. <!-- Date Group -->
  44. <view class="date-group" v-for="(group, groupIndex) in groupedRecords" :key="groupIndex">
  45. <view class="date-header">
  46. <text class="date-text">{{ group.date }}</text>
  47. </view>
  48. <!-- Records for this date -->
  49. <view
  50. class="talent-card"
  51. v-for="(record, recordIndex) in group.records"
  52. :key="recordIndex"
  53. @click="goToResumeDetail(record)"
  54. >
  55. <view class="talent-content">
  56. <!-- 头像和基本信息 -->
  57. <view class="talent-header">
  58. <image :src="record.userAvatar" class="talent-avatar" mode="aspectFill"></image>
  59. <view class="talent-info">
  60. <view class="talent-name-section">
  61. <view class="talent-name">{{ record.userName }}</view>
  62. <view class="talent-tags">
  63. <view class="status-tag online" v-if="record.isOnline">在线</view>
  64. <view class="status-tag hot" v-if="record.isHot">热门搜索</view>
  65. <view class="status-tag active" v-if="record.lastActive">{{ record.lastActive }}</view>
  66. </view>
  67. </view>
  68. <!-- 经验和薪资 -->
  69. <view class="talent-experience">
  70. <text class="experience-text">{{ record.resumesWorkExperience }}</text>
  71. <text class="education-salary">{{ record.resumesEducation }} {{ record.minSalary }}-{{record.maxSalary}}</text>
  72. <text class="status-text">{{ record.resumesStatus==1?'在职&考虑机会':"离职" }}</text>
  73. </view>
  74. </view>
  75. </view>
  76. <!-- 当前职位 -->
  77. <view class="current-job" v-if="record.currentJob">
  78. <image src="../../static/images/aixin.svg" class="job-icon" mode="aspectFit"></image>
  79. <text class="job-text">{{ record.currentJob }}</text>
  80. <text class="work-period">{{ record.workPeriod }}</text>
  81. </view>
  82. <!-- 求职期望 -->
  83. <view class="job-expectation">
  84. <image src="../../static/images/xiangzi.svg" class="job-icon" mode="aspectFit"></image>
  85. <text class="expectation-text">求职期望: {{ record.expectedPosition }}</text>
  86. </view>
  87. <!-- 技能标签 -->
  88. <view class="skill-tags">
  89. <view
  90. class="skill-tag"
  91. v-for="(skill, skillIndex) in record.skills"
  92. :key="skillIndex"
  93. >
  94. {{ skill }}
  95. </view>
  96. </view>
  97. <!-- 工作描述 -->
  98. <view class="job-description">
  99. <text class="description-text">{{ record.workContent }}</text>
  100. </view>
  101. </view>
  102. </view>
  103. </view>
  104. </view>
  105. <!-- 空状态显示 -->
  106. <view class="empty-state" v-else>
  107. <view class="empty-illustration">
  108. <image src="../../static/images/index/Hrempty.svg" class="empty-image" mode="aspectFit" />
  109. </view>
  110. </view>
  111. </view>
  112. <!-- Interview Records List -->
  113. <view class="interview-list" v-if="activeTab === 1">
  114. <!-- Date Selector -->
  115. <view class="date-selector">
  116. <view class="week-days">
  117. <text class="day-name" v-for="day in currentWeekDays" :key="day.name">{{ day.name }}</text>
  118. </view>
  119. <view class="week-dates">
  120. <view
  121. class="date-item"
  122. :class="{ active: date.isSelected }"
  123. v-for="date in currentWeekDates"
  124. :key="date.value"
  125. @click="selectDate(date)"
  126. >
  127. <text class="date-value">{{ date.value }}</text>
  128. </view>
  129. </view>
  130. </view>
  131. <!-- Interview Records -->
  132. <view class="interview-records">
  133. <!-- 有数据时显示列表 -->
  134. <view v-if="interviewRecords.length > 0">
  135. <view
  136. class="interview-record"
  137. :class="{ 'today': record.isToday, 'tomorrow': record.isTomorrow }"
  138. v-for="(record, index) in interviewRecords"
  139. :key="index"
  140. @click="goToInterviewDetail(record)"
  141. >
  142. <view class="record-content">
  143. <view class="record-left">
  144. <text class="date-label">{{ record.dateLabel }}</text>
  145. <text class="time-label">{{ record.time }}</text>
  146. </view>
  147. <view class="record-divider"></view>
  148. <view class="record-right">
  149. <text class="candidate-name">{{ record.candidateName }}</text>
  150. <text class="candidate-details">{{ record.experience }} {{ record.education }} {{ record.salary }}</text>
  151. </view>
  152. </view>
  153. </view>
  154. </view>
  155. <!-- 空状态显示 -->
  156. <view class="empty-state" v-else>
  157. <view class="empty-illustration">
  158. <image src="../../static/images/index/Hrempty.svg" class="empty-image" mode="aspectFit" />
  159. </view>
  160. </view>
  161. </view>
  162. </view>
  163. <!-- 收藏标签页 -->
  164. <view class="favorite-list" v-if="activeTab === 2">
  165. <!-- 有数据时显示列表 -->
  166. <view v-if="favoriteRecords.length > 0">
  167. <!-- 收藏记录列表内容 -->
  168. </view>
  169. <!-- 空状态显示 -->
  170. <view class="empty-state" v-else>
  171. <view class="empty-illustration">
  172. <image src="../../static/images/index/Hrempty.svg" class="empty-image" mode="aspectFit" />
  173. </view>
  174. </view>
  175. </view>
  176. <!-- 收藏职位标签页 -->
  177. <view class="favorite-jobs-list" v-if="activeTab === 3">
  178. <!-- 有数据时显示列表 -->
  179. <view v-if="favoriteJobs.length > 0">
  180. <!-- 收藏职位列表内容 -->
  181. </view>
  182. <!-- 空状态显示 -->
  183. <view class="empty-state" v-else>
  184. <view class="empty-illustration">
  185. <image src="../../static/images/index/Hrempty.svg" class="empty-image" mode="aspectFit" />
  186. </view>
  187. </view>
  188. </view>
  189. </view>
  190. </view>
  191. </template>
  192. <script>
  193. export default {
  194. data() {
  195. return {
  196. statusBarHeight: 0,
  197. activeTab: 0,
  198. tabs: [
  199. { name: '沟通过' },
  200. { name: '面试' },
  201. { name: '收藏' },
  202. { name: '收藏职位' }
  203. ],
  204. communicationRecords: [
  205. {
  206. id: 1,
  207. name: '刘先生',
  208. avatar: '../../static/images/avator.png',
  209. isOnline: true,
  210. isHot: true,
  211. experience: '8年',
  212. education: '本科',
  213. salary: '10-15K',
  214. jobStatus: '在职&考虑机会',
  215. currentJob: '通拓集团·店铺运营',
  216. jobExpectation: '亚马逊运营',
  217. skills: ['精品', '铺货', 'TikTok', '平台运营', '投放策略', '3C数码'],
  218. description: '负责Amazon英国、欧洲站、制定推广与销售计划,达成团队要求的销售业绩;做好数据的统计分析工作,收集、分析...',
  219. workPeriod: '1年10个月',
  220. date: '07-24'
  221. },
  222. {
  223. id: 2,
  224. name: '刘先生',
  225. avatar: '../../static/images/avator.png',
  226. isOnline: true,
  227. isHot: true,
  228. experience: '8年',
  229. education: '本科',
  230. salary: '10-15K',
  231. jobStatus: '在职&考虑机会',
  232. currentJob: '通拓集团·店铺运营',
  233. jobExpectation: '亚马逊运营',
  234. skills: ['精品', '铺货', 'TikTok', '平台运营', '投放策略', '3C数码'],
  235. description: '负责Amazon英国、欧洲站、制定推广与销售计划,达成团队要求的销售业绩;做好数据的统计分析工作,收集、分析...',
  236. workPeriod: '1年10个月',
  237. date: '07-25'
  238. }
  239. ],
  240. // 面试相关数据
  241. selectedDate: null, // 当前选中的日期
  242. // 收藏相关数据
  243. favoriteRecords: [], // 收藏记录(空数组,显示空状态)
  244. favoriteJobs: [], // 收藏职位(空数组,显示空状态)
  245. interviewRecords: [
  246. {
  247. dateLabel: '今天',
  248. time: '20:40',
  249. candidateName: '刘先生',
  250. experience: '8年',
  251. education: '本科',
  252. salary: '10-15K',
  253. isToday: true,
  254. isTomorrow: false
  255. },
  256. {
  257. dateLabel: '明天',
  258. time: '20:40',
  259. candidateName: '刘先生',
  260. experience: '8年',
  261. education: '本科',
  262. salary: '10-15K',
  263. isToday: false,
  264. isTomorrow: true
  265. },
  266. {
  267. dateLabel: '8月15日',
  268. time: '20:40',
  269. candidateName: '刘先生',
  270. experience: '8年',
  271. education: '本科',
  272. salary: '10-15K',
  273. isToday: false,
  274. isTomorrow: false
  275. }
  276. ]
  277. }
  278. },
  279. computed: {
  280. groupedRecords() {
  281. const groups = {}
  282. this.communicationRecords.forEach(record => {
  283. if (!groups[record.date]) {
  284. groups[record.date] = {
  285. date: record.date,
  286. records: []
  287. }
  288. }
  289. groups[record.date].records.push(record)
  290. })
  291. return Object.values(groups)
  292. },
  293. // 当前周的星期名称
  294. currentWeekDays() {
  295. const weekDays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
  296. return weekDays.map(name => ({ name }))
  297. },
  298. // 当前周的日期
  299. currentWeekDates() {
  300. const today = new Date()
  301. const currentDay = today.getDay() // 0-6,0是周日
  302. // 获取本周一的日期(周一开始)
  303. const monday = new Date(today)
  304. // 如果今天是周日(0),则往前推6天到周一
  305. // 如果今天是周一(1),则往前推0天
  306. // 如果今天是周二(2),则往前推1天
  307. const daysToMonday = currentDay === 0 ? 6 : currentDay - 1
  308. monday.setDate(today.getDate() - daysToMonday)
  309. // 生成本周7天的日期
  310. const weekDates = []
  311. for (let i = 0; i < 7; i++) {
  312. const date = new Date(monday)
  313. date.setDate(monday.getDate() + i)
  314. const isToday = date.toDateString() === today.toDateString()
  315. const isSelected = this.selectedDate ?
  316. date.toDateString() === this.selectedDate.toDateString() : isToday
  317. weekDates.push({
  318. value: date.getDate().toString(),
  319. date: date,
  320. isSelected: isSelected
  321. })
  322. }
  323. return weekDates
  324. }
  325. },
  326. onLoad() {
  327. const systemInfo = uni.getSystemInfoSync()
  328. this.statusBarHeight = systemInfo.statusBarHeight || 0
  329. this.getData()
  330. },
  331. methods: {
  332. goBack() {
  333. uni.navigateBack()
  334. },
  335. switchTab(index) {
  336. this.activeTab = index
  337. },
  338. goToResumeDetail(record) {
  339. console.log('查看简历详情:', record)
  340. uni.navigateTo({
  341. url: `/pages/talentSearch/resumeDetail?resumeId=${record.id}`
  342. })
  343. },
  344. selectDate(date) {
  345. // 选中当前点击的日期
  346. this.selectedDate = date.date
  347. console.log('选中日期:', date.date)
  348. },
  349. goToInterviewDetail(record) {
  350. console.log('查看面试详情:', record)
  351. // uni.navigateTo({
  352. // url: `/pages/interview/detail?id=${record.id}`
  353. // })
  354. },
  355. goToInterviewManage() {
  356. console.log('跳转到面试管理')
  357. uni.navigateTo({
  358. url: '/pages/recruitmentData/interviewManage'
  359. })
  360. },
  361. getData(){
  362. this.$Request.getT("/app/chat/chatUser").then(res=>{
  363. console.log(res);
  364. this.communicationRecords = res.records //沟通记录
  365. })
  366. },
  367. }
  368. }
  369. </script>
  370. <style lang="scss" scoped>
  371. .page {
  372. height: 100vh;
  373. overflow: hidden;
  374. }
  375. .tab-section-bg {
  376. position: fixed;
  377. top: 150rpx;
  378. left: 0;
  379. right: 0;
  380. z-index: 1000;
  381. background-color: #ffffff;
  382. padding: 32rpx;
  383. display: flex;
  384. justify-content: space-between;
  385. align-items: center;
  386. .title-text {
  387. color: rgba(51, 51, 51, 1);
  388. font-family: DM Sans;
  389. font-size: 48rpx;
  390. font-weight: 700;
  391. line-height: 60rpx;
  392. letter-spacing: 0px;
  393. }
  394. .interview-manage {
  395. color: rgba(1, 107, 246, 1);
  396. font-family: DM Sans;
  397. font-size: 28rpx;
  398. font-weight: 400;
  399. line-height: 60rpx;
  400. letter-spacing: 0px;
  401. text-align: left;
  402. }
  403. }
  404. /* Custom Navbar */
  405. .custom-navbar {
  406. position: fixed;
  407. top: 0;
  408. left: 0;
  409. right: 0;
  410. z-index: 1000;
  411. background-color: #ffffff;
  412. padding-top: 80rpx;
  413. }
  414. .navbar-content {
  415. display: flex;
  416. align-items: center;
  417. justify-content: space-between;
  418. height: 44px;
  419. padding: 20rpx;
  420. }
  421. .navbar-left {
  422. width: 44px;
  423. height: 44px;
  424. display: flex;
  425. align-items: center;
  426. justify-content: center;
  427. }
  428. .navbar-title {
  429. color: rgba(51, 51, 51, 1);
  430. font-family: DM Sans;
  431. font-size: 30rpx;
  432. font-weight: 700;
  433. line-height: 52rpx;
  434. letter-spacing: 0.5%;
  435. text-align: center;
  436. }
  437. .navbar-right {
  438. width: 44px;
  439. }
  440. /* Tab Section */
  441. .tab-section {
  442. position: fixed;
  443. top: 250rpx;
  444. left: 0;
  445. right: 0;
  446. background: white;
  447. z-index: 99;
  448. }
  449. /* Content Section */
  450. .content-section {
  451. margin-top: 330rpx;
  452. padding: 20rpx;
  453. height: calc(100vh - 330rpx) !important;
  454. overflow-y: auto;
  455. }
  456. /* Date Group */
  457. .date-group {
  458. margin-bottom: 20rpx;
  459. }
  460. .date-header {
  461. margin-bottom: 16rpx;
  462. }
  463. .date-text {
  464. color: rgba(153, 153, 153, 1);
  465. font-family: DM Sans;
  466. font-size: 24rpx;
  467. font-weight: 400;
  468. line-height: 32rpx;
  469. margin-left: 32rpx;
  470. }
  471. /* Talent Card */
  472. .talent-card {
  473. background-color: #ffffff;
  474. border-radius: 16rpx;
  475. margin-bottom: 20rpx;
  476. padding: 30rpx;
  477. // box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
  478. }
  479. .talent-content {
  480. .talent-header {
  481. display: flex;
  482. align-items: flex-start;
  483. .talent-avatar {
  484. width: 80rpx;
  485. height: 80rpx;
  486. border-radius: 50%;
  487. margin-right: 20rpx;
  488. }
  489. .talent-info {
  490. flex: 1;
  491. .talent-name-section {
  492. display: flex;
  493. align-items: center;
  494. justify-content: flex-start;
  495. width: 100%;
  496. margin-bottom: 6rpx;
  497. }
  498. .talent-name {
  499. color: rgba(51, 51, 51, 1);
  500. font-family: DM Sans;
  501. font-size: 28rpx;
  502. font-weight: 500;
  503. line-height: 36rpx;
  504. letter-spacing: 0.5%;
  505. text-align: left;
  506. margin-right: 16rpx;
  507. }
  508. .talent-tags {
  509. display: flex;
  510. flex-wrap: wrap;
  511. gap: 10rpx;
  512. .status-tag {
  513. padding: 8rpx;
  514. border-radius: 12rpx;
  515. font-size: 18rpx;
  516. font-family: DM Sans;
  517. font-weight: 400;
  518. line-height: 20rpx;
  519. letter-spacing: -0.5px;
  520. text-align: left;
  521. &.online {
  522. background: rgba(213, 255, 231, 1);
  523. color: rgba(29, 209, 104, 1);
  524. }
  525. &.hot {
  526. background: rgba(252, 233, 220, 1);
  527. color: rgba(1, 107, 246, 1);
  528. }
  529. &.active {
  530. color: rgba(153, 153, 153, 1);
  531. }
  532. }
  533. }
  534. }
  535. }
  536. .talent-experience {
  537. display: flex;
  538. align-items: center;
  539. margin-bottom: 12rpx;
  540. gap: 16rpx;
  541. color: rgba(156, 164, 171, 1);
  542. font-family: DM Sans;
  543. font-size: 24rpx;
  544. font-weight: 400;
  545. line-height: 32rpx;
  546. letter-spacing: 0.5%;
  547. text-align: left;
  548. }
  549. .current-job {
  550. display: flex;
  551. align-items: center;
  552. margin-bottom: 12rpx;
  553. .job-icon {
  554. width: 40rpx;
  555. height: 40rpx;
  556. margin-right: 8rpx;
  557. }
  558. .job-text {
  559. color: rgba(156, 164, 171, 1);
  560. font-family: DM Sans;
  561. font-size: 24rpx;
  562. font-weight: 400;
  563. line-height: 40rpx;
  564. letter-spacing: 0.5%;
  565. text-align: left;
  566. flex: 1;
  567. }
  568. .work-period {
  569. color: rgba(153, 153, 153, 1);
  570. font-family: DM Sans;
  571. font-size: 22rpx;
  572. font-weight: 400;
  573. line-height: 28rpx;
  574. }
  575. }
  576. .job-expectation {
  577. display: flex;
  578. align-items: center;
  579. margin-bottom: 16rpx;
  580. .job-icon {
  581. width: 40rpx;
  582. height: 40rpx;
  583. margin-right: 8rpx;
  584. }
  585. .expectation-text {
  586. color: rgba(156, 164, 171, 1);
  587. font-family: DM Sans;
  588. font-size: 24rpx;
  589. font-weight: 400;
  590. line-height: 40rpx;
  591. letter-spacing: 0.5%;
  592. text-align: left;
  593. }
  594. }
  595. .skill-tags {
  596. display: flex;
  597. flex-wrap: wrap;
  598. gap: 10rpx;
  599. margin-bottom: 16rpx;
  600. .skill-tag {
  601. padding: 8rpx;
  602. background: rgba(198, 198, 198, 0.1);
  603. border-radius: 12rpx;
  604. color: rgba(153, 153, 153, 1);
  605. font-family: DM Sans;
  606. font-size: 20rpx;
  607. font-weight: 400;
  608. line-height: 20rpx;
  609. letter-spacing: -0.5px;
  610. text-align: left;
  611. }
  612. }
  613. .job-description {
  614. margin-bottom: 12rpx;
  615. .description-text {
  616. color: rgba(97, 110, 124, 1);
  617. font-family: DM Sans;
  618. font-size: 24rpx;
  619. font-weight: 400;
  620. line-height: 32rpx;
  621. letter-spacing: 0px;
  622. text-align: left;
  623. }
  624. }
  625. }
  626. /* Interview List Styles */
  627. .interview-list {
  628. padding: 0 20rpx;
  629. }
  630. /* Date Selector */
  631. .date-selector {
  632. background: #ffffff;
  633. border-radius: 12rpx;
  634. padding: 24rpx 0;
  635. // margin-bottom: 20rpx;
  636. // border: 0.5px solid rgba(227, 231, 236, 1);
  637. }
  638. .week-days {
  639. display: flex;
  640. justify-content: space-between;
  641. margin-bottom: 16rpx;
  642. }
  643. .day-name {
  644. color: rgba(153, 153, 153, 1);
  645. font-family: DM Sans;
  646. font-size: 24rpx;
  647. font-weight: 400;
  648. line-height: 32rpx;
  649. text-align: center;
  650. flex: 1;
  651. }
  652. .week-dates {
  653. display: flex;
  654. justify-content: space-between;
  655. }
  656. .date-item {
  657. flex: 1;
  658. display: flex;
  659. justify-content: center;
  660. align-items: center;
  661. height: 60rpx;
  662. border-radius: 50%;
  663. cursor: pointer;
  664. min-width: 60rpx;
  665. max-width: 60rpx;
  666. }
  667. .date-item.active {
  668. background: rgba(1, 107, 246, 1);
  669. }
  670. .date-value {
  671. color: rgba(51, 51, 51, 1);
  672. font-family: DM Sans;
  673. font-size: 28rpx;
  674. font-weight: 400;
  675. line-height: 36rpx;
  676. text-align: center;
  677. }
  678. .date-item.active .date-value {
  679. color: #ffffff;
  680. }
  681. /* Interview Records */
  682. .interview-records {
  683. background: #ffffff;
  684. border-radius: 12rpx;
  685. padding: 24rpx 0;
  686. // border: 0.5px solid rgba(227, 231, 236, 1);
  687. }
  688. .interview-record {
  689. display: flex;
  690. position: relative;
  691. border-radius: 8rpx;
  692. margin-bottom: 16rpx;
  693. }
  694. .interview-record.today {
  695. background: rgba(250, 187, 143, 1);
  696. }
  697. .interview-record:not(.today) {
  698. background: rgba(221, 221, 221, 1);
  699. }
  700. .interview-record:last-child {
  701. margin-bottom: 0;
  702. }
  703. /* Record Content */
  704. .record-content {
  705. flex: 1;
  706. display: flex;
  707. align-items: center;
  708. gap: 24rpx;
  709. }
  710. .record-left {
  711. display: flex;
  712. flex-direction: column;
  713. min-width: 80rpx;
  714. padding: 32rpx;
  715. }
  716. .record-divider {
  717. width: 10rpx;
  718. height: 100%;
  719. background: rgba(1, 107, 246, 1);
  720. }
  721. .record-right {
  722. flex: 1;
  723. display: flex;
  724. flex-direction: column;
  725. gap: 8rpx;
  726. }
  727. .date-label {
  728. color: rgba(106, 106, 106, 1);
  729. font-family: DM Sans;
  730. font-size: 16rpx;
  731. font-weight: 400;
  732. line-height: 40rpx;
  733. letter-spacing: 0.5%;
  734. text-align: right;
  735. }
  736. .time-label {
  737. color: rgba(106, 106, 106, 1);
  738. font-family: DM Sans;
  739. font-size: 24rpx;
  740. font-weight: 400;
  741. line-height: 32rpx;
  742. letter-spacing: 0.5%;
  743. text-align: left;
  744. }
  745. .candidate-name {
  746. color: rgba(51, 51, 51, 1);
  747. font-family: DM Sans;
  748. font-size: 32rpx;
  749. font-weight: 600;
  750. line-height: 40rpx;
  751. }
  752. .candidate-details {
  753. color: rgba(102, 102, 102, 1);
  754. font-family: DM Sans;
  755. font-size: 24rpx;
  756. font-weight: 400;
  757. line-height: 32rpx;
  758. }
  759. /* Empty State - 与jobManagement页面保持一致 */
  760. .empty-state {
  761. display: flex;
  762. align-items: center;
  763. justify-content: center;
  764. padding: 40rpx;
  765. .empty-illustration {
  766. margin-bottom: 40rpx;
  767. .empty-image {
  768. width: 700rpx;
  769. height: 800rpx;
  770. }
  771. }
  772. .empty-text {
  773. color: rgba(120, 130, 138, 1);
  774. font-family: DM Sans;
  775. font-size: 28rpx;
  776. font-weight: 400;
  777. line-height: 36rpx;
  778. letter-spacing: 0.5%;
  779. text-align: center;
  780. }
  781. }
  782. </style>