search.vue 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187
  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.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. 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.key=this.keyword
  487. let action=this.currentSx==1?'/app/company/getCompanyPostPush':'/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. white-space: nowrap;
  995. }
  996. .reply-time {
  997. display: flex;
  998. flex-direction: row;
  999. justify-content: center;
  1000. align-items: center;
  1001. padding: 8rpx;
  1002. font-family: DM Sans;
  1003. font-size: 20rpx;
  1004. font-weight: 400;
  1005. line-height: 40rpx;
  1006. letter-spacing: 0.5%;
  1007. text-align: left;
  1008. border-radius: 12rpx;
  1009. background: #ECE1FD;
  1010. color: #8858C5;
  1011. margin-left:10rpx
  1012. }
  1013. .gwList {
  1014. width: 100%;
  1015. margin-top: 410rpx;
  1016. .gwList-box {
  1017. width: 710rpx;
  1018. height: 100%;
  1019. .box{
  1020. margin-bottom: 25rpx;
  1021. }
  1022. .gwList-box-item {
  1023. width: 100%;
  1024. // height: 329rpx;
  1025. background-color: #ffffff;
  1026. border-radius: 12rpx;
  1027. margin-bottom: 20rpx;
  1028. padding: 36rpx;
  1029. background: rgba(253, 253, 253, 1);
  1030. border: 0.5px solid rgba(227, 231, 236, 1);
  1031. }
  1032. .company{
  1033. padding: 20rpx;
  1034. background:#fff;
  1035. margin-bottom:0rpx;
  1036. .gwList-box-item-box-info-l{
  1037. width: 80%;
  1038. margin-left:20rpx;
  1039. margin-right: 20rpx;
  1040. }
  1041. }
  1042. .companyPost{
  1043. padding: 20rpx;
  1044. margin-top:8rpx;
  1045. margin-bottom:0rpx;
  1046. .location-text{
  1047. font-size: 26rpx;
  1048. font-weight: 500;
  1049. color: #007AFF;
  1050. align-self: flex-start;
  1051. }
  1052. .companyTitle{
  1053. font-size:32rpx;
  1054. font-weight: 500;
  1055. color:#111
  1056. }
  1057. .morePost{
  1058. color: #007AFF;
  1059. font-size: 20rpx;
  1060. text-align: center;
  1061. }
  1062. }
  1063. .gwList-box-item-box {
  1064. width: 100%;
  1065. height: 100%;
  1066. .gwList-box-item-box-title {
  1067. }
  1068. .gwList-box-item-box-label {
  1069. margin-top: 14rpx;
  1070. }
  1071. .gwList-box-item-box-name {
  1072. margin-top: 14rpx;
  1073. color: #999999;
  1074. font-size: 28rpx;
  1075. font-weight: 500;
  1076. }
  1077. .gwList-box-item-box-line {
  1078. width: 100%;
  1079. border: 1rpx solid #E6E6E6;
  1080. margin-top: 30rpx;
  1081. margin-bottom: 20rpx;
  1082. }
  1083. .gwList-box-item-box-info {
  1084. font-size: 26rpx;
  1085. .gwList-box-item-box-info-l {
  1086. color: #1A1A1A;
  1087. .tags{
  1088. gap:10rpx;
  1089. display: flex;
  1090. margin-top: 10rpx;
  1091. flex-flow: row wrap;
  1092. }
  1093. }
  1094. .gwList-box-item-box-info-r {
  1095. color: #999999;
  1096. max-width: 300rpx;
  1097. }
  1098. }
  1099. }
  1100. }
  1101. }
  1102. </style>