|
@@ -159,29 +159,471 @@ let gcTreeSetting = {
|
|
|
}
|
|
|
]
|
|
|
};
|
|
|
+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'}
|
|
|
+ ],
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ initSelection: function (row) {
|
|
|
+ let me = this;
|
|
|
+ let node = me.tree.items[row];
|
|
|
+ me.tree.selected = node;
|
|
|
+ $(".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].row);
|
|
|
+ },
|
|
|
+ //点击恢复列,弹出恢复项目窗口
|
|
|
+ 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(sheet.getActiveRowIndex());
|
|
|
+ });
|
|
|
+ },
|
|
|
+ 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_waiting').show();
|
|
|
gc_init();
|
|
|
- Tree = null;
|
|
|
+ projTreeObj.tree = null;
|
|
|
});
|
|
|
e_recFiles($('#reFileBtn'));
|
|
|
e_recProj($('#rePojBtn'));
|
|
|
});
|
|
|
|
|
|
function gc_init(){
|
|
|
- let table = $('#gcTree');
|
|
|
- $('thead', table).remove();
|
|
|
- $('tbody', table).remove();
|
|
|
+ $.bootstrapLoading.start();
|
|
|
a_getGC(function (datas) {
|
|
|
m_buildVirtualTree(datas);
|
|
|
let normalDatas = m_VTreeToDatas(datas);
|
|
|
- gcTree = $.fn.treeTable.init(table, gcTreeSetting, normalDatas);
|
|
|
- $('#gc_waiting').hide();
|
|
|
+ gcTreeObj.tree = pmTree.createNew(gcTreeObj.setting, normalDatas);
|
|
|
+ gcTreeObj.tree.selected = gcTreeObj.tree.items[0];
|
|
|
+ gcTreeObj.buildSheet();
|
|
|
+ gcTreeObj.showTreeData(gcTreeObj.tree.items, gcTreeObj.setting.header);
|
|
|
+ //初始选择
|
|
|
+ gcTreeObj.initSelection(0);
|
|
|
+ $.bootstrapLoading.end();
|
|
|
});
|
|
|
}
|
|
|
|
|
@@ -277,7 +719,7 @@ function v_recFiles(project, fileIds, type){
|
|
|
}
|
|
|
|
|
|
function v_removeNode(node){
|
|
|
- gcTree.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)){
|
|
@@ -293,7 +735,7 @@ function v_refreshNode(node){
|
|
|
if(deleted(node)){
|
|
|
delete node.data.deleteInfo;
|
|
|
}
|
|
|
- gcTree.refreshNodesDom([node]);
|
|
|
+ gcTreeObj.refreshNodeData(node);
|
|
|
let parent = node.parent || null;
|
|
|
if(parent && parent.data !== undefined){
|
|
|
v_refreshNode(parent);
|
|
@@ -495,7 +937,7 @@ function e_recFiles(btn){
|
|
|
recIds.push(i.id);
|
|
|
}
|
|
|
let type = $('[name = "fileItems"]:checked').attr('fileType');
|
|
|
- let selected = gcTree.selected();
|
|
|
+ let selected = gcTreeObj.tree.selected;
|
|
|
//backend
|
|
|
let updateDatas = [];
|
|
|
for(let i = 0, len = recObjs.length; i < len; i++){
|
|
@@ -516,20 +958,20 @@ function e_recFiles(btn){
|
|
|
delete selected.data.deleteInfo;
|
|
|
}
|
|
|
if(fileEmpty(selected) && selected.children.length === 0){
|
|
|
- gcTree.removeNode(selected);
|
|
|
+ gcTreeObj.remove(selected);
|
|
|
}
|
|
|
else {
|
|
|
- gcTree.refreshNodesDom([selected]);
|
|
|
+ gcTreeObj.refreshNodeData(selected);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
-//点击项目下的恢复操作(确认
|
|
|
+//点击项目下的恢复操作(确认)
|
|
|
function e_recProj(btn){
|
|
|
btn.bind('click', function () {
|
|
|
- let selected = gcTree.selected();
|
|
|
+ let selected = gcTreeObj.tree.selected;
|
|
|
//backend
|
|
|
let updateObj = m_getRecDatas(selected);
|
|
|
let updateDatas = updateObj.proj.concat(updateObj.file);
|