浏览代码

放开签名

TonyKang 4 年之前
父节点
当前提交
461e3987cd
共有 1 个文件被更改,包括 55 次插入56 次删除
  1. 55 56
      app/reports/util/rpt_excel_util.js

+ 55 - 56
app/reports/util/rpt_excel_util.js

@@ -346,10 +346,10 @@ function _setupPgBrks(pageData) {
     }
     for (const page of pageData.items) {
         const maxBottomArr = [];
-        _insertMaxBottom(page.cells, maxBottomArr);
-        _insertMaxBottom(page.signature_cells, maxBottomArr);
-        _insertMaxBottom(page.signature_date_cells, maxBottomArr);
-        _insertMaxBottom(page.signature_audit_cells, maxBottomArr);
+        _insertMaxBottom(page[JV.PROP_CELLS], maxBottomArr);
+        _insertMaxBottom(page[JV.PROP_SIGNATURE_CELLS], maxBottomArr);
+        _insertMaxBottom(page[JV.PROP_SIGNATURE_DATE_CELLS], maxBottomArr);
+        _insertMaxBottom(page[JV.PROP_SIGNATURE_AUDIT_CELLS], maxBottomArr);
         pgBrkIdx += maxBottomArr.length;
         pgBrk.push(pgBrkIdx);
     }
