Browse Source

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

zhangweicheng 8 years ago
parent
commit
c443bf0c5a

+ 55 - 0
modules/common/const/engineering.js

@@ -0,0 +1,55 @@
+/**
+ * 专业工程相关常量
+ *
+ * @author CaiAoLin
+ * @date 2017/8/7
+ * @version
+ */
+const engineering = {
+    // 建筑工程
+    ARCHITECTURE: 1,
+    // 装饰工程
+    DECORATE: 2,
+    // 仿古建筑工程
+    ANTIQUE_ARCHITECTURE: 3,
+    // 安装工程
+    BUILD_IN: 4,
+    // 市政土建工程
+    MUNICIPAL_CONSTRUCTION: 5,
+    // 市政安装工程
+    MUNICIPAL_BUILD_IN: 6,
+    // 人工土石方工程
+    ARTIFICIAL_EARTHWORK: 7,
+    // 机械土石方工程
+    MECHANICAL_EARTHWORK: 8,
+    // 炉窖砌筑工程
+    KILN_MASONRY: 9,
+    // 园林工程
+    GARDEN: 10,
+    // 绿化工程
+    PLANTING: 11,
+    // 单拆除工程
+    DISMANTLE: 12,
+    // 建筑修缮工程
+    BUILDING_REPAIR: 13,
+    // 安装修缮工程
+    BUILD_IN_REPAIR: 14
+};
+const engineeringList = [
+    {name: "建筑工程", value: engineering.ARCHITECTURE},
+    {name: "装饰工程", value: engineering.DECORATE},
+    {name: "仿古建筑工程", value: engineering.ANTIQUE_ARCHITECTURE},
+    {name: "安装工程", value: engineering.BUILD_IN},
+    {name: "市政土建工程", value: engineering.MUNICIPAL_CONSTRUCTION},
+    {name: "市政安装工程", value: engineering.MUNICIPAL_BUILD_IN},
+    {name: "人工土石方工程", value: engineering.ARTIFICIAL_EARTHWORK},
+    {name: "机械土石方工程", value: engineering.MECHANICAL_EARTHWORK},
+    {name: "炉窖砌筑工程", value: engineering.KILN_MASONRY},
+    {name: "园林工程", value: engineering.GARDEN},
+    {name: "绿化工程", value: engineering.PLANTING},
+    {name: "单拆除工程", value: engineering.DISMANTLE},
+    {name: "建筑修缮工程", value: engineering.BUILDING_REPAIR},
+    {name: "安装修缮工程", value: engineering.BUILD_IN_REPAIR},
+];
+
+export {engineering as default, engineeringList as List};

+ 2 - 0
modules/pm/routes/pm_route.js

@@ -5,6 +5,7 @@
 
 let express = require('express');
 let pmController = require('./../controllers/pm_controller');
+const engineering = require("../../common/const/engineering");
 
 module.exports = function (app) {
 
@@ -22,6 +23,7 @@ module.exports = function (app) {
             compilationData: sessionCompilation,
             billValuation: JSON.stringify(billValuation),
             rationValuation: JSON.stringify(rationValuation),
+            engineeringList: JSON.stringify(engineering.List)
         };
         res.render('building_saas/pm/html/project-management.html', renderData);
     });

+ 32 - 16
public/calc_util.js

