| 
					
				 | 
			
			
				@@ -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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |