search.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170
  1. <template>
  2. <view>
  3. <!-- 自定义导航栏 -->
  4. <view class="custom-navbar">
  5. <view class="navbar-content">
  6. <view class="nav-left" @click="goBack">
  7. <u-icon name="arrow-leftward" color="#333" size="38"></u-icon>
  8. </view>
  9. <view class="nav-title">职位搜索</view>
  10. <view class="nav-right"></view>
  11. </view>
  12. </view>
  13. <!-- 搜索 -->
  14. <view class="search flex align-center justify-center">
  15. <view class="search-box">
  16. <u-search placeholder="搜索职位或公司" shape="round" searchIconSize = 40 searchIconColor="rgba(153, 153, 153, 1)" bgColor="rgba(241, 241, 241, 1)" borderColor="rgba(227, 231, 236, 1)" @clear="clear" v-model="keyword" @custom="custom" @search="custom"></u-search>
  17. </view>
  18. </view>
  19. <block v-if="show">
  20. <!-- 历史搜索 -->
  21. <view class="searchJl flex justify-center">
  22. <view class="searchJl-box">
  23. <view class="searchJl-box-header">
  24. <text class="searchJl-box-title">历史搜索</text>
  25. <image src="../../static/images/shanchu22.svg" style="width: 32rpx; height: 32rpx;" mode="aspectFit" @click="clearHistory"></image>
  26. </view>
  27. <view class="searchJl-box-label flex align-center flex-wrap">
  28. <view class="searchJl-box-item" @click="goSearch(item.keyWord)"
  29. v-for="(item,index) in searchList" :key="index">
  30. {{item.keyWord}}
  31. </view>
  32. </view>
  33. </view>
  34. </view>
  35. <!-- 近期热招 -->
  36. <view class="hot-jobs-container flex justify-center">
  37. <view class="hot-jobs-section">
  38. <view class="section-header">
  39. <text class="section-title">近期热招</text>
  40. <image src="../../static/images/shanchu22.svg" style="width: 32rpx; height: 32rpx;" mode="aspectFit" @click="clearHotJobs"></image>
  41. </view>
  42. <view class="hot-jobs-grid">
  43. <view
  44. class="hot-job-item"
  45. v-for="(job, index) in hotJobsList"
  46. :key="index"
  47. @click="selectHotJob(job)"
  48. >
  49. <text class="job-name">{{ job.ruleClassifyName }}</text>
  50. <view class="hot-tag" v-if="job.isHot">
  51. <text class="hot-tag-text">Hot</text>
  52. </view>
  53. </view>
  54. </view>
  55. </view>
  56. </view>
  57. </block>
  58. <block v-else>
  59. <!-- 筛选 -->
  60. <view class="screen flex justify-center align-center">
  61. <view class="screen-box">
  62. <view class="topbg-sx-box">
  63. <view class="topbg-sx-box-l flex align-center">
  64. <view class="topbg-sx-box-l-i" :class="currentSx==index?'active3':''"
  65. @click="currentSx = index" v-for="(item,index) in sxTypeList" :key="index">
  66. {{item.name}}
  67. </view>
  68. </view>
  69. <view class="topbg-sx-box-r flex align-center">
  70. <view class="city-container" @click="goNav('/package/screen/city?city='+city+'&county='+county)">
  71. <text class="city-text" style="margin-right: 10rpx;">{{county?county:city}}</text>
  72. <u-icon name="arrow-down" color="#999999" size="20"></u-icon>
  73. </view>
  74. <view v-if="currentSx==0" class="sort-container" @click="showSortModal">
  75. <text class="sort-text" style="margin-right: 10rpx;">综合排序</text>
  76. <u-icon name="arrow-down" color="rgba(1, 107, 246, 1)" size="20"></u-icon>
  77. </view>
  78. <view class="filter-container" @click="goNav('/package/screen/screen')">
  79. <text class="filter-text" style="margin-right: 10rpx;">筛选</text>
  80. <u-icon name="arrow-down" color="#999999" size="20"></u-icon>
  81. </view>
  82. </view>
  83. </view>
  84. </view>
  85. </view>
  86. <!-- 岗位推荐 -->
  87. <block v-if="currentSx==0">
  88. <view class="gwList flex justify-center" v-if="dataList.length>0">
  89. <view class="gwList-box">
  90. <scroll-view scroll-y="true" style="width: 100%;height: 100%;">
  91. <view class="gwList-box-item flex justify-center" @click="gotoInfo(item.postPushId)"
  92. v-for="(item,index) in dataList" :key="index">
  93. <view class="gwList-box-item-box">
  94. <!-- 标题-薪资 -->
  95. <view class="gwList-box-item-box-title flex justify-between align-center">
  96. <view class="title-left flex align-center">
  97. <view class="job-title-text"
  98. style="max-width: 450rpx;overflow:hidden;white-space: nowrap;text-overflow: ellipsis;-o-text-overflow:ellipsis;">
  99. <block v-if="isSameName(item.ruleClassifyName,item.stationName)">
  100. {{item.ruleClassifyName}}-
  101. </block>
  102. <block>
  103. {{item.stationName}}
  104. </block>
  105. </view>
  106. <view v-if="item.isDue" class="salary-text-box">
  107. <image src="../../static/images/index/jipinIcom.svg" class="jipin-icon" />
  108. <text class="jipin-text">急聘</text>
  109. </view>
  110. </view>
  111. <text class="salary-text">{{item.salaryRange}}</text>
  112. </view>
  113. <!-- 公司名称-公司人数 -->
  114. <view class="gwList-box-item-box-name flex align-center">
  115. <text class="company-name" style="margin-right: 8rpx;">{{item.company?item.company.companyName:''}}</text>
  116. <text class="company-people"
  117. v-if="item.company">{{item.company?item.company.companyPeople:'0人'}}</text>
  118. </view>
  119. <!-- 职位标签 -->
  120. <view class="gwList-box-item-box-label flex align-center flex-wrap">
  121. <text class="job-tag">{{item.education}}</text>
  122. <text class="job-tag">{{item.experience}}</text>
  123. <text class="job-tag" v-for="(ite,ind) in item.positionWelfare" :key="ind">{{ite}}</text>
  124. </view>
  125. <!-- <view class="gwList-box-item-box-line"></view> -->
  126. <!-- 公司简介-位置 -->
  127. <view class="gwList-box-item-box-info flex justify-between align-center">
  128. <view class="gwList-box-item-box-info-l flex align-center">
  129. <image
  130. :src="item.hr&&item.hr.hrImg?item.hr.hrImg:'../../static/logo.png'"
  131. style="width: 58rpx;height: 58rpx;border-radius: 50%;margin-right: 20rpx;"
  132. mode=""></image>
  133. <view class="company-info-text">
  134. {{item.user&&item.user.userName?item.user.userName:'未知'}}·{{item.hr&&item.hr.hrPosition||'匿名职位'}}
  135. </view>
  136. <view class="reply-time">10分钟前回复</view>
  137. </view>
  138. <view class="location-text">
  139. {{item.county}} {{item.address}}
  140. </view>
  141. </view>
  142. </view>
  143. </view>
  144. </scroll-view>
  145. </view>
  146. </view>
  147. <!-- 暂无数据 -->
  148. <view class="gwList" v-else>
  149. <empty />
  150. </view>
  151. </block>
  152. <block v-else>
  153. <view class="gwList flex justify-center" v-if="dataList.length>0">
  154. <view class="gwList-box">
  155. <scroll-view scroll-y="true" style="width: 100%;height: 100%;">
  156. <view class="box" v-for="(item,index) in dataList" :key="index">
  157. <view class="gwList-box-item company" @click="gotoInfo(item.postPushId)">
  158. <view class="gwList-box-item-box">
  159. <view class="gwList-box-item-box-title flex justify-between align-center">
  160. <u-avatar src="../../static/images/index/jipinIcom.svg" class="jipin-icon" ></u-avatar>
  161. <view class="gwList-box-item-box-info-l">
  162. <view class="companyTitle">{{item.companyName}}</view>
  163. <view class="company-info-text">
  164. {{item.companyPeople}} · {{item.companyScope}}
  165. </view>
  166. <view class="company-info-text">
  167. {{item.workTime}} · <text v-for="we in item.welfare">{{we}} · </text>
  168. </view>
  169. </view>
  170. <view class="goRight">
  171. <u-icon name="arrow-right"></u-icon>
  172. </view>
  173. </view>
  174. </view>
  175. </view>
  176. <view class="gwList-box-item companyPost" v-for="(it,ind) in item.postPushList" :key="index">
  177. <view class="gwList-box-item-box">
  178. <!-- 标题-薪资 -->
  179. <view class="gwList-box-item-box-info flex justify-between align-center">
  180. <view class="gwList-box-item-box-info-l">
  181. <view class="companyTitle">{{it.ruleClassifyName}}</view>
  182. <view class="company-info-text tags">
  183. <u-tag borderColor="#fdfdfd" :text="it.experience" type="info" mode="light" size="mini"></u-tag>
  184. <u-tag borderColor="#fdfdfd" :text="it.education" type="info" mode="light" size="mini"></u-tag>
  185. <u-tag borderColor="#fdfdfd" text="单双休" type="info" mode="light" size="mini"></u-tag>
  186. <u-tag borderColor="#fdfdfd" text="全品类" type="info" mode="light" size="mini"></u-tag>
  187. </view>
  188. </view>
  189. <view class="location-text">
  190. {{it.salaryRange}} · {{item.salaryTimes||12}}薪
  191. </view>
  192. </view>
  193. </view>
  194. </view>
  195. <view v-if="item.postPushList.length>3" class="gwList-box-item companyPost">
  196. <view class="gwList-box-item-box">
  197. <!-- 标题-薪资 -->
  198. <view class="morePost">查看更多职位</view>
  199. </view>
  200. </view>
  201. </view>
  202. </scroll-view>
  203. </view>
  204. </view>
  205. <!-- 暂无数据 -->
  206. <view class="gwList" v-else>
  207. <empty />
  208. </view>
  209. </block>
  210. </block>
  211. <!-- 排序弹窗 -->
  212. <view class="sort-modal" v-if="showSortModalFlag" @click="hideSortModal">
  213. <view class="sort-modal-content" @click.stop>
  214. <!-- 拖拽条 -->
  215. <view class="sort-modal-handle"></view>
  216. <!-- 标题 -->
  217. <view class="sort-modal-title">排序</view>
  218. <!-- 排序选项 -->
  219. <view class="sort-options">
  220. <view
  221. class="sort-option"
  222. :class="selectedSort === index ? 'active' : ''"
  223. @click="selectSort(index)"
  224. v-for="(option, index) in sortOptions"
  225. :key="index"
  226. >
  227. <view class="sort-option-icon">
  228. <view class="check-icon" v-if="selectedSort === index">✓</view>
  229. </view>
  230. <text class="sort-option-text">{{ option }}</text>
  231. </view>
  232. </view>
  233. </view>
  234. </view>
  235. </view>
  236. </template>
  237. <script>
  238. import empty from '../../components/empty.vue'
  239. export default {
  240. components: {
  241. empty
  242. },
  243. data() {
  244. return {
  245. show: false,
  246. keyword: '',
  247. currentSx: 0,
  248. sxTypeList: [{
  249. id: 1,
  250. name: '职位',
  251. },
  252. {
  253. id: 2,
  254. name: '公司',
  255. }
  256. ],
  257. token: '',
  258. page: 1,
  259. limit: 10,
  260. totlo: 1,
  261. city: '',
  262. county: '', //区
  263. education: '', //学历
  264. salaryRange: '', //薪资
  265. experience: '', //经验
  266. companyPeople: '', //公司规模
  267. industry: '', //行业
  268. longitude: '',
  269. latitude: '',
  270. dataList: [],
  271. searchList: [],
  272. hotJobsList: [
  273. ],
  274. showSortModalFlag: false,
  275. selectedSort: 0,
  276. sortOptions: ['综合排序', '最新优先', '距离优先']
  277. };
  278. },
  279. watch: {
  280. currentSx(newData, oldData) {
  281. this.page = 1
  282. this.getUserList();
  283. },
  284. },
  285. onLoad() {
  286. let that = this
  287. //获取经纬度后请求岗位接口,经纬度用于筛选距离
  288. uni.getLocation({
  289. type: 'wgs84', //wgs84 gcj02
  290. success: function(res) {
  291. console.log(res, '地理位置');
  292. that.latitude = res.latitude;
  293. that.longitude = res.longitude;
  294. that.getUserList();
  295. },
  296. fail: function() {
  297. console.log('获取地址失败');
  298. }
  299. })
  300. this.getMyRecordList()
  301. this.getHotList()
  302. },
  303. onShow() {
  304. let that = this;
  305. if (!this.city) {
  306. if (uni.getStorageSync('city')) {
  307. this.city = uni.getStorageSync('city')
  308. } else {
  309. this.city = ''
  310. }
  311. }
  312. uni.$once('filterCity', data => {
  313. console.log(data, '选择的市')
  314. that.city = data.city
  315. that.county = data.county
  316. that.getUserList();
  317. })
  318. this.token = uni.getStorageSync('token');
  319. console.log(uni.getStorageSync('filter'), '1111111111');
  320. if (uni.getStorageSync('filter') && (uni.getStorageSync('filter')).length > 0) {
  321. let filter = uni.getStorageSync('filter')
  322. console.log(filter)
  323. filter.map(item => {
  324. let arr = []
  325. item.list.map(ite => {
  326. if (ite.value != '不限') {
  327. arr.push(ite.value)
  328. }
  329. })
  330. switch (item.name) {
  331. case '学历要求':
  332. this.education = arr.join(',')
  333. break;
  334. case '薪资范围(单选)':
  335. this.salaryRange = arr.join(',')
  336. break;
  337. case '经验要求':
  338. this.experience = arr.join(',')
  339. break;
  340. case '公司规模':
  341. this.companyPeople = arr.join(',')
  342. break;
  343. case '行业':
  344. this.industry = arr.join(',')
  345. break;
  346. }
  347. })
  348. } else {
  349. this.education = '' //学历
  350. this.experience = '' //经验
  351. this.industry = '' //行业
  352. this.salaryRange = '' //薪资
  353. this.companyPeople = '' //公司规模
  354. }
  355. that.getUserList();
  356. },
  357. onPullDownRefresh() {
  358. this.page = 1
  359. this.getUserList();
  360. },
  361. onReachBottom() {
  362. if (this.page < this.totlo) {
  363. this.page += 1
  364. this.getUserList();
  365. }
  366. },
  367. methods: {
  368. /**
  369. * 返回上一页
  370. */
  371. goBack() {
  372. uni.navigateBack()
  373. },
  374. //判断岗位名称与职位名称是否相同(不区分大小写)
  375. isSameName(className, name) {
  376. let str1 = className.trim();
  377. let str2 = name.trim();
  378. if (str1.length !== str2.length) {
  379. return true;
  380. }
  381. return str1.toLowerCase() !== str2.toLowerCase();
  382. },
  383. /**
  384. * @param {Object} postPushId
  385. * 岗位详情
  386. */
  387. gotoInfo(postPushId) {
  388. if (uni.getStorageSync('token')) {
  389. uni.navigateTo({
  390. url: '/pages/index/game/order?postPushId=' + postPushId
  391. })
  392. } else {
  393. this.noLogin()
  394. }
  395. },
  396. //我的搜索关键词
  397. getMyRecordList() {
  398. this.$Request.get('/app/record/getMyRecordList', {
  399. userId: uni.getStorageSync('userId') ? uni.getStorageSync('userId') : ''
  400. }).then(res => {
  401. if (res.code == 0) {
  402. this.searchList = res.data.records
  403. if (this.searchList.length > 0) {
  404. this.show = true
  405. } else {
  406. this.show = false
  407. this.custom()
  408. }
  409. }
  410. })
  411. },
  412. getHotList() {
  413. this.$Request.get('/app/postPush/getHotList', {
  414. userId: uni.getStorageSync('userId') ? uni.getStorageSync('userId') : ''
  415. }).then(res => {
  416. if (res.code == 0) {
  417. this.hotJobsList = res.data
  418. }
  419. })
  420. },
  421. /**
  422. * 清空搜索内容
  423. */
  424. clear() {
  425. this.page = 1
  426. this.getUserList();
  427. },
  428. /**
  429. * @param {Object} keyword
  430. * 热词搜索
  431. */
  432. goSearch(keyword) {
  433. this.show = false
  434. this.keyword = keyword
  435. this.getUserList();
  436. },
  437. /**
  438. * @param {Object} e
  439. * 用户点击搜索时触发
  440. */
  441. custom(e) {
  442. this.show = false
  443. this.page = 1
  444. this.getUserList()
  445. },
  446. /**
  447. * 获取岗位列表
  448. */
  449. getUserList() {
  450. let data = {
  451. page: this.page,
  452. limit: this.limit,
  453. postType: '',
  454. ruleClassifyName: this.keyword, //岗位名称
  455. screen: this.selectedSort + 1, //1推荐 2最新
  456. county: this.county, //区
  457. city: '',//this.city, //城市
  458. salaryRange: this.salaryRange, //薪资范围
  459. education: this.education, //学历
  460. experience: this.experience, //经验
  461. industry: this.industry, //行业
  462. companyPeople: this.companyPeople, //公司规模
  463. lng: this.longitude,
  464. lat: this.latitude,
  465. userId: uni.getStorageSync('userId') ? uni.getStorageSync('userId') : ''
  466. }
  467. let action=this.currentSx==1?'/app/company/listCompany':'/app/postPush/userGetPostPushList'
  468. this.$Request.get(action, data).then(res => {
  469. uni.stopPullDownRefresh()
  470. if (res.code == 0) {
  471. if(this.currentSx==0)
  472. res.data.records.map(item => {
  473. if (item.positionWelfare) {
  474. item.positionWelfare = item.positionWelfare.split(',')
  475. } else {
  476. item.positionWelfare = []
  477. }
  478. })
  479. else
  480. res.data.records.map(item => {
  481. if (item.welfare) {
  482. item.welfare = item.welfare.split(',')
  483. } else {
  484. item.welfare = []
  485. }
  486. })
  487. if (this.page == 1) {
  488. this.dataList = res.data.records
  489. } else {
  490. this.dataList = [...this.dataList, ...res.data.records]
  491. }
  492. this.totlo = res.data.pages
  493. }
  494. })
  495. },
  496. //跳转
  497. goNav(url) {
  498. if (uni.getStorageSync('token')) {
  499. uni.navigateTo({
  500. url: url
  501. })
  502. } else {
  503. this.noLogin()
  504. }
  505. },
  506. //未登录
  507. noLogin() {
  508. uni.showModal({
  509. title: '提示',
  510. content: '您还未登录,请先登录',
  511. confirmColor: '#016BF6',
  512. success: function(res) {
  513. if (res.confirm) {
  514. console.log('用户点击确定');
  515. // uni.reLaunch({
  516. // url:'/pages/public/login'
  517. // })
  518. uni.navigateTo({
  519. url: '/pages/public/login'
  520. })
  521. } else if (res.cancel) {
  522. console.log('用户点击取消');
  523. }
  524. }
  525. })
  526. },
  527. // 选择热门职位
  528. selectHotJob(job) {
  529. this.keyword = job.ruleClassifyName
  530. this.custom()
  531. },
  532. // 显示排序弹窗
  533. showSortModal() {
  534. this.showSortModalFlag = true
  535. },
  536. // 隐藏排序弹窗
  537. hideSortModal() {
  538. this.showSortModalFlag = false
  539. },
  540. // 选择排序选项
  541. selectSort(index) {
  542. this.selectedSort = index
  543. this.hideSortModal()
  544. // 这里可以添加排序逻辑
  545. this.getUserList();
  546. },
  547. // 判断分类名称和职位名称是否相同
  548. isSameName(className, name) {
  549. let str1 = className.trim();
  550. let str2 = name.trim();
  551. if (str1.length !== str2.length) {
  552. return true;
  553. }
  554. return str1.toLowerCase() !== str2.toLowerCase();
  555. },
  556. },
  557. }
  558. </script>
  559. <style lang="scss">
  560. // page {
  561. // background: #F2F2F7;
  562. // }
  563. .active3 {
  564. flex-direction: row;
  565. justify-content: center;
  566. align-items: center;
  567. padding: 12rpx;
  568. border-radius: 12rpx;
  569. background: #FFFFFF !important;
  570. margin-right: 12rpx;
  571. border: 0.5px solid rgba(1, 107, 246, 1);
  572. color: rgba(1, 107, 246, 1) !important;
  573. font-family: DM Sans;
  574. font-size: 22rpx;
  575. font-weight: 400;
  576. line-height: 20rpx;
  577. letter-spacing: 0px;
  578. text-align: left;
  579. }
  580. .custom-navbar {
  581. position: fixed;
  582. top: 0;
  583. left: 0;
  584. right: 0;
  585. width: 100%;
  586. padding-top: 80rpx;
  587. height: 160rpx;
  588. background-color: #ffffff;
  589. z-index: 10000;
  590. .navbar-content {
  591. display: flex;
  592. align-items: center;
  593. justify-content: space-between;
  594. height: 100%;
  595. padding: 0 32rpx;
  596. .nav-left, .nav-right {
  597. width: 60rpx;
  598. height: 60rpx;
  599. display: flex;
  600. align-items: center;
  601. justify-content: center;
  602. }
  603. .nav-title {
  604. color: rgba(51, 51, 51, 1);
  605. font-family: DM Sans;
  606. font-size: 30rpx;
  607. font-weight: 700;
  608. line-height: 26px;
  609. letter-spacing: 0px;
  610. text-align: center;
  611. }
  612. }
  613. }
  614. .search {
  615. width: 100%;
  616. padding-top: 20rpx;
  617. height: 88rpx;
  618. background-color: #ffffff;
  619. position: fixed;
  620. top: 160rpx;
  621. z-index: 9999;
  622. .search-box {
  623. width: 686rpx;
  624. height: 60rpx;
  625. }
  626. /deep/ .u-action {
  627. color: rgba(1, 107, 246, 1);
  628. font-family: DM Sans;
  629. font-size: 24rpx;
  630. font-weight: 500;
  631. line-height: 48rpx;
  632. letter-spacing: 0px;
  633. text-align: center;
  634. }
  635. }
  636. .screen {
  637. width: 100%;
  638. height: 160rpx;
  639. background-color: #ffffff;
  640. position: fixed;
  641. top: 246rpx;
  642. z-index: 9999;
  643. .screen-box {
  644. padding-top: 20rpx;
  645. width: 686rpx;
  646. height: 160rpx;
  647. .topbg-sx-box {
  648. width: 686rpx;
  649. height: 25rpx;
  650. margin-top: 30rpx;
  651. .topbg-sx-box-l-i {
  652. flex-direction: row;
  653. justify-content: center;
  654. align-items: center;
  655. padding: 12rpx;
  656. border-radius: 12rpx;
  657. background: rgba(153, 153, 153, 0.1);
  658. margin-right: 12rpx;
  659. color: rgba(102, 102, 102, 1);
  660. font-family: DM Sans;
  661. font-size: 22rpx;
  662. font-weight: 400;
  663. line-height: 20rpx;
  664. letter-spacing: 0px;
  665. text-align: left;
  666. margin-bottom: 20rpx;
  667. }
  668. }
  669. }
  670. }
  671. // 筛选栏右侧容器样式
  672. .city-container {
  673. color: rgba(153, 153, 153, 1);
  674. font-family: DM Sans;
  675. font-size: 22rpx;
  676. font-weight: 400;
  677. line-height: 20rpx;
  678. letter-spacing: 0px;
  679. text-align: left;
  680. margin-right: 10rpx;
  681. padding: 8rpx 12rpx;
  682. border-radius: 12rpx;
  683. background: rgba(198, 198, 198, 0.1);
  684. }
  685. .sort-container {
  686. color: rgba(1, 107, 246, 1);
  687. font-family: DM Sans;
  688. font-size: 22rpx;
  689. font-weight: 400;
  690. line-height: 20rpx;
  691. letter-spacing: 0px;
  692. text-align: left;
  693. margin-right: 10rpx;
  694. padding: 8rpx 12rpx;
  695. border-radius: 12rpx;
  696. border: 0.5px solid rgba(1, 107, 246, 1);
  697. }
  698. .filter-container {
  699. color: rgba(153, 153, 153, 1);
  700. font-family: DM Sans;
  701. font-size: 22rpx;
  702. font-weight: 400;
  703. line-height: 20rpx;
  704. letter-spacing: 0px;
  705. text-align: left;
  706. margin-right: 10rpx;
  707. padding: 8rpx 12rpx;
  708. border-radius: 12rpx;
  709. background: rgba(198, 198, 198, 0.1);
  710. }
  711. .searchJl {
  712. width: 100%;
  713. background-color: #ffffff;
  714. position: fixed;
  715. top: 240rpx;
  716. height: calc(100vh - 80rpx);
  717. .searchJl-box {
  718. width: 686rpx;
  719. height: 100%;
  720. padding-top: 48rpx;
  721. .searchJl-box-header {
  722. display: flex;
  723. align-items: center;
  724. justify-content: space-between;
  725. margin-bottom: 20rpx;
  726. }
  727. .searchJl-box-title {
  728. color: rgba(34, 37, 42, 1);
  729. font-family: DM Sans;
  730. font-size: 26rpx;
  731. font-weight: 400;
  732. line-height: 48rpx;
  733. letter-spacing: 0px;
  734. text-align: left;
  735. }
  736. .searchJl-box-label {
  737. width: 100%;
  738. gap: 8rpx;
  739. .searchJl-box-item {
  740. padding: 12rpx;
  741. border-radius: 8rpx;
  742. background: rgba(153, 153, 153, 0.1);
  743. color: rgba(102, 102, 102, 1);
  744. font-family: DM Sans;
  745. font-size: 20rpx;
  746. font-weight: 400;
  747. line-height: 20rpx;
  748. letter-spacing: 0px;
  749. text-align: left;
  750. margin-top: 20rpx;
  751. }
  752. }
  753. }
  754. }
  755. // 近期热招容器样式
  756. .hot-jobs-container {
  757. width: 100%;
  758. background-color: #ffffff;
  759. position: fixed;
  760. top: 420rpx; // 调整位置,在历史搜索下方
  761. height: calc(100vh - 400rpx);
  762. z-index: 9999;
  763. .hot-jobs-section {
  764. width: 686rpx;
  765. padding-top: 28rpx;
  766. }
  767. }
  768. // 近期热招样式
  769. .hot-jobs-section {
  770. margin-bottom: 32rpx;
  771. .section-header {
  772. display: flex;
  773. align-items: center;
  774. justify-content: space-between;
  775. margin-bottom: 20rpx;
  776. .section-title {
  777. color: rgba(34, 37, 42, 1);
  778. font-family: DM Sans;
  779. font-size: 26rpx;
  780. font-weight: 400;
  781. line-height: 48rpx;
  782. letter-spacing: 0px;
  783. text-align: left;
  784. }
  785. }
  786. }
  787. .hot-jobs-grid {
  788. display: flex;
  789. flex-wrap: wrap;
  790. gap: 8rpx;
  791. .hot-job-item {
  792. width: calc(50% - 4rpx);
  793. padding: 8rpx;
  794. background: #ffffff;
  795. border-radius: 12rpx;
  796. position: relative;
  797. .job-name {
  798. color: rgba(102, 102, 102, 1);
  799. font-family: DM Sans;
  800. font-size: 20rpx;
  801. font-weight: 400;
  802. line-height: 44rpx;
  803. letter-spacing: 0px;
  804. text-align: left;
  805. }
  806. .hot-tag {
  807. position: absolute;
  808. top: 8rpx;
  809. right: 10rpx;
  810. border-radius: 12rpx;
  811. background: rgba(237, 66, 69, 1);
  812. padding: 4rpx 12rpx;
  813. .hot-tag-text {
  814. color: rgba(255, 255, 255, 1);
  815. font-family: DM Sans;
  816. font-size: 16rpx;
  817. font-weight: 400;
  818. text-align: center;
  819. }
  820. }
  821. }
  822. }
  823. // 排序弹窗样式
  824. .sort-modal {
  825. position: fixed;
  826. top: 0;
  827. left: 0;
  828. right: 0;
  829. bottom: 0;
  830. background: rgba(0, 0, 0, 0.5);
  831. z-index: 10001;
  832. display: flex;
  833. align-items: flex-end;
  834. .sort-modal-content {
  835. width: 100%;
  836. background: #ffffff;
  837. border-radius: 24rpx 24rpx 0 0;
  838. padding: 20rpx 40rpx 40rpx 40rpx;
  839. max-height: 60vh;
  840. .sort-modal-handle {
  841. width: 80rpx;
  842. height: 8rpx;
  843. background: #E5E5E5;
  844. border-radius: 4rpx;
  845. margin: 0 auto 30rpx auto;
  846. }
  847. .sort-modal-title {
  848. font-size: 32rpx;
  849. font-weight: 600;
  850. color: #333333;
  851. text-align: center;
  852. padding-bottom: 30rpx;
  853. margin-bottom: 30rpx;
  854. border-bottom: 1px solid rgba(153, 153, 153, 0.25);
  855. }
  856. .sort-options {
  857. .sort-option {
  858. display: flex;
  859. align-items: center;
  860. padding: 24rpx 32rpx;
  861. margin-bottom: 16rpx;
  862. // background: #F8F8F8;
  863. border-radius: 42rpx;
  864. border: 2rpx solid rgba(227, 231, 236, 1);
  865. &.active {
  866. background: #F0F8FF;
  867. border-color: #007AFF;
  868. .sort-option-icon {
  869. background: #007AFF;
  870. border-color: #007AFF;
  871. .check-icon {
  872. color: #ffffff;
  873. }
  874. }
  875. .sort-option-text {
  876. color: #007AFF;
  877. font-weight: 500;
  878. }
  879. }
  880. .sort-option-icon {
  881. width: 40rpx;
  882. height: 40rpx;
  883. border-radius: 50%;
  884. border: 2rpx solid #E5E5E5;
  885. background: #ffffff;
  886. display: flex;
  887. align-items: center;
  888. justify-content: center;
  889. margin-right: 24rpx;
  890. .check-icon {
  891. font-size: 24rpx;
  892. color: #ffffff;
  893. font-weight: bold;
  894. }
  895. }
  896. .sort-option-text {
  897. font-size: 28rpx;
  898. color: #333333;
  899. flex: 1;
  900. }
  901. }
  902. }
  903. }
  904. }
  905. .title-left {
  906. display: flex;
  907. align-items: center;
  908. gap: 8rpx;
  909. }
  910. .job-title-text {
  911. color: rgba(23, 23, 37, 1);
  912. font-family: DM Sans;
  913. font-size: 38rpx;
  914. font-weight: 700;
  915. line-height: 48rpx;
  916. letter-spacing: 0.5%;
  917. text-align: left;
  918. }
  919. .salary-text-box {
  920. border-radius: 24rpx;
  921. background: #FEE2E3;
  922. display: flex;
  923. justify-content: flex-start;
  924. align-items: center;
  925. padding: 6rpx 24rpx;
  926. .jipin-icon {
  927. width: 20rpx;
  928. height: 20rpx;
  929. margin-right: 4rpx;
  930. }
  931. .jipin-text {
  932. color: rgba(237, 66, 69, 1);
  933. font-family: DM Sans;
  934. font-size: 18rpx;
  935. font-weight: 400;
  936. line-height: 20px;
  937. letter-spacing: 0.5%;
  938. text-align: left;
  939. }
  940. }
  941. .salary-text {
  942. color: rgba(1, 107, 246, 1);
  943. font-family: DM Sans;
  944. font-size: 28rpx;
  945. font-weight: 700;
  946. line-height: 40rpx;
  947. letter-spacing: 0.5%;
  948. text-align: right;
  949. }
  950. .company-name,
  951. .company-people {
  952. color: rgba(156, 164, 171, 1);
  953. font-family: DM Sans;
  954. font-size: 24rpx;
  955. font-weight: 400;
  956. line-height: 40rpx;
  957. letter-spacing: 0.5%;
  958. text-align: left;
  959. }
  960. .job-tag {
  961. height: 42rpx;
  962. display: flex;
  963. flex-direction: row;
  964. justify-content: center;
  965. align-items: center;
  966. padding: 8rpx;
  967. border-radius: 8rpx;
  968. background: rgba(198, 198, 198, 0.1);
  969. margin-right: 16rpx;
  970. margin-bottom: 16rpx;
  971. color: rgba(153, 153, 153, 1);
  972. font-size: 24rpx;
  973. }
  974. .company-info-text,
  975. .location-text {
  976. color: rgba(156, 164, 171, 1);
  977. font-family: DM Sans;
  978. font-size: 20rpx;
  979. font-weight: 400;
  980. line-height: 40rpx;
  981. letter-spacing: 0.5%;
  982. text-align: left;
  983. }
  984. .reply-time {
  985. display: flex;
  986. flex-direction: row;
  987. justify-content: center;
  988. align-items: center;
  989. padding: 8rpx;
  990. font-family: DM Sans;
  991. font-size: 20rpx;
  992. font-weight: 400;
  993. line-height: 40rpx;
  994. letter-spacing: 0.5%;
  995. text-align: left;
  996. border-radius: 12rpx;
  997. background: #ECE1FD;
  998. color: #8858C5;
  999. margin-left:10rpx
  1000. }
  1001. .gwList {
  1002. width: 100%;
  1003. margin-top: 410rpx;
  1004. .gwList-box {
  1005. width: 710rpx;
  1006. height: 100%;
  1007. .box{
  1008. margin-bottom: 25rpx;
  1009. }
  1010. .gwList-box-item {
  1011. width: 100%;
  1012. // height: 329rpx;
  1013. background-color: #ffffff;
  1014. border-radius: 12rpx;
  1015. margin-bottom: 20rpx;
  1016. padding: 36rpx;
  1017. background: rgba(253, 253, 253, 1);
  1018. border: 0.5px solid rgba(227, 231, 236, 1);
  1019. }
  1020. .company{
  1021. padding: 20rpx;
  1022. background:#fff;
  1023. margin-bottom:0rpx;
  1024. }
  1025. .companyPost{
  1026. padding: 20rpx;
  1027. margin-top:8rpx;
  1028. margin-bottom:0rpx;
  1029. .location-text{
  1030. font-size: 26rpx;
  1031. font-weight: 500;
  1032. color: #007AFF;
  1033. align-self: flex-start;
  1034. }
  1035. .companyTitle{
  1036. font-size:32rpx;
  1037. font-weight: 500;
  1038. color:#111
  1039. }
  1040. .morePost{
  1041. color: #007AFF;
  1042. font-size: 20rpx;
  1043. text-align: center;
  1044. }
  1045. }
  1046. .gwList-box-item-box {
  1047. width: 100%;
  1048. height: 100%;
  1049. .gwList-box-item-box-title {
  1050. }
  1051. .gwList-box-item-box-label {
  1052. margin-top: 14rpx;
  1053. }
  1054. .gwList-box-item-box-name {
  1055. margin-top: 14rpx;
  1056. color: #999999;
  1057. font-size: 28rpx;
  1058. font-weight: 500;
  1059. }
  1060. .gwList-box-item-box-line {
  1061. width: 100%;
  1062. border: 1rpx solid #E6E6E6;
  1063. margin-top: 30rpx;
  1064. margin-bottom: 20rpx;
  1065. }
  1066. .gwList-box-item-box-info {
  1067. font-size: 26rpx;
  1068. .gwList-box-item-box-info-l {
  1069. color: #1A1A1A;
  1070. .tags{
  1071. gap:10rpx;
  1072. display: flex;
  1073. margin-top: 10rpx;
  1074. }
  1075. }
  1076. .gwList-box-item-box-info-r {
  1077. color: #999999;
  1078. max-width: 300rpx;
  1079. }
  1080. }
  1081. }
  1082. }
  1083. }
  1084. </style>