olym пре 7 година
родитељ
комит
704258f745
34 измењених фајлова са 231 додато и 935 уклоњено
  1. 1 0
      config/gulpConfig.js
  2. 71 49
      modules/glj/controllers/glj_controller.js
  3. 1 0
      modules/main/models/bills.js
  4. 0 41
      modules/main/models/proj_setting_model.js
  5. 3 0
      modules/main/models/project.js
  6. 0 45
      modules/main/models/schemas/proj_setting.js
  7. 6 1
      modules/pm/models/project_model.js
  8. 5 1
      modules/pm/models/project_property_template.js
  9. 11 8
      modules/ration_glj/facade/glj_calculate_facade.js
  10. 3 8
      modules/reports/util/rpt_construct_data_util.js
  11. 2 2
      public/web/PerfectLoad.js
  12. 3 1
      public/web/sheet/sheet_common.js
  13. 3 0
      web/building_saas/css/main.css
  14. 3 3
      web/building_saas/glj/js/project_glj_spread.js
  15. 3 2
      web/building_saas/main/html/main.html
  16. 2 2
      web/building_saas/main/js/calc/bills_calc.js
  17. 3 0
      web/building_saas/main/js/models/calc_base.js
  18. 9 7
      web/building_saas/main/js/models/calc_program.js
  19. 4 1
      web/building_saas/main/js/models/main_consts.js
  20. 15 17
      web/building_saas/main/js/models/project.js
  21. 7 1
      web/building_saas/main/js/models/project_glj.js
  22. 13 1
      web/building_saas/main/js/models/quantity_detail.js
  23. 12 6
      web/building_saas/main/js/models/ration_glj.js
  24. 7 0
      web/building_saas/main/js/views/calc_base_view.js
  25. 2 2
      web/building_saas/main/js/views/fee_rate_view.js
  26. 8 19
      web/building_saas/main/js/views/glj_view.js
  27. 5 2
      web/building_saas/main/js/views/main_tree_col.js
  28. 2 3
      web/building_saas/main/js/views/project_property_basicInfo.js
  29. 2 2
      web/building_saas/main/js/views/project_property_bills_quantity_decimal.js
  30. 1 2
      web/building_saas/main/js/views/project_property_decimal_view.js
  31. 20 0
      web/building_saas/main/js/views/project_property_display_view.js
  32. 2 1
      web/building_saas/main/js/views/project_property_labour_coe_view.js
  33. 2 2
      web/building_saas/main/js/views/project_property_projFeature.js
  34. 0 706
      web/building_saas/main/js/views/project_view.js

+ 1 - 0
config/gulpConfig.js

