echarts 树图 二级节点显示数据

   今天接到一个任务,做一个echarts树图,原型如下图:echarts 树图 二级节点显示数据

首先根据需求和数据集合写接口组装数据:

/**
     * 2020年度处室与学会活跃度分析
     * @param req
     * @return
     */
    @RequestMapping(params = "getInstituteDepartment")
    @ResponseBody
    public AjaxJsonSpecial getInstituteDepartment(HttpServletRequest req) {
        AjaxJsonSpecial j = new AjaxJsonSpecial();
        Map<String,Object> m = new HashMap<String,Object>();
        String sqlnyear = "select a.departmentName departmentName,a.partyB partyB from "+ getDb()+"t_prod_project_contract a where a.departmentName in ( select mappedOrgNameList from "+ getDb()+"t_prod_config_org_mapped ) and a.partyB in (select name from "+ getDb()+"t_prod_society) group by a.departmentName,a.partyB";
        String sqlnyears = "select a.departmentName departmentName from "+ getDb()+"t_prod_project_contract a where a.departmentName in ( select mappedOrgNameList from "+ getDb()+"t_prod_config_org_mapped )  and a.partyB in (select name from "+ getDb()+"t_prod_society) group by a.departmentName";
        List<Map<String,Object>>  thisYearList = systemService.findForJdbc(sqlnyear);
        List<Map<String,Object>>  thisYearLists = systemService.findForJdbc(sqlnyears);
        List<Map<String,Object>> datamaplistAll= new ArrayList<Map<String,Object>>();
        String [] nameShow=new String[thisYearLists.size()];
        String [] listShowA=new String[thisYearLists.size()];
      if(thisYearList.size() > 0 && thisYearLists.size() > 0) {
         int coun=0;//为记当前处室所占位数
           for(int i=0;i<thisYearLists.size();i++){
               List<Map<String,Object>> datamaplist= new ArrayList<Map<String,Object>>();
               Map<String,Object> yearmap = new HashMap<String, Object>();
               String name="";//部门名称
               nameShow[i]=thisYearLists.get(i).get("departmentName").toString();
               String names="";
               int cout=0;//为记学会个数
               for(int a=0;a<thisYearList.size();a++){
                   if(thisYearList.get(a).get("departmentName").equals(thisYearLists.get(i).get("departmentName"))){
                      Map<String,Object> yearmaps = new HashMap<String, Object>();
                      if(coun==0){
                        name=thisYearLists.get(i).get("departmentName").toString();
                        yearmap.put("collapsed", false);
                        yearmap.put("index", coun);
                        
                    }else{
                        name=thisYearLists.get(i).get("departmentName").toString();
                        yearmap.put("collapsed", true);
                        yearmap.put("index", coun);
                    }
                      names+=thisYearList.get(a).get("partyB").toString()+",";
                      yearmaps.put("name", thisYearList.get(a).get("partyB").toString());
                      datamaplist.add(yearmaps);
                      listShowA[i]=names;
                      cout++;
                   }
               }
               yearmap.put("cout", cout);
               yearmap.put("name", name);
               yearmap.put("children", datamaplist);
               datamaplistAll.add(yearmap);
               coun++;
           }
      }
        String sljsondata = JSON.toJSONString(datamaplistAll);
        m.put("listShow", listShowA);
        m.put("sljsondata", sljsondata);
        m.put("nameShow", nameShow);
        j.setAttributes(m);
        j.setSuccess(true);
        return j;
    }

返回结构 :

[{
        "cout": 2,
        "children": [{
            "name": "xxx学会"
        }, {
            "name": "xxx学会"
        }],
        "collapsed": false,
        "name": "xxx服务处",
        "index": 0
    }, {
        "cout": 3,
        "children": [{
            "name": "xxx学会"
        }, {
            "name": "xxx学会"
        }, {
            "name": "xxx学会"
        }],
        "collapsed": true,
        "name": "xxx服务处",
        "index": 1
    }]

js方法拼写echarts树图,解析数据:

// 2020年度处室与学会活跃度分析
    function getInstituteDepartment() {
        var dom = document.getElementById("instituteDepartment");
        var myChart = echarts.init(dom);
        myChart.showLoading();
        $.ajax({
            type : 'POST',
            url:"statisticsOneController.do?getInstituteDepartment",
            data :{
                },
            error : function() {// 请求失败处理函数
            },
            success : function(data) {
              var d = $.parseJSON(data);
              if (d.success) {
                  myChart.hideLoading();
                  var data = {
                          "name": "学服中心",
                          "children":$.parseJSON(d.attributes.sljsondata)
                          };
                  dataArr=d.attributes.nameShow;
                  listShow=d.attributes.listShow;
                  option = null;
                  alert(d.attributes.sljsondata);
                    myChart.setOption(option = {
                           tooltip: {
                                  trigger: 'item',
                                  triggerOn: 'mousemove',
                                  formatter: function(params) {
                                      var len=params.data.children;
                                      var res='';
                                      if(params.data.cout==null){
                                          res=params.name;
                                      }else{
                                          res = params.name+ '  关联学会 '+params.data.cout+'个<br/>';
                                          for(var i=0;i<params.data.cout;i++){
                                                  res+=len[i]["name"]+'</br>';
                                          }
                                      }
                                      return res;
                                  }
                              },
                              series: [
                                  {
                                      type: 'tree',
                                      data: [data],
                                      top: '1%',
                                      left: '7%',
                                      bottom: '1%',
                                      right: '20%',
                                      symbolSize: 7,
                                      label: {
                                          position: 'left',
                                          verticalAlign: 'middle',
                                          align: 'right',
                                          fontSize: 9
                                      },
                                      leaves: {
                                          label: {
                                              position: 'right',
                                              verticalAlign: 'middle',
                                              align: 'left'
                                          }
                                      },
                                      expandAndCollapse: true,
                                      animationDuration: 550,
                                      animationDurationUpdate: 750
                                  }
                              ]
                  });
                if (option && typeof option === "object") {
                  myChart.setOption(option, true);
                  myChart.on('mousedown', (e) => {
                      const name = e.data.name;
                      const curNode = myChart._chartsViews[0]._data.tree._nodes.find(item => {
                          return item.name === name;
                      });
                      const depth = curNode.depth;
                      const curIsExpand = curNode.isExpand;
                      myChart._chartsViews[0]._data.tree._nodes.forEach((item, index) => {
                          if (item.depth === depth && item.name !== name && !curIsExpand) {
                              item.isExpand = false;
                          }
                      });
                  })
              }
              } else {
                        
              }
            }
          });
       }

最后看一下树图展示结果:

echarts 树图 二级节点显示数据

echarts 树图 二级节点显示数据