树插件

js

/*!
 * jQuery ztreeSelect 1.00(用requere.js方式引入)
 */

(function (factory){
    if (typeof define === 'function' && define.amd){
        define(['jquery','ztree.core','ztree.excheck'],factory);
    }else if(typeof  exports === 'object'){
          module.exports = factory;
    }else{
        factory(jQuery);
    }
}(function($){
    $.fn.selZtree = function(params){
        var curObj = $(this);
         if($.type(params) != 'object'){
             return;
         }else{
             if(curObj.length > 1){
                 curObj.each(function(){
                     $(this).selZtree(params);//处理循环建立树
                 });
             }else{
                 params.selector = '#'+curObj[0].id;
                 curObj.data('treeData',new selZtreePro(params,curObj));
             }
         }
    };
    /**
     * 下拉选择树的构造函数
     * @param params 传递的参数
     */
    function selZtreePro(params,curObj){
        //default params
         this.defaultParams ={
             complete:function(){},
             async:false,
             checkMore:false,
             dataParams:{},
             selector:curObj.selector,
             url:''
         };
        this.ztreeObj = {};
        //当前对象
        this.curObj = curObj;
        curObj.siblings('.ztreeInput').remove();
        this.formObj =  curObj.after("<input  class='ztreeForm ztreeInput' readonly='readonly'/>").next();//建立input节点
        //添加展示树的div
        this.treeObj = this.formObj.after("<div><ul class='ztree' id="+"ztree"+(new Date().getTime())+" style='background:#fff;margin:0px;margin-top:2px;padding:5px;border-radius: 5px;-moz-border-radius: 5px;-webkit-border-radius: 5px;'></ul></div>").next().find('ul');
        //设置下拉框中树的位置
        this.setTreePos();
        //初始化树
        this.initTree(params);
    }
    //区域树原型,实现方式继承
    selZtreePro.prototype = {
        setting:{
             data:{
                simpleData: {
                    enable: true
                }
             },
             async: {
                enable: false,
                url:"",
                autoParam:["id", "name=n", "level=lv"],
                otherParam:{"otherParam":"zTreeAsyncTest"},
                dataFilter: function(){}
             }
         },
         zNodes:[],
         initTree:function(params){//初始化树
             var that = this;
             $.extend(this.defaultParams,params);
             that.getData(function(data){
                 that.initParams(data);
                 that.buildTree(data);
                 that.showTree();
                 that.clickOtherArea();
                 that.processValue();
                 that.selectNode();
                 that.change();
                 that.defaultParams.complete(that.ztreeObj,that);
             });

         },
         /**
          * 初始化页面输入框参数
          * @param data 后台区域数据数组
          */
         initParams:function(data){
             var eleObj = this.defaultParams.initValue ,id='';
             var name = '';
             if( eleObj != null){
                 for(var i = 0,ele;ele = eleObj[i];i++){
                     id += ele['id']+',';
                     name += ele.name+',';
                 }
             }else{
                 id = data[0].id;
                name = data[0].name;
                this.defaultParams.initValue = data[0];
             }
            
             //id = id.substr(0,id.length-1);
             name = name.replace(/,$/,'');
             this.setValue(id,name);
            // this.setValue(eleObj['id'],eleObj['name']);
             /*if (this.zNodes.length > 0){
                 return;
             }*/
             for(var i = 0,ele;ele = data[i];i++) {
                 ele.icon = path +'/'+ ele.icon;
                 this.zNodes.push(ele);
             }
         },
         //更新节点信息,主要有名字,图标
        updateNodes:function(nodes){
             
            for(var i = 0,ele;ele = nodes[i];i++){
                var node = this.ztreeObj.getNodeByParam("id",parseInt(ele['id']),null);
                try{
                     ele.name &&  (node.name = ele.name);
                     ele.icon &&  (node.icon = ele.icon);
                     ele.iconSkin &&  (node.iconSkin = ele.iconSkin);
                }catch(e){};
                this.ztreeObj.updateNode(node);
            }
        },
        //点击click触发事件
         processValue:function(){
             var that = this;
            /* this.ztreeObj.setting.callback.onMouseDown = function(event){
                 var node = that.ztreeObj.getSelectedNodes();
                 if( node.length > 1 && !event.ctrlKey){
                     that.treeObj.hide();
                     return false;
                 }else{
                     return true;
                 }
             };*/
            this.ztreeObj.setting.callback.onClick = function(event){
                var id='',name='';
                var callback = that.defaultParams.onclick;
                var node = that.ztreeObj.getSelectedNodes();

                for(var i = 0,ele;ele = node[i];i++){
                    id += ele['id']+',';
                    name += ele.name+',';
                }
                id = id.substr(0,id.length-1);
                name = name.replace(/,$/,'');
                that.setValue(id,name);
                !event.ctrlKey && that.treeObj.hide() && that.treeObj.parent().hide();
                callback  && callback();//click事件回调
            };
        },
        //选中节点
        selectNode:function(selectArr){
            var initObj = selectArr || this.defaultParams.initValue;
            
            for(var i = 0,ele;ele = initObj[i];i++){                
                var node = this.ztreeObj.getNodeByParam("id",parseInt(ele['id']),null);
                if(node){
                     this.ztreeObj.selectNode(node,false);                   
                     this.setValue(node.id,node.name);
                }
               
            }
        },
        //设置input值
        setValue:function(id,name){
            var obj = this.curObj;
            var formObj = this.formObj;
            obj.val('').text('');
            formObj.val('').text('');
            obj.val(id).text(name);
            formObj.val(name).text(id);
            if(this.treeObj.parent(".slimScroll")){
                this.treeObj.parent(".slimScroll").hide();
                this.treeObj.parent(".slimScroll").getNiceScroll().hide();
            }
        },
        //onchange事件
        change:function(){
            var oldAreaName = "";
            var that = this;
            var callback = that.defaultParams.onchange;
            // 获得焦点时,启动定时器
            this.treeObj.mouseenter(function(){
                oldAreaName = that.formObj.val();         
            });
            this.treeObj.mouseout(function(){
                     if(that.formObj.val() != oldAreaName)
                  {               
                         callback && callback();
                  }       
            }); 
        },
        //得到后台区域信息
         getData:function(callback){
             $.post(this.defaultParams.url,this.defaultParams.dataParams,function(dataArr){
                 if (callback != null){
                     callback(dataArr);
                 }
            });
         },
         //建立树
        buildTree:function(datas){
            this.ztreeObj = $.fn.zTree.init(this.treeObj, this.setting,datas);
            var nodes = this.ztreeObj.getNodes();
            this.setTreePos();
            this.treeObj.hide();
            if(this.treeObj.parent(".slimScroll")){
                this.treeObj.parent(".slimScroll").hide();
                this.treeObj.parent(".slimScroll").getNiceScroll().hide();
            }
        },
        // to show tree
        showTree:function(){
            var that = this;
            this.formObj.off('focus').on('focus',function(){
                that.formObj.next().find('.ztree').hide();
                that.setTreePos();
                if(that.treeObj.parent(".slimScroll")){
                    that.treeObj.parent(".slimScroll").show();
                    that.treeObj.parent(".slimScroll").getNiceScroll().show();
                }
                that.treeObj.show();
                $(that.treeObj.parent()).niceScroll({
                    cursorcolor: "#00aea2",//滚动条颜色
                    cursor "5px", //滚动条的宽度
                    cursorborder: "0", // 滚动条边框css定义
                    cursorborderradius: "5px",//以像素为滚动条边界半径
                    autohidemode: false, // 隐藏滚动条的方式 
                    railpadding: { top: 0, right: 0, left: 0, bottom: 0 }, // 设置轨道的内间距
                    background: "", // 轨道的背景颜色
                    horizrailenabled: true, // nicescroll可以管理水平滚动
                    oneaxismousemode: "auto", // 当只有水平滚动时可以用鼠标滚轮来滚动,如果设为false则不支持水平滚动,如果设为auto支持双轴滚动
                    zindex: 250,
                    spacebarenabled: false // 当按下空格时使页面向下滚动
                });
                $(that.treeObj.parent()).getNiceScroll().resize();
            });
            //util.setSlimScroll();
        },
        clickOtherArea:function(){
            var that = this;
            $(document).on('click',function(event){

                if(that.isCheck(event)){
                     return;
                }else{
                     that.treeObj.hide();
                     if(that.treeObj.parent(".slimScroll")){
                         that.treeObj.parent(".slimScroll").hide();
                         that.treeObj.parent(".slimScroll").getNiceScroll().hide();
                     }
                }
            });
        },
        // to judge tree in div
        isCheck:function(event){
            var obj = $(event.target);
            if( obj.is('.ztree,.ztreeForm,.ztree *')||event.target == this.curObj[0]){
                return true;
            }else{
                return false;
            }
        },
        //to set tree-div height and positon
        setTreePos:function(){
             
            this.treeObj.parent().hide();
            this.treeObj.parent().css({
                'z-index':10,
                position:'absolute',
                left:this.formObj.position().left,
                top:this.formObj.position().top + this.formObj.height() + 2,
                140,
                height:200,
                'box-shadow':'0 2px 6px #999',
                'border-radius': '5px',
                background:"#FFF",
                
              /*  this.formObj.width() + 2*/
            });
            this.treeObj.parent().addClass("slimScroll");
            //util.setSlimScroll();
            
        }
    };
}));

