Просмотр исходного кода

项目管理收起节点操作的显示问题

1.使用“复制到”功能,A建设项目下将某分段文件复制到B建设项目下,显示有问题 ok
2. 降级到收起节点位置时,展开收起的节点 ok
vian 6 лет назад
Родитель
Сommit
ef78ce355b
2 измененных файлов с 45 добавлено и 14 удалено
  1. 21 11
      web/building_saas/pm/js/pm_newMain.js
  2. 24 3
      web/building_saas/pm/js/pm_tree.js

+ 21 - 11
web/building_saas/pm/js/pm_newMain.js

@@ -481,7 +481,7 @@ const projTreeObj = {
         selected.nextSibling ? downMove.removeClass('disabled') : downMove.addClass('disabled');
 
     },
-    doAfterTreeOpr: function ({selected, parent, next, projectMap}) {
+    doAfterTreeOpr: function ({selected, parent, next, projectMap}, action) {
         $.bootstrapLoading.start();
         moveProjects({"user_id": userID, rootProjectID: null, projectMap: projectMap, feeRateMap: {}, unitPriceMap: {}},function (result) {
             for (let key in result) {//更新前端节点数据
@@ -493,7 +493,7 @@ const projTreeObj = {
                     }
                 }
             }
-            projTreeObj.moveTo(selected, null, parent, next, null);
+            projTreeObj.moveTo(selected, null, parent, next, null, action);
             $.bootstrapLoading.end();
         });
     },
@@ -519,8 +519,8 @@ const projTreeObj = {
             parent = null,
             next = null,
             projectMap = {};
-        const folderLevel = getFolderLevel(selected);
-        if (folderLevel === 3) {
+        const maxFolderLevel = getMaxFolderLevel(selected);
+        if (maxFolderLevel === 3) {
             return alert('文件夹不能超过3层');
         }
         //更新前兄弟节点
@@ -534,7 +534,7 @@ const projTreeObj = {
         }
         //更新选中节点
         projectMap[selected.id()] = {query: {ID: selected.id()}, update: {ParentID: orgPre.id(), NextSiblingID: -1}};
-        this.doAfterTreeOpr({selected, parent, next, projectMap});
+        this.doAfterTreeOpr({selected, parent, next, projectMap}, 'downLevel');
     },
     upMove: function () {
         let selected = projTreeObj.tree.selected,
@@ -1427,9 +1427,11 @@ const projTreeObj = {
             sheet.setSelection(rIdx, cIdx, 1, 1);
             me.tree.selected = node;
             //父节点收起时添加子节点,子节点添加完后隐藏
-            if(node.parent && !node.parent.expanded){
+            /*if(node.parent && !node.parent.expanded){
                 sheet.setRowVisible(rIdx, false);
-            }
+            }*/
+            // 添加节点自动展开相关的隐藏节点
+            me.tree.setNodesExpanded(node.getCollapseParents(), sheet);
             sheet.getCell(rIdx, 0).cellType(me.getTreeNodeCell(me.tree));
             me.refreshNodeData(node);
         });
@@ -1446,7 +1448,7 @@ const projTreeObj = {
         this.workBook.getActiveSheet().deleteRows(orgRow, 1);
         this.addRow(this.tree.items[newRow]);
     },
-    moveTo : function(select,target,parent,next,oldProject){
+    moveTo : function(select,target,parent,next,oldProject,action){
         let me = this;
         let fromRow = select.serialNo();
         let rCout = select.posterityCount() + 1;//删除的行数
@@ -1454,9 +1456,6 @@ const projTreeObj = {
         let refreshNodes = [];
         me.tree.removeNode(select);//删除旧节点
         let newNode  = addNewNodes(select, parent, next);
-        // todo refreshNodeVisible
-        /*if (parent && parent.data && !parent.expanded) {
-        }*/
         if(oldProject){
             refreshNodes = refreshNodes.concat(me.calEngineeringCost(oldProject));
             refreshNodes = refreshNodes.concat(me.calEngineeringCost(parent));
@@ -1479,6 +1478,9 @@ const projTreeObj = {
             refreshNodes = refreshNodes.concat(newNodes);
             me.refreshNodeData(refreshNodes);
         });
+        if (action === 'downLevel') {
+            me.tree.setNodesExpanded([parent], sheet);
+        }
 
         function addNewNodes(node,parent,next) {
             const nodeState = {};
@@ -2910,6 +2912,14 @@ function getFolderLevel(selected) {
     return level;
 }
 
+// 选中节点及其子项最大文件夹层数
+function getMaxFolderLevel(selected) {
+    const nodes = [selected, ...selected.getAllChildren()];
+    const levels = nodes.map(node => getFolderLevel(node));
+    return Math.max(...levels);
+}
+
+
 //判断是否是三层文件夹以内
 function withinTreble(selectedItem){
     if(selectedItem.data.projType === projectType.tender){

+ 24 - 3
web/building_saas/pm/js/pm_tree.js

@@ -122,6 +122,17 @@ const pmTree = {
                     _view._hideNodes(this.children);
                 }
             };
+            Node.prototype.getCollapseParents = function () {
+                const rst = [];
+                let parent = this.parent;
+                while (parent && parent.data) {
+                    if (!parent.expanded) {
+                        rst.push(parent);
+                    }
+                    parent = parent.parent;
+                }
+                return rst;
+            };
             Node.prototype.serialNo = function () {
                 return this.tree.items.indexOf(this);
             };
@@ -437,9 +448,19 @@ const pmTree = {
                     return true;
                 }
             };
-
-            Tree.prototype.refreshData = function () {
-
+            Tree.prototype.setNodesExpanded = function (nodes, sheet) {
+                TREE_SHEET_HELPER.massOperationSheet(sheet, () => {
+                    nodes.forEach(node => {
+                        node.setExpanded(true);
+                        const index = node.serialNo();
+                        const count = node.posterityCount();
+                        for (let i = 0; i < count; i++) {
+                            const row = index + i;
+                            const child = this.items[row + 1];
+                            sheet.setRowVisible(row + 1, child.visible);
+                        }
+                    });
+                });
             };
 
             return Tree;