index.vue 4.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <template>
  2. <div class="resume-box" style="position: relative; height: 100%;">
  3. <div class="resume-header">
  4. <div class="resume-title">简历模板下载</div>
  5. </div>
  6. <div style="height: calc(100% - 58px); width: 100%;" class="mt-3">
  7. <div v-if="vip" class="mt-5">
  8. <CtTable
  9. :items="list"
  10. :headers="headers"
  11. :loading="false"
  12. :elevation="0"
  13. :isTools="false"
  14. :showPage="false"
  15. >
  16. <template #actions="{ item }">
  17. <v-btn variant="text" color="primary" prepend-icon="mdi-eye-outline" @click="previewFile(item.url)">预览</v-btn>
  18. <v-btn variant="text" color="primary" prepend-icon="mdi-square-edit-outline" @click="handleDownload(item)">下载</v-btn>
  19. </template>
  20. </CtTable>
  21. </div>
  22. <div v-else class="mt-8 tips">
  23. <span class="color-error" v-if="userStore.userInfo?.vipExpireDate && !userStore.userInfo?.entitlement?.resumeTemplate">
  24. 当前会员套餐的福利不包含简历模板,<span class="text-decoration-underline cursor-pointer" @click="goBuy">去升级</span>
  25. </span>
  26. <span class="color-error" v-if="!userStore.userInfo?.vipExpireDate">
  27. 简历模板为会员福利内容,<span class="text-decoration-underline cursor-pointer" @click="goBuy">去开通</span>
  28. </span>
  29. </div>
  30. </div>
  31. </div>
  32. </template>
  33. <script setup>
  34. defineOptions({name: 'resume-template'})
  35. import { ref, computed } from 'vue'
  36. import { previewFile, getBlob, saveAs } from '@/utils'
  37. import { useRouter } from 'vue-router'
  38. import { useUserStore } from '@/store/user'
  39. const router = useRouter()
  40. const userStore = useUserStore()
  41. // 简历模板列表
  42. const list = ref([
  43. { active: false, title: '创新精英简历模板', url: 'https://minio.menduner.com/dev/menduner/resumeTemplate/%E5%88%9B%E6%96%B0%E7%B2%BE%E8%8B%B1%E7%AE%80%E5%8E%86%E6%A8%A1%E6%9D%BF.docx' },
  44. { active: false, title: '顶尖人才简历模板', url: 'https://minio.menduner.com/dev/menduner/resumeTemplate/%E9%A1%B6%E5%B0%96%E4%BA%BA%E6%89%8D%E7%AE%80%E5%8E%86%E6%A8%A1%E6%9D%BF.docx' },
  45. { active: false, title: '高级职业经理人简历模板', url: 'https://minio.menduner.com/dev/menduner/resumeTemplate/%E9%AB%98%E7%BA%A7%E8%81%8C%E4%B8%9A%E7%BB%8F%E7%90%86%E4%BA%BA%E7%AE%80%E5%8E%86%E6%A8%A1%E6%9D%BF.docx' },
  46. { active: false, title: '高效职场精英简历模板', url: 'https://minio.menduner.com/dev/menduner/resumeTemplate/%E9%AB%98%E6%95%88%E8%81%8C%E5%9C%BA%E7%B2%BE%E8%8B%B1%E7%AE%80%E5%8E%86%E6%A8%A1%E6%9D%BF.doc' },
  47. { active: false, title: '领导力简历模板', url: 'https://minio.menduner.com/dev/menduner/resumeTemplate/%E9%A2%86%E5%AF%BC%E5%8A%9B%E7%AE%80%E5%8E%86%E6%A8%A1%E6%9D%BF.docx' },
  48. { active: false, title: '行业精英专属简历模板', url: 'https://minio.menduner.com/dev/menduner/resumeTemplate/%E8%A1%8C%E4%B8%9A%E7%B2%BE%E8%8B%B1%E4%B8%93%E5%B1%9E%E7%AE%80%E5%8E%86%E6%A8%A1%E6%9D%BF.docx' },
  49. { active: false, title: '行业领袖简历模板', url: 'https://minio.menduner.com/dev/menduner/resumeTemplate/%E8%A1%8C%E4%B8%9A%E9%A2%86%E8%A2%96%E7%AE%80%E5%8E%86%E6%A8%A1%E6%9D%BF.docx' },
  50. { active: false, title: '专业卓越简历模板', url: 'https://minio.menduner.com/dev/menduner/resumeTemplate/%E4%B8%93%E4%B8%9A%E5%8D%93%E8%B6%8A%E7%AE%80%E5%8E%86%E6%A8%A1%E6%9D%BF.doc' },
  51. { active: false, title: '卓越成就简历模板', url: 'https://minio.menduner.com/dev/menduner/resumeTemplate/%E5%8D%93%E8%B6%8A%E6%88%90%E5%B0%B1%E7%AE%80%E5%8E%86%E6%A8%A1%E6%9D%BF.docx' },
  52. { active: false, title: '卓越职业轨迹简历模板', url: 'https://minio.menduner.com/dev/menduner/resumeTemplate/%E5%8D%93%E8%B6%8A%E8%81%8C%E4%B8%9A%E8%BD%A8%E8%BF%B9%E7%AE%80%E5%8E%86%E6%A8%A1%E6%9D%BF.docx' },
  53. ])
  54. const headers = [
  55. { title: '简历模板名称', key: 'title', sortable: false },
  56. { title: '操作', key: 'actions', sortable: false, align: 'center' }
  57. ]
  58. const vip = computed(() => {
  59. return userStore.userInfo?.entitlement?.resumeTemplate
  60. })
  61. // 下载附件
  62. const handleDownload = (k) => {
  63. getBlob(k.url).then(blob => {
  64. saveAs(blob, k.title)
  65. })
  66. }
  67. const goBuy = () => {
  68. router.push('/recruit/personal/personalCenter/memberBenefits/membershipPackage')
  69. }
  70. </script>
  71. <style lang="scss" scoped>
  72. .tips {
  73. position: absolute;
  74. top: 50%;
  75. left: 50%;
  76. transform: translate(-50%, -50%);
  77. }
  78. </style>