useCollegeCollectionService.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import {computed} from 'vue';
  2. import {useCacheStore} from "@/hooks/useCacheStore";
  3. import {toast} from "@/uni_modules/uv-ui-tools/libs/function";
  4. import {concernedUniversities, concernUniversity, removeConcernedUniversity} from "@/api/webApi/career-other";
  5. import {universityDetail} from "@/api/webApi/collegemajor";
  6. import {createEventHook, toValue} from "@vueuse/core";
  7. export const useCollegeCollectionService = function (collegeRef) {
  8. const changeEvent = createEventHook()
  9. const {removeCache} = useCacheStore()
  10. const collected = computed(() => toValue(collegeRef).collected)
  11. let loading = false
  12. const handleToggle = async () => {
  13. if (loading) return toast('请稍候')
  14. try {
  15. loading = true
  16. const entity = toValue(collegeRef)
  17. const op = collected.value ? removeConcernedUniversity : concernUniversity
  18. await op({universityId: entity.id})
  19. entity.collected = !collected.value
  20. await changeEvent.trigger(entity.collected)
  21. // 需要清除当前院校的详情缓存才能更新收藏状态
  22. const payload = {code: entity.code}
  23. removeCache(universityDetail, payload)
  24. // 需要清除收藏列表的缓存才能更新收藏状态
  25. removeCache(concernedUniversities) // 不清楚目标,只能全清
  26. } finally {
  27. loading = false
  28. }
  29. }
  30. return {
  31. collected,
  32. onChange: changeEvent.on,
  33. handleToggle
  34. }
  35. }