Tony Kang %!s(int64=2) %!d(string=hai) anos
pai
achega
c953e8977e

+ 54 - 20
app/public/report/js/rpt_jsexcel.js

@@ -6,6 +6,7 @@
 // const JV = require('../rpt_component/jpc_value_define'); // JV对象默认已有
 // const JSZip = require('jszip'); // 已引用
 // const strUtil = require('../public/stringUtil'); // stringUtil对象也有
+// STAGE_AUDIT, STAGE_LIST 已存在
 const DPI = 96;
 const dftHeadXml = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>';
 const STD_COMP_STAMP_SIZE_WIDTH = Math.round(5 * 96 / 2.54); // 公章标准尺寸(宽4.2厘米)转成像素
@@ -1389,7 +1390,7 @@ function createDummySignatureCell(pageData) {
     }
 }
 
-function _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel, signSheetIdxArr, isSinglePage) {
+function _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel, signSheetIdxArr, isSinglePage, checkAudit = false) {
     // 备注:电子签名是以图形的方式处理,一页可以有多个签名,多页的签名基本是引用同样的图片,在这里先处理一下,后期统一引用。
     //      另:以后的图片(在电子签名(signature_cells)以外的图片)会单独处理(如计算草图、水印等)
     let rst = false;
@@ -1422,26 +1423,28 @@ function _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel,
                     for (const role of chkRoles) {
                         if (signatureCell.signature_name === role.signature_name) {
                             if (!(role.signature_name.indexOf(JV.SIGNATURE_NAME_DUMMY) < 0 && role.sign_output.indexOf('normal_sign') < 0)) {
-                                // 如果签名但用户并没有选择显示签名,则不输出!
-                                if (role.sign_pic) {
-                                    const signPath = { signature_name: signatureCell.signature_name, path: null, pic: null };
-                                    signPathArr.push(signPath);
-                                    signPath.pic = role.sign_pic;
-                                    signKeyArr.push(signatureCell.signature_name);
-                                    rst = true;
-                                    signSheetIdxArr[pageIdx] = true;
-                                } else if (role.sign_path) {
-                                    let sPObj = _getDupPicPath(role.sign_path);
-                                    if (sPObj !== null && isSinglePage) { // 只有在isSinglePage为true时,才需要优化签名
-                                        signatureCell.signature_name = sPObj.signature_name; // 重点,如果有相同路径的,修改signature_name!
-                                        rst = true;
-                                    } else {
+                                if (!checkAudit || role.signature_name.indexOf(JV.SIGNATURE_NAME_DUMMY) >= 0 || _chkIfAudit(role)) {
+                                    // 如果签名但用户并没有选择显示签名,则不输出!
+                                    if (role.sign_pic) {
                                         const signPath = { signature_name: signatureCell.signature_name, path: null, pic: null };
                                         signPathArr.push(signPath);
-                                        signPath.path = role.sign_path;
+                                        signPath.pic = role.sign_pic;
                                         signKeyArr.push(signatureCell.signature_name);
                                         rst = true;
                                         signSheetIdxArr[pageIdx] = true;
+                                    } else if (role.sign_path) {
+                                        let sPObj = _getDupPicPath(role.sign_path);
+                                        if (sPObj !== null && isSinglePage) { // 只有在isSinglePage为true时,才需要优化签名
+                                            signatureCell.signature_name = sPObj.signature_name; // 重点,如果有相同路径的,修改signature_name!
+                                            rst = true;
+                                        } else {
+                                            const signPath = { signature_name: signatureCell.signature_name, path: null, pic: null };
+                                            signPathArr.push(signPath);
+                                            signPath.path = role.sign_path;
+                                            signKeyArr.push(signatureCell.signature_name);
+                                            rst = true;
+                                            signSheetIdxArr[pageIdx] = true;
+                                        }
                                     }
                                 }
                             }
@@ -1473,8 +1476,39 @@ function _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, roleRel,
     return rst;
 }
 
+function _chkIfAudit(role_rel) {
+    // STAGE_AUDIT, STAGE_LIST 已在index.ejs定义
+    let rst = false;
+    for (const stg_audit of STAGE_AUDIT) {
+        if (role_rel.acc_id === stg_audit.aid) {
+            if (stg_audit.status === 3) {
+                rst = true;
+            } else {
+                rst = false;
+            }
+            // break; //因为实际业务中会有反复,所以就不break了,一直判断,以最后一个为准
+        }
+    }
+    if (!rst) {
+        // 还有原报需要检测
+        for (const stg_ort_rpt of STAGE_LIST) {
+            if (role_rel.acc_id === stg_ort_rpt.user_id) {
+                if (stg_ort_rpt.status !== 1 && stg_ort_rpt.status !== 4) {
+                    // 只要不是待上报(1)、退回审批(4) 状态,都需要显示
+                    rst = true;
+                } else {
+                    rst = false;
+                }
+                // break; //因为实际业务中会有反复,所以就不break了,一直判断,以最后一个为准
+            }
+        }
+    }
+    // rst = true; //测试,未来将屏蔽
+    return rst;
+}
+
 const excelExportUtil = {
-    exportExcel: async function(pageData, paperSize, fName, options, custSheetNames, custSheetMergeBands, roleRel, callback) {
+    exportExcel: async function(pageData, paperSize, fName, options, custSheetNames, custSheetMergeBands, roleRel, callback, checkAudit = false) {
         const rptOptions = ({ singlePage: false, fileName: 'report' });
         if (options === 'true' || options === true) {
             rptOptions.singlePage = true;
@@ -1491,7 +1525,7 @@ const excelExportUtil = {
         await rptSignatureHelper.resetDummySignature(pageData, thisRoleRel, true); // 把草图转换一下roleRel
 
         // const hasSignature = false; // 暂时不支持电子签名、草图导出excel
-        const hasSignature = _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, thisRoleRel, signSheetIdxArr, isSinglePage); // 因草图的关系,thisRoleRel是否为null就不是充要的条件
+        const hasSignature = _checkAndSetSignatureCache(pageData, signKeyArr, signPathArr, thisRoleRel, signSheetIdxArr, isSinglePage, checkAudit); // 因草图的关系,thisRoleRel是否为null就不是充要的条件
         if (!hasSignature) {
             createDummySignatureCell(pageData);
         }
@@ -1622,7 +1656,7 @@ const excelExportUtil = {
             saveAs(content, `${fName}.xlsx`); // 页面需要引用 FileSaver.js 才有这个方法
         });
     },
-    exportExcelInOneBook: async function(pageDataArray, paperSize, fName, roleRelArr, callback) {
+    exportExcelInOneBook: async function(pageDataArray, paperSize, fName, roleRelArr, callback, checkAudit = false) {
         const me = this;
         const newPageData = {};
         // 1. 重新编排一下数据,把一份报表的pageData合并到一起作为一个Sheet输出(需要重新调整数据纵向坐标),多份报表数据就形成多个Sheet
@@ -1763,7 +1797,7 @@ const excelExportUtil = {
                 // 重新分配分页符结束------------------
             }
             // 3. everything is ok, then call me
-            await me.exportExcel(newPageData, paperSize, fName, 'false', sheetNames, custMergeBands, roleRelArr, callback);
+            await me.exportExcel(newPageData, paperSize, fName, 'false', sheetNames, custMergeBands, roleRelArr, callback, checkAudit);
         } catch (e) {
             console.log(e);
         }

+ 11 - 11
app/public/report/js/rpt_main.js

@@ -785,7 +785,7 @@ let rptControlObj = {
                 const singlePage = true;
                 let role_rel_list = signatureRelArr[currentIndex];
                 // await excelExportUtil.exportExcel(pageDataArr[currentIndex], pageSize, rptName, singlePage, null, null, ROLE_REL_LIST, null);
-                await excelExportUtil.exportExcel(pageDataArr[currentIndex], pageSize, rptName, singlePage, null, null, role_rel_list, null);
+                await excelExportUtil.exportExcel(pageDataArr[currentIndex], pageSize, rptName, singlePage, null, null, role_rel_list, null, getStageStatus() !== 3);
             }
         };
         for (let idx = 0; idx < pageDataArr.length; idx++) {
@@ -849,7 +849,7 @@ let rptControlObj = {
                 rptRoleRelArr = rptRoleRelArr.concat([pageDataArr[idx].items[0][JV.PROP_WATERMARK_CELLS][0].signature_name]);
             }
         }
-        excelExportUtil.exportExcelInOneBook(pageDataArr, pageSize, TENDER_NAME, rptRoleRelArr, null);
+        excelExportUtil.exportExcelInOneBook(pageDataArr, pageSize, TENDER_NAME, rptRoleRelArr, null, getStageStatus() !== 3);
     },
     
     getExcel_New: async function (isOneBook) {
@@ -898,16 +898,16 @@ let rptControlObj = {
                             }
                             signatureRelArr.push(tmpRel);
                         }
-                        if (getStageStatus() === 3) {
-                            // 统一安排merge(除草图外)
-                            for (let idx = 0; idx < pageDataArr.length; idx++) {
-                                const pageObj = pageDataArr[idx];
-                                let singleSignatureRelArr = signatureRelArr[idx];
-                                rptSignatureHelper.mergeSignDate(pageObj, singleSignatureRelArr, false);
-                                // rptSignatureHelper.mergeSignature(pageObj, signatureRelArr); // 这里merge的意义不大
-                                rptSignatureHelper.mergeSignAudit(pageObj, singleSignatureRelArr, STAGE_AUDIT);
-                            }
+                        // 统一安排merge(除草图外)
+                        for (let idx = 0; idx < pageDataArr.length; idx++) {
+                            const pageObj = pageDataArr[idx];
+                            let singleSignatureRelArr = signatureRelArr[idx];
+                            rptSignatureHelper.mergeSignDate(pageObj, singleSignatureRelArr, false, getStageStatus() !== 3);
+                            // rptSignatureHelper.mergeSignature(pageObj, signatureRelArr); // 这里merge的意义不大
+                            rptSignatureHelper.mergeSignAudit(pageObj, singleSignatureRelArr, STAGE_AUDIT, getStageStatus() !== 3);
                         }
+                        // if (getStageStatus() === 3) {
+                        // }
 
                         if (isOneBook) {
                             me.downloadExcelReportInOneBook(pageDataArr, pageSize, signatureRelArr, rpt_names);

+ 1 - 1
app/public/report/js/rpt_preview_common.js

@@ -63,7 +63,7 @@ async function printPageLoading() {
                 } else {
                     rptSignatureHelper.mergeSignDate(result.data[idx], singleSignatureRelArr, false, true);
                     rptSignatureHelper.mergeSignature(result.data[idx], singleSignatureRelArr, true, true);
-                    await rptSignatureHelper.resetDummySignature(result.data[idx], null, true); // 这里重新整理签章坐标信息(因签章大小在后台暂时获取不到,挪到前端处理)
+                    await rptSignatureHelper.resetDummySignature(result.data[idx], null, false, true); // 这里重新整理签章坐标信息(因签章大小在后台暂时获取不到,挪到前端处理)
                     rptSignatureHelper.mergeSignAudit(result.data[idx], singleSignatureRelArr, result.stageAudit, true);
                 }
             }

+ 78 - 72
app/public/report/js/rpt_signature.js

@@ -512,32 +512,32 @@ let rptSignatureHelper = {
         let me = rptSignatureHelper;
         rptSignatureHelper.resetSignDate(signatureDivId);
         rptSignatureHelper.resetSignAudit();
-        if (current_stage_status === 3) {
-            //1. 重刷page
-            // let hasStamp = false;
-            for (const page of zTreeOprObj.currentRptPageRst.items) {
-                if (page.signature_cells) {
-                    for (let cIdx = page.signature_cells.length - 1; cIdx >= 0; cIdx--) {
-                        const sCell = page.signature_cells[cIdx];
-                        if (sCell.isStamp) {
-                            page.signature_cells.splice(cIdx);
-                            // hasStamp = true;
-                        } else if (sCell.hasOwnProperty('pre_path')) {
-                            sCell.path = sCell.pre_path;
-                            delete sCell.pre_path;
-                        }
-                        for (let role of ROLE_REL_LIST) {
+        //1. 重刷page
+        // let hasStamp = false;
+        for (const page of zTreeOprObj.currentRptPageRst.items) {
+            if (page.signature_cells) {
+                for (let cIdx = page.signature_cells.length - 1; cIdx >= 0; cIdx--) {
+                    const sCell = page.signature_cells[cIdx];
+                    if (sCell.isStamp) {
+                        page.signature_cells.splice(cIdx);
+                        // hasStamp = true;
+                    } else if (sCell.hasOwnProperty('pre_path')) {
+                        sCell.path = sCell.pre_path;
+                        delete sCell.pre_path;
+                    }
+                    for (let role of ROLE_REL_LIST) {
 
-                        }
                     }
                 }
             }
-            resetStampSignature(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST);
-            if (PAGE_SHOW.isTextSignature) {
-                resetTextSignature(zTreeOprObj.currentRptPageRst);
-            }
-            // zTreeOprObj.showPage(zTreeOprObj.currentPage, zTreeOprObj.canvas);
         }
+        resetStampSignature(zTreeOprObj.currentRptPageRst, ROLE_REL_LIST, current_stage_status !== 3);
+        if (PAGE_SHOW.isTextSignature) {
+            resetTextSignature(zTreeOprObj.currentRptPageRst, current_stage_status !== 3);
+        }
+        zTreeOprObj.showPage(zTreeOprObj.currentPage, zTreeOprObj.canvas);
+        // if (current_stage_status === 3) {
+        // }
         //2. 更新数据
         const params = {};
         params.id = CURRENT_ROLE_REL_ID;
@@ -745,12 +745,14 @@ let rptSignatureHelper = {
                         let passAuditChk = true;
                         if (checkAudit) {
                             passAuditChk = false;
-                            for (const role_rel of roleRel) {
-                                if (role_rel.signature_name === signatureCell.signatureName) {
-                                    // signatureName(非signature_name)是印章cell特意给的属性,还有isStamp属性
-                                    if (rptSignatureHelper._chkIfAudit(role_rel)) {
-                                        passAuditChk = true;
-                                        break;
+                            if (roleRel) {
+                                for (const role_rel of roleRel) {
+                                    if (role_rel.signature_name === signatureCell.signatureName) {
+                                        // signatureName(非signature_name)是印章cell特意给的属性,还有isStamp属性
+                                        if (rptSignatureHelper._chkIfAudit(role_rel)) {
+                                            passAuditChk = true;
+                                            break;
+                                        }
                                     }
                                 }
                             }
@@ -1048,7 +1050,7 @@ function _createDummyCell() {
     return rst;
 }
 
-function resetStampSignature(pageData, roleRelList) {
+function resetStampSignature(pageData, roleRelList, checkAudit = false) {
     const dupPicPaths = [];
     const _getMaxRect = function(page) {
         const rect = [100000000, 100000000, 0, 0];
@@ -1076,39 +1078,41 @@ function resetStampSignature(pageData, roleRelList) {
             for (let scIdx = 0; scIdx < page.signature_cells.length; scIdx++) {
                 const sCell = page.signature_cells[scIdx];
                 for (const role_rel of roleRelList) {
-                    if (sCell.signature_name === role_rel.signature_name) {
-                        if (Array.isArray(role_rel.sign_output) && role_rel.sign_output.length > 0) {
-                            for (const signType of role_rel.sign_output) {
-                                switch (signType) {
-                                    case COMPANY_SIGN_STR:
-                                    case PRIVATE_SIGN_STR:
-                                        // 创建一个新的cell
-                                        let stampPath = (signType === COMPANY_SIGN_STR) ? role_rel.company_stamp_path : role_rel.private_stamp_path;
-                                        stampPath = OSS_PATH + stampPath;
-                                        if (dupPicPaths.indexOf(stampPath) < 0) {
-                                            dupPicPaths.push(stampPath);
-                                        }
-                                        // 签字信息中如果有签章位置信息,则直接用位置信息
-                                        let signatureArea;
-                                        if(role_rel.areaData&&role_rel.areaData[signType]){
-                                            signatureArea =  role_rel.areaData[signType]
-                                        }
-                                        const newStampCell = {
-                                            signature_name: JV.SIGNATURE_NAME_DUMMY,
-                                            control: sCell.control,
-                                            style: sCell.style,
-                                            path: stampPath,
-                                            isStamp: true,
-                                            maxRect,
-                                            orgArea: sCell.area,
-                                            area: signatureArea || {Left: sCell.area.Left, Right: sCell.area.Right, Top: sCell.area.Top, Bottom: sCell.area.Bottom},
-                                            signatureName: role_rel.signature_name, // 节点名称
-                                            signType, // 签章信息
-                                            isSaveSignature: !!signatureArea, // 是否有签章位置信息
-                                        };
-                                        newStampCells.push(newStampCell);
-                                        break;
-                                    default: break;
+                    if (!checkAudit || rptSignatureHelper._chkIfAudit(role_rel)) {
+                        if (sCell.signature_name === role_rel.signature_name) {
+                            if (Array.isArray(role_rel.sign_output) && role_rel.sign_output.length > 0) {
+                                for (const signType of role_rel.sign_output) {
+                                    switch (signType) {
+                                        case COMPANY_SIGN_STR:
+                                        case PRIVATE_SIGN_STR:
+                                            // 创建一个新的cell
+                                            let stampPath = (signType === COMPANY_SIGN_STR) ? role_rel.company_stamp_path : role_rel.private_stamp_path;
+                                            stampPath = OSS_PATH + stampPath;
+                                            if (dupPicPaths.indexOf(stampPath) < 0) {
+                                                dupPicPaths.push(stampPath);
+                                            }
+                                            // 签字信息中如果有签章位置信息,则直接用位置信息
+                                            let signatureArea;
+                                            if(role_rel.areaData&&role_rel.areaData[signType]){
+                                                signatureArea =  role_rel.areaData[signType]
+                                            }
+                                            const newStampCell = {
+                                                signature_name: JV.SIGNATURE_NAME_DUMMY,
+                                                control: sCell.control,
+                                                style: sCell.style,
+                                                path: stampPath,
+                                                isStamp: true,
+                                                maxRect,
+                                                orgArea: sCell.area,
+                                                area: signatureArea || {Left: sCell.area.Left, Right: sCell.area.Right, Top: sCell.area.Top, Bottom: sCell.area.Bottom},
+                                                signatureName: role_rel.signature_name, // 节点名称
+                                                signType, // 签章信息
+                                                isSaveSignature: !!signatureArea, // 是否有签章位置信息
+                                            };
+                                            newStampCells.push(newStampCell);
+                                            break;
+                                        default: break;
+                                    }
                                 }
                             }
                         }
@@ -1122,7 +1126,7 @@ function resetStampSignature(pageData, roleRelList) {
     }
 }
 
-function resetTextSignature(pageData) {
+function resetTextSignature(pageData, checkAudit = false) {
     for (const page of pageData.items) {
         for (let sCell of page.signature_cells) {
             if (!sCell.isStamp) {
@@ -1149,16 +1153,18 @@ function resetTextSignature(pageData) {
                 } else {
                     // 要创建新的文本签名cell
                     for (let role of ROLE_REL_LIST) {
-                        if (sCell.signature_name === role.signature_name && role.sign_output && role.sign_output.indexOf(NORMAL_SIGN_STR) >= 0) {
-                            const newCell = {
-                                font: 'Footer',
-                                control: sCell.control,
-                                style: sCell.style,
-                                Value: role.user_name,
-                                area: { Left: sCell.area.Left, Right: sCell.area.Right, Top: sCell.area.Top, Bottom: sCell.area.Bottom },
-                            };
-                            page.cells.push(newCell);
-                            break;
+                        if (!checkAudit || rptSignatureHelper._chkIfAudit(role)) {
+                            if (sCell.signature_name === role.signature_name && role.sign_output && role.sign_output.indexOf(NORMAL_SIGN_STR) >= 0) {
+                                const newCell = {
+                                    font: 'Footer',
+                                    control: sCell.control,
+                                    style: sCell.style,
+                                    Value: role.user_name,
+                                    area: { Left: sCell.area.Left, Right: sCell.area.Right, Top: sCell.area.Top, Bottom: sCell.area.Bottom },
+                                };
+                                page.cells.push(newCell);
+                                break;
+                            }
                         }
                     }
                 }