关于 vue+elementUI 的联级选择器 cascader

本案例为四级联查:  前端(vue+elementUI)     后端:(springboot+mybatis+mysql)

1,前端:

<el-dialog :title="title" :visible.sync="open" width="1500px" append-to-body>
    <el-form-item label="服务器ip/类型/版本/接口名称" prop="conditions">
      <el-cascader
         v-model="componentConditionOptions.componentConditions"
                 :options="conditionOptions"
                 style="width: 100%"
                 clearable></el-cascader>
        </el-form-item>
</el-dialog>


<script>
import {getCascader} from "@/views/demo/js/paramter";

export default {
  name: "Paramter",
  data() {
    return {      //只显示了与联查相关的代码了
      //服务器IP、组件类型、组件版本、接口名称查询条件
       conditionOptions:[],
          };
  },

  created() {     //页面加载时 加载的初始数据
        //联查
        this.getCascaderConditions();
     },

 methods: {

  getCascaderConditions(){
     getCascader().then(response => {
                   this.conditionOptions = response.data.icondition;
       });
  },

    /** 提交按钮 */
    submitForm() {
      this.$refs["form"].validate(valid => {
        if (valid) {
          if (this.form.id != null) {
           var conditionStr = this.componentConditionOptions.componentConditions;
            //由于后端接受的数据为String  必须将json转为String   ( 同样在修改回显数据时,通过后台将字段拼接好json型字符串,前台接受字符转再将字符串转为Json格式)
           this.form.conditions= JSON.stringify(conditionStr);
            updateParamter(this.form).then(response => {
              this.msgSuccess("修改成功");
              this.open = false;
              this.getList();
            });
          } else {
           var conditionStr = this.componentConditionOptions.componentConditions;
           //这里也是将Json转为字符串传到后端
           this.form.conditions= JSON.stringify(conditionStr);
            addParamter(this.form).then(response => {
              this.msgSuccess("新增成功");
              this.open = false;
               //多级联查下拉框数据清空(注意:由于vue对象不清空数据会导致 下次点开编辑页面 数据自动填充)
              this.componentConditionOptions.componentConditions = null;
              
              this.getList();
            });
          }
        }
      });
    },

  }
}
       

</script>

后端:

//在VO目录下里创建封装类
//创建IConditionVO 类


        import lombok.Data;
        import java.util.List;
      @Data
      public class IConditionVO {
         private  List<IServerIpVO> icondition;
      }

//创建IServerIpVO 类

     import lombok.Data;
     import java.util.List;
    @Data
     public class IServerIpVO {
        private String label;
       private String value;
       private List<ITypeVO> children;
     }

//创建ITypeVO 类

import lombok.Data;
import java.util.List;

@Data
public class ITypeVO {
    private String label;
    private String value;
    private List<IRevisionVO> children;
}

//创建IRevisionVO 类

import lombok.Data;
import java.util.List;
@Data
public class IRevisionVO {
    private String label;
    private String value;
    private List<IInterfacesVO> children;
}

//创建IInterfacesVO 类
import lombok.Data;
@Data
public class IInterfacesVO {
    private String label;
    private String value;
}


//获取的主表(关联查出的)

import com.baomidou.mybatisplus.annotation.TableField;
import lombok.*;
import com.xxx.BaseEntity;
import springfox.documentation.spring.web.json.Json;


/**
 * 组件接口信息对象
 * 
 * @author david
 * @date 2021-08-20
 */
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class ComponentInterfaceInfo extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 组件接口主键 */
    private String id;

    /** 组件类型编号 */
    private String componentInterfaceTypeId;

    /** 服务器IP */
    private String serverIp;

    /** 组件接口编号 */
    private String componentInterfaceId;

    /** 组件类型名称 */
    @TableField(exist = false)
    private String componentInterfaceTypeName;

    /** 组件接口版本号 */
    private String componentRevisionNo;

    /** 组件接口名 */
    private String componentInterfaceName;

    /** 接口组件说明 */
    private String componentInterfaceIntruduce;

    /** 组件接口地址 */
    private String componentInterfaceAddress;

    /** 组件接口返回格式 */
    private String componentInterfaceReturnFormat;

    /** 组件接口请求方式 */
    private String componentInterfaceRequestMethod;

    /** 组件接口请求方式 */
    @TableField(exist = false)
    private String componentInterfaceRequestMethodName;

    /** 组件版本上架状态 */
    private String componentRevisionStatus;

    @TableField(exist = false)
    private String conditions;
}


//控制层
    @RequestMapping("/cascaderData")
    public R cascaderData()
    {
        return R.success(paramterService.getCascader());
    }


