| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208 | 
							- /**
 
-  * Created by Zhong on 2017/10/30.
 
-  */
 
- let gcTree = null;
 
- let decDate = null;//恢复后的名称后缀(时间+恢复)
 
- //恢复路径t = tender, e = engineering, p = project
 
- 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',
 
-         pid: 'ParentID',
 
-         nid: 'NextSiblingID',
 
-         btnColumn: 1,
 
-         nullId: -1
 
-     },
 
-     columns: [
 
-         {
 
-             head: '',
 
-             data: '',
 
-             width: '40',
 
-             event: {}
 
-         },
 
-         {
 
-             head: '工程列表',
 
-             data: 'name',
 
-             width: '50%',
 
-             event: {
 
-                 getText: function (html, node, text) {
 
-                     let className = '';
 
-                     switch (node.data.projType) {
 
-                         case projectType.folder:
 
-                             className = "fa fa-folder-open-o";
 
-                             break;
 
-                         case projectType.tender:
 
-                             className = "fa fa-sticky-note-o";
 
-                             break;
 
-                         case projectType.project:
 
-                             className = "fa fa-cubes";
 
-                             break;
 
-                         case projectType.engineering:
 
-                             className = "fa fa-cube";
 
-                             break;
 
-                     }
 
-                     let icon = '<i class ="tree-icon '+ className +'"></i>';
 
-                     html.push(icon, ' ', text);
 
-                 },
 
-                 getIcon: function (html, node) {
 
-                     if (node.data.projType === projectType.tender) {
 
-                         html.push('<span class="poj-icon">└</span>');
 
-                     }
 
-                 }
 
-             }
 
-         },
 
-         {
 
-             head: '删除日期',
 
-             data: 'deleteDateTime',
 
-             width: '10%',
 
-             event: {
 
-                 getText: function (html, node, text) {
 
-                     if (node.data.projType === projectType.tender) {
 
-                         if(deleted(node)){
 
-                             let localDateTime = new Date(node.data.deleteInfo.deleteDateTime).toLocaleDateString();
 
-                             html.push(new Date(localDateTime).Format('yyyy-MM-dd'));
 
-                         }
 
-                         else{
 
-                             html.push('');
 
-                         }
 
-                     }
 
-                 }
 
-             }
 
-         },
 
-         {
 
-             head: '创建日期',
 
-             data: 'createDateTime',
 
-             width: '10%',
 
-             event: {
 
-                 getText: function (html, node, text) {
 
-                     if (node.data.projType === projectType.tender) {
 
-                         if(deleted(node)){
 
-                             let localDateTime = new Date(text).toLocaleDateString();
 
-                             html.push(new Date(localDateTime).Format('yyyy-MM-dd'));
 
-                         }
 
-                         else{
 
-                             html.push('');
 
-                         }
 
-                     }
 
-                 }
 
-             }
 
-         },
 
-         {
 
-             head: '恢复',
 
-             data: 'recovery',
 
-             width: '10%',
 
-             event: {
 
-                 getText: function (html, node, text) {
 
-                     if(node.data.projType === projectType.project && deleted(node)){
 
-                         html.push('<a href="javascript:void(0);" data-toggle="modal" data-target="#rePoj">恢复</a>');
 
-                     }
 
-                     else if(node.data.projType === projectType.engineering && deleted(node)){
 
-                         html.push('<a href="javascript:void(0);" data-toggle="modal" data-target="#rePoj">恢复</a>');
 
-                     }
 
-                     else if(node.data.projType === projectType.tender && deleted(node)){
 
-                         html.push('<a href="javascript:void(0);" data-toggle="modal" data-target="#rePoj">恢复</a>');
 
-                     }
 
-                     else {
 
-                         html.push('');
 
-                     }
 
-                 },
 
-                 tdBindEvent: function(td, node){
 
-                     $('a:eq(0)' ,td).bind('click', function () {
 
-                         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));
 
-                     });
 
-                 }
 
-             }
 
-         },
 
-         {
 
-             head: '单价文件',
 
-             data: 'unitPriceFiles',
 
-             width: '10%',
 
-             event: {
 
-                 getText: function (html, node, text) {
 
-                     if(node.data.projType === projectType.project && node.data.unitPriceFiles !== undefined && node.data.unitPriceFiles.length > 0){
 
-                         html.push('<a href="javascript:void(0);" data-toggle="modal" data-target="#reFile">恢复</a>');
 
-                     }
 
-                 },
 
-                 tdBindEvent: function (td, node) {
 
-                     $('a:eq(0)', td).bind('click', function () {
 
-                         let unitPriceFiles = node.data.unitPriceFiles;
 
-                         $('#reFile h5').text('恢复单价文件');
 
-                         $('tr', '#reFile tbody').remove();
 
-                         $('#reFile tbody').html(v_getFiles(fileType.unitPriceFile, unitPriceFiles));
 
-                     });
 
-                 }
 
-             }
 
-         },
 
