美文网首页
element ui [v2.13.12] Cascader 懒

element ui [v2.13.12] Cascader 懒

作者: IT宝哥哥 | 来源:发表于2020-06-06 11:44 被阅读0次

    在编辑具体信息的时候会需要将数据展示到级联菜单中

    html 代码

                    <el-form-item label="城市级联">
                            <el-cascader
                                    :props="props"
                                    :options="nodes.defaultNodes"
                                    v-model="nodes.selected"/>
                    </el-form-item>
    

    js代码

    data() {
            return {
                props: {
                    lazy: true,
                    lazyLoad (node, resolve) {
                        let obj
                        (node.level == 1 || node.level == 2) ?  obj = {parent_id: node.value} : obj = ''
                        cityData(obj).then(res => {
                            if (res.code == 200) {
                                const nodes = res.data.map(el=>{
                                    return {
                                        id: el.id,
                                        region_slug: el.region_slug,
                                        leaf: node.level >= 2
                                    }
                                })
                                resolve(nodes);
                            }
                        })
                    },
                    value:'id',//修改node中value为id
                    label:'region_slug',//同上
                },
                nodes: {
                    selected: [],
                    defaultNodes:[],
                },
            };
        },
    
    // 编辑操作
            handleEdit(index, row) {
                //加载city data ,不使用这里的注释掉的,注释掉的是前端自己拼node列表
                /*if(row.province && row.city && row.region){
                    //province list
                    cityData().then(res=>{
                        if(res.code === 200){
                            // this.nodes.defaultNodes
                            let tmpProvinceList = res.data;
                            console.log(tmpProvinceList);
                            this.nodes.defaultNodes = tmpProvinceList;
                            //city list
                            cityData({parent_id:row.province}).then(res=>{
                                if(res.code === 200){
                                    let tmpCityList = res.data;
                                    console.log(tmpCityList)
                                    this.nodes.defaultNodes.forEach((province,index)=>{
                                        if(province.id === tmpCityList[0].parent_id){
                                            province.children = tmpCityList;
                                        }
                                        return province;
                                    })
                                    //console.log(this.nodes.defaultNodes)
                                    cityData({parent_id:row.city}).then(res=>{
                                        let tmpRegionList = res.data;
                                        console.log(tmpRegionList);
                                        //将region加入到city的children
                                        this.nodes.defaultNodes.forEach((province,index)=>{
                                            if(province.children){
                                                this.nodes.defaultNodes[index].children.forEach(city=>{
                                                    if(city.id === tmpRegionList[0].parent_id){
                                                        city.children = tmpRegionList;
                                                    }
                                                    return city;
                                                })
                                            }
                                        })
                                    })
                                }
                            })
    
                        }
                    })
                }*/
                //加载cityNodes
                if (row.province && row.city && row.region) {
                    let query = {province: row.province, city: row.city, region: row.region}
                    cityNodes(query).then(res => {
                        if (res.code === 200) {
                            console.log(res.data)
                            this.nodes.selected = [row.province,row.city,row.region]
                            this.nodes.defaultNodes = res.data
                        } else {
                            this.$message.error(res.message);
                        }
                    })
                }
                this.idx = index;
                this.form = row;
                this.editVisible = true;
            },
    

    接口controller action

    //获取级联nodes
        public function cityNodes(Request $request){
            $validator = Validator::make($request->all(),[
                'province' => 'required',
                'city'     => 'required',
                'region'   => 'required',
            ]);
            if($validator->fails()){
               return $this->status($validator->errors()->first(),null,400);
            }
            try {
                //校验
                $isCorrect = BaseRegions::query()->whereIn('id', array($request->province, $request->city, $request->region))->get();
                if ($isCorrect->isEmpty() || $isCorrect->count() !== 3) {
                    throw new \Exception('参数错误');
                }
                $provinceList = BaseRegions::query()->where(['parent_id' => 0])->get(['id','parent_id','level','region_slug']);
                if ($provinceList->isEmpty()) {
                    throw new \Exception('查询省份列表错误');
                }
                $cityList = BaseRegions::query()->where(['parent_id' => $request->province])->get(['id','parent_id','level','region_slug']);
                if ($cityList->isEmpty()) {
                    throw new \Exception('查询城市列表错误');
                }
                $regionList = BaseRegions::query()->where(['parent_id' => $request->city])->get(['id','parent_id','level','region_slug']);
                if ($regionList->isEmpty()) {
                    throw new \Exception('查询区(县)列表错误');
                }
                //拼接nodes
                $provinceList = $provinceList->toArray();
                $cityList = $cityList->toArray();
                $regionList = $regionList->toArray();
                $isDone = false;
                for ($i = 0; $i < count($provinceList) ; $i++){
                    if($provinceList[$i]['id'] === $cityList[0]['parent_id']){
                        $provinceList[$i]['children'] = $cityList;
                        $provinceList[$i]['leaf'] = false;
                        for($j = 0; $j < count($cityList); $j++){
                            if($cityList[$j]['id'] === $regionList[0]['parent_id']){
                                $provinceList[$i]['children'][$j]['leaf'] = false;
                                for($k = 0; $k < count($regionList); $k++){
                                    if($regionList[$k]['id'] == $request->region){
                                        $regionList[$k]['leaf'] = true;
                                    }
                                }
                                $provinceList[$i]['children'][$j]['children'] = $regionList;
                                $isDone = true;
                                break;
                            }
                        }
                    }
                    if($isDone){break;}
                }
            } catch (\Exception $e) {
                return $this->status($e->getMessage(), null, 400);
            }
            return $this->status('查询成功', $provinceList, 200);
        }
    

    php接口返回的数据

    {
        "message": "查询成功",
        "code": 200,
        "data": [
            {
                "id": 11,
                "parent_id": 0,
                "level": 0,
                "region_slug": "北京"
            },
            {
                "id": 12,
                "parent_id": 0,
                "level": 0,
                "region_slug": "天津"
            },
            {
                "id": 13,
                "parent_id": 0,
                "level": 0,
                "region_slug": "河北"
            },
            {
                "id": 14,
                "parent_id": 0,
                "level": 0,
                "region_slug": "山西",
                "children": [
                    {
                        "id": 1401,
                        "parent_id": 14,
                        "level": 1,
                        "region_slug": "太原"
                    },
                    {
                        "id": 1402,
                        "parent_id": 14,
                        "level": 1,
                        "region_slug": "大同",
                        "children": [
                            {
                                "id": 140202,
                                "parent_id": 1402,
                                "level": 2,
                                "region_slug": "城区"
                            },
                            {
                                "id": 140203,
                                "parent_id": 1402,
                                "level": 2,
                                "region_slug": "矿区"
                            },
                            {
                                "id": 140211,
                                "parent_id": 1402,
                                "level": 2,
                                "region_slug": "南郊"
                            },
                            {
                                "id": 140212,
                                "parent_id": 1402,
                                "level": 2,
                                "region_slug": "新荣"
                            },
                            {
                                "id": 140221,
                                "parent_id": 1402,
                                "level": 2,
                                "region_slug": "阳高"
                            },
                            {
                                "id": 140222,
                                "parent_id": 1402,
                                "level": 2,
                                "region_slug": "天镇"
                            },
                            {
                                "id": 140223,
                                "parent_id": 1402,
                                "level": 2,
                                "region_slug": "广灵"
                            },
                            {
                                "id": 140224,
                                "parent_id": 1402,
                                "level": 2,
                                "region_slug": "灵丘"
                            },
                            {
                                "id": 140225,
                                "parent_id": 1402,
                                "level": 2,
                                "region_slug": "浑源"
                            },
                            {
                                "id": 140226,
                                "parent_id": 1402,
                                "level": 2,
                                "region_slug": "左云"
                            },
                            {
                                "id": 140227,
                                "parent_id": 1402,
                                "level": 2,
                                "region_slug": "大同"
                            },
                            {
                                "id": 140271,
                                "parent_id": 1402,
                                "level": 2,
                                "region_slug": "山西大同经济开发区"
                            }
                        ]
                    },
                    {
                        "id": 1403,
                        "parent_id": 14,
                        "level": 1,
                        "region_slug": "阳泉"
                    },
                    {
                        "id": 1404,
                        "parent_id": 14,
                        "level": 1,
                        "region_slug": "长治"
                    },
                    {
                        "id": 1405,
                        "parent_id": 14,
                        "level": 1,
                        "region_slug": "晋城"
                    },
                    {
                        "id": 1406,
                        "parent_id": 14,
                        "level": 1,
                        "region_slug": "朔州"
                    },
                    {
                        "id": 1407,
                        "parent_id": 14,
                        "level": 1,
                        "region_slug": "晋中"
                    },
                    {
                        "id": 1408,
                        "parent_id": 14,
                        "level": 1,
                        "region_slug": "运城"
                    },
                    {
                        "id": 1409,
                        "parent_id": 14,
                        "level": 1,
                        "region_slug": "忻州"
                    },
                    {
                        "id": 1410,
                        "parent_id": 14,
                        "level": 1,
                        "region_slug": "临汾"
                    },
                    {
                        "id": 1411,
                        "parent_id": 14,
                        "level": 1,
                        "region_slug": "吕梁"
                    }
                ]
            },
            {
                "id": 15,
                "parent_id": 0,
                "level": 0,
                "region_slug": "内蒙古"
            },
            {
                "id": 21,
                "parent_id": 0,
                "level": 0,
                "region_slug": "辽宁"
            },
            {
                "id": 22,
                "parent_id": 0,
                "level": 0,
                "region_slug": "吉林"
            },
            {
                "id": 23,
                "parent_id": 0,
                "level": 0,
                "region_slug": "黑龙江"
            },
            {
                "id": 31,
                "parent_id": 0,
                "level": 0,
                "region_slug": "上海"
            },
            {
                "id": 32,
                "parent_id": 0,
                "level": 0,
                "region_slug": "江苏"
            },
            {
                "id": 33,
                "parent_id": 0,
                "level": 0,
                "region_slug": "浙江"
            },
            {
                "id": 34,
                "parent_id": 0,
                "level": 0,
                "region_slug": "安徽"
            },
            {
                "id": 35,
                "parent_id": 0,
                "level": 0,
                "region_slug": "福建"
            },
            {
                "id": 36,
                "parent_id": 0,
                "level": 0,
                "region_slug": "江西"
            },
            {
                "id": 37,
                "parent_id": 0,
                "level": 0,
                "region_slug": "山东"
            },
            {
                "id": 41,
                "parent_id": 0,
                "level": 0,
                "region_slug": "河南"
            },
            {
                "id": 42,
                "parent_id": 0,
                "level": 0,
                "region_slug": "湖北"
            },
            {
                "id": 43,
                "parent_id": 0,
                "level": 0,
                "region_slug": "湖南"
            },
            {
                "id": 44,
                "parent_id": 0,
                "level": 0,
                "region_slug": "广东"
            },
            {
                "id": 45,
                "parent_id": 0,
                "level": 0,
                "region_slug": "广西"
            },
            {
                "id": 46,
                "parent_id": 0,
                "level": 0,
                "region_slug": "海南"
            },
            {
                "id": 50,
                "parent_id": 0,
                "level": 0,
                "region_slug": "重庆"
            },
            {
                "id": 51,
                "parent_id": 0,
                "level": 0,
                "region_slug": "四川"
            },
            {
                "id": 52,
                "parent_id": 0,
                "level": 0,
                "region_slug": "贵州"
            },
            {
                "id": 53,
                "parent_id": 0,
                "level": 0,
                "region_slug": "云南"
            },
            {
                "id": 54,
                "parent_id": 0,
                "level": 0,
                "region_slug": "西藏"
            },
            {
                "id": 61,
                "parent_id": 0,
                "level": 0,
                "region_slug": "陕西"
            },
            {
                "id": 62,
                "parent_id": 0,
                "level": 0,
                "region_slug": "甘肃"
            },
            {
                "id": 63,
                "parent_id": 0,
                "level": 0,
                "region_slug": "青海"
            },
            {
                "id": 64,
                "parent_id": 0,
                "level": 0,
                "region_slug": "宁夏"
            },
            {
                "id": 65,
                "parent_id": 0,
                "level": 0,
                "region_slug": "新疆"
            },
            {
                "id": 90,
                "parent_id": 0,
                "level": 0,
                "region_slug": "港澳台"
            },
            {
                "id": 91,
                "parent_id": 0,
                "level": 0,
                "region_slug": "海外"
            }
        ]
    }
    

    效果

    chrome-capture.gif image.png

    相关文章

      网友评论

          本文标题:element ui [v2.13.12] Cascader 懒

          本文链接:https://www.haomeiwen.com/subject/hotxtktx.html