浏览代码

项目管理,新建文件夹、标段,先请求ID,根据返回的ID提交数据
新建标段,新建成功后,复制清单模板数据至该标段

MaiXinRong 8 年之前
父节点
当前提交
aebf26da12

+ 5 - 1
modules/main/models/bills.js

@@ -45,7 +45,7 @@ var bills = db.model("bills", billsSchema);
 var billsDAO = function(){};
 
 billsDAO.prototype.getBills = function(projectId, callback){
-    Projects.find({projectId: projectId}, function(err, datas){
+    bills.find({projectId: projectId}, function(err, datas){
         if (!err) {
             callback(0, '', datas);
         } else {
@@ -54,6 +54,10 @@ billsDAO.prototype.getBills = function(projectId, callback){
     });
 };
 
+billsDAO.prototype.AddBillsFromTemplate = function (datas, callback) {
+    bills.collection.insert(datas, callback);
+}
+
 billsDAO.prototype.updateBills = function(datas, callback){
     var data, errList = [], updateLength = 0;
     var updateFunc = function (err, errData) {

+ 5 - 0
modules/pm/controllers/copy_proj_controller.js

@@ -0,0 +1,5 @@
+/**
+ * Created by Mai on 2017/4/24.
+ */
+
+var billsData = require('../../main/models/bills');

+ 21 - 0
modules/pm/controllers/new_proj_controller.js

@@ -0,0 +1,21 @@
+/**
+ * Created by Mai on 2017/4/24.
+ */
+
+var billsData = require('../../main/models/bills');
+var BillsTemplateData = require('../../templates/models/bills_template');
+
+module.exports = {
+    copyTemplateData: function (tempType, newProjID, callback) {
+        BillsTemplateData.getTemplate(tempType).then(function (templates) {
+            var datas = [];
+            templates.forEach(function (template) {
+                template._doc.projectID = newProjID;
+                datas.push(template._doc);
+            })
+            return billsData.AddBillsFromTemplate(datas, callback);
+        }).catch(function (err) {
+            callback(err);
+        });
+    }
+};

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

@@ -27,13 +27,13 @@ module.exports = {
             } 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) {
             callback(req, res, err, message, null);
-        })
+        });
     },
     getProject: function(req, res){
         var data = JSON.parse(req.body.data);
@@ -43,12 +43,18 @@ module.exports = {
             } else {
                 callback(req, res, err, message, null);
             }
-        })
+        });
     },
     beforeOpenProject: function (req, res) {
         var data = JSON.parse(req.body.data);
         ProjectsData.beforeOpenProject(data.user_id, data.proj_id, data.updateData, function (err, message, data) {
             callback(req, res, err, message, data);
-        })
+        });
+    },
+    getNewProjectID: function (req, res) {
+        var data = JSON.parse(req.body.data);
+        ProjectsData.getNewProjectID(data.count, function (err, message, data) {
+            callback(req, res, err, message, data);
+        });
     }
 }

+ 34 - 27
modules/pm/models/project.js

@@ -1,13 +1,17 @@
 /**
  * Created by Mai on 2017/1/18.
  */
+var counter = require("../../../public/counter/counter.js");
+
+var newProjController = require('../controllers/new_proj_controller');
+var copyProjController = require('../controllers/copy_proj_controller');
 
-//*/
 var mongoose = require("mongoose");
 
 var dbm = require("../../../config/db/db_manager");
 var db = dbm.getCfgConnection("usersManages");
 var Schema = mongoose.Schema;
