浏览代码

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

MaiXinRong 1 年之前
父节点
当前提交
1fa50b7bf3

+ 16 - 8
app/controller/report_controller.js

@@ -947,21 +947,29 @@ module.exports = app => {
                 stgAuditForOrg = [];
                 stgAuditForOrg = [];
                 stageFlow = [];
                 stageFlow = [];
                 switch (params.stage_id) {
                 switch (params.stage_id) {
-                    case -300:
+                    case -300: // 变更令
                         const changeAudit = await ctx.service.changeAudit.getAuditors(params.change_id, params.change_times, true);
                         const changeAudit = await ctx.service.changeAudit.getAuditors(params.change_id, params.change_times, true);
-                        const changeAuditOrg = await ctx.service.changeAudit.getAuditors(params.change_id, 1);
                         changeAudit.forEach(audit => {
                         changeAudit.forEach(audit => {
                             stgAudit.push({ aid: audit.uid, status: audit.status, opinion: audit.sdesc, end_time: audit.sin_time, usite: audit.usite });
                             stgAudit.push({ aid: audit.uid, status: audit.status, opinion: audit.sdesc, end_time: audit.sin_time, usite: audit.usite });
                         });
                         });
-                        changeAuditOrg.forEach(audit => {
-                            stgAuditForOrg.push({ aid: audit.uid, status: audit.status, opinion: audit.sdesc, end_time: audit.sin_time, usite: audit.usite });
-                        });
                         break;
                         break;
-                    case -301:
+                    case -301: // 变更方案
+                        const changePlanAudit = await ctx.service.changePlanAudit.getAuditors(params.business_id, params.change_plan_times, true);
+                        changePlanAudit.forEach(audit => {
+                            stgAudit.push({ aid: audit.aid, status: audit.status, opinion: audit.opinion, end_time: audit.end_time, times: audit.times });
+                        });
                         break;
                         break;
-                    case -302:
+                    case -302: // 变更立项
+                        const changeProjectAudit = await ctx.service.changeProjectAudit.getAuditors(params.business_id, params.change_project_times, true);
+                        changeProjectAudit.forEach(audit => {
+                            stgAudit.push({ aid: audit.aid, status: audit.status, opinion: audit.opinion, end_time: audit.end_time, times: audit.times });
+                        });
                         break;
                         break;
-                    case -303:
+                    case -303: // 变更申请
+                        const changeApplyAudit = await ctx.service.changeApplyAudit.getAuditors(params.business_id, params.change_apply_times, true);
+                        changeApplyAudit.forEach(audit => {
+                            stgAudit.push({ aid: audit.aid, status: audit.status, opinion: audit.opinion, end_time: audit.end_time, times: audit.times });
+                        });
                         break;
                         break;
                     default:
                     default:
                         break;
                         break;

+ 7 - 8
app/public/report/js/rpt_archive.js

@@ -598,7 +598,7 @@ let rptArchiveObj = {
         }
         }
         return psInfo;
         return psInfo;
     },
     },
-    archiveCurrentReport: function (currentRptPageRst, currentNode, cb) {
+    archiveCurrentReport: function (currentRptPageRst, currentNode, currentRolRel = ROLE_REL_LIST, cb) {
         let picKeys = [], picCells = [], dupPicPath = [], dupPicCell = [];
         let picKeys = [], picCells = [], dupPicPath = [], dupPicCell = [];
         // 1. 找草图路径
         // 1. 找草图路径
         if (!PAGE_SHOW.closeArchiveSignature) {
         if (!PAGE_SHOW.closeArchiveSignature) {
@@ -663,7 +663,7 @@ let rptArchiveObj = {
                 });
                 });
             }
             }
         } else {
         } else {
-            rptArchiveObj._archiveCurrentReport(currentRptPageRst, currentNode, cb);
+            rptArchiveObj._archiveCurrentReport(currentRptPageRst, currentNode, currentRolRel, cb);
         }
         }
     },
     },
     _getBusinessId: function() {
     _getBusinessId: function() {
@@ -673,17 +673,16 @@ let rptArchiveObj = {
                 rst = encodeURIComponent(CHNAGE_ID);
                 rst = encodeURIComponent(CHNAGE_ID);
                 break;
                 break;
             case -301: // 变更方案
             case -301: // 变更方案
-                break;
             case -302: // 变更立项
             case -302: // 变更立项
-                break;
             case -303: // 变更申请
             case -303: // 变更申请
+                rst = BUSINESS_ID;
                 break;
                 break;
             default:
             default:
                 break;                            
                 break;                            
         }
         }
         return rst;
         return rst;
     },
     },
