Browse Source

清单模板,多选降级功能

zhangweicheng 7 years ago
parent
commit
85e4c0efb7

+ 40 - 0
public/web/id_tree.js

@@ -607,6 +607,46 @@ var idTree = {
             success = true;
             return success;
         };
+        Tree.prototype.m_downLevel = function (nodes) {
+            let pre = nodes[0].preSibling ; //第一个节点的前一节点,即会成为新的父节点
+            let next ;//最后一个节点的后一节点,会成为pre 的下一个节点
+            let last ;//选中的最后一个节点,nextSibling要设置为0
+            for( let n of nodes){
+                next = n.nextSibling;
+                last = n;
+                let  children = n.parent?n.parent.children:this.roots;
+                children.splice(n.siblingIndex(), 1);
+                pre.addChild(n);
+            }
+            if (!pre.expanded) {
+                pre.setExpanded(true);
+            }
+            pre.setNextSibling(next);
+            last.nextSibling = null;
+            tools.sortTreeItems(this);
+            return true;
+        };
+
+        Tree.prototype.getDownLevelDatas = function (nodes) {
+            let dataMap = {},updateDatas=[],nextID,last;//注释同m_downLevel 方法
+            let newParent = nodes[0].preSibling;//{"type":"update","data":{"ID":3,"ParentID":-1,"NextSiblingID":5}}
+            for(let n of nodes){
+                nextID = n.getNextSiblingID();
+                last = n;
+                dataMap[n.getID()] = {"ID":n.getID(),"ParentID":newParent.getID()}//修改父ID;
+            }
+            dataMap[newParent.getID()] = {"ID":newParent.getID(),"NextSiblingID":nextID}//设置新的父节点的下一个节点ID;
+            if(dataMap[last.getID()]!==undefined){//把最后一个节点的下一个节点ID变成-1
+                dataMap[last.getID()].NextSiblingID = -1
+            }else {
+                dataMap[last.getID()] = {"ID":last.getID(),"NextSiblingID":-1};
+            }
+            for(let key in dataMap){
+                updateDatas.push({type: 'update', data:dataMap[key]});
+            }
+            return updateDatas;
+
+        };
 
         Tree.prototype.getDeleteData = function (node) {
             var data = [];

+ 13 - 0
public/web/tree_sheet/tree_sheet_controller.js

@@ -157,6 +157,19 @@ var TREE_SHEET_CONTROLLER = {
                 }
             }
         };
