Browse Source

decimal调整结构

zhongzewei 7 years ago
parent
commit
04571636ba

+ 1 - 2
modules/pm/models/project_model.js

@@ -26,13 +26,12 @@ let fileType = {
     unitPriceFile: 'UnitPriceFile',
     feeRateFile: 'FeeRateFile'
 };
-//默认的小数位数
+//默认的小数位数,用于定义用户可编辑的字段(入库),用户不可编辑的字段在前端defaultDecima._def中定义即可
 const defaultDecimal = {
     bills: {unitPrice: 2, totalPrice: 2},
     ration: {quantity: 3, unitPrice: 2, totalPrice: 2},
     glj: {quantity: 3, unitPrice: 2},
     feeRate: 2,
-    process: 6//中间过程,用于未定义取舍位数
 };
 
 let ProjectsDAO = function(){};

+ 3 - 2
web/building_saas/main/js/views/character_content_view.js

@@ -746,8 +746,9 @@ let pageCCOprObj = {
                     selectedNode.data[txtObj.field] = txtObj.text;
                     me.showData(oprObj.workBook.getSheet(0), oprObj.setting, oprObj.currentCache);//刷新特征及内容Spread
                     if(updateCol){
-                        projectObj.mainSpread.getActiveSheet().setValue(me.mainActiveCell.row, updateCol, txtObj.text + ''); //刷新输出显示
-                        projectObj.mainSpread.getActiveSheet().autoFitRow(me.mainActiveCell.row);
+                        let activeCell = projectObj.mainSpread.getActiveSheet().getSelections()[0];
+                        projectObj.mainSpread.getActiveSheet().setValue(activeCell.row, updateCol, txtObj.text + ''); //刷新输出显示
+                        projectObj.mainSpread.getActiveSheet().autoFitRow(activeCell.row);
                     }
                 }
             }

+ 73 - 41
web/building_saas/main/js/views/project_property_decimal_view.js

@@ -2,18 +2,21 @@
  * Created by Zhong on 2017/11/13.
  */
 //default setting
-let decimalObj = {
-    default: {
-        min: 0,
-        max: 6,
-        bills: {unitPrice: 2, totalPrice: 2},
-        ration: {quantity: 3, unitPrice: 2, totalPrice: 2},
-        glj: {quantity: 3, unitPrice: 2},
-        feeRate: 2,
-        process: 6
+let defaultDecimal = {
+    min: 0,
+    max: 6,
+    _def: {//定义往这加, editable: 开放给用户编辑的(入库),定义editable为true的字段时,要在后端project_model.js defaultDecimal中添加定义,html添加input
+        bills: {editable: true, data: {unitPrice: 2, totalPrice: 2}},
+        ration: {editable: true, data: {quantity: 3, unitPrice: 2, totalPrice: 2}},
+        glj: {editable: true, data: {quantity: 3, unitPrice: 2}},
+        feeRate: {editable: true, data: 2},
+        quantity_detail: {editable: false, data: 4},
+        process: {editable: false, data: 6}
     }
 };
 
+let decimalObj = Object.create(null);
+
 function isUndef(v) {
     return v === undefined || v === null;
 }
@@ -35,33 +38,62 @@ function isInt(v){
 }
 
 function isValidDigit(v){
-    return isInt(v) && v >= decimalObj.default.min && v <= decimalObj.default.max;
+    return isInt(v) && v >= defaultDecimal.min && v <= defaultDecimal.max;
+}
+
+//newV用户可编辑数据
+function toUpdateDecimal(orgV, newV){
+    let rst = false;
+    let len = Object.keys(newV).length;
+    reCompare(orgV, newV);
+    function reCompare(orgV, newV){
+        for(let attr in newV){
+            if(Object.keys(newV[attr]).length > 0){
+                if(isUndef(orgV[attr])){
+                    rst =  true;
+                    return;
+                }
+                else{
+                    reCompare(orgV[attr], newV[attr]);
+                }
+            }
+            else {
+                if(isUndef(orgV[attr]) || parseInt(newV[attr]) !== parseInt(orgV[attr])){
+                    rst = true;
+                    return;
+                }
+            }
+        }
+    }
+    return rst;
 }
 
 function setDecimal(_digits, data){
     if(isDef(data)){
-        _digits.bills = data.bills || decimalObj.default.bills;
-        _digits.ration = data.ration || decimalObj.default.ration;
-        _digits.glj = data.glj || decimalObj.default.glj;
-        _digits.feeRate = data.feeRate || decimalObj.default.feeRate;
-        _digits.process = data.process || decimalObj.default.process;
+        for(let attr in data){//设置入库的数据
+            _digits[attr] = data[attr] || defaultDecimal['_def'][attr]['data'];
+        }
+        for(let attr in defaultDecimal['_def']){//设置不入库的数据
+            if(!defaultDecimal['_def'][attr]['editable']){
+                _digits[attr] = defaultDecimal['_def'][attr]['data'];
+            }
+        }
     }
     else {
-        _digits.bills = decimalObj.default.bills;
-        _digits.ration = decimalObj.default.ration;
-        _digits.glj = decimalObj.default.glj;
-        _digits.feeRate = decimalObj.default.feeRate;
-        _digits.process = decimalObj.default.process;
+        for(let attr in defaultDecimal['_def']){
+            _digits[attr] = defaultDecimal['_def'][attr]['data'];
+        }
     }
 }
+
 //获取decimalPanel中要展示的数据
 function m_getInitData(data){
     let rst = Object.create(null);
-    rst.bills = data.bills;
-    rst.ration = data.ration;
-    rst.glj = data.glj;
-    rst.feeRate = data.feeRate;
-    rst.process = data.process;
+    for(let attr in defaultDecimal['_def']){
+        if(defaultDecimal['_def'][attr]['editable'] && isDef(data[attr])){
+            rst[attr] = data[attr];
+        }
+    }
     return rst;
 }
 //获取小数位数panel里的数据
@@ -82,8 +114,6 @@ function m_getDecimalData(inputs){
             rst[attrs[0]] = parseInt($(inputs[i]).val());
         }
     }
-    //set process
-    rst['process'] = decimalObj.default.process;
     return rst;
 }
 
