فهرست منبع

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost

zhongzewei 7 سال پیش
والد
کامیت
05da610fdd

+ 66 - 30
web/building_saas/main/js/models/calc_program.js

@@ -5,7 +5,7 @@
  *  用到费率的规则必须有feeRateID属性,当有该属性时,会自动显示费率值。
  */
 
-let billDefaultTemplate = [
+let defaultBillTemplate = [
     {
         ID: 1,
         serialNo: '一',
@@ -14,7 +14,6 @@ let billDefaultTemplate = [
         dispExpr: "A1+A2+A3",
         statement: "人工费+材料费+机械费",
         feeRate: null,
-        type: 'RationDirect',
         memo: ''
     },
     {
@@ -22,10 +21,10 @@ let billDefaultTemplate = [
         serialNo: '1',
         code: "A1",
         name: "人工费",
-        dispExpr: "H_J",
+        dispExpr: "HJ",
         statement: "合计",
-        feeRate: 0,
-        type: 'labour',
+        feeRate: 50,
+        fieldName: 'labour',
         memo: ''
     },
     {
@@ -33,10 +32,10 @@ let billDefaultTemplate = [
         serialNo: '2',
         code: "A2",
         name: "材料费",
-        dispExpr: "H_J",
+        dispExpr: "HJ",
         statement: "合计",
-        feeRate: 100,
-        type: 'material',
+        feeRate: 30,
+        fieldName: 'material',
         memo: ''
     },
     {
@@ -44,10 +43,10 @@ let billDefaultTemplate = [
         serialNo: '3',
         code: "A3",
         name: "机械费",
-        dispExpr: "H_J",
+        dispExpr: "HJ",
         statement: "合计",
-        feeRate: 0,
-        type: 'machine',
+        feeRate: 20,
+        fieldName: 'machine',
         memo: ''
     },
     {
@@ -57,8 +56,8 @@ let billDefaultTemplate = [
         name: "管理费",
         dispExpr: "A",
         statement: "定额直接费",
-        feeRate: 0,
-        type: 'management',
+        feeRate: null,
+        fieldName: 'manage',
         memo: ''
     },
     {
@@ -68,8 +67,8 @@ let billDefaultTemplate = [
         name: "利润",
         dispExpr: "A",
         statement: "定额直接费",
-        feeRate: 0,
-        type: 'profit',
+        feeRate: null,
+        fieldName: 'profit',
         memo: ''
     },
     {
@@ -80,7 +79,7 @@ let billDefaultTemplate = [
         dispExpr: "",
         statement: "",
         feeRate: null,
-        type: 'risk',
+        fieldName: 'risk',
         memo: ''
     },
     {
@@ -90,8 +89,8 @@ let billDefaultTemplate = [
         name: "综合单价",
         dispExpr: "A+B",
         statement: "定额直接费+利润",
-        feeRate: NaN,
-        type: 'common',
+        feeRate: null,
+        fieldName: 'common',
         memo: ''
     }
 ];
@@ -184,26 +183,26 @@ class CalcProgram {
     };
 
     checkFee(treeNode, ftObj){
-        if (!treeNode.data.feesIndex[ftObj.type]){
+        if (!treeNode.data.feesIndex[ftObj.fieldName]){
             let fee = {
-                'fieldName': ftObj.type,
+                'fieldName': ftObj.fieldName,
                 'unitFee': ftObj.unitFee,
                 'totalFee': ftObj.totalFee,
                 'tenderUnitFee': 0,
                 'tenderTotalFee': 0
             };
             treeNode.data.fees.push(fee);
-            treeNode.data.feesIndex[ftObj.type] = fee;
+            treeNode.data.feesIndex[ftObj.fieldName] = fee;
             treeNode.changed = true;
         }
         else{
-            if (treeNode.data.feesIndex[ftObj.type].unitFee != ftObj.unitFee){
-                treeNode.data.feesIndex[ftObj.type].unitFee = ftObj.unitFee;
+            if (treeNode.data.feesIndex[ftObj.fieldName].unitFee != ftObj.unitFee){
+                treeNode.data.feesIndex[ftObj.fieldName].unitFee = ftObj.unitFee;
                 treeNode.changed = true;
             };
 
-            if (treeNode.data.feesIndex[ftObj.type].totalFee != ftObj.totalFee){
-                treeNode.data.feesIndex[ftObj.type].totalFee = ftObj.totalFee;
+            if (treeNode.data.feesIndex[ftObj.fieldName].totalFee != ftObj.totalFee){
+                treeNode.data.feesIndex[ftObj.fieldName].totalFee = ftObj.totalFee;
                 treeNode.changed = true;
             };
         };
@@ -225,7 +224,7 @@ class CalcProgram {
 
             for (let ft of feeType) {
                 let ftObj = {};
-                ftObj.type = ft.type;
+                ftObj.fieldName = ft.type;
                 ftObj.name = ft.name;
                 let uf = 0, tf = 0, tuf = 0, ttf = 0;
                 for (let item of objsArr) {
@@ -261,6 +260,39 @@ class CalcProgram {
         return rst;
     };
 
+    calcDefaultBillTemp(treeNode, totalPrice){
+        let me = this;
+        let rst = [];
+        if (treeNode.sourceType != this.project.Bills.getSourceType()){return rst};
+        me.initFees(treeNode);
+        for (let item of defaultBillTemplate) {
+            let num = totalPrice;
+            item.dispExprUser = item.dispExpr;
+            item.displayFieldName = me.calc.compiledFeeTypes[item.fieldName];
+
+            if (item.feeRate)
+                item.unitFee = (totalPrice * item.feeRate * 0.01).toDecimal(me.digit)
+            else
+                item.unitFee = 0;
+
+            let quantity = treeNode.data.quantity;
+            if (!quantity) quantity = 0;
+            item.totalFee = (item.unitFee * quantity).toDecimal(me.digit);
+            item.tenderUnitFee = 0;
+            item.tenderTotalFee = 0;
+
+            me.checkFee(treeNode, item);
+        };
+
+        if (treeNode.changed) {
+            me.saveAndCalcParents(treeNode);
+            delete treeNode.changed;
+        };
+
+        rst = defaultBillTemplate;
+        return rst;
+    };
+
     getCalcDatas(treeNode){
         let me = this;
         let rst = [];
@@ -294,10 +326,14 @@ class CalcProgram {
                 }else{                  // 前三种计算模式下的叶子清单:汇总定额的计算程序的费用类别
                     rst = me.gatherFeeTypes(treeNode, CP_GatherType.rations);
                 };
-            }else if (ct == childrenType.volumePrice){
-                rst = [];
-            }else if (ct == childrenType.formula){
-                rst = [];
+            }
+            else if (ct == childrenType.volumePrice){
+                let totalPrice = 10000;
+                rst = me.calcDefaultBillTemp(treeNode, totalPrice);
+            }
+            else if (ct == childrenType.formula){
+                let totalPrice = 20000;
+                rst = me.calcDefaultBillTemp(treeNode, totalPrice);
             };
         }
         else if (isBill){    // 父清单:汇总子清单的费用类别

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

@@ -25,6 +25,7 @@ const CP_Col_Width = {          // 多处计算程序界面的列宽统一设置
     rowHeader: 30,
     colHeader: 30,              // 这个是标题栏高度不是宽度,也写在一起
     code: 70,
+    serialNo: 50,
     name: 200,
     dispExprUser: 180,
     feeRate: 60,

+ 17 - 1
web/building_saas/main/js/views/calc_program_view.js

@@ -213,7 +213,7 @@ let calcProgramObj = {
         ],
         view: {
             comboBox: [],
-            lockColumns: [0,1,2,3,4,5,6,7,8],
+            lockColumns: [0,1,2,3,4,5,6,7,8,9],
             colHeaderHeight: CP_Col_Width.colHeader,
             rowHeaderWidth: CP_Col_Width.rowHeader
         }
@@ -229,6 +229,22 @@ let calcProgramObj = {
         var me = this;
         me.treeNode = treeNode;
         me.datas = projectObj.project.calcProgram.getCalcDatas(treeNode);
+
+        function checkSerialNo() {     // 检测序号列。隐藏列的方式焦点难控制,体验不佳,这里动态添加删除。
+            let srlCol = {headerName: "序号", headerWidth: CP_Col_Width.serialNo, dataCode: "serialNo", dataType: "String", hAlign: "center"};
+            if (me.datas.length > 0 && me.datas[0].serialNo){
+                if (me.setting.header[0].dataCode != "serialNo"){
+                    me.setting.header.splice(0, 0, srlCol);
+                };
+            }
+            else {
+                if (me.setting.header[0].dataCode == "serialNo"){
+                    me.setting.header.splice(0, 1);
+                };
+            }
+        };
+
+        checkSerialNo();
         sheetCommonObj.initSheet(me.sheet, me.setting, me.datas.length);
         sheetCommonObj.showData(me.sheet, me.setting, me.datas);