@@ -96,6 +96,7 @@ module.exports = {
         'web/building_saas/main/js/views/project_property_decimal_view.js',
         'web/building_saas/main/js/views/project_property_basicInfo.js',
         'web/building_saas/main/js/views/project_property_projFeature.js',
+        'web/building_saas/main/js/views/project_property_display_view.js',
         'web/building_saas/main/js/main_ajax.js',
         'web/building_saas/main/js/main.js',
         'web/building_saas/main/js/controllers/project_controller.js',

+ 71 - 49
modules/glj/controllers/glj_controller.js

@@ -12,6 +12,7 @@ import UnitPriceModel from "../models/unit_price_model";
 import MixRatioModel from "../models/mix_ratio_model";
 import UnitPriceFileModel from "../models/unit_price_file_model";
 let logger = require("../../../logs/log_helper").logger;
+let consts = require('../../main/models/project_consts');
 
 const ProjectModel = require('../../pm/models/project_model').project;
 class GLJController extends BaseController {
@@ -37,59 +38,23 @@ class GLJController extends BaseController {
         // 标段id
         let projectId = request.body.project_id;
         projectId = parseInt(projectId);
-        let responseData = {
-            err: 0,
-            msg: '',
-            data: {}
-        };
-        try {
-            if (isNaN(projectId) || projectId <= 0) {
-                throw '标段id有误';
-            }
-
-            // 获取标段对应的单价文件id
-            let unitPriceFileId = await ProjectModel.getUnitPriceFileId(projectId);
-            if (unitPriceFileId <= 0) {
-                throw '没有对应的单价文件';
-            }
-
-            // 获取使用该单价文件的项目数据
-            let tenderData = await ProjectModel.getTenderByUnitPriceFileId(unitPriceFileId);
-            let usedTenderList = [];
-            let usedUnitPriceInfo = {};
-            if (tenderData !== null) {
-                for (let tmp of tenderData) {
-                    usedTenderList.push(tmp.name);
-                    usedUnitPriceInfo.name = tmp.property.unitPriceFile.name;
-                    usedUnitPriceInfo.id = tmp.property.unitPriceFile.id;
-                }
-            }
-
-            // 先获取对应标段的项目工料机数据
-            let gljListModel = new GLJListModel();
-            let [gljList, mixRatioConnectData,mixRationMap] = await gljListModel.getListByProjectId(projectId, unitPriceFileId);
-
-            responseData.data.gljList = gljList;
-            responseData.data.mixRatioConnectData = mixRatioConnectData;
-            responseData.data.mixRatioMap = mixRationMap;
-            responseData.data.usedTenderList = usedTenderList;
-            responseData.data.constData = {
-                materialIdList: gljListModel.materialIdList,
-                ownCompositionTypes: gljListModel.ownCompositionTypes,
-                hostname: request.hostname,
-                roomId: unitPriceFileId,
-                GLJTypeConst: JSON.stringify(GLJTypeConst),
-                usedUnitPriceInfo: usedUnitPriceInfo
-            };
-        } catch (error) {
-            responseData.err = 1;
-            responseData.msg = error;
-        }
-
+        let responseData = await getGLJListByProjectID(projectId);
+        responseData.hostname = request.hostname;
         response.json(responseData);
     }
 
     /**
+     * project getData 接口
+     * @param projectID
+     * @param callback
+     */
+    getData(projectID, callback){
+        getGLJListByProjectID(projectID).then(function(result){
+            callback(result.err,consts.projectConst.PROJECTGLJ,result.data);
+        })
+    }
+
+    /**
      * 更新数据
      *
      * @param {object} request
@@ -588,4 +553,61 @@ class GLJController extends BaseController {
 
 }
 
+/**
+ * 取项目工料机列表
+ * @param projectId
+ * @returns {Promise.<void>}
+ */
+async function getGLJListByProjectID(projectId){
+    let responseData = {
+        err: 0,
+        msg: '',
+        data: {}
+    };
+    try {
+        if (isNaN(projectId) || projectId <= 0) {
+            throw '标段id有误';
+        }
+
+        // 获取标段对应的单价文件id
+        let unitPriceFileId = await ProjectModel.getUnitPriceFileId(projectId);
+        if (unitPriceFileId <= 0) {
+            throw '没有对应的单价文件';
+        }
+
+        // 获取使用该单价文件的项目数据
+        let tenderData = await ProjectModel.getTenderByUnitPriceFileId(unitPriceFileId);
+        let usedTenderList = [];
+        let usedUnitPriceInfo = {};
+        if (tenderData !== null) {
+            for (let tmp of tenderData) {
+                usedTenderList.push(tmp.name);
+                usedUnitPriceInfo.name = tmp.property.unitPriceFile.name;
+                usedUnitPriceInfo.id = tmp.property.unitPriceFile.id;
+            }
+        }
+
+        // 先获取对应标段的项目工料机数据
+        let gljListModel = new GLJListModel();
+        let [gljList, mixRatioConnectData,mixRationMap] = await gljListModel.getListByProjectId(projectId, unitPriceFileId);
+
+        responseData.data.gljList = gljList;
+        responseData.data.mixRatioConnectData = mixRatioConnectData;
+        responseData.data.mixRatioMap = mixRationMap;
+        responseData.data.usedTenderList = usedTenderList;
+        responseData.data.constData = {
+            materialIdList: gljListModel.materialIdList,
+            ownCompositionTypes: gljListModel.ownCompositionTypes,
+            roomId: unitPriceFileId,
+            GLJTypeConst: JSON.stringify(GLJTypeConst),
+            usedUnitPriceInfo: usedUnitPriceInfo
+        };
+    } catch (error) {
+        console.log(error);
+        responseData.err = 1;
+        responseData.msg = error;
+    }
+    return responseData;
+}
+
 export default GLJController;

+ 1 - 0
modules/main/models/bills.js

@@ -31,6 +31,7 @@ let billsSchema = new Schema({
     isFromDetail:{type: Number,default:0},//1 true 0 false
     programID: Number,
     calcBase: String,
+    calcBaseValue: String,     // 计算基数表达式的值
     // 工程量计算规则
     ruleText: String,
     // 说明

+ 0 - 41
modules/main/models/proj_setting_model.js

@@ -1,41 +0,0 @@
-/**
- * Created by Mai on 2017/9/14.
- */
-
-let baseModel = require('./base_model');
-import {default as projSettingSchema, collectionName as collectionName, settingConst as settingConst, displayOption as displayOption} from "./schemas/proj_setting";
-
-class projSettingModel extends baseModel {
-
-    constructor() {
-        super(projSettingSchema);
-        this.collectionName = collectionName;
-    }
-
-    getData (projectID, callback) {
-        this.model.findOne({"projectID": projectID}, '-_id', function (err, result) {
-            if (!err) {
-                let data = JSON.parse(JSON.stringify(result));
-                if (!data.billsCalcMode) {
-                    data.billsCalcMode = settingConst.billsCalcMode.rationContent;
-                }
-                if (!data.zanguCalcMode) {
-                    data.zanguCalcMode = settingConst.zanguCalcMode.common;
-                }
-                if (!data.displayOption) {
-                    data.displayOption = displayOption;
-                }
-                data.settingConst = settingConst;
-                callback(0, collectionName, data);
-            } else {
-                callback(1, '查询数据失败。', null);
-            }
-        });
-    };
-
-    save (user_id, data, callback) {
-        this.model.update({"projectID": data.projectID}, data, callback);
-    };
-}
-
-module.exports = new projSettingModel();

+ 3 - 0
modules/main/models/project.js

@@ -14,6 +14,8 @@ let projSetting = require('./proj_setting_model');
 // let volumePriceData = require('../../volume_price/models/volume_price_model');
 var labour_coe_facade = require('../facade/labour_coe_facade');
 var calc_program_facade = require('../facade/calc_program_facade');
+import GLJController from "../../glj/controllers/glj_controller";
+
 
 const ProjectModel = require('../../pm/models/project_model').project;
 import GLJListModel from "../../glj/models/glj_list_model";
@@ -37,6 +39,7 @@ moduleMap[projSetting.collectionName] = projSetting;
 moduleMap[projectConsts.FEERATE] = fee_rate_data;
 moduleMap[projectConsts.LABOUR_COE] = labour_coe_facade;
 moduleMap[projectConsts.CALC_PROGRAM] = calc_program_facade;
+moduleMap[projectConsts.PROJECTGLJ] = new GLJController();
 
 var Project = function (){};
 

+ 0 - 45
modules/main/models/schemas/proj_setting.js

@@ -1,45 +0,0 @@
-/**
- * Created by Mai on 2017/9/14.
- */
-
-let mongoose = require("mongoose");
-let Schema = mongoose.Schema;
-let collectionName = 'proj_setting';
-let settingConst = {
-    billsCalcMode: {
-        rationContent: 0, rationPriceConverse: 1, rationPrice: 2, billsPrice: 3
-    },
-    zanguCalcMode: {
-        common: 0, gatherMaterial: 1
-    }
-}
-let billsCalcModeConst = {
-    
-};
-// 呈现选项
-const displayOption = {
-    autoHeight: 0,
-    rationDisplay: 0
-};
-let projSettingSchema = {
-    projectID: Number,
-    // 列设置
-    main_tree_col: {
-        type: Schema.Types.Mixed,
-        default: {}
-    },
-    billsCalcMode: {
-        type: Number,
-        default: settingConst.billsCalcMode.rationContent
-    },
-    zanguCalcMode: {
-        type: Number,
-        default: settingConst.zanguCalcMode.common
-    },
-    displayOption: {
-        type: Schema.Types.Mixed,
-        default: displayOption
-    }
-};
-let model = mongoose.model(collectionName, new Schema(projSettingSchema, {versionKey: false, collection: collectionName}));
-export {model as default, collectionName as collectionName, settingConst as settingConst, displayOption as displayOption};

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

@@ -5,7 +5,7 @@ import mongoose from 'mongoose';
 import async_c from 'async';
 import UnitPriceFileModel from "../../glj/models/unit_price_file_model";
 import UnitPriceFiles from '../../glj/models/schemas/unit_price_file';
-import {defaultDecimal, billsQuantityDecimal, basicInformation, projectFeature} from './project_property_template';
+import {defaultDecimal, billsQuantityDecimal, basicInformation, projectFeature,displaySetting} from './project_property_template';
 let FeeRateFiles = mongoose.model('fee_rate_file');
 let counter = require("../../../public/counter/counter.js");
 
@@ -104,6 +104,11 @@ ProjectsDAO.prototype.updateUserProjects = async function(userId, datas, callbac
                     data.updateData.property.basicInformation = basicInformation;
                     //工程特征
                     data.updateData.property.projectFeature = projectFeature;
+                    //呈现选项
+		    data.updateData.property.displaySetting = displaySetting;
+		    
+                    data.updateData.property.billsCalcMode = 0;
+		    data.updateData.property.zanguCalcMode = 0;
                 }
                 newProject = new Projects(data.updateData);
                 // 查找同级是否存在同名数据

+ 5 - 1
modules/pm/models/project_property_template.js

@@ -11,6 +11,10 @@ const defaultDecimal = {
     quantity_detail: 4,
     process: 6
 };
+const displaySetting = {
+    autoHeight:true,
+    disPlayMainMateria:true
+}
 
 /*
 * 单位工程清单工程量精度模板
@@ -119,4 +123,4 @@ const projectFeature = [
     {dispName: '门窗材料及装饰', key: 'doorsWindowsMaterial', value: ''}
 ];
 
-export {defaultDecimal, billsQuantityDecimal, basicInformation, projectFeature};
+export {defaultDecimal, billsQuantityDecimal, basicInformation, projectFeature,displaySetting};

+ 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)});
         }
     }
     //市场单价调整

+ 3 - 8
modules/reports/util/rpt_construct_data_util.js

@@ -18,7 +18,7 @@ const GLJ_TYPE = {
     Machine: 3,
     Main_Material: 4,
     Equipment: 5
-}
+};
 
 class Rpt_Common{
     initialize(rpt_tpl, currentDataObj) {
@@ -249,7 +249,7 @@ function summaryData(sourceData, handleCfg, prjData){
             }
         }
         return ( "grp_key_" + keys.join('_'));
-    }
+    };
     let sumObj = {};
     for (let dtl of tempRstArr) {
         let grpKey = private_get_grp_key(dtl);
@@ -310,7 +310,7 @@ function filterData(sourceData, handleCfg, prjData) {
                 rst = true;
         }
         return rst;
-    }
+    };
     for (let item of tempRstArr) {
         let compRst = true;
         let curComparePrjData = null;
@@ -596,11 +596,6 @@ function sortData(sourceData, sortCfg, prjData) {
 
 function setupFunc(obj, prop, ownRawObj) {
     obj[prop] = {};
-    // if (prop === projectConst.CALC_PROGRAM) {
-    //     obj[prop]["myOwnRawDataObj"] = ownRawObj.data;
-    // } else {
-    //     obj[prop]["myOwnRawDataObj"] = ownRawObj;
-    // }
     obj[prop]["myOwnRawDataObj"] = ownRawObj;
     obj[prop].getProperty = ext_getPropety;
     obj[prop].getFee = ext_getFee;

Разлика између датотеке није приказан због своје велике величине
+ 2 - 2
public/web/PerfectLoad.js


+ 3 - 1
public/web/sheet/sheet_common.js

@@ -98,7 +98,9 @@ var sheetCommonObj = {
 
         sheet.clear(0, 0, sheet.getRowCount(), sheet.getColumnCount(), GC.Spread.Sheets.SheetArea.viewport, GC.Spread.Sheets.StorageType.data);
         if(sheet.getRowCount()<data.length){
-            data.length<30?  sheet.setRowCount(30):sheet.setRowCount(data.length);
+            data.length<30? sheet.setRowCount(30):sheet.setRowCount(data.length);
+        }else if(sheet.getRowCount()==0){
+            sheet.setRowCount(30);
         }
         for (var col = 0; col < setting.header.length; col++) {
             var hAlign = "left", vAlign = "center";

+ 3 - 0
web/building_saas/css/main.css

@@ -316,4 +316,7 @@ body {
 }
 .dropdown-item.disabled, .dropdown-item:disabled{
   pointer-events:none
+}
+.text-green{
+    color: #172a30
 }

+ 3 - 3
web/building_saas/glj/js/project_glj_spread.js

@@ -48,9 +48,9 @@ ProjectGLJSpread.prototype.init = function () {
         {name: 'ID', field: 'id', visible: false},
         {name: '类型', field: 'unit_price.type', visible: false},
         {name: '总消耗量', field: 'quantity', visible: true,width:100},
-        {name: '基价单价', field: "unit_price.base_price", visible: true,width:70},
-        {name: '调整价', field: 'adjust_price', visible: true,width:70},
-        {name: '市场价', field: "unit_price.market_price", visible: true, validator: 'number',width:70},
+        {name: '定额价', field: "unit_price.base_price", visible: true,width:70},
+        {name: '调整价', field: 'adjust_price', visible: true,width:70},
+        {name: '市场价', field: "unit_price.market_price", visible: true, validator: 'number',width:70},
         {
             name: '是否暂估',
             field: 'is_evaluate',

+ 3 - 2
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="#poj-settings-display" role="tab" id="tab_poj-settings-display">呈现选项</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">
@@ -385,7 +385,7 @@
                                     <div class="modal-auto-height" id="labourCoeSpread"></div>
                                 </div>
                                 <!--呈现选项-->
-                                <div class="tab-pane fade" id="poj-settings-display" role="tabpanel">
+                                <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">
@@ -721,6 +721,7 @@
         <script type="text/javascript" src="/web/building_saas/main/js/views/project_property_decimal_view.js"></script>
         <script type="text/javascript" src="/web/building_saas/main/js/views/project_property_basicInfo.js"></script>
         <script type="text/javascript" src="/web/building_saas/main/js/views/project_property_projFeature.js"></script>
+        <script type="text/javascript" src="/web/building_saas/main/js/views/project_property_display_view.js"></script>
         <script type="text/javascript" src="/web/building_saas/main/js/main_ajax.js"></script>
         <script type="text/javascript" src="/web/building_saas/main/js/main.js"></script>
         <script type="text/javascript" src="/web/building_saas/main/js/controllers/project_controller.js"></script>

+ 2 - 2
web/building_saas/main/js/calc/bills_calc.js

@@ -268,8 +268,8 @@ class BillsCalcHelper {
         let nodeCalc = nodeCalcObj, virData= null, decimal = this.project.Decimal;
 
         // 清单单价:套用定额计算程序
-        // if (this.project.calcFlag === billsPrice) {
-        if (this.project.projSetting.billsCalcMode === billsPrice) {
+        // if (this.project.projSetting.billsCalcMode === billsPrice) {
+        if (this.project.property.billsCalcMode === leafBillGetFeeType.billsPrice) {
             rationCalcObj.calcGljs = this.getBillsGLjs(node);
             console.log(rationCalcObj.calcGljs);
             rationCalcObj.calcFields = rationCalcFields;

+ 3 - 0
web/building_saas/main/js/models/calc_base.js

@@ -399,6 +399,7 @@ let cbCalctor = {
 };
 
 let calcBase = {
+    success: false,
     //清单固定行
     fixedFlag: null,
     fixedBills: Object.create(null),
@@ -426,6 +427,7 @@ let calcBase = {
             $CBP = cbParser,
             $CBC = cbCalctor;
         try {
+            me.success = false;
             //分析输入式合法性
             let exp = $CBA.legalExp(node.data.userCalcBase);
             if(!exp){
@@ -440,6 +442,7 @@ let calcBase = {
                 throw '表达式不正确';
             }
             //存储
+            me.success = true;
             node.data.calcBase = exp;
             node.data.calcBaseValue = parseFloat(calcBaseValue).toDecimal(decimalObj.decimal('totalPrice', node));
             me.project.calcProgram.calculate(node);

+ 9 - 7
web/building_saas/main/js/models/calc_program.js

@@ -386,7 +386,7 @@ let executeObj = {
     },
     HJ: function () {
         let me = this;
-        let p = me.treeNode.data.calcBase ? me.treeNode.data.calcBase : 0;
+        let p = me.treeNode.data.calcBaseValue ? me.treeNode.data.calcBaseValue : 0;
         let q = me.treeNode.data.quantity ? me.treeNode.data.quantity : 1;
         let u = (p / q).toDecimal(decimalObj.decimal('unitPrice', me.treeNode));
         return u;
@@ -702,7 +702,7 @@ class CalcProgram {
                             rttf = parseFloat(data.feesIndex[ft.type].tenderTotalFee);
                         };
 
-                        if (me.project.projSetting.billsCalcMode === leafBillGetFeeType.rationContent) {
+                        if (me.project.property.billsCalcMode === leafBillGetFeeType.rationContent) {
                             buf = (buf + (ruf * rq / bq).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
                             btuf = (btuf + (rtuf * rq / bq).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
                         };
@@ -711,11 +711,11 @@ class CalcProgram {
                         sum_rttf = (sum_rttf + rttf).toDecimal(decimalObj.process);
                     };
 
-                    if (me.project.projSetting.billsCalcMode === leafBillGetFeeType.rationPriceConverse || me.project.projSetting.billsCalcMode === leafBillGetFeeType.rationPrice) {
+                    if (me.project.property.billsCalcMode === leafBillGetFeeType.rationPriceConverse || me.project.property.billsCalcMode === leafBillGetFeeType.rationPrice) {
                         buf = (sum_rtf / bq).toDecimal(decimalObj.process);
                         btuf = (sum_rttf / bq).toDecimal(decimalObj.process);
                     };
-                    if (isBaseFeeType(ft.type) || (me.project.projSetting.billsCalcMode === leafBillGetFeeType.rationPrice && ft.type == "common")){
+                    if (isBaseFeeType(ft.type) || (me.project.property.billsCalcMode === leafBillGetFeeType.rationPrice && ft.type == "common")){
                         btf = sum_rtf;
                         bttf = sum_rttf;
                     }
@@ -739,6 +739,7 @@ class CalcProgram {
         else if (treeNode.calcType == treeNodeCalcType.ctCommonUnitFee){
             delete treeNode.data.gljList;
             if (treeNode.data.calcBase) treeNode.data.calcBase = null;  // 不能直接删除该属性,否则无法冲掉库中已存储的值
+            if (treeNode.data.calcBaseValue) treeNode.data.calcBaseValue = null;  // 不能直接删除该属性,否则无法冲掉库中已存储的值
             if (treeNode.data.programID) treeNode.data.programID = null;
 
             let uf = (treeNode.data.feesIndex && treeNode.data.feesIndex.common && treeNode.data.feesIndex.common.unitFee) ? treeNode.data.feesIndex.common.unitFee : 0;
@@ -764,10 +765,10 @@ class CalcProgram {
 
             let f = treeNode.data.feeRate ? treeNode.data.feeRate : 100;
             let q = treeNode.data.quantity ? treeNode.data.quantity : 0;
-            let b = treeNode.data.calcBaseValue;
+            let b = treeNode.data.calcBaseValue ? treeNode.data.calcBaseValue : 0;
             let uf = (b * f * q / 100).toDecimal(decimalObj.bills.unitPrice);
             let tuf = uf;
-            let tf = (me.project.projSetting.billsCalcMode === leafBillGetFeeType.rationPrice) ? (b * f / 100).toDecimal(decimalObj.bills.totalPrice) : (uf * q).toDecimal(decimalObj.bills.totalPrice);
+            let tf = (me.project.property.billsCalcMode === leafBillGetFeeType.rationPrice) ? (b * f / 100).toDecimal(decimalObj.bills.totalPrice) : (uf * q).toDecimal(decimalObj.bills.totalPrice);
             let ttf = tf;
 
             delete treeNode.data.fees;    // 直接删掉再新增,不用一个个费判断更新,效率更高。
@@ -855,7 +856,7 @@ class CalcProgram {
                 // me.calcLeafBillChildren(treeNode);
 
                 // 清单单价计算模式下的叶子清单:取自己的计算程序ID,找到自己的计算程序计算。(汇总清单所有定额的工料机)
-                if (me.project.projSetting.billsCalcMode === leafBillGetFeeType.billsPrice)
+                if (me.project.property.billsCalcMode === leafBillGetFeeType.billsPrice)
                     treeNode.calcType = treeNodeCalcType.ctBillCalcProgram;
                 else                                        // 前三种计算模式下的叶子清单:汇总定额的计算程序的费用类别
                     treeNode.calcType = treeNodeCalcType.ctGatherRationsFees;
@@ -906,6 +907,7 @@ class CalcProgram {
                     subType: node.data.subType,
                     quantity: node.data.quantity,
                     calcBase: node.data.calcBase,
+                    calcBaseValue: node.data.calcBaseValue,
                     programID: node.data.programID,
                     marketUnitFee: node.data.marketUnitFee,
                     marketTotalFee: node.data.marketTotalFee,

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

@@ -12,7 +12,6 @@ const ModuleNames = {
     ration_ass:'ration_ass',
     quantity_detail:'quantity_detail',
     // volume_price: 'volume_price',
-    projectGLJ: 'project_glj',
     labour_coe: 'labour_coe',
     calc_program: 'calc_program'
 };
@@ -122,3 +121,7 @@ const leafBillGetFeeType = {
     billsPrice: 3
 };
 
+const zanguCalcType = {
+    common: 0,
+    gatherMaterial: 1
+};

+ 15 - 17
web/building_saas/main/js/models/project.js

@@ -39,6 +39,8 @@ var PROJECT = {
                 } else if (item.moduleName === me.projSetting) {
                     me._project.projSetting = item.data;
                     me._project.projSetting.moduleName = me.projSetting;
+                }else if(item.moduleName === ModuleNames.projectGLJ){
+                    me._project.projectGLJ.loadToCache(item.data);
                 }
             });
             for (module in counter) {
@@ -79,16 +81,9 @@ var PROJECT = {
             this.FeeRate = FeeRate.createNew(this);
             // this.VolumePrice = VolumePrice.createNew(this);
             this.projectGLJ = new ProjectGLJ();
-            this.projectGLJ.loadData();
+           // this.projectGLJ.loadData();
             this.composition = new Composition();
             this.composition.loadData();
-            this.Decimal = {
-                common: {
-                    quantity: 4,
-                    unitFee: 2,
-                    totalFee: 2
-                }
-            };
             this.labourCoe = new LabourCoe(this);
             this.calcProgram = new CalcProgram(this);
             this.calcBase = calcBase;
@@ -294,22 +289,24 @@ var PROJECT = {
             }
         };
 
-        project.prototype.setBillsCalcMode = function (calcMode) {
-            this.projSetting.billsCalcMode = calcMode;
+/*        project.prototype.setBillsCalcMode = function (calcMode) {
+            this.property.billsCalcMode = calcMode;
             this.initCalcFields();
-        };
+        };*/
 
-        project.prototype.initCalcFields = function () {
-            let settingConst = this.projSetting.settingConst;
+        /*project.prototype.initCalcFields = function () {
+            // let settingConst = this.projSetting.settingConst;
             if (this.calcFields) {
                 for (let field of this.calcFields) {
                     // unitFeeCalcFlag
                     if (field.type === 'zangu') {
                         field.unitFeeFlag = converseUnitFeeFlag;
                     } else {   
-                        if (this.projSetting.billsCalcMode === settingConst.billsCalcMode.rationContent) {
+                        // if (this.projSetting.billsCalcMode === settingConst.billsCalcMode.rationContent) {
+                        if (this.property.billsCalcMode === leafBillGetFeeType.rationContent) {
                             field.unitFeeFlag = rationContentUnitFeeFlag;
-                        } else if ( this.projSetting.billsCalcMode === settingConst.billsCalcMode.billsPrice) {
+                        // } else if ( this.projSetting.billsCalcMode === settingConst.billsCalcMode.billsPrice) {
+                        } else if ( this.property.billsCalcMode === leafBillGetFeeType.billsPrice) {
                             field.unitFeeFlag = billsPriceUnitFeeFlag;
                         } else {
                             field.unitFeeFlag = averageQtyUnitFeeFlag;
@@ -317,7 +314,8 @@ var PROJECT = {
                     }
                     // totalFeeCalcFlag
                     if (field.type === 'common') {
-                        if (this.projSetting.billsCalcMode === settingConst.billsCalcMode.rationPriceConverse) {
+                        // if (this.projSetting.billsCalcMode === settingConst.billsCalcMode.rationPriceConverse) {
+                        if (this.property.billsCalcMode === leafBillGetFeeType.rationPriceConverse) {
                             field.totalFeeFlag = sumTotalFeeFlag;
                         } else {
                             field.totalFeeFlag = totalFeeFlag;
@@ -327,7 +325,7 @@ var PROJECT = {
                     }
                 }
             }
-        }
+        }*/
 
         return new project();
     }

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

@@ -51,6 +51,12 @@ ProjectGLJ.prototype.loadData = function (callback = null) {
     });
 };
 
+ProjectGLJ.prototype.loadToCache = function (data) {
+    this.datas = data;
+    projectObj.project.projectGLJ=this;
+}
+
+
 /**
  * 获取对应工料机数据
  *
@@ -180,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) {

+ 7 - 0
web/building_saas/main/js/views/calc_base_view.js

@@ -161,6 +161,10 @@ let calcBaseView = {
 
     initCalctor: function (node) {
         let me = calcBaseView;
+        //输入框显示原本的
+        if(me.isDef(node.data.calcBase)){
+            me.inputExpr.val(node.data.calcBase);
+        }
         me.buildSheet();
         let baseObj = me.getFigure(node);
         me.showData(me.toViewData(baseObj));
@@ -221,6 +225,9 @@ let calcBaseView = {
             let selected = projectObj.project.mainTree.selected;
             selected.data.userCalcBase = me.getInputExpr();
             projectObj.project.calcBase.calculate(selected);
+            if(projectObj.project.calcBase.success){
+                $('#qd-jsjs').modal('hide');
+            }
         });
     },
 

+ 2 - 2
web/building_saas/main/js/views/fee_rate_view.js

@@ -253,7 +253,7 @@ var feeRateObject={
         FeeRateEditCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) {
             if(value!=null){
                // ctx.fillText(value,x+3+ctx.measureText(value).width,y+h-3);
-                ctx.fillText(value,x+w,y+h-3);
+                ctx.fillText(value,x+w-3,y+h-3);
             }
             if(feeRateObject.editingCell){
                 if(feeRateObject.editingCell.row==options.row&&feeRateObject.editingCell.col==options.col){
@@ -345,7 +345,7 @@ var feeRateObject={
     },
     ifFeeRateEdit:function () {
         var selected = projectObj.project.mainTree.selected;
-        return MainTreeCol.readOnly.forCalcBase(selected)?false:true;
+        return MainTreeCol.readOnly.forFeeRate(selected)?false:true;
     },
     createSpreadView:function () {
         if (this.mainViews) {

+ 8 - 19
web/building_saas/main/js/views/glj_view.js

@@ -25,19 +25,19 @@ var gljOprObj = {
             {headerName: "规格型号", headerWidth: 120, dataCode: "specs", dataType: "String", hAlign: "left"},
             {headerName: "单位", headerWidth: 45, dataCode: "unit", dataType: "String", hAlign: "center"},
             {headerName: "类型", headerWidth: 45, dataCode: "shortName", dataType: "String", hAlign: "center"},
-            {headerName: "定额消耗", headerWidth: 80, dataCode: "rationItemQuantity", dataType: "Number", hAlign: "right",decimalField:"glj.quantity"},    // dataType: "Number", formatter: "0.00"
-            {headerName: "自定消耗", headerWidth: 80, dataCode: "customQuantity", dataType: "Number", hAlign: "right",decimalField:"glj.quantity"},
+            {headerName: "定额消耗", headerWidth: 80, dataCode: "rationItemQuantity", dataType: "Number", hAlign: "right",decimalField:"glj.quantity"},    // dataType: "Number", formatter: "0.00"
+            {headerName: "自定消耗", headerWidth: 80, dataCode: "customQuantity", dataType: "Number", hAlign: "right",decimalField:"glj.quantity"},
             {headerName: "消耗量", headerWidth: 80, dataCode: "quantity", dataType: "Number", hAlign: "right",decimalField:"glj.quantity"},
             {headerName: "总消耗量", headerWidth: 80, dataCode: "totalQuantity", dataType: "Number", hAlign: "right",decimalField:"glj.quantity"},
-            {headerName: "基价单价", headerWidth: 80, dataCode: "basePrice", dataType: "Number", hAlign: "right",decimalField:"glj.unitPrice"},
-            {headerName: "调整价", headerWidth: 80, dataCode: "adjustPrice", dataType: "Number", hAlign: "right",decimalField:"glj.unitPrice"},
-            {headerName: "市场价", headerWidth: 80, dataCode: "marketPrice", dataType: "Number", hAlign: "right",decimalField:"glj.unitPrice"},
+            {headerName: "定额价", headerWidth: 80, dataCode: "basePrice", dataType: "Number", hAlign: "right",decimalField:"glj.unitPrice"},
+            {headerName: "调整价", headerWidth: 80, dataCode: "adjustPrice", dataType: "Number", hAlign: "right",decimalField:"glj.unitPrice"},
+            {headerName: "市场价", headerWidth: 80, dataCode: "marketPrice", dataType: "Number", hAlign: "right",decimalField:"glj.unitPrice"},
             {headerName: "是否暂估", headerWidth: 65, dataCode: "isEstimate", dataType: "String", hAlign: "center",vAlign:"center",cellType:"checkBox"}
         ],
         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));

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

@@ -37,7 +37,7 @@ let MainTreeCol = {
         calcProgramName: function (node) {
             if (
                 node.sourceType === projectObj.project.Ration.getSourceType() ||
-                (projectObj.project.calcProgram.isLeafBill(node) && projectObj.project.projSetting.billsCalcMode === leafBillGetFeeType.billsPrice)
+                (projectObj.project.calcProgram.isLeafBill(node) && projectObj.project.property.billsCalcMode === leafBillGetFeeType.billsPrice)
             ) return false
             else return true;
         },
@@ -106,6 +106,9 @@ let MainTreeCol = {
         },
         forQuantifyDetail:function (node) {
             return !(node.sourceType==ModuleNames.ration||!MainTreeCol.readOnly.billsParent(node));
+        },
+        forFeeRate:function (node) {
+            return MainTreeCol.readOnly.non_bills(node)||MainTreeCol.readOnly.billsParent(node)||MainTreeCol.readOnly.leafBillsWithDetail(node)
         }
     },
     cellType: {
@@ -132,7 +135,7 @@ let MainTreeCol = {
         calcProgramName: function (node) {
             if (
                 node.sourceType === projectObj.project.Ration.getSourceType() ||
-                (projectObj.project.calcProgram.isLeafBill(node) && projectObj.project.projSetting.billsCalcMode === leafBillGetFeeType.billsPrice)
+                (projectObj.project.calcProgram.isLeafBill(node) && projectObj.project.property.billsCalcMode === leafBillGetFeeType.billsPrice)
             ) {
                 var names = new GC.Spread.Sheets.CellTypes.ComboBox();
                 names.items(projectObj.project.calcProgram.compiledTemplateNames);

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

@@ -243,7 +243,6 @@ let basicInfoView = {
         return false;
     },
 
-
     a_updateInfo: function (datas) {
         let me = this;
         let url = '/pm/api/updateProjects',
@@ -455,9 +454,9 @@ $(document).ready(function () {
         basicInfoView.workBook.refresh();
     });
 
-    $('#property_ok').bind('click', function () {
+   /* $('#property_ok').bind('click', function () {
         if(basicInfoView.toUpdate(basicInfoView.orgDatas, basicInfoView.datas)){
             basicInfoView.a_updateInfo(basicInfoView.toSaveDatas(basicInfoView.datas));
         }
-    });
+    });*/
 });