@@ -95,16 +125,16 @@ function v_initPanel(data){
                     let str = attr + '-' + subAttr;
                     let jqs = 'input[name="' + str + '"]';
                     $(jqs).val(data[attr][subAttr]);
-                    $(jqs).attr('min', decimalObj.default.min);
-                    $(jqs).attr('max', decimalObj.default.max);
+                    $(jqs).attr('min', defaultDecimal.min);
+                    $(jqs).attr('max', defaultDecimal.max);
                 }
             }
             else {
                 let str = attr + '';
                 let jqs = 'input[name="' + str + '"]';
                 $(jqs).val(data[attr]);
-                $(jqs).attr('min', decimalObj.default.min);
-                $(jqs).attr('max', decimalObj.default.max);
+                $(jqs).attr('min', defaultDecimal.min);
+                $(jqs).attr('max', defaultDecimal.max);
             }
         }
     }
@@ -136,7 +166,9 @@ function e_bindCof(btn){
     btn.bind('click', function () {
         //获取更新的数据
         let updateDecimal = m_getDecimalData($('input', '#poj-settings-decimal'));
-        a_updateDigits(updateDecimal);
+        if(toUpdateDecimal(decimalObj, updateDecimal)){
+            a_updateDigits(updateDecimal);
+        }
     });
 }
 
@@ -162,23 +194,23 @@ function a_updateDigits(updateDecimal){
         setDecimal(decimalObj, updateDecimal);
         let v_data = m_getInitData(decimalObj);
         v_initPanel(v_data);
+        console.log(decimalObj);
     };
     let errCaller = function () {
         alert('更新小数位数失败!');
+        let v_data = m_getInitData(decimalObj);
+        v_initPanel(v_data);
     };
     CommonAjax.post(url, postData, scCaller, errCaller);
 }
 
 $(document).ready(function () {
-    //绑定小数位数输入控制
-    e_validIn($('input', '#poj-settings-decimal'));
-    //绑定小数位数确认更新按钮
-    $('#tab_poj-settings-decimal').on('shown.bs.tab', function (e) {
-        e_bindCof($('#property_ok'));
+    $('#poj-set').on('shown.bs.modal', function (e) {
         let v_data = m_getInitData(decimalObj);
         v_initPanel(v_data);
-   });
-    $('#tab_poj-settings-decimal').on('hidden.bs.tab', function (e) {
-        e_unbindCof($('#property_ok'));
-    })
+    });
+    //绑定确定按钮
+    e_bindCof($('#property_ok'));
+    //绑定小数位数输入控制
+    e_validIn($('input', '#poj-settings-decimal'));
 });