Browse Source

批量设置签名标段显示调整

Tony Kang 8 months ago
parent
commit
37f2fe9b8b
2 changed files with 156 additions and 5 deletions
  1. 4 2
      app/view/report/index.ejs
  2. 152 3
      app/view/report/rpt_all_popup.ejs

+ 4 - 2
app/view/report/index.ejs

@@ -467,12 +467,14 @@
     const tenders = JSON.parse(unescape('<%- escape(JSON.stringify(tenderList)) %>'));
     let ARCHIVE_LIST = JSON.parse('<%- JSON.stringify(archiveList) %>');
     let LAST_AUDITOR = JSON.parse('<%- JSON.stringify(lastAuditor) %>');
-    const category = JSON.parse('<%- JSON.stringify(categoryData) %>');
+    const category = JSON.parse(unescape('<%- escape(JSON.stringify(categoryData)) %>'));
     const auditConst = JSON.parse('<%- JSON.stringify(auditConst) %>');
     const ledgerAuditConst = JSON.parse('<%- JSON.stringify(ledgerAuditConst) %>');
     const OSS_PATH = '<%- OSS_PATH %>';
+    let TENDER_SOURCE_TREE;
     $(document).ready(() => {
-        rptCustomObj.initTenderTree(tenders, category);
+        TENDER_SOURCE_TREE = Tender2Tree.convert(category, tenders, ledgerAuditConst, auditConst);
+        rptCustomObj.initTenderTree(tenders, category); // 好像没用上        
         // rptCustomObj.initTenderTreeForCross(tenders, category);
     });
 </script>

+ 152 - 3
app/view/report/rpt_all_popup.ejs

