search.vue 29 KB

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