Переглянути джерело

提交项目管理页面修改

caiaolin 7 роки тому
батько
коміт
a064116f44

+ 5 - 4
modules/pm/models/project_model.js

@@ -9,7 +9,9 @@ let copyProjController = require('../controllers/copy_proj_controller');
 let Projects = require("./project_schema");
 let Projects = require("./project_schema");
 let projectType = {
 let projectType = {
     folder: 'Folder',
     folder: 'Folder',
-    tender: 'Tender'
+    tender: 'Tender',
+    project: 'Project',
+    engineering: 'Engineering',
 };
 };
 
 
 let ProjectsDAO = function(){};
 let ProjectsDAO = function(){};
@@ -44,6 +46,7 @@ ProjectsDAO.prototype.updateUserProjects = function(userId, datas, callback){
                 }
                 }
             } else {
             } else {
                 hasError = true;
                 hasError = true;
+                console.log(err);
                 callback(1, '提交数据出错.', null);
                 callback(1, '提交数据出错.', null);
             }
             }
         };
         };
@@ -54,9 +57,7 @@ ProjectsDAO.prototype.updateUserProjects = function(userId, datas, callback){
                 Projects.update({userID: userId, ID: data.updateData.ID}, data.updateData, updateAll)
                 Projects.update({userID: userId, ID: data.updateData.ID}, data.updateData, updateAll)
             } else if (data.updateType === 'new') {
             } else if (data.updateType === 'new') {
                 data.updateData['userID'] = userId;
                 data.updateData['userID'] = userId;
-                if (data.updateData.projType === projectType.folder) {
-                    data.updateData['createDateTime'] = new Date();
-                }
+                data.updateData['createDateTime'] = new Date();
                 newProject = new Projects(data.updateData);
                 newProject = new Projects(data.updateData);
                 newProject.save(function (err, result) {
                 newProject.save(function (err, result) {
                     if (!err && result._doc.projType === projectType.tender) {
                     if (!err && result._doc.projType === projectType.tender) {

+ 0 - 1
modules/users/controllers/login_controller.js

@@ -80,7 +80,6 @@ class LoginController {
                 preferenceSetting.select_version !== '') {
                 preferenceSetting.select_version !== '') {
 
 
                 let compilationData = await compilationModel.getCompilationById(preferenceSetting.select_version);
                 let compilationData = await compilationModel.getCompilationById(preferenceSetting.select_version);
-                console.log(compilationData);
                 request.session.sessionCompilation = compilationData;
                 request.session.sessionCompilation = compilationData;
             }
             }
 
 

Різницю між файлами не показано, бо вона завелика
+ 537 - 521
web/building_saas/pm/html/project-management.html


+ 240 - 506
web/building_saas/pm/js/pm_main.js

@@ -1,9 +1,20 @@
 /**
 /**
- * Created by Mai on 2017/2/24.
+ * 项目管理相关js
+ *
+ * @author CaiAoLin
+ * @date 2017/8/22
+ * @version
  */
  */
-
-var Tree = null, movetoZTree = null, copytoZTree = null;
-var ProjTreeSetting = {
+let Tree = null;
+let movetoZTree = null;
+let copytoZTree = null;
+let projectType = {
+    folder: 'Folder',
+    tender: 'Tender',
+    project: 'Project',
+    engineering: 'Engineering'
+};
+let ProjTreeSetting = {
     tree: {
     tree: {
         id: 'ID',
         id: 'ID',
         pid: 'ParentID',
         pid: 'ParentID',
@@ -24,23 +35,39 @@ var ProjTreeSetting = {
             width: '78%',
             width: '78%',
             event: {
             event: {
                 getText: function (html, node, text) {
                 getText: function (html, node, text) {
-                    html.push((node && node.data && node.data.projType === 'Folder') ? ' ' : '');
+                    let className = '';
+                    switch (node.data.projType) {
+                        case projectType.folder:
+                            className = "fa fa-folder-open-o";
+                            break;
+                        case projectType.tender:
+                            className = "fa fa-sticky-note-o";
+                            break;
+                        case projectType.project:
+                            className = "fa fa-cubes";
+                            break;
+                        case projectType.engineering:
+                            className = "fa fa-cube";
+                            break;
+                    }
+                    let icon = '<i class ="tree-icon '+ className +'"></i>';
+                    html.push((node && node.data && node.data.projType === projectType.folder) ? '&nbsp;' : '');
                     html.push('<a ');
                     html.push('<a ');
-                    if (node && node.data && node.data.projType === 'Tender') {
+                    if (node && node.data) {
                         //html.push('href="/main?project=', node.id(), '"');
                         //html.push('href="/main?project=', node.id(), '"');
                         html.push('href="javacript:void(0);"');
                         html.push('href="javacript:void(0);"');
                     }
                     }
-                    html.push('>', text, '<a>');
+                    html.push('>', icon, '&nbsp;', text, '<a>');
                 },
                 },
                 getIcon: function (html, node) {
                 getIcon: function (html, node) {
-                    if (node.data.projType === 'Folder') {
-                        html.push('<i class ="tree-icon fa fa-folder-open-o"></i>');
-                    } else {
-                        html.push('<span class="poj-icon">└</span>');
-                    }
+
+                    // html.push('<i class ="tree-icon '+ className +'"></i>');
+                    // if (node.data.projType === 'Tender') {
+                    //     html.push('<span class="poj-icon">└</span>');
+                    // }
                 },
                 },
                 tdBindEvent: function (td, node) {
                 tdBindEvent: function (td, node) {
-                    if (node.data.projType === 'Tender') {
+                    if (node.data.projType === projectType.tender) {
                         $('a:eq(1)', td).bind('click', function () {
                         $('a:eq(1)', td).bind('click', function () {
                             BeforeOpenProject(node.id(), {'fullFolder': GetFullFolder(node.parent)}, function () {
                             BeforeOpenProject(node.id(), {'fullFolder': GetFullFolder(node.parent)}, function () {
                                 window.location.href = '/main?project=' + node.id();
                                 window.location.href = '/main?project=' + node.id();
@@ -57,7 +84,9 @@ var ProjTreeSetting = {
             width: '10%',
             width: '10%',
             event: {
             event: {
                 getText: function (html, node, text) {
                 getText: function (html, node, text) {
-                    html.push(text ? new Date(text).Format('yyyy-MM-dd') : '');
+                    if (node.data.projType === projectType.tender) {
+                        html.push(text ? new Date(text).Format('yyyy-MM-dd') : '');
+                    }
                 }
                 }
             }
             }
         },
         },
@@ -67,7 +96,9 @@ var ProjTreeSetting = {
             width: '10%',
             width: '10%',
             event: {
             event: {
                 getText: function (html, node, text) {
                 getText: function (html, node, text) {
-                    html.push(text ? new Date(text).Format('yyyy-MM-dd') : '');
+                    if (node.data.projType === projectType.tender) {
+                        html.push(text ? new Date(text).Format('yyyy-MM-dd') : '');
+                    }
                 }
                 }
             }
             }
         }
         }
@@ -80,7 +111,7 @@ var ProjTreeSetting = {
         },
         },
         onSelectNode: function (node) {
         onSelectNode: function (node) {
             // 新建文件夹 是否可见
             // 新建文件夹 是否可见
-            if (node.data.projType === 'Tender') {
+            if (node.data.projType === projectType.tender) {
                 $('#addFolderBtn').hide();
                 $('#addFolderBtn').hide();
             } else {
             } else {
                 $('#addFolderBtn').show();
                 $('#addFolderBtn').show();
@@ -90,7 +121,7 @@ var ProjTreeSetting = {
             // 删除可见
             // 删除可见
             $('#delBtn').show();
             $('#delBtn').show();
             // 移动到、复制到、共享、协同 是否可见
             // 移动到、复制到、共享、协同 是否可见
-            if (node.data.projType === 'Tender') {
+            if (node.data.projType === projectType.tender) {
                 $('#movetoBtn').show();
                 $('#movetoBtn').show();
                 $('#copytoBtn').show();
                 $('#copytoBtn').show();
                 $('#shareBtn').show();
                 $('#shareBtn').show();
@@ -104,522 +135,225 @@ var ProjTreeSetting = {
             $('td:eq(0)', node.row).append($('<i class="fa fa-sort" data-toggle="tooltip" data-placement="top" title="长安拖动"></i>'));
             $('td:eq(0)', node.row).append($('<i class="fa fa-sort" data-toggle="tooltip" data-placement="top" title="长安拖动"></i>'));
         }
         }
     }
     }
-}
-// 从服务器拉取数据
-var LoadProjTree = function () {
-    var table = $('#ProjTree');
-    $('thead', table).remove();
-    $('tbody', table).remove();
-    GetAllProjectData(function (data) {
-        Tree = $.fn.treeTable.init(table, ProjTreeSetting, data);
-    });
 };
 };
 
 
-var GetNeedUpdatePreNode = function (parent, next) {
-    if (next) {
-        return next.preSibling();
-    } else if (parent) {
-        return parent.firstChild();
-    } else {
-        return null;
-    }
-    /*if (parent && parent.id() !== -1) {
-        if (next && next.preSibling()) {
-            return next.preSibling();
-        } else {
-            return parent.lastChild();
+$(document).ready(function() {
+    init();
+
+    // 新增建设项目点击
+    $('#addProjBtn').click(function () {
+        if (Tree) {
+            $('#add-add-project-dialog').modal('show');
         }
         }
-    } else {
-        return null;
-    }*/
-};
-var GetPreNodeUpdateData = function (pre, nid) {
-    var data = {};
-    data['updateType'] = 'update';
-    data['updateData'] = {};
-    data.updateData[Tree.setting.tree.id] = pre.id();
-    data.updateData[Tree.setting.tree.id] = nid;
-    return data;
-}
-// 获取新建项目数据
-var GetAddProjUpdateData = function (parent, next, name, newId) {
-    var datas = [], updateData, pre;
-    updateData = {};
-    updateData['updateType'] = 'new';
-    updateData['updateData'] = {};
-    updateData['updateData'][Tree.setting.tree.id] = newId;
-    updateData['updateData'][Tree.setting.tree.pid] = parent ? parent.id() : -1;
-    updateData['updateData'][Tree.setting.tree.nid] = next ? next.id() : -1;
-    updateData['updateData']['name'] = name;
-    updateData['updateData']['projType'] = 'Tender';
-    datas.push(updateData);
-    return datas;
-};
-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';
-        data['updateData'] = {};
-        data['updateData'][Tree.setting.tree.id] = newId;
-        data['updateData'][Tree.setting.tree.pid] = parentId;
-        data['updateData'][Tree.setting.tree.nid] = nextId;
-        data['updateData']['name'] = name;
-        data['updateData']['projType'] = projType;
-        newId += 1;
-        datas.push(data);
-        return data;
-    }
-    folderData1 = addUpdateData(parent.id(), next ? next.id() : -1, folderName1, 'Folder');
-    folderData2 = addUpdateData(folderData1.updateData[Tree.setting.tree.id], -1, folderName2, 'Folder');
-    addUpdateData(folderData2.updateData[Tree.setting.tree.id], -1, name, 'Tender');
-    return datas;
-};
-// 获取新建文件夹数据
-var GetAddForlderUpdateData = function (parent, next, folderName, newId) {
-    var datas = [], updateData, pre;
-    updateData = {};
-    updateData['updateType'] = 'new';
-    updateData['updateData'] = {};
-    updateData['updateData'][Tree.setting.tree.id] = newId;
-    updateData['updateData'][Tree.setting.tree.pid] = parent ? parent.id() : -1;
-    updateData['updateData'][Tree.setting.tree.nid] = next ? next.id() : -1;
-    updateData['updateData']['name'] = folderName;
-    updateData['updateData']['projType'] = 'Folder';
-    datas.push(updateData);
+    });
 
 
-    pre = GetNeedUpdatePreNode(parent, next);
-    if (pre) {
-        datas.push(GetPreNodeUpdateData(pre, newId));
-    }
-    return datas;
-};
+    // 新增建设项目操作
+    $('#addProjOk').click(function () {
+        AddProject();
+    });
 
 
-var GetNextChangeUpdateData = function (datas, node, next) {
-    var data = null;
-    if (node && node.id() !== -1) {
-        data = {};
-        data['updateType'] = 'update';
-        data['updateData'] = {};
-        data['updateData'][Tree.setting.tree.id] = node.id();
-        data['updateData'][Tree.setting.tree.nid] = next ? next.id() : -1;
-        datas.push(data);
-    }
-    return data;
-}
-var GetFullFolder = function (node) {
-    var fullFolder = [],
-        cur = node;
-    while (cur && cur.data) {
-        fullFolder.unshift(cur.data.name);
-        cur = cur.parent;
-    }
-    return fullFolder;
-}
-var GetDeleteUpdateData = function (node) {
-    var datas = [], updateData,
-        pre = node.preSibling(),
-        deleteNodeData = function (node) {
-            var data = {};
-            data['updateType'] = 'delete';
-            data['updateData'] = {};
-            data['updateData'][Tree.setting.tree.id] = node.id();
-            if (node.data.projType === 'Tender') {
-                data['updateData']['FullFolder'] = GetFullFolder(node.parent);
+    // 新增单项项目点击
+    $("#add-engineering-btn").click(function() {
+        let selectedItem = Tree.selected();
+        try {
+            if (selectedItem === null) {
+                throw '请选择要添加到的项目工程';
             }
             }
-            return data;
-        },
-        addDeleteChildren = function (children) {
-            children.forEach(function(child){
-                datas.push(deleteNodeData(child));
-                addDeleteChildren(child.children);
-            });
-        };
-    if (pre && pre.id() !== -1) {
-        updateData = {};
-        updateData['updateType'] = 'update';
-        updateData['updateData'] = {};
-        updateData['updateData'][Tree.setting.tree.id] = pre.id();
-        updateData['updateData'][Tree.setting.tree.nid] = node ? node.nid() : -1;
-        datas.push(updateData);
-    }
-    datas.push(deleteNodeData(node));
-    addDeleteChildren(node.children);
-    return datas;
-};
-
-var GetMoveUpdateData = function (node, parent, next) {
-    var datas = [], updateData;
-    updateData = GetNextChangeUpdateData(datas, node.preSibling(), node.nextSibling);
-    if (next) {
-        updateData = GetNextChangeUpdateData(datas, next.preSibling(), node);
-    }
-    updateData = {};
-    updateData['updateType'] = 'update';
-    updateData['updateData'] = {};
-    updateData['updateData'][Tree.setting.tree.id] = node.id();
-    updateData['updateData'][Tree.setting.tree.pid] = parent ? parent.id() : -1;
-    updateData['updateData'][Tree.setting.tree.nid] = next ? next.id() : -1;
-    datas.push(updateData);
-    return datas;
-};
-
-var GetCopyUpdateData = function (node, parent, next, newId){
-    var datas = [], updateData, pre;
-    updateData = {};
-    updateData['updateType'] = 'copy';
-    updateData['srcProjectId'] = node.id();
-    updateData['updateData'] = {};
-    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;
-    updateData['updateData']['projType'] = node.data.projType;
-    datas.push(updateData);
-
-    pre = GetNeedUpdatePreNode(parent, next);
-    if (pre) {
-        updateData = {};
-        updateData['updateType'] = 'update';
-        updateData['updateData'] = {};
-        updateData['updateData'][Tree.setting.tree.id] = pre.id();
-        updateData['updateData'][Tree.setting.tree.nid] = node.tree.maxNodeId() + 1;
-        datas.push(updateData);
-    }
-    return datas;
-}
-
-var ConvertTreeToZtree = function (Tree, zTreeObj, filterNode) {
-    var setting = {
-            data: {
-                simpleData: {
-                    enable:true,
-                    idKey: "id",
-                    pIdKey: "pId",
-                    rootPId: "-1"
-                }
-            }},
-        zTreeData = [],
-        exportNodesData = function (nodes) {
-            nodes.forEach(function (node) {
-                if (node !== filterNode) {
-                    var data = {};
-                    data['id'] = node.data[Tree.setting.tree.id];
-                    data['pId'] = node.pid();
-                    data['name'] = node.data['name'];
-                    data['isParent'] = node.data.projType === 'Folder';//(node.data.projType === 'Folder' && node.children.length === 0);
-                    data['open'] = node.data.projType === 'Folder';//node.children.length !== 0;
-                    zTreeData.push(data);
-                    exportNodesData(node.children);
-                }
-            })
-        };
-    exportNodesData(Tree._root.children);
-    return $.fn.zTree.init(zTreeObj, setting, zTreeData);
-};
-var GetTargetTreeNode = function (zTreeObj) {
-    var ztree_selected;
-    if (zTreeObj && Tree) {
-        ztree_selected = zTreeObj.getSelectedNodes().length === 0 ? null : zTreeObj.getSelectedNodes()[0];
-        return ztree_selected ? Tree.findNode(ztree_selected.id) : null;
-    } else {
-        return null;
-    }
-};
-
-var AddFolderChildValid = function (node) {
-    if (node.data.projType === 'Folder') {
-        if (node.children.length === 0) {
-            return true;
-        } else {
-            return (node.firstChild().data.projType === 'Folder');
-        }
-    } else {
-        return false;
-    }
-};
-var AddTenderChildValid = function (node) {
-    if (node.data.projType === 'Folder') {
-        if (node.children.length === 0) {
-            return true;
-        } else {
-            return (node.firstChild().data.projType === 'Tender');
+            let selectedType = selectedItem.data !== undefined ? selectedItem.data.projType : '';
+            if (selectedType !== projectType.project) {
+                throw '单项项目只能添加到建设项目中';
+            }
+            $("#add-engineering-dialog").modal("show");
+        } catch (error) {
+            alert(error);
         }
         }
-    } else {
-        return false;
-    }
-};
+    });
 
 
-LoadProjTree();
-$('#movetoBtn').hide();
-$('#copytoBtn').hide();
-$('#shareBtn').hide();
-$('#cooperateBtn').hide();
+    // 新增单项工程操作
+    $("#add-engineering-confirm").click(function() {
+        AddEngineering();
+    });
 
 
-// 新建文件夹
-$('#addFolderBtn').click(function () {
-    if (Tree) {
-        $('#addFolder').modal('show');
-    }
-});
-$('#addFolderOk').click(function () {
-    var form = $('#addFolder');
-    var name = $('#folder-name-input').val();
-    var parent, next;
-    if (name) {
-        if (Tree.selected()) {
-            if (Tree.selected().children.length === 0 || Tree.selected().firstChild().data.projType === 'Folder') {
-                parent = Tree.selected();
-                next = Tree.selected().firstChild();
-            } else {
-                parent = Tree.selected().parent;
-                next = Tree.selected().nextSibling;
+    // 新增单位工程点击
+    $("#add-tender-btn").click(function() {
+        let selectedItem = Tree.selected();
+        try {
+            if (selectedItem === null) {
+                throw '请选择要添加到的单项工程';
+            }
+            let selectedType = selectedItem.data !== undefined ? selectedItem.data.projType : '';
+            if (selectedType !== projectType.engineering) {
+                throw '单项项目只能添加到单项工程中';
             }
             }
-        } else {
-            parent = Tree._root;
-            next = Tree.firstNode();
+            $("#add-tender-dialog").modal("show");
+        } catch (error) {
+            alert(error);
         }
         }
+    });
+
+    // 新增单位工程
+    $("#add-tender-confirm").click(function() {
+        AddTender();
+    });
 
 
-        CommonAjax.post('/pm/api/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');
-            });
-        });
-    }
 });
 });
 
 
-// 新建工程
-var AddProj = function () {
-    var name = $('#tenderName').val();
-    if (name !== '') {
-        // if (Tree.selected()){
-        //     if (Tree.selected().data.projType === 'Tender') {
-        //         parent = Tree.selected().parent;
-        //         next = Tree.selected().next;
-        //     } else {
-        //         if (Tree.selected().firstNode.data.projType === 'Tender') {
-        //             parent = Tree.selected();
-        //             next = Tree.selected().firstNode();
-        //         } else {
-        //             return;
-        //         }
-        //     }
-        // } else {
-        //     parent = Tree._root();
-        //     next = Tree.firstNode();
-        // }
-        CommonAjax.post('/pm/api/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');
+/**
+ * 初始化数据
+ *
+ * @return {void}
+ */
+function init() {
+    let table = $('#ProjTree');
+    $('thead', table).remove();
+    $('tbody', table).remove();
+    GetAllProjectData(function (data) {
+        Tree = $.fn.treeTable.init(table, ProjTreeSetting, data);
+    });
+}
+
+/**
+ * 新增建设项目
+ *
+ * @return {boolean}
+ */
+function AddProject() {
+    let name = $('#project-name').val();
+    if (name === '') {
+        alert('请填写工程');
+        return false;
+    }
+    GetNewProjectId(function(IDs) {
+        let typeInfo = {
+            updateType: 'new',
+            projectType: projectType.project
+        };
+        let updateData = GetUpdateData(Tree._root, Tree.firstNode(), name, IDs.lowID, typeInfo);
+        Tree.maxNodeId(IDs.lowID - 1);
+        UpdateProjectData(updateData, function (datas) {
+            datas.forEach(function (data) {
+                let parent = null;
+                let next = null;
+                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);
+                }
             });
             });
+            $('#add-project-dialog').modal('hide');
         });
         });
-    }
+    });
 }
 }
-var AddFolderProj = function () {
-    var nameB = $('#buildName').val(), nameX = $('#xiangName').val(), name = $('#tenderName').val();
-    if (nameB !== '' && nameX !== '' && name !== '') {
-        CommonAjax.post('/pm/api/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');
+
+/**
+ * 新增同级元素
+ *
+ * @param {String} name
+ * @param {String} type
+ * @param {function} callback
+ * @return {void}
+ */
+function AddSiblingsItem(name, type, callback) {
+    let parent = Tree.selected();
+    let next = Tree.selected().firstChild();
+    GetNewProjectId(function(IDs) {
+        let typeInfo = {
+            updateType: 'new',
+            projectType: type
+        };
+        let updateData = GetUpdateData(parent, next, name, IDs.lowID, typeInfo);
+        Tree.maxNodeId(IDs.lowID - 1);
+        UpdateProjectData(updateData, function(datas){
+            datas.forEach(function (data) {
+                if (data.updateType === 'new') {
+                    Tree.addNodeData(data.updateData, parent, next);
+                }
             });
             });
+            callback();
         });
         });
-    }
+    });
 }
 }
-$('#addProjBtn').click(function () {
-    if (Tree) {
-        $('#addProj').modal('show');
-    }
-});
-$('#addProjOk').click(function () {
-    var hasFolder = $('#isAddFolder>input').is(':checked');
-    if (hasFolder) {
-        AddFolderProj();
-    } else {
-        AddProj();
-    }
-});
-$('#isAddFolder').change(function () {
-    if ($('input',this).is(':checked')) {
-        $('#moreinfo').collapse('show');
-    } else {
-        $('#moreinfo').collapse('hide');
-    }
-});
 
 
-// 重命名
-$('#renameBtn').click(function() {
-    if (Tree && Tree.selected()) {
-        $('#rename').modal('show');
-    }
-})
-$('#rename').on('show.bs.modal', function () {
-    $('#newName').attr('placeholder', Tree.selected().data.name);
-});
-$('#renameOk').click(function () {
-    var select = Tree.selected(),
-        newName = $('#newName').val(),
-        form = $('#rename');
-    if (select && newName !== select.data.name) {
-        RenameProject(select.id(), newName, function () {
-            form.modal('hide');
-            select.data.name = newName;
-            Tree.refreshNodesDom([select]);
-        });
-    } else {
-        form.modal('hide');
+/**
+ * 新增单项工程
+ *
+ * @return {boolean}
+ */
+function AddEngineering() {
+    let name = $('#engineering-name').val();
+    if (name === '') {
+        alert('请填写单项工程名称');
+        return false;
     }
     }
-});
+    AddSiblingsItem(name, projectType.engineering, function() {
+        $("#add-engineering-dialog").modal("hide");
+    });
+}
 
 
-// 删除
-$('#delBtn').click(function() {
-    if (Tree && Tree.selected()) {
-        $('#del').modal('show');
-    }
-});
-$('#del').on('show.bs.modal', function() {
-    var hasTenderChild = function (children) {
-        var i;
-        for (i = 0; i < children.length; i++) {
-            if (children[i].children.length === 0) {
-                if (children[i].data.projType === 'Tender') {
-                    return true;
-                }
-            } else if (hasTenderChild(children[i].children)) {
-                return true;
-            }
-        }
+/**
+ * 新增单位工程
+ *
+ * @return {boolean}
+ */
+function AddTender() {
+    let name = $('#tender-name').val();
+    if (name === '') {
+        alert('请填写单位工程名称');
         return false;
         return false;
-    };
-    if (Tree.selected().children.length == 0) {
-        $('#tenderHint').show();
-        $('#tenderHint').text('删除 "' + Tree.selected().data.name +'" ?');
-        $('#folderHint').hide();
-    } else {
-        $('#tenderHint').hide();
-        $('#folderHint').show();
-        $('#folderHint').text('删除 "'+ Tree.selected().data.name +'" 以及它包含的子项?');
-    }
-    if (hasTenderChild([Tree.selected()])) {
-        $('#restoreHint').show();
-    } else {
-        $('#restoreHint').hide();
     }
     }
-});
-$('#deleteProjOk').click(function () {
-    var updateData, form = $('#del');
-    if (Tree) {
-        updateData = GetDeleteUpdateData(Tree.selected());
-        UpdateProjectData(updateData, function () {
-            form.modal('hide');
-            Tree.removeNode(Tree.selected());
-        });
-    }
-});
+    AddSiblingsItem(name, projectType.tender, function() {
+        $("#add-tender-dialog").modal("hide");
+    });
+}
 
 
-// 移动至
-$('#movetoBtn').click(function () {
-    if (Tree && Tree.selected()) {
-        $('#moveto').modal('show');
-    }
-});
-$('#moveto').on('show.bs.modal', function () {
-    movetoZTree = ConvertTreeToZtree(Tree, $('#treeDemo'), Tree.selected());
-});
-$('#movetoOk').click(function () {
-    var updateData, form = $('#moveto'),
-        target = GetTargetTreeNode($.fn.zTree.getZTreeObj('treeDemo')),
-        parent, next, cur = Tree.selected();
-    if (target) {
-        if (target.data.projType === 'Tender') {
-            parent = target.parent;
-            next = target.nextSibling;
-        } else {
-            parent = target;
-            next = target.firstChild();
-        }
 
 
-        if (parent !== cur.parent || (next !== cur && next !== cur.nextSibling)){
-            updateData = GetMoveUpdateData(Tree.selected(), parent, next);
-            UpdateProjectData(updateData, function (data) {
-                form.modal('hide');
-                Tree.move(Tree.selected(), parent, next);
-            });
-        } else {
-            form.modal('hide');
-        }
+/**
+ * 组织更新数据
+ *
+ * @param {Object} parent
+ * @param {Object} next
+ * @param {String} name
+ * @param {Object} type
+ * @return {Object}
+ */
+function GetUpdateData(parent, next, name, newId, type) {
+    let data = [];
+    let updateData = {};
+    updateData['updateType'] = type.updateType === undefined ? 'new' : type.updateType;
+    updateData['updateData'] = {};
+    updateData['updateData'][Tree.setting.tree.id] = newId;
+    updateData['updateData'][Tree.setting.tree.pid] = parent ? parent.id() : -1;
+    updateData['updateData'][Tree.setting.tree.nid] = next ? next.id() : -1;
+    updateData['updateData']['name'] = name;
+    updateData['updateData']['projType'] = type.projectType !== undefined ? type.projectType : 'Tender';
+    data.push(updateData);
+    return data;
+}
+/**
+ * 获取需要更新的前节点
+ *
+ * @param {Object} parent
+ * @param {Object} next
+ * @return {Object}
+ */
+function GetNeedUpdatePreNode(parent, next) {
+    if (next) {
+        return next.preSibling();
+    } else if (parent) {
+        return parent.firstChild();
     } else {
     } else {
-        form.modal('hide');
-    }
-})
-
-// 复制到
-$('#copytoBtn').click(function () {
-    if (Tree && Tree.selected()) {
-        $('#copyto').modal('show');
+        return null;
     }
     }
-});
-$('#copyto').on('show.bs.modal', function () {
-    copytoZTree = ConvertTreeToZtree(Tree, $('#treeDemo2'));
-});
-$('#copytoOk').click(function() {
-    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')) {
-        if (target.data.projType === 'Tender') {
-            parent = target.parent;
-            next = target.nextSibling;
-        } else {
-            parent = target;
-            next = target.firstChild();
-        }
+}
 
 
-        if (parent !== cur.parent || (next !== cur && next !== cur.nextSibling)){
-            CommonAjax.post('/pm/api/getNewProjectID', {count: 1}, function (IDs) {
-                var updateData = GetCopyUpdateData(cur, parent, next, IDs.lowID);
-                Tree.maxNodeId(IDs.lowID - 1);
-                CommonAjax.post('/pm/api/copyProjects', {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 {
-            form.modal('hide');
-        }
-    } else {
-        form.modal('hide');
-    }
-});
+/**
+ * 获取最新id
+ *
+ * @param {function} callback
+ * @return {void}
+ */
+function GetNewProjectId(callback) {
+    CommonAjax.post('/pm/api/getNewProjectID', {count: 1}, function(data) {
+        callback(data);
+    });
+}