소스 검색

1.修复新增项目工料机方法的bug
2.新增对于项目工料机页面修改数据的验证

caiaolin 8 년 전
부모
커밋
a231f1e330
4개의 변경된 파일86개의 추가작업 그리고 22개의 파일을 삭제
  1. 28 12
      modules/glj/models/glj_list_model.js
  2. 1 1
      modules/glj/models/unit_price_model.js
  3. 5 0
      web/glj/html/glj_index.html
  4. 52 9
      web/glj/js/glj_index.js

+ 28 - 12
modules/glj/models/glj_list_model.js

@@ -99,6 +99,10 @@ class GLJListModel extends BaseModel {
      * @return {void}
      */
     combineUnitPrice(gljList, unitPriceList) {
+        // @todo 以后从js获取?
+        let labour = 2;
+        let machine = 64;
+
         // 循环组合数据
         for(let glj of gljList) {
             if (glj.code === undefined) {
@@ -106,7 +110,20 @@ class GLJListModel extends BaseModel {
             }
             glj.unit_price = unitPriceList[glj.code + glj.name] !== undefined ? unitPriceList[glj.code + glj.name] : null;
             // 计算调整基价
-            glj.adjust_price = glj.adjustment * glj.unit_price.market_price;
+            switch (glj.type) {
+                // 人工: 调整基价=基价单价*调整系数
+                case labour:
+                    glj.adjust_price = glj.adjustment * glj.unit_price.base_price;
+                    break;
+                // 机械类型的算法
+                case machine:
+
+                    break;
+                // 材料、主材、设备
+                default:
+                    glj.adjust_price = glj.unit_price.base_price;
+            }
+
         }
     }
 
@@ -124,9 +141,14 @@ class GLJListModel extends BaseModel {
             }
             // 首先查找是否有同编码同名称的工料机数据
             let projectGljData = await this.findDataByCondition({code: data.code, project_id: data.project_id});
-            if (projectGljData && projectGljData.id > 0) {
-                // 如果找到数据则直接返回
-                return projectGljData;
+            // 如果找不到数据则新增
+            if (!projectGljData) {
+                // 新增单条记录 (两个操作本来应该是事务操作,然而mongodb事务支持比较弱,就当作是都可以顺利执行)
+                let gljInsertData = await this.add(data);
+                if (!gljInsertData) {
+                    throw '新增项目工料机失败!';
+                }
+                projectGljData = gljInsertData;
             }
 
             // 获取标段对应的单价文件id
@@ -137,12 +159,6 @@ class GLJListModel extends BaseModel {
             }
             let unitPriceFileId = unitPriceFile.id;
 
-            // 新增单条记录 (两个操作本来应该是事务操作,然而mongodb事务支持比较弱,就当作是都可以顺利执行)
-            let gljInsertData = await this.add(data);
-            if (!gljInsertData) {
-                throw '新增项目工料机失败!';
-            }
-
             // 新增单价文件
             let unitPriceModel = new UnitPriceModel();
             let unitPriceInsertData = await unitPriceModel.updateUnitPrice(data, unitPriceFileId);
@@ -151,8 +167,8 @@ class GLJListModel extends BaseModel {
                 throw '新增单价失败!';
             }
 
-            gljInsertData.unit_price = unitPriceInsertData;
-            result = gljInsertData;
+            projectGljData.unit_price = unitPriceInsertData;
+            result = projectGljData;
         } catch (error) {
             console.log(error);
             result = null;

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

@@ -88,7 +88,7 @@ class UnitPriceModel extends BaseModel {
 
         // 如果有记录,判断是否存在一样的市场单价,有则直接返回数据
         let unitPriceIndex = this.isPriceIncluded(unitPriceData, data.market_price);
-        if (unitPriceData && unitPriceIndex > 0) {
+        if (unitPriceData && unitPriceIndex >= 0) {
             return unitPriceData[unitPriceIndex];
         }
 

+ 5 - 0
web/glj/html/glj_index.html

@@ -31,9 +31,14 @@
 <script type="text/javascript">
     let jsonData = '<%- gljList %>';
     let materialIdList = '<%- materialIdList %>';
+    // 不能修改市场价格的类型id
+    let canNotChangeTypeId = '64';
     if(materialIdList !== '') {
         materialIdList = materialIdList.split(",");
     }
+    if(canNotChangeTypeId !== '') {
+        canNotChangeTypeId = canNotChangeTypeId.split(",");
+    }
 </script>
 <%include footer.html %>
 <script type="text/javascript" src="/web/glj/js/glj_index.js"></script>

+ 52 - 9
web/glj/js/glj_index.js

@@ -17,13 +17,13 @@ $(document).ready(function () {
         {name: '总消耗量', field: '', visible: true},
         {name: '基价单价', field: "unit_price.base_price", visible: true},
         {name: '调整基价', field: 'adjust_price', visible: true},
-        {name: '市场单价', field: "unit_price.market_price", visible: true},
-        {name: '是否暂估', field: 'is_evaluate', visible: true, cellType: new GC.Spread.Sheets.CellTypes.CheckBox()},
+        {name: '市场单价', field: "unit_price.market_price", visible: true, validator: 'number'},
+        {name: '是否暂估', field: 'is_evaluate', visible: true, cellType: new GC.Spread.Sheets.CellTypes.CheckBox(),  validator: 'boolean'},
         {name: '供货方式', field: 'supply', visible: true},
         {name: '甲供数量', field: 'supply_quantity', visible: true},
         {name: '交货方式', field: 'delivery', visible: true},
         {name: '送达地点', field: 'delivery_address', visible: true},
-        {name: '不调价', field: 'is_adjust_price', visible: true, cellType: new GC.Spread.Sheets.CellTypes.CheckBox()},
+        {name: '不调价', field: 'is_adjust_price', visible: true, cellType: new GC.Spread.Sheets.CellTypes.CheckBox(),  validator: 'boolean'},
         {name: 'UID', field: 'unit_price.id', visible: false},
     ];
     // 数据转换格式
@@ -47,22 +47,22 @@ $(document).ready(function () {
 
     // 居中样式
     let centerStyleSetting = {hAlign: 1};
-    sheet.setStyle(-1, 11, getStyle(centerStyleSetting), GC.Spread.Sheets.SheetArea.viewport);
-    sheet.setStyle(-1, 16, getStyle(centerStyleSetting), GC.Spread.Sheets.SheetArea.viewport);
+    sheet.setStyle(-1, 10, getStyle(centerStyleSetting), GC.Spread.Sheets.SheetArea.viewport);
+    sheet.setStyle(-1, 15, getStyle(centerStyleSetting), GC.Spread.Sheets.SheetArea.viewport);
     sheet.setStyle(-1, 3, getStyle(centerStyleSetting), GC.Spread.Sheets.SheetArea.viewport);
 
     // 向右对齐样式
     let rightStyleSetting = {hAlign: GC.Spread.Sheets.HorizontalAlign.right};
+    sheet.setStyle(-1, 6, getStyle(rightStyleSetting), GC.Spread.Sheets.SheetArea.viewport);
     sheet.setStyle(-1, 7, getStyle(rightStyleSetting), GC.Spread.Sheets.SheetArea.viewport);
     sheet.setStyle(-1, 8, getStyle(rightStyleSetting), GC.Spread.Sheets.SheetArea.viewport);
     sheet.setStyle(-1, 9, getStyle(rightStyleSetting), GC.Spread.Sheets.SheetArea.viewport);
-    sheet.setStyle(-1, 10, getStyle(rightStyleSetting), GC.Spread.Sheets.SheetArea.viewport);
 
 
     // 设置可编辑列
+    sheet.getRange(-1, 9, -1, 1).locked(false);
     sheet.getRange(-1, 10, -1, 1).locked(false);
-    sheet.getRange(-1, 11, -1, 1).locked(false);
-    sheet.getRange(-1, 16, -1, 1).locked(false);
+    sheet.getRange(-1, 15, -1, 1).locked(false);
 
     // 设置json数据
     let rowCounter = 0;
@@ -91,6 +91,12 @@ $(document).ready(function () {
                 sheet.getRange(rowCounter, columnCounter, 1, 1).locked(true);
             }
 
+            // 如果类型为混凝土、砂浆、配合比、机械,则市场单价不能修改
+            if (columnInfo.field === 'unit_price.market_price' && canNotChangeTypeId.indexOf(data.unit_price.type + '') >= 0) {
+                // 锁定该单元格
+                sheet.getRange(rowCounter, columnCounter, 1, 1).locked(true);
+            }
+
             sheet.setValue(rowCounter, columnCounter, cellData, GC.Spread.Sheets.SheetArea.viewport);
             columnCounter++;
         }
@@ -157,6 +163,14 @@ $(document).ready(function () {
         if (isChanging) {
             return false;
         }
+        // 校验数据
+        let validator = header[column].validator !== undefined ? header[column].validator : null;
+        let value = info.newValue;
+        if (validator && !checkData(validator, value)) {
+            alert('数据格式错误,请重新输入!');
+            sheet.setValue(row, column, info.oldValue);
+            return false;
+        }
 
         // 获取id
         let idColumn = getFieldColumn(header, idString);
@@ -165,10 +179,11 @@ $(document).ready(function () {
         }
         let id = sheet.getValue(row, idColumn);
 
+
         $.ajax({
             url: '/glj/update',
             type: 'post',
-            data: {id: id, field: field, value: info.newValue, model: model},
+            data: {id: id, field: field, value: value, model: model},
             dataType: 'json',
             error: function() {
                 alert('数据传输有误!');
@@ -216,6 +231,11 @@ $(document).ready(function () {
         */
     });
 
+    // 绑定双击事件
+    sheet.bind(GC.Spread.Sheets.Events.CellDoubleClick, function (element, info) {
+        console.log(info);
+    });
+
 });
 
 /**
@@ -251,4 +271,27 @@ function getFieldColumn(data, field) {
     }
 
     return result;
+}
+
+/**
+ * 校验数据
+ *
+ * @param {string} validator
+ * @param {string} value
+ * @return {boolean}
+ */
+function checkData(validator, value) {
+    let result = false;
+    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;
 }