自定义图形组件

睿思BI系统中所有图形组件采用echarts开发,都定义在ext-config.xml中。图形组件都实现 com.ruisi.ext.engine.view.emitter.chart.ChartEmitter 接口,配置信息如下:

<chart shape="line" class="com.ruisi.ext.engine.view.emitter.chart.echarts.LineChart"/>
<chart shape="area" class="com.ruisi.ext.engine.view.emitter.chart.echarts.AreaChart"/>
<chart shape="bar" class="com.ruisi.ext.engine.view.emitter.chart.echarts.BarChart"/>
<chart shape="bubble" class="com.ruisi.ext.engine.view.emitter.chart.echarts.BubbleChart"/>
<chart shape="column" class="com.ruisi.ext.engine.view.emitter.chart.echarts.ColumnChart"/>
<chart shape="gauge" class="com.ruisi.ext.engine.view.emitter.chart.echarts.GaugeChart"/>
<chart shape="gauge2" class="com.ruisi.ext.engine.view.emitter.chart.echarts.GaugeChart2"/>
<chart shape="mgauge" class="com.ruisi.ext.engine.view.emitter.chart.echarts.GaugeChart3"/>
<chart shape="map" class="com.ruisi.ext.engine.view.emitter.chart.echarts.MapChart"/>
<chart shape="nestingPie" class="com.ruisi.ext.engine.view.emitter.chart.echarts.NestingPieChart"/>
<chart shape="pie" class="com.ruisi.ext.engine.view.emitter.chart.echarts.PieChart"/>
<chart shape="pie2" class="com.ruisi.ext.engine.view.emitter.chart.echarts.PieChart2"/>
<chart shape="radar" class="com.ruisi.ext.engine.view.emitter.chart.echarts.RadarChart"/>
<chart shape="scatter" class="com.ruisi.ext.engine.view.emitter.chart.echarts.ScatterChart"/>
<chart shape="scatterMap" class="com.ruisi.ext.engine.view.emitter.chart.echarts.ScatterMapChart"/>
<chart shape="wordcloud" class="com.ruisi.ext.engine.view.emitter.chart.echarts.WordCloudChart"/>
<chart shape="funnel" class="com.ruisi.ext.engine.view.emitter.chart.echarts.FunnelChart"/>
<chart shape="treeMap" class="com.ruisi.ext.engine.view.emitter.chart.echarts.TreeMapChart"/>
<chart shape="liquidFill" class="com.ruisi.ext.engine.view.emitter.chart.echarts.LiquidFillChart"/>
<chart shape="sexProportion" class="com.ruisi.ext.engine.view.emitter.chart.echarts.SexProportionChart"/>
<chart shape="baiduMap" class="com.ruisi.ext.engine.view.emitter.chart.echarts.BaiduMapChart"/>
<chart shape="sankey" class="com.ruisi.ext.engine.view.emitter.chart.echarts.SankeyChart"/>
<chart shape="capsule" class="com.ruisi.ext.engine.view.emitter.chart.echarts.CapsuleChart"/>

创建自定义图形组件过程如下:

1.继承 AbstractChartEmitter 类并实现ChartEmitter接口,如下:

package com.ruisi.ext.engine.view.emitter.chart;

import javax.servlet.jsp.JspException;

public class TestChart extends AbstractChartEmitter implements ChartEmitter  {

@Override
    public int createChartJS(boolean toJSON) {

        //生成JSON
        out.println("            {");
        out.println("                top: 'center',");
        out.println("                left: 'center',");
        out.println("                series: [");
        out.println("                    {");
        out.println("                        type: 'pie',");
        out.println("                        radius: ['60%', '80%'],");
        out.println("                        avoidLabelOverlap: false,");
        out.println("                        labelLine: {");
        out.println("                            show: false");
        out.println("                        },");
        out.println("                        label: {");
        out.println("                            show: true,");
        out.println("                            position: 'outside',");
        out.println("                            formatter: 'f$function (params) { return `{a|${params.percent.toFixed(0)}%}`;}',");
        out.println("                            color: '#fff',");
        out.println("                            fontSize: 14,");
        out.println("                            rich: {");
        out.println("                                a: {");
        out.println("                                    backgroundColor: 'rgba(0, 0, 0, 0.6)',");
        out.println("                                    borderRadius: 4,");
        out.println("                                    padding: 6");
        out.println("                                }");
        out.println("                            }");
        out.println("                        },");
        out.println("                        labelLine: {");
        out.println("                            show: true,");
        out.println("                            length: -5, // 设置引导线长度");
        out.println("                            length2: -10, // 设置引导线第二段长度");
        out.println("                            lineStyle: {");
        out.println("                                color: 'transparent'");
        out.println("                            }");
        out.println("                        },");
        out.println("                        startAngle: 0,");
        out.println("                        clockwise: true,");
        out.println("                        color: [");
        out.println("                            \"f$new echarts.graphic.LinearGradient(1, 1, 0, 0, [ { offset: 0, color: 'rgba(37, 190, 238, 1)' },{ offset: 1, color: 'rgba(37, 190, 238, 0)' } ])\",");
        out.println("                            \"f$new echarts.graphic.LinearGradient(0, 0, 1, 1, [ { offset: 0, color: 'rgba(35, 128, 238, 1)' }, { offset: 1, color: 'rgba(35, 128, 238, 0)' } ])\",");
        out.println("                            \"f$new echarts.graphic.LinearGradient(0, 0, 1, 1, [{ offset: 0, color: 'rgba(76, 210, 43, 1)' }, { offset: 1, color: 'rgba(76, 210, 43, 0)' } ])\"");
        out.println("                        ],");
        out.println("                        data: [");

        //生成数据
        String dataString = "";
        for (int i = 0; i < dataList.size(); i++) {
            Map<String, Object> map = dataList.get(i);
            Object xcolValue = map.get(chart.getXcol());
            Object ycolValue = map.get(chart.getYcol());

            if (i >= config.getXcnt_Num()) {
                break;
            }

            //饼图
            dataString += "{ name: \""+ (chart.getXcol() == null ? "合计":xcolValue) +"\",";
            dataString += "    value: "+ ycolValue +"}";

            if (i == (dataList.size() - 1) || i == config.getXcnt_Num() - 1){

            }else{
                dataString += ",";
            }
        }
        out.println(dataString);
        out.println("                        ],");
        out.println("                    }");
        out.println("                ]");
        out.println("            }");

        return 0;
    }

}

2.把创建的类配置到 ext-config.xml 文件中。

<chart shape="test" class="com.ruisi.ext.engine.view.emitter.chart.echarts.TestChart"/>

其中shape 配置图形标识,class 配置图形类。

3.在图形类型的vue源码文件中添加 shape 为 test 的图形组件,源码文件为:src/view/portal/ChartDailog.vue。

在文件129行附近,添加图形选择代码,如下:

{cid:"25", cname:"自定义", type:"custom", show:false, children:[
//其中 maparea 属性表示地图使用的 地图JSON, 321200.json 是泰州地图
{img:"c82.gif", index:"1", shape:"map2", maparea:"321200", name:"泰兴化工分布图"},
{img:"c3.gif", index:"2", shape:"test", name:"演示自定义图形"},
]},

img表示自定义图形的图标,name 表示显示名称,shape 表示图形类型,和 ext-config.xml 中的配置一致。

请注意:用户自定义的图形,都放在type 为 custom 的 children 里面。

通过更改图形class类实现,也能更改系统的基础图形。

results matching ""

    No results matching ""