css

/*-------------------------------------
zTree Style

version:    3.5.19
author:        Hunter.z
email:        hunter.z@263.net
website:    http://code.google.com/p/jquerytree/

-------------------------------------*/
.areaTreeStyle{
    display: inline;
    width: 150px;
}
.treeShow{
    border: 1px solid #c5c5c5; 
    -webkit-border-radius:3px; 
    -moz-border-radius:3px; 
    -o-border-radius:3px; 
    -ms-border-radius:3px; 
    border-radius:3px;
    height: 20px;
    width:158px;
    border:1px solid #BFBFBF;
}
.treediv{
    display:none;
    position:absolute;
    overflow-y:auto;
    width:158px;
    line-height:0px;
    height:200px;
    padding-top:4px;
    background:#fff;
    color:#fff;
    border:1px solid #cccccc
}
.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif}
.ztree {margin:0; padding:5px; color:#333; box-sizing:border-box;}
.ztree li{padding:0; margin:0; list-style:none; line-height:14px; text-align:left; white-space:nowrap; outline:0}
.ztree li ul{ margin:0; padding:0 0 0 18px}
.ztree li ul.line{ background:url(./img/line_conn.gif) 0 0 repeat-y;}

.ztree li a {padding:0; margin:0; cursor:pointer; height:17px; color:#333; background-color: transparent;
    text-decoration:none; vertical-align:top; display: inline-block}
.ztree li a:hover {text-decoration:none}
.ztree li a.curSelectedNode {padding-top:0px; background-color:#0993f2; color:#fff; height:18px; text-decoration: none; }
.ztree li a.curSelectedNode span{color:#fff !important;}
.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#FFE6B0; color:black; height:18px; border:1px #FFB951 solid; opacity:0.8;}
.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#316AC5; color:white; height:18px; border:1px #316AC5 solid;
    opacity:0.8; filter:alpha(opacity=80)}
.ztree li a.tmpTargetNode_prev {}
.ztree li a.tmpTargetNode_next {}
.ztree li a input.rename {height:14px; width:80px; padding:0; margin:0;
    font-size:12px; border:1px #7EC4CC solid; *border:0px}
.ztree li span {line-height:18px; margin-right:2px; padding-bottom:2px; display: inline-block;  white-space:nowrap;}
.ztree li span.button {
    line-height:0; margin:0; width:17px; height:17px; display: inline-block; vertical-align:middle;
    border:0 none; cursor: pointer;outline:none;
    background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;
    background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif");
}
.ztree li .curSelectedNode span.button {
    background-image:url("./img/zTreeStandard_cur.png");
}

.ztree li span.button.chk {width:13px; height:13px; margin:0 3px 0 0; cursor: auto}
.ztree li span.button.chk.checkbox_false_full {background-position:0 0}
.ztree li span.button.chk.checkbox_false_full_focus {background-position:0 -14px}
.ztree li span.button.chk.checkbox_false_part {background-position:0 -28px}
.ztree li span.button.chk.checkbox_false_part_focus {background-position:0 -42px}
.ztree li span.button.chk.checkbox_false_disable {background-position:0 -56px}
.ztree li span.button.chk.checkbox_true_full {background-position:-14px 0}
.ztree li span.button.chk.checkbox_true_full_focus {background-position:-14px -14px}
.ztree li span.button.chk.checkbox_true_part {background-position:-14px -28px}
.ztree li span.button.chk.checkbox_true_part_focus {background-position:-14px -42px}
.ztree li span.button.chk.checkbox_true_disable {background-position:-14px -56px}
.ztree li span.button.chk.radio_false_full {background-position:-28px 0}
.ztree li span.button.chk.radio_false_full_focus {background-position:-28px -14px}
.ztree li span.button.chk.radio_false_part {background-position:-28px -28px}
.ztree li span.button.chk.radio_false_part_focus {background-position:-28px -42px}
.ztree li span.button.chk.radio_false_disable {background-position:-28px -56px}
.ztree li span.button.chk.radio_true_full {background-position:-42px 0}
.ztree li span.button.chk.radio_true_full_focus {background-position:-42px -14px}
.ztree li span.button.chk.radio_true_part {background-position:-42px -28px}
.ztree li span.button.chk.radio_true_part_focus {background-position:-42px -42px}
.ztree li span.button.chk.radio_true_disable {background-position:-42px -56px}

.ztree li span.button.switch {width:18px; height:18px}
/* .ztree li span.button.root_open{background-position:-92px -54px}
.ztree li span.button.root_close{background-position:-74px -54px}
.ztree li span.button.roots_open{background-position:-92px 0}
.ztree li span.button.roots_close{background-position:-74px 0}
.ztree li span.button.center_open{background-position:-92px -18px}
.ztree li span.button.center_close{background-position:-74px -18px}
.ztree li span.button.bottom_open{background-position:-92px -36px}
.ztree li span.button.bottom_close{background-position:-74px -36px} */

 .ztree li span.button.root_open{background:url("./img/open.png") no-repeat center center;}
.ztree li span.button.root_close{background:url("./img/close.png") no-repeat center center;}
.ztree li span.button.roots_open{background:url("./img/open.png") no-repeat center center;}
.ztree li span.button.roots_close{background:url("./img/close.png") no-repeat center center;}
.ztree li span.button.center_open{background:url("./img/open.png") no-repeat center center;}
.ztree li span.button.center_close{background:url("./img/close.png") no-repeat center center;}
.ztree li span.button.bottom_open{background:url("./img/open.png") no-repeat center center;}
.ztree li span.button.bottom_close{background:url("./img/close.png") no-repeat center center;} 
/*light*/
/* .light .ztree li span.button.bottom_open{background-image:url("./img/open_blue.png");}
.light .ztree li span.button.bottom_close{background-image:url("./img/close_blue.png");}
.light .ztree li span.button.root_open{background-image:url("./img/open_blue.png");}
.light .ztree li span.button.root_close{background-image:url("./img/close_blue.png");}
.light .ztree li span.button.roots_open{background-image:url("./img/open_blue.png");}
.light .ztree li span.button.roots_close{background-image:url("./img/close_blue.png");}
.light .ztree li span.button.center_open{background-image:url("./img/open_blue.png");}
.light .ztree li span.button.center_close{background-image:url("./img/close_blue.png");}  */
/*dark*/
/* .dark .ztree li span.button.bottom_open{background-image:url("./img/open_blue.png");}
.dark .ztree li span.button.bottom_close{background-image:url("./img/close_blue.png");}
.dark .ztree li span.button.root_open{background-image:url("./img/open_blue.png");}
.dark .ztree li span.button.root_close{background-image:url("./img/close_blue.png");}
.dark .ztree li span.button.roots_open{background-image:url("./img/open_blue.png");}
.dark .ztree li span.button.roots_close{background-image:url("./img/close_blue.png");}
.dark .ztree li span.button.center_open{background-image:url("./img/open_blue.png");}
.dark .ztree li span.button.center_close{background-image:url("./img/close_blue.png");}  */

.ztree li span.button.noline_open{background-position:-92px -72px}
.ztree li span.button.noline_close{background-position:-74px -72px}
.ztree li span.button.root_docu{ background:none;}
.ztree li span.button.roots_docu{background-position:-56px 0}
.ztree li span.button.center_docu{background-position:-56px -18px}
.ztree li span.button.bottom_docu{background-position:-56px -36px}
.ztree li span.button.noline_docu{ background:none;}

.ztree li span.button.ico_open{margin-right:2px; background-position:-110px -16px; vertical-align:top; *vertical-align:middle}
.ztree li span.button.ico_close{margin-right:2px; background-position:-110px 0; vertical-align:top; *vertical-align:middle}
.ztree li span.button.ico_docu{margin-right:2px; background-position:-110px -32px; vertical-align:top; *vertical-align:middle}
.ztree li span.button.edit {margin-right:2px; background-position:-110px -48px; vertical-align:top; *vertical-align:middle}
.ztree li span.button.remove {margin-right:2px; background-position:-110px -64px; vertical-align:top; *vertical-align:middle}

.ztree li span.button.ico_loading{margin:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}

ul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)}

span.tmpzTreeMove_arrow {width:18px; height:18px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute;
    background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;
    background-position:-110px -80px; background-image:url("./img/zTreeStandard.png"); *background-image:url("./img/zTreeStandard.gif")}

ul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)}
.zTreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute}
.ztree li{
    display: block;
}

