/** * 项目管理相关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(''); } }, 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 += '' + ''+ counter +'' + ''+ counter +'' + ''+ tmp.data.name +'' + '' + '' + '' + '' + ''; } html += '' + ''+ (counter + 1) +'' + ' ' + '合计' + '' + '' + '' + '' + ''; $(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 + '
'; } } 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 ? '
' + usedObj.usedCount + '' : '' + usedObj.usedCount + ''; let hoverHtml = '

删除重命名

'; let renHtml = ''; let fileTypeStr = type === fileType.unitPriceFile ? '单价文件' : '费率文件'; let fileHtml = '' + fileCounter + '
' + fileList[i].name + fileTypeStr + hoverHtml + renHtml + usedHtml + ''; fileCounter++; let targetBody = type === fileType.unitPriceFile ? target + '-unit-price-table tbody' : target + '-fee-table tbody'; $(targetBody).append(fileHtml); let jqS = '#file_' + fileId; bindEvents_file_table(jqS, usedObj, targetBody, type); } } function getFileObj(jqS, type){ let rst = []; let trs = $('tr', jqS); for(let i = 0, len = trs.length; i < len; i++){ let td = $('td:eq(1)', trs[i])[0]; let dispName = td.childNodes[0].childNodes[0].textContent; let name = dispName.slice(0, dispName.length - 4); let attrId = $(td).attr('id'); let id = attrId.slice(5, attrId.length); if(type === fileType.unitPriceFile){ id = parseInt(id); } let obj = Object.create(null); obj.id = id; obj.name = name; rst.push(obj); } return rst; //let orgDispName = $(jqS + ' div:eq(0)')[0].childNodes[0].textContent; } function hasThisFileName(fileObjs, name){ for(let i = 0, len = fileObjs.length; i < len; i++){ if(fileObjs[i].name === name){ return true; } } return false; }