浏览代码

调价界面批量更新

zhangweicheng 7 年之前
父节点
当前提交
667a0533ed

+ 4 - 0
modules/all_models/engineering_lib.js

@@ -40,6 +40,10 @@ let modelSchema = {
     fee_lib: {
         type: Schema.Types.Mixed,
         default: []
+    },
+    //设置人材机显示列
+    glj_col:{
+        showAdjustPrice:Boolean//是否显示调整价列
     }
 };
 mongoose.model(collectionName, new Schema(modelSchema, {versionKey: false, collection: collectionName}));

+ 5 - 1
public/web/sheet/sheet_common.js

@@ -44,7 +44,7 @@ var sheetCommonObj = {
         sheet.showRowOutline(false);
         me.buildHeader(sheet, setting);
         if (rowCount > 0)
-            sheet.setRowCount(rowCount)
+            sheet.setRowCount(rowCount);
         else
             sheet.setRowCount(1);
         sheet.resumeEvent();
@@ -139,6 +139,10 @@ var sheetCommonObj = {
                 sheet.setValue(0, col, setting.header[col].headerName, header);
                 sheet.setColumnWidth(col, setting.header[col].headerWidth?setting.header[col].headerWidth:100);
             }
+            if(setting.header[col].visible === false){
+                sheet.setColumnVisible(col,false);
+            }
+
         }
         for (var row = 0; row < data.length; row++) {
             //var cell = sheet.getCell(row, col, GC.Spread.Sheets.SheetArea.viewport);

+ 1 - 1
public/web/sheet/sheet_data_helper.js

@@ -57,7 +57,7 @@ var SheetDataHelper = {
         spread.options.allowUndo = false;//that.mainSpread.commandManager().setShortcutKey(undefined, GC.Spread.Commands.Key.z, true, false, false, false); 屏蔽undo
         spread.options.allowUserEditFormula = false;
         spread.options.showDragFillSmartTag = false;
-        spread.options.defaultDragFillType =GC.Spread.Sheets.Fill.AutoFillType.fillWithoutFormatting;
+        spread.options.defaultDragFillType = GC.Spread.Sheets.Fill.AutoFillType.fillWithoutFormatting;
         spread.getActiveSheet().setRowCount(3);
         return spread;
     },

+ 4 - 7
web/building_saas/main/js/views/project_glj_view.js

@@ -331,16 +331,17 @@ projectGljObject={
                 return ;
             }
         }