.ztreeInput{
    margin: 0;
    padding:0 18px 0 10px;
    width: 140px;
    height: 26px;
    line-height: 26px;
    color: #666666;
    vertical-align: middle;
    border-radius: 5px;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    position: relative;
    border: 1px solid rgb(169, 169, 169);
    background: #fff url(img/icon.png) no-repeat right;
    box-sizing: border-box;
}
.ztreeInput:focus{
    transition:border linear .2s,box-shadow linear .5s;
    -moz-transition:border linear .2s,-moz-box-shadow linear .5s;
    -webkit-transition:border linear .2s,-webkit-box-shadow linear .5s;
    outline:none;
    border-color:#0095ff;
    box-shadow:none;
    -moz-box-shadow:none;
    -webkit-box-shadow:none;
}
/* .ztree span{
    color:#fff;
} */
/* level style*/
/*.ztree li span.button.level0 {
    display:none;
}
.ztree li ul.level0 {
    padding:0;
    background:none;
}*/
View Code

调用 js

$('#areaCodeSelect').selZtree({
    url:'/sys/companyInfo/findAllcomInfo',
    dataParams:null,
    initValue:null,
    onchange:function(){
        image_path=ztreeObj.getNodeByParam('id',$('#areaCodeSelect').val()).imagePath.split(';');
    },
    onclick:function(selnode){
        //触发选中后让框隐藏
        setTimeout(function () {
            $('.ztreeInput').blur();
            $('#areaCodeSelect').parent().find('div.slimScroll').hide(); //让自己隐藏
        }, 20);
        swithData();
    },
    complete:function(ztree,obj){
        ztreeObj=ztree;
        image_path=obj.defaultParams.initValue.imagePath.split(';');
        swithData();//加载上下
    }
});

html

<span>所属企业:</span>
<label>
    <input type="hidden" id="areaCodeSelect" name="areaCode">
    <input type="text" class="ztreeInput" maxlength='64'>
</label>

效果:

完整代码demo3new.js:

