Browse Source

Merge branch 'master' of http://192.168.1.12:3000/SmartCost/ConstructionCost

TonyKang 7 years ago
parent
commit
c213114daf

+ 1 - 0
config/gulpConfig.js

@@ -101,6 +101,7 @@ module.exports = {
         'public/web/tree_sheet/tree_sheet_controller.js',
         'public/web/tree_sheet/tree_sheet_helper.js',
         'public/web/sheet/sheet_data_helper.js',
+        'web/building_saas/main/js/views/glj_col.js',
         'web/building_saas/main/js/views/main_tree_col.js',
         'web/building_saas/main/js/views/project_info.js',
         'web/building_saas/main/js/views/project_view.js',

+ 5 - 1
modules/all_models/bills_template.js

@@ -13,6 +13,10 @@ var BillsTemplateSchema = new Schema({
     name: String,
     unit: String,
     deleteInfo: deleteSchema,
-    tempType: Number
+    tempType: Number,
+    //计算基数
+    calcBase: String,
+    //费率ID
+    feeRateID:Number
 });
 //mongoose.model('temp_bills', BillsTemplateSchema);  之后删除

+ 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}));

+ 4 - 0
modules/all_models/proj_setting.js

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

+ 4 - 1
modules/all_models/tem_bills.js

@@ -30,7 +30,10 @@ const BillsTemplateSchema = {
     // 工程专业
     engineering: Number,
     type:Number,
-    calcBase: String
+    //计算基数
+    calcBase: String,
+    //费率ID
+    feeRateID:Number
 };
 
 mongoose.model('temp_bills', BillsTemplateSchema, 'temp_bills');

+ 1 - 1
modules/pm/controllers/new_proj_controller.js

@@ -39,7 +39,7 @@ module.exports = {
             async function (cb) {
                 let engineeringModel = new EngineeringLibModel();
                 let engineering = await engineeringModel.getEngineering(property.engineering_id);
-                projSetting.insertData({"projectID": newProjID, main_tree_col: engineering.main_tree_col}, cb);
+                projSetting.insertData({"projectID": newProjID, main_tree_col: engineering.main_tree_col,glj_col:engineering.glj_col}, cb);
             }
         ], (err) => callback(err));
     }

+ 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;
     },

+ 1 - 0
web/building_saas/main/html/main.html

@@ -1342,6 +1342,7 @@
         <script type="text/javascript" src="/public/web/sheet/sheet_data_helper.js"></script>
 
         <!-- view -->
+        <script type="text/javascript" src="/web/building_saas/main/js/views/glj_col.js"></script>
         <script type="text/javascript" src="/web/building_saas/main/js/views/main_tree_col.js"></script>
         <script type="text/javascript" src="/web/building_saas/main/js/views/project_info.js"></script>
         <script type="text/javascript" src="/web/building_saas/main/js/views/project_view.js"></script>

+ 36 - 0
web/building_saas/main/js/views/glj_col.js

@@ -0,0 +1,36 @@
+/**
+ * Created by zhang on 2018/7/3.
+ */
+let gljCol = {
+    ration_glj_setting: {
+        header: [
+            {headerName: "编码", headerWidth: 100, dataCode: "code", dataType: "String", formatter: "@"},
+            {headerName: "名称", headerWidth: 160, dataCode: "name", dataType: "String"},
+            {headerName: "规格型号", headerWidth: 90, dataCode: "specs", dataType: "String", hAlign: "left"},
+            {headerName: "单位", headerWidth: 45, dataCode: "unit", dataType: "String", hAlign: "center"},
+            {headerName: "类型", headerWidth: 45, dataCode: "shortName", dataType: "String", hAlign: "center"},
+            {headerName: "定额消耗", headerWidth: 80, dataCode: "rationItemQuantity", dataType: "Number", hAlign: "right", decimalField: "glj.quantity"},    // dataType: "Number", formatter: "0.00"
+            {headerName: "自定消耗", headerWidth: 80, dataCode: "customQuantity", dataType: "Number", hAlign: "right", decimalField: "glj.quantity"},
+            {headerName: "消耗量", headerWidth: 80, dataCode: "quantity", dataType: "Number", hAlign: "right", decimalField: "glj.quantity"},
+            {headerName: "总消耗量", headerWidth: 80, dataCode: "totalQuantity", dataType: "Number", hAlign: "right", decimalField: "glj.quantity"},
+            {headerName: "定额价", headerWidth: 80, dataCode: "basePrice", dataType: "Number", hAlign: "right", decimalField: "glj.unitPrice"},
+            {headerName: "调整价", headerWidth: 80, dataCode: "adjustPrice", dataType: "Number", hAlign: "right", decimalField: "glj.unitPrice"},
+            {headerName: "市场价", headerWidth: 80, dataCode: "marketPrice", dataType: "Number", hAlign: "right", decimalField: "glj.unitPrice"},
+            {headerName: "是否暂估", headerWidth: 65, dataCode: "isEstimate", dataType: "String", hAlign: "center", vAlign: "center", cellType: "checkBox"
+            }
+        ],
+        view: {
+            lockColumns: [0, 4, 5, 7, 8, 10, 12]
+        },
+        // 工料机类型是混凝土、砂浆、配合比、机械台班时,价格不可编辑。
+        editedTyep:[GLJTypeConst.MAIN_MATERIAL,GLJTypeConst.EQUIPMENT]//主材设备
+    },
+    removeCol:function (dataCode,setting) {
+       // let colIndex =
+
+
+
+    }
+
+
+};

+ 0 - 2
web/building_saas/main/js/views/glj_view.js

@@ -88,8 +88,6 @@ var gljOprObj = {
             }
         ],
         view: {
-            comboBox: [{row: -1, col: 12, rowCount: -1, colCount: 1}],
-            lockedCells: [{row: -1, col: 3, rowCount: -1, colCount: 1}],
             lockColumns: [0, 4, 5, 7, 8, 10, 12]
         },
         // 工料机类型是混凝土、砂浆、配合比、机械台班时,价格不可编辑。

+ 8 - 9
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){
@@ -532,7 +529,10 @@ projectGljObject={
     },
     refreshDataSheet:function () {
         let me = projectGljObject;
-        let quantityCol = 5;
+        //------------5;
+        let quantityCol = _.findIndex(me.projectGljSetting.header,function (header) {
+            return header.dataCode ==  'quantity'|| header.dataCode == 'techQuantity' || header.dataCode =='subdivisionQuantity';
+        });
         if(me.displayType == filterType.FBFX){//分部分项人材机,将“总消耗量”替换显示为“分部分项总消耗量”。
             me.projectGljSetting.header[quantityCol].dataCode = 'subdivisionQuantity';
             me.projectGljSheet.setValue(0, quantityCol, "分部分项总消耗量", GC.Spread.Sheets.SheetArea.colHeader);
@@ -543,7 +543,6 @@ projectGljObject={
             me.projectGljSetting.header[quantityCol].dataCode = 'quantity';
             me.projectGljSheet.setValue(0, quantityCol, "总消耗量", GC.Spread.Sheets.SheetArea.colHeader);
         }
-
         if(me.displayType == filterType.SCHZ){//三材汇总树节点
             me.showMaterialTreeData();
         }else {

+ 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){