Procházet zdrojové kódy

1. 复制项目时,复制项目数据,复制项目使用单独的接口copyProjects
2. 项目管理Bug修复

MaiXinRong před 8 roky
rodič
revize
5eb5d68a06

+ 17 - 0
modules/main/models/bills.js

@@ -54,6 +54,23 @@ billsDAO.prototype.getData = function(projectID, callback){
     });
 };
 
+// get All Project Bills, include deleted
+billsDAO.prototype.getProjectBills = function (projectId, callback) {
+    if (callback) {
+        bills.find({projectID: projectId}, '-_id').exec()
+            .then(function (result, err) {
+                if (err) {
+                    callback(1, '找不到模板', null);
+                } else {
+                    callback(0, '', template);
+                }
+            });
+        return null;
+    } else {
+        return bills.find({projectID: projectId}, '-_id').exec();
+    }
+}
+
 billsDAO.prototype.AddBillsFromTemplate = function (datas, callback) {
     bills.collection.insert(datas, callback);
 };

+ 16 - 1
modules/pm/controllers/copy_proj_controller.js

@@ -2,4 +2,19 @@
  * Created by Mai on 2017/4/24.
  */
 
-var billsData = require('../../main/models/bills');
+var billsData = require('../../main/models/bills');
+
+module.exports = {
+    copyProjectData: function (srcProjID, newProjID, callback) {
+        billsData.getProjectBills(srcProjID).then(function (results) {
+            var datas = [];
+            results.forEach(function (result) {
+                result._doc.projectID = newProjID;
+                datas.push(result._doc);
+            });
+            return billsData.AddBillsFromTemplate(datas, callback);
+        }).then(function (err) {
+            callback(err);
+        });
+    }
+};

+ 10 - 0
modules/pm/controllers/pm_controller.js

@@ -29,6 +29,16 @@ module.exports = {
             }
         });
     },
