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