-         {
 
-             head: '费率文件',
 
-             data: 'feeRateFiles',
 
-             width: '10%',
 
-             event: {
 
-                 getText: function (html, node, text) {
 
-                     if(node.data.projType === projectType.project && node.data.feeRateFiles !== undefined && node.data.feeRateFiles.length > 0){
 
-                         html.push('<a href="javascript:void(0);" data-toggle="modal" data-target="#reFile">恢复</a>');
 
-                     }
 
-                 },
 
-                 tdBindEvent: function (td, node) {
 
-                     $('a:eq(0)', td).bind('click', function () {
 
-                         let feeRateFiles = node.data.feeRateFiles;
 
-                        $('#reFile h5').text('恢复费率文件');
 
-                         $('tr', '#reFile tbody').remove();
 
-                         $('#reFile tbody').html(v_getFiles(fileType.feeRateFile, feeRateFiles));
 
-                     });
 
-                 }
 
-             }
 
-         }
 
-     ]
 
- };
 
- const gcTreeObj = {
 
-     tree: null,
 
-     workBook: null,
 
-     setting: {
 
-         tree: {
 
-             id: 'ID',
 
-             pid: 'ParentID',
 
-             nid: 'NextSiblingID',
 
-             rootId: -1,
 
-             autoUpdate: false
 
-         },
 
-         header: [
 
-             {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'}
 
-         ],
 
-         //选中行颜色
 
-         style: {
 
-             defalutBackColor: 'White',
 
-             selectedColor: '#BBFFFF'
 
-         },
 
-         options: {
 
-             tabStripVisible:  false,
 
-             allowCopyPasteExcelStyle : false,
 
-             allowExtendPasteRange: false,
 
-             allowUserDragDrop : false,
 
-             allowUserDragFill: false,
 
-             scrollbarMaxAlign : true
 
-         }
 
-     },
 
-     renderSheetFuc: function (sheet, fuc) {
 
-         sheet.suspendPaint();
 
-         sheet.suspendEvent();
 
-         fuc();
 
-         sheet.resumePaint();
 
-         sheet.resumeEvent();
 
-     },
 
-     setOptions: function (workbook, opts) {
 
-         for(let opt in opts){
 
-             workbook.options[opt] = opts[opt];
 
-         }
 
-     },
 
-     bindEvent: function (workBook) {
 
-         const _events = GC.Spread.Sheets.Events;
 
-         let sheet = workBook.getActiveSheet();
 
-         //改变选中节点set selected
 
-         sheet.bind(_events.SelectionChanging, this.onSelectionChanging);
 
-     },
 
-     buildHeader: function (sheet, headers) {
 
-         let me = this;
 
-         let fuc = function () {
 
-             sheet.options.isProtected = true;
 
-             sheet.options.protectionOptions = {
 
-                 allowResizeRows: true,
 
-                 allowResizeColumns: true
 
-             };
 
-             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);
 
-             }
 
-         };
 
-         me.renderSheetFuc(sheet, fuc);
 
-     },
 
-     buildSheet: function () {
 
-         if(!this.workBook){
 
-             this.workBook = new GC.Spread.Sheets.Workbook($('#gcSpread')[0], {sheetCount: 1});
 
-             this.setOptions(this.workBook, this.setting.options);
 
-             this.buildHeader(this.workBook.getActiveSheet(), this.setting.header);
 
-             this.bindEvent(this.workBook);
 
-         }
 
-     },
 
-     getSelStyle: function (backColor) {
 
-         let style = new GC.Spread.Sheets.Style();
 
-         style.backColor = backColor;
 
-         style.borderLeft = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin);
 
-         style.borderTop = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin);
 
-         style.borderRight = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin);
 
-         style.borderBottom = new GC.Spread.Sheets.LineBorder("#D4D4D4", GC.Spread.Sheets.LineStyle.thin);
 
-         return style;
 
-     },
 
-     //设置选中行底色
 
-     setSelStyle: function (sel, backColor) {
 
-         let me = this;
 
-         let sheet = me.workBook.getSheet(0);
 
-         me.renderSheetFuc(sheet, function () {
 
-             let style = me.getSelStyle(backColor);
 
-             /*sel.row = sel.row === -1 ? 0 : sel.row;*/
 
-             for(let i = 0; i < sel.rowCount; i++){
 
-                 let row = i + sel.row;
 
-                 sheet.setStyle(row, -1, style);
 
-             }
 
-         });
 
-     },
 
