|
@@ -31,6 +31,12 @@ var projectObj = {
|
|
|
pageCCOprObj.clearData();
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ // for test interface. CSLAAAAA
|
|
|
+/* node.data.gljList = project.ration_glj.getGljArrByRation(node.data.ID);
|
|
|
+ node.data.isSubcontract = true;
|
|
|
+ let bname = '分包人工工日';
|
|
|
+ alert(bname + ': ' + rationCalcBases[bname](node));*/
|
|
|
},
|
|
|
refreshBaseActn: function (tree) {
|
|
|
let setButtonValid = function (valid, btn) {
|
|
@@ -41,66 +47,89 @@ var projectObj = {
|
|
|
}
|
|
|
};
|
|
|
let selected = tree.selected, that = projectObj;
|
|
|
+
|
|
|
let canUpLevel = function (node) {
|
|
|
- if (selected && selected.depth() > 0 && selected.canUpLevel()) {
|
|
|
- if (selected.sourceType === that.project.Bills.getSourceType()) {
|
|
|
- return (!selected.nextSibling) || (selected.children.length === 0) || (selected.source.children.length > 0);
|
|
|
- } else {
|
|
|
+ if(!node){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(node.depth()<=1){//焦点行是树结构的第一/二层节点,灰显。
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(node.sourceType !== that.project.Bills.getSourceType()){//焦点行是定额/量价/工料机,灰显。
|
|
|
+ return false;
|
|
|
+ }else {
|
|
|
+ if(node.data.type == billType.FX){//是分项,灰显。
|
|
|
return false;
|
|
|
}
|
|
|
- } else {
|
|
|
- return false;
|
|
|
+ if(node.data.type == billType.FB&&node.nextSibling&&node.children.length>0){//焦点行是分部有后兄弟,有子项.
|
|
|
+ if(node.children[0].data.type==billType.FX){ //焦点行子项是分项
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(node.data.type == billType.BILL &&node.nextSibling){//焦点行是清单有后兄弟
|
|
|
+ if(node.data.calcBase&&node.data.calcBase!=""){//有基数计算
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(node.children.length>0&&node.children[0].sourceType !== that.project.Bills.getSourceType()){//有子项,并且子项不是清单
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+ return true;
|
|
|
};
|
|
|
let canDownLevel = function (node) {
|
|
|
- if (selected && selected.depth() > 0 && selected.canDownLevel()) {
|
|
|
- if (selected.sourceType === that.project.Bills.getSourceType()) {
|
|
|
- return (selected.preSibling.children.length === 0) || (selected.preSibling.source.children.length > 0);
|
|
|
- } else {
|
|
|
- return false;
|
|
|
- }
|
|
|
- } else {
|
|
|
+ if(!node){
|
|
|
return false;
|
|
|
}
|
|
|
- };
|
|
|
- let canDelete = function (node,m_selection) {
|
|
|
- if (node) {
|
|
|
- if (node.sourceType === that.project.Bills.getSourceType()) {
|
|
|
- if(node.data.type == billType.DXFY&&node.data.isAdd!=1){
|
|
|
+ if(node.depth()==0){//焦点行是树结构的第一层节点,灰显。
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(node.sourceType !== that.project.Bills.getSourceType()) {//焦点行是定额/量价/工料机,灰显。
|
|
|
+ return false;
|
|
|
+ }else {
|
|
|
+ if(node.data.type == billType.FX){//是分项,灰显。
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(!node.preSibling){//无前兄弟,灰显
|
|
|
+ return false;
|
|
|
+ }else if(node.preSibling.data.calcBase&&node.preSibling.data.calcBase!=""){//前兄弟有基数计算
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ if(node.preSibling.children.length>0){//前兄弟有子项,子项是分项,灰显。
|
|
|
+ if(node.data.type==billType.FB&&node.preSibling.children[0].data.type==billType.FX){//焦点行是分部前兄弟有子项,子项是分项,灰显。
|
|
|
return false;
|
|
|
}
|
|
|
+ if(node.data.type==billType.BILL&&node.preSibling.children[0].sourceType !== that.project.Bills.getSourceType()){//焦点行是清单,子项不是清单
|
|
|
+ return false
|
|
|
+ }
|
|
|
}
|
|
|
- if(m_selection!=true&&node.sourceType === that.project.ration_glj.getSourceType()){//多选的时候不做这一项判断
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ };
|
|
|
+ let canUpMove = function (node) {
|
|
|
+ if(node&&node.preSibling){//有前兄弟
|
|
|
+ if(node.sourceType==that.project.Bills.getSourceType()&&node.data.type == billType.DXFY&&node.data.isAdd!==1){
|
|
|
return false;
|
|
|
}
|
|
|
- return true;
|
|
|
- } else {
|
|
|
- return false;
|
|
|
+ return true
|
|
|
}
|
|
|
+ return false
|
|
|
};
|
|
|
- let canDelete_m = function (selection) {
|
|
|
- for(let i =0;i<selection.rowCount;i++){
|
|
|
- if(i==0&&tree.items[selection.row].sourceType === that.project.ration_glj.getSourceType()){
|
|
|
- return false
|
|
|
- }
|
|
|
- if(canDelete(tree.items[selection.row+i],true)==false){
|
|
|
- return false
|
|
|
+ let canDownMove = function (node) {
|
|
|
+ if(node&&node.nextSibling){
|
|
|
+ if(node.sourceType==that.project.Bills.getSourceType()&&node.data.type == billType.DXFY&&node.data.isAdd!==1){
|
|
|
+ return false;
|
|
|
}
|
|
|
+ return true;
|
|
|
}
|
|
|
- return true
|
|
|
+ return false
|
|
|
};
|
|
|
-
|
|
|
- let selections = projectObj.mainSpread.getActiveSheet().getSelections();
|
|
|
- if(selections[0].rowCount==1){//选中单行
|
|
|
- setButtonValid(canDelete(selected), $('#delete'));
|
|
|
- }else {
|
|
|
- setButtonValid(canDelete_m(selections[0]), $('#delete'));
|
|
|
- }
|
|
|
+
|
|
|
+ setButtonValid(ifCanDelete(), $('#delete'));
|
|
|
setButtonValid(canUpLevel(selected), $('#upLevel'));
|
|
|
setButtonValid(canDownLevel(selected), $('#downLevel'));
|
|
|
- setButtonValid(selected && (selected.depth() > 0) && selected.canUpMove(), $('#upMove'));
|
|
|
- setButtonValid(selected && (selected.depth() > 0) && selected.canDownMove(), $('#downMove'));
|
|
|
-
|
|
|
+ setButtonValid(canUpMove(selected) , $('#upMove'));
|
|
|
+ setButtonValid(canDownMove(selected), $('#downMove'));
|
|
|
},
|
|
|
checkCommonField: function (editingText, colSetting) {
|
|
|
let value;
|
|
@@ -157,55 +186,11 @@ var projectObj = {
|
|
|
return this.checkCommonField(editingText, colSetting);
|
|
|
}
|
|
|
},
|
|
|
- /*updateAndReCalculate: function (node, fieldName, value) {
|
|
|
- let project = projectObj.project, calc = new BillsCalcHelper(project), nodes = [];
|
|
|
- let getNodes = function (node) {
|
|
|
- let cur = node, nodes = [];
|
|
|
- while (cur) {
|
|
|
- nodes.push(cur);
|
|
|
- cur = cur.parent;
|
|
|
- }
|
|
|
- return nodes;
|
|
|
- }
|
|
|
- if (value) {
|
|
|
- value = value.toDecimal(projectObj.project.Decimal.common.quantity);
|
|
|
- }
|
|
|
- if (node.sourceType === projectObj.project.Bills.getSourceType()) {
|
|
|
- calcFees.setFee(node.data, fieldName, value);
|
|
|
- calc.calcNode(node, true);
|
|
|
- nodes = getNodes(node);
|
|
|
- project.Bills.updateNodes(nodes, true);
|
|
|
- }
|
|
|
- else if (node.sourceType === projectObj.project.VolumePrice.getSourceType()) {
|
|
|
- project.beginUpdate('VolumePrice_QuantityChange');
|
|
|
- project.VolumePrice.updateField(node.source, fieldName, value, false);
|
|
|
- calc.calcNode(node.parent, true);
|
|
|
- nodes = getNodes(node.parent);
|
|
|
- project.Bills.updateNodes(nodes, false);
|
|
|
- project.endUpdate();
|
|
|
- nodes.push(node);
|
|
|
- }
|
|
|
- else if (node.sourceType === projectObj.project.Ration.getSourceType()) {
|
|
|
- project.beginUpdate('Ration_QuantityChange');
|
|
|
- calcFees.setFee(node.data, fieldName, value);
|
|
|
- node.data.gljList = project.ration_glj.getGljArrByRation(node.data.ID);
|
|
|
- // calcProgram.calculate的传参必须是cacheNode类型,故无法将计算放在Ration模块中。
|
|
|
- project.calcProgram.calculate(node);
|
|
|
- project.Ration.updateRation(node.source, false); // 加入待存储队列
|
|
|
- calc.calcNode(node.parent, true); //
|
|
|
- nodes = getNodes(node.parent);
|
|
|
- project.Bills.updateNodes(nodes, false);
|
|
|
- project.endUpdate();
|
|
|
- nodes.push(node);
|
|
|
- }
|
|
|
- this.mainController.refreshTreeNode(nodes, false);
|
|
|
- calc = null;
|
|
|
- },*/
|
|
|
updateBillsCode: function (node, value) {
|
|
|
let project = projectObj.project;
|
|
|
let stdMatchCode, formatCode, matchs;
|
|
|
let searchStdBillsAndUpdate = function (stdCode, formatCode) {
|
|
|
- let orgCode = node.data.code.substr(0, 9);
|
|
|
+ let orgCode = node.data.code?node.data.code.substr(0, 9):"";
|
|
|
if (stdCode === orgCode || projectInfoObj.projectInfo.engineeringInfo.bill_lib.length === 0) {
|
|
|
project.Bills.updateField(node.source, 'code', formatCode, true);
|
|
|
projectObj.mainController.refreshTreeNode([node], false);
|
|
@@ -232,23 +217,27 @@ var projectObj = {
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
- if (value&&value.length === 9 && /^[\d]+$/.test(value)) {
|
|
|
- stdMatchCode = value;
|
|
|
- formatCode = project.Bills.newFormatCode(stdMatchCode);
|
|
|
- searchStdBillsAndUpdate(stdMatchCode, formatCode);
|
|
|
- } else if (value&&value.length === 12 && /^[\d]+$/.test(value)) {
|
|
|
- stdMatchCode = value.substr(0, 9);
|
|
|
- matchs = project.Bills.sameStdCode(stdMatchCode, node.data.code);
|
|
|
- if (matchs.indexOf(value) === -1) {
|
|
|
- searchStdBillsAndUpdate(stdMatchCode, value);
|
|
|
- } else if (confirm('已存在该编码的清单,是否继续?')) {
|
|
|
- formatCode = project.Bills.newFormatCode(stdMatchCode, node.data.code);
|
|
|
+ if(node.data.type==billType.FX||node.data.type==billType.BILL){
|
|
|
+ if (value&&value.length === 9 && /^[\d]+$/.test(value)) {
|
|
|
+ stdMatchCode = value;
|
|
|
+ formatCode = project.Bills.newFormatCode(stdMatchCode);
|
|
|
searchStdBillsAndUpdate(stdMatchCode, formatCode);
|
|
|
+ return;
|
|
|
+ } else if (value&&value.length === 12 && /^[\d]+$/.test(value)) {
|
|
|
+ stdMatchCode = value.substr(0, 9);
|
|
|
+ matchs = project.Bills.sameStdCode(stdMatchCode, node.data.code);
|
|
|
+ if (matchs.indexOf(value) === -1) {
|
|
|
+ searchStdBillsAndUpdate(stdMatchCode, value);
|
|
|
+ } else if (confirm('已存在该编码的清单,是否继续?')) {
|
|
|
+ formatCode = project.Bills.newFormatCode(stdMatchCode, node.data.code);
|
|
|
+ searchStdBillsAndUpdate(stdMatchCode, formatCode);
|
|
|
+ return;
|
|
|
+ }
|
|
|
}
|
|
|
- } else {
|
|
|
- project.Bills.updateField(node.source, 'code', value, true);
|
|
|
- this.mainController.refreshTreeNode([node], false);
|
|
|
- }
|
|
|
+ }
|
|
|
+ project.Bills.updateField(node.source, 'code', value, true);
|
|
|
+ this.mainController.refreshTreeNode([node], false);
|
|
|
+
|
|
|
},
|
|
|
updateRationCode: function (node, value) {
|
|
|
if (projectInfoObj.projectInfo.engineeringInfo.ration_lib.length === 0) {
|
|
@@ -280,30 +269,31 @@ var projectObj = {
|
|
|
};*/
|
|
|
}
|
|
|
},
|
|
|
- updateCellValue: function (node, value, colSetting) {
|
|
|
- console.log(`node`);
|
|
|
- console.log(node);
|
|
|
+ updateCellValue: function (node, value, colSetting,editingText) {
|
|
|
let project = projectObj.project, fieldName = colSetting.data.field;
|
|
|
if(node.sourceType==project.ration_glj.getSourceType()){
|
|
|
project.ration_glj.updateFromMainSpread(value,node,fieldName);
|
|
|
- }else if(treeNodeTools.isGljRation(node)){
|
|
|
+ }
|
|
|
+ else if(calcTools.isGljRation(node)){
|
|
|
gljOprObj.updateRationTypeGLJ(value,node,fieldName);
|
|
|
- } else if (value !== calcFees.getFee(node.data, fieldName)||fieldName == 'quantity') {//工程量需要进行转换,所以做特殊处理
|
|
|
- if (fieldName === 'code' && !treeNodeTools.isVolumePrice(node)) {
|
|
|
+ }
|
|
|
+ else if (value !== calcFees.getFee(node.data, fieldName)||fieldName == 'quantity') {//工程量需要进行转换,所以做特殊处理
|
|
|
+ if (fieldName === 'code' && !calcTools.isVolumePrice(node)) {
|
|
|
projectObj.updateCode(node, value);
|
|
|
}
|
|
|
else if(fieldName ==='feeRate'){
|
|
|
project.FeeRate.updateFeeRateFromBills(value,node,fieldName);
|
|
|
- }else if(fieldName ==='contain'){//编辑含量
|
|
|
+ }
|
|
|
+ else if(fieldName ==='contain'){//编辑含量
|
|
|
project.Ration.updateContain(value,node);
|
|
|
}
|
|
|
else if (fieldName === 'quantity' || fieldName === 'marketUnitFee' || fieldName === 'programID' ||
|
|
|
- fieldName === 'subType' || fieldName === 'calcBase' || fieldName === 'feesIndex.common.unitFee'){
|
|
|
+ fieldName === 'subType' || fieldName === 'calcBase' || fieldName === 'isSubcontract'){
|
|
|
if (fieldName === 'quantity') {
|
|
|
- project.quantity_detail.editMainTreeNodeQuantity(value,node,fieldName);
|
|
|
+ project.quantity_detail.editMainTreeNodeQuantity(value,node,fieldName,editingText);
|
|
|
return;
|
|
|
}
|
|
|
- else if (fieldName === 'marketUnitFee' || fieldName === 'feesIndex.common.unitFee') {
|
|
|
+ else if (fieldName === 'marketUnitFee') {
|
|
|
if (value) {value = parseFloat(value).toDecimal(decimalObj.decimal("unitPrice", node))};
|
|
|
}
|
|
|
else if (fieldName === 'calcBase') {
|
|
@@ -320,17 +310,16 @@ var projectObj = {
|
|
|
}
|
|
|
// if (value) {value = parseFloat(value).toDecimal(decimalObj.decimal("totalPrice", node))};
|
|
|
};
|
|
|
- node.changed = true;
|
|
|
- if (fieldName == 'feesIndex.common.unitFee'){
|
|
|
- treeNodeTools.initFeeField(node, 'common');
|
|
|
- node.data.feesIndex.common.unitFee = value;
|
|
|
- }
|
|
|
- else if(fieldName !== 'calcBase'){
|
|
|
+
|
|
|
+ if(fieldName !== 'calcBase'){
|
|
|
node.data[fieldName] = value;
|
|
|
+ node.changed = true;
|
|
|
}
|
|
|
+
|
|
|
project.calcProgram.calcAndSave(node);
|
|
|
gljOprObj.showRationGLJSheetData();
|
|
|
- } else if (node.sourceType === project.Bills.getSourceType()&&fieldName === 'unit'){//修改清单单位的时候清单工程量要重新4舍5入
|
|
|
+ }
|
|
|
+ else if (node.sourceType === project.Bills.getSourceType()&&fieldName === 'unit'){//修改清单单位的时候清单工程量要重新4舍5入
|
|
|
node.data[fieldName] = value;
|
|
|
node.changed = true;
|
|
|
if(node.data.quantity){
|
|
@@ -351,9 +340,11 @@ var projectObj = {
|
|
|
}
|
|
|
projectObj.mainController.refreshTreeNode([node]);
|
|
|
}
|
|
|
- } else if(value==null && fieldName ==='feeRate'){
|
|
|
+ }
|
|
|
+ else if(value==null && fieldName ==='feeRate'){
|
|
|
project.FeeRate.cleanFeeRateID(node);
|
|
|
- } else {
|
|
|
+ }
|
|
|
+ else {
|
|
|
projectObj.mainController.refreshTreeNode([node], false);
|
|
|
}
|
|
|
},
|
|
@@ -383,7 +374,7 @@ var projectObj = {
|
|
|
let fieldName = projectObj.mainController.setting.cols[info.col].data.field;
|
|
|
// 检查输入类型等
|
|
|
let value = projectObj.checkSpreadEditingText(info.editingText, colSetting);
|
|
|
- projectObj.updateCellValue(node, value, colSetting);
|
|
|
+ projectObj.updateCellValue(node, value, colSetting,info.editingText);
|
|
|
|
|
|
// 自动行高
|
|
|
const autoHeight = project.property.displaySetting.autoHeight;
|
|
@@ -426,7 +417,7 @@ var projectObj = {
|
|
|
that.project.property = projectInfoObj.projectInfo.property;
|
|
|
//that.project.calcProgram.compileAllTemps();
|
|
|
that.project.calcBase.init(that.project);
|
|
|
- that.project.calcFields = JSON.parse(JSON.stringify(cpFeeTypes));
|
|
|
+ // that.project.calcFields = JSON.parse(JSON.stringify(cpFeeTypes));
|
|
|
// that.project.initCalcFields();
|
|
|
let str = JSON.stringify(that.project.projSetting.main_tree_col);
|
|
|
that.project.projSetting.mainGridSetting = JSON.parse(str);
|
|
@@ -475,13 +466,15 @@ var projectObj = {
|
|
|
if(col.data.field ==='quantity'){
|
|
|
col.showHint = true;
|
|
|
}
|
|
|
- // for test digit. CSLAAAAA
|
|
|
- if (col.data.field.hasSubStr("totalFee"))
|
|
|
- col.data.formatter = MainTreeCol.getNumberFormatter(decimalObj.ration.totalPrice, false)
|
|
|
- else if (col.data.field.hasSubStr("unitFee"))
|
|
|
- col.data.formatter = MainTreeCol.getNumberFormatter(decimalObj.ration.unitPrice, false)
|
|
|
- else if (col.data.field == "quantity")
|
|
|
- col.data.formatter = MainTreeCol.getNumberFormatter(decimalObj.ration.quantity, false);
|
|
|
+
|
|
|
+ // 综合单价、综合合价,小数部分应补0对齐。 CSLAAAAA
|
|
|
+ // if (col.data.field.hasSubStr("common")){
|
|
|
+ if (col.data.field.hasSubStr(".totalFee"))
|
|
|
+ col.data.formatter = MainTreeCol.getNumberFormatter(decimalObj.ration.totalPrice, true)
|
|
|
+ else if (col.data.field.hasSubStr(".unitFee"))
|
|
|
+ col.data.formatter = MainTreeCol.getNumberFormatter(decimalObj.ration.unitPrice, true)
|
|
|
+ // }
|
|
|
+
|
|
|
});
|
|
|
|
|
|
that.mainController = TREE_SHEET_CONTROLLER.createNew(that.project.mainTree, that.mainSpread.getActiveSheet(), that.project.projSetting.mainGridSetting);
|
|
@@ -496,10 +489,16 @@ var projectObj = {
|
|
|
that.mainSpread.bind(GC.Spread.Sheets.Events.EditEnded, that.mainSpreadEditEnded);
|
|
|
that.mainSpread.bind(GC.Spread.Sheets.Events.RangeChanged, that.mainSpreadRangeChanged);
|
|
|
that.mainSpread.bind(GC.Spread.Sheets.Events.SelectionChanged, that.amountAreaNumber);
|
|
|
+ that.mainSpread.bind(GC.Spread.Sheets.Events.ButtonClicked, that.onButtonClick);
|
|
|
that.loadMainSpreadContextMenu();
|
|
|
that.loadFocusLocation();
|
|
|
let endTime = +new Date();
|
|
|
+ socketObject.connect();//连接socket服务器
|
|
|
console.log("加载完成-----"+endTime);
|
|
|
+ console.log(`时间——${endTime - startTime}`);
|
|
|
+ that.project.projectMarkChecking();//是否需要重新进行造价计算
|
|
|
+ console.log(projectInfoObj.projectInfo);
|
|
|
+ //project.calcProgram.calcAllNodesAndSave()
|
|
|
}
|
|
|
else {
|
|
|
|
|
@@ -535,7 +534,7 @@ var projectObj = {
|
|
|
icon: 'fa-sign-in',
|
|
|
disabled: function () {
|
|
|
let selected = project.mainTree.selected;
|
|
|
- if(selected.sourceType==project.Bills.getSourceType()){
|
|
|
+ if(selected&&selected.sourceType==project.Bills.getSourceType()){
|
|
|
if(selected.data.type==billType.FB){
|
|
|
return false;
|
|
|
}
|
|
@@ -553,7 +552,11 @@ var projectObj = {
|
|
|
ProjectController.addFB(project, controller);
|
|
|
},
|
|
|
visible: function(key, opt){
|
|
|
- return project.Bills.isFBFX(project.mainTree.selected );//不属于分部分项的话隐藏
|
|
|
+ if(project.mainTree.selected){
|
|
|
+ return project.Bills.isFBFX(project.mainTree.selected );//不属于分部分项的话隐藏
|
|
|
+ }else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
"insertFX": {
|
|
@@ -561,7 +564,7 @@ var projectObj = {
|
|
|
icon: 'fa-sign-in',
|
|
|
disabled: function () {
|
|
|
let selected = project.mainTree.selected;
|
|
|
- if(selected.sourceType==project.Bills.getSourceType()){
|
|
|
+ if(selected&&selected.sourceType==project.Bills.getSourceType()){
|
|
|
if(selected.data.type==billType.FX){//焦点行是分项,有效显示
|
|
|
return false
|
|
|
}
|
|
@@ -586,7 +589,11 @@ var projectObj = {
|
|
|
ProjectController.addFX(project, controller);
|
|
|
},
|
|
|
visible: function(key, opt){
|
|
|
- return project.Bills.isFBFX(project.mainTree.selected );//不属于分部分项的话隐藏
|
|
|
+ if(project.mainTree.selected){
|
|
|
+ return project.Bills.isFBFX(project.mainTree.selected );//不属于分部分项的话隐藏
|
|
|
+ }else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
"insertBills": {
|
|
@@ -605,7 +612,11 @@ var projectObj = {
|
|
|
ProjectController.addBills(project, controller);
|
|
|
},
|
|
|
visible: function(key, opt){
|
|
|
- return project.Bills.isFBFX(project.mainTree.selected)==true?false:true;//不属于分部分项的话隐藏
|
|
|
+ if(project.mainTree.selected){
|
|
|
+ return project.Bills.isFBFX(project.mainTree.selected)==true?false:true;
|
|
|
+ }else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|
|
|
},
|
|
|
"insertRation": {
|
|
@@ -620,11 +631,14 @@ var projectObj = {
|
|
|
},
|
|
|
visible: function(key, opt){
|
|
|
var selected = project.mainTree.selected;
|
|
|
- if(selected.sourceType == ModuleNames.bills&&selected.data.type == billType.DXFY){
|
|
|
- return false
|
|
|
- }else {
|
|
|
- return true
|
|
|
+ if(selected){
|
|
|
+ if(selected.sourceType == ModuleNames.bills&&selected.data.type == billType.DXFY){
|
|
|
+ return false
|
|
|
+ }else {
|
|
|
+ return true
|
|
|
+ }
|
|
|
}
|
|
|
+ return false;
|
|
|
}
|
|
|
},
|
|
|
"insertLJ": {
|
|
@@ -639,11 +653,14 @@ var projectObj = {
|
|
|
},
|
|
|
visible: function(key, opt){
|
|
|
var selected = project.mainTree.selected;
|
|
|
- if(selected.sourceType == ModuleNames.bills&&selected.data.type == billType.DXFY){
|
|
|
- return false
|
|
|
- }else {
|
|
|
- return true
|
|
|
+ if(selected){
|
|
|
+ if(selected.sourceType == ModuleNames.bills&&selected.data.type == billType.DXFY){
|
|
|
+ return false
|
|
|
+ }else {
|
|
|
+ return true
|
|
|
+ }
|
|
|
}
|
|
|
+ return false;
|
|
|
}
|
|
|
},
|
|
|
"insertGLJ": {
|
|
@@ -667,11 +684,27 @@ var projectObj = {
|
|
|
},
|
|
|
visible: function(key, opt){
|
|
|
var selected = project.mainTree.selected;
|
|
|
- if(selected.sourceType == ModuleNames.bills&&selected.data.type == billType.DXFY){
|
|
|
- return false
|
|
|
- }else {
|
|
|
- return true
|
|
|
+ if(selected){
|
|
|
+ if(selected.sourceType == ModuleNames.bills&&selected.data.type == billType.DXFY){
|
|
|
+ return false;
|
|
|
+ }else {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
}
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ "ZLFB": {
|
|
|
+ name: "整理分部",
|
|
|
+ icon: 'fa-sign-in',
|
|
|
+ disabled: function () {
|
|
|
+ return false;
|
|
|
+ },
|
|
|
+ callback: function (key, opt) {
|
|
|
+ zlfb_object.getSectionInfo();
|
|
|
+ },
|
|
|
+ visible: function(key, opt){
|
|
|
+ return true;
|
|
|
}
|
|
|
},
|
|
|
"spr1": '--------',
|
|
@@ -679,8 +712,7 @@ var projectObj = {
|
|
|
name: '删除',
|
|
|
icon: 'fa-remove',
|
|
|
disabled: function () {
|
|
|
- var selected = project.mainTree.selected;
|
|
|
- return !selected;
|
|
|
+ return !ifCanDelete();
|
|
|
},
|
|
|
callback: function () {
|
|
|
$("#delete_row").modal({show:true});//弹出删除提示框;
|
|
@@ -691,9 +723,7 @@ var projectObj = {
|
|
|
name: '造价计算',
|
|
|
callback: function () {
|
|
|
$.bootstrapLoading.start();
|
|
|
- let changedNodes = project.calcProgram.calcAllNodes();
|
|
|
- project.calcProgram.saveNodes(changedNodes);
|
|
|
- $.bootstrapLoading.end();
|
|
|
+ project.calcProgram.calcAllNodesAndSave();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -810,7 +840,132 @@ var projectObj = {
|
|
|
isTotalShowing = true;
|
|
|
}, 200);
|
|
|
};
|
|
|
+ },
|
|
|
+
|
|
|
+ onButtonClick: function (e, info) {
|
|
|
+ let node = projectObj.project.mainTree.items[info.row];
|
|
|
+ if (node.data.isSubcontract) node.data.isSubcontract = false
|
|
|
+ else node.data.isSubcontract = true;
|
|
|
+
|
|
|
+ node.changed = true;
|
|
|
+ projectObj.project.calcProgram.calcAndSave(node);
|
|
|
+ },
|
|
|
+
|
|
|
+ //根据节点获取行style(颜色、字体加粗)
|
|
|
+ getNodeColorStyle: function (node, colSetting) {
|
|
|
+ let colorSetting = optionsOprObj.getOption(optionsOprObj.optionsTypes.COLOROPTS);
|
|
|
+ let mapping = {DEFAULT: 'DEFAULT', DXFY: 'DXFY', FB: 'FB', UNLEAFBILL: 'UNLEAFBILL',
|
|
|
+ FX: 'FX', UNCBBILL: 'UNCBBILL', CBBILL: 'CBBILL', ZCSB: 'ZCSB'};
|
|
|
+ let styleMap = null;
|
|
|
+ //中文字段名,由于同一节点中,中文字体大小和数字字体大小不同
|
|
|
+ let stringFields = [
|
|
|
+ 'code',
|
|
|
+ 'subType',
|
|
|
+ 'name',
|
|
|
+ 'unit',
|
|
|
+ 'itemCharacterText',
|
|
|
+ 'jobContentText',
|
|
|
+ 'adjustState',
|
|
|
+ 'calcBase',
|
|
|
+ 'programID',
|
|
|
+ 'ruleText'
|
|
|
+ ];
|
|
|
+ if(!isDef(node)){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ //清单大类
|
|
|
+ if(node.sourceType === this.project.Bills.getSourceType()){
|
|
|
+ //大项费用
|
|
|
+ //大项费用
|
|
|
+ if(node.data.type === billType.DXFY){
|
|
|
+ styleMap = mapping.DXFY;
|
|
|
+ }
|
|
|
+ //分部
|
|
|
+ if(node.data.type === billType.FB){
|
|
|
+ styleMap = mapping.FB;
|
|
|
+ }
|
|
|
+ //分项
|
|
|
+ else if(node.data.type === billType.FX){
|
|
|
+ styleMap = mapping.FX;
|
|
|
+ }
|
|
|
+ //清单
|
|
|
+ else if(node.data.type === billType.BILL){
|
|
|
+ //非叶子节点的清单
|
|
|
+ if(node.source.children.length > 0){
|
|
|
+ styleMap = mapping.UNLEAFBILL;
|
|
|
+ }
|
|
|
+ //未使用基数计算的叶子节点的清单
|
|
|
+ else if(node.source.children.length === 0 && (!isDef(node.data.calcBase) || node.data.calcBase === '')){
|
|
|
+ styleMap = mapping.UNCBBILL;
|
|
|
+ }
|
|
|
+ //使用基数计算的叶子节点的清单
|
|
|
+ else if(node.source.children.length === 0 && isDef(node.data.calcBase && node.data.calcBaseValue !== '')){
|
|
|
+ styleMap = mapping.CBBILL;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //定额下的主材、设备
|
|
|
+ else if(node.sourceType === this.project.ration_glj.getSourceType()){
|
|
|
+ styleMap = mapping.ZCSB;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ styleMap = mapping.DEFAULT;
|
|
|
+ }
|
|
|
+ let styleSetting = colorSetting[styleMap];
|
|
|
+ let defaultSetting = colorSetting[mapping.DEFAULT];
|
|
|
+ if(!isDef(styleSetting)){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ let style = new GC.Spread.Sheets.Style();
|
|
|
+ //设置style属性
|
|
|
+ for(let attr in styleSetting){
|
|
|
+ if(attr !== 'stringFont' && attr !== 'numFont'){
|
|
|
+ style[attr] = styleSetting[attr] === 'default' || !isDef(styleSetting[attr]) ? defaultSetting[attr] : styleSetting[attr];
|
|
|
+ }
|
|
|
+ //暂时不开放字体设置,开放的话只能每个单元格进入此方法
|
|
|
+ /* else {
|
|
|
+ if(stringFields.indexOf(colSetting.data.field) > 0){
|
|
|
+ style.font = styleSetting.stringFont === 'default' || !isDef(styleSetting.stringFont) ? defaultSetting.stringFont : styleSetting.stringFont;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ style.font = styleSetting.numFont === 'default' || !isDef(styleSetting.numFont) ? defaultSetting.numFont : styleSetting.numFont;
|
|
|
+ }
|
|
|
+ }*/
|
|
|
+ }
|
|
|
+ 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;
|
|
|
+ },
|
|
|
+ //大项费用则字体加粗,String 15px, Number 13px
|
|
|
+ getBoldFontStyle: function (node, colSetting) {
|
|
|
+ if(node.sourceType !== this.project.Bills.getSourceType() || node.data.type !== billType.DXFY){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ let style = new GC.Spread.Sheets.Style();
|
|
|
+ //备注暂无字段
|
|
|
+ let stringFields = [
|
|
|
+ 'code',
|
|
|
+ 'subType',
|
|
|
+ 'name',
|
|
|
+ 'unit',
|
|
|
+ 'itemCharacterText',
|
|
|
+ 'jobContentText',
|
|
|
+ 'adjustState',
|
|
|
+ 'calcBase',
|
|
|
+ 'programID',
|
|
|
+ 'ruleText'
|
|
|
+ ];
|
|
|
+ if(stringFields.indexOf(colSetting.data.field) > 0){
|
|
|
+ style.font = 'bold 15px Arial';
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ style.font = 'bold 13px Arial';
|
|
|
+ }
|
|
|
+ return style;
|
|
|
}
|
|
|
+
|
|
|
};
|
|
|
// 点击合计框中的复制
|
|
|
$("body").on("click", "#total-tips a", function() {
|
|
@@ -850,7 +1005,8 @@ $('#upLevel').click(function () {
|
|
|
if (selected && selected.sourceType === project.Bills.getSourceType()) {
|
|
|
project.Bills.upLevelBills(selected.source);
|
|
|
controller.upLevel();
|
|
|
- projectObj.converseCalculateBills(orgParent);
|
|
|
+ controller.refreshTreeNode([orgParent]);
|
|
|
+ projectObj.project.calcProgram.calcBillsAndSave([selected,orgParent]);
|
|
|
}
|
|
|
});
|
|
|
$('#downLevel').click(function () {
|
|
@@ -858,7 +1014,8 @@ $('#downLevel').click(function () {
|
|
|
var selected = controller.tree.selected;
|
|
|
if (selected && selected.sourceType === project.Bills.getSourceType()) {
|
|
|
project.Bills.downLevelBills(selected.source);
|
|
|
- controller.downLevel();
|
|
|
+ controller.downLevel();
|
|
|
+ controller.refreshTreeNode([selected.parent]);
|
|
|
projectObj.converseCalculateBills(selected.parent);
|
|
|
}
|
|
|
});
|
|
@@ -931,8 +1088,8 @@ $('#property_ok').click(function () {
|
|
|
bills: bills
|
|
|
},
|
|
|
|
|
|
- reCalcBills= false,
|
|
|
- reCalcRations= false;
|
|
|
+ reCalcBills = false,
|
|
|
+ reCalcRations = false;
|
|
|
|
|
|
let b = parseInt($("input[name='calcFlag']:checked").val());
|
|
|
if (b !== project.property.billsCalcMode) {
|
|
@@ -945,7 +1102,7 @@ $('#property_ok').click(function () {
|
|
|
if (zg !== project.property.zanguCalcMode) {
|
|
|
properties['property.zanguCalcMode'] = zg;
|
|
|
project.property.zanguCalcMode = zg;
|
|
|
- reCalcBills = true;
|
|
|
+ reCalcRations = true;
|
|
|
};
|
|
|
|
|
|
//基本信息
|
|
@@ -995,30 +1152,15 @@ $('#property_ok').click(function () {
|
|
|
};
|
|
|
// 重新计算树节点
|
|
|
let changedNodes = [];
|
|
|
- if (reCalcRations) // 定额动,全部计算。
|
|
|
+ if (reCalcRations) // 定额动,全部计算。算完先不存储,和后面的数据一起提交,一次通讯。
|
|
|
changedNodes = project.calcProgram.calcAllNodes(calcAllType.catAll)
|
|
|
else if (reCalcBills) // 清单动,可以只计算清单。
|
|
|
changedNodes = project.calcProgram.calcAllNodes(calcAllType.catBills);
|
|
|
if (changedNodes.length > 0) {
|
|
|
for (let node of changedNodes){
|
|
|
- let data = {
|
|
|
- // projectID: projectID,
|
|
|
- ID: node.data.ID,
|
|
|
- quantity: node.data.quantity,
|
|
|
- calcBase: node.data.calcBase,
|
|
|
- calcBaseValue: node.data.calcBaseValue,
|
|
|
- marketUnitFee: node.data.marketUnitFee,
|
|
|
- marketTotalFee: node.data.marketTotalFee,
|
|
|
- fees: node.data.fees,
|
|
|
- feeRate: node.data.feeRate,
|
|
|
- feeRateID: node.data.feeRateID
|
|
|
- };
|
|
|
- if (node.sourceType == 'ration'){
|
|
|
- rations.push(data);
|
|
|
- }
|
|
|
- else if (node.sourceType == 'bills'){
|
|
|
- bills.push(data);
|
|
|
- };
|
|
|
+ let data = calcTools.cutNodeForSave(node);
|
|
|
+ if (node.sourceType == 'ration') rations.push(data)
|
|
|
+ else if (node.sourceType == 'bills') bills.push(data);
|
|
|
};
|
|
|
};
|
|
|
|
|
@@ -1122,4 +1264,45 @@ function isSingleSelect() {//是否选中造价书中的单行
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
|
+}
|
|
|
+function ifCanDelete() {
|
|
|
+ let selections = projectObj.mainSpread.getActiveSheet().getSelections();
|
|
|
+ let tree = projectObj.project.mainTree;
|
|
|
+ let selected = projectObj.project.mainTree.selected;
|
|
|
+ if(selections[0].rowCount==1){//选中单行
|
|
|
+ return canDelete(selected);
|
|
|
+ }else {
|
|
|
+ return canDelete_m(selections[0]);
|
|
|
+ }
|
|
|
+
|
|
|
+ function canDelete(node,m_selection) {
|
|
|
+ if (node) {
|
|
|
+ if (node.sourceType === projectObj.project.Bills.getSourceType()) {
|
|
|
+ if(node.data.type == billType.DXFY&&node.data.isAdd!=1){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(m_selection!=true&&node.sourceType === projectObj.project.ration_glj.getSourceType()){//多选的时候不做这一项判断
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ function canDelete_m(selection) {
|
|
|
+ for(let i =0;i<selection.rowCount;i++){
|
|
|
+ if(tree.items[selection.row+i]==undefined||tree.items[selection.row+i]==null){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if(i==0&&tree.items[selection.row].sourceType === projectObj.project.ration_glj.getSourceType()){
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ if(canDelete(tree.items[selection.row+i],true)==false){
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true
|
|
|
+ };
|
|
|
}
|