/**
* 项目管理相关js
*
* @author CaiAoLin
* @date 2017/8/22
* @version
*/
let Tree = null;
let movetoZTree = null;
let copytoZTree = null;
let engineering = [];
let feeRateData = [];
let isSaving = false;
let projectProperty = [];
let fileDelObj = null;
let projectType = {
folder: 'Folder',
tender: 'Tender',
project: 'Project',
engineering: 'Engineering'
};
let fileType = {
unitPriceFile: 'UnitPriceFile',
feeRateFile: 'FeeRateFile'
};
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 = '';
let aClassName = '';
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";
aClassName = "open-sidebar";
break;
case projectType.engineering:
className = "fa fa-cube";
aClassName = "open-sidebar";
break;
}
let icon = '';
html.push((node && node.data && node.data.projType === projectType.folder) ? ' ' : '');
html.push('', icon, ' ', text, '');
},
getIcon: function (html, node) {
if (node.data.projType === projectType.tender) {
html.push('' +
' ';
}
html += ''+ counter +' ' +
''+ counter +' ' +
''+ tmp.data.name +' ' +
'' +
' ' +
' ' +
' ' +
' ' +
' ';
$(target + '-table tbody').html(html);
}
// 加载单价文件与费率文件
if (selectedItem.data.projType === projectType.project) {
let engineeringData = selectedItem.children !== null && selectedItem.children.children !== null ?
selectedItem.children : [];
/*if (engineeringData.length <= 0) {
return;
}*/
let unitPriceFileList = [];
let feeFileList = [];
let poj_tenders = getProjTenders(selectedItem);
getUnitFile(selectedItem.data.ID, function (response) {
unitPriceFileList = unitPriceFileList.concat(response.data);
$(target + '-unit-price-table tbody').empty();
set_file_table(target, poj_tenders, unitPriceFileList, fileType.unitPriceFile);
});
getFeeRateFile(selectedItem.data.ID, function (response) {
feeFileList = feeFileList.concat(response.data);
$(target + '-fee-table tbody').empty();
set_file_table(target, poj_tenders, feeFileList, fileType.feeRateFile);
});
}
}
//获取建设项目的全部单位工程
function getProjTenders(proj) {
let rst = [];
let engineerings = proj.children || null;
if (engineerings) {
for (let i = 0, len = engineerings.length; i < len; i++) {
let e_tenders = engineerings[i].children || null;
if (e_tenders && e_tenders.length > 0) {
rst = rst.concat(e_tenders);
}
}
}
return rst;
}
//单价、费率文件汇总信息的使用次数、使用该文件的单位工程
function getUsedObj(tenders, fileId, type){
let rst = Object.create(null), usedCount = 0, usedInfo = '';
rst.usedCount = 0;
rst.usedInfo = null;
for(let i = 0, len = tenders.length; i < len; i++){
let theFile = type === fileType.unitPriceFile ? tenders[i].data.property.unitPriceFile || null : tenders[i].data.property.feeFile || null;
if(theFile && theFile.id == fileId){
usedCount ++;
usedInfo += tenders[i].data.name + ''+ (counter + 1) +' ' +
' ' +
'合计 ' +
'' +
' ' +
' ' +
' ' +
'
';
}
}
if(usedCount > 0){
usedInfo = usedInfo.slice(0, usedInfo.length - 4);
rst.usedCount = usedCount;
rst.usedInfo = usedInfo;
}
return rst;
}
//单价、费率文件汇总界面交互
function bindEvents_file_table(jqS, usedObj, targetBody, type){
//悬浮显示删除和重命名按钮
$(jqS).hover(function(){
$('p',this).show();
},function(){
$('p', this).hide();
});
//删除
if(usedObj.usedCount > 0){//不可删除
$(jqS + ' p a:eq(0)').addClass('disabled');
$(jqS + ' p a:eq(0)').removeAttr('data-target');
}
else {
$(jqS + ' p a:eq(0)').on('click', function () {
let dispName = $(jqS + ' div:eq(0)')[0].childNodes[0].textContent;
//刷新删除弹出框内容
let delData = '删除"' + dispName + '"?';
$('#del-wj .modal-body h5').text(delData);
let attrId = $(jqS).attr('id');
let id = attrId.slice(5, attrId.length);
if(type === fileType.unitPriceFile){
id = parseInt(id);
}
let obj = Object.create(null);
obj.fileType = type;
obj.id = id;
fileDelObj = obj;
});
}
//重命名
$(jqS + ' p a:eq(1)').on('click', function () {
let fileObjs = getFileObj(targetBody, type);
let orgDispName = $(jqS + ' div:eq(0)')[0].childNodes[0].textContent;
let postFix = orgDispName.slice(orgDispName.length - 4, orgDispName.length);
let orgName = orgDispName.slice(0, orgDispName.length - 4);
$(jqS + ' input').val(orgName);
$(jqS + ' div:eq(0)').hide();
$(jqS + ' div:eq(1)').show();
//确认重命名
$(jqS + ' .btn-success').on('click', function () {
let attrId = $(jqS).attr('id');
let id = attrId.slice(5, attrId.length);
let newName = $(jqS + ' input').val().trim();
if(newName !== orgName){
if(hasThisFileName(fileObjs, newName)){
alert('本建设项目已存在该文件名,请重新输入!');
$(jqS + ' input').val(orgName);
return;
}
if(newName.trim().length === 0){
alert('文件名不可为空!');
$(jqS + ' input').val(orgName);
return;
}
//ajax
let updateObj = Object.create(null);
updateObj.fileType = type;
updateObj.updateType = 'update';
updateObj.updateData = Object.create(null);
if(type === fileType.unitPriceFile){
updateObj.updateData.id = parseInt(id);
//updateObj.updateData.id = id;
}
else if(type === fileType.feeRateFile){
updateObj.updateData.ID = id;
}
updateObj.updateData.name = newName;
a_updateFiles([updateObj], function () {
let newDispName = newName + postFix;
$(jqS + ' div:eq(0)')[0].childNodes[0].textContent = newDispName;
$(jqS + ' div:eq(0)').show();
$(jqS + ' div:eq(1)').hide();
});
console.log(updateObj);
}
let newDispName = newName + postFix;
$(jqS + ' div:eq(0)')[0].childNodes[0].textContent = newDispName;
$(jqS + ' div:eq(0)').show();
$(jqS + ' div:eq(1)').hide();
});
//取消重命名
$(jqS + ' .btn-secondary').on('click', function () {
$(jqS + ' div:eq(0)').show();
$(jqS + ' div:eq(1)').hide();
});
});
//悬浮框显示使用该文件的单位工程
$($(jqS)[0].nextSibling).popover({
placement:"bottom",
html:true,
trigger:"hover", //| focus
content: usedObj.usedInfo ? usedObj.usedInfo : ''
}
);
}
//更新单价、费率文件(删除、重命名)
function a_updateFiles(updateDatas, callback){
$.ajax({
type: 'post',
url: '/pm/api/updateFiles',
data: {data: JSON.stringify({user_id: userID, updateDatas: updateDatas})},
dataType: 'json',
success: function (result){
if(!result.error && callback){
callback();
}
}
})
}
function set_file_table(target, poj_tenders, fileList, type){
let fileCounter = 1;
for(let i = 0, len = fileList.length; i < len; i++){
let fileId = type === fileType.unitPriceFile ? fileList[i].id : fileList[i].ID;
let usedObj = getUsedObj(poj_tenders, fileId, type);
let usedHtml = usedObj.usedCount > 0 ? ' ');
}
},
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) {
$(".tools-btn > a").not(".disabled").addClass("disabled");
switch(node.data.projType) {
case projectType.project:
$("#add-engineering-btn").removeClass("disabled");
$("#add-project-btn").removeClass("disabled");
$("#del-btn").removeClass("disabled");
break;
case projectType.folder:
if(!node.children || node.children.length === 0){
$("#del-btn").removeClass("disabled");
}
$("#add-folder-btn").removeClass("disabled");
$("#add-project-btn").removeClass("disabled");
break;
case projectType.engineering:
$("#add-tender-btn").removeClass("disabled");
$("#add-engineering-btn").removeClass("disabled");
$("#del-btn").removeClass("disabled");
break;
case projectType.tender:
$("#add-tender-btn").removeClass("disabled");
$("#move-to-btn").removeClass("disabled");
$("#copy-to-btn").removeClass("disabled");
$("#share-btn").removeClass("disabled");
$("#cooperate-btn").removeClass("disabled");
$("#del-btn").removeClass("disabled");
break;
}
$("#rename-btn").removeClass("disabled");
$('td:eq(0)', node.row).append($(''));
}
}
};
$(document).ready(function() {
init();
Tree = null;
$('#tab_pm_all').on('show.bs.tab', function () {
gcTree = null;
init();
});
// 侧滑数据
$(".poj-list").on('click', ".open-sidebar", function() {
setDataToSideBar();
$(".slide-sidebar").animate({width:"800"}).addClass("open");
});
//单价、费率文件删除确认
$('#fileDelConfirm').click(function () {
if(fileDelObj && fileDelObj.id){
let updateObj = Object.create(null);
updateObj.updateType = 'delete';
updateObj.updateData = Object.create(null);
if(fileDelObj.fileType === fileType.unitPriceFile){
updateObj.updateData.id = fileDelObj.id;
}
else if(fileDelObj.fileType === fileType.feeRateFile){
updateObj.updateData.ID = fileDelObj.id;
}
updateObj.fileType = fileDelObj.fileType;
console.log(updateObj);
a_updateFiles([updateObj], function () {
fileDelObj = null;
$('#fileDelCancel').click();
//refresh front?
});
}
});
// 新增建设项目点击
$('#add-project-btn').click(function () {
let selectedItem = Tree.selected();
try {
let selectedType = selectedItem !== null && selectedItem.data !== undefined ?
selectedItem.data.projType : projectType.folder;
if (selectedType !== projectType.folder && selectedType !== projectType.project) {
throw '建设项目只能添加到最外层或文件夹中';
}
$('#add-project-dialog').modal('show');
} catch (error) {
alert(error);
}
});
// 新增建设项目操作
$('#addProjOk').click(function () {
AddProject();
});
// 选择计价方式
$("input[name='valuation_type']").click(function() {
let type = $(this).val();
let targetData = type === 'bill' ? JSON.parse(billValuation) : JSON.parse(rationValuation);
let html = '';
for(let valuation of targetData) {
if (valuation === null) {
continue;
}
html += '';
}
$("#valuation").html(html);
});
// 新增单项项目点击
$("#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 && selectedType !== projectType.engineering) {
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 && selectedType !== projectType.tender) {
throw '单项项目只能添加到单项工程中';
}
$("#add-tender-dialog").modal("show");
} catch (error) {
alert(error);
}
});
// 新增单位工程弹层改变
$('#add-tender-dialog').on('show.bs.modal', function() {
// 当前选中的建设项目
let selectedItem = Tree.selected();
let projectInfo = null;
if (selectedItem.data.projType === projectType.tender) {
projectInfo = selectedItem !== null && selectedItem.parent !== undefined && selectedItem.parent.parent !== undefined ?
selectedItem.parent.parent : null;
} else {
projectInfo = selectedItem !== null && selectedItem.parent !== undefined ? selectedItem.parent : null;
}
if (projectInfo !== null) {
let parentID = projectInfo.data.ID;
// 获取当前的数据属性
getProperty(projectInfo.data);
}
// 获取单价文件数据
getUnitFile(projectInfo.data.ID, function (response) {
if (response.data.length <= 0) {
return false;
}
let unitFileHtml = '';
for(let tmp of response.data) {
unitFileHtml += '';
}
$("#unit-price").children("option:not(':first')").remove();
$("#unit-price").children("option").first().after(unitFileHtml);
});
// 获取费率文件数据
getFeeRateFile(projectInfo.data.ID, function (response) {
if (response.data.length <= 0) {
return false;
}
var first = $("#tender-fee-rate").children("option").first();
$("#tender-fee-rate").empty();
$("#tender-fee-rate").append(first);
for(let tmp of response.data) {
var option = $("';
if (engineeringList.length <= 0) {
return result;
}
let engineeringObject = {};
for(let tmp of engineering) {
engineeringObject[tmp.value] = tmp.name;
}
for(let tmp of engineeringList) {
if (engineeringObject[tmp.engineering] !== undefined) {
result += '';
}
}
return result;
}
/**
* 远程获取项目属性数据
*
* @param {Object} projectInfo
* @return {void}
*/
function getProperty(projectInfo) {
if (projectInfo.property === undefined) {
return;
}
projectProperty = projectInfo.property;
// 写入专业工程相关
let engineeringHtml = getEngineeringHtml(projectProperty.engineeringList);
$("#tender-engineering").html(engineeringHtml);
// 填入计价规则
let valuationHtml = '';
$("#tender-valuation").html(valuationHtml);
// 选中计价方式
$("input[name='tender_valuation_type']").attr('disabled', 'disabled').removeAttr('checked', 'checked');
$("input[name='tender_valuation_type'][value='"+ projectProperty.valuationType +"']")
.attr("checked", "checked").removeAttr('disabled', 'disabled');
}
/**
* 获取单价文件
*
* @param {Number} parentID
* @return {void}
*/
function getUnitFile(parentID, callback) {
parentID = parseInt(parentID);
if (isNaN(parentID) && parentID <= 0) {
return;
}
$.ajax({
url: '/pm/api/getUnitFile',
type: 'post',
data: {'data': JSON.stringify({"user_id": userID, "parentID": parentID})},
dataType: 'json',
error: function() {
alert('数据传输错误!');
},
beforeSend: function() {
},
success: function(response) {
if (response.error === 1) {
alert('获取失败!');
} else {
if(callback){
callback(response);
}
}
}
});
}
/**
* 获取费率文件
*
* @param {Number} parentID
* @return {void}
*/
function getFeeRateFile(parentID, callback) {
parentID = parseInt(parentID);
if (isNaN(parentID) && parentID <= 0) {
return;
}
$.ajax({
url: '/pm/api/getFeeRateFile',
type: 'post',
data: {'data': JSON.stringify({"user_id": userID, "parentID": parentID})},
dataType: 'json',
error: function() {
alert('数据传输错误!');
},
beforeSend: function() {
},
success: function(response) {
if (response.error === 1) {
alert('获取失败!');
} else {
if(callback){
callback(response);
}
}
}
});
}
/**
* 加载数据到侧边栏
*
* @return {void}
*/
function setDataToSideBar() {
// 获取当前点击的数据
let selectedItem = Tree.selected();
let name = selectedItem.data.name;
let target = selectedItem.data.projType === projectType.project ? '#summary-project' : '#summary-engineering';
$(".side-content .p-3").hide();
$(target).show();
$(target + '-name').html(name);
/*if (selectedItem.children.length <= 0) {
return;
}*/
if(selectedItem.children.length > 0){
// 建设项目相关
let counter = 1;
let html = '';
for(let tmp of selectedItem.children) {
html += '