search.vue 30 KB

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