Forráskód Böngészése

模板子目更新

zhangweicheng 6 éve
szülő
commit
932042edb7

+ 4 - 4
modules/main/facade/ration_facade.js

@@ -261,15 +261,15 @@ async function addRationTemplate(std,newRation) {
             let template = {
                 billID:"",
                 fxID:"",
-                quantity:'',
-                coe:""
+                quantity:"0",
+                coe:"0"
             }
             template.code = tem.code;
             template.name = tem.name;
             template.type = tem.type;
-            template.unit = tem.unit &&_.isString(tem.unit) ?tem.unit.replace(/^\d+/,""):"";
+            template.unit = tem.unit &&_.isString(tem.unit)?tem.unit.replace(/^\d+/,""):"";
             template.billsLocation = template.billsLocation
-            templateList.push(tem)
+            templateList.push(template)
         }
     }
     if(templateList.length > 0){

+ 18 - 0
public/web/sheet/sheet_common.js

@@ -889,5 +889,23 @@ var sheetCommonObj = {
         ctx.stroke();
         ctx.restore();
         return offset;
+    },
+    checkData:function(col,setting, value) {
+        let result = true;
+        let validator = setting.header[col].validator !== undefined ? setting.header[col].validator : null;
+        if (validator === null) {
+            return result;
+        }
+        switch (validator) {
+            case 'number':
+                let regular = /^\d+(\.\d+)?$/;
+                result = regular.test(value);
+                break;
+            case 'boolean':
+                let booleanValue = [true, false];
+                result = booleanValue.indexOf(value) >= 0;
+                break;
+        }
+        return result;
     }
 }

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

@@ -213,7 +213,7 @@
                                   <li class="nav-item" id = "TZJNR_div">
                                       <a class="nav-link sub-item" id="linkTZJNR" data-toggle="tab" href="#subSpread" role="tab">特征及内容</a>
                                   </li>
-                                 <!-- <li class="nav-item" id="MBZM_div">
+                                  <!--<li class="nav-item" id="MBZM_div">
                                       <a class="nav-link sub-item" id="linkMBZM" data-toggle="tab" href="#subSpread" role="tab">模板子目</a>
                                   </li>-->
                               </ul>

+ 12 - 2
web/building_saas/main/js/views/installation_fee_view.js

@@ -712,7 +712,7 @@ let installationFeeObj={
             }
         }
     },
