Ver código fonte

Merge branch 'master' of http://192.168.1.12:3000/SmartCost/ConstructionCost

TonyKang 7 anos atrás
pai
commit
b55b1b216f

+ 2 - 2
modules/main/models/proj_setting_model.js

@@ -20,8 +20,8 @@ class projSettingModel extends baseModel {
 /*                if (!data.billsCalcMode) {
                     data.billsCalcMode = settingConst.billsCalcMode.rationContent;
                 }
-                if (!data.zanguCalcMode) {
-                    data.zanguCalcMode = settingConst.zanguCalcMode.common;
+                if (!data.zanguCalcType) {
+                    data.zanguCalcType = settingConst.zanguCalcType.common;
                 }
                 data.settingConst = settingConst;*/
                 callback(0, collectionName, data);

+ 3 - 3
modules/main/models/schemas/proj_setting.js

@@ -9,7 +9,7 @@ let collectionName = 'proj_setting';
     billsCalcMode: {
         rationContent: 0, rationPriceConverse: 1, rationPrice: 2, billsPrice: 3
     },
-    zanguCalcMode: {
+    zanguCalcType: {
         common: 0, gatherMaterial: 1
     }
 }*/
@@ -27,9 +27,9 @@ let projSettingSchema = {
         type: Number,
         default: settingConst.billsCalcMode.rationContent
     },
-    zanguCalcMode: {
+    zanguCalcType: {
         type: Number,
-        default: settingConst.zanguCalcMode.common
+        default: settingConst.zanguCalcType.common
     }*/
 };
 let model = mongoose.model(collectionName, new Schema(projSettingSchema, {versionKey: false, collection: collectionName}));

+ 11 - 8
modules/ration_glj/facade/glj_calculate_facade.js

@@ -11,6 +11,7 @@ let ration_coe = mongoose.model('ration_coe');
 let std_ration_lib_ration_items = mongoose.model('std_ration_lib_ration_items');
 let glj_type_util = require('../../../public/cache/std_glj_type_util');
 const scMathUtil = require('../../../public/scMathUtil').getUtil();
+let decimal_facade = require('../../main/facade/decimal_facade');
 
 module.exports={
     calculateQuantity:calculateQuantity,
@@ -86,7 +87,9 @@ function generateUpdateTasks(result) {
 
 
 async function calculateQuantityPerGLJ(glj,index,coeList,assList,adjustState,noNeedCal) {
-    let quantity =  scMathUtil.roundTo(parseFloat(glj.quantity),-6);
+    let decimalObject =await decimal_facade.getProjectDecimal(glj.projectID);
+    let decimal = (decimalObject&&decimalObject.glj&&decimalObject.glj.quantity)?decimalObject.glj.quantity:3;
+    let quantity =  scMathUtil.roundTo(parseFloat(glj.quantity),-decimal);
     let result={
         query:{
             ID:glj.ID,
@@ -99,7 +102,7 @@ async function calculateQuantityPerGLJ(glj,index,coeList,assList,adjustState,noN
     try {
         if(noNeedCal==null){
             if(!glj._doc.hasOwnProperty('customQuantity')||glj.customQuantity==null){
-                quantity =scMathUtil.roundTo(parseFloat(glj.rationItemQuantity),-6);
+                quantity =scMathUtil.roundTo(parseFloat(glj.rationItemQuantity),-decimal);
                 quantity =calculateAss(quantity,assList,glj);
                 quantity = calculateQuantityByCoes(quantity,coeList,glj);
             }else {
@@ -110,9 +113,9 @@ async function calculateQuantityPerGLJ(glj,index,coeList,assList,adjustState,noN
             if(customerCoe.isAdjust==1){
                 quantity = calculateQuantityByCustomerCoes(quantity,customerCoe,glj);
             }
-            result.doc.quantity =_.round(quantity,3);
+            result.doc.quantity =scMathUtil.roundToString(quantity,decimal);
         }
-        generateAdjustState(glj,coeList,adjustState,index);
+        generateAdjustState(glj,coeList,adjustState,index,result.doc.quantity);
         return result;
     }catch (err){
         throw err;
@@ -134,12 +137,12 @@ function calculateAss(quantity,assList,glj) {
     return scMathUtil.roundTo(quantity,-6);
 }
 
-function generateAdjustState(glj,coeList,adjustState,index) {
+function generateAdjustState(glj,coeList,adjustState,index,quantity) {
    //替换工料机 and 添加工料机
     if(glj._doc.createType=='replace'){
         adjustState.push({index:stateSeq.replase,content:glj.rcode+'换'+glj.code});
     }else if(glj._doc.createType=='add'){
-        adjustState.push({index:stateSeq.add,content:'添'+glj.code+'量'+glj.quantity});
+        adjustState.push({index:stateSeq.add,content:'添'+glj.code+'量'+parseFloat(quantity)});
     }
     // to do
 
@@ -158,8 +161,8 @@ function generateAdjustState(glj,coeList,adjustState,index) {
 
     //自定义消耗量
     if(glj._doc.createType!='add'&&glj._doc.hasOwnProperty('customQuantity')){
-        if(glj.customQuantity!==null){
-            adjustState.push({index:stateSeq.cusQuantity,content:glj.code+'量'+glj.customQuantity});
+        if(glj.customQuantity!==null&&glj.customQuantity!=""){
+            adjustState.push({index:stateSeq.cusQuantity,content:glj.code+'量'+parseFloat(glj.customQuantity)});
         }
     }
     //市场单价调整

+ 2 - 1
server.js

@@ -52,7 +52,8 @@ app.use(bodyParser.json({limit: '3mb'}));
 app.use(session({
     name: 'usersSession',
     secret: 'session users secret',
-    cookie: {maxAge: 1000*60*60},
+    // @todo 上线前修改回正常值 (目前为24小时)
+    cookie: {maxAge: 3600 * 24 * 1000},
     resave: false,
     rolling: true,
     saveUninitialized: true

+ 1 - 1
web/building_saas/css/main.css

@@ -318,5 +318,5 @@ body {
   pointer-events:none
 }
 .text-green{
-    color:#00FF00
+    color: #172a30
 }

+ 16 - 15
web/building_saas/main/html/main.html

@@ -235,7 +235,7 @@
                                 <li class="nav-item"><a class="nav-link" data-toggle="pill" href="#poj-settings-billsQuanDecimal" id="tab_poj-settings-bqDecimal" role="tab">清单工程量精度</a></li>
                                 <li class="nav-item"><a class="nav-link" data-toggle="pill" href="#poj-settings-decimal" role="tab" id="tab_poj-settings-decimal">小数位数</a></li>
                                 <li class="nav-item"><a class="nav-link" data-toggle="pill" href="#poj-settings-6" role="tab" id="tab_poj-settings-6">人工单价调整</a></li>
-                                <li class="nav-item"><a class="nav-link" data-toggle="pill" href="#display_setting" role="tab" id="tab_display_setting">呈现选项</a></li>
+                                <li class="nav-item"><a class="nav-link" data-toggle="pill" href="#display-setting" role="tab" id="tab_display_setting">呈现选项</a></li>
                             </ul>
                         </div>
                         <div class="col-9">
@@ -384,23 +384,24 @@
                                     <div style="height:8px;"></div>
                                     <div class="modal-auto-height" id="labourCoeSpread"></div>
                                 </div>
-                                <!--人工单价调整-->
-                                <div class="tab-pane fade" id="display_setting" role="tabpanel">
-                                    <fieldset class="form-group">
-                                        <div class="row px-3">
-                                            <div class="checkbox">
+                                <!--呈现选项-->
+                                <div class="tab-pane fade" id="display-setting" role="tabpanel">
+                                    <div class="modal-auto-height" style="overflow: hidden">
+                                        <fieldset class="form-group">
+                                            <div class="form-check">
                                                 <label class="form-check-label">
-                                                    <input type="checkbox" id="autoHeight" class="form-check-input">造价书表格自动调整行高
+                                                    <input class="form-check-input" id="autoHeight" value="1" type="checkbox">
+                                                    造价书表格自动调整行高
                                                 </label>
                                             </div>
-                                        </div>
-                                        <div style="height:8px;"></div>
-                                        <div class="checkbox">
-                                            <label class="form-check-label">
-                                                <input type="checkbox" id="disPlayMainMateria" class="form-check-input">定额下显示主村、设备
-                                            </label>
-                                        </div>
-                                    </fieldset>
+                                            <div class="form-check">
+                                                <label class="form-check-label">
+                                                    <input class="form-check-input" id="disPlayMainMaterial" value="1" type="checkbox">
+                                                    定额下显示主材、设备
+                                                </label>
+                                            </div>
+                                        </fieldset>
+                                    </div>
                                 </div>
                             </div>
                         </div>

+ 226 - 68
web/building_saas/main/js/models/calc_base.js

@@ -51,6 +51,9 @@ let cbTools = {
     isNum: function (v) {
         return this.isDef(v) && !isNaN(v) && v !== Infinity;
     },
+    isFlag: function (v) {
+        return this.isDef(v.flagsIndex) && this.isDef(v.flagsIndex.fixed);
+    },
     returnV: function (v, r) {
         if(this.isDef(v)){
             return v;
@@ -72,12 +75,25 @@ let cbTools = {
             if(this.isDef(bills[i].flagsIndex.fixed)){
                 for(let flag in fixedFlag){
                     if(fixedFlag[flag] === bills[i].flagsIndex.fixed.flag){
-                        billsObj[fixedFlag[flag]] = bills[i];
+                        billsObj[fixedFlag[flag]] = Object.create(null);
+                        billsObj[fixedFlag[flag]]['base']  = Object.create(null);
+                        billsObj[fixedFlag[flag]]['bill']  = bills[i];
                     }
                 }
             }
         }
     },
+    //清单基数设置所属固定清单属性
+    setBaseBills: function (baseFigure, fixedBills) {
+        for(let i in baseFigure){
+            let calcBase = baseFigure[i];
+            calcBase.fixedBill = null;
+            if(cbTools.isDef(fixedBills[calcBase.fixedFlag])){
+                fixedBills[calcBase.fixedFlag]['base'][i] = calcBase;
+                calcBase.fixedBill = fixedBills[calcBase.fixedFlag];
+            }
+        }
+    },
     //生成清单基数计算分类模板
     setBaseFigureClass: function (baseFigures, mapObj) {
         mapObj['CONSTRUCTION_ORGANIZATION'] = Object.create(null);
@@ -87,68 +103,169 @@ let cbTools = {
         mapObj['OTHERS'] = Object.create(null);
         let filter = ['CSXMF', 'ZZCSXMF', 'ZZCSXMDEJJZJGCF', 'ZZCSXMDEJJRGF', 'ZZCSXMDEJJCLF', 'ZZCSXMDEJJJXF', 'QTXMF', 'GF', 'SJ'];
         for(let figure in baseFigures){
-            if(filter.indexOf(baseFigures[figure]) === -1){
+            if(filter.indexOf(baseFigures[figure]['base']) === -1){
                 mapObj['CONSTRUCTION_ORGANIZATION'][figure] = baseFigures[figure];
             }
-            if(baseFigures[figure] !== 'QTXMF'){
+            if(baseFigures[figure]['base'] !== 'QTXMF'){
                 mapObj['OTHER'][figure] = baseFigures[figure];
             }
-            if(baseFigures[figure] !== 'GF'){
+            if(baseFigures[figure]['base'] !== 'GF'){
                 mapObj['CHARGE'][figure] = baseFigures[figure];
             }
-            if(baseFigures[figure] !== 'SJ'){
+            if(baseFigures[figure]['base'] !== 'SJ'){
                 mapObj['TAX'][figure] = baseFigures[figure];
             }
             mapObj['OTHERS'][figure] = baseFigures[figure];
         }
+    },
+    getFigure: function (node) {
+        let calcBase = projectObj.project.calcBase;
+        let parent = node.parent;
+        if(this.isFlag(node.data) && (node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.SUB_ENGINERRING
+            || node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CONSTRUCTION_TECH)){
+            //node.data.baseFigureClass = null;
+            return null;
+        }
+        else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION){
+            //node.data.baseFigureClass = 'CONSTRUCTION_ORGANIZATION';
+            return calcBase.baseFigureClass.CONSTRUCTION_ORGANIZATION;
+        }
+        else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.OTHER){
+            //node.data.baseFigureClass = 'OTHER';
+            return calcBase.baseFigureClass.OTHER;
+        }
+        else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CHARGE){
+            //node.data.baseFigureClass = 'CHARGE';
+            return calcBase.baseFigureClass.CHARGE;
+        }
+        else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.TAX){
+            //node.data.baseFigureClass = 'TAX';
+            return calcBase.baseFigureClass.TAX;
+        }
+        else {
+            if(!parent){
+                //node.data.baseFigureClass = 'OTHERS';
+                return calcBase.baseFigureClass.OTHERS;
+            }
+            else {
+                return this.getFigure(parent);
+            }
+        }
+    },
+    getBaseBill: function (node) {
+        let calcBase = projectObj.project.calcBase;
+        let parent = node.parent;
+        if(this.isFlag(node.data) && (node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.SUB_ENGINERRING
+            || node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CONSTRUCTION_TECH)){
+            return node;
+        }
+        else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION){
+            return node;
+        }
+        else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.OTHER){
+            return node;
+        }
+        else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CHARGE){
+            return node;
+        }
+        else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.TAX){
+            return node;
+        }
+        else {
+            if(!parent){
+                return node;
+            }
+            else {
+                return this.getBaseBill(parent);
+            }
+        }
+    },
+    //获取清单(有基数计算)引用了的其他清单,(循环引用栈中的一块)
+    getStackBlock: function (billID) {
+        let tempBases = [], block = [];//存引用的清单ID
+        let node = getBill(billID);
+        if(!node){
+            return tempBases;
+        }
+        else {
+            getBase(node);
+            let bases = Array.from(new Set(tempBases));
+            for(let i = 0, len = bases.length; i < len; i++){
+                if(cbTools.isDef(calcBase.baseFigures[bases[i]])){
+                    block.push(calcBase.baseFigures[bases[i]]['fixedBill']['bill']['ID']);
+                }
+            }
+            return Array.from(new Set(block));
+        }
+        function getBase(node){
+            if(node && node.children.length === 0){
+                if(cbTools.isDef(node.data.calcBase)){
+                    let figures = cbParser.getFigure(node.data.calcBase);
+                    tempBases = tempBases.concat(figures);
+                }
+            }
+            else if(node && node.children.length > 0) {
+                for(let i = 0, len = node.children.length; i < len; i++){
+                    getBase(node.children[i]);
+                }
+            }
+        }
+        function getBill(ID){
+            for(let i = 0, len = calcBase.project.mainTree.items.length; i < len; i++){
+                if(calcBase.project.mainTree.items[i].data.ID === ID && calcBase.project.mainTree.items[i].sourceType === calcBase.project.Bills.getSourceType()){
+                    return calcBase.project.mainTree.items[i];
+                }
+            }
+            return null;
+        }
     }
 };
 
 let baseFigureTemplate = {
     'FBFXGCF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.common.totalFee || 0;
     },
     'FBFXDEJJRGF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.labour.totalFee || 0;
     },
     'FBFXDEJJCLF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.material.totalFee || 0;
     },
     'FBFXDEJJJXF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.machine.totalFee || 0;
     },
     'FBFXTZRGF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.adjustLabour.totalFee || 0;
     },
     'FBFXTZJSRGF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.adjustMachineLabour.totalFee || 0;
     },
     'FBFXZCF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.mainMaterial.totalFee || 0;
     },
     'FBFXSBF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.SUB_ENGINERRING]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.mainMaterial.totalFee || 0;
@@ -163,13 +280,13 @@ let baseFigureTemplate = {
         return this['FBFXDEJJRGF']() + this['FBFXDEJJCLF']() + this['FBFXDEJJJXF']();
     },
     'CSXMF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.MEASURE];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.MEASURE]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.common.totalFee || 0;
     },
     'ZZCSXMF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.common.totalFee || 0;
@@ -178,61 +295,61 @@ let baseFigureTemplate = {
         return this['ZZCSXMDEJJRGF']() + this['ZZCSXMDEJJCLF']() + this['ZZCSXMDEJJJXF']()
     },
     'ZZCSXMDEJJRGF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.labour.totalFee || 0;
     },
     'ZZCSXMDEJJCLF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.material.totalFee || 0;
     },
     'ZZCSXMDEJJJXF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.machine.totalFee || 0;
     },
     'JSCSXMF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.common.totalFee || 0;
     },
     'JSCSXMDEJJRGF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.labour.totalFee || 0;
     },
     'JSCSXMDEJJCLF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.material.totalFee || 0;
     },
     'JSCSXMDEJJJXF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.machine.totalFee || 0;
     },
     'JSCSXMTZRGF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.adjustLabour.totalFee || 0;
     },
     'JSCSXMTZJSRGF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.adjustMachineLabour.totalFee || 0;
     },
     'JSCSXMZCF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.CONSTRUCTION_TECH]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.mainMaterial.totalFee || 0;