-    _archiveCurrentReport: function(currentRptPageRst, currentNode, cb) {
+    _archiveCurrentReport: function(currentRptPageRst, currentNode, currentRolRel, cb) {
         // 归档当前报表
         // 归档当前报表
         const bzId = rptArchiveObj._getBusinessId();
         const bzId = rptArchiveObj._getBusinessId();
         const _prepareEncryptionParam = function(result, pageEncryptInfo) {
         const _prepareEncryptionParam = function(result, pageEncryptInfo) {
@@ -761,7 +760,7 @@ let rptArchiveObj = {
                 } else if (PAGE_SHOW.closeArchiveSignature) {
                 } else if (PAGE_SHOW.closeArchiveSignature) {
                     // 这里还有一个场景需要考虑:签名是图片且选择了签名,又不归档输出,
                     // 这里还有一个场景需要考虑:签名是图片且选择了签名,又不归档输出,
                     const rrSigns = [];
                     const rrSigns = [];
-                    ROLE_REL_LIST.forEach(role_rel => {
+                    currentRolRel.forEach(role_rel => {
                         if (role_rel.sign_output && role_rel.sign_output.includes(NORMAL_SIGN_STR)) {
                         if (role_rel.sign_output && role_rel.sign_output.includes(NORMAL_SIGN_STR)) {
                             rrSigns.push(role_rel.signature_name);
                             rrSigns.push(role_rel.signature_name);
                         }
                         }
@@ -793,7 +792,7 @@ let rptArchiveObj = {
                     }
                     }
                 }
                 }
                 const pageSize = rptControlObj.getCurrentPageSize();
                 const pageSize = rptControlObj.getCurrentPageSize();
-                let doc = JpcJsPDFHelper._createPdf(currentRptPageRst, pageSize, ROLE_REL_LIST, STAGE_AUDIT);
+                let doc = JpcJsPDFHelper._createPdf(currentRptPageRst, pageSize, currentRolRel, STAGE_AUDIT);
                 restoreCells(signCells, 'signature_cells');
                 restoreCells(signCells, 'signature_cells');
                 signCells = null;
                 signCells = null;
                 txtSignCells.forEach(txtCellBkObj => {
                 txtSignCells.forEach(txtCellBkObj => {
@@ -816,7 +815,7 @@ let rptArchiveObj = {
                 formData.append('file', doc.output('blob'), 'upload.pdf');
                 formData.append('file', doc.output('blob'), 'upload.pdf');
                 // formData.append('size', pFile.size);
                 // formData.append('size', pFile.size);
                 if (currentRptPageRst.splitArcPages) {
                 if (currentRptPageRst.splitArcPages) {
-                    let docs = JpcJsPDFHelper.getChildrenDocs(currentRptPageRst, rptControlObj.getCurrentPageSize(), ROLE_REL_LIST, STAGE_AUDIT);
+                    let docs = JpcJsPDFHelper.getChildrenDocs(currentRptPageRst, rptControlObj.getCurrentPageSize(), currentRolRel, STAGE_AUDIT);
                     for (let docIdx = 0; docIdx < docs.length; docIdx++) {
                     for (let docIdx = 0; docIdx < docs.length; docIdx++) {
                         let file = docs[docIdx].output('blob');
                         let file = docs[docIdx].output('blob');
                         formData.append('file', file, `upload_child_${docIdx}.pdf`);
                         formData.append('file', file, `upload_child_${docIdx}.pdf`);

+ 15 - 13
app/public/report/js/rpt_indexDb.js

@@ -31,7 +31,7 @@ const indexDbOprObj = {
             }
             }
         }
         }
     },
     },
-    batchAdd: function (tbName, datas, cb) {
+    batchAdd: function (tbName, datas, signatureRelArr, cb) {
         let db =  indexDbOprObj.currentDb;
         let db =  indexDbOprObj.currentDb;
         let ttlAmt = datas.length;
         let ttlAmt = datas.length;
         // console.log(`已选报表数量:${ttlAmt}`);
         // console.log(`已选报表数量:${ttlAmt}`);
@@ -43,7 +43,7 @@ const indexDbOprObj = {
                 cnt++;
                 cnt++;
                 // console.log(`已选加数量:${cnt}`);
                 // console.log(`已选加数量:${cnt}`);
                 if (cnt === ttlAmt && cb) {
                 if (cnt === ttlAmt && cb) {
-                    cb(datas);
+                    cb(datas, signatureRelArr);
                 }
                 }
             };
             };
         }
         }
@@ -93,7 +93,7 @@ const indexDbOprObj = {
                     let data = {id: keyStr, name: node.name, rpt_id: node.refId, stage_id, gather_select, stage_select, pageSize: rptControlObj.getCurrentPageSize(), CFG: CUST_CFG};
                     let data = {id: keyStr, name: node.name, rpt_id: node.refId, stage_id, gather_select, stage_select, pageSize: rptControlObj.getCurrentPageSize(), CFG: CUST_CFG};
                     datas.push(data);
                     datas.push(data);
                 }
                 }
-                indexDbOprObj.batchAdd(this.tb_name_request, datas, (rstArr)=>{
+                indexDbOprObj.batchAdd(this.tb_name_request, datas, [], (rstArr)=>{
                     console.log('batch add succeeded!');
                     console.log('batch add succeeded!');
                     console.log(rstArr);
                     console.log(rstArr);
                     //其他操作
                     //其他操作
@@ -141,10 +141,10 @@ const indexDbOprObj = {
             await rptCustomObj.getCustomSelect(params);
             await rptCustomObj.getCustomSelect(params);
             // params.customSelect = [];
             // params.customSelect = [];
             params.needWaterMark = needWaterMark;
             params.needWaterMark = needWaterMark;
-            indexDbOprObj._getRptDataForDb(params, rpt_names, stage_id, (records)=>{
+            indexDbOprObj._getRptDataForDb(params, rpt_names, stage_id, (records, rstRoleRel)=>{
                 console.log('the normal type page results have been saved!');
                 console.log('the normal type page results have been saved!');
                 // console.log(records);
                 // console.log(records);
-                _createPDF(0, records, rptNodes, ()=>{
+                _createPDF(0, records, rptNodes, rstRoleRel, ()=>{
                     console.log('the normal type archive PDFs have been created!');
                     console.log('the normal type archive PDFs have been created!');
                     let ids = [];
                     let ids = [];
                     for (let rec of records) {
                     for (let rec of records) {
@@ -156,7 +156,7 @@ const indexDbOprObj = {
                 });
                 });
             });
             });
         };
         };
-        const _requestGatherReport = function() {
+        const _requestGatherReport = function(rstRoleRel) {
             if (gather_request.length > 0) {
             if (gather_request.length > 0) {
                 let refRptTplIds = [], rpt_names = [];
                 let refRptTplIds = [], rpt_names = [];
                 for (let req of gather_request) {
                 for (let req of gather_request) {
@@ -167,10 +167,10 @@ const indexDbOprObj = {
                 let params = rptControlObj.creatCommonExportParam(refRptTplIds);
                 let params = rptControlObj.creatCommonExportParam(refRptTplIds);
                 params.customSelect = [];
                 params.customSelect = [];
                 params.needWaterMark = needWaterMark;
                 params.needWaterMark = needWaterMark;
-                indexDbOprObj._getRptDataForDb(params, rpt_names, stage_id, (records)=>{
+                indexDbOprObj._getRptDataForDb(params, rpt_names, stage_id, (records, rstRoleRel)=>{
                     console.log('the normal type page results have been saved!');
                     console.log('the normal type page results have been saved!');
                     // console.log(records);
                     // console.log(records);
-                    _createPDF(0, records, rptNodes, ()=>{
+                    _createPDF(0, records, rptNodes, rstRoleRel, ()=>{
                         console.log('the normal type archive PDFs have been created!');
                         console.log('the normal type archive PDFs have been created!');
                         let ids = [];
                         let ids = [];
                         for (let rec of records) {
                         for (let rec of records) {
@@ -287,8 +287,8 @@ const indexDbOprObj = {
                     let data = {id: keyStr, rpt_id: params.rpt_ids[idx], rpt_name: rpt_names[idx], stage_id, pageData: multiRptData[idx]};
                     let data = {id: keyStr, rpt_id: params.rpt_ids[idx], rpt_name: rpt_names[idx], stage_id, pageData: multiRptData[idx]};
                     datas.push(data);
                     datas.push(data);
                 }
                 }
-                indexDbOprObj.batchAdd(indexDbOprObj.tb_name_page, datas, (rstArr)=>{
-                    cb(rstArr);
+                indexDbOprObj.batchAdd(indexDbOprObj.tb_name_page, datas, signatureRelArr, (rstArr, rstRoleRel)=>{
+                    cb(rstArr, rstRoleRel);
                 });
                 });
             },
             },
             function(failRst){
             function(failRst){
@@ -306,19 +306,21 @@ const indexDbOprObj = {
     }
     }
 };
 };
 
 
-function _createPDF(currentIdx, records, rptNodes, cb) {
+function _createPDF(currentIdx, records, rptNodes, rstRoleRel, cb) {
     if (currentIdx === records.length) {
     if (currentIdx === records.length) {
         if (cb) {
         if (cb) {
             cb();
             cb();
         }
         }
     } else {
     } else {
         let rec = records[currentIdx];
         let rec = records[currentIdx];
+        let curRoleRel = rstRoleRel[currentIdx];
         let nextIdx = currentIdx + 1;
         let nextIdx = currentIdx + 1;
         indexDbOprObj.getOne(indexDbOprObj.tb_name_page, rec.id, (record)=>{
         indexDbOprObj.getOne(indexDbOprObj.tb_name_page, rec.id, (record)=>{
             for (let node of rptNodes) {
             for (let node of rptNodes) {
                 if (node.refId === record.rpt_id) {
                 if (node.refId === record.rpt_id) {
-                    rptArchiveObj.archiveCurrentReport(record.pageData, node, (err, msg, uuid)=>{
-                        _createPDF(nextIdx, records, rptNodes, cb);
+                    // curRoleRel
+                    rptArchiveObj.archiveCurrentReport(record.pageData, node, curRoleRel, (err, msg, uuid)=>{
+                        _createPDF(nextIdx, records, rptNodes, rstRoleRel, cb);
                     });
                     });
                     break;
                     break;
                 }
                 }

+ 18 - 7
app/public/report/js/rpt_main.js

@@ -328,10 +328,13 @@ let zTreeOprObj = {
             params.detail_id = DETAIL_ID;
             params.detail_id = DETAIL_ID;
             params.change_id = CHNAGE_ID;
             params.change_id = CHNAGE_ID;
             params.business_id = BUSINESS_ID;
             params.business_id = BUSINESS_ID;
-            params.change_times = CHANGE_TIMES;
             params.change_plan_id = CHNAGE_PLAN_ID;
             params.change_plan_id = CHNAGE_PLAN_ID;
             params.change_project_id = CHNAGE_PROJECT_ID;
             params.change_project_id = CHNAGE_PROJECT_ID;
             params.change_apply_id = CHNAGE_APPLY_ID;
             params.change_apply_id = CHNAGE_APPLY_ID;
+            params.change_times = CHANGE_TIMES;
+            params.change_plan_times = CHNAGE_PLAN_TIMES;
+            params.change_project_times = CHNAGE_PROJECT_TIMES;
+            params.change_apply_times = CHNAGE_APPLY_TIMES;
             _getSplitAmendmentParam(params, treeNode);
             _getSplitAmendmentParam(params, treeNode);
         
         
             rptArchiveObj.toggleBtn(false);
             rptArchiveObj.toggleBtn(false);
@@ -419,10 +422,14 @@ let zTreeOprObj = {
             params.detail_id = DETAIL_ID;
             params.detail_id = DETAIL_ID;
             params.change_id = CHNAGE_ID;
             params.change_id = CHNAGE_ID;
             params.business_id = BUSINESS_ID;
             params.business_id = BUSINESS_ID;
-            params.change_times = CHANGE_TIMES;
             params.change_plan_id = CHNAGE_PLAN_ID;
             params.change_plan_id = CHNAGE_PLAN_ID;
             params.change_project_id = CHNAGE_PROJECT_ID;
             params.change_project_id = CHNAGE_PROJECT_ID;
             params.change_apply_id = CHNAGE_APPLY_ID;
             params.change_apply_id = CHNAGE_APPLY_ID;
+            params.change_times = CHANGE_TIMES;
+            params.change_plan_times = CHNAGE_PLAN_TIMES;
+            params.change_project_times = CHNAGE_PROJECT_TIMES;
+            params.change_apply_times = CHNAGE_APPLY_TIMES;
+
             _getSplitAmendmentParam(params, me.currentNode);
             _getSplitAmendmentParam(params, me.currentNode);
             localStorage[CUST_NAME + '_custCfg'] = JSON.stringify(CUST_CFG);
             localStorage[CUST_NAME + '_custCfg'] = JSON.stringify(CUST_CFG);
 
 
@@ -749,10 +756,14 @@ let rptControlObj = {
         rst.detail_id = DETAIL_ID;
         rst.detail_id = DETAIL_ID;
         rst.change_id = CHNAGE_ID;
         rst.change_id = CHNAGE_ID;
         rst.business_id = BUSINESS_ID;
         rst.business_id = BUSINESS_ID;
-        rst.change_times = CHANGE_TIMES;
         rst.change_plan_id = CHNAGE_PLAN_ID;
         rst.change_plan_id = CHNAGE_PLAN_ID;
         rst.change_project_id = CHNAGE_PROJECT_ID;
         rst.change_project_id = CHNAGE_PROJECT_ID;
         rst.change_apply_id = CHNAGE_APPLY_ID;
         rst.change_apply_id = CHNAGE_APPLY_ID;
+        rst.change_times = CHANGE_TIMES;
+        rst.change_plan_times = CHNAGE_PLAN_TIMES;
+        rst.change_project_times = CHNAGE_PROJECT_TIMES;
+        rst.change_apply_times = CHNAGE_APPLY_TIMES;
+
     // rst.amendmentType = 
     // rst.amendmentType = 
         return rst;
         return rst;
     },
     },
@@ -763,7 +774,7 @@ let rptControlObj = {
             rptControlObj.getTplIdsCommon(refRptTplIds, rpt_sheet_names, splitArchives);
             rptControlObj.getTplIdsCommon(refRptTplIds, rpt_sheet_names, splitArchives);
             let params = rptControlObj.creatCommonExportParam(refRptTplIds);
             let params = rptControlObj.creatCommonExportParam(refRptTplIds);
             params.closeWatermark = getCloseWatermarkForExcel();
             params.closeWatermark = getCloseWatermarkForExcel();
-            if (![-100, -200, -300].includes(STAGE_ID)) {
+            if (current_stage_id > 0) {
                 await rptCustomObj.getCustomSelect(params);
                 await rptCustomObj.getCustomSelect(params);
             }
             }
             params.rpt_names = rpt_sheet_names;
             params.rpt_names = rpt_sheet_names;
@@ -807,7 +818,7 @@ let rptControlObj = {
             rptControlObj.getTplIdsCommon(refRptTplIds, rpt_names, splitArchives);
             rptControlObj.getTplIdsCommon(refRptTplIds, rpt_names, splitArchives);
             let params = rptControlObj.creatCommonExportParam(refRptTplIds);
             let params = rptControlObj.creatCommonExportParam(refRptTplIds);
             params.closeWatermark = getCloseWatermarkForExcel();
             params.closeWatermark = getCloseWatermarkForExcel();
-            if (![-100, -200, -300].includes(STAGE_ID)) {
+            if (current_stage_id > 0) {
                 await rptCustomObj.getCustomSelect(params);
                 await rptCustomObj.getCustomSelect(params);
             }
             }
             params.isOneSheet = true;
             params.isOneSheet = true;
@@ -968,7 +979,7 @@ let rptControlObj = {
                 params.splitArchives = splitArchives;
                 params.splitArchives = splitArchives;
 
 
                 // params.getPicFlag = true; //专门针对草图项,只有此项为true,才需要把草图信息带过来,预览及打印动态加载草图 // 纠结:但这样还是解决不了效率问题,得另外想交互方式
                 // params.getPicFlag = true; //专门针对草图项,只有此项为true,才需要把草图信息带过来,预览及打印动态加载草图 // 纠结:但这样还是解决不了效率问题,得另外想交互方式
-                if (![-100, -200, -300].includes(STAGE_ID)) {
+                if (current_stage_id > 0) {
                     await rptCustomObj.getCustomSelect(params);
                     await rptCustomObj.getCustomSelect(params);
                 }
                 }
                 delete params.orientation; // 打印时有勾选的话,不需要提供方向
                 delete params.orientation; // 打印时有勾选的话,不需要提供方向
@@ -1134,7 +1145,7 @@ let rptControlObj = {
                 let params = rptControlObj.creatCommonExportParam(refRptTplIds);
                 let params = rptControlObj.creatCommonExportParam(refRptTplIds);
                 params.splitArchives = splitArchives;
                 params.splitArchives = splitArchives;
                 // params.getPicFlag = true; //专门针对草图项,只有此项为true,才需要把草图信息带过来,预览及打印动态加载草图 // 纠结:但这样还是解决不了效率问题,得另外想交互方式
                 // params.getPicFlag = true; //专门针对草图项,只有此项为true,才需要把草图信息带过来,预览及打印动态加载草图 // 纠结:但这样还是解决不了效率问题,得另外想交互方式
-                if (![-100, -200, -300].includes(STAGE_ID)) {
+                if (current_stage_id > 0) {
                     await rptCustomObj.getCustomSelect(params);
                     await rptCustomObj.getCustomSelect(params);
                 }
                 }
                 delete params.orientation; // 打印时有勾选的话,不需要提供方向
                 delete params.orientation; // 打印时有勾选的话,不需要提供方向

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

@@ -8,7 +8,7 @@ let rptPrintHelper = {
             let refRptTplIds = [];
             let refRptTplIds = [];
             rptControlObj.getTplIdsCommon(refRptTplIds, null);
             rptControlObj.getTplIdsCommon(refRptTplIds, null);
             let params = rptControlObj.creatCommonExportParam(refRptTplIds);
             let params = rptControlObj.creatCommonExportParam(refRptTplIds);
-            if (![-100, -200, -300].includes(STAGE_ID)) {
+            if (current_stage_id > 0) {
                 await rptCustomObj.getCustomSelect(params);
                 await rptCustomObj.getCustomSelect(params);
             }
             }
             let chkNodes = zTreeOprObj.treeObj.getCheckedNodes(true);
             let chkNodes = zTreeOprObj.treeObj.getCheckedNodes(true);

+ 1 - 1
app/service/change_apply.js

@@ -442,7 +442,7 @@ module.exports = app => {
 
 
         async getListByArchives(tid, ids) {
         async getListByArchives(tid, ids) {
             if (ids.length === 0) return [];
             if (ids.length === 0) return [];
-            const sql = 'SELECT a.* FROM ?? as c LEFT JOIN (SELECT caid, MAX(end_time) as end_time FROM ?? WHERE ' +
+            const sql = 'SELECT c.* FROM ?? as c LEFT JOIN (SELECT caid, MAX(end_time) as end_time FROM ?? WHERE ' +
                 'tid = ? AND caid in (' + this.ctx.helper.getInArrStrSqlFilter(ids) + ') GROUP BY caid) as ca ON c.id = ca.caid WHERE' +
                 'tid = ? AND caid in (' + this.ctx.helper.getInArrStrSqlFilter(ids) + ') GROUP BY caid) as ca ON c.id = ca.caid WHERE' +
                 ' c.tid = ? AND c.id in (' + this.ctx.helper.getInArrStrSqlFilter(ids) + ') AND c.status = ? ORDER BY ca.end_time DESC';
                 ' c.tid = ? AND c.id in (' + this.ctx.helper.getInArrStrSqlFilter(ids) + ') AND c.status = ? ORDER BY ca.end_time DESC';
             const params = [this.tableName, this.ctx.service.changeApplyAudit.tableName, tid, tid, audit.status.checked];
             const params = [this.tableName, this.ctx.service.changeApplyAudit.tableName, tid, tid, audit.status.checked];

+ 1 - 1
app/service/change_plan.js

@@ -465,7 +465,7 @@ module.exports = app => {
 
 
         async getListByArchives(tid, ids) {
         async getListByArchives(tid, ids) {
             if (ids.length === 0) return [];
             if (ids.length === 0) return [];
-            const sql = 'SELECT a.* FROM ?? as c LEFT JOIN (SELECT cpid, MAX(end_time) as end_time FROM ?? WHERE ' +
+            const sql = 'SELECT c.* FROM ?? as c LEFT JOIN (SELECT cpid, MAX(end_time) as end_time FROM ?? WHERE ' +
                 'tid = ? AND cpid in (' + this.ctx.helper.getInArrStrSqlFilter(ids) + ') GROUP BY cpid) as ca ON c.id = ca.cpid WHERE' +
                 'tid = ? AND cpid in (' + this.ctx.helper.getInArrStrSqlFilter(ids) + ') GROUP BY cpid) as ca ON c.id = ca.cpid WHERE' +
                 ' c.tid = ? AND c.id in (' + this.ctx.helper.getInArrStrSqlFilter(ids) + ') AND c.status = ? ORDER BY ca.end_time DESC';
                 ' c.tid = ? AND c.id in (' + this.ctx.helper.getInArrStrSqlFilter(ids) + ') AND c.status = ? ORDER BY ca.end_time DESC';
             const params = [this.tableName, this.ctx.service.changePlanAudit.tableName, tid, tid, audit.status.checked];
             const params = [this.tableName, this.ctx.service.changePlanAudit.tableName, tid, tid, audit.status.checked];

+ 1 - 1
app/service/change_project.js

@@ -416,7 +416,7 @@ module.exports = app => {
 
 
         async getListByArchives(tid, ids) {
         async getListByArchives(tid, ids) {
             if (ids.length === 0) return [];
             if (ids.length === 0) return [];
-            const sql = 'SELECT a.* FROM ?? as c LEFT JOIN (SELECT cpid, MAX(end_time) as end_time FROM ?? WHERE ' +
+            const sql = 'SELECT c.* FROM ?? as c LEFT JOIN (SELECT cpid, MAX(end_time) as end_time FROM ?? WHERE ' +
                 'tid = ? AND cpid in (' + this.ctx.helper.getInArrStrSqlFilter(ids) + ') GROUP BY cpid) as ca ON c.id = ca.cpid WHERE' +
                 'tid = ? AND cpid in (' + this.ctx.helper.getInArrStrSqlFilter(ids) + ') GROUP BY cpid) as ca ON c.id = ca.cpid WHERE' +
                 ' c.tid = ? AND c.id in (' + this.ctx.helper.getInArrStrSqlFilter(ids) + ') AND c.status = ? ORDER BY ca.end_time DESC';
                 ' c.tid = ? AND c.id in (' + this.ctx.helper.getInArrStrSqlFilter(ids) + ') AND c.status = ? ORDER BY ca.end_time DESC';
             const params = [this.tableName, this.ctx.service.changeProjectAudit.tableName, tid, tid, audit.status.checked];
             const params = [this.tableName, this.ctx.service.changeProjectAudit.tableName, tid, tid, audit.status.checked];

+ 3 - 0
app/view/report/index.ejs

@@ -406,8 +406,11 @@
     const CHANGE_TIMES = BGL_OBJ?.change?.times || 1;
     const CHANGE_TIMES = BGL_OBJ?.change?.times || 1;
     const BUSINESS_ID = BGL_OBJ?.BUSINESS_ID || '-1';
     const BUSINESS_ID = BGL_OBJ?.BUSINESS_ID || '-1';
     const CHNAGE_PLAN_ID = BGL_OBJ?.change_plan?.id || '-1';
     const CHNAGE_PLAN_ID = BGL_OBJ?.change_plan?.id || '-1';
+    const CHNAGE_PLAN_TIMES = BGL_OBJ?.change_plan?.times || '-1';
     const CHNAGE_PROJECT_ID = BGL_OBJ?.change_project?.id || '-1';
     const CHNAGE_PROJECT_ID = BGL_OBJ?.change_project?.id || '-1';
+    const CHNAGE_PROJECT_TIMES = BGL_OBJ?.change_project?.times || '-1';
     const CHNAGE_APPLY_ID = BGL_OBJ?.change_apply?.id || '-1';
     const CHNAGE_APPLY_ID = BGL_OBJ?.change_apply?.id || '-1';
+    const CHNAGE_APPLY_TIMES = BGL_OBJ?.change_apply?.times || '-1';
 
 
     const PAGE_SHOW = {closeWatermark: 0, closeExportPdf: 0, closeExportExcel: 0, showArchive: 0, closeShowAllCustomized: 0, isTextSignature: 0, closeArchiveSignature: 0};
     const PAGE_SHOW = {closeWatermark: 0, closeExportPdf: 0, closeExportExcel: 0, showArchive: 0, closeShowAllCustomized: 0, isTextSignature: 0, closeArchiveSignature: 0};
     <% if (pageShow !== null) { %>
     <% if (pageShow !== null) { %>

+ 6 - 3
app/view/report/index_archive.ejs

@@ -324,9 +324,9 @@
 
 
             $("#optionSelectableChanges").empty();
             $("#optionSelectableChanges").empty();
             if (CHANGE_LIST.length > 0) {
             if (CHANGE_LIST.length > 0) {
-                for (let i = CHANGE_LIST.length; i > 0; i--) {
-                    if (parseInt(CHANGE_LIST[i - 1].status) === 3 && CHANGE_LIST[i - 1].code !== current_change_code) {
-                        const str = '<a class="dropdown-item" style="cursor:pointer" onclick="changeCurrentChange(this)" change_id = "' + CHANGE_LIST[i - 1].id + '" change_code = "' + CHANGE_LIST[i - 1].code + '">' + CHANGE_LIST[i - 1].code + '</a>';
+                for (let i = 0; i < CHANGE_LIST.length; i++) {
+                    if (parseInt(CHANGE_LIST[i].status) === 3 && CHANGE_LIST[i].code !== current_change_code) {
+                        const str = '<a class="dropdown-item" style="cursor:pointer" onclick="changeCurrentChange(this)" change_id = "' + CHANGE_LIST[i].id + '" change_code = "' + CHANGE_LIST[i].code + '">' + CHANGE_LIST[i].code + '</a>';
                         $("#optionSelectableChanges").append(str);
                         $("#optionSelectableChanges").append(str);
                     }
                     }
                 }
                 }
@@ -383,6 +383,7 @@
                 ARCHIVE_LIST = result.data;
                 ARCHIVE_LIST = result.data;
                 ARCHIVE_ENCRYPTION_LIST = result.encryptionData;
                 ARCHIVE_ENCRYPTION_LIST = result.encryptionData;
                 TOP_TREE_NODES = JSON.parse(JSON.stringify(result.rpt_tpl_data));
                 TOP_TREE_NODES = JSON.parse(JSON.stringify(result.rpt_tpl_data));
+                buildTplTree();
                 rptArchiveObj.iniPage();
                 rptArchiveObj.iniPage();
             }, function(err){
             }, function(err){
                 $.bootstrapLoading.end();
                 $.bootstrapLoading.end();
@@ -490,6 +491,7 @@
                        ARCHIVE_LIST = result.data;
                        ARCHIVE_LIST = result.data;
                        ARCHIVE_ENCRYPTION_LIST = result.encryptionData;
                        ARCHIVE_ENCRYPTION_LIST = result.encryptionData;
                        TOP_TREE_NODES = JSON.parse(JSON.stringify(ORG_TOP_TREE_NODES));
                        TOP_TREE_NODES = JSON.parse(JSON.stringify(ORG_TOP_TREE_NODES));
+                       buildTplTree();
                        rptArchiveObj.iniPage();
                        rptArchiveObj.iniPage();
                    }, function(err){
                    }, function(err){
                        $.bootstrapLoading.end();
                        $.bootstrapLoading.end();
@@ -518,6 +520,7 @@
                        current_change_id = CHANGE_LIST.length > 0 ? CHANGE_LIST[0].cid || CHANGE_LIST[0].id : -1;
                        current_change_id = CHANGE_LIST.length > 0 ? CHANGE_LIST[0].cid || CHANGE_LIST[0].id : -1;
                        current_change_code = CHANGE_LIST.length > 0 ? CHANGE_LIST[0].code : '';
                        current_change_code = CHANGE_LIST.length > 0 ? CHANGE_LIST[0].code : '';
                        TOP_TREE_NODES = JSON.parse(JSON.stringify(result.rpt_tpl_data));
                        TOP_TREE_NODES = JSON.parse(JSON.stringify(result.rpt_tpl_data));
+                       buildTplTree();
                        rptArchiveObj.iniPage();
                        rptArchiveObj.iniPage();
                        buildChangeSelection();
                        buildChangeSelection();
                    }, function(err){
                    }, function(err){