瀏覽代碼

Merge branch '1.0.0_online' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost into 1.0.0_online

# Conflicts:
#	web/building_saas/css/custom.css
zhongzewei 6 年之前
父節點
當前提交
23a815c14c

+ 15 - 0
modules/all_models/user.js

@@ -25,6 +25,13 @@ const versionSchema = new Schema({
     invalidInfo: [invalidSchema]
 });
 
+let upgrade = mongoose.Schema({
+    compilationID:String,//编办ID
+    upgrade_time:Number,
+    isUpgrade:Boolean,
+    remark:String//描述:广东办刘飞 2018-06-17 启用/关闭
+}, { _id: false })
+
 // 表结构
 let schema = {
     ssoId: Number,
@@ -55,7 +62,15 @@ let schema = {
         type: Number,
         default: -1
     },
+    // 最后登录时间
+    latest_login: {
+        type: Number,
+        default: 0
+    },
+    //最近使用编办
+    latest_used:String,
     create_time: Number,
+    upgrade_list:[upgrade],
     user_type:{
         type:String,
         default:'normal'//  normal : 普通用户,test:测试用户

+ 1 - 0
modules/common/helper/mongoose_helper.js

@@ -221,6 +221,7 @@ class MongooseHelper {
         if (condition === null || condition._id === undefined) {
             return condition;
         }
+        condition._id = condition._id.toString();
         let result = mongoose.Types.ObjectId(condition._id);
         condition._id = result;
 

+ 1 - 1
modules/users/controllers/boot_controller.js

@@ -29,8 +29,8 @@ class BootController extends BaseController {
         if (sessionCompilation === undefined && compilationId !== '') {
             let compilationModel = new CompilationModel();
             let compilationData = await compilationModel.getCompilationById(compilationId);
-
             request.session.sessionCompilation = compilationData;
+            if(sessionUser.latest_used !== compilationId) userModel.updateLatestUsed(sessionUser.id,compilationId);
         }
 
         // 判断是否已填写信息

+ 1 - 0
modules/users/controllers/login_controller.js

@@ -90,6 +90,7 @@ class LoginController {
                 preferenceSetting.select_version !== '') {
                 let compilationData = await compilationModel.getCompilationById(preferenceSetting.select_version);
                 request.session.sessionCompilation = compilationData;
+                if(request.session.sessionUser.latest_used !== preferenceSetting.select_version) await userModel.updateLatestUsed(request.session.sessionUser.id,preferenceSetting.select_version);
             }
 
         } catch (error) {

+ 14 - 4
modules/users/models/user_model.js

@@ -30,7 +30,7 @@ class UserModel extends BaseModel {
         '造价管理站', '学校', '个人', '其他'];
 
     /**
-     * 企业类型
+     * 企业规模
      *
      * @var
      */
@@ -91,6 +91,7 @@ class UserModel extends BaseModel {
         let userDataFromDb2 = await this.findDataBySsoId(userData.ssoId);
         let userDataFromDb = await this.findDataByName(userData.username);  //后面新增的账号可淘汰这方法,当前使用是为了兼容旧的账号
         let result = false;
+        userData.latest_login = new Date().getTime();
         if (userDataFromDb === null && userDataFromDb2 === null) {
             // 不存在用户则入库
             this.setScene();//恢复场景,用户有可能公司real_name等信息为空,不能设置为必填
@@ -103,7 +104,8 @@ class UserModel extends BaseModel {
             let UpdateData = {
                 email : userData.email,
                 mobile : userData.mobile,
-                ssoId : userData.ssoId
+                ssoId : userData.ssoId,
+                latest_login:userData.latest_login
             };
             let updateResult = await this.updateUser(condition,UpdateData);
             if (updateResult.ok === 1) {
@@ -113,6 +115,7 @@ class UserModel extends BaseModel {
         }
         request.session.sessionUser.id = userDataFromDb._id;
         request.session.sessionUser.real_name = userDataFromDb.real_name;
+        request.session.sessionUser.latest_used = userDataFromDb.latest_used;//设置最近使用的编办
 
         return result;
     }
@@ -196,17 +199,24 @@ class UserModel extends BaseModel {
         return this.db.create(insertData);
     }
 
+    //更新最近使用编办ID
+    async updateLatestUsed(userID,compilationID){
+        if(userID && compilationID){
+            return await this.db.update({'_id':userID},{'latest_used':compilationID});
+        }
+    }
+
     /**
      * 更新用户数据
      *
      * @param {object} updateData
      * @return {Promise}
      */
-    updateUser(condition, updateData) {
+    async updateUser(condition, updateData) {
         if (Object.keys(condition).length <= 0 || Object.keys(updateData).length <= 0) {
             return null;
         }
-        return this.db.update(condition, updateData);
+        return await this.db.update(condition, updateData);
     }
 
     async addVersion(condition, versionInfo){

+ 23 - 1
public/web/common_util.js

@@ -41,6 +41,11 @@ Array.prototype.hasSubArr = function (subArr){
     return true;
 };
 
+Array.prototype.delete = function (elem){
+    let idx = this.findIndex(function (e){return e == elem});
+    if (idx != -1) this.splice(idx, 1);
+};
+
 function seqString(num,length){
     var numstr = num.toString();
     var l=numstr.length;
@@ -56,4 +61,21 @@ function customRowHeader(sheet, dataLength) {
     for (let i = 0; i < dataLength; i++) {
         sheet.setValue(i, 0, `F${i + 1}`, GC.Spread.Sheets.SheetArea.rowHeader);
     }
-}
+};
+
+function changePropNames(object, oldNames, newNames) {
+    if (!object) return;
+    for (let i = 0; i < oldNames.length; i++) {
+        if (object[oldNames[i]]){
+            object[newNames[i]] = object[oldNames[i]];
+            delete object[oldNames[i]];
+        };
+    }
+};
+
+function deletePropNames(object, namesArr) {
+    if (!object) return;
+    for (let name of namesArr){
+        if (object[name]) delete object[name];
+    };
+};

+ 29 - 24
public/web/gljUtil.js

@@ -300,30 +300,35 @@ let gljUtil = {
         CONSTRUCTION_TECH: 3
     },
     gljType : {
-        LABOUR: 1, // 人工
-        // ==============材料类型=================
-        GENERAL_MATERIAL: 201,  // 普通材料
-        CONCRETE: 202, // 混凝土
-        MORTAR: 203,// 砂浆
-        MIX_RATIO: 204,// 配合比
-        COMMERCIAL_CONCRETE: 205,// 商品混凝土
-        COMMERCIAL_MORTAR: 206,// 商品砂浆
-        OTHER_MATERIAL: 207, // 其它材料
-        // ==============机械类型=================
-        GENERAL_MACHINE: 301,// 机械台班
-        MACHINE_COMPOSITION: 302,// 机械组成物
-        MACHINE_LABOUR: 303,// 机上人工
-        INSTRUMENT: 304,// 仪器仪表
-        FUEL_POWER_FEE:305,//燃料动力费
-        DEPRECIATION_FEE:306,//折旧费
-        INSPECTION_FEE:307,//检修费
-        MAINTENANCE:308,//维护费
-        DISMANTLING_FREIGHT_FEE:309,//安拆费及场外运费
-        VERIFICATION_FEE:310,//校验费
-        OTHER_FEE:311,//其他费用
-        // ==============机械类型=================
-        MAIN_MATERIAL: 4,// 主材
-        EQUIPMENT: 5// 设备
+        LABOUR: 1,                                  // 人工
+        // ==============材料类型 ↓=================
+        GENERAL_MATERIAL: 201,                      // 普通材料
+        CONCRETE: 202,                              // 混凝土
+        MORTAR: 203,                                // 砂浆
+        MIX_RATIO: 204,                             // 配合比
+        COMMERCIAL_CONCRETE: 205,                   // 商品混凝土
+        COMMERCIAL_MORTAR: 206,                     // 商品砂浆
+        OTHER_MATERIAL: 207,                        // 其它材料
+        // ==============材料类型 ↑=================
+        // ==============机械类型 ↓=================
+        GENERAL_MACHINE: 301,                       // 机械台班
+        MACHINE_COMPOSITION: 302,                   // 机械组成物
+        MACHINE_LABOUR: 303,                        // 机上人工
+        INSTRUMENT: 304,                            // 仪器仪表
+        FUEL_POWER_FEE:305,                         // 燃料动力费
+        DEPRECIATION_FEE:306,                       // 折旧费
+        INSPECTION_FEE:307,                         // 检修费
+        MAINTENANCE:308,                            // 维护费
+        DISMANTLING_FREIGHT_FEE:309,                // 安拆费及场外运费
+        VERIFICATION_FEE:310,                       // 校验费
+        OTHER_FEE:311,                              // 其他费用
+        OTHER_MACHINE_USED:312,                     // 其他施工机具使用费
+        // ==============机械类型 ↑=================
+        MAIN_MATERIAL: 4,                           // 主材
+        EQUIPMENT: 5,                               // 设备
+        MANAGEMENT_FEE: 6,                          // 企业管理费
+        PROFIT: 7,                                  // 利润
+        GENERAL_RISK_FEE: 8                         // 一般风险费
     },
     notEditType : [202,203,204,301,304,4],
     gljKeyArray : ['code','name','specs','unit','type'],

+ 9 - 13
public/web/tree_sheet/tree_sheet_helper.js

@@ -482,14 +482,8 @@ var TREE_SHEET_HELPER = {
                 let div = $('#autoTip')[0];
                 if (!div) {
                     div = document.createElement("div");
-                    $(div).css("position", "absolute")
-                        .css("border", "1px #000000 solid")
-                        .css("box-shadow", "1px 2px 5px rgba(0,0,0,0)")
-                        .css("font", "0.9rem Calibri")
-                        .css("background", "#000000")
-  						.css("color",'#FFFFFF')
-                        .css("padding", 5)
-                        .attr("id", 'autoTip');
+                    $(div).addClass("message-box");
+                    $(div) .attr("id", 'autoTip');
                     $(div).hide();
                     document.body.insertBefore(div, null);
                 }
@@ -499,7 +493,7 @@ var TREE_SHEET_HELPER = {
                     setting.pos = SheetDataHelper.getObjPos(hitinfo.sheet.getParent().qo);
                 }
                 if(text) text = replaceAll(/[\n]/,'<br>',text);
-                $(this._toolTipElement).html(text);
+                $(this._toolTipElement).html(`<span>${text}</span><div class="triangle-border tb-border"></div><div class="triangle-border tb-background"></div>`);
                 //清单指引、清单库做特殊处理
                 if($(hitinfo.sheet.getParent().qo).attr('id') === 'stdBillsSpread' || $(hitinfo.sheet.getParent().qo).attr('id') === 'billsGuidance_bills'){
                     $(this._toolTipElement).css('top', '').css('left', '').css('width', '');
@@ -507,10 +501,12 @@ var TREE_SHEET_HELPER = {
                     if($(this._toolTipElement).width() < hitinfo.x){
                         marginLeftMouse = hitinfo.x - $(this._toolTipElement).width();
                     }
-                    $(this._toolTipElement).css("top", setting.pos.y + hitinfo.y + 15).css("left", marginLeftMouse ? setting.pos.x + marginLeftMouse : setting.pos.x);
-                }
-                else {
-                    $(this._toolTipElement).css("top", setting.pos.y + hitinfo.cellRect.y ).css("left", setting.pos.x + hitinfo.cellRect.x + hitinfo.cellRect.width);
+                    $(this._toolTipElement).css("top", setting.pos.y + hitinfo.cellRect.y  -$(this._toolTipElement).height() -20).css("left", marginLeftMouse ? setting.pos.x + marginLeftMouse : setting.pos.x);
+                } else {
+                    //计算显示的初始位置
+                    let top = setting.pos.y + hitinfo.cellRect.y -$(this._toolTipElement).height() -26;
+                    let left =  setting.pos.x + hitinfo.cellRect.x;
+                    $(this._toolTipElement).css("top", top).css("left", left);
                 }
                 $(this._toolTipElement).show("fast");
                 TREE_SHEET_HELPER.tipDiv = 'show';//做个标记

+ 36 - 0
web/building_saas/css/custom.css

@@ -61,6 +61,42 @@ legend.legend{
     overflow-y: auto;
 }
 
+.message-box {
+    position:absolute;
+    background:#000;
+    padding:8px 10px;
+    line-height: 18px;
+    border-radius:4px;
+    text-align:left;
+    font:0.9rem Calibri;
+    box-shadow:2px 2px 6px #ccc;
+    color:#fff;
+}
+.triangle-border {
+    position:absolute;
+    left:10px;
+    overflow:hidden;
+    width:0;
+    height:0;
+    border-width:6px;
+    border-style:solid dashed dashed dashed;
+}
+.tb-border {
+    bottom:-12px;
+    border-color:#000 transparent transparent transparent;
+}
+.tb-background {
+    bottom:-11px;
+    border-color:#000 transparent transparent transparent;
+}
+
+.tb-border_up {
+    top:-12px;
+    border-color:transparent transparent #000 transparent;
+}
+.tb-background_up {
+    top:-11px;
+    border-color:transparent transparent #000 transparent;}
 .elf-options:hover{
     background-color: #CCCCCC;
 }

+ 119 - 131
web/building_saas/main/html/main.html

@@ -1455,144 +1455,132 @@
     <script src = "/lib/spreadjs/sheets/gc.spread.sheets.all.11.1.2.min.js"></script>
     <script src="/lib/spreadjs/sheets/interop/gc.spread.excelio.11.1.2.min.js"></script>
     <script>GC.Spread.Sheets.LicenseKey =  '<%- LicenseKey %>';</script>
-
     <script type="text/javascript" src="/lib/jquery-ui/jquery-ui-datepickerCN.js"></script>
     <script type="text/javascript" src="/lib/jquery-contextmenu/jquery.contextMenu.js"></script>
     <script type="text/javascript" src="/lib/jquery-contextmenu/jquery.ui.position.js"></script>
-
-        <script src="/lib/spreadjs/views/gc.spread.views.dataview.10.0.0.min.js" type="text/javascript"></script>
-        <script type="text/javascript" src="/lib/ztree/jquery.ztree.core.js"></script>
-        <script type="text/javascript" src="/lib/ztree/jquery.ztree.excheck.js"></script>
-        <!--<script src="/lib/spreadjs/views/common/gc.spread.common.10.0.0.min.js" type="text/javascript"></script>-->
-        <script src="/lib/spreadjs/views/plugins/gc.spread.views.gridlayout.10.0.0.min.js" type="text/javascript"></script>
-        <script src="/lib/js-xlsx/xlsx.core.min.js"></script>
-        <script src="/lib/lz-string/lz-string.min.js"></script>
-        <!-- inject:js -->
-        <!--<script type="text/javascript" src="/test/tmp_data/test_ration_calc/ration_calc_base.js"></script>-->
-        <script type="text/javascript" src="/web/building_saas/main/js/models/main_consts.js"></script>
-        <script type="text/javascript" src="/public/web/common_util.js"></script>
-
-        <script type="text/javascript" src="/web/building_saas/glj/js/project_glj.js"></script>
-        <script type="text/javascript" src="/web/building_saas/glj/js/composition.js"></script>
-        <script type="text/javascript" src="/web/building_saas/glj/js/common_spread.js"></script>
-        <script type="text/javascript" src="/web/building_saas/glj/js/composition_spread.js"></script>
-        <script type="text/javascript" src="/web/building_saas/glj/js/project_glj_spread.js"></script>
-
-        <script src="/web/building_saas/glj/js/socket.io.slim.js"></script>
-        <script src="/public/web/socket/connection.js"></script>
-        <script src="/public/web/uuid.js"></script>
-
-        <script type="text/javascript" src="/public/web/sheet/sheet_common.js"></script>
-
-        <!--expression calculate-->
-        <script src="/lib/JSExpressionEval_src/Date.js"></script>
-        <script src="/lib/JSExpressionEval_src/Stack.js"></script>
-        <script src="/lib/JSExpressionEval_src/Tokanizer.js"></script>
-        <script src="/lib/JSExpressionEval_src/Evaluator.js"></script>
-        <!--end expression calculate-->
-        <!--<script type="text/javascript" src="/lib/jquery-ui/jquery-ui.min.js"></script>
-        <script type="text/javascript" src="/lib/jquery-ui/jquery-ui-datepickerCN.js"></script>
-        <script type="text/javascript" src="/lib/jquery-contextmenu/jquery.contextMenu.js"></script>
-        <script type="text/javascript" src="/lib/jquery-contextmenu/jquery.ui.position.js"></script>-->
+    <script src="/lib/spreadjs/views/gc.spread.views.dataview.10.0.0.min.js" type="text/javascript"></script>
+    <script type="text/javascript" src="/lib/ztree/jquery.ztree.core.js"></script>
+    <script type="text/javascript" src="/lib/ztree/jquery.ztree.excheck.js"></script>
+    <!--<script src="/lib/spreadjs/views/common/gc.spread.common.10.0.0.min.js" type="text/javascript"></script>-->
+    <script src="/lib/spreadjs/views/plugins/gc.spread.views.gridlayout.10.0.0.min.js" type="text/javascript"></script>
+    <script src="/lib/js-xlsx/xlsx.core.min.js"></script>
+    <script src="/lib/lz-string/lz-string.min.js"></script>
+    <!-- inject:js -->
+    <!--<script type="text/javascript" src="/test/tmp_data/test_ration_calc/ration_calc_base.js"></script>-->
+    <script type="text/javascript" src="/web/building_saas/main/js/models/main_consts.js"></script>
+    <script type="text/javascript" src="/public/web/common_util.js"></script>
+    <script type="text/javascript" src="/web/building_saas/glj/js/project_glj.js"></script>
+    <script type="text/javascript" src="/web/building_saas/glj/js/composition.js"></script>
+    <script type="text/javascript" src="/web/building_saas/glj/js/common_spread.js"></script>
+    <script type="text/javascript" src="/web/building_saas/glj/js/composition_spread.js"></script>
+    <script type="text/javascript" src="/web/building_saas/glj/js/project_glj_spread.js"></script>
+    <script src="/web/building_saas/glj/js/socket.io.slim.js"></script>
+    <script src="/public/web/socket/connection.js"></script>
+    <script src="/public/web/uuid.js"></script>
+    <script type="text/javascript" src="/public/web/sheet/sheet_common.js"></script>
+    <!--expression calculate-->
+    <script src="/lib/JSExpressionEval_src/Date.js"></script>
+    <script src="/lib/JSExpressionEval_src/Stack.js"></script>
+    <script src="/lib/JSExpressionEval_src/Tokanizer.js"></script>
+    <script src="/lib/JSExpressionEval_src/Evaluator.js"></script>
+    <!--end expression calculate-->
+    <!--<script type="text/javascript" src="/lib/jquery-ui/jquery-ui.min.js"></script>
+    <script type="text/javascript" src="/lib/jquery-ui/jquery-ui-datepickerCN.js"></script>
+    <script type="text/javascript" src="/lib/jquery-contextmenu/jquery.contextMenu.js"></script>
+    <script type="text/javascript" src="/lib/jquery-contextmenu/jquery.ui.position.js"></script>-->
         <!--<script type="text/javascript" src="/lib/lodash/lodash.js"></script>-->
     <!-- Common -->
-        <script type="text/javascript" src="/public/web/common_ajax.js"></script>
-        <script type="text/javascript" src="/public/web/url_util.js"></script>
-        <script type="text/javascript" src="/public/web/number_util.js"></script>
-        <script type="text/javascript" src="/public/web/sheet/sheet_common.js"></script>
+    <script type="text/javascript" src="/public/web/common_ajax.js"></script>
+    <script type="text/javascript" src="/public/web/url_util.js"></script>
+    <script type="text/javascript" src="/public/web/number_util.js"></script>
+    <script type="text/javascript" src="/public/web/sheet/sheet_common.js"></script>
+    <!-- JS. -->
+    <!--<script src="/lib/popper/popper.min.js"></script>
+    <script src="/lib/bootstrap/bootstrap.min.js"></script>-->
+    <script src="/web/building_saas/js/global.js"></script>
+    <!--报表 zTree -->
 
-        <!-- JS. -->
-        <!--<script src="/lib/popper/popper.min.js"></script>
-        <script src="/lib/bootstrap/bootstrap.min.js"></script>-->
-        <script src="/web/building_saas/js/global.js"></script>
-        <!--报表 zTree -->
-
-        <!-- SpreadJs -->
-
-        <!--<script src="/lib/spreadjs/views/locale/gc.spread.views.dataview.locale.zh-CN.10.0.0.min.js" type="text/javascript"></script>-->
-        <!-- Model -->
-
-        <script type="text/javascript" src="/web/building_saas/main/js/models/project.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/models/bills.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/models/ration.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/models/glj.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/models/project_glj.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/models/composition.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/models/fee_rate.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/models/ration_glj.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/models/ration_coe.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/models/ration_ass.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/models/ration_installation.js"></script>
-        <!--<script type="text/javascript" src="/web/building_saas/main/js/models/volume_price.js"></script>-->
-        <script type="text/javascript" src="/web/building_saas/main/js/models/labour_coe.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/models/calc_program.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/models/calc_base.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/models/installation_fee.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/calc_program_manage.js"></script>
+    <!-- SpreadJs -->
 
-
-
-        <script type="text/javascript" src="/public/web/id_tree.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/models/cache_tree.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/calc/calc_fees.js"></script>
-        <!--<script type="text/javascript" src="/web/building_saas/main/js/calc/ration_calc.js"></script>-->
-        <!--<script type="text/javascript" src="/web/building_saas/main/js/calc/bills_calc.js"></script>-->
-        <!--<script type="text/javascript" src="/public/calc_util.js"></script>-->
-        <!-- Controller -->
-        <script type="text/javascript" src="/public/web/tree_sheet/tree_sheet_controller.js"></script>
-        <script type="text/javascript" src="/public/web/tree_sheet/tree_sheet_helper.js"></script>
-        <script type="text/javascript" src="/public/web/sheet/sheet_data_helper.js"></script>
-
-        <!-- view -->
-        <script type="text/javascript" src="/web/building_saas/main/js/views/glj_col.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/main_tree_col.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/project_info.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/project_view.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/options_view.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/project_property_bills_quantity_decimal.js"></script>
-        <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_indicativeInfo.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>
-        <script type="text/javascript" src="/web/building_saas/main/js/controllers/block_controller.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/side_tools.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/std_billsGuidance_lib.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/std_bills_lib.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/std_ration_lib.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/models/quantity_detail.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/glj_view_contextMenu.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/calc_program_view.js"></script>
-        <script type="text/javascript" src='/web/building_saas/main/js/views/confirm_modal.js'></script>
-        <script type="text/javascript" src='/web/building_saas/main/js/views/zlfb_view.js'></script>
-        <script type="text/javascript" src='/web/building_saas/main/js/views/installation_fee_view.js'></script>
-        <script type="text/javascript" src='/web/building_saas/main/js/views/project_glj_view.js'></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/importBills.js"></script>
-        <!--报表-->
-        <script type="text/javascript" src="/public/web/rpt_tpl_def.js"></script>
-        <script type="text/javascript" src="/public/web/treeDataHelper.js"></script>
-        <script type="text/javascript" src="/public/web/ztree_common.js"></script>
-        <script type="text/javascript" src="/web/building_saas/report/js/rpt_main.js"></script>
-        <script type="text/javascript" src="/web/building_saas/report/js/rpt_cfg_const.js"></script>
-        <script type="text/javascript" src="/web/building_saas/report/js/jpc_output_value_define.js"></script>
-        <script type="text/javascript" src="/web/building_saas/report/js/jpc_output.js"></script>
-        <script type="text/javascript" src="/web/building_saas/report/js/rpt_print.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/character_content_view.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/glj_view.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/zmhs_view.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/tender_price_view.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/sub_view.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/fee_rate_view.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/quantity_edit_view.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/sub_fee_rate_views.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/calc_base_view.js"></script>
-        <script type="text/javascript" src="/web/building_saas/main/js/views/project_property_labour_coe_view.js"></script>
-        <script type="text/javascript" src="/web/building_saas/complementary_ration_lib/js/main.js"></script>
-         <script type="text/javascript" src="/public/web/storageUtil.js"></script>
-        <!-- endinject -->
+    <!--<script src="/lib/spreadjs/views/locale/gc.spread.views.dataview.locale.zh-CN.10.0.0.min.js" type="text/javascript"></script>-->
+    <!-- Model -->
+    <script type="text/javascript" src="/web/building_saas/main/js/models/project.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/models/bills.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/models/ration.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/models/glj.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/models/project_glj.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/models/composition.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/models/fee_rate.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/models/ration_glj.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/models/ration_coe.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/models/ration_ass.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/models/ration_installation.js"></script>
+    <!--<script type="text/javascript" src="/web/building_saas/main/js/models/volume_price.js"></script>-->
+    <script type="text/javascript" src="/web/building_saas/main/js/models/labour_coe.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/models/calc_program.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/models/calc_base.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/models/installation_fee.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/calc_program_manage.js"></script>
+    <script type="text/javascript" src="/public/web/id_tree.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/models/cache_tree.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/calc/calc_fees.js"></script>
+    <!--<script type="text/javascript" src="/web/building_saas/main/js/calc/ration_calc.js"></script>-->
+    <!--<script type="text/javascript" src="/web/building_saas/main/js/calc/bills_calc.js"></script>-->
+    <!--<script type="text/javascript" src="/public/calc_util.js"></script>-->
+    <!-- Controller -->
+    <script type="text/javascript" src="/public/web/tree_sheet/tree_sheet_controller.js"></script>
+    <script type="text/javascript" src="/public/web/tree_sheet/tree_sheet_helper.js"></script>
+    <script type="text/javascript" src="/public/web/sheet/sheet_data_helper.js"></script>
+    <!-- view -->
+    <script type="text/javascript" src="/web/building_saas/main/js/views/glj_col.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/main_tree_col.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/project_info.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/project_view.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/options_view.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/project_property_bills_quantity_decimal.js"></script>
+    <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_indicativeInfo.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>
+    <script type="text/javascript" src="/web/building_saas/main/js/controllers/block_controller.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/side_tools.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/std_billsGuidance_lib.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/std_bills_lib.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/std_ration_lib.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/models/quantity_detail.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/glj_view_contextMenu.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/calc_program_view.js"></script>
+    <script type="text/javascript" src='/web/building_saas/main/js/views/confirm_modal.js'></script>
+    <script type="text/javascript" src='/web/building_saas/main/js/views/zlfb_view.js'></script>
+    <script type="text/javascript" src='/web/building_saas/main/js/views/installation_fee_view.js'></script>
+    <script type="text/javascript" src='/web/building_saas/main/js/views/project_glj_view.js'></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/importBills.js"></script>
+    <!--报表-->
+    <script type="text/javascript" src="/public/web/rpt_tpl_def.js"></script>
+    <script type="text/javascript" src="/public/web/treeDataHelper.js"></script>
+    <script type="text/javascript" src="/public/web/ztree_common.js"></script>
+    <script type="text/javascript" src="/web/building_saas/report/js/rpt_main.js"></script>
+    <script type="text/javascript" src="/web/building_saas/report/js/rpt_cfg_const.js"></script>
+    <script type="text/javascript" src="/web/building_saas/report/js/jpc_output_value_define.js"></script>
+    <script type="text/javascript" src="/web/building_saas/report/js/jpc_output.js"></script>
+    <script type="text/javascript" src="/web/building_saas/report/js/rpt_print.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/character_content_view.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/glj_view.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/zmhs_view.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/tender_price_view.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/sub_view.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/fee_rate_view.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/quantity_edit_view.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/sub_fee_rate_views.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/calc_base_view.js"></script>
+    <script type="text/javascript" src="/web/building_saas/main/js/views/project_property_labour_coe_view.js"></script>
+    <script type="text/javascript" src="/web/building_saas/complementary_ration_lib/js/main.js"></script>
+    <script type="text/javascript" src="/public/web/storageUtil.js"></script>
+    <!-- endinject -->
 
     <% if (overWriteUrl != undefined) { %>
          <script type="text/javascript" src="<%= overWriteUrl%>"></script>

+ 73 - 59
web/building_saas/main/js/models/calc_program.js

@@ -519,11 +519,11 @@ let calcTools = {
         if (treeNode.data.type != rationType.volumePrice && treeNode.data.type != rationType.gljRation) return;
         let result = 0, me = this;
         if (
-            (treeNode.data.subType === gljType.LABOUR && baseName === calcBaseNames.DEJJRGF) ||
-            (baseMaterialTypes.includes(treeNode.data.subType) && baseName === calcBaseNames.DEJJCLF) ||
-            (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === calcBaseNames.DEJJJXF) ||
-            (treeNode.data.subType === gljType.MAIN_MATERIAL && baseName === calcBaseNames.ZCF) ||
-            (treeNode.data.subType === gljType.EQUIPMENT && baseName === calcBaseNames.SBF)) {
+            (treeNode.data.subType === gljType.LABOUR && baseName === rationCalcBasesNameMap.DEJJRGF) ||
+            (baseMaterialTypes.includes(treeNode.data.subType) && baseName === rationCalcBasesNameMap.DEJJCLF) ||
+            (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === rationCalcBasesNameMap.DEJJJXF) ||
+            (treeNode.data.subType === gljType.MAIN_MATERIAL && baseName === rationCalcBasesNameMap.ZCF) ||
+            (treeNode.data.subType === gljType.EQUIPMENT && baseName === rationCalcBasesNameMap.SBF)) {
             if (treeNode.data.type == rationType.volumePrice)
                 result = treeNode.data.marketUnitFee ? parseFloat(treeNode.data.marketUnitFee).toDecimal(decimalObj.ration.unitPrice) : 0
             else if (treeNode.data.type == rationType.gljRation)
@@ -531,7 +531,7 @@ let calcTools = {
                 // 这里因为是算基数所以要取基价,但不能直接取basePrice,受限于项目属性的三个选项。
                 result = gljOprObj.getBasePrice(treeNode);
         }
-        else if (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === calcBaseNames.DEJJJSRGF) {
+        else if (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === rationCalcBasesNameMap.DEJJJSRGF) {
             let glj = {
                 'code': treeNode.data.code,
                 'name': treeNode.data.name,
@@ -544,11 +544,11 @@ let calcTools = {
         }
         else if (
             (treeNode.data.type == rationType.gljRation) &&
-            ((treeNode.data.subType === gljType.LABOUR && baseName === calcBaseNames.RGFJC) ||
-                (baseMaterialTypes.includes(treeNode.data.subType) && baseName === calcBaseNames.CLFJC) ||
-                (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === calcBaseNames.JXFJC) ||
-                (treeNode.data.subType === gljType.MAIN_MATERIAL && baseName === calcBaseNames.ZCFJC) ||
-                (treeNode.data.subType === gljType.EQUIPMENT && baseName === calcBaseNames.SBFJC))
+            ((treeNode.data.subType === gljType.LABOUR && baseName === rationCalcBasesNameMap.RGFJC) ||
+                (baseMaterialTypes.includes(treeNode.data.subType) && baseName === rationCalcBasesNameMap.CLFJC) ||
+                (treeNode.data.subType === gljType.GENERAL_MACHINE && baseName === rationCalcBasesNameMap.JXFJC) ||
+                (treeNode.data.subType === gljType.MAIN_MATERIAL && baseName === rationCalcBasesNameMap.ZCFJC) ||
+                (treeNode.data.subType === gljType.EQUIPMENT && baseName === rationCalcBasesNameMap.SBFJC))
         ) {
             let aprice = me.uiGLJPrice(treeNode.data.basePrice);   // 量价虚拟的工料机不可能有发文,这里直接取定额价。
             let mprice = me.uiGLJPrice(treeNode.data.marketUnitFee);
@@ -567,22 +567,22 @@ let calcTools = {
             supplyT = [supplyType.JDYG];
 
         let gljT = [], compT = [];
-        if (baseName == calcBaseNames.JGDEJJRGF || baseName == calcBaseNames.JDDEJJRGF){
+        if (baseName == rationCalcBasesNameMap.JGDEJJRGF || baseName == rationCalcBasesNameMap.JDDEJJRGF){
             gljT = [gljType.LABOUR];
         }
-        else if (baseName == calcBaseNames.JGDEJJCLF || baseName == calcBaseNames.JDDEJJCLF){
+        else if (baseName == rationCalcBasesNameMap.JGDEJJCLF || baseName == rationCalcBasesNameMap.JDDEJJCLF){
             gljT = baseMaterialTypes;
             compT = compositionTypes;
         }
-        else if (baseName == calcBaseNames.JGDEJJJXF || baseName == calcBaseNames.JDDEJJJXF){
+        else if (baseName == rationCalcBasesNameMap.JGDEJJJXF || baseName == rationCalcBasesNameMap.JDDEJJJXF){
             gljT = baseMachineTypes;
             compT = [gljType.GENERAL_MACHINE];
         }
-        else if (baseName == calcBaseNames.JGZCF || baseName == calcBaseNames.JDZCF){
+        else if (baseName == rationCalcBasesNameMap.JGZCF || baseName == rationCalcBasesNameMap.JDZCF){
             gljT = [gljType.MAIN_MATERIAL];
             compT = [gljType.MAIN_MATERIAL];
         }
-        else if (baseName == calcBaseNames.JGSBF || baseName == calcBaseNames.JDSBF){
+        else if (baseName == rationCalcBasesNameMap.JGSBF || baseName == rationCalcBasesNameMap.JDSBF){
             gljT = [gljType.EQUIPMENT];
         };
         // alert(JSON.stringify(projectGLJ.testGLJs()));
@@ -836,10 +836,30 @@ let calcTools = {
             return projectObj.project.projectGLJ.getDataByID(glj.projectGLJID);
         }
         else return null;
+    },
+    labourDays(node, isTender){
+        if (!node.data.gljList) return 0;
+        let rst = 0;
+        calcTools.uiNodeQty(node);
+        for (let glj of node.data.gljList) {
+            if (glj.type == gljType.LABOUR) {
+                let gljQ;
+                if (isTender){
+                    calcTools.calcGLJTenderQty(node, glj);
+                    gljQ = glj.tenderQuantity;
+                }
+                else
+                    gljQ = glj.quantity;
+
+                rst = rst + (gljQ * calcTools.uiNodeQty(node)).toDecimal(decimalObj.process);
+                rst = rst.toDecimal(decimalObj.process);
+            }
+        };
+        return rst.toDecimal(decimalObj.glj.quantity);
     }
 };
 
-const calcBaseNames = {
+let rationCalcBasesNameMap = {
     DEJJRGF: '定额基价人工费',
     DEJJCLF: '定额基价材料费',
     DEJJJXF: '定额基价机械费',
@@ -871,7 +891,7 @@ const calcBaseNames = {
     FBRGGR: '分包人工工日'
 };
 
-const rationCalcBases = {
+let rationCalcBases = {
     '定额基价人工费': function (node, isTender) {
         return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptBasePrice, isTender);
     },
@@ -906,82 +926,76 @@ const rationCalcBases = {
         return calcTools.rationBaseFee(node, [gljType.EQUIPMENT], priceTypes.ptBasePrice, isTender);
     },
     '人工工日': function (node, isTender) {
-        if (!node.data.gljList) return 0;
-        let rst = 0;
-
-        calcTools.uiNodeQty(node)
-        for (let glj of node.data.gljList) {
-            if (glj.type == gljType.LABOUR) {
-                let gljQ;
-                if (isTender){
-                    calcTools.calcGLJTenderQty(node, glj);
-                    gljQ = glj.tenderQuantity;
-                }
-                else
-                    gljQ = glj.quantity;
-
-                rst = rst + (gljQ * calcTools.uiNodeQty(node)).toDecimal(decimalObj.process);
-                rst = rst.toDecimal(decimalObj.process);
-            }
-        };
-        return rst.toDecimal(decimalObj.glj.quantity);
+        return calcTools.labourDays(node, isTender);
     },
     '甲供定额基价人工费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, calcBaseNames.JGDEJJRGF, isTender);
+        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JGDEJJRGF, isTender);
     },
     '甲供定额基价材料费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, calcBaseNames.JGDEJJCLF, isTender);
+        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JGDEJJCLF, isTender);
     },
     '甲供定额基价机械费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, calcBaseNames.JGDEJJJXF, isTender);
+        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JGDEJJJXF, isTender);
     },
     '甲供主材费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, calcBaseNames.JGZCF, isTender);
+        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JGZCF, isTender);
     },
     '甲供设备费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, calcBaseNames.JGSBF, isTender);
+        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JGSBF, isTender);
     },
     '甲定定额基价人工费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, calcBaseNames.JDDEJJRGF, isTender);
+        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JDDEJJRGF, isTender);
     },
     '甲定定额基价材料费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, calcBaseNames.JDDEJJCLF, isTender);
+        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JDDEJJCLF, isTender);
     },
     '甲定定额基价机械费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, calcBaseNames.JDDEJJJXF, isTender);
+        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JDDEJJJXF, isTender);
     },
     '甲定主材费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, calcBaseNames.JDZCF, isTender);
+        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JDZCF, isTender);
     },
     '甲定设备费': function (node, isTender) {
-        return calcTools.partASupplyFee(node, calcBaseNames.JDSBF, isTender);
+        return calcTools.partASupplyFee(node, rationCalcBasesNameMap.JDSBF, isTender);
     },
     '暂估材料费': function (node, isTender) {
         return calcTools.estimateFee(node, true, isTender);
     },
     '分包定额基价人工费': function (node, isTender) {
-        if (node.data.isSubcontract) return this.定额基价人工费(node, isTender)
-        else return 0;
+        if (node.data.isSubcontract)
+            return calcTools.rationBaseFee(node, [gljType.LABOUR], priceTypes.ptBasePrice, isTender)
+        else
+            return 0;
     },
     '分包定额基价材料费': function (node, isTender) {
-        if (node.data.isSubcontract) return this.定额基价材料费(node, isTender)
-        else return 0;
+        if (node.data.isSubcontract)
+            return calcTools.rationBaseFee(node, baseMaterialTypes, priceTypes.ptBasePrice, isTender)
+        else
+            return 0;
     },
     '分包定额基价机械费': function (node, isTender) {
-        if (node.data.isSubcontract) return this.定额基价机械费(node, isTender)
-        else return 0;
+        if (node.data.isSubcontract)
+            return calcTools.rationBaseFee(node, [gljType.GENERAL_MACHINE], priceTypes.ptBasePrice, isTender)
+        else
+            return 0;
     },
     '分包主材费': function (node, isTender) {
-        if (node.data.isSubcontract) return this.主材费(node, isTender)
-        else return 0;
+        if (node.data.isSubcontract)
+            return calcTools.rationBaseFee(node, [gljType.MAIN_MATERIAL], priceTypes.ptBasePrice, isTender)
+        else
+            return 0;
     },
     '分包设备费': function (node, isTender) {
-        if (node.data.isSubcontract) return this.设备费(node, isTender)
-        else return 0;
+        if (node.data.isSubcontract)
+            return calcTools.rationBaseFee(node, [gljType.EQUIPMENT], priceTypes.ptBasePrice, isTender)
+        else
+            return 0;
     },
     '分包人工工日': function (node, isTender) {
-        if (node.data.isSubcontract) return this.人工工日(node, isTender)
-        else return 0;
+        if (node.data.isSubcontract)
+            return calcTools.labourDays(node, isTender)
+        else
+            return 0;
     }
 };
 

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

@@ -18,35 +18,7 @@ const ModuleNames = {
     installation_fee:'installation_fee'
 };
 
-let gljType = {//这里还是要有所有的类型
-    LABOUR: 1, // 人工
-    // ==============材料类型=================
-    GENERAL_MATERIAL: 201,  // 普通材料
-    CONCRETE: 202, // 混凝土
-    MORTAR: 203,// 砂浆
-    MIX_RATIO: 204,// 配合比
-    COMMERCIAL_CONCRETE: 205,// 商品混凝土
-    COMMERCIAL_MORTAR: 206,// 商品砂浆
-    OTHER_MATERIAL: 207, // 其它材料
-    // ==============机械类型=================
-    GENERAL_MACHINE: 301,// 机械台班
-    MACHINE_COMPOSITION: 302,// 机械组成物
-    MACHINE_LABOUR: 303,// 机上人工
-    INSTRUMENT: 304,// 仪器仪表
-    FUEL_POWER_FEE:305,//燃料动力费
-    DEPRECIATION_FEE:306,//折旧费
-    INSPECTION_FEE:307,//检修费
-    MAINTENANCE:308,//维护费
-    DISMANTLING_FREIGHT_FEE:309,//安拆费及场外运费
-    VERIFICATION_FEE:310,//校验费
-    OTHER_FEE:311,//其他费用
-    // ==============机械类型=================
-    MAIN_MATERIAL: 4,// 主材
-    EQUIPMENT: 5,// 设备
-    MANAGEMENT_FEE: 6,// 企业管理费
-    PROFIT: 7,// 利润
-    GENERAL_RISK_FEE: 8//一般风险费
-};
+let gljType = gljUtil.gljType;
 // 计算基数 [定额基价材料费] 要用到的材料类型。
 const baseMaterialTypes = [
     gljType.GENERAL_MATERIAL,

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

@@ -213,6 +213,7 @@ let calcBaseView = {
                 }
             }
             let bnArr = Object.keys(rationCalcBases);
+            bnArr.sort();
             let baseArr = [];
             for (let bn of bnArr) {
                 baseArr.push({base: bn})

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

@@ -53,7 +53,7 @@ let calcProgramManage = {
         me.detailSpread = sheetCommonObj.buildSheet($('#detailSpread')[0], me.detailSetting, me.datas[0].calcItems.length);
         sheetCommonObj.spreadDefaultStyle(me.detailSpread);
         let arr = projectObj.project.calcProgram.compiledFeeTypeNames.slice();
-        // arr.splice(arr.findIndex(function (e){return e == '暂估费'}), 1);
+        // arr.delete('暂估费');
         let fieldName = new GC.Spread.Sheets.CellTypes.ComboBox();
         fieldName.items(arr);
         me.detailSpread.getSheet(0).getRange(-1, 4, -1, 1).cellType(fieldName);

+ 0 - 26
web/building_saas/main/js/views/fee_rate_view.js

@@ -502,32 +502,6 @@ var feeRateObject={
     },
 
     onMainFeeRateSheetValueChange:function (e,info) {
-  /*      let me = feeRateObject,updateData = {},feeRate = projectObj.project.FeeRate;
-        let recode = me.mainFeeRateData[info.row];
-        let fieldID = me.mainFeeRateSetting.header[info.col].dataCode;
-        let value = info.newValue;
-        if(fieldID == 'rate'&&value != null){
-            let checkResult = scMathUtil.isNumOrFormula(value);
-            if(checkResult!=null){
-                value = scMathUtil.roundForObj(checkResult,getDecimal("feeRate"));
-            }else {
-                alert('当前输入的数据类型不正确,请重新输入。');
-                me.mainFeeRateSheet.setValue(info.row, info.col, info.oldValue);
-                return;
-            }
-        }
-        if(recode[fieldID] == value){//没有改变
-            return;
-        }
-        updateData[fieldID] = value;
-        $.bootstrapLoading.start();
-         feeRate.updateFeeRateByID(recode.ID,updateData,function () {
-             me.mainFeeRateSheet.setValue(info.row, info.col, value);
-             if(fieldID == 'rate'){
-                feeRate.onFeeRateChange(recode.ID,value);
-            }
-            $.bootstrapLoading.end();
-        })*/
         feeRateObject.updateFeerateWhenCellsChange([info]);
     },
     onMainFeeRateRangeChanged:function (e,info) {

+ 30 - 32
web/building_saas/main/js/views/glj_view.js

@@ -934,7 +934,6 @@ var gljOprObj = {
             projectObj.project.projectGLJ.updatePriceFromRG(node.data, "marketPrice", newval);
             return
         }
-
         projectObj.mainController.refreshTreeNode([node]);
     },
     updateIsEstimate:function (args, newval) {
@@ -1143,20 +1142,20 @@ var gljOprObj = {
         }
     },
     doReplaceGLJ: function () {
-        var me = this;
-        var oldData = me.sheetData[gljContextMenu.selectedRow];
-        var project = projectObj.project;
-        var selectCode = gljOprObj.GLJSelection[0];
-        var selected = projectObj.project.mainTree.selected;
+        let me = this;
+        let oldData = me.sheetData[gljContextMenu.selectedRow];
+        let project = projectObj.project;
+        let selectCode = gljOprObj.GLJSelection[0];
+        let selected = projectObj.project.mainTree.selected;
         $("#glj_tree_div").modal('hide');
         project.ration_glj.replaceGLJ(selectCode, oldData, function (result) {
             if (result) {
                 //result.adjustState;
-                var glj_list = projectObj.project.ration_glj.datas;
-                var data = result.data;
-                var index = _.findIndex(gljOprObj.sheetData, {'ID': data.ID});
-                var list_index = _.findIndex(glj_list, {'ID': data.ID});
-                var nodes = [selected];
+                let glj_list = projectObj.project.ration_glj.datas;
+                let data = result.data;
+                let index = _.findIndex(gljOprObj.sheetData, {'ID': data.ID});
+                let list_index = _.findIndex(glj_list, {'ID': data.ID});
+                let nodes = [selected];
                 gljOprObj.sheetData[index] = data;
                 glj_list[list_index] = data;
                 project.projectGLJ.loadData(function () {//加载完项目工料机再计算
@@ -1220,10 +1219,10 @@ var gljOprObj = {
         });
     },
     refreshStateAfterMreplace: function (stateList, gljNodes) {
-        var nodes = [];
-        var rationNodes = [];
+        let nodes = [];
+        let rationNodes = [];
         _.forEach(stateList, function (s) {
-            var node = _.find(projectObj.project.mainTree.items, function (n) {
+            let node = _.find(projectObj.project.mainTree.items, function (n) {
                 return n.sourceType == ModuleNames.ration && n.data.ID == s.rationID;
             })
             if (node) {
@@ -1245,8 +1244,8 @@ var gljOprObj = {
         if (!obj) {
             return;
         }
-        var objectArray = [];
-        var nodes = [];
+        let objectArray = [];
+        let nodes = [];
         if (obj instanceof Array) {
             objectArray.concat(obj);
         } else {
@@ -1272,10 +1271,10 @@ var gljOprObj = {
         return node;
     },
     getTreeNodeCellType: function (data,comboboxOptions) {
-        var ns = GC.Spread.Sheets;
-        var rectW = 10;
-        var rectH = 10;
-        var margin = 3;
+        let ns = GC.Spread.Sheets;
+        let rectW = 10;
+        let rectH = 10;
+        let margin = 3;
 
         function TreeNodeCellType() {
         }
@@ -1284,8 +1283,8 @@ var gljOprObj = {
             ctx.strokeStyle = "gray";
             ctx.translate(0.5, 0.5);
             ctx.beginPath();
-            var rectX = x + margin;
-            var rectY = y + Math.round(h / 2) - rectH / 2;
+            let rectX = x + margin;
+            let rectY = y + Math.round(h / 2) - rectH / 2;
             ctx.moveTo(rectX, rectY);
             ctx.lineTo(rectX, rectY + rectH);
             ctx.lineTo(rectX + rectW, rectY + rectH);
@@ -1303,7 +1302,7 @@ var gljOprObj = {
             ctx.beginPath();
             ctx.moveTo(x + margin + 2, y + Math.round(h / 2));
             ctx.lineTo(x + margin + 8, y + Math.round(h / 2));
-            var rectY = y + Math.round(h / 2) - rectH / 2;
+            let rectY = y + Math.round(h / 2) - rectH / 2;
             if (collapsed) {
                 ctx.moveTo(x + margin + rectW / 2, rectY + 2);
                 ctx.lineTo(x + margin + rectW / 2, rectY + 2 + 6);
@@ -1341,11 +1340,11 @@ var gljOprObj = {
                 ctx.clearRect(x, y, w, h);
             }
             if (value != null) {
-                var offset = margin + rectW + 6;
-                var recode = data[options.row];
+                let offset = margin + rectW + 6;
+                let recode = data[options.row];
                 if (recode && recode.hasOwnProperty('subList')) {
                     drowRect(ctx, x, y, w, h);
-                    var collapsed = recode.collapsed == undefined ? true : recode.collapsed;//options.sheet.getTag(options.row,options.col);
+                    let collapsed = recode.collapsed == undefined ? true : recode.collapsed;//options.sheet.getTag(options.row,options.col);
                     drowSymbol(ctx, x, y, w, h, collapsed);
                 } else if (recode && recode.isMixRatio) {
                     offset = drowSubItem(ctx, x, y, w, h, offset, data[options.row + 1]);
@@ -1374,11 +1373,11 @@ var gljOprObj = {
             }
         };
         TreeNodeCellType.prototype.processMouseDown = function (hitinfo) {
-            var recode = data[hitinfo.row];
+            let recode = data[hitinfo.row];
             if (recode && recode.hasOwnProperty('subList')) {
-                var hoffset = hitinfo.cellRect.x + 3;
+                let hoffset = hitinfo.cellRect.x + 3;
                 if (hitinfo.x > hoffset && hitinfo.x < hoffset + 10) {
-                    var collapsed = recode.collapsed == undefined ? true : recode.collapsed;
+                    let collapsed = recode.collapsed == undefined ? true : recode.collapsed;
                     collapsed = !collapsed
                     recode.collapsed = collapsed;
                     //hitinfo.sheet.setTag(hitinfo.row,hitinfo.col,collapsed);
@@ -1417,7 +1416,6 @@ var gljOprObj = {
         gljOprObj.filterLibGLJSheetData();
         gljOprObj.showLibGLJSheetData();
     }
-
 }
 
 $(function () {
@@ -1438,7 +1436,7 @@ $(function () {
             gljOprObj.GLJSelection = [];
         } else if($('#actionType').val() =='m_replace' || $('#actionType').val() == 'replace'){//替换、批量替换
             let selected = gljOprObj.sheetData[gljContextMenu.selectedRow];
-            var connect_key = gljOprObj.getIndex(selected, gljKeyArray);
+            let connect_key = gljOprObj.getIndex(selected, gljKeyArray);
             gljOprObj.GLJSelection = [connect_key];
             selectMap[connect_key] = true;
             gljOprObj.filterLibGLJByType();
@@ -1488,7 +1486,7 @@ $(function () {
             gljOprObj.filterLibGLJSheetData();
             gljOprObj.showLibGLJSheetData();
         }
-    })
+    });
 /*    //工料机搜索
     $('#gljSearchKeyword').change(function () {
         gljOprObj.filterLibGLJSheetData();

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

@@ -9,6 +9,7 @@
     <!-- inject:css -->
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css">
+    <link rel="stylesheet" href="/web/building_saas/css/custom.css">
     <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">
     <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.sc.css">
     <!--zTree-->

+ 85 - 25
web/over_write/js/chongqing_2018.js

@@ -2,30 +2,6 @@
  * Created by zhang on 2018/8/14.
  */
 
-if(typeof gljType !== 'undefined'){
-    gljType = {
-        LABOUR: 1,// 人工
-        GENERAL_MATERIAL: 201, // 普通材料
-        CONCRETE: 202,// 混凝土
-        MORTAR: 203,// 砂浆
-        MIX_RATIO: 204,// 配合比
-        COMMERCIAL_CONCRETE: 205, // 商品混凝土
-        COMMERCIAL_MORTAR: 206, // 商品砂浆
-        OTHER_MATERIAL: 207, // 其它材料
-        GENERAL_MACHINE: 301,// 机械台班
-        MACHINE_LABOUR: 303, // 机上人工
-        INSTRUMENT: 304,// 仪器仪表
-        FUEL_POWER_FEE:305,//燃料动力费
-        DEPRECIATION_FEE:306,//折旧费
-        INSPECTION_FEE:307,//检修费
-        MAINTENANCE:308,//维护费
-        DISMANTLING_FREIGHT_FEE:309,//安拆费及场外运费
-        VERIFICATION_FEE:310,//校验费
-        OTHER_FEE:311,//其他费用
-        MAIN_MATERIAL: 4// 主材
-    };
-}
-
 if(typeof projectGljObject !== 'undefined'){
     projectGljObject.displayTypeMap=[
         {ID:'LABOUR',text:'人工'},
@@ -67,4 +43,88 @@ if(typeof materialAllowComponent !== 'undefined'){
 if(typeof materialComponent !== 'undefined'){
     //可以作为材料工料机组成物的工料机类型:普通材料
     materialComponent = [201];
-}
+}
+
+// CSL, 2018-08-21 计算程序、基数 的覆盖。
+if (rationCalcBases){
+    baseMaterialTypes.push(gljType.OTHER_MATERIAL);
+    allMaterialTypes.delete(gljType.EQUIPMENT);
+    baseMachineTypes.delete(gljType.MACHINE_COMPOSITION);
+    baseMachineTypes.push(gljType.INSTRUMENT, gljType.FUEL_POWER_FEE, gljType.DEPRECIATION_FEE,
+        gljType.INSPECTION_FEE, gljType.MAINTENANCE, gljType.DISMANTLING_FREIGHT_FEE,
+        gljType.VERIFICATION_FEE, gljType.OTHER_FEE, gljType.OTHER_MACHINE_USED);
+
+    changePropNames(rationCalcBases,
+        ['定额基价人工费', '定额基价材料费', '甲供定额基价人工费', '甲供定额基价材料费', '甲定定额基价人工费', '甲定定额基价材料费', '分包定额基价人工费','分包定额基价材料费'],
+        ['定额人工费', '定额材料费', '甲供定额人工费', '甲供定额材料费', '甲定定额人工费', '甲定定额材料费', '分包定额人工费','分包定额材料费']);
+    deletePropNames(rationCalcBases, [
+        '定额基价机械费', '定额基价机上人工费', '机械费价差', '主材费价差', '设备费价差','甲供定额基价机械费','甲定定额基价机械费',
+        '设备费', '甲供设备费', '甲定设备费', '分包设备费', '分包定额基价机械费']);
+
+    rationCalcBases['定额其他材料费'] = function (node, isTender) {
+        return calcTools.rationBaseFee(node, [gljType.OTHER_MATERIAL], priceTypes.ptBasePrice, isTender);
+    },
+    rationCalcBases['定额施工机具使用费'] = function (node, isTender) {
+        return calcTools.rationBaseFee(node, [gljType.GENERAL_MACHINE, gljType.INSTRUMENT, gljType.OTHER_MACHINE_USED], priceTypes.ptBasePrice, isTender);
+    },
+    rationCalcBases['计价材料价差'] = function (node, isTender) {
+        let baseMaterialTypesWithoutOtherMaterial = [
+            gljType.GENERAL_MATERIAL,
+            gljType.CONCRETE,
+            gljType.MORTAR,
+            gljType.MIX_RATIO,
+            gljType.COMMERCIAL_CONCRETE,
+            gljType.COMMERCIAL_MORTAR
+        ];
+        return calcTools.rationBaseFee(node, baseMaterialTypesWithoutOtherMaterial, priceTypes.ptDiffPrice, isTender);
+    },
+    rationCalcBases['机上人工费价差'] = function () {
+        return 0;
+    };
+    rationCalcBases['机械燃料动力费价差'] = function () {
+        return 0;
+    };
+    rationCalcBases['机械折旧费'] = function () {
+        return 0;
+    };
+    rationCalcBases['特大机械检修费'] = function () {
+        return 0;
+    };
+    rationCalcBases['中小机械检修费'] = function () {
+        return 0;
+    };
+    rationCalcBases['特大机械维护费'] = function () {
+        return 0;
+    };
+    rationCalcBases['中小机械维护费'] = function () {
+        return 0;
+    };
+    rationCalcBases['机械安拆费及场外运输费'] = function () {
+        return 0;
+    };
+    rationCalcBases['机械燃料动力费'] = function () {
+        return 0;
+    };
+    rationCalcBases['定额仪器仪表费'] = function (node, isTender) {
+        return calcTools.rationBaseFee(node, [gljType.INSTRUMENT], priceTypes.ptBasePrice, isTender);
+    },
+    rationCalcBases['定额其他施工机具使用费'] = function (node, isTender) {
+        return calcTools.rationBaseFee(node, [gljType.OTHER_MACHINE_USED], priceTypes.ptBasePrice, isTender);
+    },
+    rationCalcBases['甲供定额施工机具费'] = function () {
+        return 0;
+    };
+    rationCalcBases['分包定额施工机具费'] = function () {
+        return 0;
+    };
+    rationCalcBases['甲定定额施工机具费'] = function () {
+        return 0;
+    };
+
+}
+else {
+    let s = '加载超前,覆盖失败!';
+    console.log(s);
+    alert(s);
+}
+