Преглед на файлове

1. 填项目节数量
2. 项目管理,资料归集,动态投资,显示至

MaiXinRong преди 1 година
родител
ревизия
f71d448b79

+ 58 - 0
app/public/js/budget_list.js

@@ -92,6 +92,22 @@ $(document).ready(() => {
                 const selectId = $('tr.table-active').attr('tree_id');
                 return selectId || setting.treeSetting.rootId;
             },
+            expandByLevel: function(level){
+                budgetTree.expandByLevel(level);
+                for (const node of budgetTree.nodes) {
+                    const tr = $(`tr[tree_id=${node.id}]`);
+                    if (node.expanded) {
+                        $('.fold-switch', tr).html(`<i class="fa fa-minus-square-o"></i>`);
+                    } else {
+                        $('.fold-switch', tr).html(`<i class="fa fa-plus-square-o"></i>`);
+                    }
+                    if (node.visible) {
+                        tr.show();
+                    } else {
+                        tr.hide();
+                    }
+                }
+            }
         };
 
         Utils.reloadTable();
@@ -114,6 +130,48 @@ $(document).ready(() => {
                 }
             }
         });
+        const getChildrenLevel = function (node) {
+            let iLevel = node.tree_level || 1;
+            if (node.children && node.children.length > 0) {
+                for (const c of node.children) {
+                    iLevel = Math.max(iLevel, getChildrenLevel(c));
+                }
+            }
+            return iLevel;
+        };
+        let tenderTreeShowLevel = $.cs_showLevel({
+            selector: '#show-level',
+            levels: [
+                {
+                    type: 'sort', count: 5, visible_count: function () {
+                        return budgetTree.children.map(getChildrenLevel).reduce((x, y) => { return Math.max(x, y); }, 0) - 1;
+                    }
+                },
+                {
+                    type: 'last', title: '最底层', visible: function () {
+                        const count = budgetTree.children.map(getChildrenLevel).reduce((x, y) => { return Math.max(x, y); }, 0) - 1;
+                        return count > 0;
+                    }
+                },
+            ],
+            showLevel: function (tag) {
+                switch (tag) {
+                    case "1":
+                    case "2":
+                    case "3":
+                    case "4":
+                    case "5":
+                        Utils.expandByLevel(parseInt(tag));
+                        break;
+                    case "last":
+                        Utils.expandByLevel(20);
+                        break;
+                    default: return;
+                }
+            }
+        });
+        tenderTreeShowLevel.initShowLevel();
+        tenderTreeShowLevel.refreshMenuVisible();
         return { budgetTree, TableObj, ...Utils };
     })({
         treeSetting: { id: 'id', pid: 'tree_pid', level: 'tree_level', order: 'tree_order', rootId: '-1' },

+ 59 - 0
app/public/js/file_list.js

@@ -80,6 +80,22 @@ $(document).ready(() => {
                 const selectId = $('tr.table-active').attr('tree_id');
                 return selectId || setting.treeSetting.rootId;
             },
+            expandByLevel: function(level){
+                projectTree.expandByLevel(level);
+                for (const node of projectTree.nodes) {
+                    const tr = $(`tr[tree_id=${node.id}]`);
+                    if (node.expanded) {
+                        $('.fold-switch', tr).html(`<i class="fa fa-minus-square-o"></i>`);
+                    } else {
+                        $('.fold-switch', tr).html(`<i class="fa fa-plus-square-o"></i>`);
+                    }
+                    if (node.visible) {
+                        tr.show();
+                    } else {
+                        tr.hide();
+                    }
+                }
+            }
         };
 
         Utils.reloadTable();
@@ -101,6 +117,49 @@ $(document).ready(() => {
                 }
             }
         });
