Browse Source

ration tuning / edit name, add and remove nodes

TonyKang 8 years ago
parent
commit
cf58d2df86

+ 14 - 0
modules/rationRepository/controllers/rationChapterTreeController.js

@@ -33,6 +33,20 @@ module.exports ={
             callback(req,res,err,data)
         });
     },
+    updateNodes: function(req, res) {
+        var nodes = JSON.parse(req.body.nodes);
+        rationChapterTreeData.updateNodes(nodes, function(err,results){
+            callback(req,res, err, results)
+        });
+    },
+    deleteNodes: function(req, res) {
+        var nodes = JSON.parse(req.body.nodes);
+        var preNodeId = req.body.preNodeId;
+        var preNodeNextId = req.body.preNodeNextId;
+        rationChapterTreeData.removeNodes(nodes, preNodeId, preNodeNextId, function(err,results){
+            callback(req,res, err, results)
+        });
+    },
     tempRationChapterTreeInsert:
         function(req,res){
             var DBName = req.body.rationName;

+ 28 - 5
modules/rationRepository/models/rationChapterTree.js

@@ -13,7 +13,8 @@ var rationChapterTreeSchema = mongoose.Schema({//章节树  //生成唯一id改
     ID:Number,
     ParentID:Number,
     NextSiblingID:Number,
-    name: String
+    name: String,
+    isDeleted: Boolean
 });
 var rationChapterTreeModel = chapterTreeDb.model("rationChapterTrees",rationChapterTreeSchema, "rationChapterTrees")
 var repositoryMap = require('./repositoryMap');
@@ -23,7 +24,7 @@ var rationChapterTreeDAO = function(){};
 
 rationChapterTreeDAO.prototype.getRationChapterTrees = function(repositoryName,callback){
     repositoryMap.getRealLibName(repositoryName, function(err, rst){
-        rationChapterTreeModel.find({"rationRepId": rst[0].ID},function(err,data){
+        rationChapterTreeModel.find({"rationRepId": rst[0].ID, "$or": [{"isDeleted": null}, {"isDeleted": false} ]},function(err,data){
             if(data.length) callback(false,data);
             else  if(err) callback("获取定额树错误!",false)
             else callback(false,false);
@@ -63,18 +64,40 @@ rationChapterTreeDAO.prototype.tempRationChapterTreeInsert = function(repository
     })
 }
 
+rationChapterTreeDAO.prototype.removeNodes = function(nodeIds, preNodeId, preNodeNextId, callback){
+    var functions = [];
+    if (preNodeId != -1) {
+        functions.push((function(nodeId, nextId) {
+            return function(cb) {
+                rationChapterTreeModel.update({ID: nodeId}, {"NextSiblingID": nextId}, cb);
+            };
+        })(preNodeId, preNodeNextId));
+    }
+    for (var i=0; i < nodeIds.length; i++) {
+        functions.push((function(nodeId) {
+            return function(cb) {
+                rationChapterTreeModel.update({ID: nodeId}, {"isDeleted": true}, cb);
+            };
+        })(nodeIds[i]));
+    }
+    async.parallel(functions, function(err, results) {
+        callback(err, results);
+    });
+}
+
 rationChapterTreeDAO.prototype.updateNodes = function(nodes,callback){
     var functions = [];
     for (var i=0; i < nodes.length; i++) {
+        //var md = new rationChapterTreeModel(nodes[i]);
+        //md.isNew = false;
         functions.push((function(doc) {
             return function(cb) {
-                doc.save(cb);
+                rationChapterTreeModel.update({ID: doc.ID}, doc, cb);
             };
         })(nodes[i]));
     }
     async.parallel(functions, function(err, results) {
-        //console.log(err);
-        //console.log(results);
+        callback(err, results);
     });
 };
 

+ 4 - 1
modules/rationRepository/routes/rationRepRoutes.js

@@ -15,8 +15,11 @@ apiRouter.post("/deleteRationLibs",rationRepositoryController.deleteRationLib);
 apiRouter.post("/getRealLibName",rationRepositoryController.getRealLibName);
 
 apiRouter.post("/getRationTree",rationChapterTreeController.getRationChapterTree);
-apiRouter.post("/addSection",rationChapterTreeController.sectionUpsert);
 apiRouter.post("/createNewNode",rationChapterTreeController.createNewNode);
+apiRouter.post("/updateNodes",rationChapterTreeController.updateNodes);
+apiRouter.post("/deleteNodes",rationChapterTreeController.deleteNodes);
+
+apiRouter.post("/addSection",rationChapterTreeController.sectionUpsert);
 apiRouter.post("/deleteSection",rationChapterTreeController.deleteSection);
 
 module.exports = apiRouter;

+ 7 - 7
web/rationLibEditor/dinge.html

@@ -49,7 +49,7 @@
                           <!--
                           <a href="#" class="btn btn-secondary btn-sm">创建默认章节树</a>
                           -->
-                          <a onclick="addRootNode()" class="btn btn-secondary btn-sm">增加根节点</a>
+                          <a onclick="zTreeOprObj.addRootNode()" class="btn btn-secondary btn-sm">增加根节点</a>
                       </div>
                     <div class="tab-content">
                       <ul id="treeDemo" class="ztree"></ul>
@@ -927,14 +927,15 @@ var setting = {
         }
     },
     callback:{
-        onClick:SectionClick,
+        //onClick:SectionClick,
         beforeDrag: beforeDrag,
         beforeEditName: beforeEditName,
-        beforeRemove: beforeRemove,
+        //beforeRemove: beforeRemove,
         beforeRename: beforeRename,
-        beforeClick:beforeClick,
-        onRemove: onRemove,
-        onRename: onRename
+        //beforeClick:beforeClick,
+        beforeRemove: zTreeOprObj.onBeforeRemove,
+        //onRemove: onRemove,
+        onRename: zTreeOprObj.onRename
     }
 }; //ztree  setting
 var log, className = "dark";
@@ -1005,7 +1006,6 @@ function removeSection(id){
 }
 function beforeRename(treeId, treeNode, newName, isCancel) {
     className = (className === "dark" ? "":"dark");
-  //  showLog((isCancel ? "<span style='color:red'>":"") + "[ "+getTime()+" beforeRename ]&nbsp;&nbsp;&nbsp;&nbsp; " + treeNode.name + (isCancel ? "</span>":""));
     if (newName.length == 0) {
         setTimeout(function() {
             var zTree = $.fn.zTree.getZTreeObj("treeDemo");

+ 91 - 64
web/rationLibEditor/js/dinge.js

@@ -56,20 +56,97 @@ var rationOprObj = {
     }
 }
 
-function addRootNode(){
-    var rawNode = {ParentID: -1, NextSiblingID: -1, name: "新增节点"};
-    addNewNode(rawNode, function(err, rst){
-        if (!(err)) {
-            var newNodes = [], isSilent = false;
-            newNodes.push({ rationRepId: rst.data.rationRepId, ID: rst.data.ID, ParentID:-1, NextSiblingID:-1, name:"新增节点",isParent:true, items:[]});
-            if (treeObj) {
-                treeObj.addNodes(null, -1, newNodes, isSilent);
-            } else {
-                treeObj = $.fn.zTree.init($("#treeDemo"), setting, newNodes);
+var zTreeOprObj = {
+    addRootNode: function() {
+        var me = this, rawNode = {ParentID: -1, NextSiblingID: -1, name: "新增节点"};
+        me.addNewNode(rawNode, function(err, rst){
+            if (!(err)) {
+                var newNodes = [], isSilent = false;
+                newNodes.push({ rationRepId: rst.data.rationRepId, ID: rst.data.ID, ParentID:-1, NextSiblingID:-1, name:"新增节点",isParent:true, items:[]});
+                if (treeObj) {
+                    treeObj.addNodes(null, -1, newNodes, isSilent);
+                } else {
+                    treeObj = $.fn.zTree.init($("#treeDemo"), setting, newNodes);
+                }
+            }
+        });
+    },
+    addNewNode : function(rawNode, callback){
+        $.ajax({
+            type:"POST",
+            url:"api/createNewNode",
+            data:{"rationLibName":params.realLibName,"rawNodeData": JSON.stringify(rawNode)},
+            dataType:"json",
+            cache:false,
+            timeout:1000,
+            success: function(result,textStatus,status){
+                callback(false, result);
+            },
+            error:function(err){
+                callback(err);
             }
+        })
+    },
+    onRename : function(e, treeId, treeNode, isCancel) {
+        var nodes = [];
+        nodes.push(treeNode);
+        zTreeOprObj.updateNodes(nodes);
+    },
+    onBeforeRemove: function(treeId, treeNode){
+        var nodeIds = [], preNode = treeNode.getPreNode(), preNodeId = -1;
+        if (preNode) {
+            preNodeId = preNode.ID;
         }
-    });
-}
+        nodeIds.push(treeNode.ID);
+        for (var i = 0; i < treeNode.items.length; i++) {
+            nodeIds.push(treeNode.items[i].ID);
+        }
+        $.ajax({
+            type:"POST",
+            url:"api/deleteNodes",
+            data:{"nodes": JSON.stringify(nodeIds), "preNodeId": preNodeId, "preNodeNextId": treeNode.NextSiblingID},
+            dataType:"json",
+            cache:false,
+            timeout:5000,
+            success:function(result,textStatus,status){
+                //if(result){
+                //    caseDeleteTreeNode(result.data)
+                //}
+            },
+            error:function(){
+            }
+        });
+        return true;
+    },
+    updateNodes: function(nodes){
+        if (nodes && nodes.length > 0) {
+            var reqData = []
+            for (var i = 0; i < nodes.length; i++) {
+                var node = {};
+                node.rationRepId = nodes[i].rationRepId;
+                node.ID = nodes[i].ID;
+                node.ParentID = nodes[i].ParentID;
+                node.NextSiblingID = nodes[i].NextSiblingID;
+                node.name = nodes[i].name;
+                node.__v = nodes[i].__v + 1;
+                reqData.push(node);
+            }
+            $.ajax({
+                type:"POST",
+                url:"api/updateNodes",
+                data:{"nodes": JSON.stringify(reqData)},
+                dataType:"json",
+                cache:false,
+                timeout:5000,
+                success:function(result,textStatus,status){
+                    console.log(status + ' : ' + result);
+                },
+                error:function(){
+                }
+            })
+        }
+    }
+};
 //--------------------------------------------------------树处理事件
 var newCount = 13;
 //新增树节点
@@ -99,26 +176,7 @@ function addHoverDom(treeId, treeNode) {
         return false;
     });
 };
-//增加新节点
-function addNewNode(rawNode, callback) {
-    $.ajax({
-        type:"POST",
-        url:"api/createNewNode",
-        data:{"rationLibName":params.realLibName,"rawNodeData": JSON.stringify(rawNode)},
-        dataType:"json",
-        cache:false,
-        timeout:1000,
-        success: function(result,textStatus,status){
-            callback(false, result);
-        },
-        error:function(err){
-            callback(err);
-        }
-    })
-};
-function updateNodes(nodes){
-    //
-};
+
 //保存新增的节点
 function saveNewSection(n){
     var sec={};
@@ -140,38 +198,7 @@ function saveNewSection(n){
         }
     })
 }
-//编辑树节点事件(添加节点到数据库)
-function onRename(e, treeId, treeNode, isCancel) {
-    saveNewSection(treeNode);
-}
-function onRemove(e, treeId, treeNode) {
-    var id = treeNode.id;
-    var pNodes = treeNode.getParentNode().items;
-    for(var i=0;i<pNodes.length;i++){
-        if(pNodes[i].nId==id){
-            pNodes[i].nId = -1;
-            saveNewSection(pNodes[i]);
-        }
-    }
-    $.ajax({
-        type:"POST",
-        url:"api/deleteSection",
-        data:{"rationLibName":params.realLibName,"sectionID": treeNode.id},
-        dataType:"json",
-        cache:false,
-        timeout:1000,
-        success:function(result,textStatus,status){
-            //if(result){
-            //    caseDeleteTreeNode(result.data)
-            //}
-        },
-        error:function(){
-        }
-    })
-    removeSection(id)
-    $("#rationTbody").html("");
-    $("#rationGLJTbody").html("");
-}
+
 //--------------------------------------------------------定额spreadjs
 var spSetting_ration = {
     spType:"Ration",