@@ -204,7 +204,7 @@
             </div>
             <div class="modal-footer">
                 <% if ( stg_id > 0 && pageShow !== null && parseInt(pageShow.openSign) === 1) { %>
-                    <button type="button" id="btn_cross_tender" class="btn btn-sm btn-link float-left" data-dismiss="modal" data-toggle="modal" data-target="#batch-eSignature" id="batch-setupProjSignature" onclick="rptSignatureHelper.resetESignature(zTreeOprObj.currentRptPageRst, 'batch-eSignatureBodyDiv'); buildTendersTree();">批量设置其他标段</button>
+                    <button type="button" id="btn_cross_tender" class="btn btn-sm btn-link float-left" data-dismiss="modal" data-toggle="modal" data-target="#batch-eSignature" id="batch-setupProjSignature" onclick="rptSignatureHelper.resetESignature(zTreeOprObj.currentRptPageRst, 'batch-eSignatureBodyDiv'); buildTendersTree_Ex();">批量设置其他标段</button>
                 <% } %>
                 <% if (stg_id === -300) { %>
                     <button type="button" id="btn_cross_tender" class="btn btn-sm btn-link float-left" data-dismiss="modal" data-toggle="modal" data-target="#batch-eSignature" id="batch-setupChangeSignature" onclick="rptSignatureHelper.resetESignature(zTreeOprObj.currentRptPageRst, 'batch-eSignatureBodyDiv', true); buildChangeTree();">批量设置其他变更令</button>
@@ -778,16 +778,165 @@
 
     let SELECTED_TENDERS = [];
 
+    function buildTendersTree_Ex() {
+        // 这里直接从 TENDER_SOURCE_TREE 对象获取数据,无需绕大弯(从category那里重复整理)
+        const treeCache = [];
+        const tmpCacheArr = [];
+        const _getTenderByTid = (tid) => {
+            let rst = null;
+            for (const tender of tenders) {
+                if (tender.id === tid) {
+                    rst = tender;
+                    break;
+                }
+            }
+            return rst;
+        };
+        const _createTenderItem = (tid) => {
+            const tender = _getTenderByTid(tid);
+            let rst = {
+                name: tender.name,
+                id : -1,
+                cid : -1,
+                tender_id: tender.id,
+                last_stage: tender.lastStage?.order || -1,
+                last_stage_id: tender.lastStage?.id || -1,
+                report_id: zTreeOprObj.currentNode.refId,
+                signature: '',
+                items: [],
+                isParent: false
+            }
+            return rst;
+        };
+        const _createItems = function (parentItems, parentNode, node) {
+            if (node.cid) {
+                // node是category目录
+                let item = {
+                    name: node.name,
+                    id : node.tmt_id,
+                    cid : node.cid,
+                    items: [],
+                    isParent: true
+                };
+                parentItems.push(item);
+                if (node.children && node.children.length > 0) {
+                    node.children.forEach(subNode => {
+                        _createItems(item.items, item, subNode);
+                    });
+                }
+            } else {
+                // node是tender数据
+                let tdItem = _createTenderItem(node.tid); //标段节点
+                tmpCacheArr.push([parentNode, tdItem]);                    
+            }
+        };
+        TENDER_SOURCE_TREE.children.forEach(tdNode => {
+            _createItems(treeCache, null, tdNode); // 因TENDER_SOURCE_TREE是完整的,可以一次性处理所有相关数据
+        });
+        // 无需判断是否有用户已设置的分类
+        for (const pairItem of tmpCacheArr) {
+                pairItem[0].items.push(pairItem[1]);
+            }
+        //4. 剔除空items的项
+        const _removeEmptyItems = function (parentItem) {
+            let rst = false;
+            if (parentItem.items.length === 0) {
+                if (parentItem.isParent) {
+                    rst = true;
+                }
+            } else {
+                for (let idx = parentItem.items.length - 1; idx >= 0; idx--) {
+                    if (_removeEmptyItems(parentItem.items[idx])) {
+                        parentItem.items.splice(idx, 1);
+                    }
+                }
+                rst = parentItem.items.length === 0;
+            }
+            return rst;
+        }
+        for (let idx = treeCache.length - 1; idx >= 0; idx--) {
+            if (_removeEmptyItems(treeCache[idx])) {
+                    treeCache.splice(idx, 1);
+            }
+        }
+        //还要请求各标段的原签名数据
+        const params = {};
+        params.selectedTenders = [];
+        const _getTenderRelatedInfos = (parentItem, rstArr) => {
+            if (parentItem.items.length === 0) {
+                if (!parentItem.isParent) {
+                    rstArr.push([parentItem.tender_id, parentItem.last_stage_id, parentItem.report_id]);
+                }
+            } else {
+                for (let idx = parentItem.items.length - 1; idx >= 0; idx--) {
+                    _getTenderRelatedInfos(parentItem.items[idx], rstArr);
+                }
+            }
+        };
+        const _addHint = (parentItem, relArr) => {
+            if (parentItem.items.length === 0) {
+                if (!parentItem.isParent) {
+                    for (const rel of relArr) {
+                        if (rel.tender_id === parentItem.tender_id && rel.sid === parentItem.last_stage_id && rel.rpt_id === parentItem.report_id) {
+                            let hintStr = '';
+                            if (rel.rel_content instanceof Array) {
+                                for (let idx = 0; idx < rel.rel_content.length; idx++) {
+                                    const dtlRel = rel.rel_content[idx];
+                                    if (idx > 0) {
+                                        hintStr = hintStr + '、';
+                                    }
+                                    hintStr = hintStr + '(' + dtlRel.signature_name + ')' + dtlRel.user_name;
+                                }
+                            }
+                            parentItem.signature = hintStr;
+                            break;
+                        }
+                    }
+                }
+            } else {
+                for (let idx = parentItem.items.length - 1; idx >= 0; idx--) {
+                    _addHint(parentItem.items[idx], relArr);
+                }
+            }
+        };
+        for (let idx = treeCache.length - 1; idx >= 0; idx--) {
+            _getTenderRelatedInfos(treeCache[idx], params.selectedTenders);
+        }
+        $.bootstrapLoading.start();
+        CommonAjax.postXsrfEx("/tender/report_api/getMultiRoleRelationships", params, 30000, true, getCookie('csrfToken_j'),
+            function(result){
+                $.bootstrapLoading.end();
+                let relArr = result.data;
+                for (const rel of relArr) {
+                    rel.rel_content = JSON.parse(rel.rel_content);
+                }
+                console.log(relArr);
+                //5. 加hint
+                for (let idx = treeCache.length - 1; idx >= 0; idx--) {
+                    _addHint(treeCache[idx], relArr);
+                }
+                //6. 建树
+                _buildTenderTree('batch_tenders_individual', treeCache);
+            }, function(err){
+                $.bootstrapLoading.end();
+            }, function(ex){
+                $.bootstrapLoading.end();
+            }
+        );
+    }
+
     function buildTendersTree() {
+        // return false; // 暂时跳出
         let sortedCat = [];
         SELECTED_TENDERS = [];
         for (const cat of category) {
-            if (cat.level > 0) {
+            if (cat.level > 0) { // 临时加true条件
                 sortedCat.push(cat);
             }
         }
         for (const tender of tenders) {
             if (tender.lastStage !== undefined && tender.lastStage !== null && tender.category && tender.category.length === sortedCat.length) {
+            // if (tender.lastStage !== undefined && tender.lastStage !== null && tender.category && tender.category.length > 0) {
                 for (let cat of tender.category) {
                     for (let cIdx = 0; cIdx < sortedCat.length; cIdx++) {
                         if (cat.cid === sortedCat[cIdx].id) {
@@ -801,7 +950,7 @@
                 });
             }
         }
-        let treeCache = [];
+        const treeCache = [];
         //1. 选择用户已设置的分类
         if (sortedCat.length > 0) {
             sortedCat.sort(function(i1, i2){