Browse Source

Merge branch 'dev' of http://192.168.1.41:3000/maixinrong/Calculation into dev

MaiXinRong 2 years ago
parent
commit
bff81b7f2f

+ 22 - 5
app/controller/payment_controller.js

@@ -80,8 +80,8 @@ module.exports = app => {
                     t.have_detail = await ctx.service.paymentDetail.haveDetail2Tender(t.id);
                 }
             }
-            responseData.data.folderList = folderList;
-            responseData.data.tenderList = tenderList;
+            responseData.data.folderList = ctx.helper._.orderBy(folderList, ['in_time'], ['asc']);
+            responseData.data.tenderList = ctx.helper._.orderBy(tenderList, ['in_time'], ['asc']);
             ctx.body = responseData;
         }
 
@@ -224,8 +224,8 @@ module.exports = app => {
                 const tenderList = await ctx.service.paymentTender.getList(ctx.session.sessionUser.accountId, auditPermission);
                 // 获取你创建的目录及对应目录下的所有目录
                 const folderList = await ctx.service.paymentFolder.getList(ctx.session.sessionUser.accountId, tenderList, auditPermission);
-                responseData.data.folderList = folderList;
-                responseData.data.tenderList = tenderList;
+                responseData.data.folderList = ctx.helper._.orderBy(folderList, ['in_time'], ['asc']);
+                responseData.data.tenderList = ctx.helper._.orderBy(tenderList, ['in_time'], ['asc']);
                 ctx.body = responseData;
             } catch (err) {
                 this.log(err);
@@ -508,7 +508,10 @@ module.exports = app => {
             // 获取报表表单列表
             if (ctx.payment.auditPermission.view_all || ctx.tender.uid === ctx.session.sessionUser.accountId || formProcess) {
                 const rptProject = await ctx.service.rptTreeNode.getDataByCondition({ pid: ctx.session.sessionProject.id, name: '01.支付审批报表' });
-                const rptProjectList = rptProject && rptProject.items ? JSON.parse(rptProject.items) : [];
+                const rptProjectList = [];
+                const newRptList = rptProject && rptProject.items ? JSON.parse(rptProject.items) : [];
+                ctx.rptListNum = 0;
+                await this.getNewRptProjectList(ctx, newRptList, rptProjectList, 1);
                 const tenderRptList = await ctx.service.paymentTenderRpt.getProcessList(ctx.tender.id);
                 if (tenderRptList === -1) {
                     throw '未配置审批模块,请联系管理员处理';
@@ -517,6 +520,20 @@ module.exports = app => {
             }
             return await ctx.service.paymentTenderRpt.getList(ctx.tender.id, ctx.session.sessionUser.accountId);
         }
+        // 循环获取到到rptProject
+        async getNewRptProjectList(ctx, newRptList, rptProjectList, level = 1) {
+            if (newRptList.length > 0) {
+                for (const r of newRptList) {
+                    r.level = level;
+                    r.index = ctx.rptListNum;
+                    ctx.rptListNum = ctx.rptListNum + 1;
+                    rptProjectList.push(r);
+                    if (r.items && r.items.length > 0) {
+                        await this.getNewRptProjectList(ctx, r.items, rptProjectList, level + 1);
+                    }
+                }
+            }
+        }
 
         async process(ctx) {
             try {

+ 37 - 1
app/public/js/payment_process.js

@@ -3,8 +3,12 @@ $(function () {
 
     // 全选报表
     $('#select_all_rpt_checkbox').click(function () {
-        $('#rpt_table input[name="rptId[]"]').prop('checked', true);
         $(this).prop('checked', false);
+        $('#rpt_table input[name="rptId[]"]').each(function () {
+            if (parseInt($(this).val()) !== -1) {
+                $(this).prop('checked', true);
+            }
+        });
     });
 
     $('#add_rpt_btn').click(function () {
@@ -350,5 +354,37 @@ $(function () {
             '                                        </span>\n' +
             '                                        </li>';
         return html;
+    };
+
+    $('#add-rpt').on('show.bs.modal', function () {
+        $('#rpt-table').find('input:checked:not(:disabled)').prop('checked', false);
+        $('#rpt-table').find('input:not(:disabled)').each(function () {
+            if (_.findIndex(tenderRptList, { rpt_id: parseInt($(this).val()) }) !== -1) {
+                $(this).prop('checked', true);
+            }
+        });
+    });
+
+    $('#rpt_table input').on('click', function () {
+        if ($(this).is(':checked') && parseInt($(this).val()) === -1) {
+            $(this).prop('checked', false);
+            const index = $("#rpt_table input").index(this);
+            console.log(rptProjectList[index]);
+            // 循环选中当前子项值
+            checkedRptProjectList(rptProjectList[index].items);
+        }
+    });
+
+    function checkedRptProjectList(items) {
+        if (items && items.length > 0) {
+            for (const item of items) {
+                if (item.ID !== -1 && item.items === null) {
+                    console.log(item);
+                    $('#rpt_table input').eq(item.index).prop('checked', true);
+                } else {
+                    checkedRptProjectList(item.items);
+                }
+            }
+        }
     }
 });

+ 1 - 0
app/public/report/js/jpc_output.js

@@ -501,6 +501,7 @@ let JpcCanvasOutput = {
                 }
             }
         }
+        
         function private_drawImage(cell, control, imageData,moveSignatureTool, orgSize = false, offsetArea) {
             // 新增签章数据到移动工具中
             if(moveSignatureTool){

+ 4 - 50
app/public/report/js/rpt_jsexcel.js

@@ -426,53 +426,7 @@ function writeSheets(pageData, paperSize, sharedStrList, stylesObj, isSinglePage
     }
     return rst;
 }
-function getProperSignatureArea(cell, control) {
-    // 约定默认长宽比例是2:1,图片分辨率是600*300
-    const rst = [0, 0, 0, 0]; // left, top, right, bottom
-    if (cell && cell[JV.PROP_AREA]) {
-        if (cell.hasOwnProperty('isOrgShow') && cell.isOrgShow) {
-            // 例外的约定,按原始类型处理
-            rst[JV.IDX_LEFT] = cell[JV.PROP_AREA][JV.PROP_LEFT];
-            rst[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP];
-            rst[JV.IDX_RIGHT] = cell[JV.PROP_AREA][JV.PROP_RIGHT];
-            rst[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
-        } else {
-            let width = cell[JV.PROP_AREA][JV.PROP_RIGHT] - cell[JV.PROP_AREA][JV.PROP_LEFT],
-                height = cell[JV.PROP_AREA][JV.PROP_BOTTOM] - cell[JV.PROP_AREA][JV.PROP_TOP];
-            if (width > height * 2) {
-                width = height * 2;
-            } else {
-                height = width / 2;
-            }
-            switch (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_HORIZON]]) {
-                case 'left':
-                    rst[0] = cell[JV.PROP_AREA][JV.PROP_LEFT];
-                    rst[1] = cell[JV.PROP_AREA][JV.PROP_TOP];
-                    rst[2] = rst[0] + width;
-                    rst[3] = rst[1] + height;
-                    break;
-                case 'right':
-                    rst[2] = cell[JV.PROP_AREA][JV.PROP_RIGHT];
-                    rst[3] = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
-                    rst[0] = rst[2] - width;
-                    rst[1] = rst[3] - height;
-                    break;
-                default:
-                    // center
-                    rst[0] = (cell[JV.PROP_AREA][JV.PROP_LEFT] + cell[JV.PROP_AREA][JV.PROP_RIGHT] - width) / 2;
-                    rst[1] = cell[JV.PROP_AREA][JV.PROP_TOP];
-                    rst[2] = rst[0] + width;
-                    rst[3] = rst[1] + height;
-                    break;
-            }
-        }
-    }
-    // rst[0] = rst[0] + JpcCanvasOutput.offsetX;
-    // rst[2] = rst[2] + JpcCanvasOutput.offsetX;
-    // rst[1] = rst[1] + JpcCanvasOutput.offsetY;
-    // rst[3] = rst[3] + JpcCanvasOutput.offsetY;
-    return rst;
-}
+
 function preAnalyzePos(pageData, sheetData, xPos, yPos, yMultiPos) {
     let cell;
     let pos;
@@ -517,7 +471,7 @@ function preAnalyzePos(pageData, sheetData, xPos, yPos, yMultiPos) {
             } else {
                 cellControl = cell[JV.PROP_CONTROL];
             }
-            const area = getProperSignatureArea(cell, cellControl);
+            const area = getProperSignatureArea(cell, cellControl, 0, 0, JV);
             if (cell.signature_name.indexOf(JV.SIGNATURE_NAME_DUMMY) >= 0) {
                 area[JV.IDX_LEFT] = cell[JV.PROP_AREA][JV.PROP_LEFT];
                 area[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP];
@@ -543,7 +497,7 @@ function preAnalyzePos(pageData, sheetData, xPos, yPos, yMultiPos) {
             } else {
                 cellControl = cell[JV.PROP_CONTROL];
             }
-            const area = getProperSignatureArea(cell, cellControl);
+            const area = getProperSignatureArea(cell, cellControl, 0, 0, JV);
             if (cell.signature_name.indexOf(JV.SIGNATURE_NAME_DUMMY) >= 0) {
                 area[JV.IDX_LEFT] = cell[JV.PROP_AREA][JV.PROP_LEFT];
                 area[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP];
@@ -1109,7 +1063,7 @@ function writeDrawing(pageData, sheetData, subSignKeyArr, sheetIdx) {
         } else {
             cellControl = signCell[JV.PROP_CONTROL];
         }
-        const area = getProperSignatureArea(signCell, cellControl);
+        const area = getProperSignatureArea(signCell, cellControl, 0, 0, JV);
         if (signCell.signature_name.indexOf(JV.SIGNATURE_NAME_DUMMY) >= 0) {
             area[JV.IDX_LEFT] = signCell[JV.PROP_AREA][JV.PROP_LEFT];
             area[JV.IDX_TOP] = signCell[JV.PROP_AREA][JV.PROP_TOP];

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

@@ -78,7 +78,7 @@ const JpcJsPDFHelper = {
             rptSignatureHelper.mergeSignAudit(pageObj, signatureRelArr, signAuditArr);
         } else {
             rptSignatureHelper.mergeSignDate(pageObj, signatureRelArr, false, true);
-            rptSignatureHelper.mergeSignature(pageObj, signatureRelArr, false, true); // 这里merge的意义很大
+            // rptSignatureHelper.mergeSignature(pageObj, signatureRelArr, false, true); // 这里merge的意义很大
             rptSignatureHelper.mergeSignAudit(pageObj, signatureRelArr, signAuditArr, true);
         }
         // let signatureCounter = {"allAmt": 0, "picAmt": 0};

+ 2 - 2
app/public/report/js/rpt_print.js

@@ -349,7 +349,7 @@ function buildCellSvg(cell, fonts, styles, controls, pageMergeBorder, rptMergeBo
     return rst.join("");
 }
 
-function _resetArea(area, orgSize, offsetArea, offsetX, offsetY) {
+function _resetArea(cell, area, orgSize, offsetArea, offsetX, offsetY) {
     if (orgSize) {
         area[0] = cell[JV.PROP_AREA][JV.PROP_LEFT] + offsetX; // Left
         area[1] = cell[JV.PROP_AREA][JV.PROP_TOP] + offsetY; // Top
@@ -366,7 +366,7 @@ function _resetArea(area, orgSize, offsetArea, offsetX, offsetY) {
 function buildImage(destRst, cell, control, offsetX, offsetY, HtoVStr, orgSize = false, offsetArea) {
     let href = '';
     let area = getProperSignatureArea(cell, control, offsetX, offsetY, JV);
-    _resetArea(area, orgSize, offsetArea, offsetX, offsetY);
+    _resetArea(cell, area, orgSize, offsetArea, offsetX, offsetY);
     if (cell.pic) {
         href = 'href="' + cell.pic +'"';
         destRst.push('<image x="' + area[0] + '" y="' + area[1] + '" width="' + (area[2] - area[0]) + '" height="' + (area[3] - area[1]) + '" ');

+ 46 - 15
app/view/payment/detail.ejs

@@ -220,17 +220,29 @@
     function _getAdhocDummyCells(srcCell, rstCells) {
         if (typeof srcCell.path === 'string') {
             let paths = srcCell.path.split('!;!');
-            for (let dtlPath of paths) {
+            for (let dtlPathIdx = 0; dtlPathIdx < paths.length; dtlPathIdx++) {
+                dtlPath = paths[dtlPathIdx];
+                // srcCell.picFeatures
                 if (dtlPath.length > 10) {
-                    const newStampCell = {
-                        signature_name: 'dummy_pic',
-                        control: srcCell.control,
-                        style: srcCell.style,
-                        path: dtlPath,
-                        isStamp: true,
-                        area: srcCell.area,
-                    };
-                    rstCells.push(newStampCell);
+                    let imgSrc = dtlPath;
+                    if (dtlPath.indexOf(OSS_PATH) < 0 && dtlPath[0] !== '/') {
+                        imgSrc = OSS_PATH + dtlPath;
+                    }
+                    let couldCreate = true;
+                    if (srcCell.picFeatures && srcCell.picFeatures.length === paths.length && srcCell.picFeatures[dtlPathIdx] === 'not found!') {
+                        couldCreate = false;
+                    }
+                    if (couldCreate) {
+                        const newStampCell = {
+                            signature_name: 'dummy_pic',
+                            control: srcCell.control,
+                            style: srcCell.style,
+                            path: imgSrc,
+                            isStamp: true,
+                            area: srcCell.area,
+                        };
+                        rstCells.push(newStampCell);
+                    }
                 }
             }
         }
@@ -238,7 +250,7 @@
 
     function downloadPDFReport(pageDataArr, pageSize, rpt_names, signatureRelArr, signatureRelInfo, refRptTplIds, STAGE_AUDIT) {
         auditRptPrintHelper.currentDownloadIdx = 0;
-        const private_download = function(newPageDataArr, new_rpt_names) {
+        const private_download = function(newPageDataArr, new_rpt_names, dummyCells) {
             if (auditRptPrintHelper.currentDownloadIdx < newPageDataArr.length) {
                 let singleSignatureRelArr = [];
                 for (let rIdx = 0; rIdx < signatureRelInfo.length; rIdx++) {
@@ -252,16 +264,35 @@
                 let rptName = new_rpt_names[auditRptPrintHelper.currentDownloadIdx];
                 auditRptPrintHelper.currentDownloadIdx++;
                 JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rptName, singleSignatureRelArr, STAGE_AUDIT); // 精确控制签名
-                if (auditRptPrintHelper.currentDownloadIdx < newPageDataArr.length) setTimeout(private_download(newPageDataArr, new_rpt_names), 2000);
+                if (auditRptPrintHelper.currentDownloadIdx < newPageDataArr.length) {
+                    setTimeout(private_download(newPageDataArr, new_rpt_names), 2000);
+                } else {
+                    for (let pd of newPageDataArr) {
+                        for (let pItem of pd.items) {
+                            for (let idx = pItem.signature_cells.length - 1; idx >= 0; idx--) {
+                                let pIdx = dummyCells.indexOf(pItem.signature_cells[idx]);
+                                if (pIdx >= 0) {
+                                    pItem.signature_cells.splice(idx, 1);
+                                    dummyCells.splice(pIdx, 1);
+                                }
+                            }
+                        }
+                    }
+                }
             }
         };
         // 导出PDF审核优化代码
         let picPaths = [], dummyPicAmt = 0, dummyCells = [];
         // 1. 先找有没有dummy
         for (let pageData of pageDataArr) {
+            let tmpDummyCells = [];
             for (let page of pageData.items) {
                 for (let dCell of page.signature_cells) {
-                    _getAdhocDummyCells(dCell, dummyCells);
+                    _getAdhocDummyCells(dCell, tmpDummyCells);
+                }
+                if (tmpDummyCells.length > 0) {
+                    page.signature_cells = page.signature_cells.concat(tmpDummyCells);
+                    dummyCells = dummyCells.concat(tmpDummyCells);
                 }
             }
         }
@@ -277,7 +308,7 @@
                         exceptionAmt++;
                         if ((handledAmt + exceptionAmt) === dummyPicAmt) {
                             $.bootstrapLoading.end();
-                            private_download(pageDataArr, rpt_names);
+                            private_download(pageDataArr, rpt_names, dummyCells);
                         }
                     } else {
                         let oFileReader = new FileReader();
@@ -287,7 +318,7 @@
                             handledAmt++;
                             if ((handledAmt + exceptionAmt) === dummyPicAmt) {
                                 $.bootstrapLoading.end();
-                                private_download(pageDataArr, rpt_names);
+                                private_download(pageDataArr, rpt_names, dummyCells);
                             }
                         };
                         oFileReader.readAsDataURL(blob);

+ 2 - 0
app/view/payment/process.ejs

@@ -141,4 +141,6 @@
     const accountList = JSON.parse(unescape('<%- escape(JSON.stringify(accountList)) %>'));
     const cur_uid = parseInt('<%- ctx.tender.uid %>');
     let tenderRptList = JSON.parse(unescape('<%- escape(JSON.stringify(tenderRptList)) %>'));
+    const rptProjectList = JSON.parse(unescape('<%- escape(JSON.stringify(rptProjectList)) %>'));
+    console.log(rptProjectList);
 </script>

+ 6 - 4
app/view/payment/process_modal.ejs

@@ -4,7 +4,7 @@
             <div class="modal-header">
                 <h5 class="modal-title">添加表单</h5>
             </div>
-            <div class="modal-body">
+            <div class="modal-body" style="max-height:800px;overflow: auto">
                 <table id="rpt-table" class="table table-bordered">
                     <thead>
                     <tr>
@@ -15,9 +15,11 @@
                     <tbody id="rpt_table">
                     <% for (const rpt of rptProjectList) { %>
                     <tr>
-                        <td class="text-center"><input type="checkbox" name="rptId[]" data-name="<%- rpt.name %>" value="<%- rpt.ID %>"
-                                                       <% if (ctx.helper._.findIndex(tenderRptList, { rpt_id: rpt.ID }) !== -1) { %>checked<% } %> <% if (rpt.had_rpt) { %>disabled<% } %>></td>
-                        <td><%- rpt.name %></td>
+                        <td class="text-center">
+                            <input type="checkbox" name="rptId[]" data-name="<%- rpt.name %>" value="<%- rpt.ID %>"
+                                                       <% if (ctx.helper._.findIndex(tenderRptList, { rpt_id: rpt.ID }) !== -1) { %>checked<% } %> <% if (rpt.had_rpt) { %>disabled<% } %>>
+                        </td>
+                        <td class="in-<%- rpt.level %>"><% if (rpt.items && rpt.items.length > 0) { %><i class="fa fa-folder-o"></i> <% } %><%- rpt.name %></td>
                     </tr>
                     <% } %>
                     </tbody>