-     initSelection: function (newSel, oldSel = null) {
 
-         let me = this;
 
-         let node = me.tree.items[newSel.row];
 
-         me.tree.selected = node;
 
-         //恢复底色
 
-         if(oldSel){
 
-             me.setSelStyle(oldSel, me.setting.style.defalutBackColor);
 
-         }
 
-         //设置选中行底色
 
-         if(newSel){
 
-             me.setSelStyle(newSel, me.setting.style.selectedColor);
 
-         }
 
-         $(".tools-btn > a").not(".disabled").addClass("disabled");
 
-         $("#add-engineering-btn").addClass("disabled");
 
-         $('#add-tender-btn').removeClass('disabled');
 
-         if(node){
 
-             switch(node.data.projType) {
 
-                 case projectType.project:
 
-                     $("#del-btn").removeClass("disabled");
 
-                     $("#add-engineering-btn").removeClass("disabled");
 
-                     break;
 
-                 case projectType.folder:
 
-                     if(!node.children || node.children.length === 0){
 
-                         $("#del-btn").removeClass("disabled");
 
-                     }
 
-                     break;
 
-                 case projectType.engineering:
 
-                     $("#del-btn").removeClass("disabled");
 
-                     $("#add-engineering-btn").removeClass("disabled");
 
-                     break;
 
-                 case projectType.tender:
 
-                     $("#add-engineering-btn").removeClass("disabled");
 
-                     $("#move-to-btn").removeClass("disabled");
 
-                     $("#copy-to-btn").removeClass("disabled");
 
-                     $("#share-btn").removeClass("disabled");
 
-                     $("#cooperate-btn").removeClass("disabled");
 
-                     $("#del-btn").removeClass("disabled");
 
-                     break;
 
-             }
 
-             $("#rename-btn").removeClass("disabled");
 
-         }
 
-     },
 
-     onSelectionChanging: function (sender, args) {
 
-         let me = gcTreeObj;
 
-         me.initSelection(args.newSelections[0], args.oldSelections[0]);
 
-     },
 
-     //点击恢复列,弹出恢复项目窗口
 
-     recoveryProj: function (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');
 
-     },
 
-     //点击单价文件恢复,弹出恢复单价文件窗口
 
-     recoveryUnitPrc: function (node) {
 
-         let unitPriceFiles = node.data.unitPriceFiles;
 
-         $('#reFile h5').text('恢复单价文件');
 
-         $('tr', '#reFile tbody').remove();
 
-         $('#reFile tbody').html(v_getFiles(fileType.unitPriceFile, unitPriceFiles));
 
-         $('#reFile').modal('show');
 
-     },
 
-     recoveryFeeRate: function (node) {
 
-         let feeRateFiles = node.data.feeRateFiles;
 
-         $('#reFile h5').text('恢复费率文件');
 
-         $('tr', '#reFile tbody').remove();
 
-         $('#reFile tbody').html(v_getFiles(fileType.feeRateFile, feeRateFiles));
 
-         $('#reFile').modal('show');
 
-     },
 
