search.vue 30 KB

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