@@ -250,19 +367,19 @@ let baseFigureTemplate = {
         return this['JSCSXMDEJJRGF']() + this['JSCSXMDEJJCLF']() + this['JSCSXMDEJJJXF']();
     },
     'QTXMF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.OTHER];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.OTHER]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.common.totalFee || 0;
     },
     'GF': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.CHARGE];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.CHARGE]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.common.totalFee || 0;
     },
     'SJ': function () {
-        let bill = calcBase.fixedBills[calcBase.fixedFlag.TAX];
+        let bill = calcBase.fixedBills[calcBase.fixedFlag.TAX]['bill'];
         if(cbTools.isUnDef(bill)) return 0;
         if(cbTools.isUnDef(bill.feesIndex) || Object.keys(bill.feesIndex).length === 0) return 0;
         return bill.feesIndex.common.totalFee || 0;
@@ -270,37 +387,37 @@ let baseFigureTemplate = {
 };
 
 let baseFigureMap = {
-    '分部分项工程费': 'FBFXGCF',
-    '分部分项定额基价人工费': 'FBFXDEJJRGF',
-    '分部分项定额基价材料费': 'FBFXDEJJCLF',
-    '分部分项定额基价机械费': 'FBFXDEJJJXF',
-    '分部分项调整人工费': 'FBFXTZRGF',
-    '分部分项调整机上人工费': 'FBFXTZJSRGF',
-    '分部分项主材费': 'FBFXZCF',
-    '分部分项设备费': 'FBFXSBF',
-    '分部分项未计价材料费': 'FBFXWJJCLF',
-    '分部分项人工工日': 'FBFXRGGR',
-    '分部分项工程量清单中的基价直接工程费': 'FBFXGCLQDJJZJGCF',
-    '措施项目费': 'CSXMF',
-    '组织措施项目费': 'ZZCSXMF',
-    '组织措施项目定额基价直接工程费': 'ZZCSXMDEJJZJGCF',
-    '组织措施项目定额基价人工费': 'ZZCSXMDEJJRGF',
-    '组织措施项目定额基价材料费': 'ZZCSXMDEJJCLF',
-    '组织措施项目定额基价机械费': 'ZZCSXMDEJJJXF',
-    '技术措施项目费': 'JSCSXMF',
-    '技术措施项目定额基价人工费': 'JSCSXMDEJJRGF',
-    '技术措施项目定额基价材料费': 'JSCSXMDEJJCLF',
-    '技术措施项目定额基价机械费': 'JSCSXMDEJJJXF',
-    '技术措施项目调整人工费': 'JSCSXMTZRGF',
-    '技术措施项目调整机上人工费': 'JSCSXMTZJSRGF',
-    '技术措施项目主材费': 'JSCSXMZCF',
-    '技术措施项目设备费': 'JSCSXMSBF',
-    '技术措施项目未计价材料费': 'JSCSXMWJJCLF',
-    '技术措施项目人工工日': 'JSCSXMRGGR',
-    '技术措施项目清单中的定额基价直接工程费': 'JSCSXMQDDEJJZJGCF',
-    '其他项目费': 'QTXMF',
-    '规费': 'GF',
-    '税金': 'SJ'
+    '分部分项工程费': {base: 'FBFXGCF', fixedFlag: fixedFlag.SUB_ENGINERRING},
+    '分部分项定额基价人工费': {base: 'FBFXDEJJRGF', fixedFlag: fixedFlag.SUB_ENGINERRING},
+    '分部分项定额基价材料费': {base: 'FBFXDEJJCLF', fixedFlag: fixedFlag.SUB_ENGINERRING},
+    '分部分项定额基价机械费': {base: 'FBFXDEJJJXF', fixedFlag: fixedFlag.SUB_ENGINERRING},
+    '分部分项调整人工费': {base: 'FBFXTZRGF', fixedFlag: fixedFlag.SUB_ENGINERRING},
+    '分部分项调整机上人工费': {base: 'FBFXTZJSRGF', fixedFlag: fixedFlag.SUB_ENGINERRING},
+    '分部分项主材费': {base: 'FBFXZCF', fixedFlag: fixedFlag.SUB_ENGINERRING},
+    '分部分项设备费': {base: 'FBFXSBF', fixedFlag: fixedFlag.SUB_ENGINERRING},
+    '分部分项未计价材料费': {base: 'FBFXWJJCLF', fixedFlag: fixedFlag.SUB_ENGINERRING},
+    '分部分项人工工日': {base: 'FBFXRGGR', fixedFlag: fixedFlag.SUB_ENGINERRING},
+    '分部分项工程量清单中的基价直接工程费': {base: 'FBFXGCLQDJJZJGCF', fixedFlag: fixedFlag.SUB_ENGINERRING},
+    '措施项目费': {base: 'CSXMF', fixedFlag: fixedFlag.MEASURE},
+    '组织措施项目费': {base: 'ZZCSXMF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION},
+    '组织措施项目定额基价直接工程费': {base: 'ZZCSXMDEJJZJGCF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION},
+    '组织措施项目定额基价人工费': {base: 'ZZCSXMDEJJRGF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION},
+    '组织措施项目定额基价材料费': {base: 'ZZCSXMDEJJCLF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION},
+    '组织措施项目定额基价机械费': {base: 'ZZCSXMDEJJJXF', fixedFlag: fixedFlag.CONSTRUCTION_ORGANIZATION},
+    '技术措施项目费': {base: 'JSCSXMF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
+    '技术措施项目定额基价人工费': {base: 'JSCSXMDEJJRGF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
+    '技术措施项目定额基价材料费': {base: 'JSCSXMDEJJCLF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
+    '技术措施项目定额基价机械费': {base: 'JSCSXMDEJJJXF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
+    '技术措施项目调整人工费': {base: 'JSCSXMTZRGF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
+    '技术措施项目调整机上人工费': {base: 'JSCSXMTZJSRGF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
+    '技术措施项目主材费': {base: 'JSCSXMZCF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
+    '技术措施项目设备费': {base: 'JSCSXMSBF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
+    '技术措施项目未计价材料费': {base: 'JSCSXMWJJCLF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
+    '技术措施项目人工工日': {base: 'JSCSXMRGGR', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
+    '技术措施项目清单中的定额基价直接工程费': {base: 'JSCSXMQDDEJJZJGCF', fixedFlag: fixedFlag.CONSTRUCTION_TECH},
+    '其他项目费': {base: 'QTXMF',  fixedFlag: fixedFlag.OTHER},
+    '规费': {base: 'GF', fixedFlag: fixedFlag.CHARGE},
+    '税金': {base: 'SJ', fixedFlag: fixedFlag.TAX}
 };
 
 //输入式分析器
@@ -329,18 +446,55 @@ let cbAnalyzer = {
         }
         return true;
     },
+    //循环计算
+    cycleCalc: function (node, baseFigures, exp) {
+        let stack = [];
+        if(node.sourceType !== calcBase.project.Bills.getSourceType()){
+            return false;
+        }
+        let sbillID = cbTools.getBaseBill(node).data.ID;
+        let expFigures = cbParser.getFigure(exp);
+        for(let i = 0, len = expFigures.length; i < len; i++){
+            let figure = expFigures[i];
+            if(cbTools.isDef(baseFigures[figure])){
+                let bill = baseFigures[figure]['fixedBill']['bill'];
+                if(checkStack(getRefStack([bill.ID]), sbillID)){
+                    console.log('循环计算');
+                    return true;
+                }
+            }
+        }
+        return false;
+        function checkStack(stack, startBillID){
+            //引用栈发现了初始引用
+            return stack.indexOf(startBillID) !== -1;
+        }
+        function getRefStack(billIDs){
+            stack = Array.from(new Set(stack.concat(billIDs)));
+            for(let i = 0, len = billIDs.length; i < len; i++){
+                let block = cbTools.getStackBlock(billIDs[i]);
+                if(block.length > 0){
+                    stack = Array.from(new Set(stack.concat(block)));
+                    getRefStack(block);
+                }
+            }
+            return stack;
+        }
+    },
     //四则运算合法性,前端控制不允许重复出现运算符,这里主要判断()的使用问题,这里再判断一次
     arithmeticLeagl: function (exp) {
         let ilegalRex = /[\+,\-,\*,\/]{2}/g;
         return !ilegalRex.test(exp);
     },
     //
-    legalExp: function (exp) {
-        exp = this.standar(exp);
+    legalExp: function (node) {
+        let exp = this.standar(node.data.userCalcBase);
         if(this.inputLegal(exp)){
-            if(this.baseLegal(calcBase.baseFigures, exp)){
-                if(this.arithmeticLeagl(exp)){
-                    return exp;
+            if(this.baseLegal(cbTools.getFigure(node), exp)){
+                if(!this.cycleCalc(node, cbTools.getFigure(node), exp)){
+                    if(this.arithmeticLeagl(exp)){
+                        return exp;
+                    }
                 }
             }
             return null;
@@ -390,7 +544,7 @@ let cbParser = {
 let cbCalctor = {
     //计算基数
     base: function (figure) {
-        return baseFigureTemplate[calcBase.baseFigures[figure]]();
+        return baseFigureTemplate[calcBase.baseFigures[figure]['base']]();
     },
     //计算
     exec: function () {
@@ -414,13 +568,17 @@ let calcBase = {
         me.fixedFlag = fixedFlag;
         cbTools.setFixedBills(project, me.fixedBills, me.fixedFlag);
         me.baseFigures = baseFigureMap;
+        cbTools.setBaseBills(me.baseFigures, me.fixedBills);
         //me.baseFigures.fixedBills = me.fixedBills;
         cbTools.setBaseFigureClass(me.baseFigures, me.baseFigureClass);
     },
     getBase: function (figure) {
-       return  cbCalctor.base(figure);
+       return cbCalctor.base(figure);
 
     },
+    getBaseByClass: function (node) {
+        return cbTools.getFigure(node);
+    },
     calculate: function (node) {
         let me = calcBase,
             $CBA = cbAnalyzer,
@@ -429,7 +587,7 @@ let calcBase = {
         try {
             me.success = false;
             //分析输入式合法性
-            let exp = $CBA.legalExp(node.data.userCalcBase);
+            let exp = $CBA.legalExp(node);
             if(!exp){
                 throw '表达式不正确';
             }
@@ -449,7 +607,7 @@ let calcBase = {
             me.project.calcProgram.saveNode(node);
         }
         catch (err){
-            alert('表达式不正确');
+            alert(err);
         }
     },
 };

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

@@ -121,7 +121,7 @@ const leafBillGetFeeType = {
     billsPrice: 3
 };
 
-const zanguCalcMode = {
+const zanguCalcType = {
     common: 0,
     gatherMaterial: 1
 };

+ 4 - 4
web/building_saas/main/js/models/project.js

@@ -289,12 +289,12 @@ var PROJECT = {
             }
         };
 
-        project.prototype.setBillsCalcMode = function (calcMode) {
+/*        project.prototype.setBillsCalcMode = function (calcMode) {
             this.property.billsCalcMode = calcMode;
             this.initCalcFields();
-        };
+        };*/
 
-        project.prototype.initCalcFields = function () {
+        /*project.prototype.initCalcFields = function () {
             // let settingConst = this.projSetting.settingConst;
             if (this.calcFields) {
                 for (let field of this.calcFields) {
@@ -325,7 +325,7 @@ var PROJECT = {
                     }
                 }
             }
-        }
+        }*/
 
         return new project();
     }

+ 1 - 1
web/building_saas/main/js/models/project_glj.js

@@ -186,7 +186,7 @@ ProjectGLJ.prototype.refreshRationGLJPrice=function (glj) {
         if(ration_glj.projectGLJID ==glj.id){
             ration_glj.basePrice=glj.unit_price.base_price;
             ration_glj.marketPrice=glj.unit_price.market_price;
-            ration_glj.adjustPrice=glj.adjust_price;
+            ration_glj.adjustPrice=this.getAdjustPrice(glj);
         }
     }
 

+ 13 - 1
web/building_saas/main/js/models/quantity_detail.js

@@ -471,7 +471,6 @@ var quantity_detail = {
             sheetCommonObj.showData(gljOprObj.detailSheet,gljOprObj.detailSetting,[]);
 
         };
-
         quantity_detail.prototype.quantityEditChecking = function(value,node,fieldName){
             var validate = true;
             if(fieldName=='quantity'){
@@ -486,6 +485,19 @@ var quantity_detail = {
             }
             return validate;
         };
+        quantity_detail.prototype.autoTransformQuantity = function(value,node){
+            let data = node.data;
+            let option = optionsOprObj.getOption(optionsOprObj.optionsTypes.GENERALOPTS,'rationQuanACToRationUnit');
+            console.log(option);
+            if(option==true&&node.sourceType === project.Ration.getSourceType()&&data.unit) {//还需加入判读是否转换
+                let times = parseInt(data.unit);
+                if (isNaN(times)) {
+                    times = 1
+                }
+                value = value / times;
+            }
+            return value;
+        };
         quantity_detail.prototype.getDecimal=function (node) {
             var decimal = 3;
             if(node.sourceType === project.Bills.getSourceType()){

+ 12 - 6
web/building_saas/main/js/models/ration_glj.js

@@ -284,14 +284,16 @@ var ration_glj = {
             var callback=function (data) {
                 let initShow = false;//是否需要表格初始化显示
                 if(updateField=='customQuantity'){
+                    console.log(data);
                     me.refreshAfterQuantityUpdate(data);
                 }else {
                     var doc = data.doc;
                     for(var key in doc){
                         recode[key] = doc[key];
                     }
+                    console.log(data);
                     if(data.hasOwnProperty('adjustState')){//更新定额调整状态
-                        me.updateRationAdjustState(data.adjustState);
+                        me.updateRationAdjustState(data.adjustState,recode.rationID);
                     }
                     if(recode.subList&&recode.subList.length>0){
                         initShow = true;
@@ -327,12 +329,16 @@ var ration_glj = {
             data.glj_result.forEach(function (item) {
                 me.refreshEachItme(item.doc,item.query);
             })
-            me.updateRationAdjustState(data.adjustState);
+            me.updateRationAdjustState(data.adjustState,data.rationID);
         };
-        ration_glj.prototype.updateRationAdjustState=function(adjustState){
-            var selected = projectObj.project.mainTree.selected;
-            selected.data.adjustState=adjustState;
-            projectObj.mainController.refreshTreeNode([selected]);
+        ration_glj.prototype.updateRationAdjustState=function(adjustState,rationID){
+            var node = _.find(projectObj.project.mainTree.items,function (n) {
+                return n.sourceType==ModuleNames.ration&&n.data.ID==rationID;
+            })
+            if(node){
+                node.data.adjustState=adjustState;
+            }
+            projectObj.mainController.refreshTreeNode([node]);
         };
         ration_glj.prototype.getGLJData = function(cb){
             CommonAjax.get('/rationGlj/getGLJData', function (data) {

+ 1 - 30
web/building_saas/main/js/views/calc_base_view.js

@@ -118,35 +118,6 @@ let calcBaseView = {
     canBase: function (node) {
         return node.sourceType === projectObj.project.Bills.getSourceType() && node.children.length === 0;
     },
-    //根据节点获取可用计算基数
-    getFigure: function (node) {
-        let calcBase = projectObj.project.calcBase;
-        let parent = node.parent;
-        if(this.isFlag(node.data) && (node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.SUB_ENGINERRING
-            || node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CONSTRUCTION_TECH)){
-            return null;
-        }
-        else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CONSTRUCTION_ORGANIZATION){
-            return calcBase.baseFigureClass.CONSTRUCTION_ORGANIZATION;
-        }
-        else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.OTHER){
-            return calcBase.baseFigureClass.OTHER;
-        }
-        else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.CHARGE){
-            return calcBase.baseFigureClass.CHARGE;
-        }
-        else if(this.isFlag(node.data) && node.data.flagsIndex.fixed.flag === calcBase.fixedFlag.TAX){
-            return calcBase.baseFigureClass.TAX;
-        }
-        else {
-            if(!parent){
-                return calcBase.baseFigureClass.OTHERS;
-            }
-            else {
-                return this.getFigure(parent);
-            }
-        }
-    },
     //计算基数转换为显示数据Obj to Array
     toViewData: function (obj) {
         let rst = [];
@@ -166,7 +137,7 @@ let calcBaseView = {
             me.inputExpr.val(node.data.calcBase);
         }
         me.buildSheet();
-        let baseObj = me.getFigure(node);
+        let baseObj = projectObj.project.calcBase.getBaseByClass(node);
         me.showData(me.toViewData(baseObj));
 
     },

+ 3 - 14
web/building_saas/main/js/views/glj_view.js

@@ -37,7 +37,7 @@ var gljOprObj = {
         view: {
             comboBox: [{row: -1, col: 12, rowCount: -1, colCount: 1}],
             lockedCells: [{row: -1, col: 3, rowCount: -1, colCount: 1}],
-            lockColumns:[0,4,5,7,8,9,11]
+            lockColumns:[0,4,5,7,8,9,10,12]
         },
         notEditedType: ['砼','桨','配比','机']
     },
@@ -538,8 +538,6 @@ var gljOprObj = {
      //   $('#dropdown').hide();
     },
     showRationGLJData:function (node) {
-        console.log("showRationGLJData");
-        console.log(+new Date());
         var gljList = [];
         var ration_glj = projectObj.project.ration_glj;
         node=node?node:projectObj.project.mainTree.selected;
@@ -551,23 +549,14 @@ var gljOprObj = {
     },
     showRationGLJSheetData:function (init) {
         this.sheet.setRowCount(0);
-        console.log("showRationGLJSheetData---init")
-        console.log(+new Date())
+        //console.log(+new Date())
         //this.sheet.getRange(0,-1,this.sheet.getRowCount(),-1).visible(true); //这个方法导致加载缓慢
         this.sheetData=_.sortBy(this.sheetData,'type');
-        console.log("addMixRatioToShow");
-        console.log(+new Date())
         this.sumQuantity();//计算总消耗量
         this.addMixRatioToShow();//显示组成物信息
-        console.log("start initRationTree");
-        console.log(+new Date());
         this.initRationTree(init);
-        console.log("end initRationTree");
-        console.log(+new Date());
-
         sheetCommonObj.showData(this.sheet,this.setting,this.sheetData);
-        console.log("end show");
-        console.log(+new Date())
+
     },
     initRationTree:function (init) {
         this.sheet.getRange(-1, 0, -1, 1).cellType(this.getTreeNodeCellType(this.sheetData));

+ 2 - 1
web/building_saas/main/js/views/main_tree_col.js

@@ -70,7 +70,8 @@ let MainTreeCol = {
                     return this.calcBaseType(parent);
                 }
             }
-        },        bills: function (node) {
+        },
+        bills: function (node) {
             return node.sourceType === projectObj.project.Bills.getSourceType();
         },
         ration: function (node) {

+ 7 - 1
web/building_saas/main/js/views/project_property_display_view.js

@@ -7,10 +7,16 @@ let projDisplayView = {
 
     init:function () {
         this.datas = projectInfoObj.projectInfo.property.displaySetting;
+        this.datas = this.datas === undefined ? { autoHeight: true, disPlayMainMaterial: true } : this.datas;
         $("#autoHeight").attr("checked",this.datas.autoHeight);
-        $("#disPlayMainMateria").attr("checked",this.datas.disPlayMainMateria);
+        $("#disPlayMainMaterial").attr("checked",this.datas.disPlayMainMaterial);
         //$('#disPlayMainMateria').prop('checked')
+    },
+
+    needUpdate: function(autoHeight, disPlayMainMaterial) {
+        return autoHeight !== this.datas.autoHeight || disPlayMainMaterial !== this.datas.disPlayMainMaterial;
     }
+
 };
 
 $(document).ready(function () {

+ 41 - 16
web/building_saas/main/js/views/project_view.js

@@ -276,7 +276,10 @@ var projectObj = {
             else if (fieldName === 'quantity' || fieldName === 'marketUnitFee' || fieldName === 'programID' ||
                 fieldName === 'subType' || fieldName === 'calcBase' || fieldName === 'feesIndex.common.unitFee'){
                 if (fieldName === 'quantity') {
-                   if (value) {value = value.toDecimal(decimalObj.decimal(fieldName,node))};
+                   if (value) {
+                       value = project.quantity_detail.autoTransformQuantity(value,node);
+                       value = value.toDecimal(decimalObj.decimal(fieldName,node))
+                   };
                    if(project.quantity_detail.quantityEditChecking(value,node,fieldName)){
                        node.data.isFromDetail=0;
                        project.quantity_detail.cleanQuantityDetail(node,true);
@@ -381,6 +384,7 @@ var projectObj = {
                 that.project.projSetting.mainGridSetting = JSON.parse(str);
                 that.project.projSetting.mainGridSetting.frozenCols = 4;
                 TREE_SHEET_HELPER.initSetting($('#billsSpread')[0], that.project.projSetting.mainGridSetting);
+                const autoHeight = that.project.property.displaySetting.autoHeight;
                 that.project.projSetting.mainGridSetting.cols.forEach(function (col) {
                     // for test.  后端没有绑定,暂时写死用于测试。
 /*                    if (col.data.field == '' && col.head.titleNames[0] == "取费专业") {
@@ -408,6 +412,18 @@ var projectObj = {
                         col.data.formatter = '@';
                     }
 
+                    // 根据配置设置自动行高
+                    if (col.data.field === 'name' || col.data.field === 'itemCharacterText' ||
+                        col.data.field === 'jobContentText' || col.data.field === 'adjustState') {
+                        if (!autoHeight) {
+                            col.data.wordWrap = false;
+                            col.showHint = true;
+                        } else {
+                            col.data.wordWrap = true;
+                            col.showHint = false;
+                        }
+                    }
+
                     // for test digit. CSLAAAAA
                     if (col.data.field.hasSubStr("totalFee"))
                        col.data.formatter = MainTreeCol.getNumberFormatter(decimalObj.ration.totalPrice, true)
@@ -556,6 +572,7 @@ var projectObj = {
             col = parseInt(col);
             const sheet = this.mainSpread.getActiveSheet();
             sheet.setSelection(row, col, 1, 1);
+            this.mainController.setTreeSelected(this.mainController.tree.items[row]);//触发树节点选中事件
         }
     },
 };
@@ -649,25 +666,31 @@ $('#poj-set').on('show.bs.modal', function () {
         setCalcFlag($('#rationPrice'), leafBillGetFeeType.rationPrice, mode);
         setCalcFlag($('#billsPrice'), leafBillGetFeeType.billsPrice, mode);
 
-        // mode = projectObj.project.projSetting.zanguCalcMode;
-        mode = projectObj.project.property.zanguCalcMode ? projectObj.project.property.zanguCalcMode : zanguCalcMode.common;
-        setCalcFlag($('#zangu_common'), zanguCalcMode.common, mode);
-        setCalcFlag($('#zangu_gatherMatherial'), zanguCalcMode.gatherMaterial, mode);
+        // mode = projectObj.project.projSetting.zanguCalcType;
+        mode = projectObj.project.property.zanguCalcMode ? projectObj.project.property.zanguCalcMode : zanguCalcType.common;
+        setCalcFlag($('#zangu_common'), zanguCalcType.common, mode);
+        setCalcFlag($('#zangu_gatherMaterial'), zanguCalcType.gatherMaterial, mode);
     }
 });
 $('#property_ok').click(function () {
     let properties = [], projectID = parseInt(scUrlUtil.GetQueryString('project'));
     let project = projectObj.project, reCalc= false;
-    let billMode = parseInt($("input[name='calcFlag']:checked").val());
-    if (billMode !== project.property.billsCalcMode) {
-        // project.setBillsCalcMode(mode);
-        project.property.billsCalcMode = billMode;
+    let b = parseInt($("input[name='calcFlag']:checked").val());
+    // 呈现选项
+    const autoHeight = $("#autoHeight:checked").length > 0;
+    const disPlayMainMaterial = $("#disPlayMainMaterial:checked").length > 0;
+    if (b !== project.property.billsCalcMode) {
+        let data1 = {updateType: 'update', updateData: {ID: projectID, 'property.billsCalcMode': b}};
+        properties.push(data1);
+        project.property.billsCalcMode = b;
         reCalc = true;
     };
 
-    let zanguMode = parseInt($("input[name='zangu']:checked").val());
-    if (zanguMode !== project.property.zanguCalcMode) {
-        project.property.zanguCalcMode = zanguMode;
+    let zg = parseInt($("input[name='zangu']:checked").val());
+    if (zg !== project.property.zanguCalcMode) {
+        let data2 = {updateType: 'update', updateData: {ID: projectID, 'property.zanguCalcMode': zg}};
+        properties.push(data2);
+        project.property.zanguCalcMode = zg;
         reCalc = true;
     };
 
@@ -677,10 +700,6 @@ $('#property_ok').click(function () {
     }
 
     if (reCalc) {
-/*        project.pushNow('', [project.projSetting.moduleName], [{
-            projectID: project.ID(),
-            billsCalcMode: project.property.billsCalcMode
-        }]);*/
         project.calcProgram.calcAllNodes(calcAllType.catBills);
     }
     //基本信息
@@ -706,6 +725,12 @@ $('#property_ok').click(function () {
         let updateData = {updateType: 'update', updateData: {ID: projectID, 'property.decimal': updateDecimal}};
         properties.push(updateData);
     }
+    // 呈现选项
+    if (projDisplayView.needUpdate(autoHeight, disPlayMainMaterial)) {
+        const displaySetting = { autoHeight, disPlayMainMaterial };
+        let updateData = {updateType: 'update', updateData: {ID: projectID, 'property.displaySetting': displaySetting}};
+        properties.push(updateData);
+    }
     console.log(properties);
     if(properties.length > 0){
         CommonAjax.post('/pm/api/updateProjects', {user_id: userID, updateData: properties}, function (rstData) {