+var deleteSchema = require('../../../public/models/deleteSchema');
 var ProjectSchema = new Schema({
     "ID": Number,
     "ParentID": Number,
@@ -17,32 +21,11 @@ var ProjectSchema = new Schema({
     "projType": String,
     "recentDateTime": Date,
     "createDateTime": Date,
-    "deleted": Boolean,
-    'deleteDateTime': Date,
+    "deleteInfo": deleteSchema,
     'fullFolder': Array
 });
 var Projects = db.model("projects", ProjectSchema);
 
-/*/
-var db = require('../db/pm_db');
-var Schema = db.mongoose.Schema;
- var ProjectSchema = new Schema({
- "name": String,
- "projType": String,
- "lastDateTime": String,
- "createDateTime": String,
- "id": Number,
- "parentId": Number,
- "nextId": Number,
- "userId": Number,
- "deleted": Boolean,
- 'deleteDateTime': String,
- 'deleteFullFolder': Array
- });
-
- var Projects = db.mongoose.model("projects", ProjectSchema);
-//*/
-
 var ProjectsDAO = function(){};
 
 ProjectsDAO.prototype.getUserProjects = function(userId, callback){
@@ -66,7 +49,7 @@ ProjectsDAO.prototype.getUserProject = function (userId, ProjId, callback) {
 }
 
 ProjectsDAO.prototype.updateUserProjects = function(userId, datas, callback){
-    var data, project, updateLength = 0, hasError = false;
+    var data, project, updateLength = 0, hasError = false, deleteInfo = null, tempType = 1, i;
     var updateAll = function (err) {
             if (!err){
                 updateLength += 1;
@@ -79,7 +62,7 @@ ProjectsDAO.prototype.updateUserProjects = function(userId, datas, callback){
             }
         };
     if (datas){
-        for (var i = 0; i < datas.length && !hasError; i++){
+        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)
@@ -89,10 +72,23 @@ ProjectsDAO.prototype.updateUserProjects = function(userId, datas, callback){
                     data.updateData['createDateTime'] = new Date();
                 }
                 newProject = new Projects(data.updateData);
-                newProject.save(updateAll);
+                newProject.save(function (err, result) {
+                    if (!err && result._doc.projType === 'Tender') {
+                        newProjController.copyTemplateData(tempType, newProject.ID, updateAll);
+                    } else {
+                        updateAll(err);
+                    }
+                });
             } else if (data.updateType === 'delete') {
-                data.updateData['deleteDateTime'] = new Date();
+                deleteInfo = {};
+                deleteInfo['deleted'] = true;
+                deleteInfo['deleteDateTime'] = new Date();
+                deleteInfo['deleteBy'] = userId;
+                data.updateData['deleteInfo'] = deleteInfo;
                 Projects.update({userID: userId, ID: data.updateData.ID}, data.updateData, updateAll);
+            } else {
+                hasError = true;
+                callback(1, '提交数据错误.', null);
             }
         }
     }
@@ -119,4 +115,15 @@ ProjectsDAO.prototype.beforeOpenProject = function (userId, projectId, updateDat
     });
 };
 
+ProjectsDAO.prototype.getNewProjectID = function (count, callback) {
+    counter.counterDAO.getIDAfterCount(counter.moduleName.project, count, function (err, result) {
+        var highID = result.value.sequence_value;
+        if (!err) {
+            callback(0, '', {lowID: highID - count + 1, highID: highID});
+        } else {
+            callback(1, '获取主键失败', null);
+        }
+    });
+}
+
 module.exports = new ProjectsDAO();

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

@@ -11,5 +11,6 @@ pmRouter.post('/updateProjects', pmController.updateProjects);
 pmRouter.post('/renameProject', pmController.rename);
 pmRouter.post('/beforeOpenProject', pmController.beforeOpenProject);
 pmRouter.post('/getProject', pmController.getProject);
+pmRouter.post('/getNewProjectID', pmController.getNewProjectID);
 
 module.exports = pmRouter;

+ 13 - 7
modules/templates/models/bills_template.js

@@ -24,13 +24,19 @@ var BillsTemplates = templatesDB.model('temp_bills', BillsTemplateSchema);
 var BillsTemplateDAO = function(){};
 
 BillsTemplateDAO.prototype.getTemplate = function (type, callback) {
-    BillsTemplates.find({'$or': [{tempType: type, deleteInfo: null}, {tempType: type, 'deleteInfo.deleted': {$in: [null, false]}}]}, '-_id', function(err, template){
-        if (err) {
-            callback(1, '找不到模板', null);
-        } else {
-            callback(0, '', template);
-        }
-    });
+    if (callback) {
+        BillsTemplates.find({'$or': [{tempType: type, deleteInfo: null}, {tempType: type, 'deleteInfo.deleted': {$in: [null, false]}}]}, '-_id').exec()
+            .then(function (result, err) {
+                if (err) {
+                    callback(1, '找不到模板', null);
+                } else {
+                    callback(0, '', template);
+                }
+            });
+        return null;
+    } else {
+        return BillsTemplates.find({'$or': [{tempType: type, deleteInfo: null}, {tempType: type, 'deleteInfo.deleted': {$in: [null, false]}}]}, '-_id').exec();
+    }
 };
 BillsTemplateDAO.prototype.updateTemplate = function (userID, tempType, datas, callback) {
     var data, project, updateLength = 0, hasError = false, deleteInfo = null;

+ 1 - 0
web/pm/html/project-management.html

@@ -457,6 +457,7 @@
     <script src="lib/global.js"></script>
     <script src="public/dateUtil.js"></script>
     <script src="web/scripts/tree_table.js"></script>
+    <script type="text/javascript" src="/public/web/common_ajax.js"></script>
     <script src="web/pm/js/pm_ajax.js"></script>
     <script src="web/pm/js/pm_main.js" charset="UTF-8"></script>
     <!-- zTree -->

+ 0 - 2
web/pm/js/pm_ajax.js

@@ -44,7 +44,6 @@ var UpdateProjectData = function (updateData, callback) {
         }
     });
 };
