picker.vue 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <template>
  2. <college-list :extra-filter="extraFilter" custom-item-click @item-click="handleItemClick">
  3. <template #top>
  4. <mx-nav-bar title="选择院校" style="z-index: 20000"/>
  5. </template>
  6. <template v-if="categoryNode" #prefix>
  7. <view class="h-[44px] px-30 fx-row items-center bg-white">
  8. <uv-icon name="bell" color="warning" label-color="var(--warning-color)" label-size="14"
  9. :label="`仅显示包含[${categoryNode.name}]专业的院校`"/>
  10. </view>
  11. </template>
  12. </college-list>
  13. </template>
  14. <script setup>
  15. import {ref, computed, onMounted} from 'vue';
  16. import CollegeList from "@/pages/college-library/components/college-list.vue";
  17. import {useCacheStore} from "@/hooks/useCacheStore";
  18. import {useTransfer} from "@/hooks/useTransfer";
  19. import {cacheActions} from "@/hooks/defineCacheActions";
  20. import {findTreeNode} from "@/utils/tree-helper";
  21. import {toast} from "@/uni_modules/uv-ui-tools/libs/function";
  22. import {array} from "@/uni_modules/uv-ui-tools/libs/function/test";
  23. const {dispatchCache} = useCacheStore()
  24. const {prevData, callbackEventData, transferBack} = useTransfer()
  25. const majorTree = ref([])
  26. const categoryNode = computed(() => findTreeNode(majorTree.value, m => m.code == prevData.value.majorCategory))
  27. const extraFilter = computed(() => {
  28. const {majorCategory} = prevData.value
  29. return {majorCategory}
  30. })
  31. const handleItemClick = (college) => {
  32. if (array(prevData.value.excepts)) {
  33. if (prevData.value.excepts.includes(college.code))
  34. return toast('您已经选择过该院校了')
  35. }
  36. callbackEventData.value = college
  37. transferBack()
  38. }
  39. onMounted(async () => majorTree.value = await dispatchCache(cacheActions.getMajorTree))
  40. </script>
  41. <style lang="scss">
  42. </style>