Browse Source

bug fixed

zhangweicheng 7 years ago
parent
commit
9ee7607ad8

+ 1 - 1
modules/glj/models/glj_list_model.js

@@ -36,7 +36,7 @@ class GLJListModel extends BaseModel {
      * @var {Array}
      */
     ownCompositionTypes = [GLJTypeConst.CONCRETE, GLJTypeConst.MORTAR, GLJTypeConst.MIX_RATIO,
-        GLJTypeConst.COMMERCIAL_CONCRETE, GLJTypeConst.COMMERCIAL_MORTAR, GLJTypeConst.GENERAL_MACHINE,GLJTypeConst.MAIN_MATERIAL];
+        GLJTypeConst.GENERAL_MACHINE,GLJTypeConst.MAIN_MATERIAL];
 
     /**
      * 构造函数

+ 4 - 1
modules/ration_glj/facade/glj_calculate_facade.js

@@ -41,6 +41,9 @@ async function calculateQuantity(query,noNeedCal){
          let assList=[];
          let assRation = null;
          let adjustState=[];
+         if(!impactRation){//如果定额不存在或者已删除,返回空
+             return null;
+         }
          if(impactRation._doc.hasOwnProperty("rationAssList")&&impactRation.rationAssList.length>0){
              for(let i=0;i<impactRation.rationAssList.length;i++){
                  let times = calculateTimes(impactRation.rationAssList[i]);
@@ -48,8 +51,8 @@ async function calculateQuantity(query,noNeedCal){
                      assRation = await  std_ration_lib_ration_items.findOne({rationRepId:impactRation.libID,code:impactRation.rationAssList[i].assistCode});
                      assList.push({times:times,assRation:assRation})
                      adjustState.push({index:stateSeq.ass,content:impactRation.rationAssList[i].name+" "+impactRation.rationAssList[i].actualValue+" : +"+impactRation.rationAssList[i].assistCode+"x"+times});
-                     }
                  }
+             }
          }
          for(let i =0;i<gljList.length;i++ ){
              let r = await calculateQuantityPerGLJ(gljList[i],i,coeList,assList,adjustState,noNeedCal);

+ 3 - 1
modules/ration_glj/facade/ration_glj_facade.js

@@ -800,7 +800,9 @@ async function changAdjustState(data, rationList) {
             projectID: data.query.projectID,
             rationID: r
         }, true);
-        stateList.push({rationID: r, adjustState: stateResult.adjustState});
+        if(stateResult){
+            stateList.push({rationID: r, adjustState: stateResult.adjustState});
+        }
     }
     return stateList;
 }

+ 17 - 10
web/building_saas/glj/js/project_glj_spread.js

@@ -18,6 +18,7 @@ function ProjectGLJSpread() {
     this.firstMixRatioRow = -1;
     this.successCallback = null;
     this.supplyType = ['自行采购', '部分甲供', '完全甲供', '甲定乙供'];
+    this.supplyComboMap = [{text:"自行采购",value:0},{text:"完全甲供",value:2},{text:"部分甲供",value:1},{text:"甲定乙供",value:3}];//后来调整了下拉选项的顺序,为了不改之前的业务逻辑,这里的值对换了一下
     // 工料机类型是混凝土、砂浆、配合比、机械(不包括机械组成物)时,供货方式列只读。
     this.supplyReadonlyType = notEditType;
 }
@@ -30,10 +31,10 @@ function ProjectGLJSpread() {
 ProjectGLJSpread.prototype.init = function () {
     // 供货方式类型
     let supplySelect = [];
-    for(let index in this.supplyType) {
+    for(let comM of this.supplyComboMap) {
         supplySelect.push({
-            text: this.supplyType[index],
-            value: index
+            text: comM.text,
+            value: comM.value
         });
     }
     let selectBox = new GC.Spread.Sheets.CellTypes.ComboBox();
@@ -45,11 +46,8 @@ ProjectGLJSpread.prototype.init = function () {
         {name: '规格型号', field: 'specs', visible: true,width:120},
         {name: '单位', field: 'unit', visible: true,width:45},
         {name: '类型', field: 'short_name', visible: true,width:45},
-        {name: 'ID', field: 'id', visible: false},
         {name: '类型', field: 'unit_price.type', visible: false},
         {name: '总消耗量', field: 'quantity', visible: true,width:100,decimalField:'glj.quantity'},
-        {name: '分部分项总消耗量', field: 'subdivisionQuantity', visible: true,width:100,decimalField:'glj.quantity'},
-        {name: '技术措施项目总消耗量', field: 'techQuantity', visible: true,width:100,decimalField:'glj.quantity'},
         {name: '定额价', field: "base_price", visible: true,width:70,decimalField:"glj.unitPrice",validator: 'number'},//这里feiedID设置是为了在计不计取价差的时候做显示用
         {name: '调整价', field: 'adjust_price', visible: true,width:70,decimalField:"glj.unitPrice"},
         {name: '市场价', field: "unit_price.market_price", visible: true, validator: 'number',width:70,decimalField:"glj.unitPrice"},
@@ -78,6 +76,9 @@ ProjectGLJSpread.prototype.init = function () {
         {name: '组成物消耗量', field: 'consumption', visible: false},
         {name: '父级关联编码', field: 'connect_code', visible: false},
         {name: '组成物信息', field: 'ratio_data', visible: false},
+        {name: '分部分项总消耗量', field: 'subdivisionQuantity', visible: false,width:100,decimalField:'glj.quantity'},
+        {name: '技术措施项目总消耗量', field: 'techQuantity', visible: false,width:100,decimalField:'glj.quantity'},
+        {name: 'ID', field: 'id', visible: false}
     ];
     let sourceData = jsonData;
 
@@ -95,7 +96,13 @@ ProjectGLJSpread.prototype.init = function () {
     let supplyColumn = this.sheetObj.getFieldColumn('supply');
     let shortNameColumn = this.sheetObj.getFieldColumn('unit_price.short_name');
     let supplyQuantity = this.sheetObj.getFieldColumn('supply_quantity');
+    let nameColumn = this.sheetObj.getFieldColumn('name');
+    let specsColumn = this.sheetObj.getFieldColumn('specs');
 
+    //左对齐样式
+    let leftStyleSetting = {hAlign: GC.Spread.Sheets.HorizontalAlign.left};
+    this.sheetObj.setStyle(-1, nameColumn, leftStyleSetting);
+    this.sheetObj.setStyle(-1, specsColumn, leftStyleSetting);
 
     // 居中样式
     let centerStyleSetting = {hAlign: 1};
@@ -305,11 +312,11 @@ ProjectGLJSpread.prototype.specialColumn = function (sourceData) {
             activeSheet.getCell(rowCounter, isEvaluateColumn, GC.Spread.Sheets.SheetArea.viewport).locked(false);
             activeSheet.setValue(rowCounter, isEvaluateColumn, data.is_evaluate);
         }
-        // 设置供货方式列是否可选
+       /* // 设置供货方式列是否可选
         if (this.supplyReadonlyType.indexOf(data.unit_price.type) >= 0) {
             // 锁定该单元格
             activeSheet.getCell(rowCounter, supplyColumn,  GC.Spread.Sheets.SheetArea.viewport).locked(true);
-        }
+        }*/
         // 如果为部分甲供则甲供数量需要可编辑
         if (data.supply == 1) {
             activeSheet.getCell(rowCounter, supplyQuantity,  GC.Spread.Sheets.SheetArea.viewport).locked(false);
@@ -332,11 +339,11 @@ ProjectGLJSpread.prototype.specialColumn = function (sourceData) {
             this.firstMachineRow = this.firstMachineRow === -1 && data.unit_price.type === GLJTypeConst.GENERAL_MACHINE ?
                 rowCounter : this.firstMachineRow;
             // 锁定该单元格
-            if (data.ratio_data  && data.ratio_data.length > 0){//有组成物时,市场单价、定额价不可修改
+            if (data.ratio_data  && data.ratio_data.length > 0){//有组成物时,市场单价、定额价、供货方式不能修改
                 activeSheet.getCell(rowCounter, marketPriceColumn,  GC.Spread.Sheets.SheetArea.viewport).locked(true);
                 activeSheet.getCell(rowCounter, basePriceColumn, GC.Spread.Sheets.SheetArea.viewport).locked(true);
+                activeSheet.getCell(rowCounter, supplyColumn,  GC.Spread.Sheets.SheetArea.viewport).locked(true);
             }
-            activeSheet.getCell(rowCounter, supplyColumn,  GC.Spread.Sheets.SheetArea.viewport).locked(true);
         }
         if(data.unit_price.is_add!=1){//如果不是新增,定额价不可修改。
             activeSheet.getCell(rowCounter, basePriceColumn, GC.Spread.Sheets.SheetArea.viewport).locked(true);

+ 5 - 3
web/building_saas/main/html/main.html

@@ -822,7 +822,9 @@
                 </div>
                 <div class="modal-body">
                     <div class="form-group">
-                        <label id="delete_showinfo">确认要删除当前选中行吗?</label>
+                        <div id="delete_showinfo">
+                            <label>确认要删除当前选中行吗?</label>
+                        </div>
                     </div>
                 </div>
                 <div class="modal-footer" style="justify-content: center">
@@ -852,7 +854,7 @@
                         </label>
                     </div>
                     <div class="form-check">
-                        <input class="form-check-input zlfb-check" type="checkbox" id="bill_second" >
+                        <input class="form-check-input zlfb-check" type="checkbox" checked id="bill_second" >
                         <label class="form-check-label">
                             需要章分部标题
                         </label>
@@ -890,7 +892,7 @@
                                 勾选“需要节分部标题”,表示分部整理时需要添加节标题;</br>
                                 勾选“删除自定义分部标题”,将首先删除已有自定义分部标题,然后再执行分部整理;</br>
                                 勾选“清单排序”,表示分部整理后对每个分部下的清单进行排序;</br>
-                                勾选“清单重新编码”,表示分部整理后对每个分部下的清单重新生成流号;
+                                勾选“清单重新编码”,表示分部整理后对每个分部下的清单重新生成流号;
                             </p>
                         </div>
                     </div>

+ 31 - 4
web/building_saas/main/js/models/bills.js

@@ -261,7 +261,19 @@ var Bills = {
                         }
                         newParent=node.preSibling;
                     }else {//没有前兄弟,则子项升一级
-                        let parent = node.nextSibling.parent;
+                        let parent = node.parent;
+                        for(let i=0;i<node.children.length;i++){
+                            updateData[node.children[i].data.ID]={
+                                ParentID:parent.data.ID
+                            };
+                            updateNode[node.children[i].data.ID]=node.children[i];
+                            if(node.nextSibling&&i == node.children.length-1){//最后一个子项,在有后兄弟的情况下,作为后兄弟的前兄弟
+                                updateData[node.children[i].data.ID].NextSiblingID = node.nextSibling.data.ID;
+                            }
+                        }
+
+
+               /*         let parent = node.nextSibling.parent;
                         for(let i=0;i<node.children.length;i++){
                             if(i == node.children.length-1&&node.nextSibling){//最后一个子项,在有后兄弟的情况下,作为后兄弟的前兄弟
                                 updateData[node.children[i].data.ID]={
@@ -274,7 +286,7 @@ var Bills = {
                                 };
                             }
                             updateNode[node.children[i].data.ID]=node.children[i];
-                        }
+                        }*/
                         newParent=parent;
                     }
                 }
@@ -472,7 +484,7 @@ var Bills = {
                 return node;
             }
         };