-     getTreeNodeCell: function (tree) {
 
-         let indent = 20;
 
-         let levelIndent = -5;
 
-         let halfBoxLength = 5;
 
-         let halfExpandLength = 3;
 
-         let imgWidth = 18;
 
-         let imgHeight = 14;
 
-         let TreeNodeCellType = function () {
 
-         };
 
-         TreeNodeCellType.prototype = new GC.Spread.Sheets.CellTypes.Text();
 
-         TreeNodeCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) {
 
-             if (style.backColor) {
 
-                 ctx.save();
 
-                 ctx.fillStyle = style.backColor;
 
-                 ctx.fillRect(x, y, w, h);
 
-                 ctx.restore();
 
-             } else {
 
-                 ctx.clearRect(x, y, w, h);
 
-             }
 
-             let drawLine = function (canvas, x1, y1, x2, y2, color) {
 
-                 ctx.save();
 
-                 ctx.translate(0.5, 0.5);
 
-                 ctx.beginPath();
 
-                 ctx.moveTo(x1, y1);
 
-                 ctx.lineTo(x2, y2);
 
-                 ctx.strokeStyle = color;
 
-                 ctx.stroke();
 
-                 ctx.restore();
 
-             };
 
-             let drawExpandBox = function (ctx, x, y, w, h, centerX, centerY, expanded) {
 
-                 let rect = {}, h1, h2, offset = 1;
 
-                 rect.top = centerY - halfBoxLength;
 
-                 rect.bottom = centerY + halfBoxLength;
 
-                 rect.left = centerX - halfBoxLength;
 
-                 rect.right = centerX + halfBoxLength;
 
-                 if (rect.left < x + w) {
 
-                     rect.right = Math.min(rect.right, x + w);
 
-                     ctx.save();
 
-                     ctx.translate(0.5, 0.5);
 
-                     ctx.strokeStyle = 'black';
 
-                     ctx.beginPath();
 
-                     ctx.moveTo(rect.left, rect.top);
 
-                     ctx.lineTo(rect.left, rect.bottom);
 
-                     ctx.lineTo(rect.right, rect.bottom);
 
-                     ctx.lineTo(rect.right, rect.top);
 
-                     ctx.lineTo(rect.left, rect.top);
 
-                     ctx.stroke();
 
-                     ctx.fillStyle = 'white';
 
-                     ctx.fill();
 
-                     ctx.restore();
 
-                     // Draw Horizontal Line
 
-                     h1 = centerX - halfExpandLength;
 
-                     h2 = Math.min(centerX + halfExpandLength, x + w);
 
-                     if (h2 > h1) {
 
-                         drawLine(ctx, h1, centerY, h2, centerY, 'black');
 
-                     }
 
-                     // Draw Vertical Line
 
-                     if (!expanded && (centerX < x + w)) {
 
-                         drawLine(ctx, centerX, centerY - halfExpandLength, centerX, centerY + halfExpandLength, 'black');
 
-                     }
 
-                 }
 
-             }
 
-             let node = tree.items[options.row];
 
-             let showTreeLine = true;
 
-             if (!node) { return; }
 
-             let centerX = Math.floor(x) + node.depth() * indent + node.depth() * levelIndent + indent / 2;
 
-             let x1 = centerX + indent / 2;
 
-             let centerY = Math.floor((y + (y + h)) / 2);
 
-             let y1;
 
-             // Draw Sibling Line
 
-             if (showTreeLine) {
 
-                 // Draw Horizontal Line
 
-                 if (centerX < x + w) {
 
-                     drawLine(ctx, centerX, centerY, Math.min(x1, x + w), centerY, 'gray');
 
-                     let img;
 
-                     if(node.data.projType === projectType.folder){
 
-                         img = document.getElementById('folder_open_pic');
 
-                         imgWidth = 15;
 
-                     }
 
-                     else if(node.data.projType === projectType.project){
 
-                         img = document.getElementById('proj_pic');
 
-                         imgWidth = 18;
 
-                     }
 
-                     else if(node.data.projType === projectType.engineering){
 
-                         img = document.getElementById('eng_pic');
 
-                         imgWidth = 14;
 
-                     }
 
-                     else if(node.data.projType === projectType.tender){
 
-                         img = document.getElementById('tender_pic');
 
-                         imgWidth = 14;
 
-                     }
 
-                     ctx.drawImage(img, centerX+indent/2+3, centerY - 7, imgWidth,imgHeight);
 
-                 }
 
-                 // Draw Vertical Line
 
-                 if (centerX < x + w) {
 
-                     y1 = node.isLast() ? centerY : y + h;
 
-                     if (node.isFirst() && !node.parent.parent) {
 
-                         drawLine(ctx, centerX, centerY, centerX, y1, 'gray');
 
-                     } else {
 
-                         drawLine(ctx, centerX, y, centerX, y1, 'gray');
 
-                     }
 
-                 }
 
-             }
 
-             // Draw Expand Box
 
-             if (node.children.length > 0) {
 
-                 drawExpandBox(ctx, x, y, w, h, centerX, centerY, node.expanded);
 
-             }
 
-             // Draw Parent Line
 
-             if (showTreeLine) {
 
-                 var parent = node.parent, parentCenterX = centerX - indent - levelIndent;
 
-                 while (parent.parent) {
 
-                     if (!parent.isLast()) {
 
-                         if (parentCenterX < x + w) {
 
-                             drawLine(ctx, parentCenterX, y, parentCenterX, y + h, 'gray');
 
-                         }
 
-                     }
 
-                     parent = parent.parent;
 
-                     parentCenterX -= (indent + levelIndent);
 
-                 }
 
-             };
 
-             // Draw Text
 
-             //x = x + (node.depth() + 1) * indent +  node.depth() * levelIndent;
 
-             x = x + (node.depth() + 1) * indent +  node.depth() * levelIndent + imgWidth + 3;
 
-             GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this, arguments);
 
-         };
 
-         TreeNodeCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {
 
-             return {
 
-                 x: x,
 
-                 y: y,
 
-                 row: context.row,
 
-                 col: context.col,
 
-                 cellStyle: cellStyle,
 
-                 cellRect: cellRect,
 
-                 sheetArea: context.sheetArea,
 
-                 isReservedLocation: true
 
-             };
 
-         };
 
-         TreeNodeCellType.prototype.processMouseDown = function (hitinfo) {
 
-             let offset = -1;
 
-             let node = tree.items[hitinfo.row];
 
-             tree.selected = node;
 
-             let centerX = hitinfo.cellRect.x + offset + node.depth() * indent + node.depth() * levelIndent + indent / 2;
 
-             let centerY = (hitinfo.cellRect.y + offset + (hitinfo.cellRect.y + offset + hitinfo.cellRect.height)) / 2;;
 
-             if (!node || node.children.length === 0) { return; }
 
-             if (hitinfo.x > centerX - halfBoxLength && hitinfo.x < centerX + halfBoxLength && hitinfo.y > centerY - halfBoxLength && hitinfo.y < centerY + halfBoxLength) {
 
-                 node.setExpanded(!node.expanded);
 
-                 TREE_SHEET_HELPER.massOperationSheet(hitinfo.sheet, function () {
 
-                     let iCount = node.posterityCount(), i, child;
 
-                     for (i = 0; i < iCount; i++) {
 
-                         child = tree.items[hitinfo.row + i + 1];
 
-                         hitinfo.sheet.setRowVisible(hitinfo.row + i + 1, child.visible, hitinfo.sheetArea);
 
-                     }
 
-                     hitinfo.sheet.invalidateLayout();
 
-                 });
 
-                 hitinfo.sheet.repaint();
 
-             }
 
-         };
 