+
+        const getChildrenLevel = function (node) {
+            let iLevel = node.tree_level || 1;
+            if (node.children && node.children.length > 0) {
+                for (const c of node.children) {
+                    iLevel = Math.max(iLevel, getChildrenLevel(c));
+                }
+            }
+            return iLevel;
+        };
+        let tenderTreeShowLevel = $.cs_showLevel({
+            selector: '#show-level',
+            levels: [
+                {
+                    type: 'sort', count: 5, visible_count: function () {
+                        return projectTree.children.map(getChildrenLevel).reduce((x, y) => { return Math.max(x, y); }, 0) - 1;
+                    }
+                },
+                {
+                    type: 'last', title: '最底层', visible: function () {
+                        const count = projectTree.children.map(getChildrenLevel).reduce((x, y) => { return Math.max(x, y); }, 0) - 1;
+                        return count > 0;
+                    }
+                },
+            ],
+            showLevel: function (tag) {
+                switch (tag) {
+                    case "1":
+                    case "2":
+                    case "3":
+                    case "4":
+                    case "5":
+                        Utils.expandByLevel(parseInt(tag));
+                        break;
+                    case "last":
+                        Utils.expandByLevel(20);
+                        break;
+                    default: return;
+                }
+            }
+        });
+        tenderTreeShowLevel.initShowLevel();
+        tenderTreeShowLevel.refreshMenuVisible();
         return { projectTree, TableObj, ...Utils };
     })({
         treeSetting: { id: 'id', pid: 'tree_pid', level: 'tree_level', order: 'tree_order', rootId: '-1' },

+ 3 - 2
app/public/js/shares/drag_tree.js

@@ -261,15 +261,16 @@ const createDragTree = function (setting) {
          */
         expandByCustom(checkFun) {
             this._recursiveExpand(this.children, null, checkFun);
-            this._saveMarkExpandFold();
+            // this._saveMarkExpandFold();
         }
         /**
          * 展开到第几层
          * @param {Number} level - 展开层数
          */
         expandByLevel(level) {
+            const levelField = this.setting.level;
             this.expandByCustom(function (n) {
-                return n.level < level;
+                return n[levelField] < level;
             });
         }
 

+ 54 - 0
app/public/js/stage.js

@@ -1588,6 +1588,10 @@ $(document).ready(() => {
                             if (differ) updateStage.push({ lid: p.id, contract_tp: tp });
                         }
                     }
+                    if (updateStage.length === 0) {
+                        toastr.warning('所选节点及子项已全部计量');
+                        return;
+                    }
 
                     if (updateStage.length > 0) {
                         if (updateStage.length > 1000) {
@@ -1607,6 +1611,56 @@ $(document).ready(() => {
                     }
                 },
             },
+            'remainXmjQty': {
+                name: '填项目节数量',
+                callback: function(key, opt) {
+                    const sheet = spSpread.getActiveSheet();
+                    const node = SpreadJsObj.getSelectObject(slSpread.getActiveSheet());
+
+                    const updateDgn = [];
+                    const posterity = stageTree.getPosterity(node);
+                    posterity.unshift(node);
+                    for (const p of posterity) {
+                        if (p.b_code) continue;
+                        const posRange = stagePos.ledgerPos[itemsPre + p.id] || [];
+                        if (posRange.length > 0) continue;
+
+                        if (p.dgn_qty1 !== p.deal_dgn_qty1 || p.dgn_qty2 !== p.deal_dgn_qty2) updateDgn.push({ id: p.id, deal_dgn_qty1: p.dgn_qty1, deal_dgn_qty2: p.dgn_qty2 });
+                    }
+                    if (updateDgn.length === 0) {
+                        toastr.warning('所选项目节及子项的项目节数量已与台账相等');
+                        return;
+                    }
+
+                    if (updateDgn.length > 1000) {
+                        toastr.warning('提交的数据太大,仅提交1000条数据');
+                        updateDgn.length = 1000;
+                    }
+                    postData(window.location.pathname + '/update', {bills: { dgn: updateDgn }}, function (result) {
+                        const nodes = stageTree.loadPostStageData(result);
+                        stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes);
+                        if (detail) {
+                            detail.loadStageLedgerUpdateData(result, nodes);
+                        } else {
+                            stageIm.loadUpdateLedgerData(result, nodes);
+                        }
+                        stageTreeSpreadObj.loadExprToInput(sheet);
+                    });
+                    // postData(window.location.pathname + '/update', { dgn: 'all' }, function (result) {
+                    //     const nodes = stageTree.loadPostStageData(result);
+                    //     stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes);
+                    //     if (detail) {
+                    //         detail.loadStageLedgerUpdateData(result, nodes);
+                    //     } else {
+                    //         stageIm.loadUpdateLedgerData(result, nodes);
+                    //     }
+                    //     stageTreeSpreadObj.loadExprToInput(sheet);
+                    // });
+                },
+                visible: function(key, opt) {
+                    return !readOnly;
+                },
+            },
             zjjlSpr: '----',
             'locateZjjl': {
                 name: '定位至中间计量',

+ 60 - 0
app/public/js/sub_project.js

@@ -12,6 +12,7 @@ $(document).ready(function() {
         const ProjectTree = createDragTree(setting.treeSetting);
         ProjectTree.loadDatas(setting.source);
         const TableObj = $(setting.table);
+        let tenderTreeShowLevel;
 
         const Utils = {
             getRowTdHtml: function (node, tree) {
@@ -134,6 +135,22 @@ $(document).ready(function() {
                 postData('/subproj/move', { id: node.id, type }, function (result) {
                     Utils.refreshTreeTable(result);
                 });
+            },
+            expandByLevel: function(level){
+                ProjectTree.expandByLevel(level);
+                for (const node of ProjectTree.nodes) {
+                    const tr = $(`tr[tree_id=${node.id}]`);
+                    if (node.expanded) {
+                        $('.fold-switch', tr).html(`<i class="fa fa-minus-square-o"></i>`);
+                    } else {
+                        $('.fold-switch', tr).html(`<i class="fa fa-plus-square-o"></i>`);
+                    }
+                    if (node.visible) {
+                        tr.show();
+                    } else {
+                        tr.hide();
+                    }
+                }
             }
         };
 
@@ -236,6 +253,49 @@ $(document).ready(function() {
                 }
             }
         });
+
+        const getChildrenLevel = function (node) {
+            let iLevel = node.tree_level || 1;
+            if (node.children && node.children.length > 0) {
+                for (const c of node.children) {
+                    iLevel = Math.max(iLevel, getChildrenLevel(c));
+                }
+            }
+            return iLevel;
+        };
+        tenderTreeShowLevel = $.cs_showLevel({
+            selector: '#show-level',
+            levels: [
+                {
+                    type: 'sort', count: 5, visible_count: function () {
+                        return ProjectTree.children.map(getChildrenLevel).reduce((x, y) => { return Math.max(x, y); }, 0) - 1;
+                    }
+                },
+                {
+                    type: 'last', title: '最底层', visible: function () {
+                        const count = ProjectTree.children.map(getChildrenLevel).reduce((x, y) => { return Math.max(x, y); }, 0) - 1;
+                        return count > 0;
+                    }
+                },
+            ],
+            showLevel: function (tag) {
+                switch (tag) {
+                    case "1":
+                    case "2":
+                    case "3":
+                    case "4":
+                    case "5":
+                        Utils.expandByLevel(parseInt(tag));
+                        break;
+                    case "last":
+                        Utils.expandByLevel(20);
+                        break;
+                    default: return;
+                }
+            }
+        });
+        tenderTreeShowLevel.initShowLevel();
+        tenderTreeShowLevel.refreshMenuVisible();
         return { ProjectTree, TableObj, ...Utils };
     })({
         treeSetting: { id: 'id', pid: 'tree_pid', level: 'tree_level', order: 'tree_order', rootId: '-1' },

+ 2 - 0
app/view/budget/list.ejs

@@ -2,6 +2,8 @@
     <div class="panel-title fluid">
         <div class="title-main  d-flex justify-content-between">
             <div>动态投资</div>
+            <div class="d-inline-block ml-1" id="show-level"></div>
+            <div class="ml-auto"></div>
         </div>
     </div>
     <div class="content-wrap">

+ 2 - 0
app/view/file/index.ejs

@@ -2,6 +2,8 @@
     <div class="panel-title fluid">
         <div class="title-main  d-flex justify-content-between">
             <div>资料归集</div>
+            <div class="d-inline-block ml-1" id="show-level"></div>
+            <div class="ml-auto"></div>
         </div>
     </div>
     <div class="content-wrap">

+ 1 - 0
app/view/sub_proj/index.ejs

@@ -2,6 +2,7 @@
     <div class="panel-title fluid">
         <div class="title-main  d-flex justify-content-between">
             <div>项目列表</div>
+            <div class="d-inline-block ml-1" id="show-level"></div>
             <% if (ctx.session.sessionUser.is_admin) { %>
             <div class="ml-auto">
                 <a href="#add-folder" name="add" data-toggle="modal" data-target="#add-folder" class="btn btn-sm btn-primary">新建文件夹</a>

+ 3 - 0
config/web.js

@@ -1026,6 +1026,7 @@ const JsFiles = {
                     '/public/js/shares/drag_tree.js',
                     '/public/js/path_tree.js',
                     '/public/js/shares/tenders2tree.js',
+                    '/public/js/shares/show_level.js',
                     '/public/js/spreadjs_rela/spreadjs_zh.js',
                     '/public/js/sub_project.js',
                 ],
@@ -1064,6 +1065,7 @@ const JsFiles = {
                     '/public/js/shares/drag_tree.js',
                     '/public/js/path_tree.js',
                     '/public/js/shares/tenders2tree.js',
+                    '/public/js/shares/show_level.js',
                     '/public/js/spreadjs_rela/spreadjs_zh.js',
                     '/public/js/file_list.js',
                 ],
@@ -1095,6 +1097,7 @@ const JsFiles = {
                     '/public/js/shares/drag_tree.js',
                     '/public/js/path_tree.js',
                     '/public/js/shares/tenders2tree.js',
+                    '/public/js/shares/show_level.js',
                     '/public/js/spreadjs_rela/spreadjs_zh.js',
                     '/public/js/budget_list.js',
                 ],