poster.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <!-- 分享职位 -->
  2. <template>
  3. <div style="background-color: #03877a;">
  4. <v-card class="pa-5" style="box-sizing: border-box; margin: 0 auto;width: 740px;background-color: #03877a;">
  5. <div v-if="!Object.keys(info).length">加载失败</div>
  6. <div v-else>
  7. <!-- 职位名称+薪资 -->
  8. <div class="d-flex justify-space-between mx-5">
  9. <h2 class="JobName ellipsis">{{ info.name }}</h2>
  10. <span class="salary">{{ info.payFrom }}-{{ info.payTo }}/{{ positionInfo.payName }}</span>
  11. </div>
  12. <!-- 地区、工作经验、学历 -->
  13. <div class="d-flex justify-space-between mx-5">
  14. <div class="banner-tags">
  15. <div v-for="(k, i) in desc" :key="k.mdi">
  16. <span>{{ positionInfo[k.value] }}</span>
  17. <span v-if="i !== desc.length - 1 && positionInfo[k.value]" class="septal-line"></span>
  18. </div>
  19. </div>
  20. </div>
  21. <!-- 企业信息 -->
  22. <div class="radius pa-3 mx-5 mt-5 d-flex align-center" style="background-color: #5baea6;">
  23. <v-avatar style="border: 2px solid #fff;" size="68">
  24. <img crossOrigin="anonymous" :src="info.enterprise.logoUrl" alt="" style="width: 68px; height: 68px;">
  25. </v-avatar>
  26. <div class="enterprise-name ml-5 ellipsis" style="width: 65%;">{{ info.enterprise?.name }}</div>
  27. <div style="flex: 1;" class="text-right enterprise-name">{{ info.areaName }}</div>
  28. </div>
  29. <div class="mx-5 mt-3">
  30. <span :class="['tag', 'mb-1', { 'mr-5': i !== info.enterprise.welfareList.length - 1}]" v-for="(k, i) in info.enterprise.welfareList" :key="i">{{ k }}</span>
  31. </div>
  32. <!-- 岗位职责、岗位要求、二维码 -->
  33. <div class="white-bgc pa-5 mt-5 radius" style="position: relative;">
  34. <div v-if="info.content" class="resume-box pa-0 mb-5">
  35. <div class="resume-header">
  36. <div class="introduce-title">{{ $t('position.jobResponsibilities') }}</div>
  37. </div>
  38. <div class="requirement" v-html="info.content?.replace(/\n/g, '</br>')"></div>
  39. </div>
  40. <div v-if="info.requirement" class="resume-box pa-0">
  41. <div class="resume-header">
  42. <div class="introduce-title">{{ $t('position.jobRequirements') }}</div>
  43. </div>
  44. <div class="requirement" v-html="info.requirement?.replace(/\n/g, '</br>')"></div>
  45. </div>
  46. <div class="px-5 py-3 d-flex justify-space-evenly align-center mt-10 radius" style="background-color: #e3f2f0">
  47. <QrCode :text="shareUrlTxt" :width="120" />
  48. <div style="color: #333;" class="text-center">
  49. 长 按 识 别 二 维 码
  50. <div style="color: #6A6A6A">了 解 更 多 职 位 信 息</div>
  51. </div>
  52. </div>
  53. </div>
  54. <!-- logo -->
  55. <div class="mt-5 text-center">
  56. <img crossOrigin="anonymous" src="https://minio.citupro.com/dev/menduner/poster.png" alt="" style="width: 130px; height: 50px;">
  57. </div>
  58. </div>
  59. </v-card>
  60. </div>
  61. </template>
  62. <script setup>
  63. defineOptions({name: 'recruit-personal-shareJob-index'})
  64. // 职位详情
  65. defineProps({
  66. info: Object,
  67. positionInfo: Object
  68. })
  69. import { useRouter } from 'vue-router'; const router = useRouter()
  70. const userInfo = localStorage.getItem('userInfo') ? JSON.parse(localStorage.getItem('userInfo')) : {}
  71. const shareUrlTxt = import.meta.env.VITE_ACCESS_BASE_URL + '/shareJob?' + new URLSearchParams({
  72. jobId: router.currentRoute.value.params?.id,
  73. sharedById: userInfo?.id,
  74. }).toString()
  75. console.log('职位分享链接', shareUrlTxt)
  76. const desc = [
  77. { value: 'areaName' },
  78. { value: 'expName' },
  79. { value: 'eduName' }
  80. ]
  81. </script>
  82. <style lang="scss" scoped>
  83. .radius { border-radius: 8px; }
  84. .salary {
  85. color: #E2D665;
  86. line-height: 41px;
  87. font-weight: 600;
  88. font-size: 20px;
  89. height: auto;
  90. display: inline-block;
  91. vertical-align: sub;
  92. }
  93. .JobName {
  94. color: #fff;
  95. font-size: 28px;
  96. margin-right: 30px;
  97. margin-top: 1px;
  98. vertical-align: middle;
  99. flex: 1;
  100. }
  101. .banner-tags { display: flex; flex-wrap: wrap; color: #fff; }
  102. .requirement {
  103. white-space: pre-wrap;
  104. word-break: break-all;
  105. line-height: 28px;
  106. color: #5C5C5C;
  107. font-size: 15px;
  108. text-align: justify;
  109. letter-spacing: 0;
  110. margin-top: 15px;
  111. }
  112. .enterprise-name {
  113. font-size: 20px;
  114. color: #fff;
  115. line-height: 28px;
  116. }
  117. .introduce-title {
  118. font-weight: 600;
  119. font-size: 24px;
  120. border-left: 5px solid #00897B;
  121. padding-left: 12px;
  122. line-height: 24px;
  123. color: var(--v-primary-base);
  124. }
  125. :deep(.v-img__img--cover) {
  126. object-fit: contain !important;
  127. }
  128. .tag {
  129. display: inline-block;
  130. color: #fff;
  131. }
  132. </style>