/**
* 项目管理相关js
*
* @author CaiAoLin
* @date 2017/8/22
* @version
*/
let Tree = null;
let movetoZTree = null;
let copytoZTree = null;
let projectType = {
folder: 'Folder',
tender: 'Tender',
project: 'Project',
engineering: 'Engineering'
};
let 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) {
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 = '';
html.push((node && node.data && node.data.projType === projectType.folder) ? ' ' : '');
html.push('', icon, ' ', text, '');
},
getIcon: function (html, node) {
// html.push('');
// if (node.data.projType === 'Tender') {
// html.push('└');
// }
},
tdBindEvent: function (td, node) {
if (node.data.projType === projectType.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 === projectType.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 === projectType.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 === projectType.tender) {
$('#addFolderBtn').hide();
} else {
$('#addFolderBtn').show();
}
// 重命名可见
$('#renameBtn').show();
// 删除可见
$('#delBtn').show();
// 移动到、复制到、共享、协同 是否可见
if (node.data.projType === projectType.tender) {
$('#movetoBtn').show();
$('#copytoBtn').show();
$('#shareBtn').show();
$('#cooperateBtn').show();
} else {
$('#movetoBtn').hide();
$('#copytoBtn').hide();
$('#shareBtn').hide();
$('#cooperateBtn').hide();
}
$('td:eq(0)', node.row).append($(''));
}
}
};
$(document).ready(function() {
init();
// 新增建设项目点击
$('#addProjBtn').click(function () {
if (Tree) {
$('#add-add-project-dialog').modal('show');
}
});
// 新增建设项目操作
$('#addProjOk').click(function () {
AddProject();
});
// 新增单项项目点击
$("#add-engineering-btn").click(function() {
let selectedItem = Tree.selected();
try {
if (selectedItem === null) {
throw '请选择要添加到的项目工程';
}
let selectedType = selectedItem.data !== undefined ? selectedItem.data.projType : '';
if (selectedType !== projectType.project) {
throw '单项项目只能添加到建设项目中';
}
$("#add-engineering-dialog").modal("show");
} catch (error) {
alert(error);
}
});
// 新增单项工程操作
$("#add-engineering-confirm").click(function() {
AddEngineering();
});
// 新增单位工程点击
$("#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 '单项项目只能添加到单项工程中';
}
$("#add-tender-dialog").modal("show");
} catch (error) {
alert(error);
}
});
// 新增单位工程
$("#add-tender-confirm").click(function() {
AddTender();
});
});
/**
* 初始化数据
*
* @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');
});
});
}
/**
* 新增同级元素
*
* @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();
});
});
}
/**
* 新增单项工程
*
* @return {boolean}
*/
function AddEngineering() {
let name = $('#engineering-name').val();
if (name === '') {
alert('请填写单项工程名称');
return false;
}
AddSiblingsItem(name, projectType.engineering, function() {
$("#add-engineering-dialog").modal("hide");
});
}
/**
* 新增单位工程
*
* @return {boolean}
*/
function AddTender() {
let name = $('#tender-name').val();
if (name === '') {
alert('请填写单位工程名称');
return false;
}
AddSiblingsItem(name, projectType.tender, function() {
$("#add-tender-dialog").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 {
return null;
}
}
/**
* 获取最新id
*
* @param {function} callback
* @return {void}
*/
function GetNewProjectId(callback) {
CommonAjax.post('/pm/api/getNewProjectID', {count: 1}, function(data) {
callback(data);
});
}