/** * 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'}; const gcTreeObj = { tree: null, workBook: null, setting: { tree: { id: 'ID', pid: 'ParentID', nid: 'NextSiblingID', rootId: -1, autoUpdate: false }, header: [ {name: '工程列表', dataCode: 'name', width: 0.5, rateWidth: 0.5, vAlign: 'center', hAlign: 'left'}, {name: '删除日期', dataCode: 'deleteDateTime', width: 0.1, rateWidth: 0.1, vAlign: 'center', hAlign: 'left'}, {name: '创建日期', dataCode: 'createDateTime', width: 0.1, rateWidth: 0.1, vAlign: 'center', hAlign: 'left'}, {name: '恢复', dataCode: 'recovery', width: 0.05, rateWidth: 0.05, vAlign: 'center', hAlign: 'left'}, {name: '彻底删除', dataCode: 'delete', width: 0.05, rateWidth: 0.05, vAlign: 'center', hAlign: 'left'}, {name: '单价文件', dataCode: 'unitPriceFile', width: 0.05, rateWidth: 0.05, vAlign: 'center', hAlign: 'left'}, {name: '单价文件-清除', dataCode: 'unitPriceFile_delete', width: 0.05, rateWidth: 0.05, vAlign: 'center', hAlign: 'left'}, {name: '费率文件', dataCode: 'feeRateFile', width: 0.05, rateWidth: 0.05, vAlign: 'center', hAlign: 'left'}, {name: '费率文件-清除', dataCode: 'feeRateFile_delete', width: 0.05, rateWidth: 0.05, vAlign: 'center', hAlign: 'left'} ], //恢复和彻底删除字体色 style: { recForeColor: '#007bff', delForeColor: '#dc3545' }, options: { tabStripVisible: false, allowContextMenu: 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 }; let workBookWidth = getWorkBookWidth(); sheet.setColumnCount(headers.length); sheet.setRowHeight(0, 40, GC.Spread.Sheets.SheetArea.colHeader); for(let i = 0, len = headers.length; i < len; i++){ sheet.setColumnWidth(i, workBookWidth * headers[i].width, GC.Spread.Sheets.SheetArea.colHeader); if(headers[i].dataCode === 'unitPriceFile' || headers[i].dataCode === 'feeRateFile'){ //合并列 sheet.addSpan(0, i, 1, 2, GC.Spread.Sheets.SheetArea.colHeader); } if(headers[i].dataCode === 'unitPriceFile_delete' || headers[i].dataCode === 'feeRateFile_delete'){ continue; } sheet.setValue(0, i, headers[i].name, GC.Spread.Sheets.SheetArea.colHeader); } }; me.renderSheetFuc(sheet, fuc); }, buildSheet: function () { if(!this.workBook){ this.workBook = new GC.Spread.Sheets.Workbook($('#gcSpread')[0], {sheetCount: 1}); sheetCommonObj.spreadDefaultStyle(this.workBook); 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, projTreeObj.setting.style.defalutBackColor); } //设置选中行底色 if(newSel){ me.setSelStyle(newSel, projTreeObj.setting.style.selectedColor); } }, onSelectionChanging: function (sender, args) { let me = gcTreeObj; me.initSelection(args.newSelections[0], args.oldSelections[0]); }, //点击恢复列,弹出恢复项目窗口 oprProj: function (modalId, node) { let tenderNodes = m_getTenders(node); let type = modalId === '#rePoj' ? 'recovery' : 'delete'; $(`${modalId} .modal-header`).empty(); $('p', `${modalId} .modal-body`).remove(); $(`${modalId} .modal-header`).html(v_getTitle(type, node)); $(`${modalId} .modal-body`).html(v_getMoBody(type, node, tenderNodes)); $(`${modalId}`).modal('show'); }, //点击单价文件恢复,弹出恢复单价文件窗口 recoveryUnitPrc: function (node) { let unitPriceFiles = node.data.unitPriceFiles; let tenders = m_getTenders(node); $('#reFile h5').text('恢复单价文件'); $('tr', '#reFile tbody').remove(); $('#reFile tbody').html(v_getFiles(fileType.unitPriceFile, unitPriceFiles, tenders, 'recovery')); $('#reFile').modal('show'); }, recoveryFeeRate: function (node) { let feeRateFiles = node.data.feeRateFiles; let tenders = m_getTenders(node); $('#reFile h5').text('恢复费率文件'); $('tr', '#reFile tbody').remove(); $('#reFile tbody').html(v_getFiles(fileType.feeRateFile, feeRateFiles, tenders, 'recovery')); $('#reFile').modal('show'); }, //点击单价文件清除,弹出清除单价文件窗口 deleteUnitPrc: function (node) { let unitPriceFiles = node.data.unitPriceFiles; let tenders = m_getTenders(node); $('#delFile h5').text('彻底删除单价文件'); $('tr', '#delFile tbody').remove(); $('#delFile tbody').html(v_getFiles(fileType.unitPriceFile, unitPriceFiles, tenders, 'delete')); $('#delFile').modal('show'); }, deleteFeeRate: function (node) { let feeRateFiles = node.data.feeRateFiles; let tenders = m_getTenders(node); $('#delFile h5').text('彻底删除费率文件'); $('tr', '#delFile tbody').remove(); $('#delFile tbody').html(v_getFiles(fileType.feeRateFile, feeRateFiles, tenders, 'delete')); $('#delFile').modal('show'); }, getTreeNodeCell: function (tree) { let indent = 20; let levelIndent = -5; 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 const lineColor = '#ababab'; if (showTreeLine) { // Draw Horizontal Line if (centerX < x + w) { drawLine(ctx, centerX, centerY, Math.min(x1, x + w), centerY, lineColor); 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, lineColor); } else { drawLine(ctx, centerX, y, centerX, y1, lineColor); } } } // 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, lineColor); } } 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; w = w - (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) { let info = {x: x, y: y, row: context.row, col: context.col, cellStyle: cellStyle, cellRect: cellRect, sheetArea: context.sheetArea}; let node = tree.items[info.row]; let offset = -1; let centerX = info.cellRect.x + offset + node.depth() * indent + node.depth() * levelIndent + indent / 2; let text = context.sheet.getText(info.row, info.col); let value = context.sheet.getValue(info.row, info.col); let acStyle = context.sheet.getActualStyle(info.row, info.col), zoom = context.sheet.zoom(); let textLength = this.getAutoFitWidth(value, text, acStyle, zoom, {sheet: context.sheet, row: info.row, col: info.col, sheetArea: GC.Spread.Sheets.SheetArea.viewport}); if(info.x > centerX + halfBoxLength && info.x < centerX + halfBoxLength + imgWidth + indent/2+3 + textLength){ info.isReservedLocation = true; } return info; }; 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 - 2 && hitinfo.x <= centerX + halfBoxLength + 2 && hitinfo.y >= centerY - halfBoxLength - 2 && hitinfo.y <= centerY + halfBoxLength + 2) { 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(); } }; TreeNodeCellType.prototype.processMouseEnter = function (hitinfo) { let text = hitinfo.sheet.getText(hitinfo.row, hitinfo.col); let value = hitinfo.sheet.getValue(hitinfo.row, hitinfo.col); let tag = hitinfo.sheet.getTag(hitinfo.row, hitinfo.col); let acStyle = hitinfo.sheet.getActualStyle(hitinfo.row, hitinfo.col), zoom = hitinfo.sheet.zoom(); let node = tree.items[hitinfo.row]; let nodeIndent = node ? (node.depth() + 1) * indent + node.depth() * levelIndent + imgWidth + 3 : 0; let textLength = this.getAutoFitWidth(value, text, acStyle, zoom, {sheet: hitinfo.sheet, row: hitinfo.row, col: hitinfo.col, sheetArea: GC.Spread.Sheets.SheetArea.viewport}); let cellWidth = hitinfo.sheet.getCell(-1, hitinfo.col).width(); if(textLength > cellWidth - nodeIndent){ TREE_SHEET_HELPER.showTipsDiv(text,{pos: {}},hitinfo); } }; TreeNodeCellType.prototype.processMouseLeave = function (hitinfo) { TREE_SHEET_HELPER.tipDiv = 'hide'; if (TREE_SHEET_HELPER._toolTipElement) { $(TREE_SHEET_HELPER._toolTipElement).hide(); TREE_SHEET_HELPER._toolTipElement = null; }; TREE_SHEET_HELPER.tipDivCheck();//延时检查:当tips正在show的时候,就调用了hide方法,会导致tips一直存在,所以设置一个超时处理 } 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.oprProj('#rePoj', node); } //清除 else if(dataCode === 'delete'){ gcTreeObj.oprProj('#delPoj', node) } //恢复单价文件 else if(dataCode === 'unitPriceFile'){ gcTreeObj.recoveryUnitPrc(node); } //清除单价文件 else if(dataCode === 'unitPriceFile_delete'){ gcTreeObj.deleteUnitPrc(node); } //恢复费率文件 else if(dataCode === 'feeRateFile'){ gcTreeObj.recoveryFeeRate(node); } //清除费率文件 else if(dataCode === 'feeRateFile_delete'){ gcTreeObj.deleteFeeRate(node); } } }; MyBaseCell.prototype.processMouseMove = function (hitInfo) { let dataCode = gcTreeObj.setting.header[hitInfo.col]['dataCode']; if(dataCode === 'recovery' || dataCode === 'delete' || dataCode === 'unitPriceFile' || dataCode === 'unitPriceFile_delete' || dataCode === 'feeRateFile' || dataCode === 'feeRateFile_delete'){ let sheet = hitInfo.sheet; let div = sheet.getParent().getHost(); let canvasId = div.id + "vp_vp"; 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 === 'delete'){ if(deleted(node)){ value = '彻底删除'; } } else if(dataCode === 'unitPriceFile'){ if(node.data.projType === projectType.project && node.data.unitPriceFiles !== undefined && node.data.unitPriceFiles.length > 0){ value = '恢复'; } } else if(dataCode === 'unitPriceFile_delete'){ if(node.data.projType === projectType.project && node.data.unitPriceFiles !== undefined && node.data.unitPriceFiles.length > 0){ value = '彻底删除'; } } else if(dataCode === 'feeRateFile'){ if(node.data.projType === projectType.project && node.data.feeRateFiles !== undefined && node.data.feeRateFiles.length > 0){ value = '恢复'; } } else if(dataCode === 'feeRateFile_delete'){ if(node.data.projType === projectType.project && node.data.feeRateFiles !== undefined && node.data.feeRateFiles.length > 0){ value = '彻底删除'; } } else { value = node.data[dataCode] ? node.data[dataCode] : ''; } 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; if(dataCode === 'recovery' || dataCode === 'unitPriceFile' || dataCode === 'feeRateFile'){ let style = new GC.Spread.Sheets.Style(); style.foreColor = me.setting.style.recForeColor; sheet.setStyle(-1, j, style); } else if(dataCode === 'delete' || dataCode === 'unitPriceFile_delete' || dataCode === 'feeRateFile_delete'){ let style = new GC.Spread.Sheets.Style(); style.foreColor = me.setting.style.delForeColor; sheet.setStyle(-1, j, style); } 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(); if(projTreeObj.workBook){ projTreeObj.workBook.destroy(); projTreeObj.workBook = null; } projTreeObj.tree = null; }); e_recFiles($('#reFileBtn')); e_delFiles($('#delFileBtn')); e_recProj($('#rePojBtn')); e_delProj($('#delPojBtn')); }); 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); autoFlashHeight(); gcTreeObj.workBook.refresh(); }); } //项目恢复模态框标题 function v_getTitle(type, node){ let html = ''; html += type === 'recovery' ? '
恢复后将重命名为 ' + recName + '
'; } else { if(oprNode.data.projType === projectType.project){ html += '' + oprNode.data.name + '下的单位工程都将恢复,恢复后将重命名为
'; } else if(oprNode.data.projType === projectType.engineering){ html += '' + oprNode.data.name + '下的单位工程都将恢复,恢复后将重命名为
'; } html += (''); 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 += '' + recName + '、'; } html = html.slice(0, html.length - 1); html += ('
'); } html += ('点“确定”按钮,确认从回收站中恢复。
'); } else{ html += ('点“确定”按钮,确认彻底删除数据。
'); } return html; } //单价、费率文件恢复弹出框数据 function v_getFiles(type, files, tenders, opr = null){ let html = ''; function hasTheFile(tenders, fileId, fileType){ for(let tender of tenders){ let fileAttr = fileType === 'UnitPriceFile' ? 'unitPriceFile' : 'feeFile'; if(tender.data.property[fileAttr]['id'] == fileId){ return true; } } return false; } for(let i = 0, len = files.length; i < len; i ++){ let recName = type === fileType.unitPriceFile ? files[i].name : files[i].name; let fileId = type === fileType.unitPriceFile ? files[i].id : files[i].ID; let recTimeA = formatDate(new Date(files[i].deleteInfo.deleteDateTime), 'yyyy-MM-dd'); let recTimeB = formatDate(new Date(files[i].deleteInfo.deleteDateTime), 'HH:mm:ss'); if(opr && opr === 'delete'){ //还被引用,不可删除 if(hasTheFile(tenders, fileId, type)){ html += '