@@ -6,16 +6,20 @@
 
 let executeObj = {
     treeNode: null,
+    template: null,
+    calcBase: null,
+
     at: function(ID) {
         let me = executeObj,
             rst = 0;
-        rst = me.treeNode.data.calcTemplate.compiledTemplate[ID].unitFee;
+        rst = me.template.compiledCalcItems[ID].unitFee;
         rst = parseFloat(rst);
         return rst;
     },
     base: function(calcBaseName) {
         let me = executeObj, rst = 0,
-            base = getRationCalcBase(calcBaseName);
+            //base = getRationCalcBase(calcBaseName);
+            base = me.calcBase[calcBaseName];
 
         if (base != null) {
             let price = 0, tmpSum = 0;
@@ -33,18 +37,13 @@ let executeObj = {
         };
         return rst;
     }
-/*    factor: function(factorID) {
-        let me = executeObj;
-        let rst = 7.77;
-        return rst;
-    }*/
 };
 
 class Calculation {
     // 先编译公用的基础数据
-    compilePublics(feeRates, labourCoes, feeTypes){
+    compilePublics(feeRates, labourCoes, feeTypes, calcBases){
         let me = this;
-        let private_compile_feeFile = function() {
+        let private_compile_feeRateFile = function() {
             if (feeRates) {
                 me.compiledFeeRates = {};
                 for (let rate of feeRates) {
@@ -65,17 +64,29 @@ class Calculation {
                 me.compiledFeeTypes = {};
                 for (let ft of feeTypes) {
                     me.compiledFeeTypes[ft.type] = ft.name;
+                    me.compiledFeeTypes[ft.name] = ft.type;    // 中文预编译,可靠性有待验证
+                }
+            }
+        };
+        let private_compile_calcBase = function() {
+            if (calcBases) {
+                me.compiledCalcBases = {};
+                for (let cb of calcBases) {
+                    me.compiledCalcBases[cb.dispName] = cb;         // 中文预编译,可靠性有待验证
                 }
             }
         };
 
-        private_compile_feeFile();
+        private_compile_feeRateFile();
         private_compile_labourCoeFile();
         private_compile_feeType();
+        private_compile_calcBase();
+        me.compiledTemplates = {};
     };
 
     compileTemplate(template){
         let me = this;
+        me.compiledTemplates[template.ID] = template;
         template.hasCompiled = false;
         template.errs = [];
 
@@ -108,10 +119,10 @@ class Calculation {
             while (idx >= 0) {
                 let ID = private_extract_ID(item.expression, idx);
                 if (ID.length > 0) {
-                    let subItem = template.compiledTemplate[ID];
+                    let subItem = template.compiledCalcItems[ID];
                     if (subItem) {
                         if (subItem.ID !== item.ID) {
-                            private_parse_ref(subItem, template.compiledTemplate[ID + "_idx"]);
+                            private_parse_ref(subItem, template.compiledCalcItems[ID + "_idx"]);
                         } else {
                             template.errs.push("There exists the self refer ID: " + ID);
                         }
@@ -154,12 +165,12 @@ class Calculation {
 
         if (template && template.calcItems && template.calcItems.length > 0) {
             template.compiledSeq = [];
-            template.compiledTemplate = {};
+            template.compiledCalcItems = {};
 
             for (let i = 0; i < template.calcItems.length; i++) {
                 let item = template.calcItems[i];
-                template.compiledTemplate[item.ID] = item;
-                template.compiledTemplate[item.ID + "_idx"] = i;
+                template.compiledCalcItems[item.ID] = item;
+                template.compiledCalcItems[item.ID + "_idx"] = i;
             }
 
             for (let i = 0; i < template.calcItems.length; i++) {
@@ -176,11 +187,16 @@ class Calculation {
 
     calculate($treeNode){
         let me = this;
-        let template = $treeNode.data.calcTemplate;
+        let templateID = $treeNode.data.calcTemplateID;
+        if (!templateID) templateID = 1;
+        let template = me.compiledTemplates[templateID];
+        $treeNode.data.calcTemplate = template;
 
         if ($treeNode && template.hasCompiled) {
             let $CE = executeObj;
             $CE.treeNode = $treeNode;
+            $CE.template = template;
+            $CE.calcBase = me.compiledCalcBases;
 
             if (!$treeNode.fees) {
                 $treeNode.fees = [];

+ 1 - 0
server.js

@@ -3,6 +3,7 @@ let express = require('express');
 let config = require("./config/config.js");
 let fileUtils = require("./modules/common/fileUtils");
 let dbm = require("./config/db/db_manager");
+///config.setToLocalDb();
 config.setupDb(process.env.NODE_ENV);
 
 let path = require('path');

+ 3 - 4
test/tmp_data/test_ration_calc/ration_calc_base.js

@@ -85,13 +85,12 @@ let rationCalcBase = [
     }
 ];
 
+// 该方法暂时不用,已使用中文预编译的方式代替,但可靠性有待验证,若有问题再用回来。
 function getRationCalcBase(dispName){
-    let rst = null;
     for (let base of rationCalcBase) {
        if (base.dispName == dispName) {
-           rst = base;
-           break;
+           return base;
        };
     }
-    return rst;
+    return null;
 };

+ 2 - 3
web/building_saas/main/js/models/calc_program.js

@@ -3599,20 +3599,19 @@ class CalcProgram {
     };
 
     compileAllTemps(){
-        this.calc.compilePublics(calcFeeRates, calcLabourCoes, feeType);
+        this.calc.compilePublics(calcFeeRates, calcLabourCoes, feeType, rationCalcBase);
         for (let calcTemplate of calcTemplates){
             this.calc.compileTemplate(calcTemplate);
         };
     };
 
     compile(calcTemplate){
-        this.calc.compilePublics(calcFeeRates, calcLabourCoes, feeType);
+        //this.calc.compilePublics(calcFeeRates, calcLabourCoes, feeType, rationCalcBase);
         this.calc.compileTemplate(calcTemplate);
     };
 
     calculate(treeNode){
         treeNode.data.gljList = this.project.ration_glj.getGljArrByRation(treeNode.data.ID);
-        treeNode.data.calcTemplate = calcTemplates[0];  // AAAAAA = getCalcTemplate($RATION.calcTemplateID);
         this.calc.calculate(treeNode);
     };
 }

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

@@ -229,7 +229,7 @@ let calcProgramObj = {
     initSheet: function (sheet) {
         var me = this;
         me.sheet = sheet;
-        sheetCommonObj.initSheet(me.sheet, me.setting, 20);
+        sheetCommonObj.initSheet(me.sheet, me.setting, 1);
     },
 
     showData: function (treeNode) {

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

@@ -62,7 +62,7 @@ $("#linkJSCX").click(function(){        // 计算程序
     let sel = projectObj.mainController.tree.selected;
 
     if (sel.sourceType === projectObj.project.Bills.getSourceType() || sel.sourceType === projectObj.project.Ration.getSourceType()) {
-        calcProgramObj.showData(node);
+        calcProgramObj.showData(sel);
     } else {
         calcProgramObj.clearData();
     };

+ 2 - 1
web/building_saas/pm/html/project-management.html

@@ -359,7 +359,7 @@
                     </div>
                     <div class="form-group">
                         <label>工程专业</label>
-                        <select class="form-control"><option>建筑工程</option></select>
+                        <select class="form-control" id="tender-engineering"><option>建筑工程</option></select>
                     </div>
                 </form>
             </div>
@@ -614,5 +614,6 @@
 <script type="text/javascript">
     let billValuation = '<%- billValuation %>';
     let rationValuation = '<%- rationValuation %>';
+    let engineeringList = '<%- engineeringList %>';
 </script>
 </html>

+ 32 - 30
web/building_saas/pm/js/pm_main.js

@@ -8,6 +8,7 @@
 let Tree = null;
 let movetoZTree = null;
 let copytoZTree = null;
+let engineering = [];
 let projectType = {
     folder: 'Folder',
     tender: 'Tender',
@@ -170,7 +171,7 @@ $(document).ready(function() {
             if (valuation === null) {
                 continue;
             }
-            html += '<option value="'+ valuation._id +'">'+ valuation.name +'</option>';
+            html += '<option value="'+ valuation._id +'" data-engineering="'+ valuation.engineering +'">'+ valuation.name +'</option>';
         }
         $("#valuation").html(html);
     });
@@ -228,12 +229,19 @@ $(document).ready(function() {
         if (projectInfo !== null) {
             let savedProjectData = localStorage.getItem(projectInfo.data.name);
             savedProjectData = JSON.parse(savedProjectData);
+            // 填入计价规则
             let valuationHtml = '<option value="'+ savedProjectData.valuation +'">'+ savedProjectData.valuationName +'</option>';
             $("#tender-valuation").html(valuationHtml);
 
+            // 填入工程专业
+            let engineeringString = getEngineeringName(savedProjectData.engineering);
+            let engineeringHtml = '<option value="'+ savedProjectData.engineering +'">'+ engineeringString +'</option>';
+            $("#tender-engineering").html(engineeringHtml);
+
             $("input[name='tender_valuation_type']").attr('disabled', 'disabled').removeAttr('checked', 'checked');
             $("input[name='tender_valuation_type'][value='"+ savedProjectData.valuationType +"']")
                 .attr("checked", "checked").removeAttr('disabled', 'disabled');
+
         }
 
     });
@@ -493,6 +501,8 @@ function init() {
     $(".tools-btn > a").not(".disabled").addClass("disabled");
     $("#add-folder-btn").removeClass("disabled");
     $("#add-project-btn").removeClass("disabled");
+
+    engineering = engineeringList !== null && engineeringList !== undefined ? JSON.parse(engineeringList) : [];
 }
 
 /**
@@ -513,13 +523,15 @@ function AddProject() {
     }
     let valuationName = $("#valuation").children("option:selected").text();
     let valuationType = $("input[name='valuation_type']:checked").val();
+    let engineering = $("#valuation").children("option:selected").data("engineering");
     let callback = function() {
         $("#add-project-dialog").modal("hide");
         // 记录选择后的信息
         let projectInfo = {
             valuation: valuation,
             valuationType: valuationType,
-            valuationName: valuationName
+            valuationName: valuationName,
+            engineering: engineering
         };
         localStorage.setItem(name, JSON.stringify(projectInfo));
     };
@@ -860,34 +872,24 @@ function GetTargetTreeNode(zTreeObj) {
     return ztree_selected ? Tree.findNode(ztree_selected.id) : null;
 }
 
-
-var GetNextChangeUpdateData = function (datas, node, next) {
-    var data = null;
-    if (node && node.id() !== -1) {
-        data = {};
-        data['updateType'] = 'update';
-        data['updateData'] = {};
-        data['updateData'][Tree.setting.tree.id] = node.id();
-        data['updateData'][Tree.setting.tree.nid] = next ? next.id() : -1;
-        datas.push(data);
+/**
+ * 根据指定id获取对应的工程专业
+ *
+ * @param {Number} id
+ * @return {String}
+ */
+function getEngineeringName(id) {
+    let result = '';
+    if (engineering.length <= 0) {
+        return result;
     }
-    return data;
-}
 
-var GetMoveUpdateData = function (node, parent, next) {
-    var datas = [], updateData;
-    updateData = GetNextChangeUpdateData(datas, node.preSibling(), node.nextSibling);
-    if (next) {
-        updateData = GetNextChangeUpdateData(datas, next.preSibling(), node);
+    for(let tmp of engineering) {
+        if (tmp.value === id) {
+            result = tmp.name;
+            break;
+        }
     }
-    console.log(updateData);
-    return false;
-    updateData = {};
-    updateData['updateType'] = 'update';
-    updateData['updateData'] = {};
-    updateData['updateData'][Tree.setting.tree.id] = node.id();
-    updateData['updateData'][Tree.setting.tree.pid] = parent ? parent.id() : -1;
-    updateData['updateData'][Tree.setting.tree.nid] = next ? next.id() : -1;
-    datas.push(updateData);
-    return datas;
-};
+
+    return result;
+}