|
@@ -0,0 +1,306 @@
|
|
|
+/**
|
|
|
+ * Created by Tony on 2018/9/4.
|
|
|
+ */
|
|
|
+
|
|
|
+let virtualSummaryOprObj = {
|
|
|
+ summaryWorkBook: null,
|
|
|
+ summaryParentNode: null,
|
|
|
+ iniSpreadJs: function (summaryParentNode) {
|
|
|
+ let me = this;
|
|
|
+ if (me.summaryWorkBook === null) {
|
|
|
+ me.summaryWorkBook = new GC.Spread.Sheets.Workbook($('#rptTplSummaryWorkbook')[0], {sheetCount: 1});
|
|
|
+ me.summaryWorkBook.options.tabStripVisible = false;
|
|
|
+ me.summaryWorkBook.options.allowCopyPasteExcelStyle = false;
|
|
|
+ me.summaryWorkBook.options.allowUserDragDrop = false;
|
|
|
+ me.summaryWorkBook.options.allowContextMenu = false;
|
|
|
+ let sheet = me.summaryWorkBook.getActiveSheet();
|
|
|
+ sheet.options.allowCellOverflow = false;
|
|
|
+ sheet.options.clipBoardOptions = GC.Spread.Sheets.ClipboardPasteOptions.values;
|
|
|
+ sheet.bind(GC.Spread.Sheets.Events.EnterCell, me.onCellEnter);
|
|
|
+ }
|
|
|
+ me.summaryParentNode = summaryParentNode;
|
|
|
+ },
|
|
|
+ restoreSummary: function () {
|
|
|
+ let me = this;
|
|
|
+ let rptTpl = (zTreeOprObj.currentNode)?zTreeOprObj.currentNode.rptTpl:null;
|
|
|
+ me.setupSummary(rptTpl, me.summaryParentNode);
|
|
|
+ },
|
|
|
+ setupSummary: function (rptTpl, summaryParentNode) {
|
|
|
+ let me = this, columnParentNode = null;
|
|
|
+ let selectedBand = virtualCommonOprObj.getBandEx(summaryParentNode[JV.PROP_BAND_NAME], rptTpl);
|
|
|
+ if (summaryParentNode && selectedBand) {
|
|
|
+ let preNode = summaryParentNode.getPreNode();
|
|
|
+ while (preNode) {
|
|
|
+ if (preNode[JV.PROP_NAME] === JV.NODE_FLOW_COLUMN) {
|
|
|
+ columnParentNode = preNode;
|
|
|
+ break;
|
|
|
+ } else {
|
|
|
+ preNode = preNode.getPreNode();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let fieldNode = summaryParentNode.items[0], textNode = summaryParentNode.items[1];
|
|
|
+ if (columnParentNode) {
|
|
|
+ let yColumnPos = [], xPos = [], ySummaryPos = [0], xSummaryPos = [0];
|
|
|
+ let sheet = me.summaryWorkBook.getActiveSheet();
|
|
|
+ let columnBand = virtualCommonOprObj.getBandEx(columnParentNode[JV.PROP_BAND_NAME], rptTpl);
|
|
|
+ let bandH = Math.round(parseFloat(columnBand[JV.BAND_PROP_HEIGHT]) / 2.54 * 96);
|
|
|
+ let bandW = 700;
|
|
|
+ let pIdx = JV.PAGES_SIZE_STR.indexOf(rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_PAGE_SIZE]);
|
|
|
+ if (pIdx >= 0) {
|
|
|
+ bandW = Math.round(JV.PAGES_SIZE[pIdx][0] * 96 - (parseFloat(rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_LEFT]) + parseFloat(rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_RIGHT])) /2.54*96 );
|
|
|
+ if (rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION] === JV.ORIENTATION_LANDSCAPE ||
|
|
|
+ rptTpl[JV.NODE_MAIN_INFO][JV.NODE_PAGE_INFO][JV.PROP_ORIENTATION] === JV.ORIENTATION_LANDSCAPE_CHN) {
|
|
|
+ bandW = Math.round(JV.PAGES_SIZE[pIdx][1] * 96 - (parseFloat(rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_LEFT]) + parseFloat(rptTpl[JV.NODE_MAIN_INFO][JV.NODE_MARGINS][JV.PROP_RIGHT])) /2.54*96 );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //1. 设置column位置(让用户知道位置,后期无需用户再调)
|
|
|
+ for (let itemNode of columnParentNode.items) {
|
|
|
+ virtualCommonOprObj.pushPos(itemNode, itemNode[JV.PROP_AREA][JV.PROP_H_CALCULATION], JV.PROP_LEFT, bandW, xPos);
|
|
|
+ virtualCommonOprObj.pushPos(itemNode, itemNode[JV.PROP_AREA][JV.PROP_H_CALCULATION], JV.PROP_RIGHT, bandW, xPos);
|
|
|
+ virtualCommonOprObj.pushPos(itemNode, itemNode[JV.PROP_AREA][JV.PROP_V_CALCULATION], JV.PROP_TOP, bandH, yColumnPos);
|
|
|
+ virtualCommonOprObj.pushPos(itemNode, itemNode[JV.PROP_AREA][JV.PROP_V_CALCULATION], JV.PROP_BOTTOM, bandH, yColumnPos);
|
|
|
+ }
|
|
|
+
|
|
|
+ sheet.setRowCount(yColumnPos.length - 1, GC.Spread.Sheets.SheetArea.colHeader);
|
|
|
+ sheet.setColumnCount(xPos.length - 1, GC.Spread.Sheets.SheetArea.viewport);
|
|
|
+ // sheet.clear();
|
|
|
+
|
|
|
+ xPos.sort(function(x1, x2){
|
|
|
+ return (x1 - x2);
|
|
|
+ });
|
|
|
+ yColumnPos.sort(function(y1, y2){
|
|
|
+ return (y1 - y2);
|
|
|
+ });
|
|
|
+ for (let idx = 1; idx < xPos.length; idx++) {
|
|
|
+ sheet.setColumnWidth(idx - 1, xPos[idx] - xPos[idx - 1]);
|
|
|
+ }
|
|
|
+ for (let idx = 1; idx < yColumnPos.length; idx++) {
|
|
|
+ sheet.setRowHeight(idx - 1, yColumnPos[idx] - yColumnPos[idx - 1]);
|
|
|
+ sheet.getRange(idx - 1, -1, 1, -1).backColor(undefined);
|
|
|
+ }
|
|
|
+ for (let itemNode of columnParentNode.items) {
|
|
|
+ let idx1 = xPos.indexOf(virtualCommonOprObj.getActPosEx(itemNode, itemNode[JV.PROP_AREA][JV.PROP_H_CALCULATION], JV.PROP_LEFT, bandW, xPos));
|
|
|
+ let idx2 = xPos.indexOf(virtualCommonOprObj.getActPosEx(itemNode, itemNode[JV.PROP_AREA][JV.PROP_H_CALCULATION], JV.PROP_RIGHT, bandW, xPos));
|
|
|
+ let idy1 = yColumnPos.indexOf(virtualCommonOprObj.getActPosEx(itemNode, itemNode[JV.PROP_AREA][JV.PROP_V_CALCULATION], JV.PROP_TOP, bandH, yColumnPos));
|
|
|
+ let idy2 = yColumnPos.indexOf(virtualCommonOprObj.getActPosEx(itemNode, itemNode[JV.PROP_AREA][JV.PROP_V_CALCULATION], JV.PROP_BOTTOM, bandH, yColumnPos));
|
|
|
+ if (idx2 - idx1 > 1 || idy2 - idy1 > 1) {
|
|
|
+ sheet.addSpan(idy1, idx1, idy2 - idy1, idx2 - idx1, GC.Spread.Sheets.SheetArea.colHeader);
|
|
|
+ }
|
|
|
+ me.private_setupCell(sheet.getCell(idy1, idx1, GC.Spread.Sheets.SheetArea.colHeader), rptTpl, itemNode);
|
|
|
+ }
|
|
|
+ //2. 设置已有的统计信息
|
|
|
+ let sumBandH = Math.round(parseFloat(selectedBand[JV.BAND_PROP_HEIGHT]) / 2.54 * 96);
|
|
|
+ for (let fNode of fieldNode.items) {
|
|
|
+ virtualCommonOprObj.pushPos(fNode, fNode[JV.PROP_AREA][JV.PROP_H_CALCULATION], JV.PROP_LEFT, bandW, xSummaryPos);
|
|
|
+ virtualCommonOprObj.pushPos(fNode, fNode[JV.PROP_AREA][JV.PROP_H_CALCULATION], JV.PROP_RIGHT, bandW, xSummaryPos);
|
|
|
+ virtualCommonOprObj.pushPos(fNode, fNode[JV.PROP_AREA][JV.PROP_V_CALCULATION], JV.PROP_TOP, sumBandH, ySummaryPos);
|
|
|
+ virtualCommonOprObj.pushPos(fNode, fNode[JV.PROP_AREA][JV.PROP_V_CALCULATION], JV.PROP_BOTTOM, sumBandH, ySummaryPos);
|
|
|
+ }
|
|
|
+ for (let tNode of textNode.items) {
|
|
|
+ virtualCommonOprObj.pushPos(tNode, tNode[JV.PROP_AREA][JV.PROP_H_CALCULATION], JV.PROP_LEFT, bandW, xSummaryPos);
|
|
|
+ virtualCommonOprObj.pushPos(tNode, tNode[JV.PROP_AREA][JV.PROP_H_CALCULATION], JV.PROP_RIGHT, bandW, xSummaryPos);
|
|
|
+ virtualCommonOprObj.pushPos(tNode, tNode[JV.PROP_AREA][JV.PROP_V_CALCULATION], JV.PROP_TOP, sumBandH, ySummaryPos);
|
|
|
+ virtualCommonOprObj.pushPos(tNode, tNode[JV.PROP_AREA][JV.PROP_V_CALCULATION], JV.PROP_BOTTOM, sumBandH, ySummaryPos);
|
|
|
+ }
|
|
|
+ sheet.setRowCount(ySummaryPos.length - 1, GC.Spread.Sheets.SheetArea.viewport);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ addRow: function () {
|
|
|
+ let me = this,
|
|
|
+ sheet = me.summaryWorkBook.getActiveSheet();
|
|
|
+ sheet.addRows(sheet.getRowCount() - 1, 1);
|
|
|
+ let rc = sheet.getRowCount();
|
|
|
+ for (let cc = 0; cc < sheet.getColumnCount(); cc++) {
|
|
|
+ me.private_setupCellDft(sheet.getCell(rc - 2, cc));
|
|
|
+ }
|
|
|
+ },
|
|
|
+ deleteRow: function () {
|
|
|
+ let me = this,
|
|
|
+ sheet = me.summaryWorkBook.getActiveSheet(),
|
|
|
+ selectedRanges = sheet.getSelections()
|
|
|
+ ;
|
|
|
+ if (selectedRanges.length > 0) {
|
|
|
+ sheet.deleteRows(selectedRanges[0].row, 1);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onCellEnter: function (sender, args) {
|
|
|
+ let me = virtualSummaryOprObj,
|
|
|
+ sheet = me.summaryWorkBook.getActiveSheet();
|
|
|
+ if (args.row === sheet.getRowCount() - 1) {
|
|
|
+ } else {
|
|
|
+ }
|
|
|
+ },
|
|
|
+ mergeCells: function () {
|
|
|
+ let me = virtualSummaryOprObj,
|
|
|
+ sheet = me.summaryWorkBook.getActiveSheet();
|
|
|
+ let selectedRanges = sheet.getSelections();
|
|
|
+ if (selectedRanges.length > 0) {
|
|
|
+ sheet.suspendPaint();
|
|
|
+ sheet.addSpan(selectedRanges[0].row, selectedRanges[0].col, selectedRanges[0].rowCount, selectedRanges[0].colCount);
|
|
|
+ sheet.resumePaint();
|
|
|
+ }
|
|
|
+ },
|
|
|
+ disMergeCells: function () {
|
|
|
+ let me = virtualSummaryOprObj,
|
|
|
+ sheet = me.summaryWorkBook.getActiveSheet();
|
|
|
+ let selectedRanges = sheet.getSelections();
|
|
|
+ let spans =sheet.getSpans();
|
|
|
+ if (selectedRanges.length > 0 && spans.length > 0) {
|
|
|
+ let selectedSpans = [];
|
|
|
+ for(let i = 0; i < spans.length; i++)
|
|
|
+ {
|
|
|
+ for (let j = 0; j < selectedRanges.length; j++) {
|
|
|
+ if (spans[i].row >= selectedRanges[j].row && spans[i].col >= selectedRanges[j].col &&
|
|
|
+ spans[i].row <= selectedRanges[j].row + selectedRanges[j].rowCount && spans[i].col <= selectedRanges[j].col + selectedRanges[j].colCount) {
|
|
|
+ selectedSpans.push(spans[i]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (let span of selectedSpans) {
|
|
|
+ sheet.removeSpan(span.row, span.col, GC.Spread.Sheets.SheetArea.viewport);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ changeCtrl: function (dom) {
|
|
|
+ let me = virtualSummaryOprObj,
|
|
|
+ sheet = me.summaryWorkBook.getActiveSheet()
|
|
|
+ ;
|
|
|
+ let selectedRanges = sheet.getSelections();
|
|
|
+ for(let i = 0; i < selectedRanges.length; i++){
|
|
|
+ // let ctrl = me.columnFieldCtrls[selectedRanges[i].col]
|
|
|
+ // ctrl[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_SHRINK]] = 'F';
|
|
|
+ // ctrl[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_SHOW_ZERO]] = 'F';
|
|
|
+ // ctrl[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_WRAP]] = 'F';
|
|
|
+ // ctrl.isNarrow = false;
|
|
|
+ // ctrl.isAutoHeight = false;
|
|
|
+ // if ($("#eleShrinkEx")[0].checked) {
|
|
|
+ // ctrl[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_SHRINK]] = 'T';
|
|
|
+ // }
|
|
|
+ // if ($("#eleShowZeroEx")[0].checked) {
|
|
|
+ // ctrl[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_SHOW_ZERO]] = 'T';
|
|
|
+ // }
|
|
|
+ // if ($("#eleAutoWrapEx")[0].checked) {
|
|
|
+ // ctrl[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_WRAP]] = 'T';
|
|
|
+ // }
|
|
|
+ // if ($("#eleIsNarrowEx")[0].checked) {
|
|
|
+ // ctrl.isNarrow = true;
|
|
|
+ // }
|
|
|
+ // if ($("#eleIsAutoHeightEx")[0].checked) {
|
|
|
+ // ctrl.isAutoHeight = true;
|
|
|
+ // }
|
|
|
+ //
|
|
|
+ // if ($("#hOptionLeft")[0].checked) {
|
|
|
+ // ctrl[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_HORIZON]] = JV.OUTPUT_ALIGN.H[0];
|
|
|
+ // } else if ($("#hOptionCenter")[0].checked) {
|
|
|
+ // ctrl[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_HORIZON]] = JV.OUTPUT_ALIGN.H[1];
|
|
|
+ // } else {
|
|
|
+ // ctrl[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_HORIZON]] = JV.OUTPUT_ALIGN.H[2];
|
|
|
+ // }
|
|
|
+ // if ($("#vOptionUp")[0].checked) {
|
|
|
+ // ctrl[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]] = JV.OUTPUT_ALIGN.V[0];
|
|
|
+ // } else if ($("#vOptionCenter")[0].checked) {
|
|
|
+ // ctrl[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]] = JV.OUTPUT_ALIGN.V[1];
|
|
|
+ // } else {
|
|
|
+ // ctrl[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]] = JV.OUTPUT_ALIGN.V[2];
|
|
|
+ // }
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ private_setupCellDft: function (cell) {
|
|
|
+ cell.font(`9pt 宋体`);
|
|
|
+ cell.hAlign(GC.Spread.Sheets.HorizontalAlign.center);
|
|
|
+ cell.vAlign(GC.Spread.Sheets.VerticalAlign.center);
|
|
|
+ cell.wordWrap(true);
|
|
|
+ cell.value(``);
|
|
|
+ },
|
|
|
+ private_setupCell: function (cell, rptTpl, textNode) {
|
|
|
+ let me = this;
|
|
|
+ me.private_setCellFont(cell, textNode);
|
|
|
+ me.private_setCellControl(cell, textNode);
|
|
|
+ me.private_setCellStyle(cell, textNode);
|
|
|
+ let value = textNode[JV.PROP_NAME];
|
|
|
+ if (textNode[JV.PROP_NAME].indexOf(`|`) >= 0) {
|
|
|
+ value = textNode[JV.PROP_NAME].split('|').join('\n');
|
|
|
+ }
|
|
|
+ cell.wordWrap(true);
|
|
|
+ cell.value(value);
|
|
|
+ },
|
|
|
+
|
|
|
+ private_setCellControl: function (cell, textNode) {
|
|
|
+ let ctrl = null;
|
|
|
+ if (typeof textNode[JV.PROP_CONTROL] === 'string') {
|
|
|
+ let idx = rpt_tpl_cfg_helper.reportCfg.controlArr.indexOf(textNode[JV.PROP_CONTROL]);
|
|
|
+ ctrl = rpt_tpl_cfg_helper.reportCfg.ctrls[idx];
|
|
|
+ } else {
|
|
|
+ ctrl = textNode[JV.PROP_CONTROL];
|
|
|
+ }
|
|
|
+ if (ctrl) {
|
|
|
+ switch (ctrl.Horizon) {
|
|
|
+ case `center`:
|
|
|
+ cell.hAlign(GC.Spread.Sheets.HorizontalAlign.center);
|
|
|
+ break;
|
|
|
+ case `right`:
|
|
|
+ cell.hAlign(GC.Spread.Sheets.HorizontalAlign.right);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ cell.hAlign(GC.Spread.Sheets.HorizontalAlign.left);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ switch (ctrl.Vertical) {
|
|
|
+ case `center`:
|
|
|
+ cell.vAlign(GC.Spread.Sheets.VerticalAlign.center);
|
|
|
+ break;
|
|
|
+ case `bottom`:
|
|
|
+ cell.vAlign(GC.Spread.Sheets.VerticalAlign.bottom);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ cell.vAlign(GC.Spread.Sheets.VerticalAlign.top);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ private_setCellStyle: function (cell, textNode) {
|
|
|
+ //默认是normal,暂时不管
|
|
|
+ },
|
|
|
+ private_setCellFont: function (cell, textNode) {
|
|
|
+ for (let font of rpt_tpl_cfg_helper.reportCfg.fonts) {
|
|
|
+ if (font.ID === textNode[JV.PROP_FONT]) {
|
|
|
+ cell.font(Math.round(font[JV.FONT_PROPS[JV.FONT_PROP_IDX_HEIGHT]] * 3 / 4) + 'pt ' + font[JV.FONT_PROPS[JV.FONT_PROP_IDX_NAME]]);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ applySummaryBack: function () {
|
|
|
+ let me = this;
|
|
|
+ let rptTpl = (zTreeOprObj.currentNode)?zTreeOprObj.currentNode.rptTpl:null;
|
|
|
+ if (rptTpl && me.summaryParentNode) {
|
|
|
+ let sheet = me.summaryWorkBook.getActiveSheet();
|
|
|
+ let rAmt = sheet.getRowCount(), pixH = [0];
|
|
|
+ if (rAmt > 0) {
|
|
|
+ let texts = [], colWidthArr = [], rowHeightArr = [];
|
|
|
+ virtualCommonOprObj.collectSheetTxt(sheet, texts, colWidthArr, rowHeightArr);
|
|
|
+ for (let node of summaryParentNode.items) {
|
|
|
+ dataInfoMapTreeOprObj.treeObj.removeChildNodes(node);
|
|
|
+ }
|
|
|
+ let txtNodes = [], fieldNodes = [];
|
|
|
+ for (let text of texts) {
|
|
|
+ if (!stringUtil.isEmptyString(text[`text`]) && text[`text`].indexOf(`{`) === 0) {
|
|
|
+ //创建指标
|
|
|
+ } else {
|
|
|
+ //创建文本
|
|
|
+ let node = virtualCommonOprObj.createTxtNode(text, me.columnParentNode, colWidthArr, rowHeightArr);
|
|
|
+ txtNodes.push(node);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //....
|
|
|
+ let selectedBand = virtualCommonOprObj.getBandEx(summaryParentNode[JV.PROP_BAND_NAME], rptTpl);
|
|
|
+ selectedBand[JV.BAND_PROP_HEIGHT] = (rowHeightArr[rowHeightArr.length - 1] / 96 * 2.54).toFixed(2);
|
|
|
+ } else {
|
|
|
+ displayMessage("模板行数量不足!", "red", 2000, "id_summary_setup_lbl");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+};
|