index.vue 19 KB

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