瀏覽代碼

提交备份代码

caiaolin 8 年之前
父節點
當前提交
81a47385b0
共有 1 個文件被更改,包括 629 次插入0 次删除
  1. 629 0
      web/building_saas/pm/js/pm_main_bak.js

+ 629 - 0
web/building_saas/pm/js/pm_main_bak.js

@@ -0,0 +1,629 @@
+/**
+ * Created by Mai on 2017/2/24.
+ */
+
+var Tree = null, movetoZTree = null, copytoZTree = null;
+var ProjTreeSetting = {
+    tree: {
+        id: 'ID',
+        pid: 'ParentID',
+        nid: 'NextSiblingID',
+        btnColumn: 1,
+        nullId: -1
+    },
+    columns: [
+        {
+            head: '',
+            data: '',
+            width: '40',
+            event: {}
+        },
+        {
+            head: '工程列表',
+            data: 'name',
+            width: '78%',
+            event: {
+                getText: function (html, node, text) {
+                    html.push((node && node.data && node.data.projType === 'Folder') ? ' ' : '');
+                    html.push('<a ');
+                    if (node && node.data && node.data.projType === 'Tender') {
+                        //html.push('href="/main?project=', node.id(), '"');
+                        html.push('href="javacript:void(0);"');
+                    }
+                    html.push('>', text, '<a>');
+                },
+                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>');
+                    }
+                },
+                tdBindEvent: function (td, node) {
+                    if (node.data.projType === 'Tender') {
+                        $('a:eq(1)', td).bind('click', function () {
+                            BeforeOpenProject(node.id(), {'fullFolder': GetFullFolder(node.parent)}, function () {
+                                window.location.href = '/main?project=' + node.id();
+                            });
+                            return false;
+                        });
+                    }
+                }
+            }
+        },
+        {
+            head: '最近使用',
+            data: 'lastDateTime',
+            width: '10%',
+            event: {
+                getText: function (html, node, text) {
+                    if (node.data.projType === 'Tender') {
+                        html.push(text ? new Date(text).Format('yyyy-MM-dd') : '');
+                    }
+                }
+            }
+        },
+        {
+            head: '创建日期',
+            data: 'createDateTime',
+            width: '10%',
+            event: {
+                getText: function (html, node, text) {
+                    if (node.data.projType === 'Tender') {
+                        html.push(text ? new Date(text).Format('yyyy-MM-dd') : '');
+                    }
+                }
+            }
+        }
+    ],
+    viewEvent: {
+        beforeSelect: function (node) {
+            if (node && node.row) {
+                $('td:eq(0)', node.row).children().remove();
+            }
+        },
+        onSelectNode: function (node) {
+            // 新建文件夹 是否可见
+            if (node.data.projType === 'Tender') {
+                $('#addFolderBtn').hide();
+            } else {
+                $('#addFolderBtn').show();
+            }
+            // 重命名可见
+            $('#renameBtn').show();
+            // 删除可见
+            $('#delBtn').show();
+            // 移动到、复制到、共享、协同 是否可见
+            if (node.data.projType === 'Tender') {
+                $('#movetoBtn').show();
+                $('#copytoBtn').show();
+                $('#shareBtn').show();
+                $('#cooperateBtn').show();
+            } else {
+                $('#movetoBtn').hide();
+                $('#copytoBtn').hide();
+                $('#shareBtn').hide();
+                $('#cooperateBtn').hide();
+            }
+            $('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();
+        }
+    } 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;
+};
+
+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);
+            }
+            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');
+        }
+    } else {
+        return false;
+    }
+};
+
+LoadProjTree();
+$('#movetoBtn').hide();
+$('#copytoBtn').hide();
+$('#shareBtn').hide();
+$('#cooperateBtn').hide();
+
+// 新建文件夹
+$('#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;
+            }
+        } else {
+            parent = Tree._root;
+            next = Tree.firstNode();
+        }
+
+        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');
+            });
+        });
+    }
+}
+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');
+            });
+        });
+    }
+}
+$('#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');
+    }
+});
+
+// 删除
+$('#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 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());
+        });
+    }
+});
+
+// 移动至
+$('#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');
+        }
+    } else {
+        form.modal('hide');
+    }
+})
+
+// 复制到
+$('#copytoBtn').click(function () {
+    if (Tree && Tree.selected()) {
+        $('#copyto').modal('show');
+    }
+});
+$('#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');
+    }
+});