2018-10-08 5fcb60a948de728b5c8833388656ca394ce70caa
Merge branch 'dev_lxw' of https://whyclj@gitlab.com/whyclxw1/gx_tieta.git into dev_lxw
5个文件已修改
447 ■■■■ 已修改文件
gx_tieta/WebRoot/css/common.css 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gx_tieta/WebRoot/css/web-status-outline.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gx_tieta/WebRoot/ele-match-group.jsp 404 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gx_tieta/WebRoot/pages/css/common.css 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gx_tieta/WebRoot/pages/js/pages/siderbar.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
gx_tieta/WebRoot/css/common.css
@@ -53,7 +53,10 @@
    -o-transform: rotate(90deg);
    transform: rotate(90deg);
}
.treeview-txt {
    display: inline-block;
    width: 100%;
}
.whyc-sider-menu>ul ul {
    display: none;
}
gx_tieta/WebRoot/css/web-status-outline.css
@@ -8,6 +8,7 @@
}
.web-status .cell-list {
    display: table-cell;
    vertical-align: middle;
    padding: 3px 5px;
}
.web-status .progressbar {
gx_tieta/WebRoot/ele-match-group.jsp
@@ -27,6 +27,12 @@
        #sideBar {
            height: 100%;
        }
        .layui-table table thead th {
            font-weight: bold;
        }
        .layui-form-radio {
            margin-right: 10px !important;
        }
    </style>
  </head>
  <body class="h" style="padding: 0; overflow: hidden;">
@@ -38,23 +44,30 @@
    <!-- 主体内容 -->
    <div id="main" class="full-container-layui">
        <!-- 导航结束 -->
        <div class="whyc-page-content-tbl">
            <div class="whyc-page-content-tbl-cell w360" id="resizeCont">
                <div class="tbl-cell-container">
                    <div class="side-bar-container">
                        <div class="side-bar" id="sideBar"></div>
                    </div>
        <div class="whyc-page-content-layui">
            <div class="abs abs-left w360" id="resizeCont">
                <div class="side-bar-container">
                    <div class="side-bar" id="sideBar"></div>
                </div>
            </div>
            <div class="whyc-page-content-tbl-cell">
                <div id="groupTbl"></div>
            <div class="abs abs-right left360" id="inforCont">
                <div class="tbl-container">
                    <table class="" id="groupTbl" lay-filter="groupTbl"></table>
                </div>
            </div>
        </div>
    </div>
    <script type="text/html" id="groupTblTools">
        <div class="layui-btn-container">
              <input type="checkbox" name="" lay-skin="primary" title="品牌一致" checked="">
            <button class="layui-btn layui-btn-sm" lay-event="startMatchGroup">启动配组</button>
        <div class="layui-btn-container" id="tblToolsBtn">
              <input type="checkbox" id="brandAgreement" name="" lay-skin="primary" title="品牌一致" {{ d.brandAgreement }}>
            <input type="radio" data-max="100" data-min="0" id="cap100" name="perCap" lay-skin="primary" title="全部" {{ d.cap100 }}>
            <input type="radio" data-max="100" data-min="90" id="cap90" name="perCap" lay-skin="primary" title="90%以上" {{ d.cap90 }}>
            <input type="radio" data-max="90" data-min="80" id="cap80" name="perCap" lay-skin="primary" title="80%~90%" {{ d.cap80 }}>
            <input type="radio" data-max="80" data-min="70" id="cap70" name="perCap" lay-skin="primary" title="70%~80%" {{ d.cap70 }}>
            <input type="radio" data-max="70" data-min="60" id="cap60" name="perCap" lay-skin="primary" title="60%~70%" {{ d.cap60 }}>
            <input type="radio" data-max="60" data-min="0" id="cap0" name="perCap" lay-skin="primary" title="60%以下" {{ d.cap0 }}>
            <button class="layui-btn layui-btn-sm" lay-event="startMatchGroup">分组/排序</button>
            <button class="layui-btn layui-btn-sm" lay-event="matchRecord">配组记录</button>
          </div>
    </script>
    