-        bills.prototype.isFBFX = function (node) {//判读是否属于分部分项
+        bills.prototype.isFBFX = function (node) {//判读是否属于分部分项部分
            let rootNode = this.getRootNode(node);
             if(isFlag(rootNode.data)&&rootNode.data.flagsIndex.fixed.flag==fixedFlag.SUB_ENGINERRING){
                 return true;
@@ -480,6 +492,21 @@ var Bills = {
                 return false;
             }
         };
+        bills.prototype.isTechMeasure = function (node) {//判读是否属于技术措施项目部分
+            let techMeasureCheck = function (checkNode) {
+                if(isFlag(checkNode.data)&&checkNode.data.flagsIndex.fixed.flag==fixedFlag.CONSTRUCTION_TECH){
+                    return true;
+                }else {
+                    if(checkNode.parent){
+                        return techMeasureCheck(checkNode.parent);
+                    }else {
+                        return false;
+                    }
+                }
+            }
+            return techMeasureCheck(node);
+        };
+
         bills.prototype.isEngineeringCost = function (node) {//判断这个节点是否是工程造价节点
             if(isFlag(node.data)&&node.data.flagsIndex.fixed.flag==fixedFlag.ENGINEERINGCOST){
                 return true;
@@ -665,7 +692,7 @@ var Bills = {
                 }
             }
         };
-        bills.prototype.deleteAllFBNodes = function(){
+        bills.prototype.deleteAllSubNodes = function(){
             let controller = projectObj.mainController, project = projectObj.project;
             let Bill = project.Bills;
             let FBFX = Bill.getFBFXNode(controller);//取分部分项工程节点;

+ 1 - 0
web/building_saas/main/js/models/cache_tree.js

@@ -428,6 +428,7 @@ var cacheTree = {
                             node.parent.addChild(oc);
                         }
                     }else {//都没有的情况
+                         node.parent.children = [];//删除本身节点
                         for(let c of node.children){
                             node.parent.addChild(c);
                         }

+ 1 - 0
web/building_saas/main/js/models/ration.js

@@ -462,6 +462,7 @@ var Ration = {
                     newNode.data = newSource;
                     ProjectController.syncDisplayNewNode(sheetController, newNode);
                     project.projectGLJ.loadData(function () {
+                        project.ration_glj.addToMainTree(data.ration_gljs);
                         project.calcProgram.calcAndSave(newNode);
                         projectObj.mainController.refreshTreeNode([newNode], false);
                         $.bootstrapLoading.end();

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

@@ -300,12 +300,15 @@ var gljOprObj = {
         sheet.name('quantity_detail');
         me.bindSheetEvent(sheet);
         sheet.bind(GC.Spread.Sheets.Events.EditStarting, function (sender, args) {
-            if(args.sheet.getValue(args.row,args.col)==null){//这里是为了解决当单元格里的值是null的时候,在单元格里输入数据,按键盘箭头移动光标的时候,会直接结束编辑,跳到另外的单元格。
-                args.sheet.setValue(args.row,args.col,"");
+             let selected = projectObj.project.mainTree.selected;
+            if(selected&&selected.sourceType == ModuleNames.ration_glj){
+                args.cancel = true;
+            }else {
+                if(args.sheet.getValue(args.row,args.col)==null){//这里是为了解决当单元格里的值是null的时候,在单元格里输入数据,按键盘箭头移动光标的时候,会直接结束编辑,跳到另外的单元格。
+                    args.sheet.setValue(args.row,args.col,"");
+                }
             }
         });
-
-
     },
     showCoeData: function (sheet, setting, datas) {
         sheet.floatingObjects.remove("customerCoe");

+ 9 - 1
web/building_saas/main/js/views/main_tree_col.js

@@ -156,7 +156,15 @@ let MainTreeCol = {
             return !(node.sourceType == ModuleNames.ration || !MainTreeCol.readOnly.billsParent(node));
         },
         forFeeRate: function (node) {
-            return MainTreeCol.readOnly.non_bills(node) || MainTreeCol.readOnly.billsParent(node) || MainTreeCol.readOnly.leafBillsWithDetail(node)
+            let readOnly = true;
+            let Bills = projectObj.project.Bills;
+            //只有当选中节点是清单,并且不属于“分部分项工程”或“技术措施项目”,并且是叶子清单且没有定额/量价/工料机时,费率列才可编辑
+            if(MainTreeCol.readOnly.bills(node)){
+                if(!Bills.isFBFX(node)&&!Bills.isTechMeasure(node)&&node.children.length<=0){//不属于“分部分项工程”或“技术措施项目”,并且是叶子清单且没有定额/量价/工料机
+                    readOnly = false;
+                }
+            }
+            return readOnly;
         },
         forQuantity: function (node) {
             if(node.sourceType === projectObj.project.Bills.getSourceType()){

+ 16 - 5
web/building_saas/main/js/views/project_view.js

@@ -805,7 +805,12 @@ var projectObj = {
                         return !ifCanDelete();
                     },
                     callback: function () {
-                        $("#delete_row").modal({show:true});//弹出删除提示框;
+                        var selected = project.mainTree.selected;
+                        if(selected.sourceType == project.Bills.getSourceType()&&selected.data.type==billType.FB&&selected.children.length<=0){//选中的是分部,并且没有子项,直接删除
+                            project.Bills.deleteSelectedNode();
+                        }else {
+                            $("#delete_row").modal({show:true});//弹出删除提示框;
+                        }
                     }
                 },
                 "spr2":'--------',
@@ -1085,7 +1090,13 @@ $('#insert').click(function () {
 });
 
 $('#delete').click(function () {
-    $("#delete_row").modal({show:true});//弹出删除提示框;
+    let project = projectObj.project;
+    let selected = project.mainTree.selected;
+    if(selected.sourceType == project.Bills.getSourceType()&&selected.data.type==billType.FB&&selected.children.length<=0){//选中的是分部,并且没有子项,直接删除
+        project.Bills.deleteSelectedNode();
+    }else {
+        $("#delete_row").modal({show:true});//弹出删除提示框;
+    }
 });
 
 $('#upLevel').click(function () {
@@ -1276,17 +1287,17 @@ $('#property_ok').click(function () {
 $('#delete_row').on('shown.bs.modal', function (e) {
     var controller = projectObj.mainController, project = projectObj.project;
     var selected = controller.tree.selected, parent = selected.parent;
-    var showinfo = "确认要删除当前选中行吗?";
+    var showinfo = "<label>确认要删除当前选中行吗?</label>";
     var showN = false;
     var cancelText = "否";
     if(selected.sourceType == project.Bills.getSourceType()&&selected.data.type==billType.FB&&selected.children.length>0){//选中的是分部,并且有子项
         if(isSingleSelect()||selectionChecking()){
-            showinfo = "是否删除其下的子项?";
+            showinfo = "<label>是否删除其下的子项?</label><br><label>【是】则删除分部行及其下的所有子项,</label><br><label>【否】则仅删除当前分部行,子项保留,</label><br><label>【取消】则取消删除</label>";
             showN = true;
             cancelText = "取消";
         }
     }
-    $('#delete_showinfo').text(showinfo);
+    $('#delete_showinfo').html(showinfo);
     showN==true? $('#deleteN').show():$('#deleteN').hide();
     $('#deleteCancel').text(cancelText);
 

+ 1 - 1
web/building_saas/main/js/views/zlfb_view.js

@@ -75,8 +75,8 @@ let zlfb_object={
             let first_FX_ID = -1;
             if(FB_nodes.length>0){
                 updateData.delete = me.getDeleteData(FB_nodes);
-                Bill.deleteAllFBNodes();
             }
+            Bill.deleteAllSubNodes();//在造价书树结构上先删除所有节点
             if(resort){
                 FX_nodes = _.sortBy(FX_nodes,'data.code');
             }