mianshiDetail.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501
  1. <template>
  2. <view class="ms-detail">
  3. <view class="detail-bg"></view>
  4. <nav-bar title="面试详情"></nav-bar>
  5. <view class="detail-index">
  6. <view class="detail-title">已面试08月27日</view>
  7. <view class="detail-item">
  8. <view class="user-title">
  9. <view class="user-img">
  10. <image src="@/static/images/geren.png" mode="aspectFill" />
  11. </view>
  12. <view class="user-name-box">
  13. <view class="user-name-com">深圳市世迪贸易科技有限公司</view>
  14. <view class="user-info-img">
  15. <image src="@/static/images/geren.png" mode="aspectFill" />
  16. <view class="user-name">孙先生·人事经理</view>
  17. </view>
  18. </view>
  19. </view>
  20. <view class="msg-box">
  21. <view class="msg-item">
  22. <view class="msg-label">时间</view>
  23. <view class="msg-value">2025-09-19 20:00:00</view>
  24. </view>
  25. <view class="msg-item">
  26. <view class="msg-label">职位</view>
  27. <view class="msg-value">资深产品经理 15-25K</view>
  28. </view>
  29. <view class="msg-item">
  30. <view class="msg-label">联系人</view>
  31. <view class="msg-value">熊女士</view>
  32. </view>
  33. <view class="msg-item">
  34. <view class="msg-label">备注</view>
  35. <view class="msg-value">请携带一份最新的简历</view>
  36. </view>
  37. <view class="msg-item">
  38. <view class="msg-label">地址</view>
  39. <view class="msg-value">光谷软件园F21602栋</view>
  40. </view>
  41. </view>
  42. </view>
  43. <view class="detail-item">
  44. <view class="process-top">
  45. <view class="process-title">面试进度</view>
  46. <view class="process-status">爽约说明</view>
  47. </view>
  48. <view class="process-index">
  49. <view class="interview-process">
  50. <!-- 流程步骤 -->
  51. <view class="process-steps">
  52. <!-- 步骤1: 面试时间到 -->
  53. <view
  54. class="step-item"
  55. :class="{ active: currentStep >= 1, completed: currentStep > 1 }"
  56. >
  57. <view class="step-icon">
  58. <view class="step-number">1</view>
  59. <view class="step-check" v-if="currentStep > 1">
  60. <u-icon name="checkmark" color="#fff" size="16"></u-icon>
  61. </view>
  62. </view>
  63. <view class="step-content">
  64. <view class="step-title">面试时间到</view>
  65. <view class="step-desc">面试一开始,此时不能取消面试</view>
  66. </view>
  67. <view class="step-line"></view>
  68. </view>
  69. <!-- 步骤2: 面试签到 -->
  70. <view
  71. class="step-item"
  72. :class="{ active: currentStep >= 2, completed: currentStep > 2 }"
  73. >
  74. <view class="step-icon">
  75. <view class="step-number">2</view>
  76. <view class="step-check" v-if="currentStep > 2">
  77. <u-icon name="checkmark" color="#fff" size="16"></u-icon>
  78. </view>
  79. </view>
  80. <view class="step-content">
  81. <view class="step-title">面试签到</view>
  82. <view class="step-desc">到场后请及时签到,可体验面试全流程服务</view>
  83. </view>
  84. <view class="step-line"></view>
  85. </view>
  86. <!-- 步骤3: 进行面试 -->
  87. <view
  88. class="step-item"
  89. :class="{ active: currentStep >= 3, completed: currentStep > 3 }"
  90. >
  91. <view class="step-icon">
  92. <view class="step-number">3</view>
  93. <view class="step-check" v-if="currentStep > 3">
  94. <u-icon name="checkmark" color="#fff" size="16"></u-icon>
  95. </view>
  96. </view>
  97. <view class="step-content">
  98. <view class="step-title">进行面试</view>
  99. <view class="step-desc">面试过程中,如有问题,可向客服投诉</view>
  100. </view>
  101. <view class="step-line"></view>
  102. </view>
  103. <!-- 步骤4: 面试结果 -->
  104. <view
  105. class="step-item"
  106. :class="{ active: currentStep >= 4, completed: currentStep > 4 }"
  107. >
  108. <view class="step-icon">
  109. <view class="step-number">4</view>
  110. <view class="step-check" v-if="currentStep > 4">
  111. <u-icon name="checkmark" color="#fff" size="16"></u-icon>
  112. </view>
  113. </view>
  114. <view class="step-content">
  115. <view class="step-title">面试结果</view>
  116. <view class="step-desc">面试完后30天内可向招聘方获取面试结果</view>
  117. </view>
  118. <view class="step-line"></view>
  119. </view>
  120. <!-- 步骤5: 获取面试结果 -->
  121. <view
  122. class="step-item"
  123. :class="{ active: currentStep >= 5, completed: currentStep > 5 }"
  124. >
  125. <view class="step-icon">
  126. <view class="step-number">5</view>
  127. <view class="step-check" v-if="currentStep > 5">
  128. <u-icon name="checkmark" color="#fff" size="16"></u-icon>
  129. </view>
  130. </view>
  131. <view class="step-content">
  132. <view class="step-title">获取面试结果</view>
  133. <view class="step-desc"></view>
  134. </view>
  135. </view>
  136. </view>
  137. <!-- 操作按钮 -->
  138. <view class="process-actions" v-if="showActions">
  139. <button class="action-btn" v-if="currentStep === 2" @click="handleSignIn">
  140. 立即签到
  141. </button>
  142. <button
  143. class="action-btn"
  144. v-if="currentStep === 3"
  145. @click="handleStartInterview"
  146. >
  147. 开始面试
  148. </button>
  149. <button
  150. class="action-btn"
  151. v-if="currentStep === 4"
  152. @click="handleGetResult"
  153. >
  154. 获取结果
  155. </button>
  156. <button
  157. class="action-btn complaint-btn"
  158. v-if="currentStep === 3"
  159. @click="handleComplaint"
  160. >
  161. 投诉
  162. </button>
  163. </view>
  164. </view>
  165. </view>
  166. </view>
  167. </view>
  168. </view>
  169. </template>
  170. <script>
  171. import navBar from "@/components/nav-bar/index.vue";
  172. export default {
  173. data() {
  174. return {
  175. currentStep: 3,
  176. showActions: true,
  177. };
  178. },
  179. components: {
  180. navBar,
  181. },
  182. method: {
  183. handleSignIn() {
  184. this.$emit("sign-in");
  185. uni.showToast({
  186. title: "签到成功",
  187. icon: "success",
  188. });
  189. },
  190. handleStartInterview() {
  191. this.$emit("start-interview");
  192. },
  193. handleGetResult() {
  194. this.$emit("get-result");
  195. },
  196. handleComplaint() {
  197. this.$emit("complaint");
  198. uni.showModal({
  199. title: "客服投诉",
  200. content: "请描述您遇到的问题",
  201. editable: true,
  202. placeholderText: "请输入问题描述...",
  203. success: (res) => {
  204. if (res.confirm && res.content) {
  205. uni.showToast({
  206. title: "投诉已提交",
  207. icon: "success",
  208. });
  209. }
  210. },
  211. });
  212. },
  213. },
  214. };
  215. </script>
  216. <style scoped lang="scss">
  217. .ms-detail {
  218. position: absolute;
  219. left: 0;
  220. right: 0;
  221. bottom: 0;
  222. top: 0;
  223. .detail-bg {
  224. height: 744rpx;
  225. width: 100%;
  226. background: linear-gradient(180deg, rgba(255, 102, 0, 1), rgba(255, 102, 0, 0) 100%);
  227. position: absolute;
  228. left: 0;
  229. top: 0;
  230. }
  231. .detail-index {
  232. position: relative;
  233. z-index: 2;
  234. padding: 40rpx;
  235. box-sizing: border-box;
  236. .detail-item {
  237. padding: 36rpx;
  238. box-sizing: border-box;
  239. border: 1rpx solid rgba(227, 231, 236, 1);
  240. border-radius: 6px;
  241. background: rgba(255, 255, 255, 1);
  242. margin-top: 20rpx;
  243. .process-top {
  244. display: flex;
  245. justify-content: space-between;
  246. align-items: center;
  247. .process-title {
  248. color: rgba(29, 33, 41, 1);
  249. font-family: DM Sans;
  250. font-size: 24rpx;
  251. font-weight: 500;
  252. line-height: 32rpx;
  253. }
  254. .process-status {
  255. color: #016bf6;
  256. font-family: DM Sans;
  257. font-size: 20rpx;
  258. font-weight: 700;
  259. line-height: 26rpx;
  260. }
  261. }
  262. .user-title {
  263. display: flex;
  264. align-items: center;
  265. .user-img {
  266. overflow: hidden;
  267. width: 80rpx;
  268. height: 80rpx;
  269. border-radius: 50%;
  270. margin-right: 24rpx;
  271. border: 8rpx solid #f6f6f6;
  272. image {
  273. width: 100%;
  274. height: 100%;
  275. }
  276. }
  277. .user-name-box {
  278. .user-name-com {
  279. color: #171725;
  280. font-family: DM Sans;
  281. font-size: 28rpx;
  282. font-weight: 400;
  283. line-height: 44rpx;
  284. text-align: left;
  285. }
  286. .user-info-img {
  287. display: flex;
  288. align-items: center;
  289. margin-top: 8rpx;
  290. image {
  291. width: 40rpx;
  292. height: 40rpx;
  293. border-radius: 50%;
  294. margin-right: 8rpx;
  295. }
  296. .user-name {
  297. color: #9ca4ab;
  298. font-family: DM Sans;
  299. font-size: 16rpx;
  300. font-weight: 400;
  301. line-height: 40rpx;
  302. }
  303. }
  304. }
  305. }
  306. }
  307. }
  308. .msg-box {
  309. .msg-item {
  310. display: flex;
  311. align-items: center;
  312. color: rgba(153, 153, 153, 1);
  313. font-family: DM Sans;
  314. font-size: 24rpx;
  315. font-weight: 400;
  316. line-height: 32rpx;
  317. margin-top: 12rpx;
  318. .msg-label {
  319. min-width: 120rpx;
  320. margin-right: 24rpx;
  321. }
  322. }
  323. }
  324. .detail-title {
  325. color: #fff;
  326. font-size: 60rpx;
  327. font-weight: 500;
  328. font-family: DM Sans;
  329. }
  330. }
  331. .interview-process {
  332. margin-top: 24rpx;
  333. }
  334. .process-header {
  335. margin-bottom: 40rpx;
  336. }
  337. .process-title {
  338. font-size: 36rpx;
  339. font-weight: bold;
  340. color: #333;
  341. }
  342. .process-steps {
  343. position: relative;
  344. }
  345. .step-item {
  346. display: flex;
  347. align-items: flex-start;
  348. margin-bottom: 50rpx;
  349. position: relative;
  350. &:last-child {
  351. margin-bottom: 0;
  352. .step-line {
  353. display: none;
  354. }
  355. }
  356. }
  357. .step-icon {
  358. width: 32rpx;
  359. height: 32rpx;
  360. border-radius: 50%;
  361. background: #f5f5f5;
  362. display: flex;
  363. align-items: center;
  364. justify-content: center;
  365. margin-right: 24rpx;
  366. position: relative;
  367. z-index: 2;
  368. flex-shrink: 0;
  369. }
  370. .step-number {
  371. font-size: 20rpx;
  372. font-weight: bold;
  373. color: #999;
  374. }
  375. .step-check {
  376. display: flex;
  377. justify-content: center;
  378. align-items: center;
  379. }
  380. .step-content {
  381. flex: 1;
  382. }
  383. .step-title {
  384. color: rgba(29, 33, 41, 1);
  385. font-family: DM Sans;
  386. font-size: 24rpx;
  387. font-weight: 600;
  388. line-height: 32rpx;
  389. margin-bottom: 8rpx;
  390. }
  391. .step-desc {
  392. color: rgba(153, 153, 153, 1);
  393. font-family: DM Sans;
  394. font-size: 20rpx;
  395. font-weight: 400;
  396. line-height: 26rpx;
  397. }
  398. .step-line {
  399. position: absolute;
  400. left: 16rpx;
  401. top: 42rpx;
  402. bottom: -30rpx;
  403. width: 2rpx;
  404. background: #f0f0f0;
  405. z-index: 1;
  406. }
  407. /* 激活状态 */
  408. .step-item.active {
  409. .step-icon {
  410. background: #016bf6;
  411. }
  412. .step-number {
  413. color: #fff;
  414. }
  415. .step-title {
  416. color: #016bf6;
  417. font-weight: bold;
  418. }
  419. .step-line {
  420. background: #016bf6;
  421. }
  422. }
  423. /* 完成状态 */
  424. .step-item.completed {
  425. .step-icon {
  426. background: #016bf6;
  427. }
  428. .step-number {
  429. display: none;
  430. }
  431. .step-check {
  432. display: block;
  433. }
  434. }
  435. /* 操作按钮 */
  436. .process-actions {
  437. margin-top: 50rpx;
  438. display: flex;
  439. gap: 20rpx;
  440. flex-wrap: wrap;
  441. }
  442. .action-btn {
  443. flex: 1;
  444. background: #016bf6;
  445. color: #fff;
  446. border: none;
  447. border-radius:100rpx;
  448. padding: 6rpx 24rpx;
  449. font-size: 28rpx;
  450. color: rgba(255, 255, 255, 1);
  451. font-family: DM Sans;
  452. font-size: 24rpx;
  453. font-weight: 400;
  454. text-align: center;
  455. &::after {
  456. border: none;
  457. }
  458. &:active {
  459. background: #009974;
  460. }
  461. }
  462. .complaint-btn {
  463. background: #ff4444;
  464. &:active {
  465. background: #dd3333;
  466. }
  467. }
  468. </style>