@@ -64,19 +77,22 @@
    <script type="text/javascript" src="pages/js/pages/siderbar.js"></script>
      <script type="text/javascript">
        // treeView模块
        layui.use(['table', 'layer'],function() {
        layui.use(['table', 'layer', 'laytpl'],function() {
            var layer = layui.layer;                // 获取layer模块
            var table = layui.table;                // 获取table模块
            var laytpl = layui.laytpl;                // 获取laytpl模块
            var TreeView = GLOBAL.pages.TreeView;
            var treeView = new TreeView($('#sideBar'));
            
            // 设置左右缩放
            $('#resizeCont').resizable({
            $('#resizeCont .side-bar-container').resizable({
                handles: 'e',
                maxWidth: 520,
                minWidth: 240,
                resize: function() {
                alsoResize:$('#resizeCont'),
                resize: function(event, ui) {
                    treeView.setContainer();
                    $('#inforCont').css('left', ui.size.width+'px');
                }
            });
            
@@ -93,42 +109,344 @@
            treeView.ele.on('click', '.city', function() {
                var city = $(this).data('attr');
                third(treeView, $(this).parent(), city);
                var radio = $(this).children('.treeview-txt').find('input');
                radio.prop('checked', true);
                // 未被选中
                if(!$(this).hasClass('acCity')) {
                    // 添加被选中的标识符
                    treeView.ele.find('.city').removeClass('acCity');
                    $(this).addClass('acCity');
                    // 查询市的机房信息并生成表格
                    searchData();
                }
            });
            
            // 机房->电池组
            treeView.ele.on('click', '.home', function() {
                var home = $(this).data('attr');
            // 表格数据配置项
            var tOptions = {
                elem: '#groupTbl'
                ,toolbar: ''
                ,defaultToolbar: ['exports', 'filter']
                ,cellMinWidth: 80
                ,cols: [[
                  {type: 'radio', fixed: 'left'}
                  ,{field:'stationname', title:'机房名称', align:'center', width: 380}
                  ,{field:'groupname', title:'电池组名称', align:'center'}
                  ,{field:'monnum', title:'单体编号', align:'center'}
                  ,{field:'brandname', title:'品牌名称', align:'center'}
                  ,{field:'nominalcap', title:'标称容量', align:'center'}
                  ,{field:'monvol', title:'标称电压(V)', align:'center'}
                  ,{field:'relcap', title:'实际容量', align:'center'}
                  ,{field:'percap', title:'容量百分比(%)', align:'center'}
                ]]
                ,data:[
                ]
                ,page: {}
                ,height: 'full-170'
            };
            var toolBarTpl = groupTblTools.innerHTML;
            // 设置表格头部的内容
            laytpl(toolBarTpl).render(getToolBarStatus(true), function(html){
                tOptions.toolbar = html;
            });
            // 获取工具栏中状态
            function getToolBarStatus(isFirst) {
                var tmp = {
                    StationName1: home.StationName1,
                    StationName2: home.StationName2,
                    StationName: home.StationName,
                    StationId: home.StationId
                    brandAgreement: 'checked=""',
                    cap100: 'checked=""',
                    cap90:'',
                    cap80:'',
                    cap70:'',
                    cap60:'',
                    cap0:'',
                    range: {
                        max: 100,
                        min: 0
                    }
                };
                fourth(treeView, $(this).parent(), tmp);
            });
                // 是否为第一次加载
                if(!isFirst) {
                    Object.keys(tmp).forEach(function(key) {
                        if(key != 'range')  {
                            tmp[key] = getCheckString(key);
                        }
                    });
                }
                return tmp;
                // 获取checked=""字符串
                function getCheckString(key) {
                    var ele = $('#'+key);
                    var rs = "";
                    if(ele.is(':checked')) {
                        rs = 'checked=""';
                        // 判断不是品牌一致
                        if(key != 'brandAgreement') {
                            var range = ele.data();
                            setRange(range.max, range.min);    // 设置范围
                        }
                    }
                    return rs;
                }
                // 设置范围
                function setRange(max, min) {
                    tmp.range.max = max;
                    tmp.range.min = min;
                }
            }
            
            // 生成表格数据
            table.render({
                elem: '#groupTbl'
                ,toolbar: '#groupTblTools'
                ,defaultToolbar: ['exports', 'filter']
                ,cols: [[
                  ,{field:'staionname', title:'机房名称'}
                  ,{field:'groupname', title:'电池组名称'}
                  ,{field:'monnum', title:'单体编号'}
                  ,{field:'brandname', title:'品牌名称'}
                  ,{field:'monvol', title:'单体电压'}
                  ,{field:'nominalcap', title:'标称容量'}
                  ,{field:'relcap', title:'实际容量',sort: true}
                ]]
                ,data:[]
                ,page: true
                ,height: 'full-200'
            });
            table.render(tOptions);
            // 获取后台数据
            var allGroup = [];    // 记录所有电池组的信息
            function searchData() {
                var temp = getSearchParams();    // 获取查询条件
                // 根据查询条件查询机房信息
                var loading = layer.load(0, {shade: [0.1,'#fff']}); //0代表加载的风格,支持0-2
                $.ajax({
                    type: 'post',
                    url: 'BattInfAction!serchMakeGroup',
                    async: true,
                    data: 'json='+JSON.stringify(temp),
                    dataType: 'json',
                    success: function(result) {
                        layer.close(loading);    // 关闭等待框
                        var rs = JSON.parse(result.result);
                        tOptions.data = [];    // 初始化查询内容
                        allGroup = [];         // 初始化所有数据内容
                        // 查询成功
                        if(rs.code == 1) {
                            var data = rs.data;
                            var num = 0;
                            var rsData = formaterTblData(data);
                            // 设置表格的数据
                            num = rsData.length;
                            tOptions.data = rsData;
                            allGroup = rsData;
                            // 设置分页信息
                            tOptions.page.layout = ['count', 'prev', 'page', 'next'];  //自定义分页布局
                            tOptions.page.limit= num;
                            tOptions.page.limits = [num];
                        }
                        // 设置表格头部的内容
                        laytpl(toolBarTpl).render(getToolBarStatus(true), function(html){
                            tOptions.toolbar = html;
                        });
                        // 重新绘制表格内容
                        table.reload('groupTbl', tOptions);
                    }
                });
            }
            // 构造生成表格数据的方法
            function formaterTblData(data) {
                var rs = [];    // 结果集
                // 遍历查询的结果根据查询结果生成指定的格式
                for(var i=0; i<data.length; i++) {
                    var _data = data[i];
                    var obj = {};
                    obj.stationname = _data.StationName;    // 机房名称
                    obj.groupname = _data.BattGroupName;    // 电池组名称
                    obj.brandname = _data.BattProducer;        // 品牌
                    obj.monvol = _data.MonVolStd;            // 标称电压
                    obj.nominalcap = _data.MonCapStd;        // 标称容量
                    for(var k=0; k<_data.obj.length;k++) {
                        var _obj = $.extend({}, obj);
                        var __data = _data.obj[k];
                        _obj.monnum = '#'+__data.mon_num;    // 单体编号
                        _obj.relcap = __data.test_cap.toFixed(0);    // 实际容量
                        _obj.percap = (__data.percent*100).toFixed(1);    // 容量百分比
                        rs.push(_obj);
                    }
                }
                return rs;    // 返回结果集
            }
            // 构造查询后台的参数
            function getSearchParams() {
                var acCity = treeView.ele.find('.acCity');    // 被选中的机房
                // 没有选择市就返回为false
                if(acCity.length == 0) {
                    return false;
                }
                var attr = acCity.data('attr');      // 机房信息
                // 符合条件启用构造对象
                var temp = {
                    StationName2: attr.StationName2,
                    BattProducer: 1
                };
                return temp;
            }
            //头工具栏事件
              table.on('toolbar(groupTbl)', function(obj){
                  var event = obj.event;
                  var checkStatus = table.checkStatus(obj.config.id);
                  // 根据事件名调用对应的函数
                  switch(event){
                      case 'startMatchGroup':
                          if(allGroup.length !=0) {
                              startMatchGroup(obj.config);
                          }else {
                              layer.msg('没有要组合/排序的内容');
                          }
                      break;
                      case 'matchRecord':
                          console.info(checkStatus);
                      break;
                  }
                  // 设置startMatchGroup函数
                  function startMatchGroup(obj) {
                      var toolBarStatus = getToolBarStatus();        // 获取状态栏
                      var data= getDataByRange(allGroup, toolBarStatus.range);
                      var fData = toolBarStatus.brandAgreement.length>0?formaterData(data):formaterData2(data);
                      var rsData = decodeObj(fData);
                      console.log(rsData);
                      // 设置表格的数据
                    num = rsData.length;
                    tOptions.data = rsData;
                    // 设置分页信息
                    tOptions.page.layout = ['count', 'prev', 'page', 'next'];  //自定义分页布局
                    tOptions.page.limit= num;
                    tOptions.page.limits = [num];
                    // 设置表格头部的内容
                    laytpl(toolBarTpl).render(toolBarStatus, function(html){
                        tOptions.toolbar = html;
                    });
                    table.reload('groupTbl', tOptions);
                  }
                  // 根据选择范围返回数据
                  function getDataByRange(data, range) {
                      var rs = [];
                      var max = range.max;
                      var min = range.min;
                      // 遍历data
                      for(var i=0; i<data.length; i++) {
                          var _data = data[i];
                          if(_data.percap<=max && _data.percap>=min) {
                              rs.push(_data);
                          }
                      }
                      return rs;
                  }
                  // 格式化电池组品牌一致数据
                  function formaterData(data) {
                      var obj = {};
                      for(var i=0;i<data.length;i++) {
                          var _data = data[i];
                          var brandname = _data.brandname;    // 电池品牌
                          // 判断obj.brandname是否存在
                          if(typeof obj[brandname] != 'object') {
                              obj[brandname] = {};
                          }
                          // 获取当前的电池品牌对象
                          var _brandname = obj[brandname];
                          var cap = _data.nominalcap;        // 电池容量
                          // 判断obj.brandname.nominalcap是否存在
                          if(typeof _brandname[cap] != 'object') {
                              _brandname[cap] = {};
                          }
                          // 获取当前的电池容量的对象
                          var _cap = _brandname[cap];
                          var vol = _data.monvol;        // 电池电压
                          // 判断obj.brandname.nominalcap.monvol是否存在
                          if(typeof _cap[vol] != 'object') {
                              _cap[vol] = [];
                          }
                          _cap[vol].push(_data);
                      }
                      return obj;
                  }
                  // 格式化数据不包含电池组一致
                  function formaterData2(data) {
                      var obj = {};
                      for(var i=0;i<data.length;i++) {
                          var _data = data[i];
                          // 获取当前的电池品牌对象
                          var cap = _data.nominalcap;        // 电池容量
                          // 判断obj.brandname.nominalcap是否存在
                          if(typeof obj[cap] != 'object') {
                              obj[cap] = {};
                          }
                          // 获取当前的电池容量的对象
                          var _cap = obj[cap];
                          var vol = data[i].monvol;        // 电池电压
                          // 判断obj.brandname.nominalcap.monvol是否存在
                          if(typeof _cap[vol] != 'object') {
                              _cap[vol] = [];
                          }
                          _cap[vol].push(_data);
                      }
                      return obj;
                  }
                  // 解码对象
                  function decodeObj(obj) {
                      var rs = [];
                      // 遍历当前对象的属性
                      Object.keys(obj).forEach(function(key){
                          decodeObjRec(rs, obj[key]);        // 获取排序后的结果集(利用数组的引用传递功能)
                      });
                      return rs;    // 返回结果集
                  }
                  // 解码递归函数
                  function decodeObjRec(rs, obj) {
                      if(obj instanceof Array) {
                          var tmp = [];
                          for(var i=0; i<obj.length; i++) {
                              var cap = Number(obj[i].relcap);    // 将字符串转化为整数
                              var _index = tmp.length;
                              for(var k=0; k<tmp.length; k++) {
                                  var _cap = Number(tmp[k].relcap);    // 将字符串转化为整数
                                  // 比较实际容量的值(对比时将字符串转化为整数型)
                                  if(_cap<cap) {
                                      _index = k;
                                      break;
                                  }
                              }
                              // 将当前数据插入到_index位置,实现排序功能
                              tmp.splice(_index, 0, obj[i]);
                          }
                          // 遍历被排序后的数组将值添加到结果集中
                          for(var i=0; i<tmp.length; i++) {
                              rs.push(tmp[i]);
                          }
                      }else {
                          // 递归函数
                          Object.keys(obj).forEach(function(key){
                              decodeObjRec(rs, obj[key]);
                          });
                      }
                  }
              });
            
            // 生成一级导航-省
            function first(treeView, container) {
@@ -214,7 +532,7 @@
                            for(var i=0; i<_data.length;i++) {
                                var __data = _data[i];
                                var txt = '<input type="checkbox" checked="checked" disabled name="home">'+ __data.StationName;
                                var tmp = treeView.getFile(txt, 'home', __data);
                                var tmp = treeView.getFile(txt, 'home', __data.StationId,__data);
                                formatData.push(tmp);
                            }
                            treeView.treeView(container, formatData);
gx_tieta/WebRoot/pages/css/common.css
@@ -56,8 +56,6 @@
/* absolute 顶部 居中 底部定位*/
.abs {
    position: absolute;
    left: 0;
    right: 0;
    z-index: 1;
}
.abs-top {
@@ -70,10 +68,22 @@
    bottom: 0;
    margin: auto; 
}
.abs-left {
    top:0;
    bottom: 0;
    left: 0;
}
.abs-right {
    top:0;
    bottom: 0;
    right: 0;
}
.abs-bottom {
    bottom: 0; 
    margin: 0 auto;
}
.left360 {
    left: 360px;
}
/* float */
.fix-left {
@@ -732,24 +742,11 @@
    top: 124px;
    bottom: 32px;
}
.whyc-page-content-tbl {
    display: table;
    width: 100%;
    height: 100%;
}
.whyc-page-content-tbl-cell {
    display: table-cell;
    height: 100%;
.whyc-page-content-layui {
    position: relative;
}
.tbl-cell-container {
    position: absolute;
    width: 100%;
    top: 0;
    bottom: 0;
    height: 100%;
}
.side-bar-container {
    height: 100%;
}
gx_tieta/WebRoot/pages/js/pages/siderbar.js
@@ -29,8 +29,8 @@
        //this.resize(options);
        // 给容器内容添加绑定事件
        this.ele.off('click.treeView.folder').on('click.treeView.folder', '.sider-menu-folder>i.fa-caret-right', function() {
            $(this).parent().parent().toggleClass('sider-menu-open');
        this.ele.off('click.treeView.folder').on('click.treeView.folder', '.sider-menu-folder', function() {
            $(this).parent().toggleClass('sider-menu-open');
        });
        this.ele.off('click.treeView.file').on('click.treeView.file', '.sider-menu-file', function() {