-         return new TreeNodeCellType();
 
-     },
 
-     getBaseCell: function () {
 
-         let MyBaseCell = function () {
 
-         };
 
-         MyBaseCell.prototype = new GC.Spread.Sheets.CellTypes.Text();
 
-         MyBaseCell.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {
 
-             return {
 
-                 x: x,
 
-                 y: y,
 
-                 row: context.row,
 
-                 col: context.col,
 
-                 cellStyle: cellStyle,
 
-                 cellRect: cellRect,
 
-                 sheetArea: context.sheetArea,
 
-                 isReservedLocation: true
 
-             };
 
-         };
 
-         MyBaseCell.prototype.processMouseDown = function (hitinfo) {
 
-             let dataCode = gcTreeObj.setting.header[hitinfo.col]['dataCode'];
 
-             let node = gcTreeObj.tree.items[hitinfo.row];
 
-             let text = hitinfo.sheet.getText(hitinfo.row, hitinfo.col);
 
-             let value = hitinfo.sheet.getValue(hitinfo.row, hitinfo.col);
 
-             let acStyle = hitinfo.sheet.getActualStyle(hitinfo.row, hitinfo.col),
 
-                 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);
 
-                 }
 
-                 else if(dataCode === 'unitPriceFile'){
 
-                     gcTreeObj.recoveryUnitPrc(node);
 
-                 }
 
-                 else if(dataCode === 'feeRateFile'){
 
-                     gcTreeObj.recoveryFeeRate(node);
 
-                 }
 
-             }
 
-         };
 
-         MyBaseCell.prototype.processMouseMove = function (hitInfo) {
 
-             let dataCode = gcTreeObj.setting.header[hitInfo.col]['dataCode'];
 
-             if(dataCode === 'recovery' || dataCode === 'unitPriceFile' || dataCode === 'feeRateFile'){
 
-                 let sheet = hitInfo.sheet;
 
-                 let div = sheet.getParent().getHost();
 
-                 let canvasId = div.id + "vp_vp";
 
-                 let canvas = $(`#${canvasId}`)[0];
 
-                 //改变鼠标图案
 
-                 let text = hitInfo.sheet.getText(hitInfo.row, hitInfo.col);
 
-                 let value = hitInfo.sheet.getValue(hitInfo.row, hitInfo.col);
 
-                 let acStyle = hitInfo.sheet.getActualStyle(hitInfo.row, hitInfo.col),
 
-                     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 (sheet && hitInfo.x - hitInfo.cellRect.x >  0 && hitInfo.x - hitInfo.cellRect.x < textLength) {
 
-                     canvas.style.cursor='pointer';
 
-                     return true;
 
-                 }else{
 
-                     canvas.style.cursor='default';
 
-                 }
 
-             }
 
-             return false;
 
-         };
 
-         return new MyBaseCell();
 
-     },
 
-     setCellValue: function (cell, node) {
 
-         const sheet = this.workBook.getActiveSheet();
 
-         const {row, col} = cell;
 
-         const dataCode = this.setting.header[col]['dataCode'];
 
-         let value = '';
 
-         if(dataCode === 'deleteDateTime' || dataCode === 'createDateTime'){
 
-             if (node.data.projType === projectType.tender && deleted(node)) {
 
-                 let date = dataCode === 'deleteDateTime' ? node.data.deleteInfo.deleteDateTime : node.data.createDateTime;
 
-                 let localDateTime = new Date(date).toLocaleDateString();
 
-                 value = new Date(localDateTime).Format('yyyy-MM-dd');
 
-             }
 
-         }
 
-         else if(dataCode === 'recovery'){
 
-             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 === 'feeRateFile'){
 
-             if(node.data.projType === projectType.project && node.data.feeRateFiles !== undefined && node.data.feeRateFiles.length > 0){
 
-                 value = '恢复';
 
-             }
 
-         }
 
-         else {
 
-             value = node.data[dataCode] ? node.data[dataCode] : '';
 
-         }
 
-         sheet.setValue(row, col, value);
 
-     },
 
-     showTreeData: function (nodes, headers) {
 
-         let me = this;
 
-         let sheet = me.workBook.getActiveSheet();
 
-         let fuc = function(){
 
-             sheet.setRowCount(nodes.length);
 
-             for(let i = 0; i < nodes.length; i++){
 
-                 let treeNodeCell = me.getTreeNodeCell(me.tree);
 
-                 sheet.getCell(i, 0).cellType(treeNodeCell);
 
-                 for(let j = 0; j < headers.length; j++){
 
-                     sheet.getRange(-1, j, -1, 1).hAlign(GC.Spread.Sheets.HorizontalAlign[headers[j]['hAlign']]);
 
-                     sheet.getRange(-1, j, -1, 1).vAlign(GC.Spread.Sheets.VerticalAlign[headers[j]['vAlign']]);
 
-                     if(j !== 0){
 
-                         sheet.getCell(i, j).cellType(me.getBaseCell());
 
-                     }
 
-                     let dataCode = headers[j].dataCode;
 
-                     me.setCellValue({row: i, col: j}, nodes[i]);
 
-                 }
 
-             }
 
-         };
 
-         me.renderSheetFuc(sheet, fuc);
 
-     },
 
