index.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866
  1. <template>
  2. <view class="talent-search-page">
  3. <!-- 搜索框 -->
  4. <view class="search flex align-center justify-center" :style="{ paddingTop: (12 + statusBarHeight) + 'px' }">
  5. <view class="search-box">
  6. <view class="dropdown-btn" @click="showDropdown">
  7. <text class="dropdown-text">{{ positionOptions[selectedPosition] }}</text>
  8. <u-icon name="arrow-down" color="#016BF6" size="16"></u-icon>
  9. </view>
  10. <view class="separator"></view>
  11. <input
  12. class="search-input"
  13. v-model="searchKeyword"
  14. placeholder="通过职位关键词查询"
  15. @confirm="custom"
  16. />
  17. </view>
  18. <view class="search-btn" @click="custom">搜索</view>
  19. </view>
  20. <!-- 筛选栏 -->
  21. <view class="topbg-sx-box flex justify-start align-center" :style="{ top: searchBoxHeight }">
  22. <view class="topbg-sx-box-r flex align-center">
  23. <!-- 城市 -->
  24. <view class="topbg-sx-box-r-i flex align-center" style="">
  25. <text style="margin-right: 10rpx;"
  26. @click="goNavs('/pages/index/citySelect')">{{city?city:'选择城市'}}</text>
  27. <u-icon name="arrow-down" color="#00B78F" size="16"
  28. @click="goNavs('/pages/index/citySelect')"></u-icon>
  29. </view>
  30. <!-- 筛选 -->
  31. <view class="topbg-sx-box-filter flex align-center">
  32. <text style="margin-right: 10rpx;"
  33. @click="goNavs('/pages/talentSearch/filter')">筛选</text>
  34. <u-icon name="arrow-down" color="#999999" size="16"
  35. @click="goNavs('/pages/talentSearch/filter')"></u-icon>
  36. </view>
  37. </view>
  38. </view>
  39. <!-- 人才列表 -->
  40. <view class="talent-list" :style="{ marginTop: talentListMarginTop }">
  41. <view
  42. class="talent-card"
  43. v-for="(talent, index) in talentList"
  44. :key="index"
  45. @click="goToResumeDetail(talent)"
  46. >
  47. <view class="talent-content">
  48. <!-- 头像和基本信息 -->
  49. <view class="talent-header">
  50. <image :src="talent.avatar" class="talent-avatar" mode="aspectFill"></image>
  51. <view class="talent-info">
  52. <view class="talent-name-section">
  53. <view class="talent-name">{{ talent.name }}</view>
  54. <view class="talent-tags">
  55. <view class="status-tag online" v-if="talent.isOnline">在线</view>
  56. <view class="status-tag hot" v-if="talent.isHot">热门搜索</view>
  57. <view class="status-tag active" v-if="talent.lastActive">{{ talent.lastActive }}</view>
  58. </view>
  59. </view>
  60. <!-- 经验和薪资 -->
  61. <view class="talent-experience">
  62. <text class="experience-text">{{ talent.experience }}</text>
  63. <text class="education-salary">{{ talent.education }} {{ talent.salary }}</text>
  64. <text class="status-text">{{ talent.jobStatus }}</text>
  65. </view>
  66. </view>
  67. </view>
  68. <!-- 当前职位 -->
  69. <view class="current-job" v-if="talent.currentJob">
  70. <image src="../../static/images/aixin.svg" class="job-icon" mode="aspectFit"></image>
  71. <text class="job-text">{{ talent.currentJob }}</text>
  72. </view>
  73. <!-- 求职期望 -->
  74. <view class="job-expectation">
  75. <image src="../../static/images/xiangzi.svg" class="job-icon" mode="aspectFit"></image>
  76. <text class="expectation-text">求职期望: {{ talent.jobExpectation }}</text>
  77. </view>
  78. <!-- 技能标签 -->
  79. <view class="skill-tags">
  80. <view
  81. class="skill-tag"
  82. v-for="(skill, skillIndex) in talent.skills"
  83. :key="skillIndex"
  84. >
  85. {{ skill }}
  86. </view>
  87. </view>
  88. <!-- 工作描述 -->
  89. <view class="job-description">
  90. <text class="description-text">{{ talent.description }}</text>
  91. </view>
  92. </view>
  93. </view>
  94. </view>
  95. <!-- 职位选择弹窗 -->
  96. <view class="position-modal" v-if="showPositionModal" @click="hidePositionModal">
  97. <view class="position-modal-content" @click.stop>
  98. <!-- 拖拽条 -->
  99. <view class="position-modal-handle"></view>
  100. <!-- 标题 -->
  101. <view class="position-modal-title">选择职位</view>
  102. <!-- 职位选项 -->
  103. <view class="position-options">
  104. <view
  105. class="position-option"
  106. :class="selectedPosition === index ? 'active' : ''"
  107. @click="selectPosition(index)"
  108. v-for="(option, index) in positionOptions"
  109. :key="index"
  110. >
  111. <view class="position-option-icon">
  112. <view class="check-icon" v-if="selectedPosition === index">✓</view>
  113. </view>
  114. <text class="position-option-text">{{ option }}</text>
  115. </view>
  116. </view>
  117. </view>
  118. </view>
  119. </view>
  120. </template>
  121. <script>
  122. export default {
  123. data() {
  124. return {
  125. statusBarHeight: 0, // 状态栏高度
  126. searchKeyword: '',
  127. currentSx: 0,
  128. sxTypeList: [
  129. {
  130. id: 1,
  131. name: '推荐',
  132. },
  133. {
  134. id: 2,
  135. name: '最新',
  136. }
  137. ],
  138. city: '深圳',
  139. county: '',
  140. showSortModalFlag: false,
  141. selectedSort: 0,
  142. sortOptions: ['综合排序', '最新优先', '距离优先'],
  143. showPositionModal: false,
  144. selectedPosition: 0,
  145. positionOptions: ['亚马逊运营', 'TikTok运营', '采购经理', '不限职位'],
  146. city: '深圳',
  147. talentList: [
  148. {
  149. id: 1,
  150. name: '刘**',
  151. avatar: '../../static/images/avator.png',
  152. isOnline: true,
  153. isHot: true,
  154. experience: '8年',
  155. education: '本科',
  156. salary: '10-15K',
  157. jobStatus: '在职&考虑机会',
  158. currentJob: '通拓集团·店铺运营',
  159. jobExpectation: '亚马逊运营',
  160. skills: ['精品', '铺货', 'TikTok', '平台运营', '投放策略', '3C数码'],
  161. description: '负责Amazon英国、欧洲站、制定推广与销售计划,达成团队要求的销售业绩;做好数据的统计分析工作,收集、分析...',
  162. workPeriod: '2021-2024'
  163. },
  164. {
  165. id: 2,
  166. name: '李**',
  167. avatar: '../../static/images/avator.png',
  168. lastActive: '5分钟前活跃',
  169. experience: '25年应届生',
  170. education: '本科',
  171. salary: '8-12K',
  172. jobStatus: '离职&随时到岗',
  173. currentJob: '大连海事学院·法学',
  174. jobExpectation: '亚马逊运营',
  175. skills: ['精品', '铺货', 'TikTok', '平台运营', '投放策略', '3C数码'],
  176. description: '负责Amazon英国、欧洲站、制定推广与销售计划,达成团队要求的销售业绩;做好数据的统计分析工作,收集、分析...',
  177. workPeriod: ''
  178. },
  179. {
  180. id: 3,
  181. name: '李**',
  182. avatar: '../../static/images/avator.png',
  183. lastActive: '刚刚活跃',
  184. experience: '25年应届生',
  185. education: '本科',
  186. salary: '8-12K',
  187. jobStatus: '离职&随时到岗',
  188. currentJob: '臣美科技·小红书运营',
  189. jobExpectation: '亚马逊运营',
  190. skills: ['精品', '铺货', 'TikTok', '平台运营', '投放策略', '3C数码'],
  191. description: '负责Amazon英国、欧洲站、制定推广与销售计划,达成团队要求的销售业绩;做好数据的统计分析工作,收集、分析...',
  192. workPeriod: '2021-2025'
  193. },
  194. {
  195. id: 4,
  196. name: '李**',
  197. avatar: '../../static/images/avator.png',
  198. lastActive: '刚刚活跃',
  199. experience: '25年应届生',
  200. education: '本科',
  201. salary: '8-12K',
  202. jobStatus: '离职&随时到岗',
  203. currentJob: '臣美科技·小红书运营',
  204. jobExpectation: '亚马逊运营',
  205. skills: ['精品', '铺货', 'TikTok', '平台运营', '投放策略', '3C数码'],
  206. description: '负责Amazon英国、欧洲站、制定推广与销售计划,达成团队要求的销售业绩;做好数据的统计分析工作,收集、分析...',
  207. workPeriod: ''
  208. }
  209. ]
  210. }
  211. },
  212. computed: {
  213. // 计算搜索框的总高度(px)
  214. searchBoxHeight() {
  215. // 动态 paddingTop (12 + statusBarHeight) + 搜索框内容高度 + paddingBottom
  216. // 搜索框内容约 52rpx ≈ 26px, paddingBottom 20rpx ≈ 10px
  217. return (12 + this.statusBarHeight + 26 + 10) + 'px';
  218. },
  219. // 计算人才列表的 margin-top(包括搜索框 + 筛选栏)
  220. talentListMarginTop() {
  221. // 搜索框高度 + 筛选栏高度(紧凑布局)
  222. // 筛选栏实际高度约 46px(按钮18px + 内边距16px + 外边距12px)
  223. return (12 + this.statusBarHeight + 26 + 10 + 46) + 'px';
  224. }
  225. },
  226. onLoad() {
  227. // 获取状态栏高度
  228. let systemInfo = uni.getSystemInfoSync();
  229. this.statusBarHeight = systemInfo.statusBarHeight || 0;
  230. },
  231. methods: {
  232. // 返回上一页
  233. goBack() {
  234. uni.navigateBack()
  235. },
  236. // 显示下拉菜单
  237. showDropdown() {
  238. this.showPositionModal = true
  239. },
  240. // 隐藏职位选择弹窗
  241. hidePositionModal() {
  242. this.showPositionModal = false
  243. },
  244. // 选择职位
  245. selectPosition(index) {
  246. this.selectedPosition = index
  247. // 更新下拉按钮显示的文字
  248. const selectedText = this.positionOptions[index]
  249. // 这里可以更新下拉按钮的显示文字
  250. uni.showToast({
  251. title: `已选择: ${selectedText}`,
  252. icon: 'none'
  253. })
  254. this.hidePositionModal()
  255. },
  256. // 搜索
  257. custom() {
  258. console.log('搜索关键词:', this.searchKeyword)
  259. // 这里可以添加搜索逻辑
  260. },
  261. // 跳转页面
  262. goNavs(url) {
  263. uni.navigateTo({
  264. url: url
  265. })
  266. },
  267. // 清空搜索
  268. clear() {
  269. this.searchKeyword = ''
  270. },
  271. // 跳转页面
  272. goNav(url) {
  273. if (uni.getStorageSync('token')) {
  274. uni.navigateTo({
  275. url: url
  276. })
  277. } else {
  278. this.noLogin()
  279. }
  280. },
  281. // 未登录提示
  282. noLogin() {
  283. uni.showModal({
  284. title: '提示',
  285. content: '您还未登录,请先登录',
  286. confirmColor: '#016BF6',
  287. success: function(res) {
  288. if (res.confirm) {
  289. uni.navigateTo({
  290. url: '/pages/public/login'
  291. })
  292. }
  293. }
  294. })
  295. },
  296. // 显示排序弹窗
  297. showSortModal() {
  298. this.showSortModalFlag = true
  299. },
  300. // 隐藏排序弹窗
  301. hideSortModal() {
  302. this.showSortModalFlag = false
  303. },
  304. // 选择排序选项
  305. selectSort(index) {
  306. this.selectedSort = index
  307. uni.showToast({
  308. title: `已选择: ${this.sortOptions[index]}`,
  309. icon: 'none'
  310. })
  311. this.hideSortModal()
  312. },
  313. // 跳转到人才详情
  314. goToResumeDetail(talent) {
  315. console.log('查看人才详情:', talent)
  316. // 跳转到简历详情页面
  317. uni.navigateTo({
  318. url: `/pages/talentSearch/resumeDetail?resumeId=${talent.id || talent.resumeId || ''}`
  319. })
  320. }
  321. }
  322. }
  323. </script>
  324. <style lang="scss" scoped>
  325. // 激活状态样式
  326. .active3 {
  327. flex-direction: row;
  328. justify-content: center;
  329. align-items: center;
  330. padding: 12rpx;
  331. border-radius: 12rpx;
  332. background: #FFFFFF !important;
  333. margin-right: 12rpx;
  334. border: 0.5px solid rgba(1, 107, 246, 1);
  335. color: rgba(1, 107, 246, 1) !important;
  336. font-family: DM Sans;
  337. font-size: 22rpx;
  338. font-weight: 400;
  339. line-height: 20rpx;
  340. letter-spacing: 0px;
  341. text-align: left;
  342. }
  343. .talent-search-page {
  344. min-height: 100vh;
  345. background-color: #f5f5f5;
  346. }
  347. // 搜索框
  348. .search {
  349. position: fixed;
  350. top: 0;
  351. width: 100%;
  352. padding: 0rpx 20rpx 20rpx 20rpx;
  353. // padding-top 已改为动态计算,在模板中通过 :style 设置
  354. background: linear-gradient(180.00deg, rgba(255, 102, 0, 1),rgba(255, 89, 89, 1) 83%);
  355. z-index: 99;
  356. .search-box {
  357. flex: 1;
  358. box-sizing: border-box;
  359. border: 1px solid rgba(227, 231, 236, 1);
  360. border-radius: 24px;
  361. background: rgba(241, 241, 241, 1);
  362. overflow: hidden;
  363. display: flex;
  364. align-items: center;
  365. padding: 0 32rpx;
  366. height: 60rpx;
  367. }
  368. .dropdown-btn {
  369. display: flex;
  370. align-items: center;
  371. padding: 8rpx 16rpx;
  372. background-color: #F1F1F1;
  373. border: 1rpx solid #016BF6;
  374. border-radius: 8rpx;
  375. margin-right: 12rpx;
  376. .dropdown-text {
  377. color: rgba(1, 107, 246, 1);
  378. font-family: DM Sans;
  379. font-size: 20rpx;
  380. font-weight: 400;
  381. line-height: 20rpx;
  382. letter-spacing: -0.5px;
  383. text-align: left;
  384. margin-right: 8rpx;
  385. }
  386. }
  387. .separator {
  388. width: 4rpx;
  389. height: 30rpx;
  390. background-color: rgba(153, 153, 153, 1);
  391. margin-right: 12rpx;
  392. }
  393. .search-input {
  394. flex: 1;
  395. height: 100%;
  396. background: transparent;
  397. color: #333;
  398. font-family: DM Sans;
  399. font-size: 20rpx;
  400. font-weight: 400;
  401. line-height: 48rpx;
  402. letter-spacing: 0.5%;
  403. text-align: left;
  404. &::placeholder {
  405. color: rgba(182, 182, 182, 1);
  406. font-family: DM Sans;
  407. font-size: 20rpx;
  408. font-weight: 400;
  409. line-height: 48rpx;
  410. letter-spacing: 0.5%;
  411. text-align: left;
  412. }
  413. }
  414. .search-btn {
  415. width: 80rpx;
  416. color: rgba(255, 255, 255, 1);
  417. font-family: DM Sans;
  418. font-size: 20rpx;
  419. font-weight: 500;
  420. line-height: 48rpx;
  421. letter-spacing: 0.5%;
  422. text-align: center;
  423. }
  424. }
  425. .search-bar {
  426. display: flex;
  427. align-items: center;
  428. margin-bottom: 20rpx;
  429. .search-input {
  430. flex: 1;
  431. height: 80rpx;
  432. background-color: #f8f8f8;
  433. border-radius: 40rpx;
  434. padding: 0 30rpx;
  435. font-size: 28rpx;
  436. color: #333;
  437. margin-right: 20rpx;
  438. }
  439. .search-btn {
  440. width: 120rpx;
  441. height: 80rpx;
  442. background-color: #016BF6;
  443. color: #ffffff;
  444. border-radius: 40rpx;
  445. display: flex;
  446. align-items: center;
  447. justify-content: center;
  448. font-size: 28rpx;
  449. }
  450. }
  451. .filter-tags {
  452. display: flex;
  453. flex-wrap: wrap;
  454. gap: 16rpx;
  455. .filter-tag {
  456. padding: 12rpx 24rpx;
  457. background-color: #ffffff;
  458. border: 1rpx solid #e5e5e5;
  459. border-radius: 20rpx;
  460. font-size: 24rpx;
  461. color: #666;
  462. }
  463. }
  464. .active3 {
  465. color: #1A1A1A !important;
  466. font-size: 28rpx !important;
  467. font-weight: 800 !important;
  468. }
  469. .topbg-sx-box {
  470. position: fixed;
  471. // top: 160rpx; // 已改为动态计算,在模板中通过 :style 设置
  472. left: 0;
  473. right: 0;
  474. width: 100%;
  475. background-color: #ffffff;
  476. z-index: 98;
  477. padding: 20rpx;
  478. // box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
  479. .topbg-sx-box-l-i {
  480. color: rgba(153, 153, 153, 1);
  481. font-family: DM Sans;
  482. font-size: 24rpx;
  483. font-weight: 400;
  484. line-height: 18px;
  485. letter-spacing: 0%;
  486. text-align: center;
  487. margin-right: 20rpx;
  488. border-radius: 6px;
  489. background: rgba(198, 198, 198, 0.1);
  490. padding: 8rpx 12rpx;
  491. display: inline-block;
  492. min-width: 60rpx;
  493. white-space: nowrap;
  494. &.active3 {
  495. font-family: DM Sans;
  496. font-size: 24rpx !important;
  497. font-weight: 400 !important;
  498. line-height: 18px;
  499. letter-spacing: 0%;
  500. text-align: left;
  501. padding: 8rpx 12rpx !important;
  502. color: rgba(1, 107, 246, 1) !important;
  503. background: rgba(252, 233, 220, 1) !important;
  504. border: 1px solid rgba(1, 107, 246, 1);
  505. }
  506. }
  507. .topbg-sx-box-r-i {
  508. color: rgba(1, 107, 246, 1);
  509. font-family: DM Sans;
  510. font-size: 24rpx;
  511. font-weight: 400;
  512. line-height: 18px;
  513. letter-spacing: 0%;
  514. text-align: center;
  515. margin-right: 20rpx;
  516. border-radius: 6px;
  517. background: rgba(252, 233, 220, 1);
  518. padding: 8rpx 12rpx;
  519. display: inline-block;
  520. min-width: 60rpx;
  521. white-space: nowrap;
  522. cursor: pointer;
  523. transition: all 0.3s ease;
  524. border: 0.5px solid rgba(1, 107, 246, 1);
  525. }
  526. .topbg-sx-box-filter {
  527. color: rgba(153, 153, 153, 1);
  528. font-family: DM Sans;
  529. font-size: 24rpx;
  530. font-weight: 400;
  531. line-height: 18px;
  532. letter-spacing: 0%;
  533. text-align: center;
  534. border-radius: 6px;
  535. background: rgba(198, 198, 198, 0.1);
  536. padding: 8rpx 12rpx;
  537. display: inline-block;
  538. min-width: 60rpx;
  539. white-space: nowrap;
  540. cursor: pointer;
  541. transition: all 0.3s ease;
  542. }
  543. }
  544. .talent-list {
  545. // margin-top: 280rpx; // 已改为动态计算,在模板中通过 :style 设置
  546. padding: 20rpx;
  547. }
  548. .talent-card {
  549. background-color: #ffffff;
  550. border-radius: 16rpx;
  551. margin-bottom: 20rpx;
  552. padding: 30rpx;
  553. box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
  554. }
  555. .talent-content {
  556. .talent-header {
  557. display: flex;
  558. align-items: flex-start;
  559. .talent-avatar {
  560. width: 80rpx;
  561. height: 80rpx;
  562. border-radius: 50%;
  563. margin-right: 20rpx;
  564. }
  565. .talent-info {
  566. flex: 1;
  567. .talent-name-section {
  568. display: flex;
  569. align-items: center;
  570. justify-content: flex-start;
  571. width: 100%;
  572. margin-bottom: 6rpx;
  573. }
  574. .talent-name {
  575. color: rgba(51, 51, 51, 1);
  576. font-family: DM Sans;
  577. font-size: 28rpx;
  578. font-weight: 500;
  579. line-height: 36rx;
  580. letter-spacing: 0.5%;
  581. text-align: left;
  582. margin-right: 16rpx;
  583. }
  584. .talent-tags {
  585. display: flex;
  586. flex-wrap: wrap;
  587. gap: 10rpx;
  588. .status-tag {
  589. padding: 8rpx;
  590. border-radius: 12rpx;
  591. font-size: 18rpx;
  592. font-family: DM Sans;
  593. font-weight: 400;
  594. line-height: 20rpx;
  595. letter-spacing: -0.5px;
  596. text-align: left;
  597. &.online {
  598. background: rgba(213, 255, 231, 1);
  599. color: rgba(29, 209, 104, 1);
  600. }
  601. &.hot {
  602. background: rgba(252, 233, 220, 1);
  603. color: rgba(1, 107, 246, 1);
  604. }
  605. &.active {
  606. color: rgba(153, 153, 153, 1);
  607. }
  608. }
  609. }
  610. }
  611. }
  612. .talent-experience {
  613. display: flex;
  614. align-items: center;
  615. margin-bottom: 12rpx;
  616. gap: 16rpx;
  617. color: rgba(156, 164, 171, 1);
  618. font-family: DM Sans;
  619. font-size: 24rpx;
  620. font-weight: 400;
  621. line-height: 32rpx;
  622. letter-spacing: 0.5%;
  623. text-align: left;
  624. }
  625. .current-job {
  626. display: flex;
  627. align-items: center;
  628. margin-bottom: 12rpx;
  629. .job-icon {
  630. width: 40rpx;
  631. height: 40rpx;
  632. margin-right: 8rpx;
  633. }
  634. .job-text {
  635. color: rgba(156, 164, 171, 1);
  636. font-family: DM Sans;
  637. font-size: 24rpx;
  638. font-weight: 400;
  639. line-height: 40rpx;
  640. letter-spacing: 0.5%;
  641. text-align: left;
  642. }
  643. }
  644. .job-expectation {
  645. display: flex;
  646. align-items: center;
  647. margin-bottom: 16rpx;
  648. .job-icon {
  649. width: 40rpx;
  650. height: 40rpx;
  651. margin-right: 8rpx;
  652. }
  653. .expectation-text {
  654. color: rgba(156, 164, 171, 1);
  655. font-family: DM Sans;
  656. font-size: 24rpx;
  657. font-weight: 400;
  658. line-height: 40rpx;
  659. letter-spacing: 0.5%;
  660. text-align: left;
  661. }
  662. }
  663. .skill-tags {
  664. display: flex;
  665. flex-wrap: wrap;
  666. gap: 10rpx;
  667. margin-bottom: 16rpx;
  668. .skill-tag {
  669. padding: 8rpx;
  670. background: rgba(198, 198, 198, 0.1);
  671. border-radius: 12rpx;
  672. color: rgba(153, 153, 153, 1);
  673. font-family: DM Sans;
  674. font-size: 20rpx;
  675. font-weight: 400;
  676. line-height: 20rpx;
  677. letter-spacing: -0.5px;
  678. text-align: left;
  679. }
  680. }
  681. .job-description {
  682. margin-bottom: 12rpx;
  683. .description-text {
  684. color: rgba(97, 110, 124, 1);
  685. font-family: DM Sans;
  686. font-size: 24rpx;
  687. font-weight: 400;
  688. line-height: 32rpx;
  689. letter-spacing: 0px;
  690. text-align: left;
  691. }
  692. }
  693. .work-period {
  694. text-align: right;
  695. .period-text {
  696. font-size: 22rpx;
  697. color: #999;
  698. }
  699. }
  700. }
  701. // 职位选择弹窗样式
  702. .position-modal {
  703. position: fixed;
  704. top: 0;
  705. left: 0;
  706. right: 0;
  707. bottom: 0;
  708. background: rgba(0, 0, 0, 0.5);
  709. z-index: 10001;
  710. display: flex;
  711. align-items: flex-end;
  712. .position-modal-content {
  713. width: 100%;
  714. background: #ffffff;
  715. border-radius: 24rpx 24rpx 0 0;
  716. padding: 20rpx 40rpx 40rpx 40rpx;
  717. max-height: 60vh;
  718. .position-modal-handle {
  719. width: 80rpx;
  720. height: 8rpx;
  721. background: #E5E5E5;
  722. border-radius: 4rpx;
  723. margin: 0 auto 30rpx auto;
  724. }
  725. .position-modal-title {
  726. font-size: 32rpx;
  727. font-weight: 600;
  728. color: #333333;
  729. text-align: center;
  730. padding-bottom: 30rpx;
  731. margin-bottom: 30rpx;
  732. border-bottom: 1px solid rgba(153, 153, 153, 0.25);
  733. }
  734. .position-options {
  735. .position-option {
  736. display: flex;
  737. align-items: center;
  738. padding: 24rpx 32rpx;
  739. margin-bottom: 16rpx;
  740. border-radius: 42rpx;
  741. border: 2rpx solid rgba(227, 231, 236, 1);
  742. &.active {
  743. background: #F0F8FF;
  744. border-color: #007AFF;
  745. .position-option-icon {
  746. background: #007AFF;
  747. border-color: #007AFF;
  748. .check-icon {
  749. color: #ffffff;
  750. }
  751. }
  752. .position-option-text {
  753. color: #007AFF;
  754. font-weight: 500;
  755. }
  756. }
  757. .position-option-icon {
  758. width: 40rpx;
  759. height: 40rpx;
  760. border-radius: 50%;
  761. border: 2rpx solid #E5E5E5;
  762. background: #ffffff;
  763. display: flex;
  764. align-items: center;
  765. justify-content: center;
  766. margin-right: 24rpx;
  767. .check-icon {
  768. font-size: 24rpx;
  769. color: #ffffff;
  770. font-weight: bold;
  771. }
  772. }
  773. .position-option-text {
  774. font-size: 28rpx;
  775. color: #333333;
  776. flex: 1;
  777. }
  778. }
  779. }
  780. }
  781. }
  782. </style>