major-item-collect.vue 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <template>
  2. <view class="fx-col fx-cen-cen min-w-90" @click="handleToggle">
  3. <uv-icon size="19" :name="collected?'heart-fill':'heart'" color="var(--primary-color)"/>
  4. <text class="text-xs text-primary">{{ collected ? '已收藏' : '收藏' }}</text>
  5. </view>
  6. </template>
  7. <script setup>
  8. import {ref, computed} from 'vue';
  9. import {createPropDefine} from "@/utils";
  10. import {toast} from "@/uni_modules/uv-ui-tools/libs/function";
  11. import {
  12. addConcernMajor,
  13. removeConcernedMajor,
  14. concernedMajors
  15. } from "@/api/webApi/career-other";
  16. import {useCacheStore} from "@/hooks/useCacheStore";
  17. const props = defineProps({
  18. code: createPropDefine(''),
  19. model: createPropDefine({}, Object)
  20. })
  21. const emits = defineEmits(['change'])
  22. const {removeCache} = useCacheStore()
  23. const collected = computed(() => props.model.isCollect)
  24. let loading = false
  25. const handleToggle = async () => {
  26. if (loading) return toast('请稍候')
  27. try {
  28. loading = true
  29. const op = collected.value ? removeConcernedMajor : addConcernMajor
  30. await op({code: props.code})
  31. props.model.isCollect = !collected.value
  32. emits('change', props.model.isCollect)
  33. // 需要清除收藏列表的缓存才能更新收藏状态
  34. removeCache(concernedMajors) // 不清楚目标,只能全清
  35. } finally {
  36. loading = false
  37. }
  38. }
  39. </script>
  40. <style scoped>
  41. </style>