+ 2 - 2
web/building_saas/main/js/views/project_property_bills_quantity_decimal.js

@@ -339,10 +339,10 @@ $(document).ready(function () {
         billsDecimalView.workBook.refresh();
     });
 
-    $('#property_ok').bind('click', function () {
+ /*   $('#property_ok').bind('click', function () {
         let newBillsDecimalDatas = billsDecimalView.toBillsDecimalDatas(billsDecimalView.cache);
         if(billsDecimalView.toUpdate(billsQuanDecimal.datas, newBillsDecimalDatas)){
             billsDecimalView.a_update(newBillsDecimalDatas);
         }
-    });
+    });*/
 });

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

@@ -47,7 +47,6 @@ decimalObj.decimal = function (field, node) {
 
 function returnV(v, r){
     if(isDef(v)){
-        console.log(v);
         return v;
     }
     return r;
@@ -245,7 +244,7 @@ $(document).ready(function () {
         v_initPanel(v_data);
     });
     //绑定确定按钮
-    e_bindCof($('#property_ok'));
+    //e_bindCof($('#property_ok'));
     //绑定小数位数输入控制
     e_validIn($('input', '#poj-settings-decimal'));
 });

+ 20 - 0
web/building_saas/main/js/views/project_property_display_view.js

@@ -0,0 +1,20 @@
+/**
+ * Created by Zhong on 2017/11/24.
+ */
+let projDisplayView = {
+
+    datas: {},//just for view
+
+    init:function () {
+        this.datas = projectInfoObj.projectInfo.property.displaySetting;
+        $("#autoHeight").attr("checked",this.datas.autoHeight);
+        $("#disPlayMainMateria").attr("checked",this.datas.disPlayMainMateria);
+        //$('#disPlayMainMateria').prop('checked')
+    }
+};
+
+$(document).ready(function () {
+    $('#tab_display_setting').on('shown.bs.tab', function () {
+        projDisplayView.init();
+    });
+});

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

