searchCom.vue 28 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199
  1. <template>
  2. <div class="search" style="padding-bottom: 40px;">
  3. <!-- 条件筛选区域 -->
  4. <el-affix @change="change" z-index="10" :offset="60">
  5. <div :style="isTop?'background-color:#ffffff;':'margin-top: 20px;'"
  6. class="condizione flex align-center justify-center">
  7. <div class="condizione-box flex align-center justify-center">
  8. <div class="condizione-box-c">
  9. <!-- 搜索框 -->
  10. <div class="condizione-box-c-searchc flex align-center justify-between">
  11. <div class="condizione-box-c-search flex justify-between">
  12. <div class="condizione-box-c-search-in flex align-center justify-center">
  13. <div class="condizione-box-c-search-ins flex align-center justify-center">
  14. <el-input @keyup.enter="startSearch()" v-model="keyWord" placeholder="根据职位搜索" />
  15. </div>
  16. </div>
  17. <div @click="startSearch()" class="condizione-box-c-search-btn flex justify-center">
  18. <el-image style="width: 20px; height: 20px;margin-right: 8px;"
  19. src="/images/index/search.png" fit="cover" />
  20. 搜索
  21. </div>
  22. </div>
  23. <div class="condizione-box-c-downApp flex align-center justify-center">
  24. <el-image style="width: 20px; height: 30px;margin-right: 10px;"
  25. src="/images/index/phone.png" fit="cover" />
  26. <div class="condizione-box-c-downApps">
  27. <div class="condizione-box-c-downAppst">
  28. 扫描二维码
  29. </div>
  30. <div class="condizione-box-c-downAppsb">
  31. 不错过每条消息
  32. </div>
  33. </div>
  34. <div class="condizione-box-c-downApp-rq">
  35. <div class="condizione-box-c-downApp-rq-img">
  36. <!-- <VueQrcode type="image/png" :color="qrColor" :value="options" :margin="0"
  37. errorCorrectionLevel="quartile" :width="size" /> -->
  38. <img :src="options" style="width: 160px;height: auto;" />
  39. </div>
  40. <div class="condizione-box-c-downApp-rq-img-txt">
  41. 微信扫描二维码
  42. </div>
  43. </div>
  44. </div>
  45. </div>
  46. <!-- 地区选择 -->
  47. <div class="condizione-box-c-city">
  48. <div class="condizione-box-c-city-title">
  49. 城市和地区
  50. </div>
  51. <div class="condizione-box-c-city-s flex flex-wrap">
  52. <div class="condizione-box-c-city-s-i flex align-center" @click="allCitys = true">
  53. <el-text style="color: #00DD9A;font-size: 14px;margin-right: 10px;">{{cityList[cityIndex]?.city || city}}</el-text>
  54. [切换城市]
  55. </div>
  56. </div>
  57. <div class="condizione-box-c-city-d flex flex-wrap">
  58. <div @click="selectCity(item)" :style="county==item?'color:#00DD9A;':''"
  59. class="condizione-box-c-city-d-i" v-for="(item,index) in countyList" :key="index">
  60. {{item}}
  61. </div>
  62. </div>
  63. </div>
  64. <!-- 行业筛选 -->
  65. <div class="condizione-box-c-hy flex align-center justify-between">
  66. <div class="condizione-box-c-hy-l flex align-center">
  67. <div v-on:mouseover="mouseovermy(item)" v-on:mouseout="mouseoutmy(item)"
  68. class=" flex align-center" v-for="(item,index) in searchCondizione" :key="index">
  69. <el-popover placement="bottom-start" width="auto" trigger="hover" hide-after="0">
  70. <template #reference>
  71. <div class="condizione-box-c-hy-l-i flex align-center">
  72. {{item.name}}
  73. <span v-if="item.num>0">({{item.num}})</span>
  74. <el-icon :size="14" style="margin-left: 4px;" v-if="item.isUp==false">
  75. <CaretBottom />
  76. </el-icon>
  77. <el-icon :size="14" style="margin-left: 4px;" v-else>
  78. <CaretTop />
  79. </el-icon>
  80. </div>
  81. </template>
  82. <!-- 行业选择 -->
  83. <div class="hangye" v-if="index==0">
  84. <div v-if="itemList.length>0" class="hangye-item flex justify-between"
  85. v-for="(item,index) in itemList" :key="index">
  86. <div class="hangye-l">
  87. {{item.industryName}}
  88. </div>
  89. <div class="hangye-r flex flex-wrap">
  90. <div @click="selectHy(ite.industryName)"
  91. :style="isSelectHy(ite.industryName)?'color:#00DD9A':''"
  92. class="hangye-r-item" v-for="(ite,ind) in item.childrenList">
  93. {{ite.industryName}}
  94. </div>
  95. </div>
  96. </div>
  97. <el-empty v-else description="暂无数据" />
  98. </div>
  99. <div class="zhiwei" v-if="index == 1">
  100. <div v-if="jobList.length>0" class="zhiwei-item flex justify-between"
  101. v-for="(item,index) in jobList" :key="index">
  102. <div class="zhiwei-item-l">
  103. {{item.ruleClassifyName}}
  104. </div>
  105. <div class="zhiwei-item-r">
  106. <div class="zhiwei-item-r-i flex flex-wrap"
  107. v-for="(ite,ind) in item.childrens" :key="ind">
  108. <div class="zhiwei-item-r-txt">
  109. {{ite.title}}
  110. </div>
  111. <div :style="keyWord==it.ruleClassifyName?'color:#00DD9A':''"
  112. class="zhiwei-item-r-i-i"
  113. @click="selectCondition(it.ruleClassifyName,1)"
  114. v-for="(it,ins) in ite.childrens" :key="ins">
  115. {{it.ruleClassifyName}}
  116. </div>
  117. </div>
  118. </div>
  119. </div>
  120. <el-empty v-else description="暂无数据" />
  121. </div>
  122. <!-- 工作经验 -->
  123. <div class="jobType" v-if="index==2">
  124. <div class="jobType-item" :style="experience==item.value?'color:#00DD9A':''"
  125. @click="selectCondition(item.value,2)" v-for="(item,index) in jyList"
  126. :key="index">
  127. {{item.value}}
  128. </div>
  129. </div>
  130. <!-- 薪资 -->
  131. <div class="jobType" v-if="index==3">
  132. <div class="jobType-item"
  133. :style="salaryRange==item.value?'color:#00DD9A':''"
  134. @click="selectCondition(item.value,3)" v-for="(item,index) in moneyList"
  135. :key="index">
  136. {{item.value}}
  137. </div>
  138. </div>
  139. <!-- 学历 -->
  140. <div class="jobType" v-if="index==4">
  141. <div class="jobType-item" :style="education==item.value?'color:#00DD9A':''"
  142. @click="selectCondition(item.value,4)"
  143. v-for="(item,index) in schoolList" :key="index">
  144. {{item.value}}
  145. </div>
  146. </div>
  147. </el-popover>
  148. </div>
  149. </div>
  150. <div class="condizione-box-c-hy-r" @click="cleanSecect()">
  151. 清空筛选条件
  152. </div>
  153. </div>
  154. </div>
  155. </div>
  156. </div>
  157. </el-affix>
  158. <!-- 岗位列表主体 -->
  159. <div class="content flex align-center justify-center">
  160. <div class="content-box flex justify-between">
  161. <div v-show="isNoList == false" class="content-l" v-loading="loading">
  162. <div class="content-l-item flex justify-between" @click="goDetails(item)"
  163. v-for="(item,index) in jobDataList" :key="index">
  164. <div class="content-l-item-l">
  165. <div class="content-l-item-title flex align-center">
  166. <img style="width: 50px;height: 50px;border-radius: 50%;margin-right: 10px;"
  167. :src="item.userAvatar?item.userAvatar:'/logo.png'" alt="" />
  168. {{item.userName}}
  169. <span>
  170. 【{{item.city}}】
  171. </span>
  172. </div>
  173. <div class="content-l-item-info flex align-center flex-wrap">
  174. <div class="content-l-item-infomoney">
  175. {{item.resumesCompensation}}
  176. </div>
  177. <div class="content-l-item-infolabel">
  178. {{item.resumesWorkExperience}}
  179. </div>
  180. <div class="content-l-item-infolabel">
  181. {{item.resumesSex==1?'男':'女'}}
  182. </div>
  183. <div class="content-l-item-infolabel">
  184. {{item.resumesAge}}岁
  185. </div>
  186. <div class="content-l-item-infolabel">
  187. {{item.resumesMarriage}}
  188. </div>
  189. <div class="content-l-item-infolabel">
  190. {{item.resumesPost}}
  191. </div>
  192. </div>
  193. <div class="content-l-item-btn flex align-center">
  194. <div class="content-l-item-btn-item" v-for="(ite,ind) in item.industryName">
  195. {{ite}}<el-divider v-if="ind+1<item.industryName.length" direction="vertical" />
  196. </div>
  197. </div>
  198. </div>
  199. <div class="content-l-item-r">
  200. <div class="content-l-item-r-title flex algin-center">
  201. <!-- <img :src="item.company.companyLogo" alt="" /> -->
  202. <div class="content-l-item-r-title-r">
  203. <div class="content-l-item-r-title-r-t">
  204. {{item.school}}
  205. </div>
  206. <div style="margin-top: 20px;" class="content-l-item-r-title-r-b flex align-center">
  207. <div class="content-l-item-r-title-r-b-i">
  208. {{item.resumesEducation}}
  209. </div>
  210. <div class="content-l-item-r-title-r-b-i">
  211. {{item.major}}
  212. </div>
  213. </div>
  214. </div>
  215. </div>
  216. <div class="content-l-item-r-bom flex align-center">
  217. <el-icon size="13" style="margin-right: 10px;">
  218. <MapLocation />
  219. </el-icon>
  220. <div class="content-l-item-r-bomtxt">
  221. 毕业时间:{{item.graduationTime}}
  222. </div>
  223. </div>
  224. </div>
  225. </div>
  226. <!-- 分页 -->
  227. <div class="content-l-item-pag flex align-center justify-center">
  228. <el-pagination @current-change="currentChange" v-model="page" :page-count="pages"
  229. :default-page-size="limit" background layout="prev, pager, next" />
  230. </div>
  231. </div>
  232. <div class="content-l" v-if="isNoList">
  233. <el-empty description="暂无匹配岗位" />
  234. </div>
  235. <div class="content-r">
  236. <resume :city="city" @goDetails="goDetails" />
  237. </div>
  238. </div>
  239. </div>
  240. <!-- 切换城市 -->
  241. <el-dialog v-model="allCitys" :draggable="true" destroy-on-close align-center center>
  242. <template #header>
  243. <div class="my-header flex align-center">
  244. <div class="my-header-title" style="font-weight: bold;">
  245. 切换城市
  246. </div>
  247. </div>
  248. </template>
  249. <div class="citys">
  250. <div class="citys-item">
  251. <div @click="selectCity(item.city)" v-for="(item,index) in cityList" :key="index"
  252. class="citys-item-citys">
  253. {{item.city}}
  254. </div>
  255. </div>
  256. </div>
  257. </el-dialog>
  258. </div>
  259. </template>
  260. <script>
  261. import VueQrcode from 'vue-qrcode'
  262. import resume from '../../components/resume/resume.vue'
  263. import axios from 'axios';
  264. import jsonp from 'axios-jsonp'
  265. import citysData from '../../components/header/citys.json'
  266. export default {
  267. components: {
  268. VueQrcode,
  269. resume
  270. },
  271. data() {
  272. return {
  273. size: 160, //二维码大小
  274. qrColor: {
  275. 'background': '#ffffff'
  276. },
  277. options: '', //生成二维码的内容
  278. keyWord: '', //搜索内容
  279. cityList: [], //城市列表
  280. cityIndex: 0,
  281. searchCondizione: [{
  282. name: '公司行业',
  283. num: 0,
  284. isUp: false
  285. },
  286. {
  287. name: '职位类型',
  288. num: 0,
  289. isUp: false
  290. },
  291. {
  292. name: '工作经验',
  293. num: 0,
  294. isUp: false
  295. },
  296. {
  297. name: '薪资待遇',
  298. num: 0,
  299. isUp: false
  300. },
  301. {
  302. name: '学历要求',
  303. num: 0,
  304. isUp: false
  305. }
  306. ], //筛选条件
  307. itemList: [], //行业数据
  308. jobList: [], //岗位列表
  309. jobTypeList: [], //工作性质
  310. moneyList: [], //薪资列表
  311. jyList: [], //工作经验
  312. schoolList: [], //学历列表
  313. city: '', //当前选中的地区
  314. allCitys: false, //是否显示全部城市弹框
  315. citys: '', //定位城市
  316. jobDataList: [], //岗位列表
  317. page: 1, //分页
  318. limit: 10, //每页条数
  319. pages: 1, //总页数
  320. loading: false, //加载工
  321. isTop: false,
  322. isNoList: false,
  323. industry: [], //行业
  324. postType: '', //求职类型
  325. experience: '', //工作经验
  326. salaryRange: '', //薪资
  327. education: '', //学历
  328. companyPeople: '', //公司规模
  329. }
  330. },
  331. computed: {
  332. //计算城市
  333. countyList() {
  334. return this.cityList.length > 0 ? ['全部', ...this.cityList[this.cityIndex].countyList] : ['全部']
  335. },
  336. },
  337. mounted() {
  338. this.city = ''
  339. this.keyWord = this.$route.query.keyWord
  340. //app下载地址
  341. this.getAppDown()
  342. //获取城市列表
  343. this.getList()
  344. //获取行业列表
  345. this.getIndustryList()
  346. //获取岗位列表
  347. this.getJobList()
  348. //工作性质
  349. this.getPostType()
  350. //薪资
  351. this.getMoneyList()
  352. //工作经验
  353. this.getjyList()
  354. //学历
  355. this.getschoolList()
  356. //获取简历列表
  357. // this.getUserList()
  358. },
  359. methods: {
  360. //获取app下载地址
  361. getAppDown() {
  362. this.$Request.get('/app/common/type/423').then(res => {
  363. if (res.code == 0) {
  364. this.options = res.data.value
  365. }
  366. })
  367. },
  368. /**
  369. * @param {Object} item 详情参数
  370. * 去详情
  371. */
  372. goDetails(item) {
  373. if (localStorage.getItem('token')) {
  374. this.$router.push({
  375. name: 'resumeInfo',
  376. query: {
  377. resumesId: item.resumesId
  378. }
  379. })
  380. } else {
  381. this.$router.push({
  382. name: 'login'
  383. })
  384. }
  385. },
  386. //开始搜索
  387. startSearch() {
  388. this.page = 1
  389. this.getUserList()
  390. },
  391. //选择筛选条件
  392. selectCondition(ite, type) {
  393. switch (type) {
  394. case 1: //职位
  395. this.keyWord = ite
  396. this.searchCondizione[1].name = ite
  397. break;
  398. case 2: //工作经验
  399. this.experience = ite
  400. this.searchCondizione[2].name = ite
  401. break;
  402. case 3: //薪资
  403. this.salaryRange = ite
  404. this.searchCondizione[3].name = ite
  405. break;
  406. case 4: //选择学历
  407. this.education = ite
  408. this.searchCondizione[4].name = ite
  409. break;
  410. default:
  411. break;
  412. }
  413. this.page = 1
  414. this.getUserList()
  415. },
  416. //选中行业
  417. selectHy(ite) {
  418. let index = this.industry.findIndex(item => item == ite)
  419. if (index == -1) { //没有则加入
  420. this.industry.push(ite)
  421. this.searchCondizione[0].name = this.industry[0]
  422. } else { //有则取消
  423. this.industry.splice(index, 1)
  424. if (this.industry.length == 0) {
  425. this.searchCondizione[0].name = '公司行业'
  426. } else {
  427. this.searchCondizione[0].name = this.industry[0]
  428. }
  429. }
  430. this.page = 1
  431. this.getUserList()
  432. },
  433. //判断是否选中
  434. isSelectHy(ite) {
  435. let index = this.industry.findIndex(item => item == ite)
  436. return index == -1 ? false : true
  437. },
  438. //清空筛选条件
  439. cleanSecect() {
  440. this.industry = [] //行业
  441. this.keyWord = '' //岗位名称
  442. this.postType = '' //求职类型
  443. this.experience = '' //工作经验
  444. this.salaryRange = '' //薪资范围
  445. this.education = '' //学历
  446. this.companyPeople = '' //公司规模
  447. this.page = 1
  448. this.getUserList()
  449. this.searchCondizione[0].name = '公司行业'
  450. this.searchCondizione[1].name = '职位类型'
  451. this.searchCondizione[2].name = '工作经验'
  452. this.searchCondizione[3].name = '薪资待遇'
  453. this.searchCondizione[4].name = '学历要求'
  454. },
  455. //分页
  456. currentChange(e) {
  457. this.page = e
  458. this.getUserList()
  459. },
  460. //选择城市
  461. selectCity(item) {
  462. // 查找选中城市的索引
  463. const index = this.cityList.findIndex(city => city.city === item)
  464. if (index !== -1) {
  465. this.cityIndex = index
  466. this.county = this.countyList[0]
  467. this.page = 1
  468. this.allCitys = false
  469. this.getUserList();
  470. }
  471. },
  472. /**
  473. * @param {Boolean} e
  474. * 是否触顶
  475. */
  476. change(e) {
  477. this.isTop = e
  478. },
  479. /**
  480. * 获取岗位列表
  481. */
  482. getUserList() {
  483. // debugger;
  484. this.loading = true
  485. let data = {
  486. page: this.page,
  487. limit: this.limit,
  488. resumesPost: this.keyWord, //岗位名称
  489. screen: 2, //1推荐 2最新
  490. // resumesIntention: this.city, //城市
  491. city: this.city, //城市
  492. resumesCompensation: this.salaryRange, //薪资范围
  493. resumesEducation: this.education, //学历
  494. resumesWorkExperience: this.experience, //经验
  495. industryName: this.industry.join(','), //行业
  496. companyId: localStorage.getItem('companyId'),
  497. userId: localStorage.getItem('userId') ? localStorage.getItem('userId') : ''
  498. }
  499. this.$Request.post('/app/resumes/selectResumesList', data,{type: 'json'}).then(res => {
  500. console.log(res)
  501. this.loading = false
  502. if (res.code == 0) {
  503. this.pages = res.data.total
  504. res.data.records.map(item => {
  505. if (item.industryName) {
  506. item.industryName = item.industryName.split(',')
  507. } else {
  508. item.industryName = []
  509. }
  510. })
  511. this.jobDataList = res.data.records
  512. if (this.jobDataList.length > 0) {
  513. this.isNoList = false
  514. } else {
  515. this.isNoList = true
  516. }
  517. }
  518. })
  519. },
  520. mouseovermy(item) {
  521. this.mouseoutmy()
  522. item.isUp = true
  523. },
  524. mouseoutmy() {
  525. this.searchCondizione.map(item => {
  526. item.isUp = false
  527. })
  528. },
  529. /**
  530. * schoolList
  531. * 学历列表
  532. */
  533. getschoolList() {
  534. let data = {
  535. type: '学历'
  536. }
  537. this.$Request.get('/app/dict/list', {
  538. params: data
  539. }).then(res => {
  540. if (res.code == 0) {
  541. this.schoolList = res.data
  542. }
  543. })
  544. },
  545. /**
  546. * jyList
  547. * 工作经验
  548. */
  549. getjyList() {
  550. let data = {
  551. type: '工作经验'
  552. }
  553. this.$Request.get('/app/dict/list', {
  554. params: data
  555. }).then(res => {
  556. if (res.code == 0) {
  557. this.jyList = res.data
  558. }
  559. })
  560. },
  561. /**
  562. * 薪资
  563. */
  564. getMoneyList() {
  565. let data = {
  566. type: '薪资'
  567. }
  568. this.$Request.get('/app/dict/list', {
  569. params: data
  570. }).then(res => {
  571. if (res.code == 0) {
  572. this.moneyList = res.data
  573. }
  574. })
  575. },
  576. /**
  577. * 工作性质
  578. */
  579. getPostType() {
  580. let data = {
  581. type: '工作性质'
  582. }
  583. this.$Request.get('/app/dict/list', {
  584. params: data
  585. }).then(res => {
  586. if (res.code == 0) {
  587. this.jobTypeList = res.data
  588. }
  589. })
  590. },
  591. /**
  592. * 获取岗位列表
  593. */
  594. getJobList() {
  595. this.$Request.get('/app/rule/getClassifyList').then(res => {
  596. if (res.code == 0) {
  597. if (res.data) {
  598. this.jobList = res.data
  599. // this.rightList = this.list[this.current].childrens
  600. }
  601. }
  602. })
  603. },
  604. /**
  605. * 获取行业数据
  606. */
  607. getIndustryList() {
  608. this.$Request.get('/app/industry/getIndustryList').then(res => {
  609. if (res.code == 0) {
  610. this.itemList = res.data
  611. }
  612. })
  613. },
  614. /**
  615. * 获取地址数据
  616. */
  617. getList() {
  618. // 使用本地citys.json数据
  619. this.cityList = []
  620. // 定义直辖市列表
  621. const municipalities = ['北京市', '上海市', '天津市', '重庆市']
  622. // 遍历省份
  623. citysData.forEach(province => {
  624. // 遍历城市
  625. province.children.forEach(city => {
  626. // 提取区域列表
  627. const countyList = city.children.map(county => county.label)
  628. // 确定城市名称
  629. let cityName = city.label
  630. // 如果是直辖市,取上一级的label(即省份名称)
  631. if (municipalities.includes(province.label) && city.label === '市辖区') {
  632. cityName = province.label
  633. }
  634. // 添加到cityList
  635. this.cityList.push({
  636. city: cityName,
  637. countyList: countyList
  638. })
  639. })
  640. })
  641. // 处理localStorage中存储的城市名称匹配
  642. if (localStorage.getItem('city')) {
  643. console.log(localStorage.getItem('city'))
  644. const storedCity = localStorage.getItem('city')
  645. // 设置city值
  646. this.city = storedCity
  647. }
  648. this.getLocation()
  649. },
  650. getLocation() {
  651. //默认全部区
  652. this.county = '全部'
  653. // 设置定位城市
  654. if (this.cityList.length > 0) {
  655. this.citys = this.cityList[this.cityIndex].city
  656. }
  657. this.getUserList();
  658. // let data = {
  659. // key: "ZBABZ-ZWECU-UQTVV-4LYDR-COK3F-5SF75", //申请的密钥
  660. // output: "jsonp"
  661. // };
  662. // let url = "https://apis.map.qq.com/ws/location/v1/ip"
  663. // axios.get(url, {
  664. // params: data,
  665. // adapter: jsonp
  666. // }).then(res => {
  667. // this.city = res.data.result.ad_info.city
  668. // this.getUserList()
  669. // }).catch(err => {
  670. // console.log(err)
  671. // })
  672. },
  673. }
  674. }
  675. </script>
  676. <style lang="scss" scoped>
  677. $marginTop-60: 120px;
  678. .content {
  679. width: 100%;
  680. margin-top: 20px;
  681. .content-box {
  682. width: calc(100% - $marginTop-60 * 2);
  683. }
  684. .content-l {
  685. width: 65%;
  686. }
  687. .content-l-item:hover {
  688. box-shadow: 0 10px 10px 0 rgba(153, 153, 153, 0.3);
  689. }
  690. .content-l-item {
  691. width: 100%;
  692. background-color: #ffffff;
  693. border-radius: 13px;
  694. margin-bottom: 20px;
  695. cursor: pointer;
  696. }
  697. .content-l-item-pag {
  698. width: 100%;
  699. padding: 20px 0;
  700. }
  701. .content-l-item-l {
  702. width: 55%;
  703. }
  704. .content-l-item-r {
  705. width: 45%;
  706. position: relative;
  707. }
  708. .content-l-item-r-title {
  709. width: 100%;
  710. height: 54px;
  711. margin-top: 20px;
  712. img {
  713. width: 54px;
  714. height: 54px;
  715. border-radius: 12px;
  716. }
  717. .content-l-item-r-title-r {
  718. margin-left: 10px;
  719. }
  720. .content-l-item-r-title-r-t {
  721. color: #222222;
  722. font-size: 16px;
  723. font-weight: 500;
  724. margin-top: 10px;
  725. }
  726. .content-l-item-r-title-r-b-i {
  727. background-color: #f8f8f8;
  728. color: #666666;
  729. font-size: 13px;
  730. padding: 4px 10px;
  731. border-radius: 4px;
  732. margin-right: 10px;
  733. margin-top: 6px;
  734. }
  735. }
  736. .content-l-item-r-bom {
  737. width: calc(100% - 40px);
  738. height: 48px;
  739. background: linear-gradient(to bottom, #f5fcfc, #fcfbfa);
  740. padding: 0 20px;
  741. border-radius: 0 0 13px 0;
  742. position: absolute;
  743. bottom: 0%;
  744. .content-l-item-r-bomtxt {
  745. width: 340px;
  746. color: #666666;
  747. font-size: 13px;
  748. overflow: hidden;
  749. /* 添加省略号 */
  750. text-overflow: ellipsis;
  751. /* 防止文本换行 */
  752. white-space: nowrap;
  753. }
  754. }
  755. .content-l-item-title {
  756. font-weight: 500;
  757. font-size: 16px;
  758. color: #222222;
  759. padding: 20px 20px 10px 20px;
  760. }
  761. .content-l-item-info {
  762. padding: 0 20px;
  763. padding-bottom: 10px;
  764. .content-l-item-infomoney {
  765. color: #fe574a;
  766. font-size: 16px;
  767. font-weight: 500;
  768. margin-right: 10px;
  769. margin-bottom: 10px;
  770. }
  771. .content-l-item-infolabel {
  772. background-color: #f8f8f8;
  773. // margin-left: 10px;
  774. margin-right: 10px;
  775. border-radius: 4px;
  776. padding: 4px 10px;
  777. color: #666666;
  778. font-size: 13px;
  779. margin-bottom: 10px;
  780. }
  781. }
  782. .content-l-item-btn {
  783. width: calc(100% - 40px);
  784. height: 48px;
  785. background: linear-gradient(to bottom, #f5fcfc, #fcfbfa);
  786. padding: 0 20px;
  787. border-radius: 0 0 0 13px;
  788. .content-l-item-btn-item {
  789. color: #666666;
  790. font-size: 13px;
  791. }
  792. }
  793. .content-r {
  794. width: calc(35% - 20px);
  795. height: fit-content;
  796. border-radius: 13px;
  797. background-color: #ffffff;
  798. }
  799. }
  800. .jobType {
  801. .jobType-item {
  802. // width: 100%;
  803. text-align: center;
  804. line-height: 38px;
  805. cursor: pointer;
  806. }
  807. .jobType-item:hover {
  808. background-color: #f8f8f8;
  809. border-radius: 4px;
  810. color: #00DD9A;
  811. }
  812. }
  813. .zhiwei {
  814. width: 400px;
  815. max-height: 400px;
  816. overflow: hidden;
  817. overflow-y: scroll;
  818. .zhiwei-item {
  819. width: 100%;
  820. }
  821. .zhiwei-item-l {
  822. width: 40%;
  823. font-weight: 500;
  824. }
  825. .zhiwei-item-r {
  826. width: 60%;
  827. }
  828. .zhiwei-item-r-txt {
  829. width: 100%;
  830. font-weight: 500;
  831. color: #999999;
  832. }
  833. .zhiwei-item-r-i {
  834. margin-bottom: 10px;
  835. }
  836. .zhiwei-item-r-i-i {
  837. margin-top: 10px;
  838. margin-right: 10px;
  839. cursor: pointer;
  840. font-size: 14px;
  841. }
  842. .zhiwei-item-r-i-i:hover {
  843. color: #00DD9A;
  844. }
  845. }
  846. ::-webkit-scrollbar {
  847. /* Chrome, Safari, Opera */
  848. width: 4px;
  849. }
  850. ::-webkit-scrollbar-thumb {
  851. background-color: #cccccc;
  852. /* 滚动条颜色 */
  853. }
  854. ::-webkit-scrollbar-track {
  855. background-color: #ffffff;
  856. /* 轨道颜色 */
  857. }
  858. .hangye {
  859. width: 400px;
  860. max-height: 400px;
  861. overflow: hidden;
  862. overflow-y: scroll;
  863. .hangye-item {
  864. .hangye-l {
  865. width: 40%;
  866. font-weight: 500;
  867. }
  868. .hangye-r {
  869. width: 60%;
  870. .hangye-r-item {
  871. margin-right: 10px;
  872. cursor: pointer;
  873. margin-bottom: 10px;
  874. }
  875. .hangye-r-item:hover {
  876. color: #00DD9A;
  877. }
  878. }
  879. }
  880. }
  881. :deep(.el-input__wrapper) {
  882. box-shadow: none;
  883. border: none;
  884. }
  885. .condizione {
  886. width: 100%;
  887. height: auto;
  888. .condizione-box {
  889. width: calc(100% - $marginTop-60 * 2);
  890. height: 100%;
  891. background-color: #ffffff;
  892. border-radius: 13px;
  893. .condizione-box-c {
  894. width: calc(100% - 60px);
  895. }
  896. .condizione-box-c-searchc {
  897. width: 100%;
  898. height: 48px;
  899. margin-top: 30px;
  900. }
  901. .condizione-box-c-search {
  902. width: 80%;
  903. height: 100%;
  904. background-color: #00DD9A;
  905. border-radius: 13px;
  906. align-items: center;
  907. }
  908. .condizione-box-c-search-in {
  909. width: calc(90% - 2px);
  910. height: 44px;
  911. background-color: #ffffff;
  912. margin-left: 2px;
  913. border-radius: 13px;
  914. }
  915. .condizione-box-c-search-ins {
  916. width: calc(100% - 4px);
  917. }
  918. .condizione-box-c-search-btn {
  919. width: 10%;
  920. height: 48px;
  921. align-items: center;
  922. color: #ffffff;
  923. cursor: pointer;
  924. }
  925. .condizione-box-c-downApp {
  926. color: #00DD9A;
  927. cursor: pointer;
  928. position: relative;
  929. }
  930. .condizione-box-c-downApp-rq {
  931. display: none;
  932. position: absolute;
  933. bottom: -250px;
  934. background-color: #ffffff;
  935. padding: 10px 20px 20px 20px;
  936. border-radius: 13px;
  937. border: 1px solid #f5f5f5;
  938. }
  939. .condizione-box-c-downApp-rq-img-txt {
  940. text-align: center;
  941. }
  942. .condizione-box-c-downApp:hover {
  943. .condizione-box-c-downApp-rq {
  944. display: block;
  945. }
  946. }
  947. }
  948. .condizione-box-c-city {
  949. width: 100%;
  950. height: auto;
  951. margin-top: 10px;
  952. .condizione-box-c-city-title {
  953. width: fit-content;
  954. color: #00DD9A;
  955. border-bottom: 4px solid #00DD9A;
  956. font-weight: 500;
  957. cursor: pointer;
  958. }
  959. .condizione-box-c-city-s {
  960. margin-top: 18px;
  961. .condizione-box-c-city-s-i {
  962. font-weight: 400;
  963. font-size: 14px;
  964. color: #333;
  965. margin-left: 10px;
  966. margin-bottom: 10px;
  967. cursor: pointer;
  968. }
  969. .condizione-box-c-city-s-i:hover {
  970. color: #00DD9A;
  971. }
  972. }
  973. .condizione-box-c-city-d {
  974. background-color: #f8f8f8;
  975. border-radius: 4px;
  976. margin-top: 8px;
  977. padding: 8px 0 0 0;
  978. .condizione-box-c-city-d-i {
  979. font-weight: 400;
  980. font-size: 14px;
  981. color: #333;
  982. margin-left: 10px;
  983. margin-bottom: 10px;
  984. cursor: pointer;
  985. }
  986. .condizione-box-c-city-d-i:hover {
  987. color: #00DD9A;
  988. }
  989. }
  990. }
  991. .condizione-box-c-hy {
  992. margin-top: 18px;
  993. width: 100%;
  994. // height: 32px;
  995. .condizione-box-c-hy-l {
  996. .condizione-box-c-hy-l-i {
  997. padding: 6px 12px;
  998. background-color: #f8f8f8;
  999. font-weight: 400;
  1000. font-size: 14px;
  1001. color: #222222;
  1002. cursor: pointer;
  1003. margin-right: 18px;
  1004. border-radius: 4px;
  1005. margin-bottom: 10px;
  1006. }
  1007. .condizione-box-c-hy-l-i:hover {
  1008. color: #00DD9A;
  1009. }
  1010. }
  1011. .condizione-box-c-hy-r {
  1012. margin-bottom: 10px;
  1013. font-size: 14px;
  1014. font-weight: 400;
  1015. color: #999999;
  1016. cursor: pointer;
  1017. }
  1018. .condizione-box-c-hy-r:hover {
  1019. color: #00DD9A;
  1020. }
  1021. }
  1022. }
  1023. .showModal-img {
  1024. width: 100%;
  1025. height: 300px;
  1026. img {
  1027. width: 400px;
  1028. height: 300px;
  1029. }
  1030. }
  1031. .showModal-title {
  1032. width: 100%;
  1033. text-align: center;
  1034. color: #333333;
  1035. font-size: 20px;
  1036. font-weight: 500;
  1037. margin-top: 5px;
  1038. }
  1039. .showModal-content {
  1040. width: 100%;
  1041. height: auto;
  1042. margin-top: 10px;
  1043. .showModal-content-c {
  1044. width: 80%;
  1045. height: 100%;
  1046. color: #999999;
  1047. font-size: 16px;
  1048. }
  1049. }
  1050. .showModal-btn {
  1051. width: 100%;
  1052. height: 44px;
  1053. margin: 30px 0;
  1054. .showModal-btn-c {
  1055. width: 200px;
  1056. height: 100%;
  1057. background-color: #00DD9A;
  1058. border-radius: 10px;
  1059. color: #ffffff;
  1060. cursor: pointer;
  1061. }
  1062. }
  1063. .my-header {
  1064. padding: 10px 10px 0 10px;
  1065. }
  1066. .citys {
  1067. width: calc(100% - 20px);
  1068. height: 300px;
  1069. overflow: hidden;
  1070. overflow-y: scroll;
  1071. padding: 0 10px 10px 10px;
  1072. }
  1073. .citys-item {
  1074. display: flex;
  1075. flex-wrap: wrap;
  1076. .citys-item-citys {
  1077. background-color: #F2F2F7;
  1078. width: fit-content;
  1079. padding: 4px 10px;
  1080. cursor: pointer;
  1081. border-radius: 4px;
  1082. margin-top: 20px;
  1083. margin-right: 20px;
  1084. }
  1085. .citys-item-citys:hover {
  1086. background-color: #00DD9A;
  1087. color: #FFFFFF;
  1088. }
  1089. }
  1090. </style>