college-rank.vue 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <template>
  2. <z-paging ref="paging" v-model="list" @query="handleQuery" @on-refresh="handleRefresh">
  3. <template #top>
  4. <view class="bg-white h-[44px] px-30 fx-row items-center">
  5. <uv-text type="warning" prefix-icon="bell" icon-style="color:var(--warning-color)" :text="rankTips"/>
  6. </view>
  7. <uv-line/>
  8. </template>
  9. <view class="p-20 fx-col gap-20">
  10. <college-item v-for="i in list" :item="i" class="mx-card" @click="handleDetail(i)"/>
  11. </view>
  12. </z-paging>
  13. </template>
  14. <script setup>
  15. import {ref, computed} from 'vue'
  16. import {useUserStore} from "@/hooks/useUserStore";
  17. import {useTransfer} from "@/hooks/useTransfer";
  18. import {useCacheStore} from "@/hooks/useCacheStore";
  19. import CollegeItem from "@/pages/college-library/components/college-item.vue";
  20. import {universityList} from "@/api/webApi/collegemajor";
  21. const {currentUser} = useUserStore()
  22. const {transferTo} = useTransfer()
  23. const {dispatchCache, removeCache} = useCacheStore()
  24. const paging = ref(null)
  25. const list = ref([])
  26. const rankTips = computed(() => `${currentUser.value.provinceName || '湖南'}省招生院校竞争力排名`)
  27. const handleRefresh = () => {
  28. removeCache(universityList)
  29. }
  30. const handleQuery = (pageNum, pageSize) => {
  31. const payload = {pageNum, pageSize, filterRank: true}
  32. dispatchCache(universityList, payload)
  33. .then(res => paging.value.completeByTotal(res.rows, res.total))
  34. .catch(e => paging.value.complete(false))
  35. }
  36. const handleDetail = (college) => {
  37. const {code} = college
  38. transferTo('/pages/college-library/detail/detail', {code})
  39. }
  40. </script>
  41. <style scoped>
  42. </style>