@@ -114,6 +114,7 @@ let labourCoeView = {
                         let cell = me.sheet.getCell(r, c+ 1);
                         cell.value(v.coe);
                         cell.tag(v.ID);
+                        cell.hAlign(GC.Spread.Sheets.HorizontalAlign.center);
                         break;
                     };
                 };
@@ -141,7 +142,7 @@ let labourCoeView = {
                 projectObj.project.labourCoe.refreshData(data);
                 me.needUpdateDatas.splice(0, me.needUpdateDatas.length);
                 projectObj.project.calcProgram.compileAllTemps();
-                projectObj.project.ration.calcAll();
+                projectObj.project.calcProgram.calcAllNodes(calcAllType.catRations);
                 rationPM.buildSheet();
                 $("#std_labour_coe_files").val('');
             });

+ 2 - 2
web/building_saas/main/js/views/project_property_projFeature.js

@@ -401,9 +401,9 @@ $(document).ready(function () {
         projFeatureView.workBook.refresh();
     });
 
-    $('#property_ok').bind('click', function () {
+    /*$('#property_ok').bind('click', function () {
         if(projFeatureView.toUpdate(projFeatureView.orgDatas, projFeatureView.datas)){
            projFeatureView.a_updateInfo(projFeatureView.toSaveDatas(projFeatureView.datas));
         }
-    });
+    });*/
 });

