allAreaSelect.vue 2.58 KB
<template>
    <a-tree-select
            v-model="value"
            tree-data-simple-mode
            allowClear
            :tree-data="treeData"
            placeholder="请选择"
            :load-data="onLoadData"
    />
</template>

<script>
    /**
     * 所有地区选择控件
     */
    export default {
        name: "allAreaSelect",
        created() {
            this.getDataList(53);
        },
        data() {
            return {
                value: undefined,
                treeData: [],
            };
        },
        watch: {
            value(value) {
                this.$emit('input', value);
            },
        },
        methods: {
            getDataList(areaCode) {
                let treeData = [];
                this.$api.common.fetchAreaByCode(areaCode).then(({code, data}) => {
                    if (code === "SUCCESS") {
                        data.forEach(x => {
                            let item = {
                                id: x.areaCode,
                                pId: 0,
                                value: x.areaCode,
                                title: x.areaName,
                                isLeaf: x.areaLevel == 5 ? true : false
                            };
                            treeData.push(item);
                        });
                        this.treeData = treeData;
                    }
                });
            },
            onLoadData(treeNode) {
                let that = this;
                return new Promise(resolve => {
                    this.$api.common.fetchAreaByCode(treeNode.value).then(({code, data}) => {
                        let treeData = [];
                        if (code === "SUCCESS") {
                            if (this.$api.utils.isNoBlank(data)) {
                                data.forEach(x => {
                                    let item = {
                                        id: x.areaCode,
                                        pId: treeNode.value,
                                        value: x.areaCode,
                                        title: x.areaName,
                                        isLeaf: x.areaLevel == 5 ? true : false
                                    };
                                    treeData.push(item);
                                });
                                that.treeData = that.treeData.concat(treeData);
                            }
                            resolve();
                        }
                    });
                });
            },
        },
    }
</script>

<style scoped>

</style>