//对象insight 事件:onRenderTable //隐藏列的配置修改变量:hideColumns ,并且只对度量列和行区的明细列(不会有加减号的列)生效 //修改默认折叠列,修改方法unfoldAll中的i //此宏修改透视分析的展开折叠逻辑,慎用 function main(insight) { //隐藏列 var cellIndex = 1; //隐藏列序号,序号从0开始。 var newtables = new Array(); var table = insight.grid.mainTable; var columnSize = insight.grid.getColumnSize(); var tr = table.tBodies[0].firstChild; var rowIndex = 0; //这个算法只对从左到右,从上到下合并有规律的合并单元格有用,对于间隔合并单元格的会有问题 while (tr) { if (tr.tagName == "TR") { var td = tr.lastChild; var columnIndex = columnSize - 1; var row = newtables[rowIndex] = []; while (td) { if (td.tagName == "TD") { for (var y = 0; y < td.colSpan; y++) { row[columnIndex - y] = td; } columnIndex = columnIndex - td.colSpan; } td = td.previousSibling; } rowIndex++; } tr = tr.nextSibling; } var length = newtables.length; var hideColumns = [12, 13, 14, 15, 18]; insight.grid.customHideColumns = hideColumns; for (var i = 0; i < length; i++) { var row = newtables[i]; if (row && row.length > 0) { /*隐藏多列处理,直接找到对应的列并隐藏 */ for (var ci in hideColumns) { var indexi = hideColumns[ci]; if (row[indexi]) { var nn = row[indexi]; if (nn != null) { if (nn.getAttribute("isAgg") != "1") { nn.style.display = "none"; nn.setAttribute("isHideColumn", "1"); } else { if (nn.colSpan >= 2) { nn.colSpan = nn.colSpan - 1; }else{ nn.setAttribute("isHideColumn", "1"); } } } } } } } table = newtables; redefindeFunction(insight); unfoldAll(insight); } //重写折叠和展开方法 function redefindeFunction(insight) { if (insight.grid.zwwl_doUnfold1) return; insight.grid.zwwl_doUnfold1 = insight.grid.doUnfold; //重写了系统的doUnfold, insight.grid.doUnfold = function(tdObj, untilObj) { var condition = tdObj.innerHTML.indexOf("Plus.png") != -1 ? true: false; if (condition) { var trObj = tdObj.parentNode; var imgObj = tdObj.firstChild; imgObj.src = "img/insight/Minus.png"; //var length = 0; //重写 //tdObj.rowSpan = parseInt(tdObj.getAttribute("ors")); var firstChild = tdObj.nextSibling; var length = this.getLength(firstChild); //重写 var chromeChangeRowSpan = 0; while (firstChild != null) { if (firstChild.getAttribute("isBlank") == "1") { var delObj = firstChild; firstChild = firstChild.nextSibling; delObj.parentNode.removeChild(delObj); } else { if (firstChild.getAttribute("isHide") != '1') { //重写 var hiddenC = (firstChild.getAttribute("isHideColumn") == "1"); firstChild.style.display = (hiddenC ? "none": ""); if (firstChild.innerHTML.indexOf("Plus.png") != -1) { trObj = this.doHideFoldTr(firstChild, true); break; } //length = length + firstChild.colSpan; //重写 } else { firstChild.style.display = "none"; } firstChild = firstChild.nextSibling; } } chromeChangeRowSpan += tdObj.nextSibling.rowSpan - 1; //重写 tdObj.setAttribute("chromeChangeRowSpan", chromeChangeRowSpan); do { trObj = trObj.nextSibling; if (trObj != null) { firstChild = trObj.firstChild; var child = firstChild; var isHideRow = trObj.getAttribute("isHide"); var isAgg = firstChild.getAttribute("isAgg"); var rowLength = this.getLength(child, isAgg == '1'); if (rowLength > length) { //没有汇总行 this.reduceRowSpan(trObj, tdObj, untilObj); break; } if (rowLength == length && isHideRow != "1") { chromeChangeRowSpan += firstChild.rowSpan; //重写 tdObj.setAttribute("chromeChangeRowSpan", chromeChangeRowSpan); } if (isAgg == '1' && rowLength == length) { //有汇总行 if (isHideRow == "1") { //汇总行是隐藏的 trObj.style.display = "none"; firstChild = trObj.firstChild; while (firstChild != null) { firstChild.style.display = "none"; firstChild = firstChild.nextSibling; } this.reduceRowSpan(trObj, tdObj, untilObj); } else { trObj.style.display = ""; this.reduceRowSpan(trObj, tdObj, untilObj); } break; } if (isHideRow == "1") { trObj.style.display = "none"; } else { trObj.style.display = ""; } //原来是收缩的需要隐藏 while (child != null) { if (child.firstChild && child.firstChild.tagName == "IMG" && child.firstChild.src.indexOf("Plus.png") != -1) { trObj = this.doHideFoldTr(child); break; } child = child.nextSibling; } } } while ( trObj != null ); if (trObj == null) { this.reduceRowSpan(trObj, tdObj, untilObj); } } } insight.grid.zwwl_doFold1 = insight.grid.doFold; insight.grid.doFold = function(tdObj) { this.zwwl_doFold1(tdObj); var hideColumns = this.customHideColumns; if (hideColumns && hideColumns.length > 0) { var firstChild = tdObj.nextSibling; while (firstChild != null) { if (firstChild.getAttribute("isHideColumn") == "1") { firstChild.style.display = "none"; } firstChild = firstChild.nextSibling; } } } insight.grid.getLength = function(firstTd, isCountHide) { var rowLength = 0; var td = firstTd; while (td != null) { if (td.getAttribute("isBlank") == "1") { // } else if ((td.getAttribute("isHide") != "1" || isCountHide) && td.getAttribute("isHideColumn") != "1") { rowLength = rowLength + td.colSpan; } td = td.nextSibling; } return rowLength; } //当原来就是收缩状态时,保持收缩状态 insight.grid.doHideFoldTr = function(tdObj, isFirstTr) { var condition = tdObj.innerHTML.indexOf("Plus.png") != -1 ? true: false; var returnTr = tdObj.parentNode; //返回当前函数处理的最后一行,没有的话返回本身 if (condition) { var trObj = tdObj.parentNode; var blankList = []; var firstChild = tdObj.nextSibling; var length = this.getLength(firstChild); if (isFirstTr) { while (firstChild != null) { if (firstChild.getAttribute("isBlank") == "1") { var delObj = firstChild; firstChild = firstChild.nextSibling; delObj.parentNode.removeChild(delObj); } else { var blankTd = firstChild.cloneNode(false); blankTd.setAttribute("isBlank", "1"); blankTd.innerHTML = " " if (firstChild.getAttribute("isHideColumn") == "1") { blankTd.style.display = "none"; } else { blankTd.style.display = ""; } blankTd.rowSpan = "1"; blankList[blankList.length] = blankTd; firstChild.style.display = "none"; firstChild = firstChild.nextSibling; } } } do { trObj = trObj.nextSibling; if (trObj != null) { firstChild = trObj.firstChild; var isAgg = firstChild.getAttribute("isAgg"); var rowLength = this.getLength(firstChild, isAgg == '1'); if (isAgg == '1' && rowLength == length) { if (isFirstTr) { firstChild = trObj.firstChild; blankList = []; while (firstChild != null) { var blankTd = firstChild.cloneNode(true); blankTd.setAttribute("isBlank", "1"); if (firstChild.getAttribute("isHideColumn") == "1") { blankTd.style.display = "none"; } else { blankTd.style.display = ""; } blankTd.rowSpan = "1"; blankList[blankList.length] = blankTd; firstChild = firstChild.nextSibling; } } trObj.style.display = "none"; returnTr = trObj; break; } else if (rowLength > length) { break; } trObj.style.display = "none"; returnTr = trObj; } } while ( trObj != null ); if (isFirstTr) { var trObj = tdObj.parentNode; for (var i = 0, len = blankList.length; i < len; i++) { trObj.appendChild(blankList[i]); } } } return returnTr; } insight.grid.zwwl_reduceRowSpan1 = insight.grid.reduceRowSpan; insight.grid.reduceRowSpan = function(trObj, tdObj, untilObj) { var ors = tdObj.getAttribute("ors"); //chrome等浏览器 隐藏的tr全部对rowSpan不生效 if (domutils.isChrome() || domutils.isFirefox() || domutils.isEdge() || domutils.isSafari() || (domutils.isIE11() && navigator.userAgent.indexOf("compatible") == -1)) { tdObj.setAttribute("ors", (parseInt(tdObj.getAttribute("chromeChangeRowSpan")) + 1)); } else { var ieChangeRowSpan = 0; var length = this.getLength(tdObj.nextSibling); var previousTrObj = (trObj || tdObj.parentNode.parentNode.lastChild); if (this.getLength(previousTrObj.firstChild) > length) previousTrObj = previousTrObj.previousSibling; var newRowSpan = 0; var tempBool = false; while (previousTrObj != tdObj.parentNode) { if (previousTrObj.style.display != "none") { tempBool = true; } if (tempBool) { newRowSpan++; } previousTrObj = previousTrObj.previousSibling; } tdObj.setAttribute("ors", (newRowSpan + 1)); } this.zwwl_reduceRowSpan1(trObj, tdObj, untilObj); tdObj.setAttribute("ors", ors); } } //默认折叠所有 function unfoldAll(insight) { //收缩 var grid = insight.grid; var rowLen = grid.mainTable.rows.length; var rowFieldSize = grid.rowFieldList.length; var columnFieldSize = grid.columnFieldList.length; var measureFieldSize = grid.measureFieldList.length; var headSize = columnFieldSize > 0 ? (measureFieldSize > 1 ? columnFieldSize + 1 : columnFieldSize) : 1; if (headSize < rowLen) { //从里到外依次默认折叠 for (var i = 13; i >= 0; i--) { var cell = grid.mainTable.rows[headSize].cells[i]; //alert("rowLen:"+rowLen+"rowFieldSize:"+rowFieldSize+"columnFieldSize:"+columnFieldSize+"measureFieldSize:"+measureFieldSize+"headSize:"+headSize+"cell:"+cell); insight.grid.doFoldWholeField(cell); } //insight.grid.doFold(cell); } }