resumeInfo.vue 26 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066
  1. <template>
  2. <div @click.stop="closeShow()" class="postInfos" style="padding-bottom: 20px;">
  3. <!-- 岗位详情 -->
  4. <div class="postInfo flex align-center justify-center">
  5. <div class="postInfo-box">
  6. <!-- 岗位名称/薪资 -->
  7. <div class="postInfo-box-top flex align-center justify-between">
  8. <div class="postInfo-box-top-l flex align-center">
  9. <img :src="info.resumesListDtoList ? info.resumesListDtoList.userAvatar :'/default.jpg'" alt="" />
  10. {{ info.userName }}
  11. <span>{{ info.resumesListDtoList?.companyName }} </span>
  12. </div>
  13. <!-- <div class="postInfo-box-top-r flex align-center">
  14. <div @click.stop="getShare()" class="postInfo-box-top-r-qr flex align-center">
  15. <img src="/images/postimg/share.png" alt="" />
  16. 分享简历
  17. <div v-if="isShowQr" class="postInfo-box-top-r-qrs flex align-center justify-center">
  18. <img :src="qr" alt="" />
  19. </div>
  20. </div>
  21. <div v-if="info.isShield==0 || !info.isShield" @click.stop="addShield()"
  22. class="flex align-center">
  23. <img src="/images/postimg/blackPeop.png" alt="" />
  24. 加入黑名单
  25. </div>
  26. <div v-else @click.stop="delShield()" class="flex align-center">
  27. <img src="/images/postimg/blackPeop.png" alt="" />
  28. 移出黑名单
  29. </div>
  30. <div @click.stop="openShow()" class="flex align-center">
  31. <img src="/images/postimg/jubao.png" alt="" />
  32. 举报
  33. </div>
  34. </div> -->
  35. </div>
  36. <div class="postInfo-box-status flex align-center">
  37. <img src="/images/postimg/time.png" alt="" />
  38. {{ info.resumesStatus == 0 ? '离职&随时到岗' : info.resumesStatus == 1 ? '在职&月内到岗' : (info.resumesStatus
  39. == 2 ? '在职&考虑机会' :'在职&暂不考虑')}}
  40. </div>
  41. <!-- 地址、要求 -->
  42. <div class="postInfo-box-ins">
  43. {{ info.resumesWorkExperience || '0' }}年<el-divider direction="vertical" />{{
  44. info.resumesListDtoList?.degree || '无' }}<el-divider direction="vertical" />{{
  45. info.resumesListDtoList?.userAge || '无' }}岁
  46. </div>
  47. <!-- 个人优势/操作 -->
  48. <div class="postInfo-box-labels flex justify-between">
  49. <div class="postInfo-box-labels-l">
  50. {{ info.resumesListDtoList?.adv || '暂无个人优势。(最多展示三行)' }}
  51. </div>
  52. <div class="postInfo-box-labels-r flex align-center">
  53. <div @click.stop="setCollection()"
  54. class="postInfo-box-labels-r-s flex align-center justify-center">
  55. <el-icon v-if="info.isCollection==0" :size="20" style="margin-right: 6px;">
  56. <Star />
  57. </el-icon>
  58. <el-icon v-else :size="20" style="margin-right: 6px;">
  59. <StarFilled />
  60. </el-icon>
  61. {{info.isCollection==0?'收藏':'已收藏'}}
  62. </div>
  63. <div @click.stop="openMeg()" class="postInfo-box-labels-r-l flex align-center justify-center">
  64. 立即沟通
  65. </div>
  66. </div>
  67. </div>
  68. <div>
  69. </div>
  70. </div>
  71. </div>
  72. <!-- 工作经历/教育经历 -->
  73. <div class="postJs flex align-center justify-center">
  74. <div class="postJs-box">
  75. <div class="postJs-box-title" v-if="info.intentionList && info.intentionList.length > 0">
  76. 求职期望
  77. </div>
  78. <div style="margin: 20px 0;" v-if="info.intentionList && info.intentionList.length > 0">
  79. <div v-for="(item, index) in info.intentionList" :key="index" class="flex expectation align-center">
  80. {{ item.ruleClassifyName || '无' }}<el-divider direction="vertical" />{{ item.citys || '无' }}
  81. <span v-if="item.postType">({{ item.postType }})</span>
  82. <el-divider direction="vertical" />{{ item.salaryRange ? item.salaryRange + '元' : '薪资未填写' }}
  83. </div>
  84. </div>
  85. <div class="postJs-box-title" v-if="info.workExpList && info.workExpList.length>0">
  86. 工作经历
  87. </div>
  88. <div style="margin-top: 20px;" v-if="info.workExpList && info.workExpList.length>0">
  89. <el-timeline style="padding: 0;">
  90. <el-timeline-item v-for="(activity, index) in info.workExpList" :key="index">
  91. <div class="timelineItem" style="font-size: 16px;">
  92. {{ activity.companyName }}
  93. </div>
  94. <div v-for="(detail, i) in activity.workExpDetailList" :key="detail.workExpDetailId">
  95. <div class="timelineItem">
  96. {{ detail.position || '未填写职位' }}
  97. <el-divider direction="vertical" />
  98. {{ detail.startTime ? detail.startTime.slice(0, 7) : '' }} -
  99. {{ detail.endTime ? detail.endTime.slice(0, 7) : '至今' }}
  100. </div>
  101. <div class="timelineItem">
  102. {{ detail.workContent ? detail.workContent : '暂无工作描述' }}
  103. </div>
  104. <div class="timelineItem flex flex-wrap" v-if="detail.skills" style="gap: 4px;">
  105. <div class="tag" v-for="(tag, j) in JSON.parse(detail.skills)" :key="j">
  106. {{ tag }}
  107. </div>
  108. </div>
  109. </div>
  110. </el-timeline-item>
  111. </el-timeline>
  112. </div>
  113. <div class="postJs-box-title">
  114. 教育经历
  115. </div>
  116. <div style="margin-top: 20px;">
  117. <el-timeline style="padding: 0;">
  118. <el-timeline-item v-for="(activity, index) in info.eduList" :key="index">
  119. <div class="timelineItem" style="font-size: 16px;">
  120. {{ activity.school }}
  121. </div>
  122. <div class="timelineItem">
  123. {{ activity.degree }}<el-divider direction="vertical" />{{ activity.profession
  124. }}<el-divider direction="vertical" />
  125. {{ activity.startTime ? activity.startTime.split(' ')[0] : '' }} -{{ activity.endTime ?
  126. activity.endTime.split(' ')[0] : '' }}
  127. </div>
  128. <div class="timelineItem">{{ activity.detail }}</div>
  129. </el-timeline-item>
  130. </el-timeline>
  131. </div>
  132. </div>
  133. </div>
  134. <!-- 个人简介 -->
  135. <div v-if="info.resumesDetails" class="postJs flex align-center justify-center">
  136. <div class="postJs-box">
  137. <div class="postJs-box-title">
  138. 自我介绍
  139. </div>
  140. <div style="margin-top: 20px;">
  141. {{info.resumesDetails}}
  142. </div>
  143. </div>
  144. </div>
  145. <!-- 消息组件 -->
  146. <messageCom v-if="showMeg" :byUserId="byUserId" :resumesId="resumesId" :postPushId="postPushId"
  147. :chatConversationId="chatConversationId" :showMeg="showMeg" :userType="2" @closeMeg="closeMeg" />
  148. <!-- 举报弹窗 -->
  149. <el-dialog v-model="show" @close="closeJb" :draggable="true" :destroy-on-close="true" align-center center>
  150. <template #header>
  151. <div class="my-header flex align-center">
  152. <div class="my-header-title" style="font-weight: bold;">
  153. 举报
  154. </div>
  155. </div>
  156. </template>
  157. <div class="jb" v-loading="loading">
  158. <div class="jb-title">
  159. 问题和意见
  160. </div>
  161. <div class="jb-text">
  162. <el-input resize="none" :input-style="inputStyles" v-model="sendDate.content"
  163. :autosize="{ minRows: 6, maxRows: 8 }" type="textarea" placeholder="请详细描述你的问题和意见..." />
  164. </div>
  165. <div class="jb-title" style="margin-top: 20px;">
  166. 电话/微信
  167. </div>
  168. <div class="jb-text jb-texts">
  169. <el-input :input-style="inputStyles" style="width: 100%;" v-model="sendDate.contact"
  170. placeholder="方便我们联系您" />
  171. </div>
  172. <div class="jb-title" style="margin-top: 20px;">
  173. 上传图片
  174. </div>
  175. <div class="jb-text jb-texts" style="background-color: #ffffff;">
  176. <el-upload v-model:file-list="imgs" :action="action" :on-preview="handlePictureCardPreview"
  177. :on-remove="handleRemove" list-type="picture-card">
  178. <el-icon>
  179. <Plus />
  180. </el-icon>
  181. </el-upload>
  182. <el-dialog v-model="dialogVisible">
  183. <img w-full :src="dialogImageUrl" style="width: 100%;height: auto;" alt="Preview Image" />
  184. </el-dialog>
  185. </div>
  186. <div class="jb-btn flex align-center">
  187. <el-button @click.stop="show = false">取消</el-button>
  188. <el-button type="primary" @click.stop="reportSave">提交</el-button>
  189. </div>
  190. </div>
  191. </el-dialog>
  192. </div>
  193. </template>
  194. <script>
  195. import {
  196. ROOTPATH,
  197. ROOTPATH4
  198. } from '../../../comment/httpUrl.js'
  199. import axios from 'axios'
  200. import messageCom from '../../components/messageCom/messageCom.vue'
  201. import {
  202. ElMessageBox,
  203. ElMessage,
  204. } from 'element-plus'
  205. export default {
  206. components: {
  207. messageCom
  208. },
  209. data() {
  210. return {
  211. dialogImageUrl: '',
  212. dialogVisible: false,
  213. action: ROOTPATH4 + 'sqx_fast/alioss/upload',
  214. show: false,
  215. sendDate: {
  216. content: '',
  217. contact: ''
  218. },
  219. byUserId: '',
  220. chatConversationId: '',
  221. showMeg: false, //是否打开聊天组件
  222. inputStyles: {
  223. border: 'none',
  224. background: '#F7F7F7',
  225. borderRadius: '8px',
  226. boxShadow: 'none',
  227. },
  228. resumesId: '', //简历id
  229. info: {}, //简历详情
  230. qr: '', //分享二维码
  231. isShowQr: false, //是否显示分享二维码
  232. screenHeight: 0, //屏幕高度
  233. postPushId: '', //岗位id
  234. imgs: [], //上传图片
  235. loading: false,
  236. }
  237. },
  238. mounted() {
  239. this.screenHeight = window.innerHeight
  240. this.resumesId = this.$route.query.resumesId
  241. this.postPushId = this.$route.query.postPushId || localStorage.getItem('postPushId')
  242. let inviterCode = this.$route.query.inviterCode
  243. if (inviterCode) {
  244. localStorage.setItem('inviterCode', inviterCode)
  245. }
  246. if (this.resumesId) {
  247. // this.qr = ROOTPATH + '/app/invite/mpPageCreateQr?page=pages/index/game/orderDet&resumesId=' + this
  248. // .resumesId
  249. this.getJobInfo()
  250. }
  251. },
  252. methods: {
  253. //移除图片
  254. handleRemove(e) {
  255. let imgs = []
  256. this.imgs.map(item => {
  257. imgs.push(item.response.data)
  258. })
  259. this.sendDate.imgs = imgs.join(',')
  260. },
  261. //放大查看
  262. handlePictureCardPreview(e) {
  263. this.dialogImageUrl = e.url
  264. this.dialogVisible = true
  265. },
  266. closeJb() {
  267. this.imgs = []
  268. this.sendDate = {
  269. content: '',
  270. contact: ''
  271. }
  272. },
  273. //提交举报
  274. reportSave() {
  275. if (!this.sendDate.content) {
  276. ElMessageBox.alert('请输入举报内容', '提示', {
  277. confirmButtonText: '确认',
  278. })
  279. return
  280. }
  281. if (!this.sendDate.contact) {
  282. ElMessageBox.alert('请输入联系方式', '提示', {
  283. confirmButtonText: '确认',
  284. })
  285. return
  286. }
  287. if (this.imgs.length > 0) {
  288. let imgs = []
  289. this.imgs.map(item => {
  290. imgs.push(item.response.data)
  291. })
  292. this.sendDate.imgs = imgs.join(',')
  293. }
  294. this.loading = true
  295. let data = {
  296. title: this.sendDate.contact,
  297. content: JSON.stringify(this.sendDate),
  298. state: 6,
  299. byUserId: this.resumesId
  300. }
  301. this.$Request.post('/app/message/insertMessage', data, {
  302. type: 'json'
  303. }).then(res => {
  304. if (res.code == 0) {
  305. ElMessage({
  306. message: '已提交',
  307. type: 'success',
  308. duration: 1500,
  309. offset: this.screenHeight / 2
  310. })
  311. this.loading = false
  312. this.show = false
  313. } else {
  314. this.loading = false
  315. ElMessageBox.alert(res.msg, '提示', {
  316. confirmButtonText: '确认'
  317. })
  318. }
  319. })
  320. },
  321. //打开举报弹框
  322. openShow() {
  323. if (!localStorage.getItem('token')) {
  324. this.goLogo()
  325. return
  326. }
  327. this.sendDate = {
  328. content: '',
  329. contact: ''
  330. }
  331. this.show = true
  332. },
  333. /**
  334. * 收藏简历
  335. */
  336. setCollection() {
  337. if (!localStorage.getItem('token')) {
  338. this.goLogo()
  339. return
  340. }
  341. this.$Request.post("/app/myCollection/saveCollection", {
  342. resumesId: this.resumesId,
  343. type: 2
  344. }).then(res => {
  345. if (res.code == 0) {
  346. ElMessage({
  347. message: res.msg,
  348. type: 'success',
  349. duration: 1500
  350. })
  351. this.getJobInfo()
  352. }
  353. })
  354. },
  355. //去登录
  356. goLogo() {
  357. this.$router.push({
  358. name: 'login'
  359. })
  360. },
  361. //加入黑名单
  362. addShield() {
  363. if (!localStorage.getItem('token')) {
  364. this.goLogo()
  365. return
  366. }
  367. ElMessageBox.confirm(
  368. '拉入黑名单后,该用户不会再出现简历推荐中,可从黑名单中移除,确认加入黑名单?',
  369. '温馨提示', {
  370. confirmButtonText: '确认',
  371. cancelButtonText: '取消',
  372. type: 'warning',
  373. }
  374. ).then(() => {
  375. let data = {
  376. shieldType: 2,
  377. userId: this.info.userId,
  378. companyId: localStorage.getItem('companyId'),
  379. }
  380. this.$Request.post('/app/shieldCompany/insertShieldCompany', data, {
  381. type: 'json'
  382. }).then(res => {
  383. if (res.code == 0) {
  384. ElMessage({
  385. message: '已加入黑名单',
  386. type: 'success',
  387. duration: 1500,
  388. offset: this.screenHeight / 2
  389. })
  390. this.getJobInfo()
  391. } else {
  392. ElMessage({
  393. message: res.msg,
  394. type: 'error',
  395. duration: 1500,
  396. offset: this.screenHeight / 2
  397. })
  398. }
  399. })
  400. }).catch(() => {
  401. })
  402. },
  403. //移除黑名单
  404. delShield() {
  405. let data = {
  406. shieldType: 2,
  407. userId: this.info.userId,
  408. companyId: localStorage.getItem('companyId'),
  409. }
  410. this.$Request.post('/app/shieldCompany/deleteShieldCompany', data).then(res => {
  411. if (res.code == 0) {
  412. ElMessage({
  413. message: '已移出黑名单!',
  414. type: 'success',
  415. duration: 1500,
  416. offset: this.screenHeight / 2
  417. })
  418. this.getJobInfo()
  419. } else {
  420. ElMessage({
  421. message: res.msg,
  422. type: 'error',
  423. duration: 1500,
  424. offset: this.screenHeight / 2
  425. })
  426. }
  427. })
  428. },
  429. //关闭子弹窗组件的回调
  430. closeMeg(data) {
  431. //关闭聊天组件
  432. this.showMeg = data
  433. },
  434. //打开联系窗口
  435. openMsgCom() {
  436. this.getJobInfo()
  437. this.$Request.post('/app/chat/insertChatConversation', {
  438. userId: this.info.userId, //用户userid
  439. focusedUserId: localStorage.getItem('userId'),
  440. postPushId: this.postPushId,
  441. resumesId: this.resumesId,
  442. }, {
  443. type: 'json'
  444. }).then(res => {
  445. if (res.code == 0) {
  446. this.byUserId = this.info.userId
  447. this.chatConversationId = res.data.chatConversationId
  448. this.showMeg = true
  449. }
  450. })
  451. },
  452. isCheckPay() {
  453. let that = this
  454. let data = {
  455. resumesId: this.resumesId
  456. }
  457. this.$Request.get('/app/resumes/checkPower', {
  458. params: data
  459. }).then(res => {
  460. if (res.code == 0) {
  461. if (res.data.type === 1) { //当前是会员
  462. if (res.data.nowCount < res.data.maxCount) { //如果免费次数没有使用完
  463. ElMessageBox.confirm(
  464. '尊敬的会员,你可以使用会员特权免费联系ta,当前已使用' + res.data.nowCount + '次,总共' +
  465. res
  466. .data.maxCount + '次,确认联系吗?',
  467. '提示', {
  468. confirmButtonText: '确认联系',
  469. cancelButtonText: '我再想想',
  470. type: 'warning',
  471. }
  472. )
  473. .then(() => {
  474. console.log('确认')
  475. this.$Request.post('/app/userMoney/countPayResumes', data).then(
  476. ress => {
  477. if (ress.code == 0) {
  478. //购买成功直接联系
  479. that.openMsgCom()
  480. } else {
  481. ElMessage({
  482. message: ress.msg,
  483. type: 'error',
  484. duration: 1500,
  485. offset: this.screenHeight / 2
  486. })
  487. }
  488. })
  489. }).catch(() => {
  490. console.log('取消')
  491. })
  492. } else { //已经使用完了
  493. ElMessageBox.confirm(
  494. '免费联系次数已使用完,是否支付' + res.data.money + '钻石联系ta?',
  495. '提示', {
  496. confirmButtonText: '确认联系',
  497. cancelButtonText: '我再想想',
  498. type: 'warning',
  499. }
  500. )
  501. .then(() => {
  502. console.log('确认')
  503. this.$Request.post('/app/userMoney/payResumes', data).then(ress => {
  504. if (ress.code == 0) { //购买成功直接联系
  505. that.openMsgCom()
  506. } else {
  507. ElMessageBox.confirm(
  508. ress.msg,
  509. '提示', {
  510. confirmButtonText: '去充值',
  511. cancelButtonText: '取消',
  512. type: 'warning',
  513. }
  514. )
  515. .then(() => {
  516. this.$router.push({
  517. name: 'money'
  518. })
  519. }).catch(() => {
  520. console.log('取消')
  521. })
  522. }
  523. })
  524. }).catch(() => {
  525. console.log('取消')
  526. })
  527. }
  528. } else { // 不是会员
  529. if (res.data.nowCount < res.data.maxCount) { //还有免费次数
  530. ElMessageBox.confirm(
  531. '免费联系次数已使用' + res.data.nowCount + '次,总共' + res
  532. .data.maxCount + '次,确认联系吗?',
  533. '提示', {
  534. confirmButtonText: '确认联系',
  535. cancelButtonText: '我再想想',
  536. type: 'warning',
  537. }
  538. )
  539. .then(() => {
  540. console.log('确认')
  541. this.$Request.post('/app/userMoney/countPayResumes', data).then(
  542. ress => {
  543. if (ress.code == 0) {
  544. //购买成功直接联系
  545. that.openMsgCom()
  546. } else {
  547. ElMessage({
  548. message: ress.msg,
  549. type: 'error',
  550. duration: 1500,
  551. offset: this.screenHeight / 2
  552. })
  553. }
  554. })
  555. }).catch(() => {
  556. console.log('取消')
  557. })
  558. } else { //没有免费次数
  559. ElMessageBox.confirm(
  560. '免费联系次数已使用完,是否支付' + res.data.money + '钻石联系ta?',
  561. '提示', {
  562. confirmButtonText: '确认联系',
  563. cancelButtonText: '我再想想',
  564. type: 'warning',
  565. }
  566. )
  567. .then(() => {
  568. console.log('确认')
  569. this.$Request.post('/app/userMoney/payResumes', data).then(ress => {
  570. if (ress.code == 0) { //购买成功直接联系
  571. that.openMsgCom()
  572. } else {
  573. ElMessageBox.confirm(
  574. ress.msg,
  575. '提示', {
  576. confirmButtonText: '去充值',
  577. cancelButtonText: '取消',
  578. type: 'warning',
  579. }
  580. )
  581. .then(() => {
  582. this.$router.push({
  583. name: 'money'
  584. })
  585. }).catch(() => {
  586. console.log('取消')
  587. })
  588. }
  589. })
  590. }).catch(() => {
  591. console.log('取消')
  592. })
  593. }
  594. }
  595. }
  596. })
  597. },
  598. //立即联系
  599. openMeg() {
  600. if (!localStorage.getItem('token')) {
  601. this.goLogo()
  602. return
  603. }
  604. if (this.info.isPay === 0) { //需要购买
  605. this.isCheckPay()
  606. } else { //已购买的可直接联系
  607. this.openMsgCom()
  608. }
  609. },
  610. closeShow() {
  611. this.isShowQr = false
  612. },
  613. //分享简历
  614. getShare() {
  615. if (!localStorage.getItem('token')) {
  616. this.goLogo()
  617. return
  618. }
  619. // this.isShowQr = !this.isShowQr
  620. let url = ROOTPATH4 + '' + this.$route.name + '?resumesId=' + this.$route.query.resumesId +
  621. '&inviterCode=' + this.$store.state.invitationCode
  622. ElMessageBox.confirm(
  623. url,
  624. '分享简历', {
  625. confirmButtonText: '一键复制',
  626. cancelButtonText: '取消',
  627. type: 'warning',
  628. }
  629. ).then(() => {
  630. navigator.clipboard.writeText(url)
  631. .then(() => {
  632. ElMessage({
  633. type: 'success',
  634. message: '复制成功',
  635. duration: 1500,
  636. offset: this.screenHeight / 2
  637. })
  638. })
  639. .catch(() => {
  640. ElMessage({
  641. type: 'info',
  642. message: '复制失败',
  643. duration: 1500,
  644. offset: this.screenHeight / 2
  645. })
  646. })
  647. }).catch(() => {
  648. })
  649. },
  650. //获取简历详情
  651. getJobInfo() {
  652. let data = {
  653. resumesId: this.resumesId,
  654. userId: localStorage.getItem('userId'),
  655. }
  656. if (localStorage.getItem('companyId') && localStorage.getItem('companyId') != '' & localStorage.getItem(
  657. 'companyId') != null && localStorage.getItem('companyId') != 'null') {
  658. data.companyId = localStorage.getItem('companyId')
  659. }
  660. this.$Request.get('/app/resumes/selectResumesByResumesId', {
  661. params: data
  662. }).then(res => {
  663. if (res.code == 0) {
  664. this.info = res.data
  665. if (this.info.industryName) {
  666. this.info.industryName = this.info.industryName.split(',')
  667. } else {
  668. this.info.industryName = []
  669. }
  670. let arr = [{
  671. name: this.info.school,
  672. time: this.info.graduationTime,
  673. major: this.info.major,
  674. resumesEducation: this.info.resumesEducation
  675. }]
  676. this.info.schoolList = arr
  677. } else {
  678. ElMessage({
  679. type: 'info',
  680. message: '简历不存在',
  681. duration: 1500,
  682. offset: this.screenHeight / 2,
  683. })
  684. setTimeout(() => {
  685. this.$router.back()
  686. }, 1000)
  687. }
  688. })
  689. },
  690. }
  691. }
  692. </script>
  693. <style lang="scss" scoped>
  694. $marginTop-60: 120px;
  695. :deep(.el-input__wrapper) {
  696. background-color: #F7F7F7 !important;
  697. box-shadow: none !important;
  698. }
  699. :deep(.el-select__wrapper){
  700. background-color: #F7F7F7 !important;
  701. box-shadow: none !important;
  702. }
  703. :deep(.el-input) {
  704. --el-input-focus-border: none;
  705. --el-input-focus-border-color: none;
  706. }
  707. :deep(.is-focus) {
  708. box-shadow: none;
  709. }
  710. :deep(.el-textarea__inner) {
  711. box-shadow: none;
  712. }
  713. :deep(.el-input__wrapper:hover) {
  714. box-shadow: none;
  715. }
  716. :deep(.el-dialog__header) {
  717. background: linear-gradient(45deg, #f2fffa, #FFFFFF);
  718. border-radius: 14px 14px 0 0;
  719. }
  720. :deep(.el-dialog) {
  721. border-radius: 14px !important;
  722. padding: 0 !important;
  723. }
  724. :deep(.el-dialog__body) {
  725. padding-top: 10px !important;
  726. }
  727. :deep(.el-dialog__header) {
  728. background: linear-gradient(45deg, #f2fffa, #FFFFFF);
  729. padding: 10px;
  730. border-radius: 14px 14px 0 0;
  731. }
  732. .timelineItem {
  733. margin-top: 10px;
  734. }
  735. .jb {
  736. width: 100%;
  737. .jb-title {
  738. color: #333333;
  739. font-size: 14px;
  740. font-weight: 500;
  741. }
  742. .jb-text {
  743. width: 100%;
  744. margin-top: 10px;
  745. background-color: #F7F7F7;
  746. border-radius: 8px;
  747. }
  748. .jb-btn {
  749. margin-top: 40px;
  750. justify-content: flex-end;
  751. }
  752. }
  753. .postInfo {
  754. width: 100%;
  755. height: auto;
  756. margin-top: 20px;
  757. .postInfo-box {
  758. width: calc(100% - $marginTop-60 * 2);
  759. height: 100%;
  760. background-color: #ffffff;
  761. border-radius: 16px;
  762. padding: 30px 30px 10px 30px;
  763. }
  764. .postInfo-box-top-l {
  765. font-size: 20px;
  766. font-weight: 500;
  767. img {
  768. width: 50px;
  769. height: 50px;
  770. border-radius: 50%;
  771. margin-right: 10px;
  772. }
  773. span {
  774. margin-left: 30px;
  775. font-size: 18px;
  776. color: #00DD9A;
  777. font-weight: 500;
  778. }
  779. }
  780. .postInfo-box-top-r {
  781. img {
  782. width: 20px;
  783. height: 20px;
  784. margin-right: 10px;
  785. }
  786. font-size: 14px;
  787. div {
  788. color: #999999;
  789. margin-left: 30px;
  790. cursor: pointer;
  791. }
  792. }
  793. .postInfo-box-top-r-qr {
  794. position: relative;
  795. .postInfo-box-top-r-qrs {
  796. position: absolute;
  797. bottom: -160px;
  798. left: 15%;
  799. transform: translate(-50%, 0);
  800. z-index: 999;
  801. width: 150px;
  802. height: 150px;
  803. background-color: #ffffff;
  804. border-radius: 10px;
  805. border: 1px solid #f5f5f5;
  806. img {
  807. width: 120px;
  808. height: 120px;
  809. margin-right: 0;
  810. }
  811. }
  812. }
  813. .postInfo-box-status {
  814. margin-top: 20px;
  815. color: #00DD9A;
  816. font-size: 16px;
  817. img {
  818. width: 20px;
  819. height: 20px;
  820. margin-right: 10px;
  821. }
  822. }
  823. .postInfo-box-ins {
  824. margin-top: 20px;
  825. font-size: 16px;
  826. color: #666666;
  827. }
  828. .postInfo-box-labels {
  829. margin-top: 30px;
  830. width: 100%;
  831. align-items: flex-end;
  832. }
  833. .postInfo-box-labels-l {
  834. width: 70%;
  835. height: 40px;
  836. cursor: pointer;
  837. margin-bottom: 20px;
  838. .postInfo-box-labels-l-i {
  839. padding: 6px 16px;
  840. border-radius: 4px;
  841. background-color: #F5F5F5;
  842. color: #666666;
  843. font-size: 15px;
  844. margin-right: 20px;
  845. margin-bottom: 20px;
  846. }
  847. }
  848. .postInfo-box-labels-r {
  849. width: 30%;
  850. justify-content: flex-end;
  851. margin-bottom: 20px;
  852. .postInfo-box-labels-r-s {
  853. width: 120px;
  854. height: 40px;
  855. box-sizing: border-box;
  856. border: 1px solid #00DD9A;
  857. border-radius: 8px;
  858. color: #00DD9A;
  859. font-size: 18px;
  860. cursor: pointer;
  861. }
  862. .postInfo-box-labels-r-l {
  863. width: 210px;
  864. height: 40px;
  865. background: #00DD9A;
  866. border-radius: 8px;
  867. font-size: 18px;
  868. color: #ffffff;
  869. margin-left: 20px;
  870. cursor: pointer;
  871. }
  872. }
  873. }
  874. .postJs {
  875. width: 100%;
  876. height: auto;
  877. margin-top: 20px;
  878. .postJs-box {
  879. width: calc(100% - $marginTop-60 * 2);
  880. height: 100%;
  881. border-radius: 16px;
  882. padding: 30px;
  883. background-color: #ffffff;
  884. }
  885. .postJs-box-title {
  886. font-weight: 500;
  887. font-size: 18px;
  888. }
  889. .postJs-box-tag {
  890. margin-top: 20px;
  891. .postJs-box-tag-item {
  892. margin-right: 20px;
  893. margin-bottom: 20px;
  894. padding: 6px 16px;
  895. border-radius: 4px;
  896. background-color: #F5F5F5;
  897. color: #333333;
  898. font-size: 15px;
  899. cursor: pointer;
  900. }
  901. }
  902. .postJs-box-content {
  903. font-size: 16px;
  904. color: #666666;
  905. }
  906. }
  907. .postGs {
  908. width: 100%;
  909. height: auto;
  910. margin-top: 20px;
  911. .postGs-box {
  912. width: calc(100% - $marginTop-60 * 2);
  913. height: 100%;
  914. border-radius: 16px;
  915. padding: 30px;
  916. background-color: #ffffff;
  917. }
  918. .postGs-box-title {
  919. font-weight: 500;
  920. font-size: 18px;
  921. }
  922. .postGs-box-info {
  923. margin-top: 30px;
  924. img {
  925. width: 64px;
  926. height: 64px;
  927. margin-right: 10px;
  928. border-radius: 4px;
  929. }
  930. .postGs-box-info-r-name {
  931. color: #666666;
  932. font-size: 16px;
  933. }
  934. .postGs-box-info-r-bottom {
  935. margin-top: 10px;
  936. color: #666666;
  937. font-size: 14px;
  938. span {
  939. margin-left: 10px;
  940. }
  941. }
  942. }
  943. .postMap {
  944. width: 100%;
  945. height: 200px;
  946. border-radius: 10px;
  947. }
  948. .postGs-box-address {
  949. font-size: 14px;
  950. color: #666666;
  951. margin-top: 20px;
  952. }
  953. }
  954. .jb {
  955. width: calc(100% - 20px);
  956. padding: 0 10px 10px 10px;
  957. .jb-title {
  958. color: #333333;
  959. font-size: 14px;
  960. font-weight: 500;
  961. }
  962. .jb-text {
  963. width: 100%;
  964. margin-top: 10px;
  965. background-color: #F7F7F7;
  966. border-radius: 8px;
  967. }
  968. .jb-btn {
  969. margin-top: 40px;
  970. justify-content: flex-end;
  971. }
  972. }
  973. .tag {
  974. background: rgba(153, 153, 153, 0.1);
  975. border-radius: 6px;
  976. padding: 3px;
  977. color: rgba(102, 102, 102, 1);
  978. font-size: 14rpx;
  979. font-weight: 400;
  980. }
  981. .expectation{
  982. color: #303133;
  983. font-size: 14px;
  984. margin-top: 10px;
  985. }
  986. </style>