/**
* Created by Mai on 2017/2/24.
*/
var Tree = null, movetoZTree = null, copytoZTree = null;
var ProjTreeSetting = {
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('', text, '');
},
getIcon: function (html, node) {
if (node.data.projType === 'Folder') {
html.push('');
} else {
html.push('└');
}
}
}
},
{
head: '最近使用',
data: 'lastDateTime',
width: '10%',
event: {
getText: function (html, node, text) {
html.push(text ? new Date(text).Format('yyyy-MM-dd') : '');
}
}
},
{
head: '创建日期',
data: 'createDateTime',
width: '10%',
event: {
getText: function (html, node, text) {
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($(''));
}
}
}
// 从服务器拉取数据
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 (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'] = {id: pre.id(), nextId: nid};
return data;
}
// 获取新建项目数据
var GetAddProjUpdateData = function (parent, next, name) {
var datas = [], updateData, pre, newId = Tree.maxNodeId() + 1;
updateData = {};
updateData['updateType'] = 'new';
updateData['updateData'] = {};
updateData['updateData']['id'] = newId;
updateData['updateData']['parentId'] = parent ? parent.id() : -1;
updateData['updateData']['nextId'] = 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) {
var datas = [], updateData, folderData1, folderData2, pre, newId = Tree.maxNodeId() + 1;
var addUpdateData = function (parentId, nextId, name, projType) {
var data = {};
data['updateType'] = 'new';
data['updateData'] = {};
data['updateData']['id'] = newId;
data['updateData']['parentId'] = parentId;
data['updateData']['nextId'] = 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.id, -1, folderName2, 'Folder');
addUpdateData(folderData2.updateData.id, -1, name, 'Tender');
return datas;
};
// 获取新建文件夹数据
var GetAddForlderUpdateData = function (parent, next, folderName) {
var datas = [], updateData, pre, newId = Tree.maxNodeId() + 1;
updateData = {};
updateData['updateType'] = 'new';
updateData['updateData'] = {};
updateData['updateData']['id'] = newId;
updateData['updateData']['parentId'] = parent ? parent.id() : -1;
updateData['updateData']['nextId'] = 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']['id'] = node.id();
data['updateData']['nextId'] = next ? next.id() : -1;
datas.push(data);
}
return data;
}
var GetFullName = function (node) {
var fullName = [],
cur = node;
while (cur && cur.data) {
fullName.unshift(cur.data.name);
cur = cur.parent;
}
return fullName;
}
var GetDeleteUpdateData = function (node) {
var datas = [], updateData,
pre = node.preSibling(),
deleteNodeData = function (node) {
var data = {};
data['updateType'] = 'delete';
data['updateData'] = {};
data['updateData']['id'] = node.id();
data['updateData']['deleted'] = true;
if (node.data.projType === 'Tender') {
data['updateData']['deleteFullFolder'] = GetFullName(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']['id'] = pre.id();
updateData['updateData']['nextId'] = 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']['id'] = node.id();
updateData['updateData']['parentId'] = parent ? parent.id() : -1;
updateData['updateData']['nextId'] = next ? next.id() : -1;
datas.push(updateData);
return datas;
};
var GetCopyUpdateData = function (node, parent, next){
var datas = [], updateData, pre;
updateData = {};
updateData['updateType'] = 'new';
updateData['updateData'] = {};
updateData['updateData']['id'] = node.tree.maxNodeId() + 1;
updateData['updateData']['parentId'] = parent ? parent.id() : -1;
updateData['updateData']['nextId'] = 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']['id'] = pre.id();
updateData['updateData']['nextId'] = 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['id'];
data['pId'] = node.pid();// === -1 ? 0 : 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 updateData, 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();
}
updateData = GetAddForlderUpdateData(parent, next, name);
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(), updateData, parent, next;
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();
// }
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);
}
});
$('#addProj').modal('hide');
});
}
}
var AddFolderProj = function () {
var nameB = $('#buildName').val(), nameX = $('#xiangName').val(), name = $('#tenderName').val(), updateData;
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.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');
});
}
}
$('#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 updateData, 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)){
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);
}
});
});
} else {
form.modal('hide');
}
} else {
form.modal('hide');
}
});