//接口实现类(跳过业务接口)
 @Override
    public IConditionVO cascader() {

        /**
         * 注意:1、每一步的List遍历都是将List转为map   先实例map对象再 进行List集合遍历
         *      2、每一步的map集合遍历都是对VO进行封装   封装完以后 还要获取下一层数据的list集合
         */

        //封装serverIp
        List<IServerIpVO> iServerIpVOList  = null;
        //封装type
        List<ITypeVO> typeVOList = null;
        //封装revision
        List<IRevisionVO> revisionVOList = null;
        //封装接口
        List<IInterfacesVO> interfaceVOList = null;

        IConditionVO icVO = new IConditionVO();
        IServerIpVO iServerIpVO = null;
        ITypeVO iTypeVO = null;
        IRevisionVO iRevisionVO = null;
        IInterfacesVO iInterfacesVO = null;

//获取所有数据,包括关联查询出来的各字段名称--作label显示 List<ComponentInterfaceInfo> componentInterfaceInfoList =  xxxMapper.getAllList();

        Map<String,List<ComponentInterfaceInfo>> ipMap = new HashMap<>();
        for(ComponentInterfaceInfo componentInterfaceInfo:componentInterfaceInfoList){
            if(!ipMap.containsKey(componentInterfaceInfo.getServerIp())){
                List<ComponentInterfaceInfo> interfaceList = new ArrayList<>();
                interfaceList.add(componentInterfaceInfo);
                ipMap.put(componentInterfaceInfo.getServerIp(),interfaceList);
            }else{
                ipMap.get(componentInterfaceInfo.getServerIp()).add(componentInterfaceInfo);
            }
        }

        iServerIpVOList = new ArrayList<>();
        for(Map.Entry<String,List<ComponentInterfaceInfo>> entry:ipMap.entrySet()){

            iServerIpVO = new IServerIpVO();
            iServerIpVO.setLabel(entry.getKey());
            iServerIpVO.setValue(entry.getKey());
            iServerIpVOList.add(iServerIpVO);
            List<ComponentInterfaceInfo> componentTypeList = entry.getValue();
            Map<String,List<ComponentInterfaceInfo>> typeMap = new HashMap<>();

            for(ComponentInterfaceInfo componentTypeInfo:componentTypeList){
                if(!typeMap.containsKey(componentTypeInfo.getComponentInterfaceTypeId())){
                    List<ComponentInterfaceInfo> typeList = new ArrayList<>();
                    typeList.add(componentTypeInfo);
                    typeMap.put(componentTypeInfo.getComponentInterfaceTypeId(),typeList);
                }else{
                    typeMap.get(componentTypeInfo.getComponentInterfaceTypeId()).add(componentTypeInfo);
                }
            }

            typeVOList = new ArrayList<>();
            for(Map.Entry<String,List<ComponentInterfaceInfo>> typeEntry:typeMap.entrySet()){

                iTypeVO = new ITypeVO();
                iTypeVO.setValue(typeEntry.getKey());
                iTypeVO.setLabel(typeEntry.getValue().get(0).getComponentInterfaceTypeName());
                typeVOList.add(iTypeVO);

                List<ComponentInterfaceInfo> componentRevisionList = typeEntry.getValue();

                Map<String,List<ComponentInterfaceInfo>> revisionMap = new HashMap<>();
                for(ComponentInterfaceInfo revisionInfo:componentRevisionList) {
                    if (!revisionMap.containsKey(revisionInfo.getComponentRevisionNo())) {
                        List<ComponentInterfaceInfo> revisionList = new ArrayList<>();
                        revisionList.add(revisionInfo);
                        revisionMap.put(revisionInfo.getComponentRevisionNo(), revisionList);
                    } else {
                        revisionMap.get(revisionInfo.getComponentRevisionNo()).add(revisionInfo);
                    }
                }

                revisionVOList = new ArrayList<>();
                for(Map.Entry<String,List<ComponentInterfaceInfo>> revision:revisionMap.entrySet()){

                    iRevisionVO =new IRevisionVO();
                    iRevisionVO.setValue(revision.getKey());
                    iRevisionVO.setLabel(revision.getValue().get(0).getComponentRevisionNo());
                    revisionVOList.add(iRevisionVO);

                    List<ComponentInterfaceInfo> interfaceList =  revision.getValue();

                    Map<String,List<ComponentInterfaceInfo>> interfaceMap = new HashMap<>();
                    for(ComponentInterfaceInfo componentInterfaceInfo:interfaceList){
                        if(!interfaceMap.containsKey(componentInterfaceInfo.getId())){
                            List<ComponentInterfaceInfo> interfaceOneList = new ArrayList<>();
                            interfaceOneList.add(componentInterfaceInfo);
                            interfaceMap.put(componentInterfaceInfo.getId(),interfaceOneList);
                        }else{
                            interfaceMap.get(componentInterfaceInfo.getId()).add(componentInterfaceInfo);
                        }
                    }

                    interfaceVOList = new ArrayList<>();
                    for(Map.Entry<String,List<ComponentInterfaceInfo>> componentEntry:interfaceMap.entrySet()){

                        iInterfacesVO = new IInterfacesVO();
                        iInterfacesVO.setLabel(componentEntry.getValue().get(0).getComponentInterfaceName());
                        iInterfacesVO.setValue(componentEntry.getKey());
                        interfaceVOList.add(iInterfacesVO);

                    }
                    iRevisionVO.setChildren(interfaceVOList);

                }
                iTypeVO.setChildren(revisionVOList);

            }
            iServerIpVO.setChildren(typeVOList);

        }
        icVO.setIcondition(iServerIpVOList);

        return icVO;
    }

  

 

posted @ 2021-12-24 18:08  唯恐不及  阅读(782)  评论(0编辑  收藏  举报