+    copyProjects: function (req, res) {
+        var data = JSON.parse(req.body.data);
+        ProjectsData.copyUserProjects(data.user_id, data.updateData, function (err, message, data) {
+            if (err === 0) {
+                callback(req, res, err, message, data);
+            } else {
+                callback(req, res, err, message, null);
+            }
+        });
+    },
     rename: function (req, res) {
         var data = JSON.parse(req.body.data);
         ProjectsData.rename(data.user_id, data.id, data.newName, function (err, message) {

+ 41 - 2
modules/pm/models/project.js

@@ -29,7 +29,7 @@ var Projects = db.model("projects", ProjectSchema);
 var ProjectsDAO = function(){};
 
 ProjectsDAO.prototype.getUserProjects = function(userId, callback){
-    Projects.find({userID: userId, deleted: { $in: [false, null]}}, '-_id', function(err, templates){
+    Projects.find({'$or': [{'userID': userId, 'deleteInfo': null}, {'userID': userId, 'deleteInfo.deleted': {'$in': [null, false]}}]}, '-_id', function(err, templates){
         if (err) {
             callback(1, 'Error', null);
         } else {
@@ -49,7 +49,7 @@ ProjectsDAO.prototype.getUserProject = function (userId, ProjId, callback) {
 }
 
 ProjectsDAO.prototype.updateUserProjects = function(userId, datas, callback){
-    var data, project, updateLength = 0, hasError = false, deleteInfo = null, tempType = 1, i;
+    var data, project, updateLength = 0, hasError = false, deleteInfo = null, tempType = 1, i, newProject;
     var updateAll = function (err) {
             if (!err){
                 updateLength += 1;
@@ -93,6 +93,45 @@ ProjectsDAO.prototype.updateUserProjects = function(userId, datas, callback){
         }
     }
 };
+ProjectsDAO.prototype.copyUserProjects = function (userId, datas, callback) {
+    var data, project, updateLength = 0, hasError = false, deleteInfo = null, tempType = 1, i;
+    var updateAll = function (err) {
+        if (!err){
+            updateLength += 1;
+            if (updateLength === datas.length) {
+                callback(0, '', datas);
+            }
+        } else {
+            hasError = true;
+            callback(1, '提交数据出错.', null);
+        }
+    };
+    if (datas) {
+        for (i = 0; i < datas.length && !hasError; i++) {
+            data = datas[i];
+            if (data.updateType === 'update') {
+                Projects.update({userID: userId, ID: data.updateData.ID}, data.updateData, updateAll)
+            } else if (data.updateType === 'copy') {
+                data.updateData['userID'] = userId;
+                if (data.updateData.projType === 'Tender') {
+                    data.updateData['createDateTime'] = new Date();
+                };
+                newProject = new Projects(data.updateData);
+                newProject['srcProjectId'] = data.srcProjectId;
+                newProject.save(function (err, result) {
+                    if (!err && result._doc.projType === 'Tender') {
+                        copyProjController.copyProjectData(this.newProject.srcProjectId, result._doc.ID, updateAll);
+                    } else {
+                        updateAll(err);
+                    }
+                });
+            } else {
+                haseError = true;
+                callback(1, '提交数据错误', null);
+            }
+        }
+    }
+};
 
 ProjectsDAO.prototype.rename = function (userId, projectId, newName, callback){
     Projects.update({userID: userId, ID: projectId}, {name: newName}, function(err){

+ 1 - 0
modules/pm/routes/pm_route.js

@@ -8,6 +8,7 @@ var pmController = require('./../controllers/pm_controller');
 
 pmRouter.post('/getProjects', pmController.getProjects);
 pmRouter.post('/updateProjects', pmController.updateProjects);
+pmRouter.post('/copyProjects', pmController.copyProjects);
 pmRouter.post('/renameProject', pmController.rename);
 pmRouter.post('/beforeOpenProject', pmController.beforeOpenProject);
 pmRouter.post('/getProject', pmController.getProject);

+ 0 - 2
web/main/html/main.html

@@ -530,8 +530,6 @@
     <script type="text/javascript" src="public/web/tree_sheet_helper.js"></script>
     <!-- Test Data -->
     <script type="text/javascript" src="test/tmp_data/bills_grid_setting.js"></script>
-    <script type="text/javascript" src="test/tmp_data/data_15690.js"></script>
-    <script type="text/javascript" src="test/tmp_data/drawing_data_10268.js"></script>
     <!-- view -->
     <script type="text/javascript" src="web/main/js/main_ajax.js"></script>
     <script type="text/javascript" src="web/main/js/main.js"></script>

+ 20 - 14
web/pm/js/pm_main.js

@@ -130,8 +130,8 @@ var GetPreNodeUpdateData = function (pre, nid) {
     var data = {};
     data['updateType'] = 'update';
     data['updateData'] = {};
-    data.updateData[setting.tree.id] = pre.id();
-    data.updateData[setting.tree.nid] = nid;
+    data.updateData[Tree.setting.tree.id] = pre.id();
+    data.updateData[Tree.setting.tree.id] = nid;
     return data;
 }
 // 获取新建项目数据
@@ -218,7 +218,7 @@ var GetDeleteUpdateData = function (node) {
             data['updateData'] = {};
             data['updateData'][Tree.setting.tree.id] = node.id();
             if (node.data.projType === 'Tender') {
-                data['updateData']['FullFolder'] = GetfullFolder(node.parent);
+                data['updateData']['FullFolder'] = GetFullFolder(node.parent);
             }
             return data;
         },
@@ -257,12 +257,13 @@ var GetMoveUpdateData = function (node, parent, next) {
     return datas;
 };
 
-var GetCopyUpdateData = function (node, parent, next){
+var GetCopyUpdateData = function (node, parent, next, newId){
     var datas = [], updateData, pre;
     updateData = {};
-    updateData['updateType'] = 'new';
+    updateData['updateType'] = 'copy';
+    updateData['srcProjectId'] = node.id();
     updateData['updateData'] = {};
-    updateData['updateData'][Tree.setting.tree.id] = node.tree.maxNodeId() + 1;
+    updateData['updateData'][Tree.setting.tree.id] = newId + 1;
     updateData['updateData'][Tree.setting.tree.pid] = parent ? parent.id() : -1;
     updateData['updateData'][Tree.setting.tree.nid] = next ? next.id() : -1;
     updateData['updateData']['name'] = node.data.name;
@@ -581,7 +582,7 @@ $('#copyto').on('show.bs.modal', function () {
     copytoZTree = ConvertTreeToZtree(Tree, $('#treeDemo2'));
 });
 $('#copytoOk').click(function() {
-    var updateData, form = $('#copyto'),
+    var form = $('#copyto'),
         target = GetTargetTreeNode($.fn.zTree.getZTreeObj('treeDemo2')),
         parent, next, cur = Tree.selected();
     if (target && (target.data.projType === 'Tender' || target.children.length === 0 || target.firstChild().data.projType === 'Tender')) {
@@ -594,13 +595,18 @@ $('#copytoOk').click(function() {
         }
 
         if (parent !== cur.parent || (next !== cur && next !== cur.nextSibling)){
-            updateData = GetCopyUpdateData(Tree.selected(), parent, next);
-            UpdateProjectData(updateData, function (data) {
-                form.modal('hide');
-                data.forEach(function (nodeData) {
-                    if (nodeData.updateType === 'new') {
-                        Tree.addNodeData(nodeData.updateData, parent, next);
-                    }
+            CommonAjax.post('/getNewProjectID', {count: 1}, function (IDs) {
+                var updateData = GetCopyUpdateData(cur, parent, next, IDs.lowID);
+                Tree.maxNodeId(IDs.lowID - 1);
+                CommonAjax.post('/copyProjects', {user_id: userID, updateData: updateData}, function (data) {
+                    form.modal('hide');
+                    data.forEach(function (nodeData) {
+                        if (nodeData.updateType === 'copy') {
+                            Tree.addNodeData(nodeData.updateData, parent, next);
+                        }
+                    });
+                }, function () {
+                    form.modal('hide');
                 });
             });
         } else {