• echart 时间轴(datazoom使用)、以及y轴值过大但是变化不大显示感觉不出变化的问题+弹出框拖动div事件


    1、时间轴

    echart 提供了一种图表,如果x轴是一个时间范围,并且是连续的,如果用传统的数据驱动会很慢,所以用时间轴的方式

    function initCurve(_data){
        var resultArr=[];
        for(var i=0;i<_data.length;i++){
            var res=_data[i]
            resultArr.push({
                name:new Date(res.time)+"",
                value:[res.time,Number(res.value).toFixed(2)]
            })
        }
        initEc("echart_01",{
            title: {
                text: '历史曲线',
                x:'center'
            },
            tooltip: {//鼠标放在点上面的时候显示的数据格式2019/03/04 08:30 2455025
                trigger: 'axis',
                formatter: function (params) {
                    params = params[0];
                    var date = new Date(params.name);
                    return   date.getFullYear() +'/' + (date.getMonth() + 1) + '/' +date.getDate()+'  '+date.getHours()+":"+date.getSeconds() +'  ' + params.value[1];
                },
                axisPointer: {
                    animation: false
                }
            },
            xAxis: {
                type: 'time',
                splitLine: {
                    show: false
                }
            },
            yAxis: {
                type: 'value',
                name:"kWh",
                // boundaryGap:[-4000,'110%'],
                splitLine: {
                    show: false
                },
                max:function(obj){//解决因数据值范围相差太大或是太小曲线显示不美观问题
                    var ma=obj.max;
                    var mi=obj.min;
                    var val=Math.ceil((ma+(ma-mi)/2))
                    return val
                },
                min:function(obj){
                    var ma=obj.max;
                    var mi=obj.min;
                    var val=Math.ceil((mi-(ma-mi)/2))
                    return mi==0?0:val
                }
            },
            dataZoom: [
                {
                    type: 'slider',//数据滑块
                    start:0,
                    minSpan:8,    //5min
                    // minSpan:16,   //10min
                    // minSpan:24,   //15min
                    // minSpan:50,   //30min
                    dataBackground:{
                        lineStyle:{
                            color:'#95BC2F'
                        },
                        areaStyle:{
                            color:'#95BC2F',
                            opacity:1,
                        }
                    },
                    // fillerColor:'rgba(255,255,255,.6)'
                },
                {
                    type:'inside'//使鼠标在图表中时滚轮可用
                }
            ],
            series: [{
                name: '模拟数据',
                type: 'line',
                showSymbol: false,
                hoverAnimation: false,
                data: resultArr
            }]
        })
    }

      

    解决因数据值范围相差太大或是太小曲线显示不美观问题

    左侧默认显示,右侧是添加了max和min之后显示
    算法1、max加上(max-min)/2
    算法2、根据min-min的位数,如果是1位加10 n位就加10的n次方


    data-zoom 使用(2020年4月24)
    举例:
                    dataZoom: [
                        {
                            type: 'slider',//数据滑块
                            start: 0,
                            minSpan: 8,    //5min
                            // minSpan:16,   //10min
                            // minSpan:24,   //15min
                            // minSpan:50,   //30min
                            //bottom:-10,
                            height: 10,
                            dataBackground: {
                                lineStyle: {
                                    color: '#95BC2F'
                                },
                                areaStyle: {
                                    color: '#95BC2F',
                                    opacity: 1,
                                }
                            },
                            // fillerColor:'rgba(255,255,255,.6)'
                        },
                        {
                            type: 'inside'//使鼠标在图表中时滚轮可用
                        }
                    ],

    效果如下

     但是如果想不需要滑块,但是需要滚轮放大和缩小坐标的功能,可以使用

    type: 'inside',




    弹出框拖动代码
    $("body").on("mousedown",".model-window .model-head",function(event){
        var ox=event.offsetX,
            oy=event.offsetY,
            ot=$(this).offset().top,
            ol=$(this).offset().left,
            pel=$(this).parent();
        var flag=0;
        var osx=ol;//保存计算后的left;
        var osy=ot;//保存计算后的top;
        pel.fadeTo(60,0.6);
        $(document).off('mousemove').on('mousemove',function(e){
            var msx=e.pageX,msy=e.pageY;
            osx=msx-ox;osy=msy-oy;
            pel.css({left:osx+'px',top:osy+'px',right:'auto',bottom:'auto'});
        });
        $(document).off('mouseup').on('mouseup',function(event){
            $(document).off('mousemove').off('mouseup');
            pel.fadeTo('fast',1);
        });
    });

    此处需要注意的是

    拖动的时候为 弹出框的 head头添加了拖动  mousedown mousemove mouseup的事件,导致div闪电移动,但是在点击的关闭弹框的图标时也会触发拖动事件,所以在点击弹出框的时候应该阻止冒泡

    //弹出框关闭的事件
    $("#trendCur .clo").on("mousedown",function(){return false}).click(function(){//阻止冒泡
        $(this).closest(".def-model").hide();
        return false;
    })
    完整代码:
    html
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
             <!-- 设置 viewport -->
            <!-- <meta name = "viewport" content ="initial-scale=1.0,maximum-scale=1,user-scalable=no"> -->
            <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
            <!-- iOS 设备 begin -->
            <meta name="apple-mobile-web-app-title" content="标题">
             <!-- IE -->
             <meta http-equiv="X-UA-Compatible" content="IE=edge">
             <!-- 兼容国产浏览器的高速模式 -->
             <meta name="renderer" content="webkit">
            <title>图形组态浏览</title>
            <link rel="stylesheet" href="/static/ui/common/plugins/bootstrap/css/bootstrap.min.css" />
            <link rel="stylesheet" href="/static/ui/common/plugins/bootstrap-multiselect-master/css/bootstrap-multiselect.css" />
            <link href="/static/ui/common/plugins/modals/alertBox/AlertBox.css" rel="stylesheet">
            <link href="/static/ui/common/plugins/other/ztree/zTreeStyle/zTreeStyle.css"   rel="stylesheet"  type="text/css"/>
            <link href="/static/ui/common/plugins/formElems/newValidator/css/jquery.validator.css"   rel="stylesheet"  type="text/css"/>
            <link rel="stylesheet" href="/static/ui/common/plugins/jquery-colorselect/jquery.minicolors.css" />
            <link href="/static/ui/common/plugins/formElems/time/bootstrap_datetimepicker/css/bootstrap-datetimepicker.css"  rel="stylesheet" type="text/css">
            <link rel="stylesheet" href="/static/ui/modules/common/css/style.css">
            <link rel="stylesheet" href="/static/ui/modules/common/css/style.css">
            <link href="/static/ui/modules/common/css/skin.css" rel="stylesheet">
           <link href="/static/ui/skin/Light/modules/maker/css/config.css" rel="stylesheet">
            <!-- <link data-skin href="${userSkin}/modules/maker/css/config.css" rel="stylesheet"> -->
            <link href="/static/ui/modules/maker/css/maker.css" rel="stylesheet">
            
            <script type="text/javascript" src="/static/ui/common/js/libs/require.js" data-main="/static/ui/modules/maker/js/browser" ></script>
            <script>
                var path="";
                var date=new Date().getTime();
            </script>
            <style>
                html,body{
                    width:100%;
                    height:100%;
                    background-color:#000; 
                    overflow: auto;
                }
                .sign{
                    cursor:default;
                }
                .context{
                    width:100%;
                    height:100%;
                    overflow: hidden;
                    position: absolute;
                }
    
    
                /* 弹出层 */
                .def-model{
                    display:none;
                    position:absolute;
                    top:0;
                    left:0;
                    right:0;
                    bottom:0;
                    z-index: 999;
                }
                .def-model .model-shadow {
                    width: 100%;
                    height: 100%;
                    background: rgba(0,0,0,.4);
                    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#66000000',endColorstr='#66000000');
                }
                .def-model .model-window{
                    position:absolute;
                    top:0;
                    left:0;
                    right:0;
                    bottom:0;
                    width:800px;
                    height:400px;
                    margin:auto;
                    background-color:#fff;
                    border-radius: 5px;
                }
                /*弹框在手机端显示不友好*/
                @media screen and (max-device-830px){
                    .def-model .model-window{
                        position:fixed;
                        margin:10px;
                        width:inherit;
                        height:inherit;
                    }
                }
                .model-head{
                    /* border-top:4px solid #ff8500; */
                    padding:4px 12px;
                    margin:0;
                    border-radius: 5px 5px 0 0;
                    background-color: #0993f2;
                    color: #fff;
                }
                .model-content{
                    height:calc(100% - 28px);
                    padding:0 5px;
                }
                .model-head .clo{
                    float:right;
                    font-size:14px;
                    text-shadow: 0 0 1px #fff;
                    color:#333;
                    font-style: normal;
                    cursor: pointer;
                }
                .model-head .clo:hover{
                    transform: scale(1.1)
                }
                .model-content .model-h{
                    margin:0;
                    height:35px;
                    line-height:35px;
                    color:#333;
                }
                .model-content .model-c{
                    height:calc(100% - 35px);
                }
                #echart_01{
                    width:100%;
                    height:100%
                }
    
            </style>
        </head>
        <body unselectable="on" style="-moz-user-select:none;-webkit-user-select:none;" onselectstart="return false;">
            <div class="context"></div>
            <!-- 点击弹出趋势图框 -->
            <div class="def-model" id="trendCur">
                <div class="model-shadow"></div>    
                <div class="model-window">
                    <p class="model-head">
                        <span>趋势分析</span>
                        <i class="clo">X</i>
                    </p>
                    <div class="model-content">
                        <p class="model-h">
                            <label>
                                <span>开始时间:</span>
                                <input type="text" name="" value="" id="systemtime">
                            </label>
                            <label>
                                <span>结束时间:</span>
                                <input type="text" name="" value="" id="systemtime_end">
                            </label>
                            <label for="">
                                <button type="button" class="but-orange-90 margin-l30" id="search">
                                    <span class="img-search">&nbsp;</span>
                                    <span class="img-text">查询</span>
                                </button>
                            </label>
    
                        </p>
                        <div class="model-c">
                            <div id="echart_01" style=""></div>
                        </div>
                    </div>    
                </div>    
            </div>
        </body>
    </html>
    View Code

    js

    require.config({
        baseUrl:'/static/ui/common/',
        paths:{
            'domReady':'js/functionality/domReady',
            'jquery':'js/libs/jquery-1.11.1.min',
            'jquery.query':'js/libs/jquery.query',
            'bootstrap':'plugins/bootstrap/js/bootstrap.min',
            'minicolors':'plugins/jquery-colorselect/jquery.minicolors.min',
            'multiselect':'plugins/bootstrap-multiselect-master/js/bootstrap-multiselect',
            'ztree.core':'plugins/other/ztree/jquery.ztree.core.min',
            'util':'js/functionality/Util',
            'ztree.excheck':'plugins/other/ztree/jquery.ztree.excheck',
            'alert':'plugins/modals/alertBox/AlertBox',
            'nicescroll':'plugins/other/nicescroll/jquery.nicescroll.min',
            'echarts':'plugins/chart/echarts.min',
            'bootstrap_datetimepicker':'plugins/formElems/time/bootstrap_datetimepicker/js/bootstrap-datetimepicker.min',
            'zhCN':'plugins/formElems/time/bootstrap_datetimepicker/js/bootstrap-datetimepicker.zh-CN',
            'heatmap':'js/libs/heatmap.min',
            'refreshData':'../modules/maker/js/refresh',
            'serverAction':'../modules/maker/js/server'
        },
        shim:{
            'minicolors':{
                deps:['jquery']
            },
            'bootstrap':{
                deps:['jquery']
            },
            'ztree.core':{
                deps:['jquery']
            },
            'multiselect':{
                deps:['jquery']
            },
            'refreshData':{
                deps:['jquery']
            },
            'serverAction':{
                deps:['jquery']
            },
            'jquery.query':{
                deps:['jquery']
            }
            
        }
    });
    require(['domReady','jquery','util','echarts','heatmap','bootstrap','bootstrap_datetimepicker','zhCN','ztree.core','minicolors','alert','nicescroll','multiselect','refreshData','serverAction','jquery.query'],function(domReady,$,util,echarts,h337){
        /**
         * 页面初始加载处理
         */
        domReady(function(){
            initTimeFormate("yyyy-mm-dd");
            initTimeFormate("yyyy-mm-dd","","","end");
            window.ConfigData={
                signs:{},
                pageConfig:{
                    style:"100%;height:100%;"
                }
            }
            window.zIndex=0;
            window.energyData={    }
            
            window.historyData={
                year:{},
                lastYear:{},
                month:{},
                lastMonth:{},
                lastYearMonth:{},
                week:{},
                lastWeek:{},
                day:{},
                lastDay:{},
                hour:{},
                lastHour:{}
            }
            window.interval={};//记录定时器
            loadPage();
            initEvent();
            $(".sign").click(function(){
                var url=$(this).attr("url");
                if(url!=undefined&&url!=""){//有配置跳转
                    if(url.indexOf("http://")!=0&&url.indexOf("https://")!=0){
                        url=path+url;
                    }
                    if($(this).attr("openType")=="self"){//当前页面跳转
                        window.location.href=url;
                    }
                }
            })
        })
        /**
         * 事件
         */
        var clickCode="";//点击text时候的code
        function initEvent(){
            //双击文本框的点击事件
            //判断是手机端还是会web端
            var ua = navigator.userAgent;
            var ipad = ua.match(/(iPad).*OSs([d_]+)/),
            isIphone =!ipad && ua.match(/(iPhonesOS)s([d_]+)/),
            isAndroid = ua.match(/(Android)s+([d.]+)/),
            isMobile = isIphone || isAndroid;
            //判断
            if(isMobile){
                $("body").on("click","[showtype='energyData']",function(){
                    var str=$(this).attr("addpro");
                    if(!str){return}
                    obj=eval("("+str+")");
                    //clickCode=obj[0].code;
                    $('#trendCur').fadeTo(400,1);
                    initTrend(obj);
                })
            }else{
                $("body").on("dblclick","[showtype='energyData']",function(){
                    var str=$(this).attr("addpro");
                    if(!str){return}
                    obj=eval("("+str+")");
                    //clickCode=obj[0].code;
                    $('#trendCur').fadeTo(400,1);
                    initTrend(obj);
                })
            }
    
            $("#trendCur .clo").on("mousedown",function(){return false}).click(function(){
                $(this).closest(".def-model").hide();
                return false;
            })
            //趋势点击查询的事件
            $("#search").off("click").on('click',function(){
                initTrend(clickCode);
            })
            //弹出框的拖动事件(自己写的,没有限制范围)
            $("body").on("mousedown",".model-window .model-head",function(event){
                var ox=event.offsetX,oy=event.offsetY;//鼠标相对于目标元素的左侧和顶部的距离
                var pel=$(this).parent();
                $(document).off("mousemove").on("mousemove",function(e){
                    //等于移动后鼠标的位置-点击前鼠标相对于目标元素的距离
                    pel.css({
                        left:(e.pageX-ox)+"px",
                        top:(e.pageY-oy)+"px",
                        right:"auto",//这个一定要加上,否则会出现首次点击偏差
                        bottom:"auto"
                    })
                })
                $(document).off("mouseup").on("mouseup",function(){
                    $(document).off('mousemove').off('mouseup');
                })
            })
            //张得版本也ok
            /*$("body").on("mousedown",".model-window .model-head",function(event){
                var ox=event.offsetX,
                    oy=event.offsetY,
                    ot=$(this).offset().top,
                    ol=$(this).offset().left,
                    pel=$(this).parent();
                var flag=0;
                var osx=ol;//保存计算后的left;
                var osy=ot;//保存计算后的top;
                pel.fadeTo(60,0.6);
                $(document).off('mousemove').on('mousemove',function(e){
                    var msx=e.pageX,msy=e.pageY;
                    osx=msx-ox;osy=msy-oy;
                    pel.css({left:osx+'px',top:osy+'px',right:'auto',bottom:'auto'});
                });
                $(document).off('mouseup').on('mouseup',function(event){
                    $(document).off('mousemove').off('mouseup');
                    pel.fadeTo('fast',1);
                });
            });*/
        }
        /**
         * 初始化历史曲线的时间
         */
        function initTimeFormate(format1, format2, view, end) {
            format1 = !!format1 ? format1 : "yyyy-mm-dd";
            format2 = !!format2 ? format2 : "yyyy-MM-dd";
            view = !!view ? view : 2;
            var selector = end ? $("#systemtime_end") : $("#systemtime");
            selector.datetimepicker('remove');
            selector.datetimepicker({
                language:"zh",
                format: format1,
                autoclose: true,
                startView: view,
                minView: 2
            }).on("click", function () {
                selector.datetimepicker('show');
            }).off("changeDate").on("changeDate",function(ev){
                var id=$(ev.target).attr("id");
                var time=ev.date.Format("yyyy-MM-dd")
                if(id=="systemtime"){
                    $("#systemtime_end").datetimepicker("setStartDate",time)
                }else{
                    $("#systemtime").datetimepicker("setEndDate",time)
                }
            });
            if(end){
                var _date= new Date().Format(format2);
                //往前面减十天组成的数组
                var sevenDate=getSubSeven(_date,1);
                selector.val(new Date().Format(format2));
                $("#systemtime").val(sevenDate[sevenDate.length-1]);
            }else{
                selector.val(new Date ().Format(format2));
            }
        }
        /**
         * 不足10的数前面加0
         */
        function add0(o){
            if(o<10&&String(o).length==1){
                return "0"+o;
            }else{
                return o;
            }
        }
        /**
         * 初始化曲线
         */
        function initTrend(obj){
            clickCode=obj;
            var dataType=obj.dataKind;
            var type="";
            switch(dataType){
                case "YCProperty":
                    type="yc";
                    break;
                case "KWHProperty":
                    type="ym";
                    break;
                case "YXProperty":
                    type="yx"
                    break;
            }
            //模拟的数据
            var data = [];
            var now = +new Date(2019, 1, 13);
            var oneDay =1000;
            var value = Math.random() * 1000;
            for (var i = 0; i < 100; i++) {
                data.push(randomData());
            }
            function randomData() {
                now = new Date(+now + oneDay);
                value = value + Math.random() * 21 - 10;
                return {
                    name: now.toString(),
                    value: [
                        [now.getFullYear(), now.getMonth() + 1, now.getDate()].join('-')+"T"+[add0(now.getHours()), add0(now.getMinutes()), add0(now.getSeconds())].join(":")+"Z",
                        Math.round(value)
                    ]
                }
            }
            // var testData=[
            //     {"time":"2019-02-13T00:03:11Z","time1":"2019-2-13T00:03:11Z","value":"1000.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"},
            //     {"time":"2019-02-13T00:04:02Z","time1":"2019-2-13T00:04:02Z","value":"200.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"},
            //     {"time":"2019-02-13T00:04:13Z","time1":"2019-2-13T00:04:13Z","value":"2295.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"},
            //     {"time":"2019-02-13T00:05:04Z","time1":"2019-2-13T00:05:04Z","value":"2372.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"},
            //     {"time":"2019-02-13T00:05:13Z","time1":"2019-2-13T00:05:13Z","value":"2372.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"},
            //     {"time":"2019-02-13T00:05:15Z","time1":"2019-2-13T00:05:15Z","value":"2181.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"},
            //     {"time":"2019-02-13T00:05:33Z","time1":"2019-2-13T00:05:33Z","value":"2181.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"},
            //     {"time":"2019-02-13T00:05:53Z","time1":"2019-2-13T00:05:53Z","value":"2181.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"},
            //     {"time":"2019-02-13T00:06:06Z","time1":"2019-2-13T00:06:06Z","value":"2173.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"},
            //     {"time":"2019-02-13T00:06:17Z","time1":"2019-2-13T00:06:17Z","value":"2225.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"}
            // ]
             $.ajax({
                url:'/realTimeData/historyDetailSearch',
                type:"GET",
                datapro:obj,
                data:{
                    valueType: type,
                    startTime: $("#systemtime").val()+" 00:00",
                    endTime: $("#systemtime_end").val()+" 24:00",
                    snames: obj.selectNode,
                },
                dataType:'json',
                success:function(res){
                    var rowData=res.data;
                    if(!rowData){return}
                    initCurve(rowData,obj)
                }
            });
        }
        function initCurve(_data){
            //if(_data.length==0){alert("此时间段无历史数据,请更换时间!")}
            var resultArr=[];
            for(var i=0;i<_data.length;i++){
                var res=_data[i]
                resultArr.push({
                    name:new Date(res.time)+"",
                    value:[res.time,Number(res.value).toFixed(2)]
                })
            }
            initEc("echart_01",{
                title: {
                    text: !!obj.selectName?obj.selectName:'',
                    x:'center'
                },
                tooltip: {
                    trigger: 'axis',
                    formatter: function (params) {
                        params = params[0];
                        var date = new Date(params.name);
                        return   date.getFullYear() +'/' + (date.getMonth() + 1) + '/' +date.getDate()+'  '+date.getHours()+":"+date.getSeconds() +'  ' + params.value[1];
                    },
                    axisPointer: {
                        animation: false
                    }
                },
                xAxis: {
                    type: 'time',
                    splitLine: {
                        show: false
                    }
                },
                yAxis: {
                    type: 'value',
                    //name:"kWh",
                    // boundaryGap:[-4000,'110%'],
                    splitLine: {
                        show: false
                    },
                    max:function(obj){
                        var ma=obj.max;
                        var mi=obj.min;
                        var val=Math.ceil((ma+(ma-mi)/2))
                        return val
                    },
                    min:function(obj){
                        var ma=obj.max;
                        var mi=obj.min;
                        var val=Math.ceil((mi-(ma-mi)/2));
                        if(val<0){
                            val=mi>0?0:val;
                        }
                        return mi==0?0:val
                    }
                },
                grid:{
                    height:'60%'//图表的高度
                },
                dataZoom: [
                    {
                        type: 'slider',//数据滑块
                        start:0,
                        minSpan:8,    //5min
                        // minSpan:16,   //10min
                        // minSpan:24,   //15min
                        // minSpan:50,   //30min
                        dataBackground:{
                            lineStyle:{
                                color:'#95BC2F'
                            },
                            areaStyle:{
                                color:'#95BC2F',
                                opacity:1,
                            }
                        },
                        // fillerColor:'rgba(255,255,255,.6)'
                    },
                    {
                        type:'inside'//使鼠标在图表中时滚轮可用
                    }
                ],
                series: [{
                    name: '模拟数据',
                    type: 'line',
                    showSymbol: false,
                    hoverAnimation: false,
                    data: resultArr
                }]
            })
        }
        function initEc(id,op){
            var color=['#0093F1','#45BF98','#F28D4E','#C1232B','#B5C334','#FCCE10',
            '#E87C25','#27727B','#FE8463','#9BCA63','#FAD860','#F3A43B','#60C0DD',
            '#D7504B','#C6E579','#F4E001','#F0805A','#26C0C0'];
            //var unit=unitList[$('#'+id).prev('div').find('.bar-type dt.cur').attr('unit')];
            var option = {
                color:color,
                tooltip: {
                    trigger: 'axis',
                    axisPointer: {
                        type: 'cross',
                        crossStyle: {
                            color: '#999'
                        }
                    }
                },
                calculable:true,
                toolbox: {
                    right:'10px',
                    zlevel:600,
                    z:600,
                    feature: {
                        dataView: {show: true, readOnly: false},
                        magicType: {show: true, type: ['line', 'bar','stack']},
                        restore: {show: true},
                        saveAsImage: {show: true}
                    }
                },
                grid:{
                    left:'70px',
                    right:'70px',
                    bottom:'60px',
                    //x:'10%',
                    //y2:'13%',//距离最下面的边距
                },
                legend: {
                    data:['bar'],
                },
                calculable:true,
                noDataLoadingOption:{   //没有数据时,
                    effect: "bubble",
                    text:"暂无数据",
                    effectOption:{
                        effect:{
                            n:0
                        }
                    },
                    textStyle:{
                        fontSize:32,
                        fontWeight:'bold'
                    }
                },
                xAxis: [
                    {
                        type: 'category',
                        data:[],
                        axisPointer: {
                            type: 'shadow'
                        }
                    }
                ],
                yAxis: [
                    {
                        type: 'value',
                        //name:unit,
                        name:"千瓦时",
                        axisLabel: {
                            formatter: '{value}'
                        }
                    }
                ],
                series: [{
                    name:'bar',
                    type:'bar',
                    data:[]
                }]
            };
            var myChart = echarts.init(document.getElementById(id));
            myChart.setOption($.extend({},option,op),true);  
            myChart.resize();
        }
    
        function loadPage(){
            if($.query.get("groupName")==""||$.query.get("fileName")==""){
                alert("groupName和fileName参数不能为空");
                return;
            }
            serverData=$.loadConfig($.query.get("groupName"),$.query.get("fileName")+".js");
            $(".context").attr(serverData.pageConfig);
            if(serverData.pageConfig.sizeType=="window"){//适应窗口大小
                window.onresize=function(){
                    var scaleX=$(window).width()/$(".context").width();
                    var scaleY=$(window).height()/$(".context").height();
                    $(".context").css({"transform":"scale("+scaleX+","+scaleY+")","transform-origin":"0 0"});
                }
                window.onresize();
            }else{
                $("html,body").css("overflow","auto");
            }
            var energyCodes={}
            $(serverData.signs).each(function(i,d){
                var sign=$('<div  type="'+d.type+'" id="'+d.type+'_'+new Date().getTime()+'"></div>').appendTo($(".context"));
                if(d.echarts!=undefined){
                    d.echarts=echarts;
                }
                if(d.h337!=undefined){
                    d.h337=h337;
                }
                sign.createSign(d);
    
                if(d.url!=undefined&&d.url!=""){
                    sign.css("cursor","pointer");//设置有url的图元鼠标为pointer
                }
                sign.refresh();
                if(d.energycodes!=undefined){
                    $(JSON.parse(d.energycodes)).each(function(i,e){
                        energyCodes[e.code]=e.name;
                    })
                }
            })
            $(".context .sign").removeAttr("active");//移除选择
            var codeStr="";
            for(var code in energyCodes){
                codeStr+=code+";";
            }
            /*$.loadNewData({codes:codeStr,type:0});//首次获取本页面所关联的所有能耗点的所有类型数据
            setInterval(function(){
                $.loadNewData({codes:codeStr});//每五秒更新一次实时数据
            },5000);*/
            
            $.post('/realTimeData/findWebSocketIpAndPortMS',{},function(data){
                var websocketUrl=data.WebSocketIpAndPort;
                if(websocketUrl==""||websocketUrl==undefined){
                    console.error("服务器未返回ip");
                    return;
                }
                /**websock*/
                /****************使用websoct获取实时数据********************************/
                var websocket = null;
                //判断当前浏览器是否支持WebSocket
                if ('WebSocket' in window) {
                    websocket = new WebSocket(websocketUrl);
                }
                else {
                    alert('当前浏览器 Not support websocket')
                }
                //连接发生错误的回调方法
                websocket.onerror = function () {
                    console.error("WebSocket连接发生错误");
                };
                //连接成功建立的回调方法
                websocket.onopen = function () {
                    socketsend({codes:codeStr,type:0})
                    console.info("WebSocket连接成功");
                }
                //接收到消息的回调方法
                websocket.onmessage = function (event) {
                    if(event.data==""){return}
                    var data=eval("("+event.data+")");
                    console.info(data);
                    $(data.rows).each(function(){
                        var tag=this.sname
                        if(window.energyData[tag]==undefined){
                            window.energyData[tag]={};
                        }
                        for(var code in this){
                            window.energyData[tag][code]=this[code];
                        }
                        //window.energyData[this.code]=this;
                    })
                }
                //连接关闭的回调方法
                websocket.onclose = function () {
                    console.info("WebSocket连接关闭");
                }
                //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
                window.onbeforeunload = function () {
                    closeWebSocket();
                }
                
                
                
                //将消息显示在网页上
                function setMessageInnerHTML(innerHTML) {
                    document.getElementById('message').innerHTML += innerHTML + '<br/>';
                }
                //关闭WebSocket连接
                function closeWebSocket() {
                    websocket.close();
                }
                //发送消息
                function socketsend(obj) {
                    obj.interval=5;
                    var _obj={};
                    console.log("发消息了!");
                    _obj.interval=5;
                    //_obj.codes="yc_1;";
                    //console.log(_obj);
                    websocket.send(JSON.stringify(obj));
                }
    
    
                var historyType={};
                $("[type='graph']").each(function(){
                    var graph=$(this);
                    if(graph.attr("energyCodes")!=undefined){
                        var energyCodes=JSON.parse(graph.attr("energyCodes"));
                        $(energyCodes).each(function(){
                            window.historyData[graph.attr("dataType")][this.code]=this.name;
                        })
                        
                        if(graph.attr("isShowLast")=="true"){
                            var lastCode="last"+graph.attr("dataType").charAt(0).toUpperCase()+graph.attr("dataType").substring(1);
                            window.historyData[lastCode]=window.historyData[graph.attr("dataType")];
                        }
                    }
                })
                var params={};
                for(var type in window.historyData){
                    params[type]="";
                    var typedata=window.historyData[type];
                    for(var code in typedata){
                        params[type]+=code+";"
                    }
                }
                
                var list=$.loadHistoryData(params);
                var data=[]
                while(data.length<60){
                    data.push("");
                }
                for(var type in list){
                    window.historyData[type]={};
                    $(list[type]).each(function(){
                        if(window.historyData[type][this.code]==undefined){
                            window.historyData[type][this.code]=$.extend(true, [], data);
                        }
                        window.historyData[type][this.code]=this.data;
                    })
                }
                $("[type='graph']").each(function(){
                    $(this).refresh();
                })
            })
        }
        /**
         * 传入一个日期的天数,往前面减day天,得到数组
         */
        function getSubSeven(sDate,day){
            var arr=[];
            var sTime=new Date(sDate).getTime();
            var subTime=sTime-(86400000*day)
            for(var i=sTime;i>subTime;i-=86400000){
                arr.push(dateTransform(i));
            }
            return arr;
        }
        function dateTransform(time){
            var _time=new Date(time);
            str=_time.getFullYear()+"-"+add0(_time.getMonth()+1)+"-"+add0(_time.getDate());
            return str;
        }
    });
    
    
    require.config({
        baseUrl:'/static/ui/common/',
        paths:{
            'domReady':'js/functionality/domReady',
            'jquery':'js/libs/jquery-1.11.1.min',
            'jquery.query':'js/libs/jquery.query',
            'bootstrap':'plugins/bootstrap/js/bootstrap.min',
            'minicolors':'plugins/jquery-colorselect/jquery.minicolors.min',
            'multiselect':'plugins/bootstrap-multiselect-master/js/bootstrap-multiselect',
            'ztree.core':'plugins/other/ztree/jquery.ztree.core.min',
            'util':'js/functionality/Util',
            'ztree.excheck':'plugins/other/ztree/jquery.ztree.excheck',
            'alert':'plugins/modals/alertBox/AlertBox',
            'nicescroll':'plugins/other/nicescroll/jquery.nicescroll.min',
            'echarts':'plugins/chart/echarts.min',
            'bootstrap_datetimepicker':'plugins/formElems/time/bootstrap_datetimepicker/js/bootstrap-datetimepicker.min',
            'zhCN':'plugins/formElems/time/bootstrap_datetimepicker/js/bootstrap-datetimepicker.zh-CN',
            'heatmap':'js/libs/heatmap.min',
            'refreshData':'../modules/maker/js/refresh',
            'serverAction':'../modules/maker/js/server'
        },
        shim:{
            'minicolors':{
                deps:['jquery']
            },
            'bootstrap':{
                deps:['jquery']
            },
            'ztree.core':{
                deps:['jquery']
            },
            'multiselect':{
                deps:['jquery']
            },
            'refreshData':{
                deps:['jquery']
            },
            'serverAction':{
                deps:['jquery']
            },
            'jquery.query':{
                deps:['jquery']
            }
            
        }
    });
    require(['domReady','jquery','util','echarts','heatmap','bootstrap','bootstrap_datetimepicker','zhCN','ztree.core','minicolors','alert','nicescroll','multiselect','refreshData','serverAction','jquery.query'],function(domReady,$,util,echarts,h337){
        /**
         * 页面初始加载处理
         */
        domReady(function(){
            initTimeFormate("yyyy-mm-dd");
            initTimeFormate("yyyy-mm-dd","","","end");
            window.ConfigData={
                signs:{},
                pageConfig:{
                    style:"100%;height:100%;"
                }
            }
            window.zIndex=0;
            window.energyData={    }
            
            window.historyData={
                year:{},
                lastYear:{},
                month:{},
                lastMonth:{},
                lastYearMonth:{},
                week:{},
                lastWeek:{},
                day:{},
                lastDay:{},
                hour:{},
                lastHour:{}
            }
            window.interval={};//记录定时器
            loadPage();
            initEvent();
            $(".sign").click(function(){
                var url=$(this).attr("url");
                if(url!=undefined&&url!=""){//有配置跳转
                    if(url.indexOf("http://")!=0&&url.indexOf("https://")!=0){
                        url=path+url;
                    }
                    if($(this).attr("openType")=="self"){//当前页面跳转
                        window.location.href=url;
                    }
                }
            })
        })
        /**
         * 事件
         */
        var clickCode="";//点击text时候的code
        function initEvent(){
            //双击文本框的点击事件
            //判断是手机端还是会web端
            var ua = navigator.userAgent;
            var ipad = ua.match(/(iPad).*OSs([d_]+)/),
            isIphone =!ipad && ua.match(/(iPhonesOS)s([d_]+)/),
            isAndroid = ua.match(/(Android)s+([d.]+)/),
            isMobile = isIphone || isAndroid;
            //判断
            if(isMobile){
                $("body").on("click","[showtype='energyData']",function(){
                    var str=$(this).attr("addpro");
                    if(!str){return}
                    obj=eval("("+str+")");
                    //clickCode=obj[0].code;
                    $('#trendCur').fadeTo(400,1);
                    initTrend(obj);
                })
            }else{
                $("body").on("dblclick","[showtype='energyData']",function(){
                    var str=$(this).attr("addpro");
                    if(!str){return}
                    obj=eval("("+str+")");
                    //clickCode=obj[0].code;
                    $('#trendCur').fadeTo(400,1);
                    initTrend(obj);
                })
            }
    
            $("#trendCur .clo").on("mousedown",function(){return false}).click(function(){
                $(this).closest(".def-model").hide();
                return false;
            })
            //趋势点击查询的事件
            $("#search").off("click").on('click',function(){
                initTrend(clickCode);
            })
            //弹出框的拖动事件(自己写的,没有限制范围)
            $("body").on("mousedown",".model-window .model-head",function(event){
                var ox=event.offsetX,oy=event.offsetY;//鼠标相对于目标元素的左侧和顶部的距离
                var pel=$(this).parent();
                $(document).off("mousemove").on("mousemove",function(e){
                    //等于移动后鼠标的位置-点击前鼠标相对于目标元素的距离
                    pel.css({
                        left:(e.pageX-ox)+"px",
                        top:(e.pageY-oy)+"px",
                        right:"auto",//这个一定要加上,否则会出现首次点击偏差
                        bottom:"auto"
                    })
                })
                $(document).off("mouseup").on("mouseup",function(){
                    $(document).off('mousemove').off('mouseup');
                })
            })
            //张得版本也ok
            /*$("body").on("mousedown",".model-window .model-head",function(event){
                var ox=event.offsetX,
                    oy=event.offsetY,
                    ot=$(this).offset().top,
                    ol=$(this).offset().left,
                    pel=$(this).parent();
                var flag=0;
                var osx=ol;//保存计算后的left;
                var osy=ot;//保存计算后的top;
                pel.fadeTo(60,0.6);
                $(document).off('mousemove').on('mousemove',function(e){
                    var msx=e.pageX,msy=e.pageY;
                    osx=msx-ox;osy=msy-oy;
                    pel.css({left:osx+'px',top:osy+'px',right:'auto',bottom:'auto'});
                });
                $(document).off('mouseup').on('mouseup',function(event){
                    $(document).off('mousemove').off('mouseup');
                    pel.fadeTo('fast',1);
                });
            });*/
        }
        /**
         * 初始化历史曲线的时间
         */
        function initTimeFormate(format1, format2, view, end) {
            format1 = !!format1 ? format1 : "yyyy-mm-dd";
            format2 = !!format2 ? format2 : "yyyy-MM-dd";
            view = !!view ? view : 2;
            var selector = end ? $("#systemtime_end") : $("#systemtime");
            selector.datetimepicker('remove');
            selector.datetimepicker({
                language:"zh",
                format: format1,
                autoclose: true,
                startView: view,
                minView: 2
            }).on("click", function () {
                selector.datetimepicker('show');
            }).off("changeDate").on("changeDate",function(ev){
                var id=$(ev.target).attr("id");
                var time=ev.date.Format("yyyy-MM-dd")
                if(id=="systemtime"){
                    $("#systemtime_end").datetimepicker("setStartDate",time)
                }else{
                    $("#systemtime").datetimepicker("setEndDate",time)
                }
            });
            if(end){
                var _date= new Date().Format(format2);
                //往前面减十天组成的数组
                var sevenDate=getSubSeven(_date,1);
                selector.val(new Date().Format(format2));
                $("#systemtime").val(sevenDate[sevenDate.length-1]);
            }else{
                selector.val(new Date ().Format(format2));
            }
        }
        /**
         * 不足10的数前面加0
         */
        function add0(o){
            if(o<10&&String(o).length==1){
                return "0"+o;
            }else{
                return o;
            }
        }
        /**
         * 初始化曲线
         */
        function initTrend(obj){
            clickCode=obj;
            var dataType=obj.dataKind;
            var type="";
            switch(dataType){
                case "YCProperty":
                    type="yc";
                    break;
                case "KWHProperty":
                    type="ym";
                    break;
                case "YXProperty":
                    type="yx"
                    break;
            }
            //模拟的数据
            var data = [];
            var now = +new Date(2019, 1, 13);
            var oneDay =1000;
            var value = Math.random() * 1000;
            for (var i = 0; i < 100; i++) {
                data.push(randomData());
            }
            function randomData() {
                now = new Date(+now + oneDay);
                value = value + Math.random() * 21 - 10;
                return {
                    name: now.toString(),
                    value: [
                        [now.getFullYear(), now.getMonth() + 1, now.getDate()].join('-')+"T"+[add0(now.getHours()), add0(now.getMinutes()), add0(now.getSeconds())].join(":")+"Z",
                        Math.round(value)
                    ]
                }
            }
            // var testData=[
            //     {"time":"2019-02-13T00:03:11Z","time1":"2019-2-13T00:03:11Z","value":"1000.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"},
            //     {"time":"2019-02-13T00:04:02Z","time1":"2019-2-13T00:04:02Z","value":"200.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"},
            //     {"time":"2019-02-13T00:04:13Z","time1":"2019-2-13T00:04:13Z","value":"2295.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"},
            //     {"time":"2019-02-13T00:05:04Z","time1":"2019-2-13T00:05:04Z","value":"2372.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"},
            //     {"time":"2019-02-13T00:05:13Z","time1":"2019-2-13T00:05:13Z","value":"2372.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"},
            //     {"time":"2019-02-13T00:05:15Z","time1":"2019-2-13T00:05:15Z","value":"2181.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"},
            //     {"time":"2019-02-13T00:05:33Z","time1":"2019-2-13T00:05:33Z","value":"2181.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"},
            //     {"time":"2019-02-13T00:05:53Z","time1":"2019-2-13T00:05:53Z","value":"2181.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"},
            //     {"time":"2019-02-13T00:06:06Z","time1":"2019-2-13T00:06:06Z","value":"2173.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"},
            //     {"time":"2019-02-13T00:06:17Z","time1":"2019-2-13T00:06:17Z","value":"2225.2391000000002","status":"1.0","sname":"KJ_GKDZ_P","score":"192.0"}
            // ]
             $.ajax({
                url:'/realTimeData/historyDetailSearch',
                type:"GET",
                datapro:obj,
                data:{
                    valueType: type,
                    startTime: $("#systemtime").val()+" 00:00",
                    endTime: $("#systemtime_end").val()+" 24:00",
                    snames: obj.selectNode,
                },
                dataType:'json',
                success:function(res){
                    var rowData=res.data;
                    if(!rowData){return}
                    initCurve(rowData,obj)
                }
            });
        }
        function initCurve(_data){
            //if(_data.length==0){alert("此时间段无历史数据,请更换时间!")}
            var resultArr=[];
            for(var i=0;i<_data.length;i++){
                var res=_data[i]
                resultArr.push({
                    name:new Date(res.time)+"",
                    value:[res.time,Number(res.value).toFixed(2)]
                })
            }
            initEc("echart_01",{
                title: {
                    text: !!obj.selectName?obj.selectName:'',
                    x:'center'
                },
                tooltip: {
                    trigger: 'axis',
                    formatter: function (params) {
                        params = params[0];
                        var date = new Date(params.name);
                        return   date.getFullYear() +'/' + (date.getMonth() + 1) + '/' +date.getDate()+'  '+date.getHours()+":"+date.getSeconds() +'  ' + params.value[1];
                    },
                    axisPointer: {
                        animation: false
                    }
                },
                xAxis: {
                    type: 'time',
                    splitLine: {
                        show: false
                    }
                },
                yAxis: {
                    type: 'value',
                    //name:"kWh",
                    // boundaryGap:[-4000,'110%'],
                    splitLine: {
                        show: false
                    },
                    max:function(obj){
                        var ma=obj.max;
                        var mi=obj.min;
                        var val=Math.ceil((ma+(ma-mi)/2))
                        return val
                    },
                    min:function(obj){
                        var ma=obj.max;
                        var mi=obj.min;
                        var val=Math.ceil((mi-(ma-mi)/2));
                        if(val<0){
                            val=mi>0?0:val;
                        }
                        return mi==0?0:val
                    }
                },
                grid:{
                    height:'60%'//图表的高度
                },
                dataZoom: [
                    {
                        type: 'slider',//数据滑块
                        start:0,
                        minSpan:8,    //5min
                        // minSpan:16,   //10min
                        // minSpan:24,   //15min
                        // minSpan:50,   //30min
                        dataBackground:{
                            lineStyle:{
                                color:'#95BC2F'
                            },
                            areaStyle:{
                                color:'#95BC2F',
                                opacity:1,
                            }
                        },
                        // fillerColor:'rgba(255,255,255,.6)'
                    },
                    {
                        type:'inside'//使鼠标在图表中时滚轮可用
                    }
                ],
                series: [{
                    name: '模拟数据',
                    type: 'line',
                    showSymbol: false,
                    hoverAnimation: false,
                    data: resultArr
                }]
            })
        }
        function initEc(id,op){
            var color=['#0093F1','#45BF98','#F28D4E','#C1232B','#B5C334','#FCCE10',
            '#E87C25','#27727B','#FE8463','#9BCA63','#FAD860','#F3A43B','#60C0DD',
            '#D7504B','#C6E579','#F4E001','#F0805A','#26C0C0'];
            //var unit=unitList[$('#'+id).prev('div').find('.bar-type dt.cur').attr('unit')];
            var option = {
                color:color,
                tooltip: {
                    trigger: 'axis',
                    axisPointer: {
                        type: 'cross',
                        crossStyle: {
                            color: '#999'
                        }
                    }
                },
                calculable:true,
                toolbox: {
                    right:'10px',
                    zlevel:600,
                    z:600,
                    feature: {
                        dataView: {show: true, readOnly: false},
                        magicType: {show: true, type: ['line', 'bar','stack']},
                        restore: {show: true},
                        saveAsImage: {show: true}
                    }
                },
                grid:{
                    left:'70px',
                    right:'70px',
                    bottom:'60px',
                    //x:'10%',
                    //y2:'13%',//距离最下面的边距
                },
                legend: {
                    data:['bar'],
                },
                calculable:true,
                noDataLoadingOption:{   //没有数据时,
                    effect: "bubble",
                    text:"暂无数据",
                    effectOption:{
                        effect:{
                            n:0
                        }
                    },
                    textStyle:{
                        fontSize:32,
                        fontWeight:'bold'
                    }
                },
                xAxis: [
                    {
                        type: 'category',
                        data:[],
                        axisPointer: {
                            type: 'shadow'
                        }
                    }
                ],
                yAxis: [
                    {
                        type: 'value',
                        //name:unit,
                        name:"千瓦时",
                        axisLabel: {
                            formatter: '{value}'
                        }
                    }
                ],
                series: [{
                    name:'bar',
                    type:'bar',
                    data:[]
                }]
            };
            var myChart = echarts.init(document.getElementById(id));
            myChart.setOption($.extend({},option,op),true);  
            myChart.resize();
        }
    
        function loadPage(){
            if($.query.get("groupName")==""||$.query.get("fileName")==""){
                alert("groupName和fileName参数不能为空");
                return;
            }
            serverData=$.loadConfig($.query.get("groupName"),$.query.get("fileName")+".js");
            $(".context").attr(serverData.pageConfig);
            if(serverData.pageConfig.sizeType=="window"){//适应窗口大小
                window.onresize=function(){
                    var scaleX=$(window).width()/$(".context").width();
                    var scaleY=$(window).height()/$(".context").height();
                    $(".context").css({"transform":"scale("+scaleX+","+scaleY+")","transform-origin":"0 0"});
                }
                window.onresize();
            }else{
                $("html,body").css("overflow","auto");
            }
            var energyCodes={}
            $(serverData.signs).each(function(i,d){
                var sign=$('<div  type="'+d.type+'" id="'+d.type+'_'+new Date().getTime()+'"></div>').appendTo($(".context"));
                if(d.echarts!=undefined){
                    d.echarts=echarts;
                }
                if(d.h337!=undefined){
                    d.h337=h337;
                }
                sign.createSign(d);
    
                if(d.url!=undefined&&d.url!=""){
                    sign.css("cursor","pointer");//设置有url的图元鼠标为pointer
                }
                sign.refresh();
                if(d.energycodes!=undefined){
                    $(JSON.parse(d.energycodes)).each(function(i,e){
                        energyCodes[e.code]=e.name;
                    })
                }
            })
            $(".context .sign").removeAttr("active");//移除选择
            var codeStr="";
            for(var code in energyCodes){
                codeStr+=code+";";
            }
            /*$.loadNewData({codes:codeStr,type:0});//首次获取本页面所关联的所有能耗点的所有类型数据
            setInterval(function(){
                $.loadNewData({codes:codeStr});//每五秒更新一次实时数据
            },5000);*/
            
            $.post('/realTimeData/findWebSocketIpAndPortMS',{},function(data){
                var websocketUrl=data.WebSocketIpAndPort;
                if(websocketUrl==""||websocketUrl==undefined){
                    console.error("服务器未返回ip");
                    return;
                }
                /**websock*/
                /****************使用websoct获取实时数据********************************/
                var websocket = null;
                //判断当前浏览器是否支持WebSocket
                if ('WebSocket' in window) {
                    websocket = new WebSocket(websocketUrl);
                }
                else {
                    alert('当前浏览器 Not support websocket')
                }
                //连接发生错误的回调方法
                websocket.onerror = function () {
                    console.error("WebSocket连接发生错误");
                };
                //连接成功建立的回调方法
                websocket.onopen = function () {
                    socketsend({codes:codeStr,type:0})
                    console.info("WebSocket连接成功");
                }
                //接收到消息的回调方法
                websocket.onmessage = function (event) {
                    if(event.data==""){return}
                    var data=eval("("+event.data+")");
                    console.info(data);
                    $(data.rows).each(function(){
                        var tag=this.sname
                        if(window.energyData[tag]==undefined){
                            window.energyData[tag]={};
                        }
                        for(var code in this){
                            window.energyData[tag][code]=this[code];
                        }
                        //window.energyData[this.code]=this;
                    })
                }
                //连接关闭的回调方法
                websocket.onclose = function () {
                    console.info("WebSocket连接关闭");
                }
                //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
                window.onbeforeunload = function () {
                    closeWebSocket();
                }
                
                
                
                //将消息显示在网页上
                function setMessageInnerHTML(innerHTML) {
                    document.getElementById('message').innerHTML += innerHTML + '<br/>';
                }
                //关闭WebSocket连接
                function closeWebSocket() {
                    websocket.close();
                }
                //发送消息
                function socketsend(obj) {
                    obj.interval=5;
                    var _obj={};
                    console.log("发消息了!");
                    _obj.interval=5;
                    //_obj.codes="yc_1;";
                    //console.log(_obj);
                    websocket.send(JSON.stringify(obj));
                }
    
    
                var historyType={};
                $("[type='graph']").each(function(){
                    var graph=$(this);
                    if(graph.attr("energyCodes")!=undefined){
                        var energyCodes=JSON.parse(graph.attr("energyCodes"));
                        $(energyCodes).each(function(){
                            window.historyData[graph.attr("dataType")][this.code]=this.name;
                        })
                        
                        if(graph.attr("isShowLast")=="true"){
                            var lastCode="last"+graph.attr("dataType").charAt(0).toUpperCase()+graph.attr("dataType").substring(1);
                            window.historyData[lastCode]=window.historyData[graph.attr("dataType")];
                        }
                    }
                })
                var params={};
                for(var type in window.historyData){
                    params[type]="";
                    var typedata=window.historyData[type];
                    for(var code in typedata){
                        params[type]+=code+";"
                    }
                }
                
                var list=$.loadHistoryData(params);
                var data=[]
                while(data.length<60){
                    data.push("");
                }
                for(var type in list){
                    window.historyData[type]={};
                    $(list[type]).each(function(){
                        if(window.historyData[type][this.code]==undefined){
                            window.historyData[type][this.code]=$.extend(true, [], data);
                        }
                        window.historyData[type][this.code]=this.data;
                    })
                }
                $("[type='graph']").each(function(){
                    $(this).refresh();
                })
            })
        }
        /**
         * 传入一个日期的天数,往前面减day天,得到数组
         */
        function getSubSeven(sDate,day){
            var arr=[];
            var sTime=new Date(sDate).getTime();
            var subTime=sTime-(86400000*day)
            for(var i=sTime;i>subTime;i-=86400000){
                arr.push(dateTransform(i));
            }
            return arr;
        }
        function dateTransform(time){
            var _time=new Date(time);
            str=_time.getFullYear()+"-"+add0(_time.getMonth()+1)+"-"+add0(_time.getDate());
            return str;
        }
    });
    View Code

    延生:以上是时间轴曲线只有一条,如果有多条,该如何显示?

    办法:如果有多条,那么就跟以前的曲线一样,添加series,添加legend即可,但是会有一个问题,默认鼠标放上去的时候只能显示一个线的值,需要修改toptips

    修改如下:

        tooltip: {
            trigger: 'axis',
            formatter: function (params) {
                console.log(params);
                
                var str="";
                for(var i=0;i<params.length;i++){
                    var _params = params[i];
                     var date = new Date(_params.name);
                    str+=_params.seriesName+'&nbsp;&nbsp;'+date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear() + ' : ' + _params.value[1]+"<br>";
                }
                console.log(str);
                return str
            },
            axisPointer: {
                animation: false
            }
        },


    如果y轴的数据最大值和最小值相差太大 会导致图表显示不好看,如下图(2020年3月29)


    解决办法:
    可以尝试使用将y轴原本是value的改成如下的
      type: 'log',
  • 相关阅读:
    base 镜像
    最小的镜像
    Docker 组件如何协作?- 每天5分钟玩转容器技术(8)
    Docker 架构详解
    容器 What, Why, How
    【视频或者图文】运行第一个容器
    运行第一个容器
    [原]关于helios自定义面板简述
    [osg]osg背景图设置
    [qt]qstring和string中文支持转换问题
  • 原文地址:https://www.cnblogs.com/pengfei25/p/10472348.html
Copyright © 2020-2023  润新知