search.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185
  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="'company'+index">
  157. <view class="gwList-box-item company" @click="goTo('/my/enterpriseInfo/enterpriseInfo?companyId=' + item.companyId)">
  158. <view class="gwList-box-item-box">
  159. <view class="gwList-box-item-box-title flex justify-between align-center">
  160. <u-avatar :src="item.companyLogo?item.companyLogo:'../../static/images/index/jipinIcom.svg'" class="jipin-icon" ></u-avatar>
  161. <view class="gwList-box-item-box-info-l">
  162. <view class="companyTitle">{{item.companyAllName}}</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-if="item.welfare.length>0">·</text> <text v-for="(we,i) in item.welfare" :key="'welfare'+i">{{we}} <text v-if="i<item.welfare.length-1">·</text> </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="'post'+ind">
  177. <view class="gwList-box-item-box" @click="goTo('/pages/index/game/order?postPushId=' + it.postPushId)">
  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" @click="goTo('/my/enterpriseInfo/enterpriseInfo?companyId=' + item.companyId)">
  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. filter:'筛选'
  278. };
  279. },
  280. watch: {
  281. currentSx(newData, oldData) {
  282. this.page = 1
  283. this.dataList=[]
  284. this.getUserList();
  285. },
  286. },
  287. onLoad() {
  288. let that = this
  289. //获取经纬度后请求岗位接口,经纬度用于筛选距离
  290. uni.getLocation({
  291. type: 'wgs84', //wgs84 gcj02
  292. success: function(res) {
  293. console.log(res, '地理位置');
  294. that.latitude = res.latitude;
  295. that.longitude = res.longitude;
  296. that.getUserList();
  297. },
  298. fail: function() {
  299. console.log('获取地址失败');
  300. }
  301. })
  302. this.getMyRecordList()
  303. this.getHotList()
  304. },
  305. onShow() {
  306. let that = this;
  307. if (!this.city) {
  308. if (uni.getStorageSync('city')) {
  309. this.city = uni.getStorageSync('city')
  310. } else {
  311. this.city = ''
  312. }
  313. }
  314. uni.$once('filterCity', data => {
  315. console.log(data, '选择的市')
  316. that.city = data.city
  317. that.county = data.county
  318. that.getUserList();
  319. })
  320. this.token = uni.getStorageSync('token');
  321. console.log(uni.getStorageSync('filter'), '1111111111');
  322. if (uni.getStorageSync('filter') && (uni.getStorageSync('filter')).length > 0) {
  323. let filter = uni.getStorageSync('filter')
  324. console.log(filter)
  325. filter.map(item => {
  326. let arr = []
  327. item.list.map(ite => {
  328. if (ite.value != '不限') {
  329. arr.push(ite.value)
  330. }
  331. })
  332. switch (item.name) {
  333. case '学历要求':
  334. this.education = arr.join(',')
  335. break;
  336. case '薪资范围(单选)':
  337. this.salaryRange = arr.join(',')
  338. break;
  339. case '经验要求':
  340. this.experience = arr.join(',')
  341. break;
  342. case '公司规模':
  343. this.companyPeople = arr.join(',')
  344. break;
  345. case '行业':
  346. this.industry = arr.join(',')
  347. break;
  348. }
  349. })
  350. } else {
  351. this.education = '' //学历
  352. this.experience = '' //经验
  353. this.industry = '' //行业
  354. this.salaryRange = '' //薪资
  355. this.companyPeople = '' //公司规模
  356. }
  357. that.getUserList();
  358. },
  359. onPullDownRefresh() {
  360. this.page = 1
  361. this.getUserList();
  362. },
  363. onReachBottom() {
  364. if (this.page < this.totlo) {
  365. this.page += 1
  366. this.getUserList();
  367. }
  368. },
  369. methods: {
  370. /**
  371. * 返回上一页
  372. */
  373. goBack() {
  374. uni.navigateBack()
  375. },
  376. //判断岗位名称与职位名称是否相同(不区分大小写)
  377. isSameName(className, name) {
  378. if(!className||!name)
  379. return;
  380. let str1 = className.trim();
  381. let str2 = name.trim();
  382. if (str1.length !== str2.length) {
  383. return true;
  384. }
  385. return str1.toLowerCase() !== str2.toLowerCase();
  386. },
  387. /**
  388. * @param {Object} postPushId
  389. * 岗位详情
  390. */
  391. gotoInfo(postPushId) {
  392. if (uni.getStorageSync('token')) {
  393. uni.navigateTo({
  394. url: '/pages/index/game/order?postPushId=' + postPushId
  395. })
  396. } else {
  397. this.noLogin()
  398. }
  399. },
  400. goTo(action){
  401. if (uni.getStorageSync('token')) {
  402. uni.navigateTo({
  403. url: action,
  404. success(e) {
  405. console.log(e)
  406. },fail(e) {
  407. console.log(e)
  408. }
  409. })
  410. } else {
  411. this.noLogin()
  412. }
  413. },
  414. //我的搜索关键词
  415. getMyRecordList() {
  416. this.$Request.get('/app/record/getMyRecordList', {
  417. userId: uni.getStorageSync('userId') ? uni.getStorageSync('userId') : ''
  418. }).then(res => {
  419. if (res.code == 0) {
  420. this.searchList = res.data.records
  421. if (this.searchList.length > 0) {
  422. this.show = true
  423. } else {
  424. this.show = false
  425. this.custom()
  426. }
  427. }
  428. })
  429. },
  430. getHotList() {
  431. this.$Request.get('/app/postPush/getHotList', {
  432. userId: uni.getStorageSync('userId') ? uni.getStorageSync('userId') : ''
  433. }).then(res => {
  434. if (res.code == 0) {
  435. this.hotJobsList = res.data
  436. }
  437. })
  438. },
  439. /**
  440. * 清空搜索内容
  441. */
  442. clear() {
  443. this.page = 1
  444. this.getUserList();
  445. },
  446. /**
  447. * @param {Object} keyword
  448. * 热词搜索
  449. */
  450. goSearch(keyword) {
  451. this.show = false
  452. this.keyword = keyword
  453. this.getUserList();
  454. },
  455. /**
  456. * @param {Object} e
  457. * 用户点击搜索时触发
  458. */
  459. custom(e) {
  460. this.show = false
  461. this.page = 1
  462. this.getUserList()
  463. },
  464. /**
  465. * 获取岗位列表
  466. */
  467. getUserList() {
  468. let data = {
  469. page: this.page,
  470. limit: this.limit,
  471. postType: '',
  472. ruleClassifyName: this.keyword, //岗位名称
  473. screen: this.selectedSort + 1, //1推荐 2最新
  474. county: this.county, //区
  475. city: '',//this.city, //城市
  476. salaryRange: this.salaryRange, //薪资范围
  477. education: this.education, //学历
  478. experience: this.experience, //经验
  479. industry: this.industry, //行业
  480. companyPeople: this.companyPeople, //公司规模
  481. lng: this.longitude,
  482. lat: this.latitude,
  483. userId: uni.getStorageSync('userId') ? uni.getStorageSync('userId') : ''
  484. }
  485. if(this.currentSx==1)
  486. data.keyword=this.keyword
  487. let action=this.currentSx==1?'/app/company/listCompany':'/app/postPush/userGetPostPushList'
  488. this.$Request.get(action, data).then(res => {
  489. uni.stopPullDownRefresh()
  490. if (res.code == 0) {
  491. if(this.currentSx==0)
  492. res.data.records.map(item => {
  493. if (item.positionWelfare) {
  494. item.positionWelfare = item.positionWelfare.split(',')
  495. } else {
  496. item.positionWelfare = []
  497. }
  498. })
  499. else
  500. res.data.records.map(item => {
  501. if (item.welfare) {
  502. item.welfare = item.welfare.split(',')
  503. } else {
  504. item.welfare = []
  505. }
  506. })
  507. if (this.page == 1) {
  508. this.dataList = res.data.records
  509. } else {
  510. this.dataList = [...this.dataList, ...res.data.records]
  511. }
  512. this.totlo = res.data.pages
  513. }
  514. })
  515. },
  516. //跳转
  517. goNav(url) {
  518. if (uni.getStorageSync('token')) {
  519. uni.navigateTo({
  520. url: url
  521. })
  522. } else {
  523. this.noLogin()
  524. }
  525. },
  526. //未登录
  527. noLogin() {
  528. uni.showModal({
  529. title: '提示',
  530. content: '您还未登录,请先登录',
  531. confirmColor: '#016BF6',
  532. success: function(res) {
  533. if (res.confirm) {
  534. console.log('用户点击确定');
  535. // uni.reLaunch({
  536. // url:'/pages/public/login'
  537. // })
  538. uni.navigateTo({
  539. url: '/pages/public/login'
  540. })
  541. } else if (res.cancel) {
  542. console.log('用户点击取消');
  543. }
  544. }
  545. })
  546. },
  547. // 选择热门职位
  548. selectHotJob(job) {
  549. this.keyword = job.ruleClassifyName
  550. this.custom()
  551. },
  552. // 显示排序弹窗
  553. showSortModal() {
  554. this.showSortModalFlag = true
  555. },
  556. // 隐藏排序弹窗
  557. hideSortModal() {
  558. this.showSortModalFlag = false
  559. },
  560. // 选择排序选项
  561. selectSort(index) {
  562. this.selectedSort = index
  563. this.hideSortModal()
  564. // 这里可以添加排序逻辑
  565. this.getUserList();
  566. },
  567. },
  568. }
  569. </script>
  570. <style lang="scss">
  571. // page {
  572. // background: #F2F2F7;
  573. // }
  574. .active3 {
  575. flex-direction: row;
  576. justify-content: center;
  577. align-items: center;
  578. padding: 12rpx;
  579. border-radius: 12rpx;
  580. background: #FFFFFF !important;
  581. margin-right: 12rpx;
  582. border: 0.5px solid rgba(1, 107, 246, 1);
  583. color: rgba(1, 107, 246, 1) !important;
  584. font-family: DM Sans;
  585. font-size: 22rpx;
  586. font-weight: 400;
  587. line-height: 20rpx;
  588. letter-spacing: 0px;
  589. text-align: left;
  590. }
  591. .custom-navbar {
  592. position: fixed;
  593. top: 0;
  594. left: 0;
  595. right: 0;
  596. width: 100%;
  597. padding-top: 80rpx;
  598. height: 160rpx;
  599. background-color: #ffffff;
  600. z-index: 10000;
  601. .navbar-content {
  602. display: flex;
  603. align-items: center;
  604. justify-content: space-between;
  605. height: 100%;
  606. padding: 0 32rpx;
  607. .nav-left, .nav-right {
  608. width: 60rpx;
  609. height: 60rpx;
  610. display: flex;
  611. align-items: center;
  612. justify-content: center;
  613. }
  614. .nav-title {
  615. color: rgba(51, 51, 51, 1);
  616. font-family: DM Sans;
  617. font-size: 30rpx;
  618. font-weight: 700;
  619. line-height: 26px;
  620. letter-spacing: 0px;
  621. text-align: center;
  622. }
  623. }
  624. }
  625. .search {
  626. width: 100%;
  627. padding-top: 20rpx;
  628. height: 88rpx;
  629. background-color: #ffffff;
  630. position: fixed;
  631. top: 160rpx;
  632. z-index: 9999;
  633. .search-box {
  634. width: 686rpx;
  635. height: 60rpx;
  636. }
  637. /deep/ .u-action {
  638. color: rgba(1, 107, 246, 1);
  639. font-family: DM Sans;
  640. font-size: 24rpx;
  641. font-weight: 500;
  642. line-height: 48rpx;
  643. letter-spacing: 0px;
  644. text-align: center;
  645. }
  646. }
  647. .screen {
  648. width: 100%;
  649. height: 160rpx;
  650. background-color: #ffffff;
  651. position: fixed;
  652. top: 246rpx;
  653. z-index: 9999;
  654. .screen-box {
  655. padding-top: 20rpx;
  656. width: 686rpx;
  657. height: 160rpx;
  658. .topbg-sx-box {
  659. width: 686rpx;
  660. height: 25rpx;
  661. margin-top: 30rpx;
  662. .topbg-sx-box-l-i {
  663. flex-direction: row;
  664. justify-content: center;
  665. align-items: center;
  666. padding: 12rpx;
  667. border-radius: 12rpx;
  668. background: rgba(153, 153, 153, 0.1);
  669. margin-right: 12rpx;
  670. color: rgba(102, 102, 102, 1);
  671. font-family: DM Sans;
  672. font-size: 22rpx;
  673. font-weight: 400;
  674. line-height: 20rpx;
  675. letter-spacing: 0px;
  676. text-align: left;
  677. margin-bottom: 20rpx;
  678. }
  679. }
  680. }
  681. }
  682. // 筛选栏右侧容器样式
  683. .city-container {
  684. color: rgba(153, 153, 153, 1);
  685. font-family: DM Sans;
  686. font-size: 22rpx;
  687. font-weight: 400;
  688. line-height: 20rpx;
  689. letter-spacing: 0px;
  690. text-align: left;
  691. margin-right: 10rpx;
  692. padding: 8rpx 12rpx;
  693. border-radius: 12rpx;
  694. background: rgba(198, 198, 198, 0.1);
  695. }
  696. .sort-container {
  697. color: rgba(1, 107, 246, 1);
  698. font-family: DM Sans;
  699. font-size: 22rpx;
  700. font-weight: 400;
  701. line-height: 20rpx;
  702. letter-spacing: 0px;
  703. text-align: left;
  704. margin-right: 10rpx;
  705. padding: 8rpx 12rpx;
  706. border-radius: 12rpx;
  707. border: 0.5px solid rgba(1, 107, 246, 1);
  708. }
  709. .filter-container {
  710. color: rgba(153, 153, 153, 1);
  711. font-family: DM Sans;
  712. font-size: 22rpx;
  713. font-weight: 400;
  714. line-height: 20rpx;
  715. letter-spacing: 0px;
  716. text-align: left;
  717. margin-right: 10rpx;
  718. padding: 8rpx 12rpx;
  719. border-radius: 12rpx;
  720. background: rgba(198, 198, 198, 0.1);
  721. }
  722. .searchJl {
  723. width: 100%;
  724. background-color: #ffffff;
  725. position: fixed;
  726. top: 240rpx;
  727. height: calc(100vh - 80rpx);
  728. .searchJl-box {
  729. width: 686rpx;
  730. height: 100%;
  731. padding-top: 48rpx;
  732. .searchJl-box-header {
  733. display: flex;
  734. align-items: center;
  735. justify-content: space-between;
  736. margin-bottom: 20rpx;
  737. }
  738. .searchJl-box-title {
  739. color: rgba(34, 37, 42, 1);
  740. font-family: DM Sans;
  741. font-size: 26rpx;
  742. font-weight: 400;
  743. line-height: 48rpx;
  744. letter-spacing: 0px;
  745. text-align: left;
  746. }
  747. .searchJl-box-label {
  748. width: 100%;
  749. gap: 8rpx;
  750. .searchJl-box-item {
  751. padding: 12rpx;
  752. border-radius: 8rpx;
  753. background: rgba(153, 153, 153, 0.1);
  754. color: rgba(102, 102, 102, 1);
  755. font-family: DM Sans;
  756. font-size: 20rpx;
  757. font-weight: 400;
  758. line-height: 20rpx;
  759. letter-spacing: 0px;
  760. text-align: left;
  761. margin-top: 20rpx;
  762. }
  763. }
  764. }
  765. }
  766. // 近期热招容器样式
  767. .hot-jobs-container {
  768. width: 100%;
  769. background-color: #ffffff;
  770. position: fixed;
  771. top: 420rpx; // 调整位置,在历史搜索下方
  772. height: calc(100vh - 400rpx);
  773. z-index: 9999;
  774. .hot-jobs-section {
  775. width: 686rpx;
  776. padding-top: 28rpx;
  777. }
  778. }
  779. // 近期热招样式
  780. .hot-jobs-section {
  781. margin-bottom: 32rpx;
  782. .section-header {
  783. display: flex;
  784. align-items: center;
  785. justify-content: space-between;
  786. margin-bottom: 20rpx;
  787. .section-title {
  788. color: rgba(34, 37, 42, 1);
  789. font-family: DM Sans;
  790. font-size: 26rpx;
  791. font-weight: 400;
  792. line-height: 48rpx;
  793. letter-spacing: 0px;
  794. text-align: left;
  795. }
  796. }
  797. }
  798. .hot-jobs-grid {
  799. display: flex;
  800. flex-wrap: wrap;
  801. gap: 8rpx;
  802. .hot-job-item {
  803. width: calc(50% - 4rpx);
  804. padding: 8rpx;
  805. background: #ffffff;
  806. border-radius: 12rpx;
  807. position: relative;
  808. .job-name {
  809. color: rgba(102, 102, 102, 1);
  810. font-family: DM Sans;
  811. font-size: 20rpx;
  812. font-weight: 400;
  813. line-height: 44rpx;
  814. letter-spacing: 0px;
  815. text-align: left;
  816. }
  817. .hot-tag {
  818. position: absolute;
  819. top: 8rpx;
  820. right: 10rpx;
  821. border-radius: 12rpx;
  822. background: rgba(237, 66, 69, 1);
  823. padding: 4rpx 12rpx;
  824. .hot-tag-text {
  825. color: rgba(255, 255, 255, 1);
  826. font-family: DM Sans;
  827. font-size: 16rpx;
  828. font-weight: 400;
  829. text-align: center;
  830. }
  831. }
  832. }
  833. }
  834. // 排序弹窗样式
  835. .sort-modal {
  836. position: fixed;
  837. top: 0;
  838. left: 0;
  839. right: 0;
  840. bottom: 0;
  841. background: rgba(0, 0, 0, 0.5);
  842. z-index: 10001;
  843. display: flex;
  844. align-items: flex-end;
  845. .sort-modal-content {
  846. width: 100%;
  847. background: #ffffff;
  848. border-radius: 24rpx 24rpx 0 0;
  849. padding: 20rpx 40rpx 40rpx 40rpx;
  850. max-height: 60vh;
  851. .sort-modal-handle {
  852. width: 80rpx;
  853. height: 8rpx;
  854. background: #E5E5E5;
  855. border-radius: 4rpx;
  856. margin: 0 auto 30rpx auto;
  857. }
  858. .sort-modal-title {
  859. font-size: 32rpx;
  860. font-weight: 600;
  861. color: #333333;
  862. text-align: center;
  863. padding-bottom: 30rpx;
  864. margin-bottom: 30rpx;
  865. border-bottom: 1px solid rgba(153, 153, 153, 0.25);
  866. }
  867. .sort-options {
  868. .sort-option {
  869. display: flex;
  870. align-items: center;
  871. padding: 24rpx 32rpx;
  872. margin-bottom: 16rpx;
  873. // background: #F8F8F8;
  874. border-radius: 42rpx;
  875. border: 2rpx solid rgba(227, 231, 236, 1);
  876. &.active {
  877. background: #F0F8FF;
  878. border-color: #007AFF;
  879. .sort-option-icon {
  880. background: #007AFF;
  881. border-color: #007AFF;
  882. .check-icon {
  883. color: #ffffff;
  884. }
  885. }
  886. .sort-option-text {
  887. color: #007AFF;
  888. font-weight: 500;
  889. }
  890. }
  891. .sort-option-icon {
  892. width: 40rpx;
  893. height: 40rpx;
  894. border-radius: 50%;
  895. border: 2rpx solid #E5E5E5;
  896. background: #ffffff;
  897. display: flex;
  898. align-items: center;
  899. justify-content: center;
  900. margin-right: 24rpx;
  901. .check-icon {
  902. font-size: 24rpx;
  903. color: #ffffff;
  904. font-weight: bold;
  905. }
  906. }
  907. .sort-option-text {
  908. font-size: 28rpx;
  909. color: #333333;
  910. flex: 1;
  911. }
  912. }
  913. }
  914. }
  915. }
  916. .title-left {
  917. display: flex;
  918. align-items: center;
  919. gap: 8rpx;
  920. }
  921. .job-title-text {
  922. color: rgba(23, 23, 37, 1);
  923. font-family: DM Sans;
  924. font-size: 38rpx;
  925. font-weight: 700;
  926. line-height: 48rpx;
  927. letter-spacing: 0.5%;
  928. text-align: left;
  929. }
  930. .salary-text-box {
  931. border-radius: 24rpx;
  932. background: #FEE2E3;
  933. display: flex;
  934. justify-content: flex-start;
  935. align-items: center;
  936. padding: 6rpx 24rpx;
  937. .jipin-icon {
  938. width: 20rpx;
  939. height: 20rpx;
  940. margin-right: 4rpx;
  941. }
  942. .jipin-text {
  943. color: rgba(237, 66, 69, 1);
  944. font-family: DM Sans;
  945. font-size: 18rpx;
  946. font-weight: 400;
  947. line-height: 20px;
  948. letter-spacing: 0.5%;
  949. text-align: left;
  950. }
  951. }
  952. .salary-text {
  953. color: rgba(1, 107, 246, 1);
  954. font-family: DM Sans;
  955. font-size: 28rpx;
  956. font-weight: 700;
  957. line-height: 40rpx;
  958. letter-spacing: 0.5%;
  959. text-align: right;
  960. }
  961. .company-name,
  962. .company-people {
  963. color: rgba(156, 164, 171, 1);
  964. font-family: DM Sans;
  965. font-size: 24rpx;
  966. font-weight: 400;
  967. line-height: 40rpx;
  968. letter-spacing: 0.5%;
  969. text-align: left;
  970. }
  971. .job-tag {
  972. height: 42rpx;
  973. display: flex;
  974. flex-direction: row;
  975. justify-content: center;
  976. align-items: center;
  977. padding: 8rpx;
  978. border-radius: 8rpx;
  979. background: rgba(198, 198, 198, 0.1);
  980. margin-right: 16rpx;
  981. margin-bottom: 16rpx;
  982. color: rgba(153, 153, 153, 1);
  983. font-size: 24rpx;
  984. }
  985. .company-info-text,
  986. .location-text {
  987. color: rgba(156, 164, 171, 1);
  988. font-family: DM Sans;
  989. font-size: 20rpx;
  990. font-weight: 400;
  991. line-height: 40rpx;
  992. letter-spacing: 0.5%;
  993. text-align: left;
  994. }
  995. .reply-time {
  996. display: flex;
  997. flex-direction: row;
  998. justify-content: center;
  999. align-items: center;
  1000. padding: 8rpx;
  1001. font-family: DM Sans;
  1002. font-size: 20rpx;
  1003. font-weight: 400;
  1004. line-height: 40rpx;
  1005. letter-spacing: 0.5%;
  1006. text-align: left;
  1007. border-radius: 12rpx;
  1008. background: #ECE1FD;
  1009. color: #8858C5;
  1010. margin-left:10rpx
  1011. }
  1012. .gwList {
  1013. width: 100%;
  1014. margin-top: 410rpx;
  1015. .gwList-box {
  1016. width: 710rpx;
  1017. height: 100%;
  1018. .box{
  1019. margin-bottom: 25rpx;
  1020. }
  1021. .gwList-box-item {
  1022. width: 100%;
  1023. // height: 329rpx;
  1024. background-color: #ffffff;
  1025. border-radius: 12rpx;
  1026. margin-bottom: 20rpx;
  1027. padding: 36rpx;
  1028. background: rgba(253, 253, 253, 1);
  1029. border: 0.5px solid rgba(227, 231, 236, 1);
  1030. }
  1031. .company{
  1032. padding: 20rpx;
  1033. background:#fff;
  1034. margin-bottom:0rpx;
  1035. .gwList-box-item-box-info-l{
  1036. width: 80%;
  1037. margin-left:20rpx;
  1038. margin-right: 20rpx;
  1039. }
  1040. }
  1041. .companyPost{
  1042. padding: 20rpx;
  1043. margin-top:8rpx;
  1044. margin-bottom:0rpx;
  1045. .location-text{
  1046. font-size: 26rpx;
  1047. font-weight: 500;
  1048. color: #007AFF;
  1049. align-self: flex-start;
  1050. }
  1051. .companyTitle{
  1052. font-size:32rpx;
  1053. font-weight: 500;
  1054. color:#111
  1055. }
  1056. .morePost{
  1057. color: #007AFF;
  1058. font-size: 20rpx;
  1059. text-align: center;
  1060. }
  1061. }
  1062. .gwList-box-item-box {
  1063. width: 100%;
  1064. height: 100%;
  1065. .gwList-box-item-box-title {
  1066. }
  1067. .gwList-box-item-box-label {
  1068. margin-top: 14rpx;
  1069. }
  1070. .gwList-box-item-box-name {
  1071. margin-top: 14rpx;
  1072. color: #999999;
  1073. font-size: 28rpx;
  1074. font-weight: 500;
  1075. }
  1076. .gwList-box-item-box-line {
  1077. width: 100%;
  1078. border: 1rpx solid #E6E6E6;
  1079. margin-top: 30rpx;
  1080. margin-bottom: 20rpx;
  1081. }
  1082. .gwList-box-item-box-info {
  1083. font-size: 26rpx;
  1084. .gwList-box-item-box-info-l {
  1085. color: #1A1A1A;
  1086. .tags{
  1087. gap:10rpx;
  1088. display: flex;
  1089. margin-top: 10rpx;
  1090. }
  1091. }
  1092. .gwList-box-item-box-info-r {
  1093. color: #999999;
  1094. max-width: 300rpx;
  1095. }
  1096. }
  1097. }
  1098. }
  1099. }
  1100. </style>