-     refreshNodeData: function (node) {
 
-         let me = this;
 
-         let sheet = me.workBook.getActiveSheet();
 
-         let header = me.setting.header;
 
-         let rIdx = me.tree.items.indexOf(node);
 
-         me.renderSheetFuc(sheet, function () {
 
-             for(let i = 0; i < header.length; i++){
 
-                 me.setCellValue({row: rIdx, col: i}, node);
 
-             }
 
-         });
 
-     },
 
-     remove: function (node) {
 
-         let me = this;
 
-         let sheet = me.workBook.getActiveSheet();
 
-         //删除行号
 
-         let rIdx = me.tree.items.indexOf(node);
 
-         //删除行数
 
-         let count = node.posterityCount() + 1;
 
-         me.tree.removeNode(node);
 
-         me.renderSheetFuc(sheet, function () {
 
-             sheet.deleteRows(rIdx, count);
 
-             sheet.setRowCount(me.tree.items.length);
 
-             me.initSelection({row: sheet.getActiveRowIndex(), rowCount: 1});
 
-         });
 
-     },
 
-     move: function (orgRow, newRow) {
 
-         this.workBook.getActiveSheet().deleteRows(orgRow, 1);
 
-         this.addRow(this.tree.items[newRow]);
 
-     }
 
- };
 
- $(document).ready(function () {
 
-     $('#tab_pm_gc').on('show.bs.tab', function () {
 
-         //侧滑隐藏
 
-         $('.slide-sidebar').removeClass('open');
 
-         $('.slide-sidebar').css('width', '0');
 
-         gc_init();
 
-         projTreeObj.tree = null;
 
-     });
 
-     e_recFiles($('#reFileBtn'));
 
-     e_recProj($('#rePojBtn'));
 
- });
 
- function gc_init(){
 
-     $.bootstrapLoading.start();
 
-     a_getGC(function (datas) {
 
-         m_buildVirtualTree(datas);
 
-         let normalDatas = m_VTreeToDatas(datas);
 
-         gcTreeObj.tree = pmTree.createNew(gcTreeObj.setting, normalDatas);
 
-         gcTreeObj.tree.selected = gcTreeObj.tree.items[0];
 
-         gcTreeObj.buildSheet();
 
-         gcTreeObj.showTreeData(gcTreeObj.tree.items, gcTreeObj.setting.header);
 
-         //初始选择
 
-         let initSel = gcTreeObj.workBook.getSheet(0).getSelections()[0] ? gcTreeObj.workBook.getSheet(0).getSelections()[0] : {row: 0, rowCount: 1};
 
-         gcTreeObj.initSelection(initSel);
 
-         $.bootstrapLoading.end();
 
-     });
 
- }
 
- //项目恢复模态框标题
 
- function v_getTitle(node){
 
-     let html = '';
 
-     html += '<h5 class="modal-title">恢复 ';
 
-     if(node.data.projType === projectType.project){
 
-         html += '<i class="fa fa-cubes"></i>建设项目</h5>';
 
-     }
 
-     else if(node.data.projType === projectType.engineering){
 
-         html += '<i class="fa fa-cube"></i>单项工程</h5>';
 
-     }
 
-     else if(node.data.projType === projectType.tender){
 
-         html += '<i class="fa fa-sticky-note-o"></i>单位工程</h5>';
 
-     }
 
-     html += '<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>';
 
-     return html;
 
- }
 
- //项目恢复模态框主体
 
- function v_getMoBody(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>';
 
-         }
 
-         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 += ('<p>点“确定”按钮,确认从回收站中恢复</p>');
 
-     return html;
 
- }
 
- //单价、费率文件恢复弹出框数据
 
- function v_getFiles(type, files){
 
-     let html = '';
 
-     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>';
 
-     }
 
-     return html;
 
- }
 
- //恢复单价、费率文件后前端显示变化
 