+        controller.prototype.m_downLevel = function (nodes) { //多选降级
+            var that = this;
+            if (this.tree.m_downLevel(nodes)) {
+                TREE_SHEET_HELPER.massOperationSheet(that.sheet, function () {
+                    TREE_SHEET_HELPER.refreshNodesVisible([nodes[0].parent], that.sheet, true);
+                    //that.sheet.showRow(that.tree.selected.serialNo(), GC.Spread.Sheets.VerticalPosition.center);
+                    if (that.event.refreshBaseActn) {
+                        that.event.refreshBaseActn(that.tree);
+                    }
+                });
+            }
+
+        };
         controller.prototype.upMove = function () {
             var that = this, sels = this.sheet.getSelections();
             if (this.tree.selected) {

+ 55 - 38
web/maintain/bill_template_lib/js/bills_template_edit.js

@@ -223,6 +223,7 @@ $(document).ready(function () {
         setButtonValid(tree.selected && tree.selected.canUpMove(), $('#upMove'));
         setButtonValid(tree.selected && tree.selected.canDownMove(), $('#downMove'));
         setButtonValid(tree.selected ? true : false, $('#delete'));
+        
     };
     let RefreshBillsData = function (datas) {
         datas.forEach(function (data) {
@@ -326,8 +327,6 @@ $(document).ready(function () {
     let controller = TREE_SHEET_CONTROLLER.createNew(tree, billsSpread.getActiveSheet(), TEMPLATE_BILLS_SETTING);
     let fixedFlagMap = getNameToValueMap(billsFixedFlagList);
     let typeMap = getNameToValueMap(billsTypeFlagList);
-    console.log(fixedFlagMap);
-    console.log(typeMap);
     //format code
     //billsSpread.getSheet(0).setFormatter(-1, 1, '@');
     controller.bind('refreshBaseActn', RefreshBaseActn);
@@ -433,44 +432,15 @@ $(document).ready(function () {
     $('#delete').click(function () {
         let me = this;
         $(me).addClass('disabled');
-        let selection = controller.sheet.getSelections()[0], updateData,deleteMap={},deleteNodes=[];
-        for(let i=0;i < selection.rowCount;i++){
-            let tem_node = controller.tree.items[selection.row+i];
-            if(i == 0){//第一个直接添加;
-                deleteMap[tem_node.getID()] = tem_node;
-                deleteNodes.push(tem_node);
-            }else {
-                setNodeToMapAndArray(tem_node,deleteMap,deleteNodes);
-            }
-        }
-
+        let [deleteMap,deleteNodes] = getNodesAndMapFromSheet(controller);
         if (deleteNodes.length > 0) {
-            updateData = controller.tree.getDeleteDatas(deleteMap,deleteNodes);
+            let updateData = controller.tree.getDeleteDatas(deleteMap,deleteNodes);
             CommonAjax.post(updateUrl, updateData, function (data) {
                 controller.m_delete(deleteNodes);
                 controller.showTreeData();
                 $(me).removeClass('disabled');
             });
         }
-        function setNodeToMapAndArray(node,map,array) {
-            let nodeID = node.getID();
-            if(map[nodeID]==undefined||map[nodeID]==null){
-                newMap(node,node.parent,map,array)
-            }
-            function newMap(node,parent,map,array) {
-                let nodeID =node.getID();
-                if(parent==null){//说明已经是最顶层了
-                    map[nodeID]=node;
-                    array.push(node);
-                }else {
-                    let parentID = parent.getID();
-                    if(map[parentID]==undefined||map[parentID]==null){
-                        newMap(node,parent.parent,map,array);
-                    }
-                }
-            }
-        }
-
     });
     $('#upLevel').click(function () {
         let me = this;
@@ -488,11 +458,21 @@ $(document).ready(function () {
     $('#downLevel').click(function () {
         let me = this;
         $(me).addClass('disabled');
-        var selected = controller.tree.selected, updateData;
-        if (selected) {
-            updateData = selected.getDownLevelData();
-            CommonAjax.post(updateUrl, updateData, function (data) {
-                controller.downLevel();
+        let [dMap,dNodes] = getNodesAndMapFromSheet(controller);
+        let newNodes = [dNodes[0]];
+        if(dNodes.length > 1){//如果是多选,则去掉与第一个节点不同级的节点
+            for(let i = 1;i<dNodes.length;i++){
+                if(dNodes[i].parent == dNodes[0].parent) newNodes.push(dNodes[i])
+            }
+        }
+        let updateDatas = controller.tree.getDownLevelDatas(newNodes);
+        if(updateDatas.length > 0){
+            CommonAjax.post(updateUrl, updateDatas, function (data) {
+                controller.m_downLevel(newNodes);
+                for(let u of updateDatas){
+                    let node = controller.tree.findNode(u.data.ID);
+                    refreshNodeData(node,u.data);
+                }
                 controller.showTreeData();
                 $(me).removeClass('disabled');
             });
@@ -524,4 +504,41 @@ $(document).ready(function () {
             });
         }
     });
+    function getNodesAndMapFromSheet(controller) {//表格中选中的节点整理,只留下父节点
+        let selection = controller.sheet.getSelections()[0],map={},nodes=[];
+        for(let i=0;i < selection.rowCount;i++){
+            let tem_node = controller.tree.items[selection.row+i];
+            if(i == 0){//第一个直接添加;
+                map[tem_node.getID()] = tem_node;
+                nodes.push(tem_node);
+            }else {
+                setNodeToMapAndArray(tem_node,map,nodes);
+            }
+        }
+        return [map,nodes];
+    }
+    function setNodeToMapAndArray(node,map,array) {
+        let nodeID = node.getID();
+        if(map[nodeID]==undefined||map[nodeID]==null){
+            newMap(node,node.parent,map,array)
+        }
+        function newMap(node,parent,map,array) {
+            let nodeID =node.getID();
+            if(parent==null){//说明已经是最顶层了
+                map[nodeID]=node;
+                array.push(node);
+            }else {
+                let parentID = parent.getID();
+                if(map[parentID]==undefined||map[parentID]==null){
+                    newMap(node,parent.parent,map,array);
+                }
+            }
+        }
+    }
+    function refreshNodeData(node,data) {
+        for(let key in data){
+            if(key == 'ID') continue;
+            node.data[key] = data[key];
+        }
+    }
 });