-
 // 重命名项目
 var RenameProject = function(projId, newName, callback) {
     $.ajax({
@@ -66,7 +65,6 @@ var RenameProject = function(projId, newName, callback) {
         }
     });
 };
-
 // 打开项目前,提交数据
 var BeforeOpenProject = function (projId, updateData, callback) {
     $.ajax({

+ 45 - 37
web/pm/js/pm_main.js

@@ -135,8 +135,8 @@ var GetPreNodeUpdateData = function (pre, nid) {
     return data;
 }
 // 获取新建项目数据
-var GetAddProjUpdateData = function (parent, next, name) {
-    var datas = [], updateData, pre, newId = Tree.maxNodeId() + 1;
+var GetAddProjUpdateData = function (parent, next, name, newId) {
+    var datas = [], updateData, pre;
     updateData = {};
     updateData['updateType'] = 'new';
     updateData['updateData'] = {};
@@ -148,8 +148,8 @@ var GetAddProjUpdateData = function (parent, next, name) {
     datas.push(updateData);
     return datas;
 };
-var GetAddFolderProjUpdateData = function (parent, next, folderName1, folderName2, name) {
-    var datas = [], updateData, folderData1, folderData2, pre, newId = Tree.maxNodeId() + 1;
+var GetAddFolderProjUpdateData = function (parent, next, folderName1, folderName2, name, newId) {
+    var datas = [], updateData, folderData1, folderData2, pre;
     var addUpdateData = function (parentId, nextId, name, projType) {
         var data = {};
         data['updateType'] = 'new';
@@ -169,8 +169,8 @@ var GetAddFolderProjUpdateData = function (parent, next, folderName1, folderName
     return datas;
 };
 // 获取新建文件夹数据
-var GetAddForlderUpdateData = function (parent, next, folderName) {
-    var datas = [], updateData, pre, newId = Tree.maxNodeId() + 1;
+var GetAddForlderUpdateData = function (parent, next, folderName, newId) {
+    var datas = [], updateData, pre;
     updateData = {};
     updateData['updateType'] = 'new';
     updateData['updateData'] = {};
@@ -217,7 +217,6 @@ var GetDeleteUpdateData = function (node) {
             data['updateType'] = 'delete';
             data['updateData'] = {};
             data['updateData'][Tree.setting.tree.id] = node.id();
-            data['updateData']['deleted'] = true;
             if (node.data.projType === 'Tender') {
                 data['updateData']['FullFolder'] = GetfullFolder(node.parent);
             }
@@ -358,7 +357,7 @@ $('#addFolderBtn').click(function () {
 $('#addFolderOk').click(function () {
     var form = $('#addFolder');
     var name = $('#folder-name-input').val();
-    var updateData, parent, next;
+    var parent, next;
     if (name) {
         if (Tree.selected()) {
             if (Tree.selected().children.length === 0 || Tree.selected().firstChild().data.projType === 'Folder') {
@@ -373,21 +372,24 @@ $('#addFolderOk').click(function () {
             next = Tree.firstNode();
         }
 
-        updateData = GetAddForlderUpdateData(parent, next, name);
-        UpdateProjectData(updateData, function(datas){
-            datas.forEach(function (data) {
-                if (data.updateType === 'new') {
-                    Tree.addNodeData(data.updateData, parent, next);
-                }
+        CommonAjax.post('/getNewProjectID', {count: 1}, function (IDs) {
+            var updateData = GetAddForlderUpdateData(parent, next, name, IDs.lowID);
+            Tree.maxNodeId(IDs.lowID - 1);
+            UpdateProjectData(updateData, function(datas){
+                datas.forEach(function (data) {
+                    if (data.updateType === 'new') {
+                        Tree.addNodeData(data.updateData, parent, next);
+                    }
+                });
+                form.modal('hide');
             });
-            form.modal('hide');
         });
     }
 });
 
 // 新建工程
 var AddProj = function () {
-    var name = $('#tenderName').val(), updateData, parent, next;
+    var name = $('#tenderName').val();
     if (name !== '') {
         // if (Tree.selected()){
         //     if (Tree.selected().data.projType === 'Tender') {
@@ -405,34 +407,40 @@ var AddProj = function () {
         //     parent = Tree._root();
         //     next = Tree.firstNode();
         // }
-        updateData = GetAddProjUpdateData(Tree._root, Tree.firstNode(), name);
-        UpdateProjectData(updateData, function (datas) {
-            datas.forEach(function (data) {
-                var parent, next;
-                if (data.updateType === 'new') {
-                    parent = data.updateData.parentId === -1 ?  Tree._root : Tree.findNode(data.updateData.parentId);
-                    next = data.updateData.nextId === -1 ? null : Tree.findNode(data.updateData.nextId);
-                    Tree.addNodeData(data.updateData, parent, next);
-                }
+        CommonAjax.post('/getNewProjectID', {count: 1}, function (IDs) {
+            var updateData = GetAddProjUpdateData(Tree._root, Tree.firstNode(), name, IDs.lowID);
+            Tree.maxNodeId(IDs.lowID - 1);
+            UpdateProjectData(updateData, function (datas) {
+                datas.forEach(function (data) {
+                    var parent, next;
+                    if (data.updateType === 'new') {
+                        parent = data.updateData.parentId === -1 ?  Tree._root : Tree.findNode(data.updateData.parentId);
+                        next = data.updateData.nextId === -1 ? null : Tree.findNode(data.updateData.nextId);
+                        Tree.addNodeData(data.updateData, parent, next);
+                    }
+                });
+                $('#addProj').modal('hide');
             });
-            $('#addProj').modal('hide');
         });
     }
 }
 var AddFolderProj = function () {
-    var nameB = $('#buildName').val(), nameX = $('#xiangName').val(), name = $('#tenderName').val(), updateData;
+    var nameB = $('#buildName').val(), nameX = $('#xiangName').val(), name = $('#tenderName').val();
     if (nameB !== '' && nameX !== '' && name !== '') {
-        updateData = GetAddFolderProjUpdateData(Tree._root, Tree.firstNode(), nameB, nameX, name);
-        UpdateProjectData(updateData, function (datas) {
-            datas.forEach(function (data) {
-                var parent, next;
-                if (data.updateType === 'new') {
-                    parent = data.updateData[Tree.setting.tree.pid] === -1 ?  Tree._root : Tree.findNode(data.updateData[Tree.setting.tree.pid]);
-                    next = data.updateData[Tree.setting.tree.nid] === -1 ? null : Tree.findNode(data.updateData[Tree.setting.tree.nid]);
-                    Tree.addNodeData(data.updateData, parent, next);
-                }
+        CommonAjax.post('/getNewProjectID', {count: 3}, function (IDs) {
+            var updateData = GetAddFolderProjUpdateData(Tree._root, Tree.firstNode(), nameB, nameX, name, IDs.lowID);
+            Tree.maxNodeId(IDs.lowID - 1);
+            UpdateProjectData(updateData, function (datas) {
+                datas.forEach(function (data) {
+                    var parent, next;
+                    if (data.updateType === 'new') {
+                        parent = data.updateData[Tree.setting.tree.pid] === -1 ?  Tree._root : Tree.findNode(data.updateData[Tree.setting.tree.pid]);
+                        next = data.updateData[Tree.setting.tree.nid] === -1 ? null : Tree.findNode(data.updateData[Tree.setting.tree.nid]);
+                        Tree.addNodeData(data.updateData, parent, next);
+                    }
+                });
+                $('#addProj').modal('hide');
             });
-            $('#addProj').modal('hide');
         });
     }
 }

+ 8 - 4
web/scripts/tree_table.js

@@ -161,8 +161,12 @@
  					return _maxNodeId;
  				}
  			};
-			this.maxNodeId = function (){
-				return _maxNodeId;
+			this.maxNodeId = function (id){
+				if (arguments.length > 0) {
+					_maxNodeId = Math.max(id, _maxNodeId);
+				} else {
+					return _maxNodeId;
+				}
 			}
  		};
 
@@ -234,7 +238,7 @@
  					node = new Node(that, data);
  				}
  				node.data = data;
-				that.newNodeId(node.id());
+				that.maxNodeId(node.id());
 
 				if (!parent){
 					if (data[setting.tree.pid] === setting.tree.nullId) {
@@ -301,7 +305,7 @@
 			var pNode = parent ? parent : this._root;
 			if (!nextSibling || (nextSibling.parent === pNode && pNode.childIndex(nextSibling) > -1)) {
 				node = new Node(this, data);
-                this.newNodeId(data[this.setting.tree.id]);
+                this.maxNodeId(data[this.setting.tree.id]);
 				node.row = _view._makeRowDom(this.treeBodyObj, node);
 				this.move(node, pNode, nextSibling);
 			}