
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<html>
    <head>
        <meta charset="utf-8">
        <script src="lib/simpleRequire.js"></script>
        <script src="lib/config.js"></script>
        <script src="lib/dat.gui.min.js"></script>
        <meta name="viewport" content="width=device-width, initial-scale=1" />
    </head>
    <body>
        <style>
            html, body, #main {
                width: 100%;
                height: 600;
            }
        </style>
        <div style="position: relative; height: 600px;" id="main"></div>
        <div style="position: relative; height: 500px;" id="main1"></div>
        <div style="position: relative; height: 500px;" id="main2"></div>
        <script>
            require([
                'echarts'
            ], function (echarts) {
                var chart1 = echarts.init(document.getElementById('main1'), 'dark', {});
                var option1 = {
                    tooltip: {
                        formatter: '{a} <br/>{b} : {c}%'
                    },
                    toolbox: {
                        feature: {
                            restore: {},
                            saveAsImage: {}
                        }
                    },
                    series: [
                        {
                            name: '业务指标',
                            type: 'gauge',
                            progress: {
                                show: true
                            },
                            anchor:{
                                showAbove: true,
                                show: true
                            },
                            roundCap: true,
                            detail: {formatter: '{value}%'},
                            data: [{value: 58.46, name: '完成率'}]
                        }
                    ]
                };
                chart1.setOption(option1);
            })
        </script>
        <script>
            require([
                'echarts'
            ], function (echarts) {
                var chart2 = echarts.init(document.getElementById('main2'), 'dark', {});
                var option2 = {
                    tooltip: {
                        formatter: '{a} <br/>{b} : {c}%'
                    },
                    toolbox: {
                        feature: {
                            restore: {},
                            saveAsImage: {}
                        }
                    },
                    series: [
                        {
                            name: '业务指标',
                            type: 'gauge',
                            pointer: {
                                icon: 'path://M2090.36389,615.30999 L2090.36389,615.30999 C2091.48372,615.30999 2092.40383,616.194028 2092.44859,617.312956 L2096.90698,728.755929 C2097.05155,732.369577 2094.2393,735.416212 2090.62566,735.56078 C2090.53845,735.564269 2090.45117,735.566014 2090.36389,735.566014 L2090.36389,735.566014 C2086.74736,735.566014 2083.81557,732.63423 2083.81557,729.017692 C2083.81557,728.930412 2083.81732,728.84314 2083.82081,728.755929 L2088.2792,617.312956 C2088.32396,616.194028 2089.24407,615.30999 2090.36389,615.30999 Z'
                            },
                            roundCap: true,
                            progress: {
                                show: true,            // 坐标轴线
                                overlap: false,
                                color: ['#f00', '#0f0']
                            },
                            anchor: {
                                show: true,
                                showAbove: true
                            },
                            detail: {
                                formatter: '{value}%'
                            },
                            data: [
                                {
                                    value: 20,
                                    name: '完成率',
                                    title: {
                                        offsetCenter: ['-40%', '20%']
                                    },
                                    detail: {
                                        offsetCenter: ['-40%', '35%']
                                    }
                                },
                                {
                                    value: 40,
                                    name: '达标率',
                                    title: {
                                        offsetCenter: ['0%', '20%']
                                    },
                                    detail: {
                                        offsetCenter: ['0%', '35%']
                                    }
                                },
                                {
                                    value: 60,
                                    name: '优秀率',
                                    title: {
                                        offsetCenter: ['40%', '20%']
                                    },
                                    detail: {
                                        offsetCenter: ['40%', '35%']
                                    }
                                }
                            ],
                            title: {
                                fontSize: 14
                            },
                            detail: {
                                width: 30,
                                height: 12,
                                fontSize: 12,
                                color: 'auto',
                                borderColor: 'auto',
                                borderWidth: 1,
                                borderRadius: 3,
                                formatter: '{value}%',
                            }
                        }
                    ],
                };
                chart2.setOption(option2);
            })
        </script>
        <script>

            require([
                'echarts'
            ], function (echarts) {

                var chart = echarts.init(document.getElementById('main'), {

                });

                var option ={
                    aria: {
                        show: true
                    },
                    tooltip : {
                        formatter: '{a} <br/>{c} {b}'
                    },
                    toolbox: {
                        show : true,
                        feature : {
                            mark : {show: true},
                            restore : {show: true},
                            saveAsImage : {show: true}
                        }
                    },
                    series : [
                        {
                            name:'速度',
                            type:'gauge',
                            z: 3,
                            min:0,
                            max:220,
                            splitNumber:11,
                            axisLine: {            // 坐标轴线
                                lineStyle: {       // 属性lineStyle控制线条样式
                                    width: 10
                                }
                            },
                            axisTick: {            // 坐标轴小标记
                                length :15,        // 属性length控制线长
                                distance: 10,
                                lineStyle: {       // 属性lineStyle控制线条样式
                                    color: 'auto'
                                }
                            },
                            splitLine: {           // 分隔线
                                length :20,         // 属性length控制线长
                                distance: 10,
                                lineStyle: {       // 属性lineStyle（详见lineStyle）控制线条样式
                                    color: 'auto'
                                }
                            },
                            axisLabel: {
                                formatter: '{a|{value}} km/h',
                                rich: {
                                    a: {
                                        color: '#222',
                                        textBorderColor: '#fff',
                                        textBorderWidth: 2,
                                        backgroundColor: 'auto',
                                        padding: [2, 4],
                                        borderRadius: 3
                                    }
                                }
                            },
                            title : {
                                textStyle: { // Test compat
                                    fontWeight: 'bolder',
                                    fontSize: 26,
                                },
                                offsetCenter: [0, 0],
                                formatter: '{a|单位：}{value}',
                                backgroundColor: '#aabbcc',
                                padding: 10,
                                borderRadius: 5,
                                fontStyle: 'italic'
                            },
                            detail : {
                                fontSize: 24,
                                fontWeight: 'bold',
                                textStyle: { // Test compat
                                    backgroundColor: '#eeffee',
                                },
                                offsetCenter: [0, '70%'],
                                borderRadius: 10,
                                borderWidth: 2,
                                borderColor: '#33aa33',
                                shadowBlur: 2,
                                shadowColor: '#222',
                                shadowOffsetX: 5,
                                shadowOffsetY: 5,
                                width: 'auto',
                                rotate: 15,
                                textShadowBlur: 2,
                                textShadowColor: '#66eeaa',
                                textShadowOffsetX: 2,
                                textShadowOffsetY: 3,
                                formatter: [
                                    '{a|码表}',
                                    '{b|{value}}{c|km/h}',
                                    '{j|width is this line is 400}',
                                    '{d|left}{lineHeight|}{f|top}{g|bottom}middle{e|right}{e1|右边}'
                                ].join('\n'),
                                rich: {
                                    a: {
                                        fontSize: 34,
                                        color: 'auto',
                                    },
                                    b: {
                                        fontSize: 20,
                                        color: '#12294f',
                                        align: 'center',
                                        padding: [0, 5, 0, 0]
                                    },
                                    c: {
                                        fontSize: 14,
                                        color: '#aa99bb',
                                        rotate: 30,
                                        backgroundColor: '#223344',
                                        borderRadius: 3,
                                        padding: [2, 10]
                                    },
                                    d: {
                                        align: 'left'
                                    },
                                    e: {
                                        align: 'right'
                                    },
                                    e1: {
                                        color: '#33aa99',
                                        fontSize: 16,
                                        align: 'right'
                                    },
                                    f: {
                                        verticalAlign: 'top'
                                    },
                                    g: {
                                        verticalAlign: 'bottom'
                                    },
                                    h: {
                                        align: 'center'
                                    },
                                    i: {
                                        align: 'center'
                                    },
                                    j: {
                                        width: 400,
                                        backgroundColor: '#aabbcc',
                                        color: '#123'
                                    },
                                    lineHeight: {
                                        lineHeight: 46
                                    }
                                }
                            },
                            data:[{value: 40, name: 'km/h'}]
                        },
                        {
                            name:'转速',
                            type:'gauge',
                            center : ['25%', '55%'],    // 默认全局居中
                            radius : '50%',
                            min:0,
                            max:7,
                            endAngle:45,
                            splitNumber:7,
                            axisLine: {            // 坐标轴线
                                lineStyle: {       // 属性lineStyle控制线条样式
                                    width: 8
                                }
                            },
                            axisTick: {            // 坐标轴小标记
                                length :12,        // 属性length控制线长
                                distance: 10,
                                lineStyle: {       // 属性lineStyle控制线条样式
                                    color: 'auto'
                                }
                            },
                            splitLine: {           // 分隔线
                                length :20,         // 属性length控制线长
                                distance: 10,
                                lineStyle: {       // 属性lineStyle（详见lineStyle）控制线条样式
                                    color: 'auto'
                                }
                            },
                            pointer: {
                                width:5
                            },
                            title : {
                                // x, y，单位px
                                offsetCenter: [0, '-30%']
                            },
                            detail : {
                                textStyle: {       // 其余属性默认使用全局文本样式，详见TEXTSTYLE
                                    fontWeight: 'bolder',
                                    fontSize: 12
                                },
                            },
                            data:[{value: 1.5, name: 'x1000 r/min'}]
                        },
                        {
                            name:'油表',
                            type:'gauge',
                            center : ['75%', '50%'],    // 默认全局居中
                            radius : '50%',
                            min:0,
                            max:2,
                            startAngle:135,
                            endAngle:45,
                            splitNumber:2,
                            axisLine: {            // 坐标轴线
                                lineStyle: {       // 属性lineStyle控制线条样式
                                    color: [[0.2, '#ff4500'],[0.8, '#48b'],[1, '#228b22']],
                                    width: 8
                                }
                            },
                            axisTick: {            // 坐标轴小标记
                                splitNumber:5,
                                length :10,        // 属性length控制线长
                                distance: 10,
                                lineStyle: {       // 属性lineStyle控制线条样式
                                    color: 'auto'
                                }
                            },
                            axisLabel: {
                                formatter:function(v){
                                    switch (v + '') {
                                        case '0' : return 'E';
                                        case '1' : return 'Gas';
                                        case '2' : return 'F';
                                    }
                                }
                            },
                            splitLine: {           // 分隔线
                                length :15,         // 属性length控制线长
                                distance: 10,
                                lineStyle: {       // 属性lineStyle（详见lineStyle）控制线条样式
                                    color: 'auto'
                                }
                            },
                            pointer: {
                                width:2
                            },
                            title : {
                                show: false
                            },
                            detail : {
                                show: false
                            },
                            data:[{value: 0.5, name: 'gas'}]
                        },
                        {
                            name:'水表',
                            type:'gauge',
                            center : ['75%', '50%'],    // 默认全局居中
                            radius : '50%',
                            min:0,
                            max:2,
                            startAngle:315,
                            endAngle:225,
                            splitNumber:2,
                            axisLine: {            // 坐标轴线
                                lineStyle: {       // 属性lineStyle控制线条样式
                                    color: [[0.2, '#ff4500'],[0.8, '#48b'],[1, '#228b22']],
                                    width: 8
                                }
                            },
                            axisTick: {            // 坐标轴小标记
                                show: false
                            },
                            axisLabel: {
                                formatter:function(v){
                                    switch (v + '') {
                                        case '0' : return 'H';
                                        case '1' : return 'Water';
                                        case '2' : return 'C';
                                    }
                                }
                            },
                            splitLine: {           // 分隔线
                                length :15,         // 属性length控制线长
                                lineStyle: {       // 属性lineStyle（详见lineStyle）控制线条样式
                                    color: 'auto'
                                }
                            },
                            pointer: {
                                width: 2
                            },
                            title : {
                                show: false
                            },
                            detail : {
                                show: false
                            },
                            data:[{value: 0.5, name: 'gas'}]
                        }
                    ]
                };

                chart.setOption(option);

                setInterval(function () {
                    option.series[0].data[0].value = (Math.random()*100).toFixed(2) - 0;
                    option.series[1].data[0].value = (Math.random()*7).toFixed(2) - 0;
                    option.series[2].data[0].value = (Math.random()*2).toFixed(2) - 0;
                    option.series[3].data[0].value = (Math.random()*2).toFixed(2) - 0;
                    chart.setOption(option,true);
                }, 2000);
                // var config = {
                //     labelPosition: 'outside',
                //     clockwise: true,
                //     labelLineLen: 20,
                //     labelLineLen2: 5
                // };

                // function update() {
                //     chart.setOption({
                //         series: [{
                //             name: 'pie',
                //             clockwise: config.clockwise,
                //             label: {
                //                 normal: {
                //                     position: config.labelPosition
                //                 }
                //             },
                //             labelLine: {
                //                 length: config.labelLineLen,
                //                 length2: config.labelLineLen2
                //             }
                //         }]
                //     });
                // }

                // var gui = new dat.GUI();
                // gui.add(config, 'clockwise')
                //     .onChange(update);
                // gui.add(config, 'labelPosition', ['inside', 'outside'])
                //     .onChange(update);
                // gui.add(config, 'labelLineLen', 0, 100)
                //     .onChange(update);
                // gui.add(config, 'labelLineLen2', 0, 100)
                //     .onChange(update);
            })

        </script>
    </body>
</html>