require.config({
    baseUrl:'/static/ui/common/',
    paths:{
        'jquery':'js/libs/jquery-1.11.1.min',
        'domReady':'js/functionality/domReady',
        'ztree.core':'plugins/other/ztree/jquery.ztree.core',
        'ztree.excheck':'plugins/other/ztree/jquery.ztree.excheck',
        'tree':'plugins/formElems/downTree/ztreeSelect',
        'util':'js/functionality/Util',
        'echart':'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',
        'DialogBySHF':'plugins/formElems/dialogbyshf/js/DialogBySHF',
        'nicescroll':'plugins/other/nicescroll/jquery.nicescroll.min',
        'bootstrap':'plugins/other/ipanel/bootstrap.min'
    },
    shim:{
        'bootstrap':{deps:['jquery']},
        'ztree.core':{deps:['jquery']},
        'ztree.excheck':{deps:['ztree.core']}
    }
});
var dateArr="";
var rTransformerTreeCode="";
var city="";
var powerCodes="";//对应的公式
var powerCodesObj={};
var Multiple={};//倍率
require(['jquery','domReady','util','echart','DialogBySHF','bootstrap_datetimepicker','zhCN','ztree.core','ztree.excheck','tree','nicescroll']
,function($,domReady,util,echart){
    var image_path=[];
    domReady(function(){
        initTimeFormate("yyyy-mm-dd");
        var ztreeObj;
        var params={
            zoomVal:1
        }
        $('#areaCodeSelect').selZtree({
            url:'/sys/companyInfo/findAllcomInfo',
            dataParams:null,
            initValue:null,
            onchange:function(){
                image_path=ztreeObj.getNodeByParam('id',$('#areaCodeSelect').val()).imagePath.split(';');
            },
            onclick:function(selnode){
                //触发选中后让框隐藏
                setTimeout(function () {
                    $('.ztreeInput').blur();
                    $('#areaCodeSelect').parent().find('div.slimScroll').hide(); //让自己隐藏
                }, 20);
                swithData();
            },
            complete:function(ztree,obj){
                ztreeObj=ztree;
                image_path=obj.defaultParams.initValue.imagePath.split(';');
                swithData();//加载上下
//                bottomLine();
            }
        });
        //点击切换图片事件
        $('body').on('click','.img-change i',function(){
            var f=$(this).attr('class');
            $(this).parent().prev('img').css({'margin-left':0,'margin-top':0,'width':'auto','height':'auto'})
            var href=$(this).parent().prev('img').attr('src').replace('/static','');
            var index=image_path.indexOf(href);
            var length=image_path.length;
            var len;
            if(f=='c_left'){
                if(--index<0){
                    len=length-1;
                }else{
                    len=index;
                }
            }else{
                if(++index<length){
                    len=index;
                }else{
                    len=0;
                }
            }
            $(this).parent().prev('img').attr('src','/static'+image_path[len]);
        });
        $('body').on('mousedown','.big-image',function(e){
            var $img=$(this),$parent=$(this).closest('.layer-content');
            var oleft=parseFloat($img.css('margin-left'));
            var otop=parseFloat($img.css('margin-top'));
            var width=parseFloat($img.css('width'));
            var height=parseFloat($img.css('height'));
            var pwidth=parseFloat($parent.css('width'));
            var pheight=parseFloat($parent.css('height'));
            if(isNaN(oleft)){oleft=0;}
            if(isNaN(otop)){otop=0;}
            var ox=e.pageX||e.clientX;
            var oy=e.pageY||e.clientY;
            var x=oleft,y=otop;
            $('body').on('mousemove',function(event){
                var nx=event.pageX||event.clientX;
                var ny=event.pageY||event.clientY;
                x=nx-ox;
                y=ny-oy;
                var ll=oleft+x;
                var tt=otop+y;
                if(ll>0){ll=0}
                if(tt>0){tt=0}
                if((ll-pwidth)<(-1*width)){ll=-(width-pwidth)}
                if((tt-pheight)<(-1*height)){tt=-(height-pheight)}
                $img.css({
                    'margin-left':ll+'px',
                    'margin-top':tt+'px'
                    });
            });
            $('body').on('mouseup',function(){
                $('body').off('mousemove').off('mouseup');
            });
            return false;
        });
        //滚轮效果
        $('body').on('mousewheel','.big-image',function(e){
            params.zoomVal+=event.wheelDelta/1200;
            var o=e.target;
            if (params.zoomVal >= 0.2) {
                o.style.transform="scale("+params.zoomVal+")";
            } else {
                params.zoomVal=0.2;
                o.style.transform="scale("+params.zoomVal+")";
                return false;
            }
            var delta = (e.originalEvent.wheelDelta && (e.originalEvent.wheelDelta > 0 ? 1 : -1)) ||  // chrome & ie
                        (e.originalEvent.detail && (e.originalEvent.detail > 0 ? -1 : 1));              // firefox
            if (delta > 0) {
                // 向上滚
                console.log("wheelup");
            } else if (delta < 0) {
                // 向下滚
                console.log("wheeldown");
            }

        })
        //点击事件日月年
        $(".switch-change li").click(function(){
            var idx=$(this).index();
            //初始化时间
            if(idx==0){
                initTimeFormate("yyyy-mm-dd");
            }else if(idx==1){
                initTimeFormate('yyyy-mm', 'yyyy-MM', 3);
            }else{
                initTimeFormate('yyyy', 'yyyy', 4);
            }
            $(".switch-change li").removeClass("cur");
            $(this).addClass("cur");
            //initBottomData('/findEnergyDayDataList',rTransformerTreeCode);
            swithData();
        })
        //点击变压器弹出事件
        $("#byq").click(function(){
            $.DialogBySHF.Dialog({ Width:1000, Height: 500, Title:"变压器详情", URL: "/demo3Edit?idx="+rTransformerTreeCode});
        })
        //关闭点击时弹出图片
        $("body").on("click",".dialog-img .img-close",function(e){
            $(e.target).closest(".dialog-img").remove();
        })
    });
    //点击弹出弹框的事件
    window.imgdialog=function(event){
        var imgstr='/static'+image_path[0];
        //创建一个dialog框
        var id='byqdialog'+new Date().getTime();
        var imghtml=
            '<div id="'+id+'" class="dialog-img">'+
                '<div class="layer"></div>'+
                '<div class="layer-content" style="overflow:hidden;76%;height:76%;">'+
                    '<span class="img-close">X</span>'+
                    '<img class="big-image" src="'+imgstr+'" alt="" style="auto;height:auto;cursor:all-scroll;">'+
                    '<p class="img-change"><i class="c_left">&lt</i><i class="c_right">&gt</i><p>'+
                '</div>'+
            '</div>';
        $("body").append(imghtml);
    }
    function swithData(){
        powerCodesObj={};
        var id=$("#top-left .ztree").attr("id");
        var treeObj=$.fn.zTree.getZTreeObj(id);
        var selNode=treeObj.getSelectedNodes();
        if(selNode.length>0){
            rTransformerTreeCode=selNode[0].rTransformerTreeCode;
            powerCodes=(selNode[0].powerCodes).replace(/]/g,"_EPdel]")
            powerCodesObj[powerCodes]=selNode[0];
            city=selNode[0].city;
        }else{
            rTransformerTreeCode=treeObj.getNodes()[0].rTransformerTreeCode;
            powerCodes=(treeObj.getNodes()[0].powerCodes).replace(/]/g,"_EPdel]");
            powerCodesObj[powerCodes]=selNode[0];
            city=treeObj.getNodes()[0].city;
            
        }
        initTopData('/findIndexPage',rTransformerTreeCode);
        initBottomData('/findEnergyDayDataList',rTransformerTreeCode);
    }
    /**
     * @desc 根据公式获取code
     * @param {string} str 公式字符串
     * @return {array} _arr code组成的数组
     */
    function formulaToCode(str){
        var _arr=[];
        if(!str){return _arr}
        _arr=str.match(/[.+?]/g).join('').replace(/]/g,'').split(/[/);
        _arr.shift();
        return _arr;
    }
    /**
     * @desc 把请求到的单个code分散数据重新组合成按照公式的数据。
     * @desc 这个方法对应的要求说明:
     *          1.没有计算公式的code不能含有[]字符
     *          2.接口数据不能只有sname和data两个字段
     *          3.code只能是字母或下划线(_)开头的字母、数字和下划线组成的字符串(即:符合javascript变量命名要求)
     *          4.不同设备不能使用相同的公式
     * @param {Object} obj 用 “公式:设备对象”组成的对象。
     * @param {Array} res 请求回来的数据数组对象,如:res.jsonList
     * @return {Array} resArr 数据数组对象
     */
    function evalFormulaToRes(obj,res,other){
        other=other===undefined?['sname','data']:other;
        var resArr=[];//用于存放返回的数据对象
        if(res.length==0){return resArr;}//没有数据
        //1.解析res数组生成_tempO和_tempA
        for(var i=0,_tempO={},_tempA={};i<res.length;i++){
            if(_tempO[res[i].sname]===undefined){
                _tempO[res[i].sname]={};
                _tempA[res[i].sname]=[];
            }
            var keys='';
            for(var k in res[i]){
                if(other.indexOf(k)===-1){
                    keys+=''+res[i][k];
                }
            }
            if(keys===''){keys='tempIndex'+i}
            _tempO[res[i].sname][keys]=res[i];
            _tempA[res[i].sname].push(res[i]);
        }
        //2.外层循环每个公式
        for(var k in obj){
            if(k.split(/[[+-*/]/g).length<3){//2.1.如果公式是单个code,不存在运算直接concat进resArr
                var key=k.replace(/[|]/g,'');
                if(_tempA[k]!==undefined){
                    resArr=resArr.concat(_tempA[k]);
                }else if(_tempA[key]!==undefined){
                    resArr=resArr.concat(_tempA[key]);
                }
            }else{//2.2.公式存在运算
                //2.2.1.取出每个code
                var _arr=formulaToCode(k);
                //2.2.2.根据每个code找出数据对象,把找到的数据对象的所有属性tempResArr
                if(_arr.length>0){
                    for(var i=0,tempResArr={},len=0;i<_arr.length;i++){
                        if(_tempO[_arr[i]]!==undefined){
                            for(var n in _tempO[_arr[i]]){
                                tempResArr[n]=_tempO[_arr[i]][n];
                            }
                        }
                    }
                }
                //2.2.3.循环tempResArr找出里面,每个属性生成变量
                for(var ks in tempResArr){
                    var to=JSON.parse(JSON.stringify(tempResArr[ks]))
                    to.sname=k;to.data=formulaToData(_arr,_tempO,k,ks);
                    if(isNaN(to.data)||to.data==Infinity||to.data==-Infinity){
                        console.error('错误:"'+k+'"数据除以0');
                        to.data=0;
                    }
                    resArr.push(to);
                }
            }
        }
        return resArr;
    }
    /**
     * @desc 将公式转换为数据
     * @param {*} _arr 
     * @param {*} _tempO 
     * @param {*} k 
     * @param {*} ks 
     */
    function formulaToData(_arr,_tempO,k,ks){
//        var o={};
        for(var i=0;i<_arr.length;i++){
            var _str='';
            var r= new RegExp('\['+_arr[i]+'\]',"g");
            if(_tempO[_arr[i]]===undefined){//没有code
//                _str='var _'+_arr[i]+'_='+0;
                k=k.replace(r,0);
            }else{
                var _to=_tempO[_arr[i]][ks];//有code没有某个属性
                if(_to===undefined){
//                    _str='var _'+_arr[i]+'_='+0;
                    k=k.replace(r,0);
                }else{
//                    _str='var _'+_arr[i]+'_='+_to.data;
                    k=k.replace(r,_to.data);
                }
            }
//            eval(_str);
        }
        return eval('('+k+')')+'';
    }
    function initBottomData(url,findTransformerSnameList){
        //1、将获取的公式拆分成单个code
        var codeList=formulaToCode(powerCodes);
        /*for(var i=0;i<codeList.length;i++){
            codeList[i]+='_EPdel'
        }*/
        var codestr=codeList.join(';');
        var param={};
        dateArr=[];
        var type=$(".switch-change li.cur").index();
        var dateIndex=0;//天:24,月:28-31天,年:12
        var xDate=[];
        param.snames=codestr;
        switch(type){
            case 0:
                param.type=0;
                param.dateTime=$("#systemtime").val();
                dateIndex=24;
                xDate = Object.keys(Array.apply(null, {length:24})).map(function(item){       
                    return +(parseInt(item)+1)+"时";   
                });
                break;
            case 1:
                param.type=1;
                param.dateTime=$("#systemtime").val().split('-')[0]+"-"+$("#systemtime").val().split('-')[1];
                dateIndex=getMonthDay(param.dateTime);
                xDate = Object.keys(Array.apply(null, {length:dateIndex})).map(function(item){       
                    return +(parseInt(item)+1)+"日";   
                });
                break;
            case 2:
                param.type=2;
                param.dateTime=$("#systemtime").val().split('-')[0];
                dateIndex=12;
                xDate = Object.keys(Array.apply(null, {length:12})).map(function(item){       
                    return +(parseInt(item)+1)+"月";   
                });
                break;
        }
        dateArr=getDateArr(param.dateTime,type);
        initbData(param,dateIndex,xDate);
    }
    function getMonthDay(date){
        var year=date.split("-")[0];    
        var month=date.split("-")[1];
        var d = new Date(year, month, 0);
        return d.getDate();
    }
    function initbData(param,dateIndex,xDate){
        $.post("/findEnergyDayDataList",param,function(data){
            var mobj={};
            var resObj={};
            var code=param.snames.split(";");
            for(var i=0;i<dateArr.length;i++){
                var _date=dateArr[i];
                var d=data[_date];
                if(mobj[_date]===undefined){
                    mobj[_date]={};
                }
                mobj[_date]=makeObj(d);
            }
            //var oo={"[DW_GKDZ_DDZY22-Z01_EPdel]*200+[KJ_BLKJ_DDZY22-Z03_EPdel]*300+[KJ_GKDZ_DDZY22-Z02_EPdel]+[DDZY22-Z_oct1_5_EPdel]+[DDZY22-Z_oct1_6_EPdel]":'我的'}
            var dd=getddData(data,dateArr,code,dateIndex)
            initbtRight(mobj,dateArr,code,xDate);//加载单个变压器
            //将所有的code值进行组合成一个
            resObj=getaddArr(mobj,dateArr,code);
            initCurve(dd,xDate,param);
            initbottomright(dd);
            function makeObj(d){
                var _obj={};
                var obj={};
                //分组
                for(var m=0;m<d.length;m++){
                    if(_obj[d[m]["sname"]]===undefined){
                        _obj[d[m]["sname"]]=(new Array(dateIndex).join("-;")+"-").split(";");
                    }
                    var idx=parseInt(d[m]["time"])-1;
                    _obj[d[m]["sname"]][idx]=d[m]["data"]
                }
                for(var j=0;j<code.length;j++){
                    if(_obj[code[j]]===undefined){
                        continue;
                    }else{
                        obj[code[j]]=_obj[code[j]]
                    }
                }
                return obj;
            }
        })
    }
    function getddData(dataObj,dateArr,code,dateIndex){
        var resultObj={};
        for(var i=0;i<dateArr.length;i++){
            resultObj[dateArr[i]]=getArr(dataObj[dateArr[i]]);
        }
        return resultObj;
        function getArr(list){
            var arr=(new Array(dateIndex).join("-;")+"-").split(";");
            var dde=evalFormulaToRes(powerCodesObj,list);
            for(var i=0;i<dde.length;i++){
                var idx=parseInt(dde[i]["time"]-1);
                var d=dde[i]["data"];
                if(!isNaN(d)){
                    d=Number(d).toFixed(2);
                }
                arr[idx]=d;
            }
            return arr;
        }
    }
    /**
     * 根据传入的code编码得到code名称对象
     */
    function getNnameObj(code){
        if(!code){return {}}
        for(var i=0;i<code.length;i++){
            code[i]=code[i].slice(0,code[i].lastIndexOf('_'))
        }
        var obj={};
        $.ajax({
            url:'/sys/meteringList/findMeteringListCodes',
            type:'GET',
            async:false,
            datatype:"json",
            data:{
                deviceCode:code.join(";")
            },
            success:function(data){
                for(var i=0;i<data.length;i++){
                    Multiple[data[i].code+'_EPdel']=data[i].e
                }
                obj=data.reduce(function(o,v,i){
                    o[v.code]=v.name;
                    return o;
                },{})
            }
        })
        return obj;
    }
    /**
     * 显示每一个变压器的数据值
     */
    function initbtRight(mobj,dateArr,code,xDate){
        var dataobj,_obj=JSON.parse(JSON.stringify(mobj));
        var series=[],keys=[],addlengend=[];
        var nameobj=getNnameObj(code);
        //得到当前时间,如果没有选时间就是电脑的时间,如果有选择的时间就是选择的时间
        dataobj=_obj[dateArr[0]];
        keys=Object.keys(dataobj).sort().reverse();
        for(var i=0;i<keys.length;i++){//数组的数据乘以倍率
            var k=keys[i];
            for(var j=0;j<24;j++){
                dataobj[k][j]=(dataobj[k][j]*1*Multiple[k]).toFixed(2)
            }
        }
        for(var i=0;i<keys.length;i++){
            var k=keys[i];
            var kk=keys[i].substring("0",keys[i].lastIndexOf("_"));
            addlengend.push(nameobj[kk]);
            series.push({
                type:"line",
                name:nameobj[kk],
                smooth:true,
                itemStyle : 
                {  
                    normal : {  
                        lineStyle:{
                            3
                        }  
                    }  
                },
                symbolSize:10,
                data:subDataArr(dataobj[k])
            })
        }

        initEc("bottom_lines",{
            title : {
                text: '',
                x:'center'
            },
            legend: {
                data:addlengend,
                x : 'center',
                bottom:'7px',
                type:'scroll'
            },
            xAxis: [{
                type: 'category',
                data:xDate,
                minInterval: 2,
                axisPointer: {
                    type: 'shadow'
                }
            }],
            yAxis: [
                {
                    type: 'value',
                    name:"kWh",
                    axisLabel: {
                        formatter: '{value}'
                    }
                }
            ],
            series:series
        })
    }
    /*
     * 根据当前的年月日重新筛选数组
     * */
    function subDataArr(arr){
        var type=$(".switch-change .cur").index();
        var dateIdx=0;
        if(type==0){
            dateIdx=new Date().getHours();
        }else if(type==1){
            dateIdx=new Date().getDate();
        }else{
            dateIdx=new Date().getMonth()+1;
        }
        var _arr=arr.concat();
        for(var m=_arr.length;m>0;m--){
            //如果时间大于当前时间
            if(m>dateIdx-1){
                //如果有值
                if(!_arr[m]||_arr[m]=="0.00"){//如果没有这个值,或者这个值等于0,不显示
                    _arr.length=m;
                }else{
                    break;
                }
            }else{
                break;
            }
        }
        return _arr;
    }
    function initbottomright(rowData){
        var t1=0,t2=0,t3=0;
        var type=$(".switch-change .cur").index();
        switch(type){
            case 0:
                $("#thisday>p>span").text("当日用电");
                $("#beforeday>p>span").text("昨日用电");
                break;
            case 1:
                $("#thisday>p>span").text("当月用电");
                $("#beforeday>p>span").text("上月用电");
                break;
            case 2:
                $("#thisday>p>span").text("今年用电");
                $("#beforeday>p>span").text("去年用电");
                break;
        }
        var newObj=JSON.parse(JSON.stringify(rowData));
        var len=newObj[dateArr[0]].length;
        for(var i=0;i<dateArr.length;i++){
            var d=dateArr[i];
            newObj[d].length=len;
            $("#bottom_right li:eq("+i+")").find("span").eq(1).text(arrSum(newObj[d])+"kWh")
        }
        t1=parseInt($("#thisday").children().last().text())
        t2=parseInt($("#beforeday").children().last().text());
        t3=t1-t2;
        if(t2==0||isNaN(t2)){
            $("#huanbi>span").text("0%");
        }else{
            $("#huanbi>span").text(Math.abs((t1-t2)*100/t2).toFixed(2)+"%");
        }
        if(t3>0){
            //$("#huanbi").children().last().attr("class","fa fa-fw fa-long-arrow-up")箭头
            $("#huanbi").children().last().attr("class","glyphicon glyphicon-plus")
        }else if(t3<0){
            //$("#huanbi").children().last().attr("class","fa fa-fw fa-long-arrow-down")箭头
            $("#huanbi").children().last().attr("class","glyphicon glyphicon-minus")
        }else{
            $("#huanbi").children().last().attr("class","")
        }
    }
    /**
     * @desc 对一个数组进行求和。
     * @param 数组
     * @return {string} sum 
     */
    function arrSum(arr){
        if(!arr||arr.length===0){
            return 0;
        }
        var sum=arr.reduce(function(x,y){
            x=isNaN(x)?0:x;
            y=isNaN(y)?0:y;
            return Number(parseFloat(x)+parseFloat(y)).toFixed(2);
        },0)
        return sum;
    }
    function initCurve(rowData,xDate,dataObj){
        var type=dataObj.type;
        var keys=Object.keys(rowData).sort().reverse(),series=[],obj={};
        for(var i=0;i<keys.length;i++){
            var k=keys[i];
            if(i==0){rowData[k]=subDataArr(rowData[k]);}
        }
        for(var i=0;i<dateArr.length;i++){
            var _data=dateArr[i];
            series.push({
                name:dateArr[i],
                type:'line',
                smooth:true,
                itemStyle : 
                {  
                    normal : {  
                        lineStyle:{
                            3
                        }  
                    }  
                },
                symbolSize:10,
                data:rowData[_data]
            });
        }
        if(type==0){
            //获取到天气
            $.ajax({
                url:'/weather/findAmbientData',
                type:'GET',
                series:series,
                datatype:"json",
                data:{
                    type:"hour",
                    dateTime:$("#systemtime").val(),
                    city:city
                },
                success:function(data){
                    var _series=series.concat();
                    var _obj=JSON.parse(JSON.stringify(series[0])),arr=(new Array(24).join("-;")+"-").split(";");
                    _obj.name="天气"
                    _obj.yAxisIndex=1;
                    for(var i=0;i<data.length;i++){
                        var row=eval("("+data[i]+")");
                        var idx=parseFloat(row.date)
                        arr[idx]=row.data
                    }
                    _obj.data=arr;
                    //_obj.data=[4,5,6,3,23,22,11,32,4,5,6,3,23,22,11,32,4,5,6,3,23,22,11,32];
                    _series.push(_obj);
                    initEc("bottom_line",{
                        title : {
                            text: '',
                            x:'center'
                        },
                        color:["#FFAE00","#1787EE",'#45BF98','#F28D4E','#C1232B','#B5C334','#FCCE10',
                            '#E87C25','#27727B','#FE8463','#9BCA63','#FAD860','#F3A43B','#60C0DD',
                            '#D7504B','#C6E579','#F4E001','#F0805A','#26C0C0'],
                        legend: {
                            data:dateArr.concat(["天气"]),
                            x : 'center',
                            bottom:'7px',
                            type:'scroll'
                        },
                        xAxis: [{
                            type: 'category',
                            data:xDate,
                            minInterval: 2,
                            axisPointer: {
                                type: 'shadow'
                            }
                        }],
                        yAxis: [
                            {
                                type: 'value',
                                name:"kWh",
                                axisLabel: {
                                    formatter: '{value}'
                                }
                            },
                            {
                                type: 'value',
                                name:"℃",
                                axisLabel: {
                                    formatter: '{value}'
                                }
                            }
                        ],
                        series:_series
                    })
                }
            })
        }else{
            initEc("bottom_line",{
                title : {
                    text: '',
                    x:'center'
                },
                color:["#FFAE00","#1787EE"],
                legend: {
                    data:dateArr,
                    x : 'center',
                    bottom:'7px',
                    type:'scroll'
                },
                xAxis: [{
                    type: 'category',
                    data:xDate,
                    minInterval: 2,
                    axisPointer: {
                        type: 'shadow'
                    }
                }],
                yAxis: [
                    {
                        type: 'value',
                        name:"kWh",
                        axisLabel: {
                            formatter: '{value}'
                        }
                    },
                    {
                        type: 'value',
                        name:"℃",
                        axisLabel: {
                            formatter: '{value}'
                        }
                    }
                ],
                series:series
            })
        }
        
    }
    //初始化echarts
    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:'line',
                type:'line',
                data:[]
            }]
        };
        var myChart = echart.init(document.getElementById(id));
        myChart.setOption($.extend({},option,op),true);  
        myChart.resize();
    }
    function getaddArr(dataObj,dateArr,code){
        var resultObj={};
        for(var i=0;i<dateArr.length;i++){
            resultObj[dateArr[i]]=getArr(dataObj[dateArr[i]]);
        }
        return resultObj;
        function getArr(obj){
            var arr=[];
            for(var key in obj){
                for(var i=0;i<obj[key].length;i++){
                    var _arr=arr[i];
                    if(_arr==""||_arr==null||isNaN(_arr)){
                        arr[i]=0;
                    }
                    arr[i]+=parseFloat(obj[key][i]);
                }
            }
            for(var m=0;m<arr.length;m++){
                if(arr[m]==0){continue}
                if(isNaN(arr[m])){continue}
                arr[m]=Number(arr[m]).toFixed(2);
            }
            return arr;
        }
    }
    function getDateArr(date,type){
        var arr=[];
        if(type===0){//
            arr=getSubSeven(date,2);
        }else if(type===1){//
            arr=getMonthArr(date,2);
        }else if(type===2){//
            arr=[date+"",(date-1)+""]
        }else{
            
        }
        return arr;
    }
    /**
     * 传入一个日期的天数,往前面减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(new Date(i).Format("yyyy-MM-dd"));
        }
        return arr;
    }
    /**
     * @desc 得到最近n个月份的数组
     * @param {Number} sDate 开始月份
     * @param {Int} n 向前推的月份数
     * return  {Array} 
     */
    function getMonthArr(sDate,n){
        var arr=[];
        arr.push(sDate);
        while(n>1){
            //arr.unshift(getBeforMonth(sDate));
            arr.push(getBeforMonth(sDate));
            sDate=getBeforMonth(sDate);
            n--;
        }
        return arr;
    }
    function getBeforMonth(date){
        var lastMonth="";
        var year=date.split("-")[0],month=date.split("-")[1];
        if(month==1){
            lastMonth=(year-1)+"-"+12;
        }else{
            lastMonth=year+"-"+add0(month-1);
        }
        return lastMonth;
    }
    function add0(n){
        if(parseFloat(n)<10){
            return "0"+n;
        }else{
            return n;
        }
    }
    function initTopData(url,findTransformerSnameList){
        $.post(url,{treeCode:rTransformerTreeCode},function(data){
            var obj=JSON.parse(JSON.stringify(data))
            //设置属性和值
            $(".add-top>li").eq(0).find("span").text((!!data.voltageClass?Number(data.voltageClass).toFixed(2):'-')+"kV")
            $(".add-top>li").eq(1).find("span").text((!!data.transformerNum?data.transformerNum:'-')+"台")
            $(".add-top>li").eq(2).find("span").text((!!data.ratedCapacity?Number(data.ratedCapacity).toFixed(2):'-')+"kVA")
            $(".add-top>li").eq(3).find("span").text((!!data.demandNum?Number(data.demandNum).toFixed(2):'-')+"kW")
            $(".add-top>li").eq(4).find("span").text((!!data.controlDevMS?data.controlDevMS:'-')+"个")
            $(".add-top>li").eq(5).find("span").text((!!data.measuringPointNum?data.measuringPointNum:'-')+"个")
            //$(".add-top li").eq(0).find(".mdata").text((!!data.current_P?Number(data.current_P).toFixed(2):'-')+"kW")
            //$(".add-top li").eq(1).find(".mdata").text((!!data.current_IA?Number(data.current_IA).toFixed(2):'-')+"A")
            //$(".add-top li").eq(2).find(".mdata").text((!!data.monthMaxDeman?Number(data.monthMaxDeman).toFixed(2):'-')+"kW")
            //$(".add-top li").eq(3).find(".mdata").text((!!data.environTemperate?data.environTemperate:'-')+"℃")
        })
    }
    /**
     * 初始化时间插件
     */
    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: end ? 2 : view
        }).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")
            swithData();
        });
        selector.val(new Date().Format(format2));
    }
    /**
     * 左下角的曲线
     */
    function bottomLine(){
        var date=new Date();
        var x=[57,25,22,14,51,48,43,47,53,67,73,53,27,27,14,19,21,47,54,73,67,53,27,24];
        x.length=date.getHours();
            ec = echart.init($('#bottom_line')[0]);//初始化echart
            option = {
            tooltip : {
                    trigger: 'axis',
                    axisPointer : {            // 坐标轴指示器,坐标轴触发有效
                        type : 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
                    }
                },
                legend: {
                    data:['昨日用电','今日用电'],
                    bottom:10
                },
                calculable : true,
                xAxis : [
                    {
                        type : 'category',
                        boundaryGap : true,
                        data : ['0时','1时','2时','3时','4时','5时','6时','7时','8时','9时','10时','11时','12时','13时','14时','15时','16时','17时','18时','19时','20时','21时','22时','23时']
                    }
                ],
                yAxis : [
                    {
                        name : 'kWh',
                        type : 'value',
                        axisLabel : {
                            formatter: '{value} '
                        },                   
                    }
                ],
                series : [
                    {
                        name:'今日负荷',
                        type:'line',
                        smooth:true,
                        itemStyle : 
                        {  
                            normal : {  
                                lineStyle:{
                                    3
                                }  
                            }  
                        },
                    symbolSize:10,
                    data:x
                    },
                    {
                        name:'昨日负荷',
                        type:'line',
                        smooth:true,
                        itemStyle : 
                        {  
                            normal : {  
                                lineStyle:{
                                    3
                                }  
                            }  
                        },
                    symbolSize:10,
                    data:[50, 62, 77,80,92,91,90,73,67,53,27,14,19,25,22,14,21,47,54,57,51,48,43,47]
                    }
                ]
            };
            ec.setOption(option, true);
        }
    }
);
View Code

