|
@@ -1,55 +1,10 @@
|
|
|
/**
|
|
|
* Created by Zhong on 2017/10/30.
|
|
|
*/
|
|
|
-//测试数据
|
|
|
-let deleteInfo = {deleteBy: 76075, deleteDateTime: '2017-10-31', deleted: true};
|
|
|
-let temp_gc_datas = [
|
|
|
- {ID: 1, ParentID: -1, NextSiblingID: 7, name: 'testTreeA', projType: 'Project', userID: 76075, createDateTime: '2017-10-30', deleteInfo: deleteInfo,
|
|
|
- unitPriceFiles: [{name: 'uA', id: 100, root_project_id: 1, user_id: 76075, deleteInfo: deleteInfo}, {name: 'uB', id: 101, root_project_id: 1, user_id: 76075, deleteInfo: deleteInfo}],
|
|
|
- feeRateFiles: [{name: 'fA', ID: 'fr-1', rootProjectID: 1, userID: 76075, deleteInfo: deleteInfo}, {name: 'fB', ID: 'fr-2', rootProjectID: 1, userID: 76075, deleteInfo: deleteInfo}]},
|
|
|
- {ID: 2, ParentID: 1, NextSiblingID: 3, name: 'enA', projType: 'Engineering', userID: 76075, createDateTime: '2017-10-30', deleteInfo: deleteInfo},
|
|
|
- {ID: 3, ParentID: 1, NextSiblingID: -1, name: 'enB', projType: 'Engineering', userID: 76075, createDateTime: '2017-10-30', deleteInfo: deleteInfo},
|
|
|
- {ID: 4, ParentID: 3, NextSiblingID: 5, name: 'tenderA', projType: 'Tender', userID: 76075, createDateTime: '2017-10-30', deleteInfo: deleteInfo, property: {feeFile: {id: 'fr-1', name: 'fA'}, unitPriceFile: {id: 100, name: 'uA'}}},
|
|
|
- {ID: 5, ParentID: 3, NextSiblingID: 6, name: 'tenderB', projType: 'Tender', userID: 76075, createDateTime: '2017-10-30', deleteInfo: deleteInfo, property: {feeFile: {id: 'unD-1', name: 'unDF'}, unitPriceFile: {id: 100, name: 'uA'}}},
|
|
|
- {ID: 6, ParentID: 3, NextSiblingID: -1, name: 'tenderC', projType: 'Tender', userID: 76075, createDateTime: '2017-10-30', deleteInfo: deleteInfo, property: {feeFile: {id: 'fr-2', name: 'fB'}, unitPriceFile: {id: 101, name: 'uB'}}},
|
|
|
- {ID: 7, ParentID: -1, NextSiblingID: 10, name: 'testTreeB', projType: 'Project', userID: 76075, createDateTime: '2017-10-30', deleteInfo: deleteInfo,
|
|
|
- unitPriceFiles: [{name: 'uC', id: 102, root_project_id: 7, user_id: 76075, deleteInfo: deleteInfo}, {name: 'uD', id: 103, root_project_id: 7, user_id: 76075, deleteInfo: deleteInfo}],
|
|
|
- feeRateFiles: [{name: 'fC', ID: 'fr-3', rootProjectID: 7, userID: 76075, deleteInfo: deleteInfo}]},
|
|
|
- {ID: 8, ParentID: 7, NextSiblingID: -1, name: 'enC', projType: 'Engineering', userID: 76075, createDateTime: '2017-10-30', deleteInfo: deleteInfo},
|
|
|
- {ID: 9, ParentID: 8, NextSiblingID: -1, name: 'tenderD', projType: 'Tender', userID: 76075, createDateTime: '2017-10-30', deleteInfo: deleteInfo, property: {feeFile: {id: 'fr-3', name: 'fC'}, unitPriceFile: {id: 102, name: 'uC'}}},
|
|
|
- {ID: 10, ParentID: -1, NextSiblingID: -1, name: 'testTreeC', projType: 'Project', userID: 76075, createDateTime: '2017-10-30', unitPriceFiles: [], feeRateFiles: [{name: 'fC', ID: 'fr-3', rootProjectID: 7, userID: 76075, deleteInfo: deleteInfo}]},
|
|
|
- {ID: 11, ParentID: 10, NextSiblingID: -1, name: 'enD', projType: 'Engineering', userID: 76075, createDateTime: '2017-10-30'},
|
|
|
- {ID: 12, ParentID: 11, NextSiblingID: -1, name: 'tenderE', projType: 'Tender', userID: 76075, createDateTime: '2017-10-30', deleteInfo: deleteInfo, property: {feeFile: {id: 'fr-3', name: 'fC'}, unitPriceFile: {id: 103, name: 'uD'}}},
|
|
|
- {ID: 13, ParentID: 2, NextSiblingID: 14, name: 'tenderF', projType: 'Tender', userID: 76075, createDateTime: '2017-10-30', deleteInfo: deleteInfo, property: {feeFile: {id: 'unD-2', name: 'unDF2'}, unitPriceFile: {id: 102, name: 'uC'}}},
|
|
|
- {ID: 14, ParentID: 2, NextSiblingID: 15, name: 'tenderG', projType: 'Tender', userID: 76075, createDateTime: '2017-10-30', deleteInfo: deleteInfo, property: {feeFile: {id: 'fr-3', name: 'fC'}, unitPriceFile: {id: 102, name: 'uC'}}},
|
|
|
- {ID: 15, ParentID: 2, NextSiblingID: -1, name: 'tenderH', projType: 'Tender', userID: 76075, createDateTime: '2017-10-30', deleteInfo: deleteInfo, property: {feeFile: {id: 'qwqw', name: 'qweq'}, unitPriceFile: {id: 300, name: 'u30'}}}
|
|
|
-
|
|
|
-];
|
|
|
-
|
|
|
-/*function getTestDatas(){
|
|
|
- let rst = [];
|
|
|
- for(let i = 0; i < 1000; i ++){
|
|
|
- let nid = i + 1 < 1000 ? i + 1 : -1;
|
|
|
- let obj = {ID: i, ParentID: -1, NextSiblingID: nid, name : 'test' + i, projType: 'Project', userID: 76075, createDateTime: '2017-11-3', deleteInfo: deleteInfo,
|
|
|
- unitPriceFiles: [{name: 'up' + i, id: i + 10000, deleteInfo: deleteInfo}], feeRateFiles: [{name: 'ff' + i, id: 'fr-' + i, deleteInfo: deleteInfo}]};
|
|
|
- rst.push(obj);
|
|
|
- }
|
|
|
- return rst;
|
|
|
-}*/
|
|
|
let gcTree = null;
|
|
|
let decDate = null;//恢复后的名称后缀(时间+恢复)
|
|
|
-/*let projectType = {
|
|
|
- folder: 'Folder',
|
|
|
- tender: 'Tender',
|
|
|
- project: 'Project',
|
|
|
- engineering: 'Engineering'
|
|
|
-};*/
|
|
|
-let fileType = {
|
|
|
- unitPriceFile: 'UnitPriceFile',
|
|
|
- feeRateFile: 'FeeRateFile'
|
|
|
-};
|
|
|
//恢复路径t = tender, e = engineering, p = project
|
|
|
-let recPath = {t: 'T', t_e: 'T_E', t_e_p: 'T_E_P', e: 'E', e_p: 'E_P', p: 'P'};
|
|
|
+const recPath = {t: 'T', t_e: 'T_E', t_e_p: 'T_E_P', e: 'E', e_p: 'E_P', p: 'P'};
|
|
|
let gcTreeSetting = {
|
|
|
tree: {
|
|
|
id: 'ID',
|
|
@@ -103,9 +58,13 @@ let gcTreeSetting = {
|
|
|
event: {
|
|
|
getText: function (html, node, text) {
|
|
|
if (node.data.projType === projectType.tender) {
|
|
|
- html.push(deleted(node) ?
|
|
|
- node.data.deleteInfo.deleteDateTime : '');
|
|
|
- // html.push(text ? new Date(text).Format('yyyy-MM-dd') : '');
|
|
|
+ if(deleted(node)){
|
|
|
+ let localDateTime = new Date(node.data.deleteInfo.deleteDateTime).toLocaleDateString();
|
|
|
+ html.push(new Date(localDateTime).Format('yyyy-MM-dd'));
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ html.push('');
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -117,7 +76,13 @@ let gcTreeSetting = {
|
|
|
event: {
|
|
|
getText: function (html, node, text) {
|
|
|
if (node.data.projType === projectType.tender) {
|
|
|
- html.push(text ? text : '');
|
|
|
+ if(deleted(node)){
|
|
|
+ let localDateTime = new Date(text).toLocaleDateString();
|
|
|
+ html.push(new Date(localDateTime).Format('yyyy-MM-dd'));
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ html.push('');
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -148,11 +113,6 @@ let gcTreeSetting = {
|
|
|
$('p', '#rePoj .modal-body').remove();
|
|
|
$('#rePoj .modal-header').html(v_getTitle(node));
|
|
|
$('#rePoj .modal-body').html(v_getMoBody(node, tenderNodes));
|
|
|
- console.log(node);
|
|
|
- console.log(node.preSibling());
|
|
|
- //test 获取更新的数据
|
|
|
- /*let updateDatas = m_getRecDatas(node);
|
|
|
- console.log(updateDatas);*/
|
|
|
});
|
|
|
}
|
|
|
}
|
|
@@ -202,6 +162,7 @@ let gcTreeSetting = {
|
|
|
|
|
|
$(document).ready(function () {
|
|
|
$('#tab_pm_gc').on('show.bs.tab', function () {
|
|
|
+ $('#gc_waiting').show();
|
|
|
gc_init();
|
|
|
Tree = null;
|
|
|
});
|
|
@@ -213,9 +174,12 @@ function gc_init(){
|
|
|
let table = $('#gcTree');
|
|
|
$('thead', table).remove();
|
|
|
$('tbody', table).remove();
|
|
|
- m_buildVirtualTree(temp_gc_datas);
|
|
|
- gcTree = $.fn.treeTable.init(table, gcTreeSetting, temp_gc_datas);
|
|
|
- //gcTree = $.fn.treeTable.init(table, gcTreeSetting, getTestDatas());
|
|
|
+ a_getGC(function (datas) {
|
|
|
+ m_buildVirtualTree(datas);
|
|
|
+ let normalDatas = m_VTreeToDatas(datas);
|
|
|
+ gcTree = $.fn.treeTable.init(table, gcTreeSetting, normalDatas);
|
|
|
+ $('#gc_waiting').hide();
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
//项目恢复模态框标题
|
|
@@ -294,6 +258,7 @@ function v_recFiles(project, fileIds, type){
|
|
|
let id = projFiles[i].id || projFiles[i].ID || null;
|
|
|
if(id && id === fileIds[j]){
|
|
|
isExist = true;
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
if(!isExist){
|
|
@@ -313,7 +278,12 @@ function v_removeNode(node){
|
|
|
gcTree.removeNode(node);
|
|
|
let parent = node.parent || null;
|
|
|
if(parent && parent.children.length === 0 && parent.data !== undefined){
|
|
|
- v_removeNode(parent);
|
|
|
+ if(parent.data.projType === projectType.project && fileEmpty(parent)){
|
|
|
+ v_removeNode(parent);
|
|
|
+ }
|
|
|
+ else if(parent.data.projType !== projectType.project){
|
|
|
+ v_removeNode(parent);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -331,6 +301,9 @@ function v_refreshNode(node){
|
|
|
//将获取的回收站中的数据建虚拟树
|
|
|
function m_buildVirtualTree(datas){
|
|
|
for(let i = 0, len = datas.length; i < len; i++){
|
|
|
+ if(datas[i].projType === projectType.project){
|
|
|
+ datas[i].ParentID = -1;
|
|
|
+ }
|
|
|
let children = datas[i].children || null;
|
|
|
if(children){
|
|
|
m_buildVirtualTree(children);
|
|
@@ -345,6 +318,25 @@ function m_buildVirtualTree(datas){
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+function m_VTreeToDatas(datas){
|
|
|
+ let rst = [];
|
|
|
+ let projs = datas;
|
|
|
+ rst = rst.concat(projs);
|
|
|
+ for(let i = 0, len = projs.length; i < len; i++){
|
|
|
+ let p_engs = projs[i].children || null;
|
|
|
+ if(p_engs){
|
|
|
+ rst = rst.concat(p_engs);
|
|
|
+ for(let j = 0, jLen = p_engs.length; j < jLen; j ++){
|
|
|
+ let e_tenders = p_engs[j].children || null;
|
|
|
+ if(e_tenders){
|
|
|
+ rst = rst.concat(e_tenders);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+}
|
|
|
+
|
|
|
//获得当前节点的tenders数据,模态提示框用
|
|
|
function m_getTenders(node){
|
|
|
if(node.data.projType === projectType.tender) return [node];
|
|
@@ -412,6 +404,7 @@ function m_getRecDatas(oprNode){
|
|
|
for(let i = 0, len = tenders.length; i < len; i++){
|
|
|
rstProj = rstProj.concat(getUpdateDatas(projectType.tender, tenders[i], true, false));
|
|
|
}
|
|
|
+ rstProj = deWeightName(rstProj);
|
|
|
//恢复单价、费率文件
|
|
|
rstFile = rstFile.concat(getUpdateFiles(tenders, project));
|
|
|
}
|
|
@@ -427,42 +420,54 @@ function m_getRecDatas(oprNode){
|
|
|
path = recPath.p;
|
|
|
let engineerings = oprNode.children;
|
|
|
if(engineerings.length > 0){
|
|
|
- let allTenders = [];
|
|
|
+ let allTenders = [], rstEngs = [];
|
|
|
for(let i = 0, len = engineerings.length; i < len; i++){
|
|
|
//恢复单项工程
|
|
|
- rstProj = rstProj.concat(getUpdateDatas(projectType.engineering, engineerings[i], false, false));
|
|
|
+ rstEngs = rstEngs.concat(getUpdateDatas(projectType.engineering, engineerings[i], false, false));
|
|
|
let tenders = engineerings[i].children;
|
|
|
allTenders = allTenders.concat(tenders);
|
|
|
+ let rstTends = [];
|
|
|
for(let j = 0, jLen = tenders.length; j < jLen; j++){
|
|
|
//恢复单位工程
|
|
|
- rstProj = rstProj.concat(getUpdateDatas(projectType.tender, tenders[j], false, false));
|
|
|
+ rstTends = rstTends.concat(getUpdateDatas(projectType.tender, tenders[j], false, false));
|
|
|
}
|
|
|
+ //去除重名
|
|
|
+ rstTends = deWeightName(rstTends);
|
|
|
+ rstProj = rstProj.concat(rstTends);
|
|
|
}
|
|
|
+ //去除重名
|
|
|
+ rstEngs = deWeightName(rstEngs);
|
|
|
+ rstProj = rstProj.concat(rstEngs);
|
|
|
//恢复单价、费率文件
|
|
|
rstFile = rstFile.concat(getUpdateFiles(allTenders, oprNode));
|
|
|
+
|
|
|
}
|
|
|
//恢复建设项目
|
|
|
rstProj = rstProj.concat(getUpdateDatas(projectType.project, oprNode, false, false));
|
|
|
}
|
|
|
- console.log(path);
|
|
|
rst.proj = rstProj;
|
|
|
rst.file = rstFile;
|
|
|
return rst;
|
|
|
}
|
|
|
|
|
|
//获得勾选的单价、费率文件的id
|
|
|
-function m_getFilesIds(nodes){
|
|
|
- let rstSet = new Set();
|
|
|
+function m_getFilesObjs(nodes){
|
|
|
+ let rst = [];
|
|
|
for(let i = 0, len = nodes.length; i < len; i++){
|
|
|
let fileId = $(nodes[i]).attr('fileId') || null;
|
|
|
if(fileId){
|
|
|
+ let dispName = $('td:eq(0)', $(nodes[i])[0].parentNode.parentNode)[0].textContent;
|
|
|
+ let name = dispName.slice(0, dispName.length - 4);
|
|
|
if($(nodes[i]).attr('fileType') === fileType.unitPriceFile){
|
|
|
fileId = parseInt(fileId);
|
|
|
}
|
|
|
- rstSet.add(fileId);
|
|
|
+ let obj = Object.create(null);
|
|
|
+ obj.id = fileId;
|
|
|
+ obj.name = name;
|
|
|
+ rst.push(obj);
|
|
|
}
|
|
|
}
|
|
|
- return Array.from(rstSet);
|
|
|
+ return rst;
|
|
|
}
|
|
|
|
|
|
function m_project(node){
|
|
@@ -481,21 +486,40 @@ function m_project(node){
|
|
|
//点击单价文件、费率文件下的恢复操作(确认)
|
|
|
function e_recFiles(btn){
|
|
|
btn.bind('click', function () {
|
|
|
- let recIds = m_getFilesIds($('[name = "fileItems"]:checked'));
|
|
|
- let fileType = $('[name = "fileItems"]:checked').attr('fileType');
|
|
|
+ decDate = '(' + new Date().Format('MM-dd hh:mm:ss') + '恢复)';
|
|
|
+ let recObjs = m_getFilesObjs($('[name = "fileItems"]:checked'));
|
|
|
+ let recIds = [];
|
|
|
+ for(let i of recObjs){
|
|
|
+ recIds.push(i.id);
|
|
|
+ }
|
|
|
+ let type = $('[name = "fileItems"]:checked').attr('fileType');
|
|
|
let selected = gcTree.selected();
|
|
|
//backend
|
|
|
let updateDatas = [];
|
|
|
- for(let i = 0, len = recIds.length; i < len; i++){
|
|
|
- updateDatas.push(getUpdateObj(fileType, {id: recIds[i]}, {deleteInfo: null}));
|
|
|
- }
|
|
|
- //front
|
|
|
- if(recIds.length > 0){
|
|
|
- v_recFiles(selected, recIds, fileType);
|
|
|
- if(deleted(selected)){
|
|
|
- delete selected.data.deleteInfo;
|
|
|
+ for(let i = 0, len = recObjs.length; i < len; i++){
|
|
|
+ let findData = type === fileType.unitPriceFile ? {id: recObjs[i].id} : {ID: recObjs[i].id};
|
|
|
+ updateDatas.push(getUpdateObj(type, findData, {deleteInfo: null, name: delPostFix(recObjs[i].name) + decDate}));
|
|
|
+ }
|
|
|
+ //恢复建设项目
|
|
|
+ if(updateDatas.length > 0 && deleted(selected)){
|
|
|
+ updateDatas.push(getUpdateObj(projectType.project, {ID: selected.data.ID}, {deleteInfo: null, name: delPostFix(selected.data.name) + decDate}));
|
|
|
+ }
|
|
|
+ updateDatas = deWeightName(updateDatas);
|
|
|
+ a_rec(updateDatas, caller);
|
|
|
+ function caller(){
|
|
|
+ //front
|
|
|
+ if(recIds.length > 0){
|
|
|
+ v_recFiles(selected, recIds, type);
|
|
|
+ if(deleted(selected)){
|
|
|
+ delete selected.data.deleteInfo;
|
|
|
+ }
|
|
|
+ if(fileEmpty(selected) && selected.children.length === 0){
|
|
|
+ gcTree.removeNode(selected);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ gcTree.refreshNodesDom([selected]);
|
|
|
+ }
|
|
|
}
|
|
|
- gcTree.refreshNodesDom([selected]);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
@@ -508,20 +532,21 @@ function e_recProj(btn){
|
|
|
let updateObj = m_getRecDatas(selected);
|
|
|
let updateDatas = updateObj.proj.concat(updateObj.file);
|
|
|
let fileObj = getRecFileObj(updateObj.file);
|
|
|
- console.log(updateObj);
|
|
|
//保存成功后回调front
|
|
|
- //front
|
|
|
- let project = m_project(selected);
|
|
|
- if(project){
|
|
|
- if(fileObj[fileType.unitPriceFile].length > 0){
|
|
|
- v_recFiles(project, fileObj[fileType.unitPriceFile], fileType.unitPriceFile);
|
|
|
- }
|
|
|
- if(fileObj[fileType.feeRateFile].length > 0){
|
|
|
- v_recFiles(project, fileObj[fileType.feeRateFile], fileType.feeRateFile);
|
|
|
+ a_rec(updateDatas, caller);
|
|
|
+ function caller() {
|
|
|
+ let project = m_project(selected);
|
|
|
+ if(project){
|
|
|
+ if(fileObj[fileType.unitPriceFile].length > 0){
|
|
|
+ v_recFiles(project, fileObj[fileType.unitPriceFile], fileType.unitPriceFile);
|
|
|
+ }
|
|
|
+ if(fileObj[fileType.feeRateFile].length > 0){
|
|
|
+ v_recFiles(project, fileObj[fileType.feeRateFile], fileType.feeRateFile);
|
|
|
+ }
|
|
|
}
|
|
|
+ v_removeNode(selected);
|
|
|
+ v_refreshNode(selected);
|
|
|
}
|
|
|
- v_removeNode(selected);
|
|
|
- v_refreshNode(selected);
|
|
|
});
|
|
|
}
|
|
|
|
|
@@ -529,6 +554,7 @@ function a_getGC(callback){
|
|
|
$.ajax({
|
|
|
type: 'post',
|
|
|
url: '/pm/api/getGCDatas',
|
|
|
+ data: {data: JSON.stringify({user_id: userID})},
|
|
|
dataType: 'json',
|
|
|
timeout: 5000,
|
|
|
success: function (result) {
|
|
@@ -538,14 +564,14 @@ function a_getGC(callback){
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- })
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
function a_rec(nodes, callback){
|
|
|
$.ajax({
|
|
|
type: 'post',
|
|
|
url: '/pm/api/recGC',
|
|
|
- data: {nodes: JSON.stringify(nodes)},
|
|
|
+ data: {data: JSON.stringify({user_id: userID, nodes: nodes})},
|
|
|
dataType: 'json',
|
|
|
timeout: 5000,
|
|
|
success: function (result) {
|
|
@@ -558,14 +584,67 @@ function a_rec(nodes, callback){
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+//去除重名,回收站不处理重名,只保证恢复到项目管理中不出现重名
|
|
|
+function deWeightName(datas){
|
|
|
+ let rst = [];
|
|
|
+ let _deWeight = Object.create(null), prefix = 'name_';
|
|
|
+ //按同名分组
|
|
|
+ for(let i = 0, len = datas.length; i < len; i++){
|
|
|
+ let data = datas[i];
|
|
|
+ let _names = _deWeight[prefix + data.updateData.name] || null;
|
|
|
+ if(!_names){
|
|
|
+ _names = _deWeight[prefix + data.updateData.name] = [];
|
|
|
+ }
|
|
|
+ if(_names){
|
|
|
+ _names.push(data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for(let _name in _deWeight){
|
|
|
+ let sameNameDatas = _deWeight[_name];
|
|
|
+ let count = 0;
|
|
|
+ for(let i = 0, len = sameNameDatas.length; i < len; i++){
|
|
|
+ let postFix = '(' + count + ')';
|
|
|
+ if(i > 0){
|
|
|
+ sameNameDatas[i].updateData.name = sameNameDatas[i].updateData.name + postFix;
|
|
|
+ }
|
|
|
+ count ++;
|
|
|
+ rst.push(sameNameDatas[i]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+}
|
|
|
+
|
|
|
+//去除名称后缀(Date恢复)
|
|
|
+function delPostFix (str){
|
|
|
+ let rst = '';
|
|
|
+ rst = delPostRecFix(delPostNameFix(str));
|
|
|
+ return rst;
|
|
|
+}
|
|
|
+function delPostRecFix (str){
|
|
|
+ let rst = '';
|
|
|
+ let re = /(+[0-9]{2}-[0-9]{2}\s+[0-9]{2}:[0-9]{2}:[0-9]{2}恢复)/g;
|
|
|
+ rst = str.replace(re, '');
|
|
|
+ return rst;
|
|
|
+}
|
|
|
+function delPostNameFix (str){
|
|
|
+ let rst = '';
|
|
|
+ let re = /(+[0-9][0-9]*)/g;
|
|
|
+ rst = str.replace(re, '');
|
|
|
+ return rst;
|
|
|
+}
|
|
|
+
|
|
|
function deleted(node){
|
|
|
- return node.data.deleteInfo !== undefined && node.data.deleteInfo.deleted;
|
|
|
+ return node.data.deleteInfo !== undefined && node.data.deleteInfo && node.data.deleteInfo.deleted;
|
|
|
+}
|
|
|
+
|
|
|
+function fileEmpty(node){
|
|
|
+ return node.data.unitPriceFiles.length === 0 && node.data.feeRateFiles.length === 0;
|
|
|
}
|
|
|
|
|
|
function fIsExist(files, id, type){
|
|
|
let isExist = false;
|
|
|
for(let i = 0, len = files.length; i < len; i++){
|
|
|
- if((type === fileType.unitPriceFile && files[i].id === id) || (type === fileType.feeRateFile && files[i].ID === id)){
|
|
|
+ if((type === fileType.unitPriceFile && files[i].id === parseInt(id)) || (type === fileType.feeRateFile && files[i].ID === id)){
|
|
|
isExist = true;
|
|
|
break;
|
|
|
}
|
|
@@ -577,12 +656,12 @@ function getRecFileObj(files){
|
|
|
let rst = Object.create(null);
|
|
|
let rst_UF = [], rst_FF = [];
|
|
|
for(let i = 0, len = files.length; i < len; i++){
|
|
|
- if(files[i].findData !== undefined && files[i].findData.id !== undefined){
|
|
|
- if(files[i].updateType === fileType.unitPriceFile){
|
|
|
+ if(files[i].findData !== undefined){
|
|
|
+ if(files[i].updateType === fileType.unitPriceFile && files[i].findData.id !== undefined){
|
|
|
rst_UF.push(files[i].findData.id);
|
|
|
}
|
|
|
- else if(files[i].updateType === fileType.feeRateFile){
|
|
|
- rst_FF.push(files[i].findData.id);
|
|
|
+ else if(files[i].updateType === fileType.feeRateFile && files[i].findData.ID !== undefined){
|
|
|
+ rst_FF.push(files[i].findData.ID);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -601,56 +680,67 @@ function getUpdateObj(updateType, findData, updateData){
|
|
|
|
|
|
function getUpdateDatas(updateType, node, mtNID, mtPM){
|
|
|
let rst = [];
|
|
|
- if(!decDate){
|
|
|
- decDate = '(' + new Date().Format('MM-dd hh:mm:ss') + '恢复)';
|
|
|
- }
|
|
|
+ decDate = '(' + new Date().Format('MM-dd hh:mm:ss') + '恢复)';
|
|
|
+ let newName = delPostFix(node.data.name) + decDate;
|
|
|
if(updateType === projectType.tender || updateType === projectType.engineering){
|
|
|
- //维护回收站树
|
|
|
- /* if(mtGC){
|
|
|
- rst.push(getUpdateObj(updateType, {NextSiblingID: node.data.ID, 'deleteInfo.deleted': true}, {NextSiblingID: node.data.NextSiblingID}));
|
|
|
- }*/
|
|
|
//维护项目管理树
|
|
|
if(mtPM){
|
|
|
rst.push(getUpdateObj(updateType, {ParentID: node.data.ParentID, NextSiblingID: -1, deleteInfo: null}, {NextSiblingID: node.data.ID}));
|
|
|
}
|
|
|
//恢复
|
|
|
if(mtNID){
|
|
|
- rst.push(getUpdateObj(updateType, {ID: node.data.ID, name: node.data.name + decDate}, {deleteInfo: null, NextSiblingID: -1}));
|
|
|
+ rst.push(getUpdateObj(updateType, {ID: node.data.ID}, {name: newName, deleteInfo: null, NextSiblingID: -1}));
|
|
|
}
|
|
|
else {
|
|
|
- rst.push(getUpdateObj(updateType, {ID: node.data.ID, name: node.data.name + decDate}, {deleteInfo: null}));
|
|
|
+ rst.push(getUpdateObj(updateType, {ID: node.data.ID}, {name: newName, deleteInfo: null}));
|
|
|
}
|
|
|
}
|
|
|
else if(updateType === projectType.project){
|
|
|
- /* //维护回收站树
|
|
|
- if(mtGC){
|
|
|
- rst.push(getUpdateObj(updateType, {NextSiblingID: node.data.ID, 'deleteInfo.deleted': true}, {NextSiblingID: node.data.NextSiblingID}));
|
|
|
- }*/
|
|
|
//恢复
|
|
|
- rst.push(getUpdateObj(updateType, {ID: node.data.ID, name: node.data.name + decDate}, {deleteInfo: null}));//NextSibling为undefined,后端处理
|
|
|
+ rst.push(getUpdateObj(updateType, {ID: node.data.ID}, {deleteInfo: null, name: newName}));//NextSibling为undefined,后端处理
|
|
|
}
|
|
|
return rst;
|
|
|
}
|
|
|
//unitPriceFile or feeRateFile
|
|
|
function getUpdateFiles(tenders, project){
|
|
|
- let unitFiles = [], feeFiles = [], rst = [];
|
|
|
+ let rstUF = [], rstFF = [], rst = [];
|
|
|
+ let _unitFiles = Object.create(null), _feeFiles = Object.create(null), prefix = '_id';
|
|
|
+ decDate = '(' + new Date().Format('MM-dd hh:mm:ss') + '恢复)';
|
|
|
for(let i = 0, len = tenders.length; i < len; i++){
|
|
|
//恢复单价文件
|
|
|
if(project && project.data.unitPriceFiles.length > 0 && fIsExist(project.data.unitPriceFiles, tenders[i].data.property.unitPriceFile.id, fileType.unitPriceFile)){
|
|
|
- unitFiles.push(tenders[i].data.property.unitPriceFile.id);
|
|
|
+ //unitFiles.push(tenders[i].data.property.unitPriceFile.id);
|
|
|
+ let propId = tenders[i].data.property.unitPriceFile.id;
|
|
|
+ let propName = tenders[i].data.property.unitPriceFile.name;
|
|
|
+ let _uf = _unitFiles[prefix + propId] || null;
|
|
|
+ if(!_uf){
|
|
|
+ let obj = Object.create(null);
|
|
|
+ obj.id = parseInt(propId);
|
|
|
+ obj.name = propName;
|
|
|
+ _unitFiles[prefix + propId] = obj;
|
|
|
+ }
|
|
|
}
|
|
|
//恢复费率文件
|
|
|
if(project && project.data.feeRateFiles.length > 0 && fIsExist(project.data.feeRateFiles, tenders[i].data.property.feeFile.id, fileType.feeRateFile)){
|
|
|
- feeFiles.push(tenders[i].data.property.feeFile.id);
|
|
|
+ //feeFiles.push(tenders[i].data.property.feeFile.id);
|
|
|
+ let propId = tenders[i].data.property.feeFile.id;
|
|
|
+ let propName = tenders[i].data.property.feeFile.name;
|
|
|
+ let _ff = _feeFiles[prefix + propId] || null;
|
|
|
+ if(!_ff){
|
|
|
+ let obj = Object.create(null);
|
|
|
+ obj.id = propId;
|
|
|
+ obj.name = propName;
|
|
|
+ _feeFiles[prefix + propId] = obj;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- let ufIds = Array.from(new Set(unitFiles));
|
|
|
- let ffIds = Array.from(new Set(feeFiles));
|
|
|
- for(let i = 0, len = ufIds.length; i < len; i++){
|
|
|
- rst.push(getUpdateObj(fileType.unitPriceFile, {id: ufIds[i]}, {deleteInfo: null}));
|
|
|
+ for(let uf in _unitFiles){
|
|
|
+ rstUF.push(getUpdateObj(fileType.unitPriceFile, {id: _unitFiles[uf].id}, {deleteInfo: null, name: delPostFix(_unitFiles[uf].name) + decDate}));
|
|
|
}
|
|
|
- for(let i = 0, len = ffIds.length; i < len; i++){
|
|
|
- rst.push(getUpdateObj(fileType.feeRateFile, {id: ffIds[i]}, {deleteInfo: null}));
|
|
|
+ for(let ff in _feeFiles){
|
|
|
+ rstFF.push(getUpdateObj(fileType.feeRateFile, {ID: _feeFiles[ff].id}, {deleteInfo: null, name: delPostFix(_feeFiles[ff].name) + decDate}));
|
|
|
}
|
|
|
+ rst = rst.concat(deWeightName(rstUF));
|
|
|
+ rst = rst.concat(deWeightName(rstFF));
|
|
|
return rst;
|
|
|
}
|