index.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <template>
  2. <div class="resume-box d-flex flex-column" style="position: relative; height: 100%;">
  3. <div class="resume-header">
  4. <div class="resume-title">屏蔽企业设置</div>
  5. </div>
  6. <div class="mt-5" v-if="userInfo?.vipFlag && userInfo?.vipExpireDate && userInfo?.vipExpireDate > Date.now()">
  7. <!-- 选择 -->
  8. <div class="d-flex align-center pb-5" style="border-bottom: 1px solid #dddddd;">
  9. <div style="color: #777;">选择企业: </div>
  10. <Autocomplete v-model="item.value" :item="item" @search="getEnterpriseData"></Autocomplete>
  11. <v-btn class="ml-3" color="primary" :disabled="!item.value" @click="handleJoin">确认屏蔽</v-btn>
  12. </div>
  13. <!-- 展示 -->
  14. <v-chip v-for="k in dataList" class="mt-3 mr-3" :key="k.id">
  15. <span class="cursor-pointer">{{ k.name }}</span>
  16. <template v-slot:append>
  17. <v-icon class="ml-2" @click="handleDelete(k)">mdi-close-circle</v-icon>
  18. </template>
  19. </v-chip>
  20. </div>
  21. <div v-else class="disable2"> </div>
  22. </div>
  23. </template>
  24. <script setup>
  25. import {
  26. getBlockEnterpriseList,
  27. handleBlockEnterprise,
  28. handleUnBlockEnterprise,
  29. } from '@/api/recruit/personal/resume/blockEnt.js'
  30. import { enterpriseSearchByName } from '@/api/recruit/personal/resume'
  31. import Snackbar from '@/plugins/snackbar'
  32. import Confirm from '@/plugins/confirm'
  33. import { ref } from 'vue'
  34. defineOptions({name: 'resume-blockEnt'})
  35. import { useUserStore } from '@/store/user'
  36. const userStore = useUserStore()
  37. let userInfo = ref(JSON.parse(localStorage.getItem('userInfo')) || {})
  38. userStore.$subscribe((mutation, state) => {
  39. if (state.userInfo && Object.keys(state.userInfo).length) userInfo.value = state?.userInfo
  40. })
  41. // 获取数据
  42. const dataList = ref([])
  43. const getData = async () => {
  44. const { list } = await getBlockEnterpriseList()
  45. dataList.value = list || []
  46. }
  47. getData()
  48. // 取消屏蔽
  49. const handleDelete = ({ id, name }) => {
  50. Confirm('系统提示', `是否取消屏蔽【${name}】?`).then(async () => {
  51. await handleUnBlockEnterprise(id)
  52. getData()
  53. Snackbar.success('取消屏蔽成功!')
  54. })
  55. }
  56. // 屏蔽
  57. const handleJoin = async () => {
  58. await handleBlockEnterprise({ enterpriseId: item.value.value })
  59. getData()
  60. Snackbar.success('加入屏蔽企业成功!')
  61. }
  62. // 企业名称下拉列表
  63. const getEnterpriseData = async (name) => {
  64. if (!name) return
  65. const data = await enterpriseSearchByName({ name })
  66. item.value.items = data
  67. }
  68. const item = ref({
  69. type: 'autocomplete',
  70. key: 'enterpriseId',
  71. value: null,
  72. default: null,
  73. label: '请输入企业名称搜索',
  74. outlined: true,
  75. clearable: true,
  76. hideDetails: true,
  77. itemText: 'value',
  78. itemValue: 'key',
  79. width: '400',
  80. search: getEnterpriseData,
  81. items: []
  82. })
  83. </script>
  84. <style lang="scss" scoped>
  85. .tips {
  86. position: absolute;
  87. top: 50%;
  88. left: 50%;
  89. transform: translate(-50%, -50%);
  90. }
  91. .disable2 {
  92. position: relative;
  93. overflow: hidden;
  94. margin-top: 12px;
  95. flex: 1;
  96. &::after {
  97. content: '屏蔽企业为会员福利内容';
  98. position: absolute;
  99. display: flex;
  100. align-items: center;
  101. justify-content: center;
  102. font-size: 1.5em;
  103. font-family: 'MiSans-Bold';
  104. color: #fff;
  105. top: 0;
  106. border-radius: 12px;
  107. left: 0;
  108. width: 100%;
  109. height: 100%;
  110. background-color: rgba(0, 0, 0, 0.35);
  111. }
  112. }
  113. </style>