|
@@ -54,6 +54,28 @@ let BlockController = {
|
|
|
}
|
|
}
|
|
|
return false;
|
|
return false;
|
|
|
},
|
|
},
|
|
|
|
|
+ // 恢复删除节点有效性
|
|
|
|
|
+ recoverBlockDisabled: function () {
|
|
|
|
|
+ if (projectReadOnly) {
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ const recycle = getLocalCache('project_recycle');
|
|
|
|
|
+ if (!recycle) {
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ const recycleObj = JSON.parse(recycle);
|
|
|
|
|
+ const firstData = recycleObj.datas.length ? recycleObj.datas[0] : null;
|
|
|
|
|
+ if (!firstData || firstData.projectID !== projectObj.project.ID()) {
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ const parentID = firstData.sourceType === projectObj.project.Bills.getSourceType() ? firstData.ParentID : firstData.billsItemID;
|
|
|
|
|
+ const parent = projectObj.project.mainTree.findNode(parentID);
|
|
|
|
|
+ // parentID为-1时,为大项费用
|
|
|
|
|
+ if (parentID !== -1 && !parent) {
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+ return false;
|
|
|
|
|
+ },
|
|
|
haveCalcBase : function (node) {
|
|
haveCalcBase : function (node) {
|
|
|
if(node.data.calcBase ==null||node.data.calcBase ==undefined|| node.data.calcBase == ""){
|
|
if(node.data.calcBase ==null||node.data.calcBase ==undefined|| node.data.calcBase == ""){
|
|
|
return false;
|
|
return false;
|
|
@@ -77,10 +99,9 @@ let BlockController = {
|
|
|
}
|
|
}
|
|
|
return null;
|
|
return null;
|
|
|
},
|
|
},
|
|
|
-
|
|
|
|
|
- copyBlock:function (selection) {
|
|
|
|
|
|
|
+ extractBlockData: function (selection) {
|
|
|
let startTime = +new Date();
|
|
let startTime = +new Date();
|
|
|
- let blockOjb = {
|
|
|
|
|
|
|
+ let blockObj = {
|
|
|
compilationID:projectObj.project.projectInfo.compilation,
|
|
compilationID:projectObj.project.projectInfo.compilation,
|
|
|
datas:[]
|
|
datas:[]
|
|
|
};
|
|
};
|
|
@@ -95,21 +116,30 @@ let BlockController = {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
if(firstNode.sourceType == projectObj.project.Bills.getSourceType()){
|
|
if(firstNode.sourceType == projectObj.project.Bills.getSourceType()){
|
|
|
- blockOjb.firstNodeType = firstNode.data.type;
|
|
|
|
|
|
|
+ // 特殊处理大项费用,因为DXFY在billType中为1,与blockType中的RATION冲突了
|
|
|
|
|
+ blockObj.firstNodeType = firstNode.data.type === billType.DXFY ? blockType.DXFY : firstNode.data.type;
|
|
|
}else if(firstNode.sourceType == projectObj.project.Ration.getSourceType()){
|
|
}else if(firstNode.sourceType == projectObj.project.Ration.getSourceType()){
|
|
|
- blockOjb.firstNodeType = blockType.RATION;
|
|
|
|
|
|
|
+ blockObj.firstNodeType = blockType.RATION;
|
|
|
}
|
|
}
|
|
|
- blockOjb.isFBFX = projectObj.project.Bills.isFBFX(firstNode);
|
|
|
|
|
|
|
+ blockObj.isFBFX = projectObj.project.Bills.isFBFX(firstNode);
|
|
|
let ration_glj_Map = _.groupBy(projectObj.project.ration_glj.datas, 'rationID');
|
|
let ration_glj_Map = _.groupBy(projectObj.project.ration_glj.datas, 'rationID');
|
|
|
for(let cNode of copyNodes){
|
|
for(let cNode of copyNodes){
|
|
|
- blockOjb.datas.push(this.getNodeDatas(cNode,ration_glj_Map));
|
|
|
|
|
|
|
+ blockObj.datas.push(this.getNodeDatas(cNode,ration_glj_Map));
|
|
|
}
|
|
}
|
|
|
let getDataTime = +new Date();
|
|
let getDataTime = +new Date();
|
|
|
console.log(`复制所用时间——${getDataTime - startTime}`);
|
|
console.log(`复制所用时间——${getDataTime - startTime}`);
|
|
|
- blockOjb.copyTime = +new Date();//设置复制时间,可以用来做过期处理
|
|
|
|
|
- setLocalCache('project_block',JSON.stringify(blockOjb));
|
|
|
|
|
|
|
+ blockObj.copyTime = +new Date();//设置复制时间,可以用来做过期处理
|
|
|
let endTime = +new Date();
|
|
let endTime = +new Date();
|
|
|
console.log(`复制所用时间——${endTime - startTime}`);
|
|
console.log(`复制所用时间——${endTime - startTime}`);
|
|
|
|
|
+ return blockObj;
|
|
|
|
|
+ },
|
|
|
|
|
+ copyBlock:function (selection) {
|
|
|
|
|
+ const block = this.extractBlockData(selection);
|
|
|
|
|
+ setLocalCache('project_block', JSON.stringify(block));
|
|
|
|
|
+ },
|
|
|
|
|
+ recycleBlock: function (selection) {
|
|
|
|
|
+ const block = this.extractBlockData(selection);
|
|
|
|
|
+ setLocalCache('project_recycle', JSON.stringify(block));
|
|
|
},
|
|
},
|
|
|
getNodeDatas : function (node,ration_glj_Map) {
|
|
getNodeDatas : function (node,ration_glj_Map) {
|
|
|
let data = node.data;
|
|
let data = node.data;
|
|
@@ -147,7 +177,21 @@ let BlockController = {
|
|
|
this.confirmPaste(blockData,selected,position);
|
|
this.confirmPaste(blockData,selected,position);
|
|
|
//do paste
|
|
//do paste
|
|
|
},
|
|
},
|
|
|
-
|
|
|
|
|
|
|
+ // 恢复删除节点
|
|
|
|
|
+ recoverBlock: function () {
|
|
|
|
|
+ const recycle = JSON.parse(getLocalCache('project_recycle'));
|
|
|
|
|
+ const firstData = recycle.datas[0];
|
|
|
|
|
+ const parentID = firstData.sourceType === projectObj.project.Bills.getSourceType() ? firstData.ParentID : firstData.billsItemID;
|
|
|
|
|
+ // 恢复到父节点最末子项
|
|
|
|
|
+ if (parentID !== -1) {
|
|
|
|
|
+ const parent = projectObj.project.mainTree.findNode(parentID);
|
|
|
|
|
+ this.confirmPaste(recycle, parent, 'sub');
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 恢复到最末根节点后项
|
|
|
|
|
+ const lastRoot = projectObj.project.mainTree.roots[projectObj.project.mainTree.roots.length - 1];
|
|
|
|
|
+ this.confirmPaste(recycle, lastRoot, 'next');
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
initOptionDiv:function (selected,blockData) {
|
|
initOptionDiv:function (selected,blockData) {
|
|
|
let Bills = projectObj.project.Bills;
|
|
let Bills = projectObj.project.Bills;
|
|
|
if( blockData.firstNodeType == blockType.RATION){//如果剪切板中是复制的定额块
|
|
if( blockData.firstNodeType == blockType.RATION){//如果剪切板中是复制的定额块
|
|
@@ -344,7 +388,9 @@ let BlockController = {
|
|
|
let sels = projectObj.mainController.sheet.getSelections();
|
|
let sels = projectObj.mainController.sheet.getSelections();
|
|
|
//设置选中并更新下方显示
|
|
//设置选中并更新下方显示
|
|
|
projectObj.mainController.setTreeSelected(firstNode);
|
|
projectObj.mainController.setTreeSelected(firstNode);
|
|
|
- projectObj.mainController.sheet.setSelection(firstNode.serialNo(), sels[0].col, 1, 1);
|
|
|
|
|
|
|
+ const serialNo = firstNode.serialNo();
|
|
|
|
|
+ projectObj.mainController.sheet.setSelection(serialNo, sels[0].col, 1, 1);
|
|
|
|
|
+ projectObj.mainController.sheet.showRow(serialNo, GC.Spread.Sheets.VerticalPosition.center);
|
|
|
let bottomNodes = [];
|
|
let bottomNodes = [];
|
|
|
for (let node of newNodes){
|
|
for (let node of newNodes){
|
|
|
if ((!node.children) || (node.children && node.children.length == 0)){
|
|
if ((!node.children) || (node.children && node.children.length == 0)){
|