ie-paper-collect.vue 999 B

123456789101112131415161718192021222324252627282930313233343536
  1. <template>
  2. <mx-tag-button :text="collected?'已收藏':'收藏'" :icon="collected?'heart-fill':'heart'" @click="handleToggle"/>
  3. </template>
  4. <script setup>
  5. import {computed} from 'vue'
  6. import {createPropDefine} from "@/utils";
  7. import {toast} from "@/uni_modules/uv-ui-tools/libs/function";
  8. import {paperCancelCollect, paperCollect} from "@/api/webApi/webQue";
  9. const props = defineProps({
  10. paper: createPropDefine({}, Object)
  11. })
  12. const emits = defineEmits(['change'])
  13. const id = computed(() => props.paper.paperId || props.paper.id)
  14. const collected = computed(() => props.paper.collect)
  15. let loading = false
  16. const handleToggle = async () => {
  17. if (loading) return toast('请稍候')
  18. try {
  19. loading = true
  20. const op = collected.value ? paperCancelCollect : paperCollect
  21. await op(id.value)
  22. props.paper.collect = !collected.value
  23. emits('change', props.paper.collect)
  24. } finally {
  25. loading = false
  26. }
  27. }
  28. </script>
  29. <style scoped>
  30. </style>