基于Vue3和Element-plus的elui-china-area-dht省市区级联组件应用

5,303 阅读1分钟

- 效果

0a37bf5b17d7736b9d8ef3ba4f5b130.png

- 使用

  • 安装: npm i elui-china-area-dht
  • 页面中引入:
<el-form :model="userForm" ref="nameRef" label-width="80px" label-position="right" class="demo-ruleForm">
    ...
    <el-form-item label="省/市/区" prop="addr">
        <elui-china-area-dht @change="onChange" v-model="userForm.addr"></elui-china-area-dht>
    </el-form-item>
    ...
</el-form>

import { EluiChinaAreaDht} from 'elui-china-area-dht'

  • 定义并使用:
export default {
        name: "Setting",
        components: {
            EluiChinaAreaDht,  //定义组件
        },
        setup(){
            const nameRef=ref(null)
            const state=reactive({
                userInfo:null,
                userId:null,
                userForm:{
                    ...        //此处省略
                    addr:[],   //定义数组存储级联选择结果
                },
            })
            onMounted(() => { 
                getAdminInfo().then(res=>{  //后台获取用户信息(省市区初始值)
                    const userInfo = res.data
                    ...
                    const listAddr=[]      //这里需要重新定义新数组再赋值否则页面不显示
                    listAddr.push(userInfo.province)  //后台省市区三个字段存值
                    listAddr.push(userInfo.city)
                    listAddr.push(userInfo.district)
                    state.userForm.addr=listAddr
                    console.log("addr>>>"+state.userForm.addr) 
                    //输出初始值>>>[310000,310100,310105],数据库存储的也是省市区编码
                })
            })
            const chinaData = new EluiChinaAreaDht.ChinaArea().chinaAreaflat
            const onChange=(e)=>{
                const one=chinaData[e[0]]
                const two=chinaData[e[1]]
                console.log(one)  //输出每次选择后的返回值,见下图
                console.log(two)
            }
            //提交表单
            const submitUserInfo = () => {
                nameRef.value.validate((vaild) => {
                    if (vaild) {
                        ...
                        // const province=chinaData[state.userForm.addr[0]].label
                        // 参数取值,label即选择市的中文“江苏省”
                        const province=state.userForm.addr[0] 
                        const city=state.userForm.addr[1]
                        const district=state.userForm.addr[2]    //提交后台省市区编码即可
                        editAdminInfo(...,province,city,district).then(res=>{
                            ...
                            }
                        })
                    }
                })
            }
            return {
                ...toRefs(state),
                onChange,
                nameRef,
                submitUserInfo
            }
        }

    }

onChange()中输出选择后的值,第一个obj为省值,第二个obj为市区值

f46d461e78cf7bc749c460b7ebafd03.png

<elui-china-area-dht isall :leave="2" @change="onChange"></elui-china-area-dht>
参数类型说明可选值默认值
isallBoolean是否有全部按钮false
leaveNumber数据可选层级,3代表省市区三级级联选项0,1,2,33

- 源码及说明文档

npm地址:www.npmjs.com/package/elu…
git地址:github.com/ht-sauce/el…
语雀说明文档地址:www.yuque.com/cv8igf/gaxp…

- 其它

数据基于:github.com/airyland/ch…
核心原理说明:elui-china-area-dht发布,基于vue3和element-plus的省市区级联组件 - 掘金 (juejin.cn) 参考 # 海天酱油_htSauce www.yuque.com/cv8igf/oy3c…