@@ -814,8 +814,8 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
         rst.push('<mergeCells count="?">');
         const startIdx = rst.length - 1;
         const self_setMergedCells = function(theData, theYPos, offsetY) {
-            for (let i = 0; i < theData.cells.length; i++) {
-                const cell = theData.cells[i];
+            for (let i = 0; i < theData[JV.PROP_CELLS].length; i++) {
+                const cell = theData[JV.PROP_CELLS][i];
                 const idxR = xPos.indexOf(cell[JV.PROP_AREA][JV.PROP_RIGHT]);
                 const idxL = xPos.indexOf(cell[JV.PROP_AREA][JV.PROP_LEFT]);
                 const idxB = theYPos.indexOf(cell[JV.PROP_AREA][JV.PROP_BOTTOM]);
@@ -846,6 +846,37 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
         const spanX = xPos.length - 2;
         let cellIdx = 0;
         let h = 0;
+        const self_create_cell = function(cells, rows, theYPos) {
+            let rowIdx1 = 0;
+            let colIdx1 = 0;
+            let rowIdx2 = 0;
+            let colIdx2 = 0;
+            for (let cIdx = 0; cIdx < cells.length; cIdx++) {
+                const styleIdx = private_getStyleId(cells[cIdx]);
+                rowIdx1 = theYPos.indexOf(cells[cIdx][JV.PROP_AREA][JV.PROP_TOP]);
+                colIdx1 = xPos.indexOf(cells[cIdx][JV.PROP_AREA][JV.PROP_LEFT]);
+                let cellObj = rows[rowIdx1 - 1].items[colIdx1 - 1];
+                cellObj.s = styleIdx;
+                cellObj.isBlank = false;
+                if (!(strUtil.isEmptyString(cells[cIdx][JV.PROP_VALUE]))) {
+                    const valIdx = private_getSharedStrIdx(cells[cIdx][JV.PROP_VALUE]);
+                    cellObj.v = valIdx;
+                }
+
+                rowIdx2 = theYPos.indexOf(cells[cIdx][JV.PROP_AREA][JV.PROP_BOTTOM]);
+                colIdx2 = xPos.indexOf(cells[cIdx][JV.PROP_AREA][JV.PROP_RIGHT]);
+                if ((rowIdx2 - rowIdx1 > 1) || (colIdx2 - colIdx1 > 1)) {
+                    for (let i = 0; i < rowIdx2 - rowIdx1; i++) {
+                        for (let j = 0; j < colIdx2 - colIdx1; j++) {
+                            if (i === 0 && j === 0) continue;
+                            cellObj = rows[rowIdx1 - 1 + i].items[colIdx1 - 1 + j];
+                            cellObj.s = styleIdx;
+                            cellObj.isBlank = true;
+                        }
+                    }
+                }
+            }
+        };
         const self_setDataEx = function(theShtData, theYPos, rowOffset) {
             const rows = [];
             // 1. build full set of blank rows/cells
@@ -867,36 +898,10 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
                 }
             }
             // 2. then fill up the cell style-ids and values
-            let rowIdx1 = 0;
-            let colIdx1 = 0;
-            let rowIdx2 = 0;
-            let colIdx2 = 0;
-            // let colIdxStr = '';
-            for (let cIdx = 0; cIdx < theShtData.cells.length; cIdx++) {
-                const styleIdx = private_getStyleId(theShtData.cells[cIdx]);
-                rowIdx1 = theYPos.indexOf(theShtData.cells[cIdx][JV.PROP_AREA][JV.PROP_TOP]);
-                colIdx1 = xPos.indexOf(theShtData.cells[cIdx][JV.PROP_AREA][JV.PROP_LEFT]);
-                let cellObj = rows[rowIdx1 - 1].items[colIdx1 - 1];
-                cellObj.s = styleIdx;
-                cellObj.isBlank = false;
-                if (!(strUtil.isEmptyString(theShtData.cells[cIdx][JV.PROP_VALUE]))) {
-                    const valIdx = private_getSharedStrIdx(theShtData.cells[cIdx][JV.PROP_VALUE]);
-                    cellObj.v = valIdx;
-                }
+            self_create_cell(theShtData[JV.PROP_CELLS], rows, theYPos);
+            self_create_cell(theShtData[JV.PROP_SIGNATURE_DATE_CELLS], rows, theYPos);
+            self_create_cell(theShtData[JV.PROP_SIGNATURE_AUDIT_CELLS], rows, theYPos);
 
-                rowIdx2 = theYPos.indexOf(theShtData.cells[cIdx][JV.PROP_AREA][JV.PROP_BOTTOM]);
-                colIdx2 = xPos.indexOf(theShtData.cells[cIdx][JV.PROP_AREA][JV.PROP_RIGHT]);
-                if ((rowIdx2 - rowIdx1 > 1) || (colIdx2 - colIdx1 > 1)) {
-                    for (let i = 0; i < rowIdx2 - rowIdx1; i++) {
-                        for (let j = 0; j < colIdx2 - colIdx1; j++) {
-                            if (i === 0 && j === 0) continue;
-                            cellObj = rows[rowIdx1 - 1 + i].items[colIdx1 - 1 + j];
-                            cellObj.s = styleIdx;
-                            cellObj.isBlank = true;
-                        }
-                    }
-                }
-            }
             // 3. then fill up rst
             for (let i = 0; i < rows.length; i++) {
                 rst.push('<row r="' + (i + 1 + rowOffset) + '" spans="1:' + spanX + '" ht="' + rows[i].height + '" customHeight="1">');
@@ -919,6 +924,11 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
             // current sheet data
             currentPageMergePos = sheetData[JV.PAGE_SPECIAL_MERGE_POS];
             currentMergeBorder = sheetData[JV.PROP_PAGE_MERGE_BORDER];
+            if (hasSignature && sheetData[JV.PROP_SIGNATURE_CELLS] && sheetData[JV.PROP_SIGNATURE_CELLS].length > 0) {
+                // 有签名情况下,还是有必要创建一个dummy cell的(画框用)
+                _createDummyCell(sheetData[JV.PROP_SIGNATURE_CELLS], sheetData);
+            }
+
             self_setDataEx(sheetData, yPos, 0);
         } else {
             // total data in one sheet
@@ -929,6 +939,10 @@ function writeSheet(pageData, sheetData, paperSize, sharedStrList, stylesObj, ap
                 currentMergeBorder = shtItemData[JV.PROP_PAGE_MERGE_BORDER];
                 const tmpPos = yMultiPos[i];
                 cellIdx = 0;
+                if (hasSignature && shtItemData[JV.PROP_SIGNATURE_CELLS] && shtItemData[JV.PROP_SIGNATURE_CELLS].length > 0) {
+                    // 有签名情况下,还是有必要创建一个dummy cell的(画框用)
+                    _createDummyCell(shtItemData[JV.PROP_SIGNATURE_CELLS], shtItemData);
+                }
                 self_setDataEx(shtItemData, tmpPos, rowOffset);
                 rowOffset += tmpPos.length - 2;
             }
@@ -1241,21 +1255,6 @@ function createDummySignatureCell(pageData) {
         const page = pageData.items[pageIdx];
         if (page[JV.PROP_SIGNATURE_CELLS] && page[JV.PROP_SIGNATURE_CELLS].length > 0) {
             _createDummyCell(page[JV.PROP_SIGNATURE_CELLS], page);
-            // for (const signature of page[JV.PROP_SIGNATURE_CELLS]) {
-            //     const dummyCell = {
-            //         font: 'Content',
-            //         control: 'Default',
-            //         style: 'Default_None',
-            //         Value: '',
-            //         area: { Left: 0, Right: 0, Top: 0, Bottom: 0 }
-            //     };
-            //     if (signature.style) dummyCell.style = signature.style;
-            //     dummyCell[JV.PROP_AREA][JV.PROP_LEFT] = signature[JV.PROP_AREA][JV.PROP_LEFT];
-            //     dummyCell[JV.PROP_AREA][JV.PROP_RIGHT] = signature[JV.PROP_AREA][JV.PROP_RIGHT];
-            //     dummyCell[JV.PROP_AREA][JV.PROP_TOP] = signature[JV.PROP_AREA][JV.PROP_TOP];
-            //     dummyCell[JV.PROP_AREA][JV.PROP_BOTTOM] = signature[JV.PROP_AREA][JV.PROP_BOTTOM];
-            //     page[JV.PROP_CELLS].push(dummyCell);
-            // }
         }
         if (page[JV.PROP_SIGNATURE_DATE_CELLS] && page[JV.PROP_SIGNATURE_DATE_CELLS].length > 0) {
             _createDummyCell(page[JV.PROP_SIGNATURE_DATE_CELLS], page);
@@ -1375,8 +1374,8 @@ module.exports = {
         resetDummuySignature(pageData, thisRoleRel); // 把草图转换一下roleRel
         // console.log(thisRoleRel);
 
-        const hasSignature = false; // 暂时不支持电子签名、草图导出excel
-        // const hasSignature = _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, thisRoleRel, signSheetIdxArr); // 因草图的关系,thisRoleRel是否为null就不是充要的条件
+        // const hasSignature = false; // 暂时不支持电子签名、草图导出excel
+        const hasSignature = _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, thisRoleRel, signSheetIdxArr); // 因草图的关系,thisRoleRel是否为null就不是充要的条件
         // console.log('signKeyArr');
         // console.log(signKeyArr);
         // console.log('signPathArr');
@@ -1604,8 +1603,8 @@ module.exports = {
                         mergeBand[JV.PROP_BOTTOM].push(pageDataArray[i][JV.BAND_PROP_MERGE_BAND][JV.PROP_BOTTOM] + offsetY);
                     }
                     // 1.2.1 重新设置普通cells的Top Bottom坐标
-                    for (const cell of pageDataArray[i].items[j].cells) {
-                    // for (let k = 0; k < pageDataArray[i].items[j].cells.length; k++) {
+                    for (const cell of pageDataArray[i].items[j][JV.PROP_CELLS]) {
+                    // for (let k = 0; k < pageDataArray[i].items[j][JV.PROP_CELLS].length; k++) {
                         if (maxY < cell[JV.PROP_AREA][JV.PROP_BOTTOM]) {
                             maxY = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
                         }
@@ -1616,7 +1615,7 @@ module.exports = {
                         cell[JV.PROP_AREA][JV.PROP_TOP] += offsetY;
                     }
                     // 1.2.2 重新设置电子签名cells的Top Bottom坐标
-                    for (const cell of pageDataArray[i].items[j].signature_cells) {
+                    for (const cell of pageDataArray[i].items[j][JV.PROP_SIGNATURE_CELLS]) {
                         if (maxY < cell[JV.PROP_AREA][JV.PROP_BOTTOM]) {
                             maxY = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
                         }
@@ -1631,7 +1630,7 @@ module.exports = {
                         // console.log(cell);
                     }
                     // 1.2.3 重新设置电子签名日期cells的Top Bottom坐标
-                    for (const cell of pageDataArray[i].items[j].signature_date_cells) {
+                    for (const cell of pageDataArray[i].items[j][JV.PROP_SIGNATURE_DATE_CELLS]) {
                         if (maxY < cell[JV.PROP_AREA][JV.PROP_BOTTOM]) {
                             maxY = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
                         }