college-recommend.vue 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. <template>
  2. <view class="fx-col gap-10 -mx-20">
  3. <college-item v-for="u in recommends" :item="u" hidden-address class="mx-border-b"
  4. @click="goCollege(u)"/>
  5. </view>
  6. </template>
  7. <script setup>
  8. import {ref, watch} from 'vue';
  9. import CollegeItem from "@/pages/college-library/components/college-item.vue";
  10. import {useTransfer} from "@/hooks/useTransfer";
  11. import {createPropDefine} from "@/utils";
  12. import {useCacheStore} from "@/hooks/useCacheStore";
  13. import {getUniversityByCode} from "@/api/webApi/collegemajor";
  14. const props = defineProps({
  15. major: createPropDefine({}, Object),
  16. detail: createPropDefine({}, Object)
  17. })
  18. const {transferTo} = useTransfer()
  19. const {dispatchCache} = useCacheStore()
  20. const recommends = ref([])
  21. const goCollege = (item) => {
  22. transferTo('/pages/college-library/detail/detail', ['code'], item)
  23. }
  24. watch([() => props.major.code, () => props.detail?.baseInfo?.code], async ([majorCode, collegeCode]) => {
  25. if (!majorCode || !collegeCode) return
  26. const payload = {code: majorCode, pageNum: 1, pageSize: 6}
  27. const res = await dispatchCache(getUniversityByCode, payload)
  28. recommends.value = res.rows.filter(c => c.code != collegeCode).slice(0, 5)
  29. })
  30. </script>
  31. <style scoped>
  32. </style>