| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- <template>
- <view>
- <ie-dropdown :configs="configs" v-model="form" :absolute="absolute" @change="handleChange"/>
- </view>
- </template>
- <script setup lang="ts">
- import type {Dropdown} from "@/types";
- import {UNIVERSITY_FILTER} from "@/types/injectionSymbols";
- import type {UniversityQueryDto, UniversityFilter} from "@/types/university";
- import {useUserStore} from "@/store/userStore";
- const props = defineProps<{
- options: UniversityFilter;
- absolute?: boolean;
- }>()
- const filter = inject(UNIVERSITY_FILTER) || ref({} as UniversityQueryDto)
- const userStore = useUserStore()
- const emit = defineEmits<{
- (e: 'change', value: UniversityQueryDto): void;
- }>();
- const options = computed(() => {
- return userStore.isHN ? [
- {
- label: '院校层次',
- prop: 'features',
- optionKey: 'features',
- keyName: 'label',
- keyValue: 'value',
- },
- {
- label: '院校类型',
- prop: 'type',
- optionKey: 'types',
- keyName: 'label',
- keyValue: 'value',
- },
- {
- label: '办学类型',
- prop: 'natureTypeCN',
- optionKey: 'natureTypes',
- keyName: 'label',
- keyValue: 'value',
- },
- {
- label: '院校梯队',
- prop: 'tier',
- optionKey: 'tiers',
- keyName: 'label',
- keyValue: 'value',
- },
- ] : [
- {
- label: '院校层次',
- prop: 'features',
- optionKey: 'features',
- keyName: 'label',
- keyValue: 'value',
- },
- {
- label: '院校类型',
- prop: 'type',
- optionKey: 'types',
- keyName: 'label',
- keyValue: 'value',
- },
- {
- label: '办学类型',
- prop: 'natureTypeCN',
- optionKey: 'natureTypes',
- keyName: 'label',
- keyValue: 'value',
- },
- {
- label: '院校省份',
- prop: 'location',
- optionKey: 'locations',
- keyName: 'label',
- keyValue: 'value',
- }
- ]
- })
- const form = ref<Record<string, any>>({});
- const configs = computed<Dropdown.DropdownItem[]>(() => {
- return options.value.map(item => {
- const list = props.options[item.optionKey as keyof UniversityFilter] || [];
- if (Array.isArray(list)) {
- return {
- label: item.label,
- prop: item.prop,
- keyName: item.keyName,
- keyValue: item.keyValue,
- options: list.map(item => {
- return {
- label: item,
- value: item,
- }
- }),
- value: []
- }
- } else {
- return {
- label: item.label,
- prop: item.prop,
- keyName: item.keyName,
- keyValue: item.keyValue,
- options: Object.entries(list).map(([key, value]) => {
- return {
- label: value,
- value: key,
- }
- }),
- value: []
- }
- }
- });
- });
- const handleChange = (value: any) => {
- filter.value = {
- ...filter.value,
- ...value,
- }
- emit('change', filter.value);
- }
- </script>
- <style scoped></style>
|