index.vue 2.39 KB
Newer Older
dragondean@qq.com's avatar
dragondean@qq.com committed
1 2
<template>
    <div>
dragondean@qq.com's avatar
dragondean@qq.com committed
3
        <el-select v-model="formData.country" :disabled="readonly">
dragondean@qq.com's avatar
dragondean@qq.com committed
4
            <el-option v-for="(item) in treeList" :value="item.id" :label="$l(item, 'title')" :key="item.id" />
dragondean@qq.com's avatar
dragondean@qq.com committed
5
        </el-select>
dragondean@qq.com's avatar
dragondean@qq.com committed
6
        <el-select v-model="formData.province" class="ml-10" :disabled="readonly">
dragondean@qq.com's avatar
dragondean@qq.com committed
7
            <el-option v-for="(item) in provinceList" :value="item.id" :label="$l(item, 'title')" :key="item.id" />
dragondean@qq.com's avatar
dragondean@qq.com committed
8
        </el-select>
dragondean@qq.com's avatar
dragondean@qq.com committed
9
        <el-select v-model="formData.city" class="ml-10" :disabled="readonly">
dragondean@qq.com's avatar
dragondean@qq.com committed
10
            <el-option v-for="(item) in cityList" :value="item.id" :label="$l(item, 'title')" :key="item.id" />
dragondean@qq.com's avatar
dragondean@qq.com committed
11 12 13 14 15 16 17
        </el-select>
    </div>
</template>
<script>
import { getListTree } from "@/api/ecw/region";

export default {
18 19 20
    props:{
        country: Number,
        city: Number,
dragondean@qq.com's avatar
dragondean@qq.com committed
21 22
        province: Number,
        readonly: Boolean
23
    },
dragondean@qq.com's avatar
dragondean@qq.com committed
24 25 26
    data(){
        return {
            formData:{
27 28 29
                country: undefined,
                province: undefined,
                city: undefined
dragondean@qq.com's avatar
dragondean@qq.com committed
30 31
            },
            treeList: [],
32 33
            // provinceList: [],
            // cityList:[]
dragondean@qq.com's avatar
dragondean@qq.com committed
34 35 36
        }
    },
    watch:{
37 38 39 40 41 42 43 44 45
        city(val){
            this.$set(this.formData, 'city', val)
        },
        province(val){
            this.$set(this.formData, 'province', val)
        },
        country(val){
            this.$set(this.formData, 'country', val)
        },
dragondean@qq.com's avatar
dragondean@qq.com committed
46 47 48 49 50 51 52 53
        'formData.city'(city){
            this.$emit('cityChange', city)
        },
        'formData.country'(country){
            this.$emit('countryChange', country)
        },
        'formData.province'(province){
            this.$emit('provinceChange', province)
54 55 56 57 58 59 60 61 62 63 64 65
        }
    },
    computed:{
        provinceList(){
            if(!this.formData.country) return []
            let country = this.treeList.find(item => item.id == this.formData.country)
            return country && country.children || []
        },
        cityList(){
            if(!this.provinceList.length) return []
            let province = this.provinceList.find(item => item.id == this.formData.province)
            return province && province.children || []
dragondean@qq.com's avatar
dragondean@qq.com committed
66 67 68 69 70 71
        }
    },
    created(){
        getListTree({treeType: 1}).then(response => {
            this.treeList = response.data
        })
72 73 74 75 76
        this.formData = {
            country: this.country,
            province: this.province,
            city: this.city
        }
dragondean@qq.com's avatar
dragondean@qq.com committed
77 78 79
    }
}
</script>