demo3.html

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>demo3new</title>
<link href="/static/ui/common/css/demo/fontAwesome/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
<link href="/static/ui/common/css/demo/Hove/css/hover-min.css" rel="stylesheet" type="text/css" />
<link href="/static/ui/common/css/demo/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<link href="/static/ui/common/plugins/other/ztree/zTreeStyle/zTreeStyle.css" rel="stylesheet" type="text/css" />
<link type="text/css" rel="stylesheet" href="/static/ui/common/css/demo/comm.css" />
<link type="text/css" rel="stylesheet" href="/static/ui/common/plugins/formElems/dialogbyshf/css/DialogBySHF.css" />
<link type="text/css" rel="stylesheet" href="/static/ui/common/css/demo/Hove/css/hover-min.css" />
<link type="text/css" rel="stylesheet" href="/static/ui/modules/systemMan/demo/css/demo3.css" />
<link href="/static/ui/common/plugins/formElems/time/bootstrap_datetimepicker/css/bootstrap-datetimepicker.css"  rel="stylesheet" type="text/css">
<style>
    /*居中显示*/
   .dialog-img{
        position: fixed;
        top: 0;
        width: 100%;
        height: 100%;
    }
    .dialog-img .layer{
        position: fixed;
        top: 0;
        width: 100%;
        height: 100%;
        background-color:#333;
        opacity:.4;
    }
    .dialog-img .layer-content{
        width:850px;
        height:400px;
        position:absolute;
        top:50%;
        left:50%;
        transform: translate(-50%,-50%);
        background-color:#f7fbfb;
        position: relative;
    }
    .layer-content>img{
        width:100%;
        height:100%
    }
    .layer-content>span{
        position: absolute;
        top: 0px;
        right: 0px;
        width: 20px;
        height: 20px;
        background-color: rgba(0,0,0,.4);
        border-radius: 15px;
        color: #fff;
        text-align: center;
        line-height: 20px;
        cursor: pointer
    }
    .date{
        background:url(/static/ui/common/plugins/formElems/time/DatePicker97/skin/date.png) no-repeat center right;
    }
    .date:focus{
        border-color: #0095ff;
        background-image: url(/static/ui/common/plugins/formElems/time/DatePicker97/skin/date3.png);
    }
    .slimScroll{
        left: 80.75px !important;
        top: 73.375px !important;
        width: 196px !important;
        height: 270px !important;
    }
    
        /* 增加的样式 */
    #top-left .top-pbar{
        height:40px;
        line-height:40px;
        margin:0;
    }
    #top-left ul.add-top{
        height:calc(100% - 52px);
        text-align:center;
    }
    ul.add-top>li{
        display: inline-block;
        vertical-align: middle;
        width: 31%;
        height:50%;
        /* padding: 0 5px; */
        border: 1px solid #ddd;
        margin: 0 0.7%;
        padding-top:2%;
    }
    ul.add-top>li:nth-child(1),ul.add-top>li:nth-child(2),ul.add-top>li:nth-child(3){
        margin-bottom:10px;
    }
    ul.add-top>li>div:first-child{
        width:80%;
        padding:20px;
        margin:auto;
        height:60%;
    }
    ul.add-top>li>div:first-child>img{
        width:60%;
        height:auto;
    }
    ul.add-top>li>p{
        height:20%;
    }
    ul.add-top>li>div:last-child{
        display:flex;
        height:20%;
        min-height:20px;
        background-color:#5A656B;
        font-size:17px;
        color:#fff;
        text-align:center;
    }
    ul.add-top>li>div:last-child>span{
        flex-grow: 1;
        align-self: center;
    }
    /* .top-pbar input{70%} */
    .top-pbar input{
        width:100% !important;
        margin:0 !important;
    }
    
    /* .top-pbar>span{
        display:inline-block;
        20% !important;
    } */
    .top-pbar>label{width:30%}