-
         for(let c of info.changedCells){
             let value=  info.sheet.getCell(c.row, c.col).text();
             changeInfo.push({row:c.row,col:c.col,value:value});
             if(me.projectGljEditChecking(c.row,c.col,true)==false){//如果不能编辑
                 canChange = false;
+                break;
             }
-            if (canChange==true&&!me.checkData(c.col,me.projectGljSetting,value)) {
+            if (!me.checkData(c.col,me.projectGljSetting,value)) {
                 alert('输入的数据类型不对,请重新输入!');
                 canChange = false;
+                break;
             }
         }
         if(canChange == false){//恢复原来的值
@@ -443,11 +444,7 @@ projectGljObject={
             value =  scMathUtil.roundForObj(value,getDecimal('glj.quantity'));
         }
         if(dataCode === 'is_evaluate'||dataCode === 'is_adjust_price'||dataCode === 'is_main_material'){
-            if(value){
-                value = 1;
-            }else {
-                value = 0;
-            }
+            value = value? 1:0;
         }
         if(dataCode === 'materialType'){//三材类型要做对应转换,因为这里value只是中文文本,并不是实际的值
             if(materialMap[value]!==undefined||materialMap[value]!==null){

+ 90 - 26
web/building_saas/main/js/views/tender_price_view.js

@@ -50,6 +50,7 @@ let tender_obj={
         this.tenderTreeSetting.setAutoFitRow = MainTreeCol.getEvent("setAutoFitRow");
         this.tenderController = TREE_SHEET_CONTROLLER.createNew(this.tenderTree, this.tenderSheet, this.tenderTreeSetting);
         this.tenderSheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onSheetValueChange);
+        this.tenderSheet.bind(GC.Spread.Sheets.Events.RangeChanged, this.onTenderRangeChange);
         this.tenderSheet.bind(GC.Spread.Sheets.Events.EditStarting,this.onEditStarting);
         this.tenderController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, this.treeSelectedChanged);
        // this.tenderController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, this.onSelectionChange);
@@ -89,35 +90,85 @@ let tender_obj={
             }
         }
     },
-    onSheetValueChange : function (sender,args) {
-        let me = tender_obj, row = args.row, col = args.col;
-        let node = me.tenderTree.items[row];
-        let dataCode = me.tenderSetting.header[col].dataCode;
-        let value = args.newValue;
-        let updateData = {type:node.sourceType,data:{'ID' : node.data.ID}};
-        let datas = [],nodes = [];
+    onTenderRangeChange:function (sender,info) {
+        let me = tender_obj;
+        let changeInfo=[];
+        if(info.action == GC.Spread.Sheets.RangeChangedAction.clear){
+            if(me.editChecking(info.row,info.col) == false){
+                me.tenderController.refreshTreeNode(me.materialTree.selected, false);
+            }else {
+                info.newValue = null;
+                me.onSheetValueChange(sender,info);
+            }
+        }else {
+            let canChange = true;
+            for(let c of info.changedCells){
+                let value=  info.sheet.getCell(c.row, c.col).text();
+                changeInfo.push({row:c.row,col:c.col,value:value});
+                if(me.editChecking(c.row,c.col,true)==false){//如果不能编辑
+                    canChange = false;
+                    break;
+                }
+                if (!projectGljObject.checkData(c.col,me.tenderSetting,value)) {
+                    alert('输入的数据类型不对,请重新输入!');
+                    canChange = false;
+                    break;
+                }
+            }
+            if(canChange == false){
+                tender_obj.showTenderData();
+            }else {
+                me.batchUpdateValue(changeInfo);
+            }
+        }
 
-        if (value&&!projectGljObject.checkData(col,me.tenderSetting,value)) {
-            setTimeout(function () {//为了不与click事件冲突
-                alert('输入的数据类型不对,请重新输入!');
-            },200);
-            updateData = null;
+    },
+    batchUpdateValue:function (changeInfo) {
+        let me = tender_obj,updateNodes = [],datas = [],nodes=[];
+        let dataMap = {};//用来去重复
+        for(let c of changeInfo){
+            let dataCode = me.tenderSetting.header[c.col].dataCode;
+            let node = me.tenderTree.items[c.row];
+            me.getUpdateData(c.value,dataCode,node,updateNodes);
         }
-        if(dataCode == 'is_adjust_price'){//不调价,修改父项后,子项也跟着更新
-            if(value == true){
-                value = 1;
-            }else if(value == false){
-                value = 0;
+        for(let u of updateNodes){//有可能会有重复的数据,需要按相同的ID组合起来。
+            if(dataMap[u.data.ID]){
+                for(let key in u.data){
+                    if(key == 'ID'){
+                        continue;
+                    }
+                    dataMap[u.data.ID].data[key] = u.data[key];
+                }
+            }else {
+                dataMap[u.data.ID] = u;
             }
+        }
+        for(let IDKey in dataMap){
+            datas.push(dataMap[IDKey]);
+            let temNode = me.tenderTree.findNode(IDKey);
+            if(temNode) nodes.push(temNode);
+        }
+        me.updateTenderData(datas,function () {
+            me.tenderController.refreshTreeNode(nodes, false);
+        });
+
+    },
+
+    getUpdateData:function(value,dataCode,node,updateNodes,nodes){
+        let me = tender_obj;
+        let updateData = {type:node.sourceType,data:{'ID' : node.data.ID}};
+        if(dataCode === 'is_adjust_price'){
+            value = value? 1:0;
             if(value == 1){
                 updateData = me.cleanTenderCoe(updateData,node);//打勾不调价后清空消耗量调整系数
             }
-            me.updateChildrenValue(node,dataCode,value,datas,nodes);
+            me.updateChildrenValue(node,dataCode,value,updateNodes,nodes);
         }
         if(updateData&&dataCode.indexOf("Coe") != -1 ){//如果是调整系统项,级联更新子项
             value = scMathUtil.roundForObj(value,getDecimal('process'));
-            me.updateChildrenValue(node,dataCode,value,datas,nodes);
+            me.updateChildrenValue(node,dataCode,value,updateNodes,nodes);
         }
+
         //在目标造价综合单价中输入数值,按项目属性中的清单单价精度取舍,并清空当前行的目标造价综合合价
         if(dataCode == 'targetUnitFee'){
             value = scMathUtil.roundForObj(value,getDecimal('unitPrice',node));
@@ -127,11 +178,24 @@ let tender_obj={
             value = scMathUtil.roundForObj(value,getDecimal('totalPrice',node));
             updateData?updateData.data["targetUnitFee"] = null:'';
         }
-        if(updateData){
-            updateData.data[dataCode] = value;
-            datas.push(updateData);
+        updateData.data[dataCode] = value;
+        updateNodes.push(updateData);
+        nodes?nodes.push(node):'';
+
+    },
+
+    onSheetValueChange : function (sender,args) {
+        let me = tender_obj, row = args.row, col = args.col;
+        let node = me.tenderTree.items[row];
+        let dataCode = me.tenderSetting.header[col].dataCode;
+        let value = args.newValue;
+        let datas = [],nodes = [];
+        if (value&&!projectGljObject.checkData(col,me.tenderSetting,value)) {
+            alert('输入的数据类型不对,请重新输入!');
+            nodes.push(node);
+        }else {
+            me.getUpdateData(value,dataCode,node,datas,nodes);
         }
-        nodes.push(node);
         me.updateTenderData(datas,function () {
             me.tenderController.refreshTreeNode(nodes, false);
         });
@@ -149,7 +213,7 @@ let tender_obj={
                     continue;
                 }
                 datas.push(updateData);
-                nodes.push(c);
+                nodes?nodes.push(c):"";
             }
          }
 
@@ -287,7 +351,7 @@ let tender_obj={
         }
 
     },
-    editChecking:function (row,col) {//return false表示不能编辑
+    editChecking:function (row,col,isPaste = false) {//return false表示不能编辑
         let me = tender_obj;
         let dataCode = me.tenderSetting.header[col].dataCode;
         let lockColumns = me.tenderSetting.view.lockColumns;
@@ -295,7 +359,7 @@ let tender_obj={
         if(lockColumns.indexOf(col)!= -1){
             return false;
         }
-        if(dataCode == 'is_adjust_price'){
+        if(isPaste == false && dataCode == 'is_adjust_price'){//对于是粘贴或是拖动填充过来的数据,不调价不做判断
             return false;
         }
         if(row >=  me.tenderTree.items.length){