<template>
|
<Category :category="provinceList" @change="change" class="position-select-view">
|
<CategoryPane :max="max" :categoryChild="categoryChild" :multiple="multiple" v-model="model">
|
</CategoryPane>
|
</Category>
|
</template>
|
|
<script setup lang="ts">
|
import { useAllAreaList } from '@12333/hooks';
|
import Category from './Category.vue';
|
import CategoryPane from './CategoryPane.vue';
|
import { reactive, computed, watch } from 'vue';
|
|
defineOptions({
|
name: 'PositionSelectView',
|
});
|
|
type Props = {
|
multiple?: boolean;
|
max?: number;
|
};
|
|
const props = withDefaults(defineProps<Props>(), {
|
multiple: true,
|
});
|
|
const model = defineModel<number[]>();
|
|
const state = reactive({
|
provinceIndex: 0,
|
});
|
|
const { areaTreeList } = useAllAreaList();
|
|
const provinceList = computed(() => areaTreeList.value.map((x) => ({ ...x, name: x.areaName })));
|
|
const categoryChild = computed(() => {
|
if (!provinceList.value.length) {
|
return [];
|
}
|
return provinceList.value[state.provinceIndex].children.map((x) => ({
|
...x,
|
name: x.areaName,
|
value: x.areaCode,
|
}));
|
});
|
|
const change = (index: number) => {
|
state.provinceIndex = index;
|
};
|
</script>
|
|
<style lang="scss">
|
@import '@/styles/common.scss';
|
|
.position-select-view {
|
.nut-category__cateList {
|
height: 100%;
|
|
& > .h5-div {
|
height: 100%;
|
overflow-y: auto;
|
}
|
|
.nut-category__cateList-scroll {
|
height: 100%;
|
width: auto;
|
}
|
}
|
|
.nut-category-pane {
|
height: 100%;
|
overflow-y: auto;
|
flex: 1;
|
min-width: 0;
|
}
|
}
|
</style>
|