|
@@ -174,9 +174,12 @@ const gcTreeObj = {
|
|
|
{name: '工程列表', dataCode: 'name', width: 800, vAlign: 'center', hAlign: 'left'},
|
|
|
{name: '删除日期', dataCode: 'deleteDateTime', width: 170, vAlign: 'center', hAlign: 'left'},
|
|
|
{name: '创建日期', dataCode: 'createDateTime', width: 170, vAlign: 'center', hAlign: 'left'},
|
|
|
- {name: '恢复', dataCode: 'recovery', width: 170, vAlign: 'center', hAlign: 'left'},
|
|
|
- {name: '单价文件', dataCode: 'unitPriceFile', width: 170, vAlign: 'center', hAlign: 'left'},
|
|
|
- {name: '费率文件', dataCode: 'feeRateFile', width: 170, vAlign: 'center', hAlign: 'left'}
|
|
|
+ {name: '恢复', dataCode: 'recovery', width: 100, vAlign: 'center', hAlign: 'left'},
|
|
|
+ {name: '清除', dataCode: 'delete', width: 100, vAlign: 'center', hAlign: 'left'},
|
|
|
+ {name: '单价文件', dataCode: 'unitPriceFile', width: 100, vAlign: 'center', hAlign: 'left'},
|
|
|
+ {name: '单价文件-清除', dataCode: 'unitPriceFile_delete', width: 100, vAlign: 'center', hAlign: 'left'},
|
|
|
+ {name: '费率文件', dataCode: 'feeRateFile', width: 100, vAlign: 'center', hAlign: 'left'},
|
|
|
+ {name: '费率文件-清除', dataCode: 'feeRateFile_delete', width: 100, vAlign: 'center', hAlign: 'left'}
|
|
|
],
|
|
|
//选中行颜色
|
|
|
style: {
|
|
@@ -221,8 +224,15 @@ const gcTreeObj = {
|
|
|
sheet.setColumnCount(headers.length);
|
|
|
sheet.setRowHeight(0, 40, GC.Spread.Sheets.SheetArea.colHeader);
|
|
|
for(let i = 0, len = headers.length; i < len; i++){
|
|
|
- sheet.setValue(0, i, headers[i].name, GC.Spread.Sheets.SheetArea.colHeader);
|
|
|
sheet.setColumnWidth(i, headers[i].width, GC.Spread.Sheets.SheetArea.colHeader);
|
|
|
+ if(headers[i].dataCode === 'unitPriceFile' || headers[i].dataCode === 'feeRateFile'){
|
|
|
+ //合并列
|
|
|
+ sheet.addSpan(0, i, 1, 2, GC.Spread.Sheets.SheetArea.colHeader);
|
|
|
+ }
|
|
|
+ if(headers[i].dataCode === 'unitPriceFile_delete' || headers[i].dataCode === 'feeRateFile_delete'){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ sheet.setValue(0, i, headers[i].name, GC.Spread.Sheets.SheetArea.colHeader);
|
|
|
}
|
|
|
};
|
|
|
me.renderSheetFuc(sheet, fuc);
|
|
@@ -304,29 +314,49 @@ const gcTreeObj = {
|
|
|
me.initSelection(args.newSelections[0], args.oldSelections[0]);
|
|
|
},
|
|
|
//点击恢复列,弹出恢复项目窗口
|
|
|
- recoveryProj: function (node) {
|
|
|
+ oprProj: function (modalId, node) {
|
|
|
let tenderNodes = m_getTenders(node);
|
|
|
- $('#rePoj .modal-header').empty();
|
|
|
- $('p', '#rePoj .modal-body').remove();
|
|
|
- $('#rePoj .modal-header').html(v_getTitle(node));
|
|
|
- $('#rePoj .modal-body').html(v_getMoBody(node, tenderNodes));
|
|
|
- $('#rePoj').modal('show');
|
|
|
+ let type = modalId === '#rePoj' ? 'recovery' : 'delete';
|
|
|
+ $(`${modalId} .modal-header`).empty();
|
|
|
+ $('p', `${modalId} .modal-body`).remove();
|
|
|
+ $(`${modalId} .modal-header`).html(v_getTitle(type, node));
|
|
|
+ $(`${modalId} .modal-body`).html(v_getMoBody(type, node, tenderNodes));
|
|
|
+ $(`${modalId}`).modal('show');
|
|
|
},
|
|
|
//点击单价文件恢复,弹出恢复单价文件窗口
|
|
|
recoveryUnitPrc: function (node) {
|
|
|
let unitPriceFiles = node.data.unitPriceFiles;
|
|
|
+ let tenders = m_getTenders(node);
|
|
|
$('#reFile h5').text('恢复单价文件');
|
|
|
$('tr', '#reFile tbody').remove();
|
|
|
- $('#reFile tbody').html(v_getFiles(fileType.unitPriceFile, unitPriceFiles));
|
|
|
+ $('#reFile tbody').html(v_getFiles(fileType.unitPriceFile, unitPriceFiles, tenders, 'recovery'));
|
|
|
$('#reFile').modal('show');
|
|
|
},
|
|
|
recoveryFeeRate: function (node) {
|
|
|
let feeRateFiles = node.data.feeRateFiles;
|
|
|
+ let tenders = m_getTenders(node);
|
|
|
$('#reFile h5').text('恢复费率文件');
|
|
|
$('tr', '#reFile tbody').remove();
|
|
|
- $('#reFile tbody').html(v_getFiles(fileType.feeRateFile, feeRateFiles));
|
|
|
+ $('#reFile tbody').html(v_getFiles(fileType.feeRateFile, feeRateFiles, tenders, 'recovery'));
|
|
|
$('#reFile').modal('show');
|
|
|
},
|
|
|
+ //点击单价文件清除,弹出清除单价文件窗口
|
|
|
+ deleteUnitPrc: function (node) {
|
|
|
+ let unitPriceFiles = node.data.unitPriceFiles;
|
|
|
+ let tenders = m_getTenders(node);
|
|
|
+ $('#delFile h5').text('清除单价文件');
|
|
|
+ $('tr', '#delFile tbody').remove();
|
|
|
+ $('#delFile tbody').html(v_getFiles(fileType.unitPriceFile, unitPriceFiles, tenders, 'delete'));
|
|
|
+ $('#delFile').modal('show');
|
|
|
+ },
|
|
|
+ deleteFeeRate: function (node) {
|
|
|
+ let feeRateFiles = node.data.feeRateFiles;
|
|
|
+ let tenders = m_getTenders(node);
|
|
|
+ $('#delFile h5').text('清除费率文件');
|
|
|
+ $('tr', '#delFile tbody').remove();
|
|
|
+ $('#delFile tbody').html(v_getFiles(fileType.feeRateFile, feeRateFiles, tenders, 'delete'));
|
|
|
+ $('#delFile').modal('show');
|
|
|
+ },
|
|
|
getTreeNodeCell: function (tree) {
|
|
|
let indent = 20;
|
|
|
let levelIndent = -5;
|
|
@@ -517,20 +547,35 @@ const gcTreeObj = {
|
|
|
zoom = hitinfo.sheet.zoom();
|
|
|
let textLength = this.getAutoFitWidth(value, text, acStyle, zoom, {sheet: hitinfo.sheet, row: hitinfo.row, col: hitinfo.col, sheetArea: GC.Spread.Sheets.SheetArea.viewport});
|
|
|
if(hitinfo.x - hitinfo.cellRect.x > 0 && hitinfo.x - hitinfo.cellRect.x < textLength){
|
|
|
+ //恢复
|
|
|
if(dataCode === 'recovery'){
|
|
|
- gcTreeObj.recoveryProj(node);
|
|
|
+ gcTreeObj.oprProj('#rePoj', node);
|
|
|
+ }
|
|
|
+ //清除
|
|
|
+ else if(dataCode === 'delete'){
|
|
|
+ gcTreeObj.oprProj('#delPoj', node)
|
|
|
}
|
|
|
+ //恢复单价文件
|
|
|
else if(dataCode === 'unitPriceFile'){
|
|
|
gcTreeObj.recoveryUnitPrc(node);
|
|
|
}
|
|
|
+ //清除单价文件
|
|
|
+ else if(dataCode === 'unitPriceFile_delete'){
|
|
|
+ gcTreeObj.deleteUnitPrc(node);
|
|
|
+ }
|
|
|
+ //恢复费率文件
|
|
|
else if(dataCode === 'feeRateFile'){
|
|
|
gcTreeObj.recoveryFeeRate(node);
|
|
|
}
|
|
|
+ //清除费率文件
|
|
|
+ else if(dataCode === 'feeRateFile_delete'){
|
|
|
+ gcTreeObj.deleteFeeRate(node);
|
|
|
+ }
|
|
|
}
|
|
|
};
|
|
|
MyBaseCell.prototype.processMouseMove = function (hitInfo) {
|
|
|
let dataCode = gcTreeObj.setting.header[hitInfo.col]['dataCode'];
|
|
|
- if(dataCode === 'recovery' || dataCode === 'unitPriceFile' || dataCode === 'feeRateFile'){
|
|
|
+ if(dataCode === 'recovery' || dataCode === 'delete' || dataCode === 'unitPriceFile' || dataCode === 'unitPriceFile_delete' || dataCode === 'feeRateFile' || dataCode === 'feeRateFile_delete'){
|
|
|
let sheet = hitInfo.sheet;
|
|
|
let div = sheet.getParent().getHost();
|
|
|
let canvasId = div.id + "vp_vp";
|
|
@@ -569,16 +614,31 @@ const gcTreeObj = {
|
|
|
value = '恢复';
|
|
|
}
|
|
|
}
|
|
|
+ else if(dataCode === 'delete'){
|
|
|
+ if(deleted(node)){
|
|
|
+ value = '清除';
|
|
|
+ }
|
|
|
+ }
|
|
|
else if(dataCode === 'unitPriceFile'){
|
|
|
if(node.data.projType === projectType.project && node.data.unitPriceFiles !== undefined && node.data.unitPriceFiles.length > 0){
|
|
|
value = '恢复';
|
|
|
}
|
|
|
}
|
|
|
+ else if(dataCode === 'unitPriceFile_delete'){
|
|
|
+ if(node.data.projType === projectType.project && node.data.unitPriceFiles !== undefined && node.data.unitPriceFiles.length > 0){
|
|
|
+ value = '清除';
|
|
|
+ }
|
|
|
+ }
|
|
|
else if(dataCode === 'feeRateFile'){
|
|
|
if(node.data.projType === projectType.project && node.data.feeRateFiles !== undefined && node.data.feeRateFiles.length > 0){
|
|
|
value = '恢复';
|
|
|
}
|
|
|
}
|
|
|
+ else if(dataCode === 'feeRateFile_delete'){
|
|
|
+ if(node.data.projType === projectType.project && node.data.feeRateFiles !== undefined && node.data.feeRateFiles.length > 0){
|
|
|
+ value = '清除';
|
|
|
+ }
|
|
|
+ }
|
|
|
else {
|
|
|
value = node.data[dataCode] ? node.data[dataCode] : '';
|
|
|
}
|
|
@@ -644,7 +704,9 @@ $(document).ready(function () {
|
|
|
projTreeObj.tree = null;
|
|
|
});
|
|
|
e_recFiles($('#reFileBtn'));
|
|
|
+ e_delFiles($('#delFileBtn'));
|
|
|
e_recProj($('#rePojBtn'));
|
|
|
+ e_delProj($('#delPojBtn'));
|
|
|
});
|
|
|
|
|
|
function gc_init(){
|
|
@@ -664,9 +726,9 @@ function gc_init(){
|
|
|
}
|
|
|
|
|
|
//项目恢复模态框标题
|
|
|
-function v_getTitle(node){
|
|
|
+function v_getTitle(type, node){
|
|
|
let html = '';
|
|
|
- html += '<h5 class="modal-title">恢复 ';
|
|
|
+ html += type === 'recovery' ? '<h5 class="modal-title">恢复 ' : '<h5 class="modal-title">清除 ';
|
|
|
if(node.data.projType === projectType.project){
|
|
|
html += '<i class="fa fa-cubes"></i>建设项目</h5>';
|
|
|
}
|
|
@@ -681,48 +743,73 @@ function v_getTitle(node){
|
|
|
}
|
|
|
|
|
|
//项目恢复模态框主体
|
|
|
-function v_getMoBody(oprNode, nodes){
|
|
|
+function v_getMoBody(type, oprNode, nodes){
|
|
|
let html = '';
|
|
|
- if(oprNode.data.projType === projectType.tender){
|
|
|
- decDate = '(' + new Date().Format('MM-dd hh:mm:ss') + '恢复)';
|
|
|
- let recName = oprNode.data.name + decDate;
|
|
|
- html += '<p>恢复后将重命名为 <b>' + recName + '</b></p>';
|
|
|
- }
|
|
|
- else {
|
|
|
- if(oprNode.data.projType === projectType.project){
|
|
|
- html += '<p><i class="fa fa-cubes"></i> ' + oprNode.data.name + '下的单位工程都将恢复都将恢复,恢复后将重命名为</p>';
|
|
|
- }
|
|
|
- else if(oprNode.data.projType === projectType.engineering){
|
|
|
- html += '<p><i class="fa fa-cube"></i> ' + oprNode.data.name + '下的单位工程都将恢复都将恢复,恢复后将重命名为</p>';
|
|
|
+ if(type === 'recovery'){
|
|
|
+ if(oprNode.data.projType === projectType.tender){
|
|
|
+ decDate = '(' + new Date().Format('MM-dd hh:mm:ss') + '恢复)';
|
|
|
+ let recName = oprNode.data.name + decDate;
|
|
|
+ html += '<p>恢复后将重命名为 <b>' + recName + '</b></p>';
|
|
|
}
|
|
|
- html += ('<p>');
|
|
|
- for(let i = 0, len = nodes.length; i < len; i++){
|
|
|
- let recName = nodes[i].data.name + '(' + new Date().Format('MM-dd hh:mm:ss') +'恢复)';
|
|
|
- html += '<b>' + recName + '</b>、';
|
|
|
+ else {
|
|
|
+ if(oprNode.data.projType === projectType.project){
|
|
|
+ html += '<p><i class="fa fa-cubes"></i> ' + oprNode.data.name + '下的单位工程都将恢复都将恢复,恢复后将重命名为</p>';
|
|
|
+ }
|
|
|
+ else if(oprNode.data.projType === projectType.engineering){
|
|
|
+ html += '<p><i class="fa fa-cube"></i> ' + oprNode.data.name + '下的单位工程都将恢复都将恢复,恢复后将重命名为</p>';
|
|
|
+ }
|
|
|
+ html += ('<p>');
|
|
|
+ for(let i = 0, len = nodes.length; i < len; i++){
|
|
|
+ let recName = nodes[i].data.name + '(' + new Date().Format('MM-dd hh:mm:ss') +'恢复)';
|
|
|
+ html += '<b>' + recName + '</b>、';
|
|
|
+ }
|
|
|
+ html = html.slice(0, html.length - 1);
|
|
|
+ html += ('</p>');
|
|
|
}
|
|
|
- html = html.slice(0, html.length - 1);
|
|
|
- html += ('</p>');
|
|
|
- }
|
|
|
|
|
|
- html += ('<p>点“确定”按钮,确认从回收站中恢复</p>');
|
|
|
+ html += ('<p>点“确定”按钮,确认从回收站中恢复</p>');
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ html += ('<p>点“确定”按钮,确认清除数据</p>');
|
|
|
+ }
|
|
|
return html;
|
|
|
}
|
|
|
|
|
|
//单价、费率文件恢复弹出框数据
|
|
|
-function v_getFiles(type, files){
|
|
|
+function v_getFiles(type, files, tenders, opr = null){
|
|
|
let html = '';
|
|
|
+ function hasTheFile(tenders, fileId, fileType){
|
|
|
+ for(let tender of tenders){
|
|
|
+ let fileAttr = fileType === 'UnitPriceFile' ? 'unitPriceFile' : 'feeFile';
|
|
|
+ if(tender.data.property[fileAttr]['id'] == fileId){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
for(let i = 0, len = files.length; i < len; i ++){
|
|
|
let recName = type === fileType.unitPriceFile ? files[i].name + '单价文件' : files[i].name + '费率文件';
|
|
|
let fileId = type === fileType.unitPriceFile ? files[i].id : files[i].ID;
|
|
|
let recTimeA = formatDate(new Date(files[i].deleteInfo.deleteDateTime), 'yyyy-MM-dd');
|
|
|
let recTimeB = formatDate(new Date(files[i].deleteInfo.deleteDateTime), 'HH:mm:ss');
|
|
|
- html += '<tr><td>'+ recName +'</td><td>' + recTimeA + '<br>' + recTimeB + '</td><td><input name="fileItems" type="checkbox" fileId = "' + fileId + '" fileType = "' + type + '"></td></tr>';
|
|
|
+ if(opr && opr === 'delete'){
|
|
|
+ //还被引用,不可删除
|
|
|
+ if(hasTheFile(tenders, fileId, type)){
|
|
|
+ html += '<tr><td>'+ recName +'</td><td>' + recTimeA + '<br>' + recTimeB + '</td><td><input disabled name="fileItems" type="checkbox" fileId = "' + fileId + '" fileType = "' + type + '"></td></tr>';
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ html += '<tr><td>'+ recName +'</td><td>' + recTimeA + '<br>' + recTimeB + '</td><td><input name="fileItems" type="checkbox" fileId = "' + fileId + '" fileType = "' + type + '"></td></tr>';
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ html += '<tr><td>'+ recName +'</td><td>' + recTimeA + '<br>' + recTimeB + '</td><td><input name="fileItems" type="checkbox" fileId = "' + fileId + '" fileType = "' + type + '"></td></tr>';
|
|
|
+ }
|
|
|
}
|
|
|
return html;
|
|
|
}
|
|
|
|
|
|
-//恢复单价、费率文件后前端显示变化
|
|
|
-function v_recFiles(project, fileIds, type){
|
|
|
+//恢复或清除单价、费率文件后前端显示变化
|
|
|
+function v_refreshFiles(project, fileIds, type){
|
|
|
let projFiles;
|
|
|
if(type === fileType.unitPriceFile){
|
|
|
projFiles = project.data.unitPriceFiles;
|
|
@@ -767,14 +854,16 @@ function v_removeNode(node){
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-function v_refreshNode(node){
|
|
|
- if(deleted(node)){
|
|
|
- delete node.data.deleteInfo;
|
|
|
+function v_refreshNode(node, recovery = true){
|
|
|
+ if(recovery){
|
|
|
+ if(deleted(node)){
|
|
|
+ delete node.data.deleteInfo;
|
|
|
+ }
|
|
|
}
|
|
|
gcTreeObj.refreshNodeData(node);
|
|
|
let parent = node.parent || null;
|
|
|
if(parent && parent.data !== undefined){
|
|
|
- v_refreshNode(parent);
|
|
|
+ v_refreshNode(parent, recovery);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -930,6 +1019,49 @@ function m_getRecDatas(oprNode){
|
|
|
return rst;
|
|
|
}
|
|
|
|
|
|
+//获取清除的额数据
|
|
|
+function m_getDelDatas(oprNode){
|
|
|
+ let rst = [];
|
|
|
+ if(!oprNode){
|
|
|
+ return rst;
|
|
|
+ }
|
|
|
+ function getChild(node){
|
|
|
+ rst.push({updateType: 'Project', ID: node.data.ID});
|
|
|
+ if(node.children.length > 0){
|
|
|
+ for(let child of node.children){
|
|
|
+ getChild(child);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ getChild(oprNode);
|
|
|
+ //父节点只有一个单位工程,则清除此单位工程的时候,父节点也清除,(建设项目单价、费率文件存在时不清除)
|
|
|
+ if(oprNode.data.projType === projectType.tender){
|
|
|
+ let eng = oprNode.parent, proj = null;
|
|
|
+ if(eng && deleted(eng)){
|
|
|
+ proj = eng.parent;
|
|
|
+ rst.push({updateType: 'Project', ID: eng.data.ID});
|
|
|
+ }
|
|
|
+ if(proj && deleted(proj) && fileEmpty(proj)){
|
|
|
+ rst.push({updateType: 'Project', ID: proj.data.ID})
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(oprNode.data.projType === projectType.engineering){
|
|
|
+ let proj = oprNode.parent;
|
|
|
+ if(proj && deleted(proj) && fileEmpty(proj)){
|
|
|
+ rst.push({updateType: 'Project', ID: proj.data.ID});
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else if(oprNode.data.projType === projectType.project){
|
|
|
+ for(let uf of oprNode.data.unitPriceFiles){
|
|
|
+ rst.push({updateType: fileType.unitPriceFile, ID: uf.id});
|
|
|
+ }
|
|
|
+ for(let ff of oprNode.data.feeRateFiles){
|
|
|
+ rst.push({updateType: fileType.feeRateFile, ID: ff.ID});
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+}
|
|
|
+
|
|
|
//获得勾选的单价、费率文件的id
|
|
|
function m_getFilesObjs(nodes){
|
|
|
let rst = [];
|
|
@@ -989,7 +1121,7 @@ function e_recFiles(btn){
|
|
|
function caller(){
|
|
|
//front
|
|
|
if(recIds.length > 0){
|
|
|
- v_recFiles(selected, recIds, type);
|
|
|
+ v_refreshFiles(selected, recIds, type);
|
|
|
if(deleted(selected)){
|
|
|
delete selected.data.deleteInfo;
|
|
|
}
|
|
@@ -1004,6 +1136,39 @@ function e_recFiles(btn){
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+//点击单价、费率文件的清除操作(确认)
|
|
|
+function e_delFiles(btn){
|
|
|
+ btn.bind('click', function () {
|
|
|
+ let selected = gcTreeObj.tree.selected;//project
|
|
|
+ let delObjs = m_getFilesObjs($('[name = "fileItems"]:checked'));
|
|
|
+ let type = $('[name = "fileItems"]:checked').attr('fileType');
|
|
|
+ let delDatas = [];
|
|
|
+ let delIds = [];
|
|
|
+ for(let delObj of delObjs){
|
|
|
+ delIds.push(delObj.id);
|
|
|
+ delDatas.push({updateType: type, ID: delObj.id});
|
|
|
+ }
|
|
|
+ //此操作造成了建设项目的文件为空,则清除建设项目
|
|
|
+ if(fileWillEmpty(selected, delIds, type)){
|
|
|
+ delDatas.push({updateType: 'Project', ID: selected.data.ID});
|
|
|
+ }
|
|
|
+ if(delDatas.length > 0){
|
|
|
+ //backend
|
|
|
+ a_delGC(delDatas, caller);
|
|
|
+ //front
|
|
|
+ function caller(){
|
|
|
+ v_refreshFiles(selected, delIds, type);
|
|
|
+ if(fileEmpty(selected) && selected.children.length === 0){
|
|
|
+ gcTreeObj.remove(selected);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ gcTreeObj.refreshNodeData(selected);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
//点击项目下的恢复操作(确认)
|
|
|
function e_recProj(btn){
|
|
|
btn.bind('click', function () {
|
|
@@ -1018,14 +1183,30 @@ function e_recProj(btn){
|
|
|
let project = m_project(selected);
|
|
|
if(project){
|
|
|
if(fileObj[fileType.unitPriceFile].length > 0){
|
|
|
- v_recFiles(project, fileObj[fileType.unitPriceFile], fileType.unitPriceFile);
|
|
|
+ v_refreshFiles(project, fileObj[fileType.unitPriceFile], fileType.unitPriceFile);
|
|
|
}
|
|
|
if(fileObj[fileType.feeRateFile].length > 0){
|
|
|
- v_recFiles(project, fileObj[fileType.feeRateFile], fileType.feeRateFile);
|
|
|
+ v_refreshFiles(project, fileObj[fileType.feeRateFile], fileType.feeRateFile);
|
|
|
}
|
|
|
}
|
|
|
v_removeNode(selected);
|
|
|
- v_refreshNode(selected);
|
|
|
+ v_refreshNode(selected, true);
|
|
|
+ }
|
|
|
+ });
|
|
|
+}
|
|
|
+
|
|
|
+function e_delProj(btn){
|
|
|
+ btn.bind('click', function () {
|
|
|
+ let selected = gcTreeObj.tree.selected;
|
|
|
+ //backend
|
|
|
+ let delDatas = m_getDelDatas(selected);
|
|
|
+ if(delDatas.length > 0){
|
|
|
+ a_delGC(delDatas, caller);
|
|
|
+ }
|
|
|
+ //front
|
|
|
+ function caller() {
|
|
|
+ v_removeNode(selected);
|
|
|
+ v_refreshNode(selected, false);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
@@ -1046,6 +1227,14 @@ function a_rec(nodes, callback){
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+function a_delGC(delDatas, callback){
|
|
|
+ CommonAjax.post('/pm/api/delGC', {user_id: userID, delDatas: delDatas}, function(rstData){
|
|
|
+ if(callback){
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
//去除重名,回收站不处理重名,只保证恢复到项目管理中不出现重名
|
|
|
function deWeightName(datas){
|
|
|
let rst = [];
|
|
@@ -1114,6 +1303,26 @@ function fIsExist(files, id, type){
|
|
|
return isExist;
|
|
|
}
|
|
|
|
|
|
+//删除的文件是否会导致建设项目不再存有文件
|
|
|
+function fileWillEmpty(proj, delIds, type){
|
|
|
+ let ufs = proj.data.unitPriceFiles,
|
|
|
+ ffs = proj.data.feeRateFiles;
|
|
|
+ let theFiles = type === fileType.unitPriceFile ? ufs : ffs;
|
|
|
+ otherFiles = type === fileType.unitPriceFile ? ffs : ufs;
|
|
|
+ let uniqIds = Array.from(new Set(delIds));
|
|
|
+ if(theFiles.length === delIds.length){
|
|
|
+ for(let id of uniqIds){
|
|
|
+ if(!fIsExist(theFiles, id, type)){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(otherFiles.length === 0){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
function getRecFileObj(files){
|
|
|
let rst = Object.create(null);
|
|
|
let rst_UF = [], rst_FF = [];
|