concern-major-list.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <template>
  2. <z-paging ref="paging" v-model="list" :auto="false" @query="handleQuery" @on-refresh="handleRefresh">
  3. <view class="my-30">
  4. <uv-cell v-for="m in list" :title="m.name" :label="getParents(m)" is-link class="bg-white"
  5. @click="goMajorDetail(m)"/>
  6. </view>
  7. </z-paging>
  8. </template>
  9. <script setup>
  10. import {ref, onMounted} from 'vue';
  11. import {useCacheStore} from "@/hooks/useCacheStore";
  12. import {cacheActions} from "@/hooks/defineCacheActions";
  13. import {useTransfer} from "@/hooks/useTransfer";
  14. import {concernedMajors} from "@/api/webApi/career-other";
  15. import {findTreeNode} from "@/utils/tree-helper";
  16. const paging = ref(null)
  17. const list = ref([])
  18. const majorTree = ref([])
  19. const {dispatchCache, removeCache} = useCacheStore()
  20. const {transferTo} = useTransfer()
  21. const getParents = (major) => {
  22. const majorNode = findTreeNode(majorTree.value, n => n.code == major.code)
  23. const parents = []
  24. let node = majorNode
  25. while (node.parent) {
  26. parents.push(node.parent.name)
  27. node = node.parent
  28. }
  29. return parents.reverse().join(' | ')
  30. }
  31. const handleRefresh = () => {
  32. removeCache(concernedMajors)
  33. }
  34. const handleQuery = (pageNum, pageSize) => {
  35. const payload = {pageNum, pageSize}
  36. dispatchCache(concernedMajors, payload)
  37. .then(res => paging.value.completeByTotal(res.rows, res.total))
  38. .catch(e => paging.value.complete(false))
  39. }
  40. const goMajorDetail = (major) => {
  41. transferTo('/pages/major-library/detail/detail', ['code'], major)
  42. }
  43. onMounted(async () => {
  44. majorTree.value = await dispatchCache(cacheActions.getMajorTree)
  45. paging.value.reload()
  46. })
  47. </script>
  48. <style scoped>
  49. </style>