import { getSheetIndex, getRangetxt } from "../methods/get"; import { replaceHtml, getObjType, ABCatNum, numFormat, numfloatlen, showrightclickmenu, mouseclickposition, } from "../utils/util"; import { getdatabyselectionD, getcellvalue, datagridgrowth } from "../global/getdata"; import { isdatetime, diff, isdatatypemulti, isdatatype } from "../global/datecontroll"; import { genarate, update } from "../global/format"; import { isRealNull, isEditMode } from "../global/validate"; import { orderbydata1D } from "../global/sort"; import { jfrefreshgrid, jfrefreshgridall } from "../global/refresh"; import tooltip from "../global/tooltip"; import editor from "../global/editor"; import cleargridelement from "../global/cleargridelement"; import luckysheetArray from "../global/array"; import analysis from "../global/analysis"; import { selectHightlightShow } from "./select"; import { luckysheet_searcharray } from "./sheetSearch"; import { modelHTML, filtermenuHTML, filtersubmenuHTML, pivottableconfigHTML, pivottablesumHTML, luckysheetPivotTableHTML, } from "./constant"; import sheetmanage from "./sheetmanage"; import luckysheetsizeauto from "./resize"; import server from "./server"; import { checkProtectionAuthorityNormal } from "./protection"; import Store from "../store"; import locale from "../locale/locale"; import numeral from "numeral"; import { luckysheetlodingHTML } from "../controllers/constant"; const pivotTable = { pivotDatas: null, pivotSheetIndex: 0, pivotDataSheetIndex: 0, celldata: null, origindata: null, getCellData: function(cursheetindex, datasheetindex, data_select_save) { let _this = this; let sheetIndex; if (cursheetindex != null) { sheetIndex = cursheetindex; } else { sheetIndex = Store.currentSheetIndex; } let realIndex = getSheetIndex(sheetIndex); if (getObjType(Store.luckysheetfile[realIndex].pivotTable) != "object") { Store.luckysheetfile[realIndex].pivotTable = new Function( "return " + Store.luckysheetfile[realIndex].pivotTable, )(); } if (Store.luckysheetfile[realIndex].pivotTable != null) { _this.column = Store.luckysheetfile[realIndex].pivotTable.column; _this.row = Store.luckysheetfile[realIndex].pivotTable.row; _this.values = Store.luckysheetfile[realIndex].pivotTable.values; _this.filter = Store.luckysheetfile[realIndex].pivotTable.filter; _this.showType = Store.luckysheetfile[realIndex].pivotTable.showType; _this.filterparm = Store.luckysheetfile[realIndex].pivotTable.filterparm; if (Store.luckysheetfile[realIndex].pivotTable.drawPivotTable != null) { _this.drawPivotTable = Store.luckysheetfile[realIndex].pivotTable.drawPivotTable; } else { _this.drawPivotTable = true; } if (Store.luckysheetfile[realIndex].pivotTable.pivotTableBoundary != null) { _this.pivotTableBoundary = Store.luckysheetfile[realIndex].pivotTable.pivotTableBoundary; } else { _this.pivotTableBoundary = [12, 6]; } if (data_select_save != null) { _this.pivot_select_save = data_select_save; } else { _this.pivot_select_save = Store.luckysheetfile[realIndex].pivotTable.pivot_select_save; } if (datasheetindex != null) { _this.pivotDataSheetIndex = datasheetindex; } else { _this.pivotDataSheetIndex = Store.luckysheetfile[realIndex].pivotTable.pivotDataSheetIndex; } } else { _this.column = null; _this.row = null; _this.values = null; _this.filter = null; _this.showType = null; _this.filterparm = null; _this.drawPivotTable = true; _this.pivotTableBoundary = [12, 6]; if (data_select_save != null) { _this.pivot_select_save = data_select_save; } else { _this.pivot_select_save = Store.luckysheet_select_save; } if (datasheetindex != null) { _this.pivotDataSheetIndex = datasheetindex; } else { _this.pivotDataSheetIndex = sheetIndex; } } let pivotrealIndex = getSheetIndex(_this.pivotDataSheetIndex); let otherfile = Store.luckysheetfile[pivotrealIndex]; if (otherfile["data"] == null) { otherfile["data"] = sheetmanage.buildGridData(otherfile); } _this.origindata = getdatabyselectionD(otherfile.data, _this.pivot_select_save); let rowhidden = {}; if (_this.filterparm != null) { for (let f in _this.filterparm) { // 目的是取出rowhidden for (let h in _this.filterparm[f]) { if (h === "rowhidden" && _this.filterparm[f][h] != null) { rowhidden = $.extend(true, rowhidden, _this.filterparm[f][h]); } } } } _this.rowhidden = rowhidden; _this.pivotSheetIndex = sheetIndex; let newdata = []; for (let i = 0; i < _this.origindata.length; i++) { if (_this.rowhidden != null && _this.rowhidden[i] != null) { continue; } newdata.push([].concat(_this.origindata[i])); } _this.celldata = newdata; _this.pivot_data_type = {}; for (let c = 0; c < _this.celldata[1].length; c++) { let type = isdatatype(_this.celldata[1][c]); _this.pivot_data_type[c.toString()] = type; } }, pivot_data_type: {}, pivot_select_save: null, column: null, row: null, values: null, filter: null, showType: null, rowhidden: null, selected: null, caljs: null, initial: true, filterparm: null, luckysheet_pivotTable_select_state: false, jgridCurrentPivotInput: null, movestate: false, moveitemposition: [], movesave: {}, showvaluecolrow: function() { let _this = this; if ($("#luckysheet-modal-dialog-config-value .luckysheet-modal-dialog-slider-config-item").length >= 2) { $("#luckysheetpivottablevaluecolrowshow").show(); if (_this.showType == "column") { $("#luckysheetpivottablevaluecolrow").prop("checked", true); $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow']").addClass( "ui-state-active", ); $("#luckysheetpivottablevaluecolrow1").prop("checked", false); $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow1']").removeClass( "ui-state-active", ); } else { $("#luckysheetpivottablevaluecolrow1").prop("checked", true); $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow1']").addClass( "ui-state-active", ); $("#luckysheetpivottablevaluecolrow").prop("checked", false); $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow']").removeClass( "ui-state-active", ); } } else { $("#luckysheetpivottablevaluecolrowshow").hide(); } }, resetOrderby: function(obj) { let orderby = $("#luckysheet-modal-dialog-config-value .luckysheet-modal-dialog-slider-config-item").index(obj); $("#luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column") .find(".luckysheet-modal-dialog-slider-config-item") .each(function() { if ($(this).data("orderby") == orderby) { $(this).data("orderby", "self"); } }); }, luckysheetsliderlistclearfilter: function($filter) { let _this = this; let $t = $filter.parent(); let cindex = $t.data("index"); let rowhidden = {}, selected = {}, d = _this.origindata, filterdata = {}; $t.data("rowhidden", "") .find(".luckysheet-slider-list-item-filtered") .hide(); _this.setDatatojsfile("selected", {}, cindex); _this.setDatatojsfile("rowhidden", null, cindex); let newdata = []; for (let i = 0; i < d.length; i++) { if (rowhidden[i] != null) { continue; } newdata.push([].concat(d[i])); } _this.celldata = newdata; _this.refreshPivotTable(); $("#luckysheet-pivotTableFilter-menu, #luckysheet-pivotTableFilter-submenu").hide(); }, luckysheetsliderlistitemfilter: function($filter) { let _this = this; const _locale = locale(); const locale_filter = _locale.filter; let $t = $filter.parent(), toffset = $t.offset(), $menu = $("#luckysheet-pivotTableFilter-menu"), winH = $(window).height(), winW = $(window).width(); let cindex = $t.data("index"); let rowhidden = $t.data("rowhidden"); if (rowhidden == null || rowhidden == "") { rowhidden = {}; } else if (getObjType(rowhidden) == "string") { rowhidden = JSON.parse(rowhidden); } $("body .luckysheet-cols-menu").hide(); $("#luckysheet-pivotTableFilter-menu, #luckysheet-pivotTableFilter-submenu").hide(); $("#luckysheet-pivotTableFilter-byvalue-input").val(""); $("#luckysheet-pivotTableFilter-bycondition") .next() .hide(); $("#luckysheet-pivotTableFilter-byvalue") .next() .show(); $menu.data("index", cindex); $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input") .hide() .find("input") .val(); $("#luckysheet-pivotTableFilter-selected span") .data("type", "0") .data("type", null) .text(locale_filter.filiterInputNone); let byconditiontype = $t.data("byconditiontype"); $("#luckysheet-pivotTableFilter-selected span") .data("value", $t.data("byconditionvalue")) .data("type", byconditiontype) .text($t.data("byconditiontext")); if (byconditiontype == "2") { let $input = $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input2") .show() .find("input"); $input.eq(0).val($t.data("byconditionvalue1")); $input.eq(1).val($t.data("byconditionvalue2")); } else if (byconditiontype == "1") { $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input") .eq(0) .show() .find("input") .val($t.data("byconditionvalue1")); } const loadingObj = luckysheetlodingHTML("#luckysheet-pivotTableFilter-byvalue-select", { text: locale_filter.filiterMoreDataTip, }); $("#luckysheet-pivotTableFilter-byvalue-select") .empty() .append(loadingObj.el); let rowhiddenother = {}; //其它筛选列的隐藏行 $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item") .not($t.get(0)) .each(function() { let $t = $(this), rh = $t.data("rowhidden"); if (rh == null || rh == "") { return true; } if (getObjType(rh) == "string") { rh = JSON.parse(rh); } for (let r in rh) { rowhiddenother[r] = 0; } }); let data = _this.origindata; setTimeout(function() { //日期值 let dvmap = {}; let dvmap_uncheck = {}; //除日期以外的值 let vmap = {}; let vmap_uncheck = {}; for (let r = 1; r < data.length; r++) { if (r in rowhiddenother) { continue; } if (data[r] == null) { continue; } let cell = data[r][cindex]; if (cell != null && cell.ct != null && cell.ct.t == "d") { //单元格是日期 let v = update("YYYY-MM-DD", cell.v); let y = v.split("-")[0]; let m = v.split("-")[1]; let d = v.split("-")[2]; if (!(y in dvmap)) { dvmap[y] = {}; } if (!(m in dvmap[y])) { dvmap[y][m] = {}; } if (!(d in dvmap[y][m])) { dvmap[y][m][d] = 0; } dvmap[y][m][d]++; if (r in rowhidden) { dvmap_uncheck[y] = 0; dvmap_uncheck[m] = 0; dvmap_uncheck[d] = 0; } } else { let v, m; if (cell == null || isRealNull(cell.v)) { v = null; m = null; } else { v = cell.v; m = cell.m; } if (!(v in vmap)) { vmap[v] = {}; } if (!(m in vmap[v])) { vmap[v][m] = 0; } vmap[v][m]++; if (r in rowhidden) { vmap_uncheck[v + "#$$$#" + m] = 0; } } } //遍历数据加到页面 let item = []; if (JSON.stringify(dvmap).length > 2) { for (let y in dvmap) { let ysum = 0; let monthHtml = ""; for (let m in dvmap[y]) { let msum = 0; let dayHtml = ""; for (let d in dvmap[y][m]) { let dayL = dvmap[y][m][d]; msum += dayL; //月 小于 10 let mT; if (Number(m) < 10) { mT = "0" + Number(m); } else { mT = m; } //日 小于 10 let dT; if (Number(d) < 10) { dT = "0" + Number(d); } else { dT = d; } //日是否选中状态 if (y in dvmap_uncheck && m in dvmap_uncheck && d in dvmap_uncheck) { dayHtml += '
' + '' + '" + '( ' + dayL + " )" + "
"; } else { dayHtml += '
' + '' + '" + '( ' + dayL + " )" + "
"; } } ysum += msum; //月 小于 10 let mT2; if (Number(m) < 10) { mT2 = "0" + Number(m); } else { mT2 = m; } //月是否选中状态 if (y in dvmap_uncheck && m in dvmap_uncheck) { monthHtml += '
' + '
' + '' + '' + '" + '( ' + msum + " )" + "
" + '
' + dayHtml + "
" + "
"; } else { monthHtml += '
' + '
' + '' + '' + '" + '( ' + msum + " )" + "
" + '
' + dayHtml + "
" + "
"; } } //年是否选中状态 let yearHtml; if (y in dvmap_uncheck) { yearHtml = '
' + '
' + '' + '' + '" + '( ' + ysum + " )" + "
" + '
' + monthHtml + "
" + "
"; } else { yearHtml = '
' + '
' + '' + '' + '" + '( ' + ysum + " )" + "
" + '
' + monthHtml + "
" + "
"; } item.unshift(yearHtml); } } if (JSON.stringify(vmap).length > 2) { let vmapKeys = Object.keys(vmap); vmapKeys = orderbydata1D(vmapKeys, true); for (let i = 0; i < vmapKeys.length; i++) { let v = vmapKeys[i]; for (let x in vmap[v]) { let text; if (v + "#$$$#" + x == "null#$$$#null") { text = locale_filter.valueBlank; } else { text = x; } //是否选中状态 let dataHtml; if (v + "#$$$#" + x in vmap_uncheck) { dataHtml = '
' + '' + '" + '( ' + vmap[v][x] + " )" + "
"; } else { dataHtml = '
' + '' + '" + '( ' + vmap[v][x] + " )" + "
"; } item.push(dataHtml); } } } // 适配小屏设备 let containerH = winH - toffset.top - 350; if (containerH < 0) containerH = 100; //$("#luckysheet-pivotTableFilter-byvalue-select").html("
" + item.join("") + "
"); $("#luckysheet-pivotTableFilter-byvalue-select").append( "
" + item.join("") + "
", ); loadingObj.close(); }, 1); showrightclickmenu($menu, toffset.left - 250, toffset.top); }, getSumTypeName: function(type) { let name = ""; const _locale = locale(); const locale_pivotTable = _locale.pivotTable; if (type == "SUM") { name = locale_pivotTable.valueStatisticsSUM; } else if (type == "COUNT") { name = locale_pivotTable.valueStatisticsCOUNT; } else if (type == "COUNTA") { name = locale_pivotTable.valueStatisticsCOUNTA; } else if (type == "COUNTUNIQUE") { name = locale_pivotTable.valueStatisticsCOUNTUNIQUE; } else if (type == "AVERAGE") { name = locale_pivotTable.valueStatisticsAVERAGE; } else if (type == "MAX") { name = locale_pivotTable.valueStatisticsMAX; } else if (type == "MIN") { name = locale_pivotTable.valueStatisticsMIN; } else if (type == "MEDIAN") { name = locale_pivotTable.valueStatisticsMEDIAN; } else if (type == "PRODUCT") { name = locale_pivotTable.valueStatisticsPRODUCT; } else if (type == "STDEV") { name = locale_pivotTable.valueStatisticsSTDEV; } else if (type == "STDEVP") { name = locale_pivotTable.valueStatisticsSTDEVP; } else if (type == "let") { name = locale_pivotTable.valueStatisticslet; } else if (type == "VARP") { name = locale_pivotTable.valueStatisticsVARP; } return name; }, setDatatojsfile: function(attr, value, cindex) { let _this = this; let index = getSheetIndex(_this.pivotSheetIndex); if (Store.luckysheetfile[index]["pivotTable"] == null) { Store.luckysheetfile[index]["pivotTable"] = {}; } if (cindex == null) { Store.luckysheetfile[index]["pivotTable"][attr] = value; _this[attr] = value; } else { if (Store.luckysheetfile[index]["pivotTable"]["filterparm"] == null) { Store.luckysheetfile[index]["pivotTable"]["filterparm"] = {}; } if (Store.luckysheetfile[index]["pivotTable"]["filterparm"][cindex.toString()] == null) { Store.luckysheetfile[index]["pivotTable"]["filterparm"][cindex.toString()] = {}; } Store.luckysheetfile[index]["pivotTable"]["filterparm"][cindex.toString()][attr] = value; if (_this["filterparm"] == null) { _this["filterparm"] = {}; } if (_this["filterparm"][cindex.toString()] == null) { _this["filterparm"][cindex.toString()] = {}; } _this["filterparm"][cindex.toString()][attr] = value; } }, createPivotTable: function(e) { if (isEditMode() || Store.allowEdit === false) { return; } let _this = this; let datasheetindex = Store.currentSheetIndex; const _locale = locale(); const locale_pivotTable = _locale.pivotTable; if (isEditMode()) { alert(locale_pivotTable.errorNotAllowEdit); return; } if (Store.luckysheet_select_save.length > 1) { tooltip.info("", locale_pivotTable.errorNotAllowMulti); return; } if ( Store.luckysheet_select_save.length == 0 || Store.luckysheet_select_save[0].row[0] == Store.luckysheet_select_save[0].row[1] || Store.luckysheet_select_save[0].column[0] == Store.luckysheet_select_save[0].column[1] ) { tooltip.info("", locale_pivotTable.errorSelectRange); return; } let select_save = $.extend(true, {}, Store.luckysheet_select_save[0]); sheetmanage.addNewSheet(e, true); _this.getCellData(Store.currentSheetIndex, datasheetindex, select_save); _this.setDatatojsfile("pivot_select_save", select_save); _this.setDatatojsfile("pivotDataSheetIndex", datasheetindex); _this.initialPivotManage(); }, changePivotTable: function(index) { let _this = this; const _locale = locale(); const locale_pivotTable = _locale.pivotTable; let pivotDataSheetIndex = Store.luckysheetfile[getSheetIndex(index)].pivotTable.pivotDataSheetIndex; let real_pivotDataSheetIndex = getSheetIndex(pivotDataSheetIndex); if (real_pivotDataSheetIndex == null) { tooltip.info(locale_pivotTable.errorIsDamage, ""); return; } _this.getCellData(index); _this.initialPivotManage(true); _this.refreshPivotTable(); //初始化在一个普通sheet页,从此普通sheet页切换到数据透视表页时,需要刷新下数据,否则还是旧数据 }, refreshPivotTable: function(isRefreshCanvas = true) { let _this = this; let redo = {}; redo["pivotTable"] = pivotTable; redo["data"] = editor.deepCopyFlowData(Store.flowdata); //取数据 _this.storePivotTableParam(); let ret = _this.dataHandler(_this.column, _this.row, _this.values, _this.showType, _this.celldata); _this.setDatatojsfile("pivotDatas", ret); let d = $.extend(true, [], sheetmanage.nulldata); let data = d; let addr = 0, addc = 0; if (ret.length == 0) { _this.setDatatojsfile("drawPivotTable", true); _this.setDatatojsfile("pivotTableBoundary", [12, 6]); } else { _this.setDatatojsfile("drawPivotTable", false); _this.setDatatojsfile("pivotTableBoundary", [ret.length, ret[0].length]); let rlen = ret.length, clen = ret[0].length; addr = rlen - d.length; addc = clen - d[0].length; data = datagridgrowth(d, addr + 20, addc + 10, true); for (let r = 0; r < rlen; r++) { let x = [].concat(data[r]); for (let c = 0; c < clen; c++) { let value = ""; if (ret[r] != null && ret[r][c] != null) { value = getcellvalue(r, c, ret); } x[c] = value; } data[r] = x; } } redo["type"] = "pivotTable_change"; redo["curdata"] = $.extend(true, [], data); redo["sheetIndex"] = Store.currentSheetIndex; redo["pivotTablecur"] = _this.getPivotTableData(); if (Store.clearjfundo) { Store.jfundo.length = 0; Store.jfredo.push(redo); } cleargridelement(); Store.clearjfundo = false; if (addr > 0 || addc > 0) { jfrefreshgridall( data[0].length, data.length, data, null, Store.luckysheet_select_save, "datachangeAll", undefined, undefined, isRefreshCanvas, ); } else { jfrefreshgrid(data, Store.luckysheet_select_save, {}, null, isRefreshCanvas); selectHightlightShow(); } Store.clearjfundo = true; }, drawPivotTable: true, pivotTableBoundary: [12, 6], pivotclick: function(row_index, col_index, index) { if (index == null) { index = Store.currentSheetIndex; } let file = Store.luckysheetfile[getSheetIndex(index)]; if (!file.isPivotTable) { return; } let pivotDataSheetIndex = file.pivotTable.pivotDataSheetIndex; let real_pivotDataSheetIndex = getSheetIndex(pivotDataSheetIndex); if (real_pivotDataSheetIndex == null) { return; } let slider = $("#luckysheet-modal-dialog-slider-pivot"); let isRangeClick = this.isPivotRange(row_index, col_index); if (isRangeClick && slider.is(":hidden")) { if (!checkProtectionAuthorityNormal(index, "usePivotTablereports", false)) { // Store.luckysheet_select_status = false; return; } slider.show(); luckysheetsizeauto(); $("#luckysheet-sta-content").css("padding-right", 260); } else if (!isRangeClick && slider.is(":visible")) { slider.hide(); luckysheetsizeauto(); $("#luckysheet-sta-content").css("padding-right", 10); } }, isPivotRange: function(row_index, col_index) { let _this = this; if (!!Store.luckysheetcurrentisPivotTable) { if (row_index < _this.pivotTableBoundary[0] && col_index < _this.pivotTableBoundary[1]) { return true; } else { return false; } } }, storePivotTableParam: function() { let _this = this; let columnarr = [], rowarr = [], filterarr = [], valuesarr = []; $("#luckysheet-modal-dialog-config-filter .luckysheet-modal-dialog-slider-config-item").each(function() { let item = {}; item["index"] = $(this).data("index"); item["name"] = $(this).data("name"); item["fullname"] = $(this) .find(".luckysheet-modal-dialog-slider-config-item-txt") .text(); filterarr.push(item); }); $("#luckysheet-modal-dialog-config-row .luckysheet-modal-dialog-slider-config-item").each(function() { let item = {}; item["index"] = $(this).data("index"); item["name"] = $(this).data("name"); item["fullname"] = $(this) .find(".luckysheet-modal-dialog-slider-config-item-txt") .text(); item["order"] = $(this).data("order"); item["orderby"] = $(this).data("orderby"); item["stastic"] = $(this).data("stastic"); rowarr.push(item); }); $("#luckysheet-modal-dialog-config-column .luckysheet-modal-dialog-slider-config-item").each(function() { let item = {}; item["index"] = $(this).data("index"); item["name"] = $(this).data("name"); item["fullname"] = $(this) .find(".luckysheet-modal-dialog-slider-config-item-txt") .text(); item["order"] = $(this).data("order"); item["orderby"] = $(this).data("orderby"); item["stastic"] = $(this).data("stastic"); columnarr.push(item); }); $("#luckysheet-modal-dialog-config-value .luckysheet-modal-dialog-slider-config-item").each(function() { let item = {}; item["index"] = $(this).data("index"); item["name"] = $(this).data("name"); item["fullname"] = $(this) .find(".luckysheet-modal-dialog-slider-config-item-txt") .text(); item["sumtype"] = $(this).data("sumtype"); item["nameindex"] = $(this).data("nameindex"); valuesarr.push(item); }); _this.setDatatojsfile("column", columnarr); _this.setDatatojsfile("row", rowarr); _this.setDatatojsfile("filter", filterarr); _this.setDatatojsfile("values", valuesarr); let showtype = $("#luckysheetpivottablevaluecolrow:checked, #luckysheetpivottablevaluecolrow1:checked").val(); _this.setDatatojsfile("showType", showtype == "0" ? "row" : "column"); let pivotTable = _this.getPivotTableData(); delete pivotTable.pivotDatas; server.saveParam("all", _this.pivotSheetIndex, pivotTable, { k: "pivotTable" }); }, getPivotTableData: function(dataindex) { if (dataindex == null) { dataindex = this.pivotSheetIndex; } let index = getSheetIndex(dataindex); let pivotTable = Store.luckysheetfile[index]["pivotTable"]; if (getObjType(pivotTable) == "object") { pivotTable = $.extend(true, {}, Store.luckysheetfile[index]["pivotTable"]); } else { pivotTable = new Function("return " + pivotTable)(); } return pivotTable; }, addValuesToTitle: function(titles, values) { let rowLen = titles.length * values.length, colLen = titles[0].length + 1; let retdata = []; if (titles.length == 0 && values.length > 0) { for (let v = 0; v < values.length; v++) { retdata.push(values[v].fullname); } return retdata; } if (values.length == 0 && titles.length > 0) { return titles; } for (let r = 0; r < rowLen; r++) { retdata[r] = new Array(colLen); for (let c = 0; c < colLen - 1; c++) { retdata[r][c] = titles[Math.floor(r / values.length)][c]; } retdata[r][colLen - 1] = values[r % values.length].fullname; } return retdata; }, initialPivotManage: function(restore) { let _this = this; const _locale = locale(); const locale_pivotTable = _locale.pivotTable; const locale_button = _locale.button; const locale_filter = _locale.filter; if (_this.initial) { _this.initial = false; $("body").append(luckysheetPivotTableHTML()); $("#luckysheet-modal-dialog-slider-close").click(function() { $("#luckysheet-modal-dialog-slider-pivot").hide(); luckysheetsizeauto(); }); $("body").append( replaceHtml(modelHTML, { id: "luckysheet-data-pivotTable-selection", addclass: "luckysheet-data-pivotTable-selection", title: locale_pivotTable.titleSelectionDataRange, content: '', botton: '", }), ); $("body").append(replaceHtml(filtermenuHTML(), { menuid: "pivotTableFilter" })); $("body").append(replaceHtml(filtersubmenuHTML(), { menuid: "pivotTableFilter" })); $("body").append(pivottableconfigHTML()); $("body").append(pivottablesumHTML()); $("#luckysheet-pivotTableFilter-orderby-asc").remove(); $("#luckysheet-pivotTableFilter-orderby-desc") .next() .remove(); $("#luckysheet-pivotTableFilter-orderby-desc").remove(); $("#luckysheet-pivotTableFilter-orderby-color") .next() .remove(); $("#luckysheet-pivotTableFilter-orderby-color").remove(); $("#luckysheetpivottablevaluecolrow, #luckysheetpivottablevaluecolrow1") .checkboxradio({ icon: false, }) .change(function() { _this.refreshPivotTable(); }); let hidefilersubmenu = null; $("#luckysheet-pivotTableFilter-menu").mouseover(function() { clearTimeout(hidefilersubmenu); hidefilersubmenu = setTimeout(function() { $("#luckysheet-pivotTableFilter-submenu").hide(); }, 500); }); //点击复选框 $(document) .off("click.ptFilterCheckbox1") .on("click.ptFilterCheckbox1", "#luckysheet-pivotTableFilter-byvalue-select .textBox", function() { if ($(this).attr("data-check") == "true") { $(this).attr("data-check", "false"); $(this) .find("input[type='checkbox']") .removeAttr("checked"); } else { $(this).attr("data-check", "true"); $(this) .find("input[type='checkbox']") .prop("checked", true); } }); $(document) .off("click.ptFilterCheckbox2") .on("click.ptFilterCheckbox2", "#luckysheet-pivotTableFilter-byvalue-select .year", function() { if ($(this).attr("data-check") == "true") { $(this).attr("data-check", "false"); $(this) .parents(".yearBox") .find(".month") .attr("data-check", "false"); $(this) .parents(".yearBox") .find(".day") .attr("data-check", "false"); $(this) .parents(".yearBox") .find("input[type='checkbox']") .removeAttr("checked"); } else { $(this).attr("data-check", "true"); $(this) .parents(".yearBox") .find(".month") .attr("data-check", "true"); $(this) .parents(".yearBox") .find(".day") .attr("data-check", "true"); $(this) .parents(".yearBox") .find("input[type='checkbox']") .prop("checked", true); } }); $(document) .off("click.ptFilterCheckbox3") .on("click.ptFilterCheckbox3", "#luckysheet-pivotTableFilter-byvalue-select .month", function() { //月份 对应的 天 if ($(this).attr("data-check") == "true") { $(this).attr("data-check", "false"); $(this) .parents(".monthBox") .find(".day") .attr("data-check", "false"); $(this) .parents(".monthBox") .find("input[type='checkbox']") .removeAttr("checked"); } else { $(this).attr("data-check", "true"); $(this) .parents(".monthBox") .find(".day") .attr("data-check", "true"); $(this) .parents(".monthBox") .find("input[type='checkbox']") .prop("checked", true); } //月份 对应的 年份 let yearDayAllCheck = true; let $yearDay = $(this) .parents(".yearBox") .find(".day"); $yearDay.each(function(i, e) { if ($(e).attr("data-check") == "true") { } else { yearDayAllCheck = false; } }); if (yearDayAllCheck) { $(this) .parents(".yearBox") .find(".year") .attr("data-check", "true"); $(this) .parents(".yearBox") .find(".year input[type='checkbox']") .prop("checked", true); } else { $(this) .parents(".yearBox") .find(".year") .attr("data-check", "false"); $(this) .parents(".yearBox") .find(".year input[type='checkbox']") .removeAttr("checked"); } }); $(document) .off("click.ptFilterCheckbox4") .on("click.ptFilterCheckbox4", "#luckysheet-pivotTableFilter-byvalue-select .day", function() { if ($(this).attr("data-check") == "true") { $(this).attr("data-check", "false"); $(this) .find("input[type='checkbox']") .removeAttr("checked"); } else { $(this).attr("data-check", "true"); $(this) .find("input[type='checkbox']") .prop("checked", true); } //天 对应的 月份 let monthDayAllCheck = true; let $monthDay = $(this) .parents(".monthBox") .find(".day"); $monthDay.each(function(i, e) { if ($(e).attr("data-check") == "true") { } else { monthDayAllCheck = false; } }); if (monthDayAllCheck) { $(this) .parents(".monthBox") .find(".month") .attr("data-check", "true"); $(this) .parents(".monthBox") .find(".month input[type='checkbox']") .prop("checked", true); } else { $(this) .parents(".monthBox") .find(".month") .attr("data-check", "false"); $(this) .parents(".monthBox") .find(".month input[type='checkbox']") .removeAttr("checked"); } //天 对应的 年份 let yearDayAllCheck = true; let $yearDay = $(this) .parents(".yearBox") .find(".day"); $yearDay.each(function(i, e) { if ($(e).attr("data-check") == "true") { } else { yearDayAllCheck = false; } }); if (yearDayAllCheck) { $(this) .parents(".yearBox") .find(".year") .attr("data-check", "true"); $(this) .parents(".yearBox") .find(".year input[type='checkbox']") .prop("checked", true); } else { $(this) .parents(".yearBox") .find(".year") .attr("data-check", "false"); $(this) .parents(".yearBox") .find(".year input[type='checkbox']") .removeAttr("checked"); } }); //日期 三级下拉显示 $(document) .off("click.ptFilterYearDropdown") .on( "click.ptFilterYearDropdown", "#luckysheet-pivotTableFilter-byvalue-select .yearBox .fa-caret-right", function() { let $p = $(this).parents(".luckysheet-mousedown-cancel"); if ($p.hasClass("year")) { $(this) .parents(".yearBox") .find(".monthList") .slideToggle(); } if ($p.hasClass("month")) { $(this) .parents(".monthBox") .find(".dayList") .slideToggle(); } }, ); //全选 $("#luckysheet-pivotTableFilter-byvalue-btn-all").click(function() { $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']").prop("checked", true); $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']") .parents(".luckysheet-mousedown-cancel") .attr("data-check", "true"); }); //反选 $("#luckysheet-pivotTableFilter-byvalue-btn-contra").click(function() { let $input = $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']"); $input.each(function(i, e) { if ($(e).is(":checked")) { $(e).removeAttr("checked"); $(e) .parents(".luckysheet-mousedown-cancel") .attr("data-check", "false"); } else { $(e).prop("checked", true); $(e) .parents(".luckysheet-mousedown-cancel") .attr("data-check", "true"); } }); //天 对应的 月份 let $month = $("#luckysheet-pivotTableFilter-byvalue-select .ListBox .monthBox"); $month.each(function(index, event) { let monthDayAllCheck = true; let $monthDay = $(event).find(".day input[type='checkbox']"); $monthDay.each(function(i, e) { if ($(e).is(":checked")) { } else { monthDayAllCheck = false; } }); if (monthDayAllCheck) { $(event) .find(".month input[type='checkbox']") .prop("checked", true); $(event).attr("data-check", "true"); } else { $(event) .find(".month input[type='checkbox']") .removeAttr("checked"); $(event).attr("data-check", "false"); } }); //天 对应的 年份 let $year = $("#luckysheet-pivotTableFilter-byvalue-select .ListBox .yearBox"); $year.each(function(index, event) { let yearDayAllCheck = true; let $yearDay = $(event).find(".day input[type='checkbox']"); $yearDay.each(function(i, e) { if ($(e).is(":checked")) { } else { yearDayAllCheck = false; } }); if (yearDayAllCheck) { $(event) .find(".year input[type='checkbox']") .prop("checked", true); $(event).attr("data-check", "true"); } else { $(event) .find(".year input[type='checkbox']") .removeAttr("checked"); $(event).attr("data-check", "false"); } }); }); //清除 $("#luckysheet-pivotTableFilter-byvalue-btn-clear").click(function() { $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']").removeAttr("checked"); $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']") .parents(".luckysheet-mousedown-cancel") .attr("data-check", "false"); }); //按照值进行筛选 $("#luckysheet-pivotTableFilter-byvalue-input").on("input propertychange", function() { let v = $(this) .val() .toString(); $("#luckysheet-pivotTableFilter-byvalue-select .ListBox .luckysheet-mousedown-cancel").show(); if (v != "") { let $check = $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']"); $check.each(function(i, e) { let $p = $(e).parents(".luckysheet-mousedown-cancel"); if ($p.hasClass("day")) { //日期 let day = $(e) .siblings("label") .text() .toString(); let month = $(e) .parents(".monthBox") .find(".month label") .text() .toString(); let year = $(e) .parents(".yearBox") .find(".year label") .text() .toString(); let itemV = year + "-" + month + "-" + day; if (itemV.indexOf(v) == -1) { $(e) .parents(".day") .hide(); //天 对应的 月份 let $monthDay = $(e) .parents(".dayList") .find(".day:visible"); if ($monthDay.length == 0) { $(e) .parents(".monthBox") .find(".month") .hide(); } //天 对应的 年份 let $yearDay = $(e) .parents(".monthList") .find(".day:visible"); if ($yearDay.length == 0) { $(e) .parents(".yearBox") .find(".year") .hide(); } } } if ($p.hasClass("textBox")) { //其它 let itemV = $(e) .siblings("label") .text() .toString(); if (itemV.indexOf(v) == -1) { $(e) .parents(".textBox") .hide(); } } }); } }); $("#luckysheet-pivotTableFilter-bycondition, #luckysheet-pivotTableFilter-byvalue").click(function() { let $t = $(this); $t.next().slideToggle(200); setTimeout(function() { if ( $t.attr("id") == "luckysheet-pivotTableFilter-bycondition" && $("#luckysheet-pivotTableFilter-bycondition") .next() .is(":visible") ) { if ($("#luckysheet-pivotTableFilter-selected span").text() != locale_filter.filiterInputNone) { $("#luckysheet-pivotTableFilter-byvalue") .next() .slideUp(200); } } if ($t.is($("#luckysheet-pivotTableFilter-bycondition"))) { if ( $("#luckysheet-pivotTableFilter-bycondition") .next() .is(":hidden") && $("#luckysheet-pivotTableFilter-byvalue") .next() .is(":hidden") ) { $("#luckysheet-pivotTableFilter-byvalue") .next() .slideDown(200); } } }, 300); }); //取消按钮 $("#luckysheet-pivotTableFilter-cancel").click(function() { $("#luckysheet-pivotTableFilter-menu, #luckysheet-pivotTableFilter-submenu").hide(); }); $("#luckysheet-pivotTableFilter-selected").click(function() { let $t = $(this), toffset = $t.offset(), $menu = $("#luckysheet-pivotTableFilter-submenu"); $menu.hide(); let winH = $(window).height(), winW = $(window).width(); let menuW = $menu.width(), menuH = $menu.height(); let top = toffset.top, left = toffset.left, mheight = winH - toffset.top - 20; if (toffset.left + menuW > winW) { left = toffset.left - menuW; } if (toffset.top > winH / 2) { top = winH - toffset.top; if (top < 0) { top = 0; } mheight = toffset.top - 20; } $menu.css({ top: top, left: left, height: mheight }).show(); clearTimeout(hidefilersubmenu); }); //按条件过滤 $("#luckysheet-pivotTableFilter-submenu") .mouseover(function() { clearTimeout(hidefilersubmenu); }) .find(".luckysheet-cols-menuitem") .click(function(e) { $("#luckysheet-pivotTableFilter-selected span") .html( $(this) .find(".luckysheet-cols-menuitem-content") .text(), ) .data("value", $(this).data("value")); $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input").hide(); if ($(this).data("type") == "2") { $("#luckysheet-pivotTableFilter-selected span").data("type", "2"); $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input2").show(); } else if ($(this).data("type") == "0") { $("#luckysheet-pivotTableFilter-selected span").data("type", "0"); } else { $("#luckysheet-pivotTableFilter-selected span").data("type", "1"); $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input") .eq(0) .show(); //若是日期 改变input type类型为date if ( $(this).attr("data-value") == "dateequal" || $(this).attr("data-value") == "datelessthan" || $(this).attr("data-value") == "datemorethan" ) { $( "#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input input", ).prop("type", "date"); } else { $( "#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input input", ).prop("type", "text"); } } $("#luckysheet-pivotTableFilter-byvalue") .next() .slideUp(); $("#luckysheet-pivotTableFilter-submenu").hide(); }); $("#luckysheet-modal-dialog-pivotTable-list").on("click", " .luckysheet-slider-list-item-filter", function( e, ) { _this.luckysheetsliderlistitemfilter($(this)); e.stopPropagation(); return false; }); $("#luckysheet-modal-dialog-pivotTable-list").on( "click", " .luckysheet-slider-list-item-filtered", function(e) { _this.luckysheetsliderlistclearfilter($(this).next()); e.stopPropagation(); return false; }, ); $("#luckysheet-dialog-pivotTable-range-seleted").click(function() { $("#luckysheet-modal-dialog-slider-pivot").hide(); luckysheetsizeauto(); let $t = $("#luckysheet-data-pivotTable-selection"), myh = $t.outerHeight(), myw = $t.outerWidth(); let winw = $(window).width(), winh = $(window).height(); let scrollLeft = $(document).scrollLeft(), scrollTop = $(document).scrollTop(); $("#luckysheet-data-pivotTable-selection") .css({ left: (winw + scrollLeft - myw) / 2, top: (winh + scrollTop - myh) / 4 }) .show(); _this.jgridCurrentPivotInput = $("#luckysheet-dialog-pivotTable-range").html(); $("#luckysheet-pivotTable-range-selection-input").val(_this.jgridCurrentPivotInput); _this.luckysheet_pivotTable_select_state = true; }); //清除筛选按钮 $("#luckysheet-pivotTableFilter-initial").click(function() { $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-slider-list-item-filtered").hide(); $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").data( "rowhidden", "", ); $("#luckysheet-pivotTableFilter-menu, #luckysheet-pivotTableFilter-submenu").hide(); $("#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input") .hide() .find("input") .val(); $("#luckysheet-pivotTableFilter-selected span") .data("type", "0") .data("type", null) .text(locale_filter.filiterInputNone); _this.setDatatojsfile("filterparm", null); _this.celldata = _this.origindata; _this.refreshPivotTable(); }); $("#luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column").on( "click", ".luckysheet-modal-dialog-slider-config-item-icon", function(e) { let $t = $(e.target), $item = $t.closest(".luckysheet-modal-dialog-slider-config-item"), cindex = $item.data("index"), toffset = $item.offset(); let order = $item.data("order"), orderby = $item.data("orderby"), stastic = $item.data("stastic"); if (order == null) { order = "default"; } let option = '"; $("#luckysheet-modal-dialog-config-value .luckysheet-modal-dialog-slider-config-item").each( function(i) { option += '"; }, ); $("#luckysheet-pivotTable-config-option-orderby") .empty() .html(option); if (orderby == null) { orderby = "self"; } if (stastic == null) { stastic = "1"; } $("#luckysheet-pivotTable-config-option-order") .val(order) .data("index", cindex); $("#luckysheet-pivotTable-config-option-orderby") .val(orderby) .data("index", cindex); $("#luckysheet-pivotTable-config-option-stastic") .val(stastic) .data("index", cindex); mouseclickposition( $("#luckysheet-pivotTable-config-option"), toffset.left + $item.outerWidth(), toffset.top - 13, "rightbottom", ); e.stopPropagation(); return false; }, ); $( "#luckysheet-pivotTable-config-option-order,#luckysheet-pivotTable-config-option-orderby,#luckysheet-pivotTable-config-option-stastic", ).change(function() { let $t = $(this), cindex = $t.data("index"); $("#luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column") .find(".luckysheet-modal-dialog-slider-config-item") .each(function() { if ($(this).data("index") == cindex) { $(this).data($t.attr("id").replace("luckysheet-pivotTable-config-option-", ""), $t.val()); } }); _this.refreshPivotTable(); }); $("#luckysheet-modal-dialog-config-value").on( "click", ".luckysheet-modal-dialog-slider-config-item-icon", function(e) { let $t = $(e.target), $item = $t.closest(".luckysheet-modal-dialog-slider-config-item"), cindex = $item.data("index"), toffset = $item.offset(), sumtype = $item.data("sumtype"); let type = _this.pivot_data_type[cindex.toString()]; if (sumtype == null) { if (type == "num") { sumtype = "SUM"; } else { sumtype = "COUNTA"; } } let $menu = $("#luckysheet-pivotTable-config-option-sumtype"); $menu.find(".luckysheet-submenu-arrow").hide(); $menu .find(".luckysheet-cols-menuitem[sumtype='" + sumtype + "'] .luckysheet-submenu-arrow") .css("display", "inline"); $menu.data("item", $item); mouseclickposition($menu, toffset.left + $item.outerWidth(), toffset.top - 13, "rightbottom"); e.stopPropagation(); return false; }, ); $("#luckysheet-pivotTable-config-option-sumtype .luckysheet-cols-menuitem").click(function() { let $item = $("#luckysheet-pivotTable-config-option-sumtype").data("item"); let sumtype = $(this).attr("sumtype"); $item.data("sumtype", $(this).attr("sumtype")); let name = _this.getSumTypeName(sumtype) + ":" + $item.data("name"); $item .attr("title", name) .find(".luckysheet-modal-dialog-slider-config-item-txt") .html(name); $("#luckysheet-pivotTable-config-option-sumtype").hide(); _this.refreshPivotTable(); }); $("#luckysheet-modal-dialog-config-filter").on( "click", ".luckysheet-modal-dialog-slider-config-item-icon", function(e) { let $t = $(e.target), cindex = $t.closest(".luckysheet-modal-dialog-slider-config-item").data("index"); _this.luckysheetsliderlistitemfilter( $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item") .eq(cindex) .find(".luckysheet-slider-list-item-filter"), ); e.stopPropagation(); return false; }, ); //确认按钮 $("#luckysheet-pivotTableFilter-confirm").click(function() { let $menu = $("#luckysheet-pivotTableFilter-menu"); let cindex = $menu.data("index"); let rowhiddenother = {}; //其它筛选列的隐藏行 $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").each( function() { let $t = $(this), rh = $t.data("rowhidden"); if ($t.data("index") != cindex) { if (rh == null || rh == "") { return true; } if (getObjType(rh) == "string") { rh = JSON.parse(rh); } for (let r in rh) { rowhiddenother[r] = 0; } } }, ); let d = _this.origindata; let filterdata = {}; let rowhidden = {}; let caljs = {}; if ( $("#luckysheet-pivotTableFilter-bycondition") .next() .is(":visible") && $("#luckysheet-pivotTableFilter-byvalue") .next() .is(":hidden") && $("#luckysheet-pivotTableFilter-selected span").data("value") != "null" ) { let $t = $("#luckysheet-pivotTableFilter-selected span"); let type = $t.data("type"), value = $t.data("value"); caljs["value"] = value; caljs["text"] = $t.text(); if (type == "0") { caljs["type"] = "0"; } else if (type == "2") { let $input = $( "#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input2 input", ); caljs["type"] = "2"; caljs["value1"] = $input.eq(0).val(); caljs["value2"] = $input.eq(1).val(); } else { caljs["type"] = "1"; caljs["value1"] = $( "#luckysheet-pivotTableFilter-menu .luckysheet-pivotTableFilter-selected-input", ) .eq(0) .find("input") .val(); } for (let r = 1; r < d.length; r++) { if (r in rowhiddenother) { continue; } if (d[r] == null) { continue; } let cell = d[r][cindex]; if (value == "cellnull") { //单元格为空 if (cell != null && !isRealNull(cell.v)) { rowhidden[r] = 0; } } else if (value == "cellnonull") { //单元格有数据 if (cell == null || isRealNull(cell.v)) { rowhidden[r] = 0; } } else if (value == "textinclude") { //文本包含 let value1 = caljs["value1"]; if (cell == null || isRealNull(cell.v)) { rowhidden[r] = 0; } else { if (cell.m.indexOf(value1) == -1) { rowhidden[r] = 0; } } } else if (value == "textnotinclude") { //文本不包含 let value1 = caljs["value1"]; if (cell == null || isRealNull(cell.v)) { } else { if (cell.m.indexOf(value1) > -1) { rowhidden[r] = 0; } } } else if (value == "textstart") { //文本开头为 let value1 = caljs["value1"], valuelen = value1.length; if (cell == null || isRealNull(cell.v)) { rowhidden[r] = 0; } else { if (cell.m.substr(0, valuelen) != value1) { rowhidden[r] = 0; } } } else if (value == "textend") { //文本结尾为 let value1 = caljs["value1"], valuelen = value1.length; if (cell == null || isRealNull(cell.v)) { rowhidden[r] = 0; } else { if ( valuelen > cell.m.length || cell.m.substr(cell.m.length - valuelen, valuelen) != value1 ) { rowhidden[r] = 0; } } } else if (value == "textequal") { //文本等于 let value1 = caljs["value1"]; if (cell == null || isRealNull(cell.v)) { rowhidden[r] = 0; } else { if (cell.m != value1) { rowhidden[r] = 0; } } } else if (value == "dateequal") { //日期等于 let value1 = genarate(caljs["value1"])[2]; if (cell == null || isRealNull(cell.v)) { rowhidden[r] = 0; } else if (cell.ct != null && cell.ct.t == "d") { if (parseInt(cell.v) != value1) { rowhidden[r] = 0; } } else { rowhidden[r] = 0; } } else if (value == "datelessthan") { //日期早于 let value1 = genarate(caljs["value1"])[2]; if (cell == null || isRealNull(cell.v)) { rowhidden[r] = 0; } else if (cell.ct != null && cell.ct.t == "d") { if (parseInt(cell.v) >= value1) { rowhidden[r] = 0; } } else { rowhidden[r] = 0; } } else if (value == "datemorethan") { //日期晚于 let value1 = genarate(caljs["value1"])[2]; if (cell == null || isRealNull(cell.v)) { rowhidden[r] = 0; } else if (cell.ct != null && cell.ct.t == "d") { if (parseInt(cell.v) <= value1) { rowhidden[r] = 0; } } else { rowhidden[r] = 0; } } else if (value == "morethan") { //大于 let value1 = parseFloat(caljs["value1"]); if (cell == null || isRealNull(cell.v)) { rowhidden[r] = 0; } else if (cell.ct != null && cell.ct.t == "n") { if (cell.v <= value1) { rowhidden[r] = 0; } } else { rowhidden[r] = 0; } } else if (value == "moreequalthan") { //大于等于 let value1 = parseFloat(caljs["value1"]); if (cell == null || isRealNull(cell.v)) { rowhidden[r] = 0; } else if (cell.ct != null && cell.ct.t == "n") { if (cell.v < value1) { rowhidden[r] = 0; } } else { rowhidden[r] = 0; } } else if (value == "lessthan") { //小于 let value1 = parseFloat(caljs["value1"]); if (cell == null || isRealNull(cell.v)) { rowhidden[r] = 0; } else if (cell.ct != null && cell.ct.t == "n") { if (cell.v >= value1) { rowhidden[r] = 0; } } else { rowhidden[r] = 0; } } else if (value == "lessequalthan") { //小于等于 let value1 = parseFloat(caljs["value1"]); if (cell == null || isRealNull(cell.v)) { rowhidden[r] = 0; } else if (cell.ct != null && cell.ct.t == "n") { if (cell.v > value1) { rowhidden[r] = 0; } } else { rowhidden[r] = 0; } } else if (value == "equal") { //等于 let value1 = parseFloat(caljs["value1"]); if (cell == null || isRealNull(cell.v)) { rowhidden[r] = 0; } else if (cell.ct != null && cell.ct.t == "n") { if (cell.v != value1) { rowhidden[r] = 0; } } else { rowhidden[r] = 0; } } else if (value == "noequal") { //不等于 let value1 = parseFloat(caljs["value1"]); if (cell == null || isRealNull(cell.v)) { rowhidden[r] = 0; } else if (cell.ct != null && cell.ct.t == "n") { if (cell.v == value1) { rowhidden[r] = 0; } } else { rowhidden[r] = 0; } } else if (value == "include") { //介于 let value1 = parseFloat(caljs["value1"]), value2 = parseFloat(caljs["value2"]); let min, max; if (value1 < value2) { min = value1; max = value2; } else { max = value1; min = value2; } if (cell == null || isRealNull(cell.v)) { rowhidden[r] = 0; } else if (cell.ct != null && cell.ct.t == "n") { if (cell.v < min || cell.v > max) { rowhidden[r] = 0; } } else { rowhidden[r] = 0; } } else if (value == "noinclude") { //不在其中 let value1 = parseFloat(caljs["value1"]), value2 = parseFloat(caljs["value2"]); let min, max; if (value1 < value2) { min = value1; max = value2; } else { max = value1; min = value2; } if (cell == null || isRealNull(cell.v)) { rowhidden[r] = 0; } else if (cell.ct != null && cell.ct.t == "n") { if (cell.v >= min && cell.v <= max) { rowhidden[r] = 0; } } else { rowhidden[r] = 0; } } } } else { $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']").each(function( i, e, ) { if ($(e).is(":visible") && $(e).is(":checked")) { return true; } if ($(e).closest(".day").length > 0) { let day = $(e) .siblings("label") .text(); if (Number(day) < 10) { day = "0" + day; } let month = $(e) .closest(".monthBox") .find(".month label") .text() .replace(locale_filter.filiterMonthText, ""); if (Number(month) < 10) { month = "0" + month; } let year = $(e) .closest(".yearBox") .find(".year label") .text() .replace(locale_filter.filiterYearText, ""); let itemV = locale_filter.filterDateFormatTip + "#$$$#" + year + "-" + month + "-" + day; filterdata[itemV] = "1"; } if ($(e).closest(".textBox").length > 0) { let itemV = $(e) .closest(".textBox") .data("filter"); filterdata[itemV] = "1"; } }); for (let r = 1; r < d.length; r++) { if (r in rowhiddenother) { continue; } if (d[r] == null) { continue; } let cell = d[r][cindex]; let value; if (cell == null || isRealNull(cell.v)) { value = "null#$$$#null"; } else if (cell.ct != null && cell.ct.t == "d") { let fmt = update("YYYY-MM-DD", cell.v); value = locale_filter.filterDateFormatTip + "#$$$#" + fmt; } else { value = cell.v + "#$$$#" + cell.m; } if (value in filterdata) { rowhidden[r] = 0; } } } let $top = $("#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item").eq( cindex, ); if ( $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']:visible:checked") .length < $("#luckysheet-pivotTableFilter-byvalue-select .ListBox input[type='checkbox']:visible") .length || $("#luckysheet-pivotTableFilter-byvalue-input").val().length > 0 || ($("#luckysheet-pivotTableFilter-bycondition") .next() .is(":visible") && $("#luckysheet-pivotTableFilter-byvalue") .next() .is(":hidden") && $("#luckysheet-pivotTableFilter-selected span").data("value") != "null") ) { $top.data("rowhidden", JSON.stringify(rowhidden)) .find(".luckysheet-slider-list-item-filtered") .show(); _this.setDatatojsfile("rowhidden", rowhidden, cindex); if (caljs != null) { $top.data("byconditionvalue", caljs["value"]) .data("byconditiontype", caljs["type"]) .data("byconditiontext", caljs["text"]); if (caljs["value1"] != null) { $top.data("byconditionvalue1", caljs["value1"]); } if (caljs["value2"] != null) { $top.data("byconditionvalue2", caljs["value2"]); } _this.setDatatojsfile("caljs", caljs, cindex); } } else { $top.data("rowhidden", "") .find(".luckysheet-slider-list-item-filtered") .hide(); _this.setDatatojsfile("rowhidden", null, cindex); } let newdata = []; for (let i = 0; i < d.length; i++) { if (i in rowhidden || i in rowhiddenother) { continue; } newdata.push([].concat(d[i])); } _this.celldata = newdata; _this.refreshPivotTable(); $("#luckysheet-pivotTableFilter-menu, #luckysheet-pivotTableFilter-submenu").hide(); cleargridelement(); }); $( "#luckysheet-data-pivotTable-selection .luckysheet-model-close-btn, #luckysheet-data-pivotTable-selection .luckysheet-modal-dialog-title-close", ).click(function() { $("#luckysheet-modal-dialog-slider-pivot").show(); luckysheetsizeauto(); $("#luckysheet-cell-main .luckysheet-pivotTable-selection-set div").show(); $("#luckysheet-data-pivotTable-selection").hide(); sheetmanage.changeSheetExec(_this.pivotSheetIndex); _this.luckysheet_pivotTable_select_state = false; cleargridelement(); }); $("#luckysheet-pivotTable-selection-confirm").click(function() { let $input = $("#luckysheet-pivotTable-range-selection-input"), val = $input.val(); if ( $.trim(val).length == 0 || $.trim(val).toUpperCase() == _this.jgridCurrentPivotInput.toUpperCase() ) { $input.val(_this.jgridCurrentPivotInput); $("#luckysheet-data-pivotTable-selection .luckysheet-model-close-btn").click(); return; } else { let val1 = val.split("!"); let sheettxt = "", rangetxt = "", sheetIndex = -1; if (val1.length > 1) { sheettxt = val1[0]; rangetxt = val1[1]; for (let i in Store.luckysheetfile) { if (sheettxt == Store.luckysheetfile[i].name) { sheetIndex = Store.luckysheetfile[i].index; break; } } if (sheetIndex == -1) { sheetIndex = 0; } } else { let index = getSheetIndex(Store.currentSheetIndex); sheettxt = Store.luckysheetfile[index].name; sheetIndex = Store.luckysheetfile[index].index; rangetxt = val1[0]; } if (Store.luckysheetfile[getSheetIndex(sheetIndex)].isPivotTable) { if (isEditMode()) { alert(locale_pivotTable.errorNotAllowPivotData); } else { tooltip.info("", locale_pivotTable.errorNotAllowPivotData); } $input.val(_this.jgridCurrentPivotInput); return; } if (rangetxt.indexOf(":") == -1) { if (isEditMode()) { alert(locale_pivotTable.errorSelectionRange); } else { tooltip.info("", locale_pivotTable.errorSelectionRange); } $input.val(_this.jgridCurrentPivotInput); return; } rangetxt = rangetxt.split(":"); let row = [], col = []; row[0] = parseInt(rangetxt[0].replace(/[^0-9]/g, "")) - 1; row[1] = parseInt(rangetxt[1].replace(/[^0-9]/g, "")) - 1; if (row[0] > row[1]) { if (isEditMode()) { alert(locale_pivotTable.errorSelectionRange); } else { tooltip.info("", locale_pivotTable.errorSelectionRange); } $input.val(_this.jgridCurrentPivotInput); return; } col[0] = ABCatNum(rangetxt[0].replace(/[^A-Za-z]/g, "")); col[1] = ABCatNum(rangetxt[1].replace(/[^A-Za-z]/g, "")); if (col[0] > col[1]) { if (isEditMode()) { alert(locale_pivotTable.errorSelectionRange); } else { tooltip.info(locale_pivotTable.errorSelectionRange); } $input.val(_this.jgridCurrentPivotInput); return; } sheetmanage.changeSheetExec(_this.pivotSheetIndex); _this.setDatatojsfile("pivot_select_save", { row: row, column: col }); _this.setDatatojsfile("pivotDataSheetIndex", sheetIndex); _this.getCellData(_this.pivotSheetIndex, sheetIndex, { row: row, column: col }); _this.initialPivotManage(); $("#luckysheet-dialog-pivotTable-range").html(val); $("#luckysheet-modal-dialog-slider-pivot").show(); $("#luckysheet-data-pivotTable-selection").hide(); _this.luckysheet_pivotTable_select_state = false; _this.refreshPivotTable(); luckysheetsizeauto(); cleargridelement(); } }); $("#luckysheet-modal-dialog-slider-pivot").on( "mousedown", ".luckysheet-slider-list-item-name, .luckysheet-modal-dialog-slider-config-item-txt", function(e) { let $cur = $(e.target); _this.movestate = true; _this.movesave.obj = $cur.parent(); _this.movesave.name = $cur.data("name"); _this.movesave.containerid = $cur .parent() .parent() .attr("id"); _this.movesave.index = $cur.data("index"); if ($("#luckysheet-modal-dialog-slider-pivot-move").length == 0) { $("body").append( '
' + _this.movesave.name + "
", ); } _this.movesave.width = $("#luckysheet-modal-dialog-slider-pivot-move").outerWidth(); _this.movesave.height = $("#luckysheet-modal-dialog-slider-pivot-move").outerHeight(); $( "#luckysheet-modal-dialog-pivotTable-list, #luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value", ).css("cursor", "default"); }, ); $( "#luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value", ) .mousemove(function(e) { if (_this.movestate) { if (_this.moveitemposition.length == 0) { _this.moveitemposition = [0]; $(this) .find(".luckysheet-modal-dialog-slider-config-item") .each(function(i) { let $t = $(this), h = $t.outerHeight(); _this.moveitemposition.push(_this.moveitemposition[i] + h + 2); }); $(this).append( '
', ); } $("#luckysheet-modal-dialog-slider-pivot-move").css({ background: "#FD8585", color: "#fff", border: "1px solid #FD7070", }); let x = event.pageX, y = event.pageY, $container = $(this); let curtop = y - $container.offset().top + $container.scrollTop(); let position = _this.moveitemposition; let row_index = luckysheet_searcharray(position, curtop); if (row_index == -1) { $("#luckysheet-modal-dialog-config-order-help").css({ top: position[position.length - 1] }); } else if ( curtop - position[row_index - 1] > (position[row_index] - position[row_index - 1]) / 2 ) { $("#luckysheet-modal-dialog-config-order-help").css({ top: position[row_index] }); } else { $("#luckysheet-modal-dialog-config-order-help").css({ top: position[row_index - 1] }); } } }) .mouseleave(function() { if (_this.movestate) { $("#luckysheet-modal-dialog-slider-pivot-move").css({ background: "#fff", color: "#000", border: "1px dotted #000", }); _this.moveitemposition = []; $("#luckysheet-modal-dialog-config-order-help").remove(); } }) .mouseup(function(e) { if (_this.movestate) { let $t = $(this); let itemHTML; if (_this.movesave.containerid == $t.attr("id")) { itemHTML = _this.movesave.obj.clone(); } else { let name = _this.movesave.name, sumtype = "", nameindex = ""; if ($t.attr("id") == "luckysheet-modal-dialog-config-value") { let type = _this.pivot_data_type[_this.movesave.index.toString()]; if (type == "num") { name = locale_pivotTable.valueStatisticsSUM + ":" + name; sumtype = "data-sumtype='SUM'"; nameindex = "data-nameindex='0'"; } else { name = locale_pivotTable.valueStatisticsCOUNTA + ":" + name; sumtype = "data-sumtype='COUNTA'"; nameindex = "data-nameindex='0'"; } $("#luckysheet-modal-dialog-config-value") .find(".luckysheet-modal-dialog-slider-config-item") .each(function() { if ( $(this) .find(".luckysheet-modal-dialog-slider-config-item-txt") .text() == name ) { let ni = parseFloat($(this).data("nameindex")) + 1; name = name + ni.toString(); $(this).data("nameindex", ni); return false; } }); } itemHTML = '
' + name + '
'; } let x = event.pageX, y = event.pageY, $container = $(this); let curtop = y - $container.offset().top + $container.scrollTop(); let position = _this.moveitemposition; let row_index = luckysheet_searcharray(position, curtop); if ( _this.movesave.containerid == "luckysheet-modal-dialog-pivotTable-list" || (_this.movesave.containerid == "luckysheet-modal-dialog-config-value" && _this.movesave.containerid != $t.attr("id")) ) { $( "#luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column", ) .find(".luckysheet-modal-dialog-slider-config-item") .each(function() { if ($(this).data("index") == _this.movesave.index) { $(this).remove(); } }); } if (row_index == -1) { if ($t.find(".luckysheet-modal-dialog-slider-config-item").length == 0) { $t.append(itemHTML); } else { $t.find(".luckysheet-modal-dialog-slider-config-item") .last() .after(itemHTML); } } else if ( curtop - position[row_index - 1] > (position[row_index] - position[row_index - 1]) / 2 ) { $t.find(".luckysheet-modal-dialog-slider-config-item") .eq(row_index - 1) .after(itemHTML); } else { $t.find(".luckysheet-modal-dialog-slider-config-item") .eq(row_index - 1) .before(itemHTML); } if (_this.movesave.containerid == "luckysheet-modal-dialog-pivotTable-list") { } else if ( _this.movesave.containerid == "luckysheet-modal-dialog-config-value" && _this.movesave.containerid != $t.attr("id") ) { } else { _this.movesave.obj.remove(); } $("#luckysheet-modal-dialog-pivotTable-list") .find(".luckysheet-modal-dialog-slider-list-item") .each(function() { let $seleted = $(this).find(".luckysheet-slider-list-item-selected"); if ($(this).data("index") == _this.movesave.index && $seleted.find("i").length == 0) { $seleted.append(''); } }); _this.refreshPivotTable(); $("#luckysheet-modal-dialog-slider-pivot-move").remove(); _this.movestate = false; $( "#luckysheet-modal-dialog-pivotTable-list, #luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value", ).css("cursor", "default"); _this.moveitemposition = []; $("#luckysheet-modal-dialog-config-order-help").remove(); _this.showvaluecolrow(); e.stopPropagation(); } }); $("#luckysheet-modal-dialog-pivotTable-list").on( "click", ".luckysheet-slider-list-item-selected", function() { let $t = $(this), $item = $t.parent(), index = $item.data("index"), name = $item.data("name"); if ($t.find("i").length == 0) { $t.append(''); let type = _this.pivot_data_type[index.toString()], itemHTML; if (type == "num") { itemHTML = '
求和:' + name + '
'; $("#luckysheet-modal-dialog-config-value").append(itemHTML); } else { itemHTML = '
' + name + '
'; let $column = $("#luckysheet-modal-dialog-config-column"), $row = $("#luckysheet-modal-dialog-config-row"); let columnitem = $column.find(".luckysheet-modal-dialog-slider-config-item"), rowitem = $row.find(".luckysheet-modal-dialog-slider-config-item"); if (columnitem.length < 2) { $column.append(itemHTML); } else if (rowitem.length < 2) { $row.append(itemHTML); } else { $column.append(itemHTML); } } } else { $t.find("i").remove(); $( "#luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value", ) .find(".luckysheet-modal-dialog-slider-config-item") .each(function() { if ($(this).data("index") == index) { if ( $(this) .parent() .attr("id") == "luckysheet-modal-dialog-config-value" ) { _this.resetOrderby($(this)); } $(this).remove(); } }); } _this.refreshPivotTable(); _this.showvaluecolrow(); }, ); $("#luckysheet-dialog-pivotTable-clearitem").click(function() { $( "#luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value", ) .find(".luckysheet-modal-dialog-slider-config-item") .each(function() { $(this).remove(); }); $("#luckysheet-modal-dialog-pivotTable-list") .find(".luckysheet-modal-dialog-slider-list-item") .each(function() { $(this) .find(".luckysheet-slider-list-item-selected") .find("i") .remove(); }); _this.refreshPivotTable(); _this.showvaluecolrow(); }); } if (restore == null) { restore = false; } if (_this.celldata.length <= 1 && _this.celldata[0].length <= 1) { if (isEditMode()) { alert(locale_pivotTable.errorIncreaseRange); } else { tooltip.info("", locale_pivotTable.errorIncreaseRange); } } let selecteditem = "", selecteditemIndex = 1, selecteditemtest = {}, selecteditemNullIndex = 1; for (let i = 0; i < _this.celldata[0].length; i++) { let name; if (!!_this.celldata[0][i] && !!_this.celldata[0][i]["m"]) { name = _this.celldata[0][i]["m"]; } else { name = getcellvalue(0, i, _this.celldata); } if (name != null) { name = name.toString(); } if (name == null || $.trim(name.toString()).length == 0) { name = locale_pivotTable.titleColumn + " " + selecteditemNullIndex; } selecteditemNullIndex++; if (name in selecteditemtest) { name = name + selecteditemIndex++; if (name in selecteditemtest) { name = name + selecteditemIndex++; if (name in selecteditemtest) { name = name + selecteditemIndex++; } } } selecteditemtest[name] = 1; let dataother = "", style = ""; if (restore && _this.filterparm != null) { if (_this.filterparm[i.toString()] != null) { let itemset = _this.filterparm[i.toString()]; if (itemset.rowhidden != null) { dataother += "data-rowhidden='" + JSON.stringify(itemset.rowhidden) + "'"; } if (itemset.selected != null) { dataother += "data-selected='" + JSON.stringify(itemset.selected) + "'"; } if (itemset.caljs != null) { let caljsset = itemset.caljs; if (caljsset.value != null) { dataother += "data-byconditionvalue='" + caljsset.value + "'"; } if (caljsset.type != null) { dataother += "data-byconditiontype='" + caljsset.type + "'"; } if (caljsset.text != null) { dataother += "data-byconditiontext='" + caljsset.text + "'"; } if (caljsset.value1 != null) { dataother += "data-byconditionvalue1='" + caljsset.value1 + "'"; } if (caljsset.value2 != null) { dataother += "data-byconditionvalue2='" + caljsset.value2 + "'"; } } } } if (dataother.length > 0) { style = "display:block;"; } selecteditem += '
' + name + '
'; } $("#luckysheet-modal-dialog-pivotTable-list").html(selecteditem); $("#luckysheetpivottablevaluecolrowshow").hide(); $("#luckysheetpivottablevaluecolrow").prop("checked", true); $("#luckysheetpivottablevaluecolrow1").prop("checked", false); $( "#luckysheet-modal-dialog-config-filter, #luckysheet-modal-dialog-config-row, #luckysheet-modal-dialog-config-column, #luckysheet-modal-dialog-config-value", ).empty(); if (restore) { if (_this.filter != null && _this.filter.length > 0) { for (let i = 0; i < _this.filter.length; i++) { let item = _this.filter[i]; let itemHTML = '
' + item.name + '
'; $("#luckysheet-modal-dialog-config-filter").append(itemHTML); let $seleted = $( "#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item", ) .eq(item.index) .find(".luckysheet-slider-list-item-selected"); if ($seleted.find("i").length == 0) { $seleted.append(''); } } } if (_this.row != null && _this.row.length > 0) { for (let i = 0; i < _this.row.length; i++) { let item = _this.row[i]; let otherset = ""; if (item.order != null) { otherset += "data-order = '" + item.order + "'"; } if (item.orderby != null) { otherset += "data-orderby = '" + item.orderby + "'"; } if (item.order != null) { otherset += "data-stastic = '" + item.stastic + "'"; } let itemHTML = '
' + item.name + '
'; $("#luckysheet-modal-dialog-config-row").append(itemHTML); let $seleted = $( "#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item", ) .eq(item.index) .find(".luckysheet-slider-list-item-selected"); if ($seleted.find("i").length == 0) { $seleted.append(''); } } } if (_this.column != null && _this.column.length > 0) { for (let i = 0; i < _this.column.length; i++) { let item = _this.column[i]; let otherset = ""; if (item.order != null) { otherset += "data-order = '" + item.order + "'"; } if (item.orderby != null) { otherset += "data-orderby = '" + item.orderby + "'"; } if (item.order != null) { otherset += "data-stastic = '" + item.stastic + "'"; } let itemHTML = '
' + item.name + '
'; $("#luckysheet-modal-dialog-config-column").append(itemHTML); let $seleted = $( "#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item", ) .eq(item.index) .find(".luckysheet-slider-list-item-selected"); if ($seleted.find("i").length == 0) { $seleted.append(''); } } } if (_this.values != null && _this.values.length > 0) { for (let i = 0; i < _this.values.length; i++) { let item = _this.values[i]; let otherset = ""; if (item.sumtype != null) { otherset += "data-sumtype = '" + item.sumtype + "'"; } if (item.nameindex != null) { otherset += "data-nameindex = '" + item.nameindex + "'"; } let itemHTML = '
' + _this.getSumTypeName(item.sumtype) + ":" + item.name + '
'; $("#luckysheet-modal-dialog-config-value").append(itemHTML); let $seleted = $( "#luckysheet-modal-dialog-pivotTable-list .luckysheet-modal-dialog-slider-list-item", ) .eq(item.index) .find(".luckysheet-slider-list-item-selected"); if ($seleted.find("i").length == 0) { $seleted.append(''); } } if (_this.values.length >= 2) { $("#luckysheetpivottablevaluecolrowshow").show(); if (_this.showType == "column") { $("#luckysheetpivottablevaluecolrow").prop("checked", true); $("#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow']").addClass( "ui-state-active", ); $("#luckysheetpivottablevaluecolrow1").prop("checked", false); $( "#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow1']", ).removeClass("ui-state-active"); } else { $("#luckysheetpivottablevaluecolrow1").prop("checked", true); $( "#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow1']", ).addClass("ui-state-active"); $("#luckysheetpivottablevaluecolrow").prop("checked", false); $( "#luckysheetpivottablevaluecolrowshow label[for='luckysheetpivottablevaluecolrow']", ).removeClass("ui-state-active"); } } } } $("#luckysheet-dialog-pivotTable-range").html(getRangetxt(_this.pivotDataSheetIndex, _this.pivot_select_save)); $("#luckysheet-modal-dialog-slider-pivot").show(); luckysheetsizeauto(false); }, getComposeArray: function(data) { if (data.length == 0) { return []; } let ret = []; for (let i = 0; i < data.length; i++) { let name = ""; for (let x = 0; x <= i; x++) { if (!!data[x] && !!data[x]["m"]) { name += data[x]["m"]; } else { name += getcellvalue(x, null, data); } } ret.push(name); } return ret; }, getnameArray: function(data, field) { if (data.length == 0) { return []; } if (field.length == 0) { return []; } let ret = []; for (let i = 0; i < field.length; i++) { let c_value; if (!!data[field[i].index] && !!data[field[i].index]["m"]) { c_value = data[field[i].index]["m"]; } else { c_value = getcellvalue(field[i].index, null, data); } ret.push(c_value); } return ret; }, getTitleFromGroup: function(group, config, dataposition) { let _this = this; let orderbygroup = _this.orderbygroup(group, config, dataposition); return _this.generategrouparraymain(orderbygroup, config); }, orderbygroup: function(group, config, dataposition) { let _this = this; let stackset = []; if (group.length == 0) { return []; } stackset = group; let d = null, alllength = stackset.length, alllengthInital = stackset.length, a = 0; while (alllength != 0) { d = stackset[a++]; alllength--; if (d.children != null && d.children.length > 0) { d.children = _this.orderbygroupchildren( d.children, config[d.index].orderby, config[d.index].order, dataposition, ); for (let i = 0; i < d.children.length; i++) { stackset.push(d.children[i]); alllength++; } } } return group.splice(0, alllengthInital); }, orderbygroupchildren: function(childrens, orderby, order, dataposition) { if (childrens.length == 0) { return []; } let isAsc = false; if (order == null || order == "asc") { isAsc = true; } const _locale = locale(); const locale_filter = _locale.filter; let a = function(x, y) { let f = null, s = null; if (orderby == "self" || orderby == null) { if (x.name == null) { f = locale_filter.valueBlank; } else { f = x.name.toString(); } if (y.name == null) { s = locale_filter.valueBlank; } else { s = y.name.toString(); } if (isdatetime(f) && isdatetime(s)) { return diff(f, s); } } else { f = parseFloat(dataposition[x.orderby].result); s = parseFloat(dataposition[y.orderby].result); } if (!isNaN(f) && !isNaN(s)) { return numeral(f).value() - numeral(s).value(); } else if (isNaN(f) && isNaN(s)) { return f.localeCompare(s); } else if (isNaN(f)) { return 1; } else if (isNaN(s)) { return -1; } }; let d = function(x, y) { let f = null, s = null; if (orderby == "self" || orderby == null) { if (x.name == null) { f = locale_filter.valueBlank; } else { f = x.name.toString(); } if (y.name == null) { s = locale_filter.valueBlank; } else { s = y.name.toString(); } if (isdatetime(f) && isdatetime(s)) { return diff(f, s); } } else { f = parseFloat(dataposition[x.orderby].result); s = parseFloat(dataposition[y.orderby].result); } if (!isNaN(f) && !isNaN(s)) { return numeral(s).value() - numeral(f).value(); } else if (isNaN(f) && isNaN(s)) { return s.localeCompare(f); } else if (isNaN(f)) { return -1; } else if (isNaN(s)) { return 1; } }; if (isAsc) { return childrens.sort(a); } else { return childrens.sort(d); } }, generategroupaddstatic: function(arr, name) { let stasticarr = []; const _locale = locale(); const locale_pivotTable = _locale.pivotTable; for (let a = 0; a < arr[0].length; a++) { if (a == 0) { if (name == locale_pivotTable.valueSum) { stasticarr.push(name); } else { stasticarr.push({ name: name, issum: true }); } } else { stasticarr.push(""); } } return stasticarr; }, generategrouparraymain: function(group, config) { let _this = this; //生成数组 let ret = []; for (let i = 0; i < group.length; i++) { let name = group[i].name; let arr = _this.generategrouparray(group[i].children, config, 1); if (config[0].stastic == "1" || config[0].stastic == null) { arr.push(_this.generategroupaddstatic(arr, name)); } ret = ret.concat(arr); } return ret; }, generategrouparray: function(group, config, level) { let _this = this; let ret = []; for (let i = 0; i < group.length; i++) { let name = group[i].name; let arr; if (group[i].children == 0 || group[i].children.length == 0) { arr = [name]; ret.push(arr); } else { arr = _this.generategrouparray(group[i].children, config, level + 1); for (let a = 0; a < arr.length; a++) { arr[a].unshift(name); } if (config[level].stastic == "1" || config[level].stastic == null) { arr.push(_this.generategroupaddstatic(arr, name)); } ret = ret.concat(arr); } } return ret; }, addStatisticsData: function(dataposition, valueobj, indicator, d_value) { if (dataposition[indicator] == null) { dataposition[indicator] = { data: [], count: 0, max: -Infinity, min: Infinity, counta: 0, countunique: 0, countuniquedata: {}, sum: 0, digitaldata: [], sumtype: valueobj.sumtype, index: valueobj.index, name: valueobj.fullname, acc: 0, }; } if (isdatatypemulti(d_value)["num"] === true) { //fix issue 265 let num = numFormat(d_value, 6); dataposition[indicator]["digitaldata"].push(num); dataposition[indicator]["count"] += 1; dataposition[indicator]["sum"] += num; if (num > dataposition[indicator]["max"]) { dataposition[indicator]["max"] = num; } if (num < dataposition[indicator]["min"]) { dataposition[indicator]["min"] = num; } let newAcc = numfloatlen(num); if (newAcc > dataposition[indicator]["acc"]) { dataposition[indicator]["acc"] = newAcc; } } if (d_value != "") { dataposition[indicator]["data"].push(d_value); dataposition[indicator]["counta"] += 1; if (!(d_value in dataposition[indicator]["countuniquedata"])) { dataposition[indicator]["countuniquedata"][d_value] = 1; dataposition[indicator]["countunique"] += 1; } } }, dataHandler: function(column, row, values, showType, celldata) { //column:[{"index":1, name:"列1", "order":"asc", "orderby":"self/0/1/2", "stastic":"0/1"}] //row:[{"index":1, name:"列3", "order":"asc", "orderby":"self/0/1/2", "stastic":"0/1"}] //values:[{"index":1, "sumtype":"SUM/COUNT/COUNTA/COUNTUNIQUE/AVERAGE/MAX/MIN/MEDIAN/PRODUCT/STDEV/STDEVP/let/VARP", "name":"求和:fyc"}] let _this = this; const _locale = locale(); const locale_filter = _locale.filter; const locale_pivotTable = _locale.pivotTable; if (showType == null) { showType = "column"; } if ((column.length == 0 && row.length == 0 && values.length == 0) || celldata.length == 0) { _this.pivotDatas = []; return []; } //生成透视表值及定位 let dataposition = {}, data = celldata, datarowtitle = [], datarowtitlegroup = [], datarowposition = {}, datarowposition_i = 0, datacoltitle = [], datacoltitlegroup = [], datacolposition = {}, datacolposition_i = 0; for (let i = 1; i < data.length; i++) { let d = data[i]; let groupbyrowtxt = "", groupbycoltxt = "", rowtxt = "", rowtitle = [], rowtitlename = [], coltxt = "", coltitle = [], coltitlename = []; //["四川", "成都", "邛崃"] 转换为 ["四川", "四川成都", "四川成都邛崃"] rowtitlename = _this.getnameArray(d, row); coltitlename = _this.getnameArray(d, column); rowtitle = _this.getComposeArray(rowtitlename); coltitle = _this.getComposeArray(coltitlename); if (rowtitle.length > 0) { rowtitle.unshift(locale_pivotTable.valueSum); } if (coltitle.length > 0) { coltitle.unshift(locale_pivotTable.valueSum); } let curentLevelobj_row = datarowposition, curentLevelarr_row = datarowtitlegroup; for (let r = 0; r < rowtitle.length; r++) { let item = rowtitle[r], name = r == 0 ? locale_pivotTable.valueSum : rowtitlename[r - 1]; //修改 if (curentLevelobj_row[r.toString()] != null && curentLevelobj_row[r.toString()][item] != null) { //修改 curentLevelarr_row = curentLevelarr_row[curentLevelobj_row[r.toString()][item]].children; } else { let orderby = r == 0 ? "self" : row[r - 1].orderby == "self" || row[r - 1].orderby == null ? item : showType == "column" ? item + values[parseInt(row[r - 1].orderby)].fullname : item + locale_pivotTable.valueSum; if (name == null) { name = locale_filter.valueBlank; } curentLevelarr_row.push({ name: name, fullname: item, index: r, orderby: orderby, children: [] }); if (curentLevelobj_row[r.toString()] == null) { curentLevelobj_row[r.toString()] = {}; } if (curentLevelobj_row[r.toString()][item] == null) { curentLevelobj_row[r.toString()][item] = curentLevelarr_row.length - 1; } curentLevelarr_row = curentLevelarr_row[curentLevelarr_row.length - 1].children; } } let curentLevelobj_col = datacolposition, curentLevelarr_col = datacoltitlegroup; for (let r = 0; r < coltitle.length; r++) { let item = coltitle[r], name = r == 0 ? locale_pivotTable.valueSum : coltitlename[r - 1]; if (curentLevelobj_col[r.toString()] != null && curentLevelobj_col[r.toString()][item] != null) { curentLevelarr_col = curentLevelarr_col[curentLevelobj_col[r.toString()][item]].children; } else { let orderby = r == 0 ? "self" : column[r - 1].orderby == "self" || column[r - 1].orderby == null ? item : showType == "column" ? locale_pivotTable.valueSum + item : values[parseInt(column[r - 1].orderby)].fullname + item; if (name == null) { name = locale_filter.valueBlank; } curentLevelarr_col.push({ name: name, fullname: item, index: r, orderby: orderby, children: [] }); if (curentLevelobj_col[r.toString()] == null) { curentLevelobj_col[r.toString()] = {}; } if (curentLevelobj_col[r.toString()][item] == null) { curentLevelobj_col[r.toString()][item] = curentLevelarr_col.length - 1; } curentLevelarr_col = curentLevelarr_col[curentLevelarr_col.length - 1].children; } } let v_str = ""; for (let v = 0; v < values.length; v++) { let d_value = getcellvalue(values[v].index, null, d); let coltitle_c = [].concat(coltitle), rowtitle_c = [].concat(rowtitle); if (showType == "column") { if (coltitle_c.length > 0) { coltitle_c.push(""); coltitle_c = coltitle_c .join(values[v].fullname + "|||") .split("|||") .slice(0, coltitle_c.length - 1); } else { coltitle_c.push(values[v].fullname); } } else { if (rowtitle_c.length > 0) { rowtitle_c.push(""); rowtitle_c = rowtitle_c .join(values[v].fullname + "|||") .split("|||") .slice(0, rowtitle_c.length - 1); } else { rowtitle_c.push(values[v].fullname); } } if (coltitle_c.length == 0) { coltitle_c.push(""); } if (rowtitle_c.length == 0) { rowtitle_c.push(""); } for (let r = 0; r < rowtitle_c.length; r++) { for (let c = 0; c < coltitle_c.length; c++) { let indicator = rowtitle_c[r] + coltitle_c[c]; _this.addStatisticsData(dataposition, values[v], indicator, d_value); } } } } //计算值列 //SUM/COUNT/COUNTA/COUNTUNIQUE/AVERAGE/MAX/MIN/MEDIAN/PRODUCT/STDEV/STDEVP/let/VARP for (let indicator in dataposition) { let json = dataposition[indicator]; if (json.sumtype == "SUM") { json.result = json.sum; } else if (json.sumtype == "COUNT") { json.result = json.count; } else if (json.sumtype == "COUNTA") { json.result = json.counta; } else if (json.sumtype == "COUNTUNIQUE") { json.result = json.countunique; } else if (json.sumtype == "AVERAGE") { json.result = numFormat(json.sum / json.count); } else if (json.sumtype == "MAX") { json.result = json.max; } else if (json.sumtype == "MIN") { json.result = json.min; } else if (json.sumtype == "MEDIAN") { let numArr = json.digitaldata.sort(function(a, b) { return a - b; }); let numLen = numArr.length; let numindex = parseInt(numLen / 2); if (numLen % 2 == 0) { json.result = (numArr[numindex - 1] + numArr[numindex]) / 2; } else { json.result = numArr[numindex]; } } else if (json.sumtype == "PRODUCT") { json.result = new Function("return " + json.digitaldata.join("*"))(); } else if (json.sumtype == "STDEV") { let mean = json.sum / json.count; json.result = analysis.STDEV(mean, json.digitaldata); } else if (json.sumtype == "STDEVP") { let mean = json.sum / json.count; json.result = analysis.STDEVP(mean, json.digitaldata); } else if (json.sumtype == "let") { let mean = json.sum / json.count; json.result = analysis.let(mean, json.digitaldata); } else if (json.sumtype == "VARP") { let mean = json.sum / json.count; json.result = analysis.VARP(mean, json.digitaldata); } let newAcc = numfloatlen(json.result); if (newAcc > json.acc) { json.acc = newAcc; } json.result = numFormat(json.result, json.acc); } datarowtitle = _this.getTitleFromGroup(datarowtitlegroup, row, dataposition); datacoltitle = _this.getTitleFromGroup(datacoltitlegroup, column, dataposition); //加入值到列/行形成新的表头 if (showType == "column") { if (datacoltitle.length > 0 && datacoltitle[0].length > 0) { datacoltitle = _this.addValuesToTitle(datacoltitle, values); } else { for (let v = 0; v < values.length; v++) { datacoltitle.push([values[v].fullname]); } } } else { if (datarowtitle.length > 0 && datarowtitle[0].length > 0) { datarowtitle = _this.addValuesToTitle(datarowtitle, values); } else { for (let v = 0; v < values.length; v++) { datarowtitle.push([values[v].fullname]); } } } let datacoltitle_index = datacoltitle; datacoltitle = luckysheetArray.transpose(datacoltitle, false); let valuenslen = values.length == 0 ? 0 : 1; let rowLen = (datacoltitle.length == 0 ? valuenslen : datacoltitle.length) + (datarowtitle.length == 0 ? valuenslen : datarowtitle.length), colLen = (datacoltitle.length == 0 ? valuenslen : datacoltitle[0].length) + (datarowtitle.length == 0 ? valuenslen : datarowtitle[0].length); let rowOver = datacoltitle.length, colOver = datarowtitle.length == 0 ? 0 : datarowtitle[0].length; let retdata = []; for (let r = 0; r < rowLen; r++) { retdata[r] = new Array(colLen); for (let c = 0; c < colLen; c++) { let drt = datarowtitle[r - rowOver]; if (r < rowOver && c < colOver) { //空白列头 retdata[r][c] = ""; } else if (r < rowOver && c >= colOver) { //列标题 if (datacoltitle[r] != null) { if (getObjType(datacoltitle[r][c - colOver]) == "object") { retdata[r][c] = datacoltitle[r][c - colOver].name + locale_pivotTable.valueSum; } else { retdata[r][c] = datacoltitle[r][c - colOver]; } } else { retdata[r][c] = ""; } } else if (r >= rowOver && c < colOver) { //行标题 if (drt != null) { if (getObjType(drt[c]) == "object") { retdata[r][c] = drt[c].name + locale_pivotTable.valueSum; } else { retdata[r][c] = drt[c]; } } else { retdata[r][c] = ""; } } else { //单元格内容 let prefix = ""; if (drt != null) { if (!(drt instanceof Array) || drt.length == 1) { if (drt instanceof Array) { prefix = drt[0]; } else { prefix = drt; } } else { for (let x = 0; x < drt.length; x++) { if (getObjType(drt[x]) == "object") { prefix += drt[x].name; } else { prefix += drt[x]; } } } } let suffix = ""; let dct = datacoltitle_index[c - colOver]; if (dct != null) { if (!(dct instanceof Array) || dct.length == 1) { if (dct instanceof Array) { suffix = dct[0]; } else { suffix = dct; } } else { for (let x = 0; x < dct.length; x++) { if (getObjType(dct[x]) == "object") { suffix += dct[x].name; } else { suffix += dct[x]; } } } } let indicator = prefix; if (prefix != "" && suffix != "") { indicator = prefix + suffix; } else if (prefix == "") { indicator = suffix; } if (dataposition[indicator] == null) { retdata[r][c] = ""; } else { retdata[r][c] = dataposition[indicator].result; } } } } if (values.length == 1 && column.length > 0 && row.length > 0) { retdata[0][0] = values[0].fullname; retdata.splice(column.length, 1); } else if (values.length == 1 && column.length > 0) { // 0: (6) ["English", "foreign language", "mathematics", "science", "Sum", undefined] // 1: (6) ["CountA:score", "CountA:score", "CountA:score", "CountA:score", "CountA:score", undefined] // 2: (6) [3, 3, 3, 3, 12, ""] //The above format does not meet viewing habits,Process retdata into the correct format let titleRow = retdata.splice(column.length, 1); let newRetdata = []; for (let r = 0; r < retdata.length; r++) { let row = []; if (r == retdata.length - 1) { row.push(titleRow[0][0]); } else { row.push(""); } for (let c = 0; c < retdata[r].length - 1; c++) { row.push(retdata[r][c]); } newRetdata.push(row); } retdata = newRetdata; } _this.pivotDatas = retdata; return retdata; }, drillDown: function(row_index, col_index) { if (!checkProtectionAuthorityNormal(Store.currentSheetIndex, "usePivotTablereports")) { return; } let _this = this; let cell = _this.pivotDatas[row_index][col_index]; let d = $.extend(true, [], sheetmanage.nulldata); const _locale = locale(); const locale_filter = _locale.filter; const locale_pivotTable = _locale.pivotTable; let selecteditemNullIndex = 1; for (let i = 0; i < _this.celldata[0].length; i++) { let name; if (!!_this.celldata[0][i] && !!_this.celldata[0][i]["m"]) { name = _this.celldata[0][i]["m"]; } else { name = getcellvalue(0, i, _this.celldata); } if (name != null) { name = name.toString(); } if (name == null || $.trim(name.toString()).length == 0) { name = locale_pivotTable.titleColumn + " " + selecteditemNullIndex; } selecteditemNullIndex++; d[0][i] = name; } let obj = {}; //行 if (_this.row != null && _this.row.length > 0) { for (let a = 0; a < _this.row.length; a++) { obj[_this.row[a]["index"]] = _this.pivotDatas[row_index][a]; } } //列 if (_this.column != null && _this.column.length > 0) { for (let b = 0; b < _this.column.length; b++) { obj[_this.column[b]["index"]] = _this.pivotDatas[b][col_index]; } } let rowArr = []; for (let j = 1; j < _this.celldata.length; j++) { let isEqual = true; for (let x in obj) { let value; if (!!_this.celldata[j][x] && !!_this.celldata[j][x]["m"]) { value = _this.celldata[j][x]["m"]; } else { value = getcellvalue(j, x, _this.celldata); } if (value != null) { value = value.toString(); } else { value = locale_filter.valueBlank; } if (value != obj[x]) { isEqual = false; break; } } if (isEqual) { rowArr.push(j); } } for (let r = 0; r < rowArr.length; r++) { for (let c = 0; c < _this.celldata[0].length; c++) { let value; if (!!_this.celldata[rowArr[r]][c] && !!_this.celldata[rowArr[r]][c]["m"]) { value = _this.celldata[rowArr[r]][c]["m"]; } else { value = getcellvalue(rowArr[r], c, _this.celldata); } if (value != null) { value = value.toString(); } else { value = ""; } d[r + 1][c] = value; } } Store.luckysheet_select_save = [{ row: [0, rowArr.length], column: [0, _this.celldata[0].length - 1] }]; Store.clearjfundo = false; jfrefreshgrid(d, Store.luckysheet_select_save); selectHightlightShow(); Store.clearjfundo = true; }, }; export default pivotTable;