- function v_recFiles(project, fileIds, type){
 
-     let projFiles;
 
-     if(type === fileType.unitPriceFile){
 
-         projFiles = project.data.unitPriceFiles;
 
-     }
 
-     else if(type === fileType.feeRateFile){
 
-         projFiles = project.data.feeRateFiles;
 
-     }
 
-     if(projFiles && projFiles.length > 0){
 
-         let tempFiles = [];
 
-         for(let i = 0, len = projFiles.length; i < len; i++){
 
-             let isExist = false;
 
-             for(let j = 0, jLen = fileIds.length; j < jLen; j++){
 
-                 let id = projFiles[i].id || projFiles[i].ID || null;
 
-                 if(id && id === fileIds[j]){
 
-                     isExist = true;
 
-                     break;
 
-                 }
 
-             }
 
-             if(!isExist){
 
-                 tempFiles.push(projFiles[i]);
 
-             }
 
-         }
 
-         if(type === fileType.unitPriceFile){
 
-             project.data.unitPriceFiles = tempFiles;
 
-         }
 
-         else if(type === fileType.feeRateFile){
 
-            project.data.feeRateFiles = tempFiles;
 
-         }
 
-     }
 
- }
 
- function v_removeNode(node){
 
-     gcTreeObj.remove(node);
 
-     let parent = node.parent || null;
 
-     if(parent && parent.children.length === 0 && parent.data !== undefined){
 
-         if(parent.data.projType === projectType.project && fileEmpty(parent)){
 
-             v_removeNode(parent);
 
-         }
 
-         else if(parent.data.projType !== projectType.project){
 
-             v_removeNode(parent);
 
-         }
 
-     }
 
- }
 
- function v_refreshNode(node){
 
-     if(deleted(node)){
 
-         delete node.data.deleteInfo;
 
-     }
 
-     gcTreeObj.refreshNodeData(node);
 
-     let parent = node.parent || null;
 
-     if(parent && parent.data !== undefined){
 
-         v_refreshNode(parent);
 
-     }
 
- }
 
- //将获取的回收站中的数据建虚拟树
 
- 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);
 
-         }
 
-         let next = datas[i+1] || null;
 
-         if(next){
 
-             datas[i].NextSiblingID = next.ID;
 
-         }
 
-         else {
 
-             datas[i].NextSiblingID = -1;
 
-         }
 
-     }
 
- }
 
- 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];
 
-     else {
 
-         let rst = [];
 
-         if(node.children.length > 0){
 
-             node.children.forEach(function (cNode) {
 
-                 if(cNode.children.length > 0){
 
-                     cNode.children.forEach(function (ccNode) {
 
-                        if(ccNode.data.projType === projectType.tender) rst.push(ccNode);
 
-                     });
 
-                 }
 
-                 else if(cNode.children.length === 0 && cNode.data.projType === projectType.tender){
 
-                     rst.push(cNode);
 
-                 }
 
-             });
 
-         }
 
-         return rst;
 
-     }
 
- }
 
- //获得要更新的数据(包含恢复的数据,维护项目管理树的数据)
 
- function m_getRecDatas(oprNode){
 
-     let rst = Object.create(null);
 
-     let rstProj = [], rstFile = [];
 
-     let path;
 
-     if(oprNode.data.projType === projectType.tender){
 
-         path = recPath.t;
 
-         let engineering = oprNode.parent || null;
 
-         if(!engineering) return null;
 
-         let project = engineering.parent || null;
 
-         if(!project) return null;
 
-         if(engineering && deleted(engineering)){
 
-             path = recPath.t_e;
 
-         }
 
-         //恢复建设项目
 
-         if(project && deleted(project)){
 
-             path = recPath.t_e_p;
 
-         }
 
-         //恢复单价、费率文件
 
-         rstFile = rstFile.concat(getUpdateFiles([oprNode], project));
 
-         if(path === recPath.t){
 
-             rstProj = rstProj.concat(getUpdateDatas(projectType.tender, oprNode, true, true));
 
-         }
 
-         else if(path === recPath.t_e){
 
-             rstProj = rstProj.concat(getUpdateDatas(projectType.tender, oprNode, true, false));
 
-             rstProj = rstProj.concat(getUpdateDatas(projectType.engineering, engineering, true, true));
 
-         }
 
-         else if(path === recPath.t_e_p){
 
-             rstProj = rstProj.concat(getUpdateDatas(projectType.tender, oprNode, true, false));
 
-             rstProj = rstProj.concat(getUpdateDatas(projectType.engineering, engineering, true, false));
 
-             rstProj = rstProj.concat(getUpdateDatas(projectType.project, project, true, false));
 
-         }
 
-     }
 
-     else if(oprNode.data.projType === projectType.engineering){
 
-         path = recPath.e;
 
-         let project = oprNode.parent || null;
 
-         if(!project) return null;
 
-         //恢复建设项目
 
-         if(project && deleted(project)){
 
-             path = recPath.e_p;
 
-         }
 
-         let tenders = oprNode.children;
 
-         if(tenders.length > 0){
 
-             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));
 
-         }
 
-         if(path === recPath.e){
 
-             rstProj= rstProj.concat(getUpdateDatas(projectType.engineering, oprNode, true, true));
 
-         }
 
-         else if(path === recPath.e_p){
 
-             rstProj= rstProj.concat(getUpdateDatas(projectType.engineering, oprNode, true, false));
 
-             rstProj= rstProj.concat(getUpdateDatas(projectType.project, project, true, false));
 
-         }
 
-     }
 