-    getBillDataForSelect:function () {//这里有个地方共用
+    getBillDataForSelect:function () {//这里有个地方共用
         let controller = projectObj.mainController, project = projectObj.project;
         let from = $('#calc_position_from').val();
         let rootNode = null,allNodes = [],datas = [],billID = null,selectedItem=null;
@@ -724,7 +724,17 @@ let installationFeeObj={
             let riSelection = this.modifyFeeRuleSheet.getSelections()[0];
             selectedItem = this.modifyFeeRuleData[riSelection.row];
             billID = selectedItem.billID;
-        }else {
+        }else if(from == "ration_template"){
+            let temSelection = mbzm_obj.sheet.getSelections()[0];
+            selectedItem = _.cloneDeep(mbzm_obj.datas[temSelection.row]);
+            if($('#createLocation').val() == 1) {//措施项目下
+                billID = selectedItem.billID;
+                selectedItem.feeType='措施费用'
+            } else {//分部分项下
+                billID = selectedItem.fxID;
+                selectedItem.feeType='分项费用'
+            }
+        } else {
             let selection = this.feeItemSheet.getSelections()[0];
             selectedItem = this.feeItemData[selection.row];
             if(from =="feeItemSheet"){

+ 66 - 17
web/building_saas/main/js/views/mbzm_view.js

@@ -4,14 +4,15 @@
 
 let mbzm_obj={
     spread:null,
+    nodeChanged:false,
     datas:[],
     setting:{
         header: [
             {headerName: "编码", headerWidth: 130, dataCode: "code", dataType: "String", formatter: "@"},
             {headerName: "模板类别", headerWidth: 260, dataCode: "name", dataType: "String", hAlign: "left"},
-            {headerName: "系数", headerWidth: 65, dataCode: "coe", dataType: "Number"},
+            {headerName: "系数", headerWidth: 65, dataCode: "coe", dataType: "Number",validator:"number"},
             {headerName: "单位", headerWidth: 45, dataCode: "unit", dataType: "String", hAlign: "center"},
-            {headerName: "工程量", headerWidth: 65, dataCode: "quantity", dataType: "Number",decimalField: "ration.quantity"},
+            {headerName: "工程量", headerWidth: 65, dataCode: "quantity", dataType: "Number",validator:"number"},
             {headerName: "关联类别", headerWidth: 100, dataCode: "type", dataType: "String"},
             {headerName: "清单位置", headerWidth: 200, dataCode: "position", hAlign: "left", dataType: "String",cellType:'selectButton',getText:'forPosition'},
         ],
@@ -21,16 +22,33 @@ let mbzm_obj={
         },
         getText:{
             forPosition:function (item) {
+                let createL =  $('#createLocation').val();
+                if(createL == 1) return  mbzm_obj.getDisplayText(item.billID,item.billsLocation);
+                if(createL == 2) return  mbzm_obj.getDisplayText(item.fxID,"");
                 return ""
             }
         }
     },
+    getDisplayText:function (billID,position) {
+        if(billID && billID!=''){
+            let node = projectObj.project.mainTree.getNodeByID(billID);
+            if(node){
+                let code = node.data.code?node.data.code:"";
+                let name = node.data.name?node.data.name:"";
+                return code +" "+name;
+            }
+        }
+        return  position;
+    },
     //当点击应用的时候才保存数据
     initSpread:function () {
         this.spread = SheetDataHelper.createNewSpread($("#mbzmSpread")[0]);
         sheetCommonObj.spreadDefaultStyle(this.spread);
         this.sheet = this.spread.getSheet(0);
         sheetCommonObj.initSheet(this.sheet, this.setting);
+        this.sheet.bind(GC.Spread.Sheets.Events.ValueChanged, this.onSheetValueChange);
+        this.spread.bind(GC.Spread.Sheets.Events.ButtonClicked, installationFeeObj.onPositionButtonClick);//共用一个位置选择器
+        this.sheet.name('ration_template');
     },
     refresh:function () {
         let total = $('#mbzmSpread').parent().height();
@@ -38,32 +56,63 @@ let mbzm_obj={
         $('#mbzmSpread').css('height',total- b_height);
         this.spread?this.spread.refresh():this.initSpread();
     },
+    refreshSheetData:function () {
+        sheetCommonObj.showData(this.sheet, this.setting,this.datas);
+    },
     showMBZMData:function(node){
         let selected = node?node:projectObj.project.mainTree.selected;
-        let datas = [];
-        $("#createLocation").val(1);//初始化
-        if(selected&&selected.sourceType == "ration"){
-            let ration = selected.data;
-            let  template = projectObj.project.ration_template.getTemplateByRationID(ration.ID);
-            if(template) {
-                $("#createLocation").val(template.createLocation);
-                let pcol = _.findIndex(this.setting.header,{dataCode:"position"});
-                this.setting.header[pcol].visible = template.createLocation == 3?false:true;
-                datas = _.cloneDeep(template.templateList);
+        if(this.nodeChanged == true){//选中的行改变了才做初始化,刷新当前缓存, 在project_view 中treeSelectedChanged方法里设置
+            let datas = [];
+            $("#createLocation").val(1);//初始化
+            if(selected&&selected.sourceType == "ration"){
+                let ration = selected.data;
+                let  template = projectObj.project.ration_template.getTemplateByRationID(ration.ID);
+                if(template) {
+                    $("#createLocation").val(template.createLocation);
+                    let pcol = _.findIndex(this.setting.header,{dataCode:"position"});
+                    this.setting.header[pcol].visible = template.createLocation == 3?false:true;
+                    datas = _.cloneDeep(template.templateList);
+                }
             }
+            this.datas = datas;
+            this.nodeChanged = false;//这里要恢复成false 应为调用gljObj.refresh() 方法也会进到这里来,这时节点应是没有改变的
         }
-        this.datas = datas;
         sheetCommonObj.showData(this.sheet, this.setting,this.datas);
         this.sheet.setRowCount(this.datas.length);
+    },
+    onSheetValueChange:function (e,info) {
+        let me = mbzm_obj;
+        let selected = projectObj.project.mainTree.selected;
+        let row = info.row, col = info.col;
+        let dataCode = me.setting.header[col].dataCode;
+        let recode = me.datas[row], value = info.newValue;
+        if (info.newValue === undefined) {
+            return;
+        }
+        if (value && !sheetCommonObj.checkData(col, me.setting, value)) {
+            alert('输入的数据类型不对,请重新输入!');
+            me.refreshSheetData();
+            return;
+        }
+        if (dataCode === 'coe') {//默认为0,可输入数值,输入数值后,后面的工程量=混凝土子目工程量*系数。
+            let rationQuantity = selected.data.quantity;
+            rationQuantity = rationQuantity?scMathUtil.roundForObj(rationQuantity, getDecimal('ration.quantity')):0;
+            value = scMathUtil.roundForObj(value, getDecimal('process'));
+            recode["quantity"] = scMathUtil.roundForObj(rationQuantity * value, getDecimal('ration.quantity'))+"";
+        }
+        if (dataCode === 'quantity') {//定额默认显示为0,可输入数值,输入数值后,则清空前面的系数列
+            value = scMathUtil.roundForObj(value, getDecimal('ration.quantity'))+"";
+            recode["coe"] = "0";
+        }
+        recode[dataCode] = value;
+        me.refreshSheetData();
     }
 };
 
 $('#createLocation').change(function(){
     let me = mbzm_obj;
     let pcol = _.findIndex(me.setting.header,{dataCode:"position"});
-    me.setting.header[pcol].visible = template.createLocation == 3?false:true;
-
-    $(this).val();
+    me.setting.header[pcol].visible =  $(this).val() == 3?false:true;
+    me.refreshSheetData();
 
-    mbzm_obj.showMBZMData();
 });

+ 1 - 0
web/building_saas/main/js/views/project_view.js

@@ -32,6 +32,7 @@ var projectObj = {
             refreshNodes.push(project.mainTree.preSelected);
             init = !(project.mainTree.preSelected == node)
         }
+        mbzm_obj.nodeChanged = init;
         project.mainTree.preSelected = node;
         projectObj.setNodesStyle(projectObj.mainController.sheet, refreshNodes);
         if($('#linkComments').hasClass('active')){

+ 2 - 2
web/building_saas/main/js/views/sub_view.js

@@ -77,8 +77,8 @@ let subObj = {
             installationFeeObj.engineeringTypeChecking();//检查是否安装工程
             $("#TZJNR_div").hide();
   			$('#QDJL_div').hide();
-            $("#linkGLJ").addClass();            $(gljOprObj.rationTab).click();
-
+            $("#linkGLJ").addClass();
+            $(gljOprObj.rationTab).click();
         }else {
             $("#GLJ_div").hide();
             $("#ZMHS_div").hide();