</style>
<body>
    <div class="main">
        <div class="row hei50 clearfix">
            <div class="col-sm-4 col-md-4" style="padding-top:0;">
                <div class="box" id="top-left">
                    <p class="box-head"><i class="fa  fa-building-o fa-fw"></i>变电所概况</p>
                    <div>
                        <p class="top-pbar">
                            <span>所属企业:</span>
                            <label>
                                <!--  所属企业 -->
                                <input type="hidden" id="areaCodeSelect" name="areaCode">
                                <input type="text" class="ztreeInput" maxlength='64'>
                            </label>
                            <span>时间:</span>
                            <label>
                                <!--  时间选择 -->
                                <input type="text" class="sys_select_border_1 date" id="systemtime" name="systemtime" readonly="">
                            </label>
                        </p>
                        <ul class="add-top">
                            <li>
                                <div><img src="/static/ui/common/img/demo/demo3_22.png" alt=""></div>
                                <p>电压等级</p>
                                <div><span>-kV</span></div>
                            </li>
                            <li style="cursor:pointer" id="byq">
                                <div><img src="/static/ui/common/img/demo/demo3_19.png" alt=""></div>
                                <p>变压器台数</p>
                                <div><span>-台</span></div>
                            </li>
                            <li>
                                <div><img src="/static/ui/common/img/demo/demo3_35.png" alt=""></div>
                                <p>装机容量</p>
                                <div><span>-kVA</span></div>
                            </li>
                            <li>
                                <div><img src="/static/ui/common/img/demo/demo3_35.png" alt=""></div>
                                <p>申报需量</p>
                                <div><span>-kW</span></div>
                            </li>
                            <li>
                                <div><img src="/static/ui/common/img/demo/demo3_37.png" alt=""></div>
                                <p>测控装置</p>
                                <div><span>-个</span></div>
                            </li>
                            <li>
                                <div><img src="/static/ui/common/img/demo/demo3_33.png" alt=""></div>
                                <p>测量点</p>
                                <div><span>-个</span></div>
                            </li>
                        </ul>
                    </div>
                </div>
            </div>
            <!-- <div class="col-sm-4 col-md-4" style="padding-top:0;">
                <div class="box relative">
                    <p class="box-head"><i class="fa fa-table fa-fw"></i>运行状态</p>
                    <div style="padding:10px;overflow-y:aotu">
                        <p class="top-statu">更新时间: <span>刚刚</span></p>
                        <ul class="top-status" >
                            <li>
                                <div><img src="/static/ui/common/img/demo/demo3_03.png" alt=""></div>
                                <p>当前负荷</p>
                                <p class="mdata">-kw</p>
                                <div>
                                    <a href="javascript:void(0)" style="display:block;height:100%" onclick="imgdialog(this)" imgstr="/static/ui/common/img/demo/demo3_45.png">
                                        <p><img src="/static/ui/common/img/demo/demo3_45.png" alt=""></p>
                                        <div><span>配电图</span></div>
                                    </a>
                                </div>
                            </li>
                            <li>
                                <div><img src="/static/ui/common/img/demo/demo3_05.png" alt=""></div>
                                <p>当前电流</p>
                                <p class="mdata">-A</p>
                                <div>
                                    <a href="javascript:void(0)" style="display:block;height:100%">
                                        <p><img src="/static/ui/common/img/demo/demo3_48.png" alt=""></p>
                                        <div><span>视频</span></div>
                                    </a>
                                    
                                </div>
                            </li>
                            <li>
                                <div><img src="/static/ui/common/img/demo/demo3_09.png" alt=""></div>
                                <p>月最大需量</p>
                                <p class="mdata">-kW</p>
                                <div class="ock">
                                    <a href="javascript:void(0)" style="display:block;height:100%">
                                        <p><img src="/static/ui/common/img/demo/demo3_54.png" alt=""></p>
                                        <div><span>通讯</span></div>
                                    </a>
                                </div>
                            </li>
                            <li>
                                <div><img src="/static/ui/common/img/demo/demo3_07.png" alt=""></div>
                                <p>环境温度</p>
                                <p class="mdata">-℃</p>
                                <div class="ock">
                                    <a href="javascript:void(0)" style="display:block;height:100%">
                                        <p><img src="/static/ui/common/img/demo/demo3_51.png" alt=""></p>
                                        <div><span>变压器</span></div>
                                    </a>
                                    
                                </div>
                            </li>
                            
                        </ul>
                    </div>
                </div>
            </div>
            <div class="col-sm-4 col-md-4" style="padding-top:0;">
                <div class="box" >
                    <p class="box-head"><i class="fa  fa-pie-chart fa-fw"></i>当日事件记录</p>
                    <div style="padding:10px;">
                        <p style="height:30px;"></p>
                        <ul class="event">
                            <li>
                                <div><img src="/static/ui/common/img/demo/demo3_12.png" alt=""></div>
                                <p>遥测越限</p>
                                <p>-<sub>次</sub></p>
                            </li>
                            <li>
                                <div><img src="/static/ui/common/img/demo/demo3_14.png" alt=""></div>
                                <p>遥信变位</p>
                                <p>-<sub>次</sub></p>
                            </li>
                            <li>
                                <div><img src="/static/ui/common/img/demo/demo3_16.png" alt=""></div>
                                <p>失联的装置</p>
                                <p>-<sub>个</sub></p>
                            </li>
                        </ul>
                        <div>
                            <img src="/static/ui/common/img/demo/demo3_40.png" alt="">
                            <img src="/static/ui/common/img/demo/demo3_42.png" alt="">
                        </div>
                    </div>
                </div>
            </div> -->
            <div class="col-sm-8 col-md-8" style="padding-top:0;">
                <div class="box" >
                    <p class="box-head"><i class="fa fa-line-chart fa-fw"></i>线路分析(单位:kWh)</p>
                    <div>
                        <ul class="switch-change">
                            <li class="cur">
                                <h3></h3>
                                <p>24</p>
                            </li>
                            <li>
                                <h3></h3>
                                <p>31</p>
                            </li>
                            <li>
                                <h3></h3>
                                <p>12</p>
                            </li>
                        </ul>
                        <div id="bottom_line">

                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="row hei50 clearfix">
            <div class="col-sm-4 col-md-4" style="padding-bottom:0;">
                <div class="box" >
                    <p class="box-head"><i class="fa fa-line-chart fa-fw"></i>用电概况</p>
                    <div>
                        <div id="bottom_right" style="height:100%;">
                            <ul class="bottom-right">
                                <li >
                                    <div id="thisday" style="border-color:#ffae00;background-color:#EFFBF7;">
                                        <p style="background-color:#ffae00">
                                            <span>当日用电</span>
                                            <em style="border-left-color:#ffae00;"></em>
                                        </p>
                                        <span>- kWh</span>
                                    </div>
                                    
                                </li>
                                <li >
                                    <div id="beforeday" style="border-color:#31BEFF;background-color:#EFFBFF;">
                                        <p style="background-color:#31BEFF;">
                                            <span>昨日用电</span>
                                            <em style="border-left-color:#31BEFF;"></em>
                                        </p>
                                        <span>- kWh</span>
                                    </div>
                                </li>
                                <li >
                                    <div style="border-color:#94D700;background-color:#F7FBE7;" id="huanbi">
                                        <p style="background-color:#94D700;">
                                            <span>环比</span>
                                            <em style="border-left-color:#94D700;"></em>
                                        </p>
                                        <span>0%</span>
                                        <!-- 默认向下的箭头 -->
                                        <!-- <em class="fa fa-fw fa-long-arrow-down" style="font-size: 22px;color:#94D700"></em> -->
                                        <em style="font-size: 22px;color:#94D700"></em>
                                    </div>
                                </li>
                            </ul>
                            <ul class="bottom-bottom" style="display:none">
                                <li>
                                    <p>12:30-12:45</p>
                                    <p>最大用电时间</p>
                                </li>
                                <li>
                                    <p>240kW</p>
                                    <p>该短时间平均功率</p>
                                </li>
                            </ul>
                        </div>
                    </div>
                </div>
            </div>
            <div class="col-sm-8 col-md-8" style="padding-bottom:0;">
                <div class="box" >
                    <p class="box-head"><i class="fa fa-line-chart fa-fw"></i>支路分析(单位:kWh)</p>
                    <div>
                        <ul class="switch-change" style="display:none">
                            <li class="cur">
                                <h3></h3>
                                <p>24</p>
                            </li>
                            <li>
                                <h3></h3>
                                <p>31</p>
                            </li>
                            <li>
                                <h3></h3>
                                <p>12</p>
                            </li>
                        </ul>
                        <div id="bottom_lines">

                        </div>
                    </div>
                </div>
            </div>
            
        </div>
    </div>
    <!-- 弹出图片的框 -->
    <div class="dialog-img" style="display:none">
        <div class="layer"></div>
        <div class="layer-content" >
            <span class="img-close">X</span>
            <img src="/static/ui/common/img/demo/map_03.jpg" alt="">
        </div>
    </div>
  <script type="text/javascript">
        var path = "/static";
    </script>
      <script type="text/javascript" src="/static/ui/common/js/libs/require.js" data-main="/static/ui/modules/systemMan/demo/js/demo3new.js"></script>  
</body>
</html>
View Code
原文地址:https://www.cnblogs.com/pengfei25/p/10449369.html