-     else if(oprNode.data.projType === projectType.project){
 
-         path = recPath.p;
 
-         let engineerings = oprNode.children;
 
-         if(engineerings.length > 0){
 
-             let allTenders = [], rstEngs = [];
 
-             for(let i = 0, len = engineerings.length; i < len; i++){
 
-                 //恢复单项工程
 
-                 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++){
 
-                     //恢复单位工程
 
-                     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));
 
-     }
 
-     rst.proj = rstProj;
 
-     rst.file = rstFile;
 
-     return rst;
 
- }
 
- //获得勾选的单价、费率文件的id
 
- 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);
 
-             }
 
-             let obj = Object.create(null);
 
-             obj.id = fileId;
 
-             obj.name = name;
 
-             rst.push(obj);
 
-         }
 
-     }
 
-     return rst;
 
- }
 
- function m_project(node){
 
-     if(node && node.data.projType === projectType.project) return node;
 
-     if(!node) return null;
 
-     let parent = node.parent || null;
 
-     if(!parent) return null;
 
-     if(parent && parent.data.projType === projectType.project) return parent;
 
-     let gParent = parent.parent || null;
 
-     if(!gParent) return null;
 
-     if(gParent && gParent.data.projType === projectType.project) return gParent;
 
-     return null;
 
- }
 
- //点击单价文件、费率文件下的恢复操作(确认)
 
- function e_recFiles(btn){
 
-     btn.bind('click', function () {
 
-         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 = gcTreeObj.tree.selected;
 
-         //backend
 
-         let updateDatas = [];
 
-         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){
 
-                     gcTreeObj.remove(selected);
 
-                 }
 
-                 else {
 
-                     gcTreeObj.refreshNodeData(selected);
 
-                 }
 
-             }
 
-         }
 
-     });
 
- }
 
- //点击项目下的恢复操作(确认)
 
- function e_recProj(btn){
 
-     btn.bind('click', function () {
 
-         let selected = gcTreeObj.tree.selected;
 
-         //backend
 
-         let updateObj = m_getRecDatas(selected);
 
-         let updateDatas = updateObj.proj.concat(updateObj.file);
 
-         let fileObj = getRecFileObj(updateObj.file);
 
-         //保存成功后回调front
 
-         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);
 
-         }
 
-     });
 
- }
 
- function a_getGC(callback){
 
-     CommonAjax.post('/pm/api/getGCDatas', {user_id: userID}, function (rstData) {
 
-         if(callback){
 
-             callback(rstData);
 
-         }
 
-     });
 
- }
 
- function a_rec(nodes, callback){
 
-     CommonAjax.post('/pm/api/recGC', {user_id: userID, nodes: nodes}, function (rstData) {
 
-         if(callback){
 
-             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 && 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 === parseInt(id)) || (type === fileType.feeRateFile && files[i].ID === id)){
 
-             isExist = true;
 
-             break;
 
-         }
 
-     }
 
-     return isExist;
 
- }
 
- 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){
 
-             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 && files[i].findData.ID !== undefined){
 
-                 rst_FF.push(files[i].findData.ID);
 
-             }
 
-         }
 
-     }
 
-     rst[fileType.unitPriceFile] = rst_UF;
 
-     rst[fileType.feeRateFile] = rst_FF;
 
-     return rst;
 
- }
 
- function getUpdateObj(updateType, findData, updateData){
 
-     let obj = Object.create(null);
 
-     obj.updateType = updateType;
 
-     obj.findData = findData;
 
-     obj.updateData = updateData;
 
-     return obj;
 
- }
 
- function getUpdateDatas(updateType, node, mtNID, mtPM){
 
-     let rst = [];
 
-     decDate = '(' + new Date().Format('MM-dd hh:mm:ss') + '恢复)';
 
-     let newName = delPostFix(node.data.name) + decDate;
 
-     if(updateType === projectType.tender || updateType === projectType.engineering){
 
-         //维护项目管理树
 
-         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: newName, deleteInfo: null, NextSiblingID: -1}));
 
-         }
 
-         else {
 
-             rst.push(getUpdateObj(updateType, {ID: node.data.ID}, {name: newName, deleteInfo: null}));
 
-         }
 
-     }
 
-     else if(updateType === projectType.project){
 
-         //恢复
 
-         rst.push(getUpdateObj(updateType, {ID: node.data.ID}, {deleteInfo: null, name: newName}));//NextSibling为undefined,后端处理
 
-     }
 
-     return rst;
 
- }
 
- //unitPriceFile or feeRateFile
 
- function getUpdateFiles(tenders, project){
 
-     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);
 
-             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);
 
-             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;
 
-             }
 
-         }
 
-     }
 
-     for(let uf in _unitFiles){
 
-         rstUF.push(getUpdateObj(fileType.unitPriceFile, {id: _unitFiles[uf].id}, {deleteInfo: null, name: delPostFix(_unitFiles[uf].name) + decDate}));
 
-     }
 
-     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;
 
- }
 
 
  |