+ 0 - 706
web/building_saas/main/js/views/project_view.js

@@ -1,706 +0,0 @@
-/**
- * Created by Mai on 2017/6/21.
- */
-
-var projectObj = {
-    project: null,
-    mainSpread: null,
-    mainController: null,
-    gljSpreed:null,
-    beforeMainTreeSelectedChange: function (node) {
-        /*if (node) {
-            subViewObj.saveComments(node);
-        }*/
-    },
-    treeSelectedChanged: function (node) {
-        let project = projectObj.project;
-        subViewObj.loadComments(node);
-        gljOprObj.showDataIfRationSelect(node);
-
-        // CSL.2017.07.25
-        if (activeSubSheetIs(subSheetIndex.ssiCalcProgram)) {
-            calcProgramObj.showData(node);
-        };
-        //zhong 2017-9-1 特征及内容
-        if(pageCCOprObj.active){
-            pageCCOprObj.mainActiveCell = projectObj.mainSpread.getActiveSheet().getSelections()[0];//mainSpread焦点单元格
-            if(node.sourceType === project.Bills.getSourceType()){
-                pageCCOprObj.setCacheAndShow(node);
-            }
-            else{
-                pageCCOprObj.clearData();
-            }
-        }
-    },
-    refreshBaseActn: function (tree) {
-        let setButtonValid = function (valid, btn) {
-            if (valid) {
-                btn.removeClass('disabled');
-            } else {
-                btn.addClass('disabled');
-            }
-        };
-        let selected = tree.selected, that = projectObj;
-        let canUpLevel = function (node) {
-            if (selected && selected.depth() > 0 && selected.canUpLevel()) {
-                if (selected.sourceType === that.project.Bills.getSourceType()) {
-                    return (!selected.nextSibling) || (selected.children.length === 0) || (selected.source.children.length > 0);
-                } else {
-                    return false;
-                }
-            } else {
-                return false;
-            }
-        };
-        let canDownLevel = function (node) {
-            if (selected && selected.depth() > 0 && selected.canDownLevel()) {
-                if (selected.sourceType === that.project.Bills.getSourceType()) {
-                    return (selected.preSibling.children.length === 0) || (selected.preSibling.source.children.length > 0);
-                } else {
-                    return false;
-                }
-            } else {
-                return false;
-            }
-        };
-        let canDelete = function (node) {
-            if (selected) {
-                if (selected.sourceType === that.project.Bills.getSourceType()) {
-                    return !(selected.data.flagsIndex && selected.data.flagsIndex.fixed && selected.data.flagsIndex.fixed.flag > 0);
-                } else {
-                    return true;
-                }
-            } else {
-                return false;
-            }
-        };
-        setButtonValid(canUpLevel(selected), $('#upLevel'));
-        setButtonValid(canDownLevel(selected), $('#downLevel'));
-        setButtonValid(selected && (selected.depth() > 0) && selected.canUpMove(), $('#upMove'));
-        setButtonValid(selected && (selected.depth() > 0) && selected.canDownMove(), $('#downMove'));
-        setButtonValid(canDelete(selected), $('#delete'));
-    },
-    checkCommonField: function (editingText, colSetting) {
-        let value;
-        if (colSetting.data.decimal) {
-            value = Number(editingText);
-            if (number_util.isNumber(value)) {
-                if (colSetting.data.decimal) {
-                    value = value.toDecimal(colSetting.data.decimal);
-                }
-            } else {
-                value = null;
-                alert('当前输入的数据类型不正确,请重新输入。');
-            }
-        } else {
-            value = editingText;
-        }
-        return value;
-    },
-    checkFormulaValidField: function (editingText, colSetting) {
-        let value = Number(editingText);
-        if (!value) {
-            try {
-                let exp = new Expression('');
-                exp.Expression(editingText);
-                value = Number(exp.Evaluate());
-            } catch (error) {
-                value = null;
-            }
-        }
-        if (value!=undefined||value!=null) {
-            if (colSetting.data.decimal) {
-                value = value.toDecimal(colSetting.data.decimal);   
-            }
-        } else if (editingText && editingText !== '') {
-            value = null;
-            alert('当前输入的数据类型不正确,请重新输入。');
-        }
-        return value;
-    },
-    checkSpreadEditingText: function (editingText, colSetting) {
-        if (colSetting.data.field === 'quantity') {
-            return this.checkFormulaValidField(editingText, colSetting);
-        }
-        else if (colSetting.data.field === 'programID') {
-            return this.project.calcProgram.compiledTemplateMaps[editingText];
-        }
-        else if (colSetting.data.field === 'subType') {
-            if (typeof(editingText) !== "number")
-                return volumePriceMaps[editingText]
-            else
-                return editingText;
-        }
-        else {
-            return this.checkCommonField(editingText, colSetting);
-        }
-    },
-    /*updateAndReCalculate: function (node, fieldName, value) {
-        let project = projectObj.project, calc = new BillsCalcHelper(project), nodes = [];
-        let getNodes = function (node) {
-            let cur = node, nodes = [];
-            while (cur) {
-                nodes.push(cur);
-                cur = cur.parent;
-            }
-            return nodes;
-        }
-        if (value) {
-            value = value.toDecimal(projectObj.project.Decimal.common.quantity);
-        }
-        if (node.sourceType === projectObj.project.Bills.getSourceType()) {
-            calcFees.setFee(node.data, fieldName, value);
-            calc.calcNode(node, true);
-            nodes = getNodes(node);
-            project.Bills.updateNodes(nodes, true);
-        }
-        else if (node.sourceType === projectObj.project.VolumePrice.getSourceType()) {
-            project.beginUpdate('VolumePrice_QuantityChange');
-            project.VolumePrice.updateField(node.source, fieldName, value, false);
-            calc.calcNode(node.parent, true);
-            nodes = getNodes(node.parent);
-            project.Bills.updateNodes(nodes, false);
-            project.endUpdate();
-            nodes.push(node);
-        }
-        else if (node.sourceType === projectObj.project.Ration.getSourceType()) {
-            project.beginUpdate('Ration_QuantityChange');
-            calcFees.setFee(node.data, fieldName, value);
-            node.data.gljList = project.ration_glj.getGljArrByRation(node.data.ID);
-            // calcProgram.calculate的传参必须是cacheNode类型,故无法将计算放在Ration模块中。
-            project.calcProgram.calculate(node);
-            project.Ration.updateRation(node.source, false);    // 加入待存储队列
-            calc.calcNode(node.parent, true);       //
-            nodes = getNodes(node.parent);
-            project.Bills.updateNodes(nodes, false);
-            project.endUpdate();
-            nodes.push(node);
-        }
-        this.mainController.refreshTreeNode(nodes, false);
-        calc = null;
-    },*/
-    updateBillsCode: function (node, value) {
-        let project = projectObj.project;
-        let stdMatchCode, formatCode, matchs;
-        let searchStdBillsAndUpdate = function (stdCode, formatCode) {
-            let orgCode = node.data.code.substr(0, 9);
-            if (stdCode === orgCode || projectInfoObj.projectInfo.engineeringInfo.bill_lib.length === 0) {
-                project.Bills.updateField(node.source, 'code', formatCode, true);
-                projectObj.mainController.refreshTreeNode([node], false);
-            } else if (projectInfoObj.projectInfo.engineeringInfo.bill_lib.length > 0) {
-                let libId = projectInfoObj.projectInfo.engineeringInfo.bill_lib[0].id;
-                CommonAjax.post('/stdBillsEditor/getStdBillsByCode', {userId: userID, billsLibId: libId, code: stdCode}, function (data) {
-                    if (data) {
-                        data.itemCharacter = pageCCOprObj.safeItemCharater(data.itemCharacter);
-                        if (/\//.test(data.unit)) {
-                            ConfirmModal.stdBillsUnit.check(data, function (std) {
-                                project.Bills.replaceBills(node.source, std, formatCode);
-                                projectObj.mainController.refreshTreeNode([node], false);
-                            }, function () {
-                                projectObj.mainController.refreshTreeNode([node], false);
-                            });
-                        } else {
-                            project.Bills.replaceBills(node.source, data, formatCode);
-                            projectObj.mainController.refreshTreeNode([node], false);
-                        }
-                    } else {
-                        project.Bills.updateField(node.source, 'code', formatCode, true);
-                        projectObj.mainController.refreshTreeNode([node], false);
-                    }
-                });
-            }
-        }
-        if (value.length === 9 && /^[\d]+$/.test(value)) {
-            stdMatchCode = value;
-            formatCode = project.Bills.newFormatCode(stdMatchCode);
-            searchStdBillsAndUpdate(stdMatchCode, formatCode);
-        } else if (value.length === 12 && /^[\d]+$/.test(value)) {
-            stdMatchCode = value.substr(0, 9);
-            matchs = project.Bills.sameStdCode(stdMatchCode, node.data.code);
-            if (matchs.indexOf(value) === -1) {
-                searchStdBillsAndUpdate(stdMatchCode, value);
-            } else if (confirm('已存在该编码的清单,是否继续?')) {
-                formatCode = project.Bills.newFormatCode(stdMatchCode, node.data.code);
-                searchStdBillsAndUpdate(stdMatchCode, formatCode);
-            }
-        } else {
-            project.Bills.updateField(node.source, 'code', value, true);
-            this.mainController.refreshTreeNode([node], false);
-        } 
-    },
-    updateRationCode: function (node, value) {
-        if (/[\w]{2}[\d]{4}/.test(value)) {
-            if (projectInfoObj.projectInfo.engineeringInfo.ration_lib.length === 0) {
-                alert('当前项目无定额库,请添加定额库。');
-                this.mainController.refreshTreeNode([node], false);
-            } else {
-                let libId = projectInfoObj.projectInfo.engineeringInfo.ration_lib[0].id;
-                CommonAjax.postRationLib('/rationRepository/api/matchRation', {user_id: userID, rationLibId: libId, code: value}, function (data) {
-                    if (data) {
-                        projectObj.project.Ration.replaceRation(node.source, data);
-                        projectObj.project.ration_glj.addRationGLJ(node.source, data);
-                    } else {
-                        alert('当前库中找不到定额"' + value + '"');
-                    }
-                    projectObj.mainController.refreshTreeNode([node], false);
-                });
-            }
-        } else {
-            alert('输入的定额编码有误,请检查。');
-            this.mainController.refreshTreeNode([node], false);
-        }
-    },
-    updateCode: function (node, value) {
-        let project = projectObj.project;
-        if (node.sourceType === project.Bills.getSourceType()) {
-            this.updateBillsCode(node, value);   // 新清单不适合实时计算,下面套什么还不能确定,无数量计算也无意义
-        } else if (node.sourceType === project.Ration.getSourceType()) {
-            this.updateRationCode(node, value);  // 新套定额适合实时计算
-            // 这里因异步问题暂时缺少工料机价格。该过程移到:ration_glj.js的refreshAfterSave方法中。
-            /*project.calcProgram.calculate(node);
-            project.calcProgram.saveNode(node);
-            if (activeSubSheetIs(subSheetIndex.ssiCalcProgram)) {
-                calcProgramObj.showData(node, false);
-            };*/
-        }
-    },
-    updateCellValue: function (node, value, colSetting) {
-        let project = projectObj.project, fieldName = colSetting.data.field;
-        if (value !== calcFees.getFee(node.data, fieldName)) {
-            if (fieldName === 'code') {
-                projectObj.updateCode(node, value);
-            }
-            else if(fieldName ==='feeRate'){
-                project.FeeRate.updateFeeRateFromBills(value,node,fieldName);
-            }
-            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(project.quantity_detail.quantityEditChecking(value,node,fieldName)){
-                       node.data.isFromDetail=0;
-                       project.quantity_detail.cleanQuantityDetail(node,true);
-                   }else {
-                       projectObj.mainController.refreshTreeNode([node]);
-                       return;
-                   }
-                }
-                else if (fieldName === 'marketUnitFee' || fieldName === 'feesIndex.common.unitFee') {
-                    if (value) {value = parseFloat(value).toDecimal(decimalObj.decimal("unitPrice", node))};
-                }
-                else if (fieldName === 'calcBase') {
-                    if (value) {value = parseFloat(value).toDecimal(decimalObj.decimal("totalPrice", node))};
-                };
-
-                node.changed = true;
-                if (fieldName == 'feesIndex.common.unitFee'){
-                    project.calcProgram.initFeeField(node, 'common');
-                    node.data.feesIndex.common.unitFee = value;
-                }
-                else node.data[fieldName] = value;
-                project.calcProgram.calculate(node);
-                project.calcProgram.saveNode(node);
-                gljOprObj.showRationGLJSheetData();
-            }
-            else {
-                if (node.sourceType === project.Bills.getSourceType()) {
-                    project.Bills.updateField(node.source, fieldName, value, true);
-                }
-                else if (node.sourceType === project.Ration.getSourceType()) {
-                    project.Ration.updateField(node.source, fieldName, value, true);
-                };
-
-                if (colSetting.data.wordWrap) {
-                    info.sheet.autoFitRow(node.serialNo());
-                }
-                projectObj.mainController.refreshTreeNode([node]);
-            }
-        } else if(value==null && fieldName ==='feeRate'){
-            project.FeeRate.cleanFeeRateID(node);
-        } else {
-            projectObj.mainController.refreshTreeNode([node], false);
-        }
-    },
-    mainSpreadEditEnded: function (sender, info) {
-        $.bootstrapLoading.start();
-        let project = projectObj.project;
-        let node = project.mainTree.items[info.row];
-        let colSetting = projectObj.mainController.setting.cols[info.col];
-        let fieldName = projectObj.mainController.setting.cols[info.col].data.field;
-        // 检查输入类型等
-        let value = projectObj.checkSpreadEditingText(info.editingText, colSetting);
-
-        projectObj.updateCellValue(node, value, colSetting);
-    },
-    mainSpreadRangeChanged: function (sender, info) {
-        let project = projectObj.project, setting = projectObj.mainController.setting;
-        if (info.changedCells.length > 0) {
-            for (let changedCell of info.changedCells) {
-                let cell = info.sheet.getCell(changedCell.row, changedCell.col);
-                let node = project.mainTree.items[changedCell.row];
-                let colSetting = setting.cols[changedCell.col];
-                let value = projectObj.checkSpreadEditingText(cell.text(), colSetting);
-
-                projectObj.updateCellValue(node, value, colSetting);
-            }
-        }
-    },
-    checkMainSpread: function () {
-        if (!this.mainSpread) {
-            this.mainSpread = SheetDataHelper.createNewSpread($('#billsSpread')[0]);
-            this.mainSpread.getActiveSheet().selectionPolicy(GC.Spread.Sheets.SelectionPolicy.muliRange);
-        }
-    },
-    refreshMainSpread: function () {
-        if (this.mainSpread) {
-            this.mainSpread.refresh();
-        }
-    },
-    loadProjectData: function () {
-        var that = this;
-        this.project = PROJECT.createNew(scUrlUtil.GetQueryString('project'), userID);
-        this.project.loadDatas(function (err) {
-            if (!err) {
-                that.project.calcProgram.compileAllTemps();
-                that.project.calcBase.init(that.project);
-                that.project.calcFields = JSON.parse(JSON.stringify(feeType));
-                that.project.initCalcFields();
-                let str = JSON.stringify(that.project.projSetting.main_tree_col);
-                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.projSetting.displayOption.autoHeight === 1;
-                that.project.projSetting.mainGridSetting.cols.forEach(function (col) {
-                    // for test.  后端没有绑定,暂时写死用于测试。
-/*                    if (col.data.field == '' && col.head.titleNames[0] == "取费专业") {
-                        col.data.field = 'programID';
-                        col.data.getText = 'getText.calcProgramName';
-                        col.data.cellType = 'cellType.calcProgramName';
-                    };*/
-
-                    col.data.splitFields = col.data.field.split('.');
-                    if (col.data.getText && Object.prototype.toString.apply(col.data.getText) === "[object String]") {
-                        col.data.getText = MainTreeCol.getEvent(col.data.getText);
-                    }
-                    if (col.readOnly && Object.prototype.toString.apply(col.readOnly) === "[object String]") {
-                        col.readOnly = MainTreeCol.getEvent(col.readOnly);
-                    }
-                    if (col.data.cellType && Object.prototype.toString.apply(col.data.cellType) === "[object String]") {
-                        let getCellType = MainTreeCol.getEvent(col.data.cellType);
-                        col.data.cellType = getCellType;
-                    }
-                    // if (col.data.digit && Object.prototype.toString.apply(col.data.digit) === "[object String]") {
-                    //     col.data.decimal = that.project.getDecimal(col.data.digit);
-                    //     col.data.formatter = MainTreeCol.getNumberFormatter(col.data.decimal);
-                    // }
-                    if (col.data.field === 'code') {
-                        col.data.formatter = '@';
-                    }
-
-                    // for test digit. CSLAAAAA
-                    if (col.data.field.hasSubStr("totalFee"))
-                       col.data.formatter = MainTreeCol.getNumberFormatter(decimalObj.ration.totalPrice, true)
-                    else if (col.data.field.hasSubStr("unitFee"))
-                        col.data.formatter = MainTreeCol.getNumberFormatter(decimalObj.ration.unitPrice, true)
-                    else if (col.data.field == "quantity")
-                        col.data.formatter = MainTreeCol.getNumberFormatter(decimalObj.ration.quantity, true);
-
-                    // 根据配置设置自动行高
-                    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;
-                        }
-                    }
-
-                });
-
-                that.mainController = TREE_SHEET_CONTROLLER.createNew(that.project.mainTree, that.mainSpread.getActiveSheet(), that.project.projSetting.mainGridSetting);
-                that.mainController.showTreeData();
-                that.mainController.bind('refreshBaseActn', that.refreshBaseActn);
-                that.mainController.bind(TREE_SHEET_CONTROLLER.eventName.beforeTreeSelectedChange, that.beforeMainTreeSelectedChange);
-                that.mainController.bind(TREE_SHEET_CONTROLLER.eventName.treeSelectedChanged, that.treeSelectedChanged);
-
-                that.mainSpread.bind(GC.Spread.Sheets.Events.EditEnded, that.mainSpreadEditEnded);
-                that.mainSpread.bind(GC.Spread.Sheets.Events.RangeChanged, that.mainSpreadRangeChanged);
-                that.loadMainSpreadContextMenu();
-                that.loadFocusLocation();
-            }
-            else {
-
-            }
-        });
-
-    },
-    loadMainSpreadContextMenu: function () {
-        var project = this.project, spread = this.mainSpread, controller = this.mainController;
-        $.contextMenu({
-            selector: '#billsSpread',
-            build: function ($trigger, e) {
-                var target = SheetDataHelper.safeRightClickSelection($trigger, e, spread);
-                controller.setTreeSelected(controller.tree.items[target.row]);
-                return target.hitTestType === GC.Spread.Sheets.SheetArea.viewport || target.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader;
-            },
-            items: {
-                "insertBills": {
-                    name: "插入清单",
-                    icon: 'fa-sign-in',
-                    disabled: function () {
-                        return project.mainTree.selected ? project.mainTree.selected.sourceType !== project.Bills.getSourceType() : false;
-                    },
-                    callback: function (key, opt) {
-                        ProjectController.addBills(project, controller);
-                    }
-                },
-                "insertRation": {
-                    name: "插入定额",
-                    icon: 'fa-sign-in',
-                    disabled: function () {
-                        var selected = project.mainTree.selected;
-                        if (selected) {
-                            if (            // CSL, 2017-11-28
-                                selected.sourceType === project.Ration.getSourceType() ||
-                                (selected.sourceType === project.Bills.getSourceType() && selected.source.children.length === 0)
-                               ) return false
-                            else return true
-                        } else return true
-                    },
-                    callback: function (key, opt) {
-                        ProjectController.addRation(project, controller, rationType.ration);
-                    }
-                },
-                "insertLJ": {
-                    name: "插入量价",
-                    icon: 'fa-sign-in',
-                    disabled: function () {
-                        var selected = project.mainTree.selected;
-                        if (selected) {
-                            if (            // CSL, 2017-11-28
-                            selected.sourceType === project.Ration.getSourceType() ||
-                            (selected.sourceType === project.Bills.getSourceType() && selected.source.children.length === 0)
-                            ) return false
-                            else return true
-                        } else return true
-                    },
-                    callback: function (key, opt) {
-                        ProjectController.addRation(project, controller, rationType.volumePrice);
-                    }
-                },
-                "spr1": '--------',
-                "delete": {
-                    name: '删除',
-                    icon: 'fa-remove',
-                    disabled: function () {
-                        var selected = project.mainTree.selected;
-                        return !selected;
-                    },
-                    callback: function () {
-                        var selected = controller.tree.selected, parent = selected.parent;
-                        if (selected) {
-                            if (selected.sourceType === project.Bills.getSourceType()) {
-                                project.Bills.deleteBills(selected.source);
-                                controller.delete();
-                            } else if (selected.sourceType === project.Ration.getSourceType()) {
-                                project.Ration.delete(selected.source);
-                                controller.delete();
-                            };
-                            projectObj.converseCalculateBills(parent);
-                        }
-                    }
-                },
-                "spr2":'--------',
-                "calculateAll_RationContent": {
-                    name: '造价计算',
-                    callback: function () {
-                        // projectObj.calculateAll();
-                        project.calcProgram.calcAllNodes();
-                    }
-                }
-            }
-        });
-    },
-    // 计算node及node的所有父项
-    converseCalculateBills: function (node) {
-/*        if (node) {
-            let calc = new BillsCalcHelper(this.project);
-            calc.calcNode(node, true);
-            let cur = node, nodes = [];
-            while (cur) {
-                nodes.push(cur);
-                cur = cur.parent;
-            }
-            this.mainController.refreshTreeNode(nodes, false);
-            this.project.Bills.updateNodes(nodes, true);
-            calc = null;
-        }*/
-        projectObj.project.calcProgram.calculate(node);
-        projectObj.project.calcProgram.saveNode(node);
-    },
-    // 计算全部清单
-/*    calculateAll: function () {
-        let calc = new BillsCalcHelper(this.project);
-        calc.calcAll();
-        this.mainController.showTreeData();
-        this.project.Bills.updateAll();
-        calc = null;
-    }*/
-    // 获取上次退出时的焦点位置
-    loadFocusLocation: function() {
-        const projectId = scUrlUtil.GetQueryString('project');
-        let row = getLocalCache('lastRow:' + projectId);
-        let col = getLocalCache('lastCol:' + projectId);
-        if (row !== null && col !== null) {
-            row = parseInt(row);
-            col = parseInt(col);
-            const sheet = this.mainSpread.getActiveSheet();
-            sheet.setSelection(row, col, 1, 1);
-        }
-    },
-};
-
-$('#insert').click(function () {
-    var controller = projectObj.mainController, project = projectObj.project;
-    var selected = controller.tree.selected;
-
-    if (!selected || selected.sourceType === project.Bills.getSourceType()) {
-        ProjectController.addBills(project, controller);
-    } else if (selected.sourceType === project.Ration.getSourceType()) {
-        ProjectController.addRation(project, controller, selected.data.type);
-    }
-});
-$('#delete').click(function () {
-    var controller = projectObj.mainController, project = projectObj.project;
-    var selected = controller.tree.selected, parent = selected.parent;
-
-    if (selected) {
-        if (selected.sourceType === project.Bills.getSourceType()) {
-            project.Bills.deleteBills(selected.source);
-            controller.delete();
-        } else if (selected.sourceType === project.Ration.getSourceType()) {
-            project.Ration.delete(selected.source);
-            controller.delete();
-        };
-        projectObj.converseCalculateBills(parent);
-    }
-});
-$('#upLevel').click(function () {
-    var controller = projectObj.mainController, project = projectObj.project;
-    var selected = controller.tree.selected, orgParent = selected.parent;
-
-    if (selected && selected.sourceType === project.Bills.getSourceType()) {
-        project.Bills.upLevelBills(selected.source);
-        controller.upLevel();
-        projectObj.converseCalculateBills(orgParent);
-    }
-});
-$('#downLevel').click(function () {
-    var controller = projectObj.mainController, project = projectObj.project;
-    var selected = controller.tree.selected;
-    if (selected && selected.sourceType === project.Bills.getSourceType()) {
-        project.Bills.downLevelBills(selected.source);
-        controller.downLevel();       
-        projectObj.converseCalculateBills(selected.parent);
-    }
-});
-$('#upMove').click(function () {
-    var controller = projectObj.mainController, project = projectObj.project;
-    var selected = controller.tree.selected, pre = selected.preSibling, preSerialNo;
-
-    if (selected.sourceType === project.Bills.getSourceType()) {
-        project.Bills.upMoveBills(selected.source);
-        controller.upMove();
-    } else if (selected.sourceType === project.Ration.getSourceType()) {
-        project.Ration.changePos(selected.source, selected.preSibling.source);
-        controller.upMove();
-    };
-});
-$('#downMove').click(function () {
-    var controller = projectObj.mainController, project = projectObj.project;
-    var selected = controller.tree.selected, next, nextSerialNo;
-
-    if (selected) {
-        if (selected.sourceType === project.Bills.getSourceType()) {
-            project.Bills.downMoveBills(selected.source);
-            controller.downMove();
-        } else if (selected.sourceType === project.Ration.getSourceType()) {
-            project.Ration.changePos(selected.source, selected.nextSibling.source);
-            controller.downMove();
-        };
-    }
-});
-
-$('#poj-set').on('show.bs.modal', function () {
-    let setCalcFlag = function (obj, val, curFlag) {
-        obj.val(val);
-        if (val === curFlag) {
-            obj.attr('checked', true);
-        } else {
-            obj.removeAttr('checked');
-        }
-    }
-    if (projectObj.project) {
-        let mode = projectObj.project.projSetting.billsCalcMode;
-        let settingConst = projectObj.project.projSetting.settingConst;
-        setCalcFlag($('#rationContent'), settingConst.billsCalcMode.rationContent, mode);
-        setCalcFlag($('#rationPriceConverse'), settingConst.billsCalcMode.rationPriceConverse, mode);
-        setCalcFlag($('#rationPrice'), settingConst.billsCalcMode.rationPrice, mode);
-        setCalcFlag($('#billsPrice'), settingConst.billsCalcMode.billsPrice, mode);
-
-        mode = projectObj.project.projSetting.zanguCalcMode;
-        setCalcFlag($('#zangu_common'), settingConst.zanguCalcMode.common, mode);
-        setCalcFlag($('#zangu_gatherMatherial'), settingConst.zanguCalcMode.gatherMaterial, mode);
-
-        // 呈现选项
-        setCalcFlag($('#autoHeight'), 1, projectObj.project.projSetting.displayOption.autoHeight);
-        setCalcFlag($('#rationDisplay'), 1, projectObj.project.projSetting.displayOption.rationDisplay);
-    }
-});
-$('#property_ok').click(function () {
-    let project = projectObj.project, reCalc= false;
-    let mode = parseInt($("input[name='calcFlag']:checked").val());
-    let zanguMode = parseInt($("input[name='zangu']:checked").val());
-    // 呈现选项
-    const autoHeight = $("#autoHeight:checked").length > 0 ? 1 : 0;
-    const rationDisplay = $("#rationDisplay:checked").length > 0 ? 1 : 0;
-
-    if (mode !== project.projSetting.billsCalcMode) {
-        project.setBillsCalcMode(mode);
-        reCalc = true;
-    }
-    if (zanguMode !== project.projSetting.zanguCalcMode) {
-        project.projSetting.zanguCalcMode = zanguMode;
-        reCalc = true;
-    }
-    if (labourCoeView.needSave()){
-        labourCoeView.save();
-        reCalc = true;
-    }
-    if (autoHeight !== project.projSetting.displayOption.autoHeight ||
-        rationDisplay !== project.projSetting.displayOption.rationDisplay) {
-        reCalc = true;
-    }
-    if (reCalc) {
-        // projectObj.calculateAll();
-/*        project.pushNow('editBillsCalcMode',
-            [project.projSetting.moduleName, project.Bills.getSourceType()],
-            [{
-                projectID: project.ID(),
-                billsCalcMode: project.projSetting.billsCalcMode
-            }, project.Bills.getUpdateAllData()]
-        );*/
-        project.pushNow('', [project.projSetting.moduleName], [{
-            projectID: project.ID(),
-            billsCalcMode: project.projSetting.billsCalcMode,
-            displayOption: {
-                autoHeight: autoHeight,
-                rationDisplay: rationDisplay
-            }
-        }]);
-        project.calcProgram.calcAllNodes(calcAllType.catBills);
-    }
-});