order.vue 34 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363
  1. <template>
  2. <!-- <view style="padding: 148rpx 0 40rpx;"> -->
  3. <view :style="{ padding: `${65 + statusBarHeight}px 0` }">
  4. <!-- 固定顶部导航 -->
  5. <view class="fixed-nav" :style="{ paddingTop: (12 + statusBarHeight) + 'px' }">
  6. <view class="nav-bar">
  7. <view class="nav-left" @click="goBack">
  8. <u-icon name="arrow-leftward" color="rgba(51, 51, 51, 1)" style="font-size: 38rpx;"></u-icon>
  9. </view>
  10. <view class="nav-title">职位详情</view>
  11. <view class="nav-right">
  12. <view class="nav-icons">
  13. <view class="nav-icon" @click="setCollection" v-if="!hideBottomBtn">
  14. <image v-if="info.isCollection==0" src="/static/images/index/guanzhu.svg" class="icon-img"></image>
  15. <image v-else src="/static/images/index/gzActive.svg" style="width: 52rpx;height: 52rpx;"></image>
  16. </view>
  17. <view class="nav-icon" @click="showShare">
  18. <image src="/static/images/index/fenxiang.svg" style="width: 60rpx;height: 60rpx;"></image>
  19. </view>
  20. </view>
  21. </view>
  22. </view>
  23. </view>
  24. <!-- 岗位要求 -->
  25. <view class="job flex justify-center" style="padding: 0 40rpx;">
  26. <view class="job-info flex justify-center">
  27. <view class="job-info-c">
  28. <view class="job-info-c-top flex justify-between">
  29. <view class="job-info-c-title">
  30. {{info.ruleClassifyName}}
  31. </view>
  32. <view class="job-info-c-price" v-if="info.salaryRange">
  33. {{info.salaryRange}}·{{ info.salaryTimes }}
  34. </view>
  35. </view>
  36. <view class="warning-box flex align-center" v-if="hideBottomBtn && info.status == 3">
  37. <image src="@/static/images/index/tishi.png" class="warning-icon" />
  38. <view class="warning-txt">{{ info.auditContent || '审核失败' }}</view>
  39. </view>
  40. <view class="enterprise-box-c-bto flex align-center justify-between" @click.stop="gotoMap()">
  41. <view class="enterprise-box-c-bto-l flex gap-10rpx">
  42. <u-icon name="map-fill" color="rgba(58, 57, 67, 1)" style="margin-right: 10rpx;"
  43. size="24"></u-icon>
  44. {{info.province?info.province:''}}{{info.city?info.city:''}}{{info.county?info.county:''}}{{info.address?info.address:''}}
  45. </view>
  46. </view>
  47. <view class="job-info-c-label flex align-center flex-wrap">
  48. <view class="job-info-c-label-item" v-if="info.county">
  49. {{info.county}}
  50. </view>
  51. <view class="job-info-c-label-item" v-if="info.experience">
  52. {{info.experience}}
  53. </view>
  54. <view class="job-info-c-label-item" v-if="info.education">
  55. {{info.education}}
  56. </view>
  57. </view>
  58. </view>
  59. </view>
  60. </view>
  61. <!-- 急聘 -->
  62. <view v-if="info.isDue==1" class="urgent-banner">
  63. <view class="urgent-icon">
  64. <image src="/static/images/index/jipin2.svg" class="icon-img"></image>
  65. </view>
  66. <view class="urgent-text">
  67. <view class="urgent-title">该招聘为急聘职位</view>
  68. <view class="urgent-subtitle">急清职位可在下方点击一键投递简历</view>
  69. </view>
  70. </view>
  71. <!-- 企业信息 -->
  72. <view class="enterprise-box-c-info flex align-start justify-between" style="margin: 0 40rpx;" v-if="!hideBottomBtn">
  73. <view class="enterprise-left flex align-center">
  74. <view class="avatar-container">
  75. <image v-if="avatar" :src="avatar" mode="aspectFill" class="avatar"></image>
  76. <image v-else src="@/static/logo.png" mode="" class="avatar"></image>
  77. <view class="online-dot" :style="{'background':info.user&&info.user.onlineStatus=='ONLINE'?'#00D26A':'#999'}"></view>
  78. </view>
  79. <view class="enterprise-box-c-info-n">
  80. <view class="">
  81. {{info.user?info.user.userName:''}}
  82. </view>
  83. <view class="">
  84. {{info.hr&&info.hr.hrPosition||''}}
  85. </view>
  86. <view>
  87. {{info.respondTime||(info.user&&(info.user.onlineMinutes=='从未在线'?'不久前在线':info.user.onlineMinutes))}}
  88. </view>
  89. </view>
  90. </view>
  91. <view class="more-jobs flex align-center" @click="goToMoreJobs">
  92. <text>更多职位</text>
  93. <u-icon name="arrow-right" color="rgba(29, 33, 41, 1)" size="20"></u-icon>
  94. </view>
  95. </view>
  96. <!-- 岗位介绍 -->
  97. <view class="jobRemarks flex justify-center" style="padding: 0 40rpx;">
  98. <!-- <skeleton type="round" bgColor="#ffffff"> -->
  99. <view class="jobRemarks-box flex justify-center">
  100. <view class="jobRemarks-box-c">
  101. <view class="jobRemarks-box-c-title flex align-center">
  102. <image src="/static/images/index/ins.png" class="title-icon"></image>
  103. <text>职位说明</text>
  104. </view>
  105. <!-- <view class="jobRemarks-box-c-label flex align-center flex-wrap" v-if="info.tag">
  106. <view class="jobRemarks-box-c-label-item" v-for="(item,index) in info.tag.split(',')"
  107. :key="index">
  108. {{item}}
  109. </view>
  110. </view> -->
  111. <view class="job-info-c-label flex align-center flex-wrap" v-if="info.positionTag">
  112. <view class="job-info-c-label-item active-item"
  113. v-for="(item,index) in positionTags"
  114. :key="index">
  115. {{item}}
  116. </view>
  117. <view class="job-info-c-label-item" v-if="showAllPositionTagBtn" @click="showAllPositionTag = true">
  118. 查看全部<u-icon name="arrow-down" size="18" style="margin-left: 2px"></u-icon>
  119. </view>
  120. </view>
  121. <view class="jobRemarks-box-c-con" v-if="info.positionDetails">
  122. <view class="jobRemarks-box-c-con-item" v-html="info.positionDetails">
  123. </view>
  124. </view>
  125. <view class="jobRemarks-box-c-title flex align-center" style="margin-top: 20rpx;">
  126. <image src="/static/images/index/welfare.png" class="title-icon"></image>
  127. <text>岗位福利</text>
  128. </view>
  129. <view class="job-info-c-label flex align-center flex-wrap" v-if="info.welfareTag">
  130. <view class="job-info-c-label-item active-item"
  131. v-for="(item,index) in info.welfareTag?info.welfareTag.split(';'):[]"
  132. :key="index">
  133. {{item}}
  134. </view>
  135. </view>
  136. <view class="jobRemarks-box-c-con" v-if="info.welfareText">
  137. <view class="jobRemarks-box-c-con-item" v-html="info.welfareText">
  138. </view>
  139. </view>
  140. <!-- <view class="jobRemarks-box-c-label flex align-center flex-wrap" v-else>
  141. <view class="jobRemarks-box-c-label-item">
  142. 暂无
  143. </view>
  144. </view> -->
  145. <view class="job-description" v-if="info.positionWelfare">
  146. <view class="description-item">{{info.positionWelfare}}</view>
  147. </view>
  148. </view>
  149. </view>
  150. <!-- </skeleton> -->
  151. </view>
  152. <!-- 企业简介 -->
  153. <view class="enterprise" v-if="info.company" style="padding: 0 40rpx;">
  154. <!-- 公司介绍卡片 -->
  155. <view class="company-intro-card" @click="goInfo(info.company.companyId)">
  156. <view class="company-avatar">
  157. <image :src="info.company&&info.company.companyLogo||'../../../static/logo.png'"
  158. style="width: 95rpx;height: 95rpx;border-radius: 50%;border: 0.5px solid #eee;" mode="aspectFill"></image>
  159. </view>
  160. <view class="company-info">
  161. <view class="company-name">{{info.company?info.company.companyAllName:''}}</view>
  162. <view class="company-details">{{info.company?info.company.companyPeople:''}} <text v-if="info.company && info.company.companyScope">· {{info.company?info.company.companyScope:''}}</text></view>
  163. </view>
  164. <view class="company-arrow">
  165. <u-icon name="arrow-right" color="rgba(51, 51, 51, 1)" size="32"></u-icon>
  166. </view>
  167. </view>
  168. <!-- 地图区域 -->
  169. <view v-if="info&&info.lng" class="enterprise-box flex justify-center">
  170. <view class="enterprise-box-c">
  171. <!-- #ifdef H5 -->
  172. <view class="enterprise-box-c-map">
  173. <map style="width: 100%; height: 100%;" scale="14" @tap.stop="gotoMap()" :latitude="info.lat"
  174. :longitude="info.lng" :markers="covers">
  175. </map>
  176. </view>
  177. <!-- #endif -->
  178. </view>
  179. </view>
  180. <!-- 职位招聘数据 -->
  181. <view class="postNum" v-if="hideBottomBtn">
  182. <view class="postNum-title">职位招聘数据</view>
  183. <view class="postNum-ul flex justify-around align-center">
  184. <view class="postNum-li">
  185. <view class="postNum-li-num align-center">{{ postData.chatCount || 0 }}</view>
  186. <view class="postNum-li-txt">沟通过</view>
  187. </view>
  188. <view class="postNum-li ">
  189. <view class="postNum-li-num">{{ postData.viewCount || 0 }}</view>
  190. <view class="postNum-li-txt">查看过</view>
  191. </view>
  192. <!-- <view class="postNum-li">
  193. <view class="postNum-li-num">34</view>
  194. <view class="postNum-li-txt">分享</view>
  195. </view> -->
  196. <view class="postNum-li">
  197. <view class="postNum-li-num">{{ postData.collectCount || 0 }}</view>
  198. <view class="postNum-li-txt">收藏</view>
  199. </view>
  200. </view>
  201. <view class="post-time">职位发布时间:{{ info.createTime }}</view>
  202. </view>
  203. </view>
  204. <!-- 底部操作 -->
  205. <view class="caozuo flex justify-center align-center" v-if="!hideBottomBtn && userType == 1">
  206. <view v-if="info&&info.isDue==1" class="caozuo-box-l flex justify-center align-center" @click="attachmentShow=true">
  207. 一键投递
  208. </view>
  209. <view class="caozuo-box-r flex justify-center align-center" @click="bindphone(2)">
  210. 立即沟通
  211. </view>
  212. <view v-if="false" class="caozuo-box flex align-center justify-between">
  213. <view class="caozuo-box-l flex align-center">
  214. <!-- #ifdef MP-WEIXIN -->
  215. <view class="caozuo-box-l-item flex align-center flex-wrap">
  216. <button open-type="share">
  217. <u-icon name="share" color="#333333" size="50"></u-icon>
  218. <text style="margin-top: 16rpx;">分享</text>
  219. </button>
  220. </view>
  221. <!-- #endif -->
  222. <!-- #ifdef H5 -->
  223. <view class="caozuo-box-l-item flex align-center flex-wrap" @click="shar()">
  224. <u-icon name="share" color="#333333" size="50"></u-icon>
  225. <view class="">
  226. 分享
  227. </view>
  228. </view>
  229. <!-- #endif -->
  230. <!--#ifdef APP-PLUS -->
  231. <view class="caozuo-box-l-item flex align-center flex-wrap" @click="shows = true">
  232. <u-icon name="share" color="#333333" size="50"></u-icon>
  233. <view class="">
  234. 分享
  235. </view>
  236. </view>
  237. <!-- #endif -->
  238. <view class="caozuo-box-l-item flex align-center flex-wrap" @click="goJuBao()">
  239. <u-icon name="warning" color="#333333" size="50"></u-icon>
  240. <view class="">
  241. 举报
  242. </view>
  243. </view>
  244. <view @click="setCollection()" class="caozuo-box-l-item flex align-center flex-wrap">
  245. <u-icon name="star" v-if="info.isCollection==0" color="#333333" size="50"></u-icon>
  246. <u-icon name="star-fill" v-else color="#016BF6" size="50"></u-icon>
  247. <view class="">
  248. {{info.isCollection==0?'收藏':'取消'}}
  249. </view>
  250. </view>
  251. </view>
  252. </view>
  253. </view>
  254. <!-- 全部岗位弹窗 -->
  255. <btnPopous ref="jobPopup" v-if="showJobPopup && info.company.companyId" :companyId="info.company.companyId" :userId="info.hr.userId" @closePopup="closeJobPopup" />
  256. <u-popup v-model="shows" z-index="99999" mode="bottom" border-radius="14" height="300rpx">
  257. <view class="shar flex justify-center">
  258. <view class="shar-box flex justify-around">
  259. <view class="shar-box-item" @click="appShare('WXSceneSession')">
  260. <u-icon name="weixin-circle-fill" color="#45b630" style="margin-left: 10rpx;" size="70">
  261. </u-icon>
  262. <view class="">
  263. 微信好友
  264. </view>
  265. </view>
  266. <view class="shar-box-item" @click="appShare('WXSenceTimeline')">
  267. <u-icon name="moments-circel-fill" color="#6dbf30" size="70" style="margin-left: 20rpx;">
  268. </u-icon>
  269. <view class="">
  270. 微信朋友圈
  271. </view>
  272. </view>
  273. </view>
  274. </view>
  275. <view class="line"></view>
  276. <view class="sharNo" @click="shows = false">
  277. 取消
  278. </view>
  279. </u-popup>
  280. <!-- 返回首页按钮 -->
  281. <!-- #ifdef H5 -->
  282. <!--
  283. <view class="backHome" @click="goHome()">
  284. <image src="../../../static/images/index/backHome.png" mode=""></image>
  285. </view>
  286. -->
  287. <!-- #endif -->
  288. <u-popup v-model="attachmentShow" z-index="99999" mode="bottom" border-radius="14" height="auto" :closeable="true">
  289. <attachment @select="selectAttachment" :content="content"></attachment>
  290. </u-popup>
  291. </view>
  292. </template>
  293. <script>
  294. import btnPopous from '../../../components/btnPopous/btnPopous.vue'
  295. import config from '../../../common/config.js'
  296. import attachment from '../../../components/attachment.vue'
  297. export default {
  298. //分享
  299. onShareAppMessage(res) {
  300. return {
  301. path: '/pages/index/game/order?postPushId=' + this.postPushId + '&invitation=' + uni.getStorageSync(
  302. 'invitationCode'),
  303. title: this.info.stationName,
  304. }
  305. },
  306. /*
  307. * uniapp微信小程序分享页面到微信朋友圈
  308. */
  309. onShareTimeline(res) {
  310. return {
  311. path: '/pages/index/game/order?postPushId=' + this.postPushId + '&invitation=' + uni.getStorageSync(
  312. 'invitationCode'),
  313. title: this.info.stationName,
  314. }
  315. },
  316. components: {
  317. attachment,
  318. btnPopous
  319. },
  320. data() {
  321. return {
  322. showJobPopup: false, // 控制职位弹窗显示
  323. statusBarHeight: 0, // 状态栏高度
  324. loading: true,
  325. shows: false,
  326. attachmentShow:false,
  327. postPushId: '',
  328. info: {}, //岗位详情
  329. token: uni.getStorageSync('token'),
  330. covers: [{
  331. id: 1,
  332. latitude: '',
  333. longitude: '',
  334. width: 20,
  335. height: 20,
  336. iconPath: '',
  337. callout: {
  338. content: '',
  339. color: '#000', //文字颜色
  340. fontSize: 10, //文本大小
  341. padding: 10, //附近留白
  342. borderRadius: 24, //边框圆角
  343. bgColor: '#FFFFFF', //背景颜色
  344. display: 'ALWAYS', //常显
  345. }
  346. }],
  347. sharType: 0,
  348. sharMsg: '',
  349. content:[],
  350. showAllPositionTag: false,
  351. hideBottomBtn: false,
  352. postData: { //岗位招聘数据
  353. chatCount: 0,
  354. collectCount: 0,
  355. viewCount: 0,
  356. },
  357. userType: null
  358. };
  359. },
  360. computed: {
  361. avatar() {
  362. if (this.info?.hr?.harImg) {
  363. return this.info.hr.harImg
  364. } else if (this.info?.user?.avatar) {
  365. return this.info.user.avatar
  366. }
  367. return ''
  368. },
  369. showAllPositionTagBtn() {
  370. let positionTag = this.info?.positionTag ? this.info.positionTag.split(',') : []
  371. return !this.showAllPositionTag && positionTag.length > 12
  372. },
  373. positionTags() {
  374. let positionTag = this.info?.positionTag ? this.info.positionTag.split(',') : []
  375. if (this.showAllPositionTag) {
  376. return positionTag
  377. } else {
  378. return positionTag.filter((tag, i) => i < 12)
  379. }
  380. }
  381. },
  382. onLoad(option) {
  383. // 获取状态栏高度
  384. let systemInfo = uni.getSystemInfoSync();
  385. this.statusBarHeight = systemInfo.statusBarHeight || 0;
  386. // 从岗位列表进入时隐藏底部按钮
  387. if (option.hideBottomBtn) {
  388. this.hideBottomBtn = true
  389. }
  390. this.userType = this.$queue.getData('userType') || null
  391. // 获取邀请码保存到本地
  392. if (option.invitation) {
  393. this.$queue.setData('inviterCode', option.invitation);
  394. }
  395. // #ifdef MP-WEIXIN
  396. if (option.scene) {
  397. const scene = decodeURIComponent(option.scene);
  398. this.$queue.setData('inviterCode', scene.split(',')[0]);
  399. }
  400. // #endif
  401. //小程序分享版本
  402. this.$Request.getT('/app/common/type/340').then(res => {
  403. if (res.code == 0) {
  404. if (res.data && res.data.value) {
  405. this.sharType = res.data.value
  406. }
  407. }
  408. });
  409. //小程序分享图片
  410. this.$Request.getT('/app/common/type/341').then(res => {
  411. if (res.code == 0) {
  412. if (res.data && res.data.value) {
  413. this.sharMsg = res.data.value
  414. }
  415. }
  416. });
  417. this.$Request.get("/app/resumes/getAttachment").then(res => {
  418. if (res.code == 0) {
  419. this.content=res.data
  420. }
  421. uni.hideLoading();
  422. });
  423. uni.showLoading({
  424. title: '加载中'
  425. })
  426. this.postPushId = option.postPushId
  427. this.getInfo()
  428. },
  429. methods: {
  430. goToMoreJobs() {
  431. this.showJobPopup = true;
  432. this.$nextTick(() => {
  433. if (this.$refs.jobPopup) {
  434. this.$refs.jobPopup.topY = true;
  435. }
  436. });
  437. },
  438. // 关闭职位弹窗
  439. closeJobPopup() {
  440. this.showJobPopup = false;
  441. },
  442. // 返回上一页
  443. goBack() {
  444. uni.navigateBack();
  445. },
  446. // 显示分享选项
  447. showShare() {
  448. this.shows = true;
  449. },
  450. //判断岗位名称与职位名称是否相同(不区分大小写)
  451. isSameName(className, name) {
  452. let str1 = className.trim();
  453. let str2 = name.trim();
  454. if (str1.length !== str2.length) {
  455. return true;
  456. }
  457. return str1.toLowerCase() !== str2.toLowerCase();
  458. },
  459. goHome() {
  460. let pages = getCurrentPages(); // 获取页面栈
  461. console.log(pages)
  462. if (pages.length > 1) { //有上一页
  463. uni.navigateBack()
  464. } else {
  465. uni.switchTab({
  466. url: '/pages/index/index'
  467. })
  468. }
  469. },
  470. //app分享
  471. appShare(scene) {
  472. // #ifdef H5
  473. this.shar()
  474. this.shows = false;
  475. return
  476. //#endif
  477. return this.$queue.appShare(scene,this)
  478. let that = this
  479. let routes = getCurrentPages(); // 获取当前打开过的页面路由数组
  480. let curRoute = routes[routes.length - 1].$page.fullPath // 获取当前页面路由,也就是最后一个打开的页面路由
  481. uni.share({
  482. provider: "weixin", //分享服务提供商(即weixin|qq|sinaweibo)
  483. scene: scene, //场景,可取值参考下面说明。
  484. type: 5, //分享形式 0:图文 1:纯文字 2:纯图片 3:音乐 4:视频 5:小程序
  485. // href: curRoute, //跳转链接
  486. // imageUrl:'https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-uni-app-doc/962fc340-4f2c-11eb-bdc1-8bd33eb6adaa.png',
  487. imageUrl: that.sharMsg,
  488. title: that.info.stationName, //分享内容的标题
  489. miniProgram: {
  490. id: 'gh_d531be6accdb', //分享的小程序原始id
  491. path: curRoute, //分享的小程序的页面路径
  492. webUrl: "https://ask.dcloud.net.cn/article/287", //地址
  493. type: that.sharType, //微信小程序的版本 0-正式版; 1-测试版; 2-体验版。 默认值为0。
  494. },
  495. success: function(res) {
  496. that.shows = false; //成功后关闭底部弹框
  497. },
  498. fail: function(err) {
  499. console.log(err, '分享失败回调')
  500. uni.showToast({
  501. title: '分享失败',
  502. icon: 'none',
  503. duration: 2000
  504. })
  505. that.shows = false;
  506. }
  507. });
  508. },
  509. getShowModal() {
  510. uni.showModal({
  511. title: '提示',
  512. content: '请登录后联系企业',
  513. showCancel: true,
  514. cancelText: '取消',
  515. confirmText: '去登录',
  516. complete: (res) => {
  517. if (res.confirm) {
  518. this.$queue.toLogin('navigateTo')
  519. }
  520. }
  521. });
  522. },
  523. shar() {
  524. if (this.token) {
  525. let that = this
  526. // h5分享
  527. // #ifdef H5
  528. let url = config.WSHOST4 + '/pages/index/game/order?postPushId=' + this.postPushId
  529. // let url = 'http://192.168.0.109:8081/pages/index/game/order?postPushId=' + this.postPushId
  530. // alert(url)
  531. uni.setClipboardData({
  532. data: url,
  533. success() {
  534. uni.showToast({
  535. title: '分享链接已复制'
  536. })
  537. }
  538. })
  539. // #endif
  540. } else {
  541. this.getShowModal()
  542. }
  543. },
  544. goJuBao() {
  545. if (this.token) {
  546. uni.navigateTo({
  547. url: '/my/feedback/jubao?postPushId=' + this.postPushId
  548. })
  549. } else {
  550. this.getShowModal()
  551. }
  552. },
  553. //在线联系
  554. bindphone(phone, index) {
  555. if(!this.info.user||!this.info.user.userId)
  556. return this.$queue.showToast('岗位发布者已不知所踪,请联系管理员😂😂😂😂😂😂')
  557. if (uni.getStorageSync('token')) {
  558. this.$Request.get('/app/resumes/selectResumesByUserId').then(res => {
  559. if (res.code == 0) {
  560. let obj = res.data
  561. if (JSON.stringify(obj) == '{}' || obj == null) {
  562. uni.showModal({
  563. title: '提示',
  564. content: '暂无简历,请完善简历!',
  565. confirmText: '去完善',
  566. confirmColor: '#016BF6',
  567. complete(ret) {
  568. if (ret.confirm) {
  569. uni.navigateTo({
  570. url: '/pages/my/onlineResume'
  571. })
  572. }
  573. }
  574. })
  575. } else {
  576. console.log(this.info)
  577. if(uni.getStorageSync('userId')==this.info.user.userId)
  578. return this.$queue.showToast('自己无法与自己聊天')
  579. this.$Request.postJson('/app/chat/insertChatConversation', {
  580. userId: uni.getStorageSync('userId'), //用户userid
  581. focusedUserId: this.info.user.userId, //企业userid
  582. type: 1,
  583. postPushId: this.info.postPushId,
  584. resumesId: res.data.resumesId
  585. }).then(res => {
  586. if (res.code == 0) {
  587. uni.navigateTo({
  588. url: '/pages/msg/im?byUserId=' + this.info.user
  589. .userId + '&chatConversationId=' + res.data
  590. .chatConversationId + '&postPushId=' + res.data
  591. .postPushId
  592. })
  593. }
  594. })
  595. }
  596. }
  597. })
  598. } else {
  599. uni.showModal({
  600. title: '提示',
  601. content: '请登录后联系企业',
  602. showCancel: true,
  603. cancelText: '取消',
  604. confirmText: '去登录',
  605. complete: (res) => {
  606. if (res.confirm) {
  607. this.$queue.toLogin('navigateTo')
  608. }
  609. }
  610. });
  611. }
  612. },
  613. //拉起地图导航
  614. gotoMap() {
  615. let that = this
  616. uni.openLocation({
  617. latitude: that.info.lat,
  618. longitude: that.info.lng,
  619. address: that.info.province + '' + that.info.city + '' + that.info.county + '' + that.info
  620. .address,
  621. name: that.info.address,
  622. complete(ret) {
  623. }
  624. })
  625. },
  626. /**
  627. * 收藏岗位
  628. */
  629. setCollection() {
  630. this.$Request.postT("/app/myCollection/saveCollection", {
  631. postPushId: this.postPushId,
  632. type: 1
  633. }).then(res => {
  634. if (res.code == 0) {
  635. uni.showToast({
  636. title: res.msg
  637. })
  638. this.getInfo()
  639. }
  640. })
  641. },
  642. /**
  643. * 获取岗位详情
  644. */
  645. getInfo() {
  646. this.$Request.getT("/app/postPush/selectPostPushDetails", {
  647. userId: uni.getStorageSync('userId'),
  648. postPushId: this.postPushId
  649. }).then(res => {
  650. if (res.code == 0) {
  651. this.info = res.data
  652. let iconPath='../../../static/images/mapMarker.png'
  653. //#ifdef APP-PLUS
  654. iconPath= '../../../static/images/mapLocation.png',
  655. //#endif
  656. this.covers = [{
  657. id: 1,
  658. latitude: this.info.lat,
  659. longitude: this.info.lng,
  660. width: 20,
  661. height: 20,
  662. iconPath: iconPath,
  663. callout: {
  664. content: this.info.city + '' + this.info.county + '' + this.info.address,
  665. color: '#000', //文字颜色
  666. fontSize: 10, //文本大小
  667. padding: 10, //附近留白
  668. borderRadius: 24, //边框圆角
  669. bgColor: '#FFFFFF', //背景颜色
  670. display: 'ALWAYS', //常显
  671. }
  672. }]
  673. }
  674. uni.hideLoading()
  675. })
  676. },
  677. //跳转企业详情
  678. goInfo(companyId) {
  679. uni.navigateTo({
  680. url: '/my/enterpriseInfo/enterpriseInfo?companyId=' + companyId
  681. })
  682. },
  683. selectAttachment(item){
  684. //console.log(item)
  685. this.attachmentShow=false
  686. this.oneClickApply(item)
  687. },
  688. //一键投递
  689. oneClickApply(item) {
  690. if(!this.info.user||!this.info.user.userId)
  691. return this.$queue.showToast('岗位发布者已不知所踪,请联系管理员😂😂😂😂😂😂')
  692. if (uni.getStorageSync('token')) {
  693. this.$Request.get('/app/resumes/selectResumesByUserId').then(res => {
  694. if (res.code == 0) {
  695. let obj = res.data
  696. if (JSON.stringify(obj) == '{}' || obj == null) {
  697. uni.showModal({
  698. title: '提示',
  699. content: '暂无简历,请完善简历!',
  700. confirmText: '去完善',
  701. confirmColor: '#016BF6',
  702. complete(ret) {
  703. if (ret.confirm) {
  704. uni.navigateTo({
  705. url: '/pages/my/onlineResume'
  706. })
  707. }
  708. }
  709. })
  710. } else {
  711. // 执行一键投递逻辑
  712. this.$Request.postT("/app/resumes/sendResumes", {
  713. to: this.info.user.userId, //接收人的userId
  714. postPushId: this.postPushId, //岗位id
  715. resumesAttachmentId:item.resumesAttachmentId
  716. }).then(res => {
  717. if (res.code == 0) {
  718. uni.showToast({
  719. title: '投递成功',
  720. icon: 'success'
  721. })
  722. } else {
  723. uni.showToast({
  724. title: res.msg || '投递失败',
  725. icon: 'none'
  726. })
  727. }
  728. })
  729. }
  730. }
  731. })
  732. } else {
  733. uni.showModal({
  734. title: '提示',
  735. content: '请登录后投递简历',
  736. showCancel: true,
  737. cancelText: '取消',
  738. confirmText: '去登录',
  739. complete: (res) => {
  740. if (res.confirm) {
  741. this.$queue.toLogin('navigateTo')
  742. }
  743. }
  744. });
  745. }
  746. },
  747. // 获取岗位招聘数据
  748. getPostData() {
  749. this.$Request.get('/app/postPush/postPushData', {
  750. postPushId: this.postPushId
  751. }).then(res => {
  752. if (res.code == 0) {
  753. this.postData = res.data
  754. } else {
  755. this.$queue.showToast(res.msg);
  756. }
  757. });
  758. },
  759. }
  760. }
  761. </script>
  762. <style lang="scss">
  763. page {
  764. // background-color: #F2F2F7;
  765. padding-bottom: 200rpx;
  766. }
  767. .fixed-nav {
  768. position: fixed;
  769. top: 0;
  770. left: 0;
  771. right: 0;
  772. z-index: 9999;
  773. background-color: #ffffff;
  774. padding: 0 32rpx;
  775. // padding-top 已改为动态计算,在模板中通过 :style 设置
  776. }
  777. .urgent-banner {
  778. height: 120rpx;
  779. background: linear-gradient(90deg, rgba(255, 65, 86, 1) 0%, rgba(255, 102, 0, 0.35) 100%);
  780. border-radius: 16rpx;
  781. display: flex;
  782. align-items: center;
  783. padding: 0 30rpx;
  784. margin: 0 40rpx 20rpx;
  785. .urgent-icon {
  786. width: 64rpx;
  787. height: 64rpx;
  788. border-radius: 50%;
  789. display: flex;
  790. align-items: center;
  791. justify-content: center;
  792. margin-right: 24rpx;
  793. flex-shrink: 0;
  794. }
  795. .urgent-text {
  796. flex: 1;
  797. text-align: left;
  798. .urgent-title {
  799. color: #ffffff;
  800. font-family: DM Sans;
  801. font-size: 26rpx;
  802. font-weight: 400;
  803. letter-spacing: 0px;
  804. }
  805. .urgent-subtitle {
  806. color: rgba(255, 255, 255, 1);
  807. font-family: DM Sans;
  808. font-size: 18rpx;
  809. font-weight: 400;
  810. text-align: left;
  811. }
  812. }
  813. }
  814. .nav-bar {
  815. display: flex;
  816. align-items: center;
  817. justify-content: space-between;
  818. margin-bottom: 30rpx;
  819. .nav-left {
  820. display: flex;
  821. align-items: center;
  822. justify-content: flex-start;
  823. width: 96rpx;
  824. }
  825. .nav-title {
  826. flex: 1;
  827. color: rgba(51, 51, 51, 1);
  828. font-family: DM Sans;
  829. font-size: 32rpx;
  830. font-weight: 700;
  831. line-height: 26px;
  832. text-align: center;
  833. }
  834. .nav-right {
  835. display: flex;
  836. align-items: center;
  837. justify-content: flex-end;
  838. width: 96rpx;
  839. }
  840. .nav-icons {
  841. display: flex;
  842. align-items: center;
  843. gap: 24rpx;
  844. }
  845. .nav-icon {
  846. display: flex;
  847. align-items: center;
  848. justify-content: center;
  849. width: 36rpx;
  850. height: 36rpx;
  851. }
  852. .icon-img {
  853. width: 42rpx;
  854. height: 42rpx;
  855. }
  856. .icon-img.active {
  857. filter: hue-rotate(120deg) saturate(1.5);
  858. }
  859. }
  860. button {
  861. background: #ffffff;
  862. border: none !important;
  863. width: 120rpx;
  864. font-size: 24rpx;
  865. height: 80rpx;
  866. display: flex;
  867. justify-content: center;
  868. align-content: flex-start;
  869. flex-wrap: wrap;
  870. margin: 0;
  871. padding: 0 !important;
  872. line-height: 0 !important;
  873. }
  874. button:after {
  875. border: none !important;
  876. }
  877. .backHome {
  878. position: fixed;
  879. right: 30rpx;
  880. bottom: 160rpx;
  881. image {
  882. width: 80rpx;
  883. height: 80rpx;
  884. border-radius: 50%;
  885. }
  886. }
  887. .shar {
  888. width: 100%;
  889. height: 100rpx;
  890. margin-top: 40rpx;
  891. .shar-box {
  892. width: 686rpx;
  893. height: 100%;
  894. .shar-box-item {
  895. font-size: 24rpx;
  896. }
  897. }
  898. }
  899. .line {
  900. width: 100%;
  901. border: 1rpx solid #F2F2F7;
  902. margin-top: 30rpx;
  903. margin-bottom: 20rpx;
  904. }
  905. .sharNo {
  906. width: 100%;
  907. color: #cccccc;
  908. font-size: 24rpx;
  909. text-align: center;
  910. }
  911. .job {
  912. width: 100%;
  913. margin-top: 24rpx;
  914. .job-info {
  915. // width: 686rpx;
  916. width: 100%;
  917. height: 100%;
  918. border-radius: 24rpx;
  919. background-color: #ffffff;
  920. .job-info-c {
  921. // width: 626rpx;
  922. width: 100%;
  923. height: 100%;
  924. margin-bottom: 8rpx;
  925. }
  926. .enterprise-box-c-bto {
  927. width: 100%;
  928. border-radius: 30rpx;
  929. margin-top: 20rpx;
  930. color: rgba(156, 164, 171, 1);
  931. font-family: DM Sans;
  932. font-size: 10px;
  933. font-weight: 400;
  934. line-height: 12px;
  935. }
  936. .job-info-c-title {
  937. flex: 1;
  938. color: rgba(58, 57, 67, 1);
  939. font-family: DM Sans;
  940. font-size: 24px;
  941. font-weight: 700;
  942. line-height: 30px;
  943. }
  944. .job-info-c-price {
  945. color: rgba(1, 107, 246, 1);
  946. font-family: DM Sans;
  947. font-size: 16px;
  948. font-weight: 700;
  949. line-height: 20px;
  950. }
  951. }
  952. }
  953. .job-info-c-label {
  954. margin-top: 20rpx;
  955. .job-info-c-label-item {
  956. margin-bottom: 8rpx;
  957. margin-right: 8rpx;
  958. color: rgba(153, 153, 153, 1);
  959. font-size: 20rpx;
  960. line-height: 1;
  961. padding: 4px;
  962. border-radius: 4px;
  963. background: rgba(198, 198, 198, 0.1);
  964. &.active-item {
  965. color: rgba(1, 107, 246, 1);
  966. background: rgba(1, 107, 246, 0.1);
  967. }
  968. }
  969. }
  970. .enterprise-box-c-info {
  971. height: auto;
  972. padding: 16px;
  973. border: 0.5px solid rgba(227, 231, 236, 1);
  974. border-radius: 6px;
  975. background: rgba(253, 253, 253, 1);
  976. // margin-top: 40rpx;
  977. .enterprise-left {
  978. flex: 1;
  979. }
  980. .avatar-container {
  981. position: relative;
  982. display: inline-block;
  983. .avatar {
  984. display: block;
  985. width: 95rpx;
  986. height: 95rpx;
  987. border-radius: 50%;
  988. border: 0.5px solid #eee;
  989. }
  990. }
  991. .online-dot {
  992. position: absolute;
  993. bottom: 4rpx;
  994. right: 4rpx;
  995. width: 10px;
  996. height: 10px;
  997. background: #00D26A;
  998. border: 1px solid #ffffff;
  999. border-radius: 50%;
  1000. }
  1001. .more-jobs {
  1002. color: rgba(153, 153, 153, 1);
  1003. font-size: 22rpx;
  1004. font-weight: 400;
  1005. gap: 8rpx;
  1006. }
  1007. .enterprise-box-c-info-n {
  1008. margin-left: 18rpx;
  1009. view:nth-of-type(1) {
  1010. color: #333333;
  1011. font-size: 24rpx;
  1012. font-weight: 600;
  1013. }
  1014. view:nth-of-type(2) {
  1015. color: #999999;
  1016. font-size: 24rpx;
  1017. font-weight: 500;
  1018. margin-top: 8rpx;
  1019. }
  1020. view:nth-of-type(3) {
  1021. display: inline-block;
  1022. width: auto;
  1023. border-radius: 6px;
  1024. padding: 4rpx 12rpx;
  1025. background: rgba(236, 225, 253, 1);
  1026. color: rgba(107, 85, 214, 0.96);
  1027. font-size: 20rpx;
  1028. font-weight: 500;
  1029. margin-top: 8rpx;
  1030. white-space: nowrap;
  1031. }
  1032. }
  1033. }
  1034. .jobRemarks {
  1035. width: 100%;
  1036. .jobRemarks-box {
  1037. width: 100%;
  1038. height: 100%;
  1039. background-color: #ffffff;
  1040. border-radius: 24rpx;
  1041. .jobRemarks-box-c {
  1042. width: 100%;
  1043. height: 100%;
  1044. padding-top: 20rpx;
  1045. }
  1046. .jobRemarks-box-c-title {
  1047. color: rgba(1, 107, 246, 1);
  1048. font-size: 28rpx;
  1049. line-height: 36rpx;
  1050. padding: 8px 12px;
  1051. font-weight: 500;
  1052. border-radius: 55px;
  1053. box-shadow: 0px 8px 150px 0px rgba(0, 0, 0, 0.06);
  1054. background: rgba(246, 246, 246, 1);
  1055. .title-icon {
  1056. width: 28rpx;
  1057. height: 28rpx;
  1058. margin-right: 8rpx;
  1059. }
  1060. }
  1061. .job-description {
  1062. margin-top: 20rpx;
  1063. margin-bottom: 20rpx;
  1064. .description-item {
  1065. color: rgba(97, 110, 124, 1);
  1066. font-family: DM Sans;
  1067. font-size: 26rpx;
  1068. font-weight: 400;
  1069. line-height: 16px;
  1070. letter-spacing: 0px;
  1071. text-align: left;
  1072. margin-bottom: 8rpx;
  1073. }
  1074. }
  1075. // .jobRemarks-box-c-label {
  1076. // width: 100%;
  1077. // margin-top: 25rpx;
  1078. // .jobRemarks-box-c-label-item {
  1079. // color: rgba(1, 107, 246, 1);
  1080. // font-size: 20rpx;
  1081. // padding: 10rpx 15rpx;
  1082. // background-color: #F6F6F6;
  1083. // border-radius: 10rpx;
  1084. // margin-right: 20rpx;
  1085. // margin-bottom: 10rpx;
  1086. // background: rgba(252, 233, 220, 1);
  1087. // }
  1088. // }
  1089. .jobRemarks-box-c-con {
  1090. width: 100%;
  1091. margin-top: 12rpx;
  1092. .jobRemarks-box-c-con-item {
  1093. color: rgba(97, 110, 124, 1);
  1094. font-size: 28rpx;
  1095. font-weight: 400;
  1096. line-height: 36rpx;
  1097. white-space: pre-wrap;
  1098. }
  1099. }
  1100. }
  1101. }
  1102. .enterprise {
  1103. width: 100%;
  1104. margin-top: 20rpx;
  1105. .company-intro-card {
  1106. width: 100%;
  1107. background-color: #ffffff;
  1108. border-radius: 24rpx;
  1109. padding: 12rpx 24rpx;
  1110. margin-bottom: 20rpx;
  1111. display: flex;
  1112. align-items: center;
  1113. border: 0.5px solid rgba(227, 231, 236, 1);
  1114. .company-avatar {
  1115. flex-shrink: 0;
  1116. margin-right: 24rpx;
  1117. }
  1118. .company-info {
  1119. flex: 1;
  1120. .company-name {
  1121. color: rgba(51, 51, 51, 1);
  1122. font-size: 26rpx;
  1123. font-weight: 600;
  1124. line-height: 1.4;
  1125. margin-bottom: 8rpx;
  1126. }
  1127. .company-details {
  1128. color: rgba(153, 153, 153, 1);
  1129. font-size: 24rpx;
  1130. font-weight: 400;
  1131. line-height: 1.4;
  1132. }
  1133. }
  1134. .company-arrow {
  1135. flex-shrink: 0;
  1136. margin-left: 48rpx;
  1137. }
  1138. }
  1139. .enterprise-box {
  1140. width: 100%;
  1141. background-color: #ffffff;
  1142. height: 100%;
  1143. padding-bottom: 25rpx;
  1144. border-radius: 24rpx;
  1145. .enterprise-box-c {
  1146. width: 100%;
  1147. height: 100%;
  1148. }
  1149. .enterprise-box-c-map {
  1150. width: 100%;
  1151. margin-top: 20rpx;
  1152. height: 400rpx;
  1153. }
  1154. }
  1155. }
  1156. .caozuo {
  1157. width: 100%;
  1158. height: 120rpx;
  1159. position: fixed;
  1160. bottom: 0;
  1161. left: 0;
  1162. background-color: #ffffff;
  1163. padding: 0 40rpx;
  1164. z-index: 200;
  1165. .caozuo-box-l {
  1166. flex: 0.8;
  1167. height: 80rpx;
  1168. color: #ffffff;
  1169. border-radius: 45rpx;
  1170. background: linear-gradient(90deg, rgba(255, 65, 86, 1) 0%, rgba(255, 102, 0, 0.35) 100%);
  1171. /* #ifdef APP-PLUS */
  1172. background: rgba(255, 65, 86, 1);
  1173. /* #endif */
  1174. font-size: 32rpx;
  1175. font-weight: 400;
  1176. line-height: 80rpx;
  1177. text-align: center;
  1178. margin-right: 20rpx;
  1179. }
  1180. .caozuo-box-r {
  1181. flex: 1.2;
  1182. height: 80rpx;
  1183. color: #ffffff;
  1184. border-radius: 45rpx;
  1185. background: var(--线性渐变, linear-gradient(90.00deg, rgba(13, 39, 247, 1),rgba(19, 193, 234, 1) 100%));
  1186. /* #ifdef APP-PLUS */
  1187. background: rgba(13, 39, 247, 1);
  1188. /* #endif */
  1189. line-height: 80rpx;
  1190. text-align: center;
  1191. font-size: 32rpx;
  1192. font-weight: 400;
  1193. }
  1194. // .caozuo-box {
  1195. // width: 686rpx;
  1196. // height: 80rpx;
  1197. // .caozuo-box-l {
  1198. // .caozuo-box-l-item {
  1199. // width: 60rpx;
  1200. // font-size: 24rpx;
  1201. // color: #242424;
  1202. // font-weight: 500;
  1203. // margin-right: 50rpx;
  1204. // }
  1205. // }
  1206. // }
  1207. }
  1208. // 警告内容
  1209. .warning-box {
  1210. background: rgba(255, 251, 232, 1);
  1211. border-radius: 4px;
  1212. padding: 20rpx 32rpx;
  1213. margin-top: 20rpx;
  1214. .warning-icon {
  1215. display: block;
  1216. width: 32rpx;
  1217. height: 32rpx;
  1218. margin-right: 16rpx;
  1219. }
  1220. .warning-txt {
  1221. color: rgba(237, 106, 12, 1);
  1222. font-size: 22rpx;
  1223. font-weight: 400;
  1224. line-height: 40rpx;
  1225. }
  1226. }
  1227. .postNum {
  1228. // padding: 12rpx;
  1229. }
  1230. .postNum-title {
  1231. color: rgba(34, 37, 42, 1);
  1232. font-size: 32rpx;
  1233. font-weight: 600;
  1234. line-height: 48rpx;
  1235. }
  1236. .postNum-ul {
  1237. margin: 30rpx auto;
  1238. font-family: DM Sans;
  1239. }
  1240. .postNum-li-num {
  1241. font-size: 36rpx;
  1242. font-weight: 400;
  1243. line-height: 52rpx;
  1244. text-align: center;
  1245. }
  1246. .postNum-li-txt {
  1247. font-size: 28rpx;
  1248. font-weight: 400;
  1249. line-height: 40rpx;
  1250. text-align: center;
  1251. }
  1252. .post-time {
  1253. color: rgba(102, 102, 102, 1);
  1254. font-size: 24rpx;
  1255. font-weight: 400;
  1256. line-height: 32rpx;
  1257. }
  1258. </style>