浏览代码

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

TonyKang 7 年之前
父节点
当前提交
75fd695dfd

+ 23 - 0
modules/common/const/bills_type.js

@@ -0,0 +1,23 @@
+/**
+ * Created by Mai on 2017/8/29.
+ * 清单类别
+ */
+
+const typeFlag = {
+    //大项费用
+    DXFY: 1,
+    //分部
+    FB: 2,
+    //分项
+    FX: 3,
+    //清单    
+    BILLS: 4
+}
+const typeFlagList = [
+    {name: '大项费用', value: typeFlag.DXFY},
+    {name: '分部', value: typeFlag.FB},
+    {name: '分项', value: typeFlag.FX},
+    {name: '清单', value: typeFlag.BILLS}
+];
+
+export {typeFlag as default, typeFlagList as List};

+ 4 - 0
modules/ration_repository/controllers/ration_repository_controller.js

@@ -180,6 +180,10 @@ class RationRepositoryController extends baseController {
                 const result = type === 'source_file' ?
                     await rationItem.batchAddFromExcel(rationRepId, sheet[0].data) :
                     await rationItem.batchUpdateSectionIdFromExcel(sheet[0].data);
+
+                if (rationItem.failGLJList.length > 0) {
+                    responseData.msg = rationItem.failGLJList.join("\r\n");
+                }
                 // 删除文件
                 if (result) {
                     fs.unlink(uploadFullName);

+ 25 - 1
modules/ration_repository/models/glj_repository.js

@@ -35,7 +35,7 @@ var gljItemModel = db.model("std_ration_lib_glj_list",gljSchema, "std_ration_lib
 var repositoryMap = require('./repository_map');
 var counter = require('../../../public/counter/counter');
 let moment = require('moment');
-import {gljModel, gljClassModel} from "../../std_glj_lib/models/schemas";
+import {gljModel, gljClassModel, compleGljModel} from "../../std_glj_lib/models/schemas";
 
 var gljItemDAO = function(){};
 gljItemDAO.prototype.getGljTypes = function(gljLibID, callback){
@@ -74,6 +74,30 @@ gljItemDAO.prototype.getGljItems = function(gljIds, callback){
     })
 };
 
+gljItemDAO.prototype.getStdCompleGljItems = async function (rationGljList, callback) {
+    try{
+        let rst = [];
+        for(let i = 0, len = rationGljList.length; i < len; i++){
+            if(rationGljList[i].type !== undefined && rationGljList[i].type === 'complementary'){
+                let compleGlj = await compleGljModel.find({ID: rationGljList[i].gljId, deleteInfo: null});
+                if(compleGlj.length > 0){
+                    rst.push(compleGlj[0]);
+                }
+            }
+            else {
+                let stdGlj = await gljModel.find({ID: rationGljList[i].gljId, $or: [{deleted: null}, {deleted: false}]});
+                if(stdGlj.length > 0){
+                    rst.push(stdGlj[0]);
+                }
+            }
+        }
+        callback(0, rst);
+    }
+    catch(err){
+        callback(err, null);
+    }
+};
+
 gljItemDAO.prototype.getGljItemsByCode = function(repositoryId, codes, callback){
     gljModel.find({"repositoryId": repositoryId,"code": {"$in": codes}},function(err,data){
         if(err) callback(true, "")

+ 62 - 30
modules/ration_repository/models/ration_item.js

@@ -8,7 +8,7 @@ let counter = require('../../../public/counter/counter');
 let gljDao = require('./glj_repository');
 let rationRepositoryDao = require('./repository_map');
 const scMathUtil = require('../../../public/scMathUtil').getUtil();
-import {rationItemModel} from './schemas';
+import {rationItemModel, compleRationModel} from './schemas';
 import STDGLJListModel from '../../std_glj_lib/models/gljModel';
 
 var rationItemDAO = function(){};
@@ -209,12 +209,9 @@ function round(v,e){
     return Math.round(v*t)/t;
 }
 
+
 rationItemDAO.prototype.updateRationBasePrc = function (basePrcArr, callback) {
-   // let basePrcArr = data.basePrcArr;
-       // adjGljId = data.gljId, adjBasePrice = data.basePrice, adjGljType = data.gljType,
-      //  repId = data.repId, lastOpr = data.lastOpr;
-    //
-   // let updateArr;
+
     async.each(basePrcArr, function (basePrcObj, finalCb) {
         let adjGljId = basePrcObj.gljId, adjBasePrice = basePrcObj.basePrice, adjGljType = basePrcObj.gljType;
         async.waterfall([
@@ -231,7 +228,25 @@ rationItemDAO.prototype.updateRationBasePrc = function (basePrcArr, callback) {
                                     cb(err);
                                 }
                                 else{
-                                    cb(null, result);
+                                    //补充定额
+                                    compleRationModel.find({'rationGljList.gljId': adjGljId},{ID: 1, rationGljList: 1}, function (err, compleRst) {
+                                        if(err){
+                                            cb(err);
+                                        }
+                                        else {
+                                            compleRationModel.update({'rationGljList.gljId': adjGljId}, {$pull: {rationGljList: {gljId: adjGljId}}}, {multi: true}, function (err) {
+                                                if(err){
+                                                    cb(err);
+                                                }
+                                                else {
+                                                    for(let i = 0, len = compleRst.length; i < len; i++){
+                                                        compleRst[i]._doc.type = 'complementary';
+                                                    }
+                                                    cb(null, result.concat(compleRst));
+                                                }
+                                            });
+                                        }
+                                    });
                                 }
                             });
                         }
@@ -243,27 +258,26 @@ rationItemDAO.prototype.updateRationBasePrc = function (basePrcArr, callback) {
                             cb(err);
                         }
                         else{
-                            cb(null, result);
+                            compleRationModel.find({'rationGljList.gljId': adjGljId}, function (err, compleRst) {
+                                if(err){
+                                    cb(err);
+                                }
+                                else {
+                                    for(let i = 0, len = compleRst.length; i < len; i++){
+                                        compleRst[i]._doc.type = 'complementary';
+                                    }
+                                    cb(null, result.concat(compleRst));
+                                }
+                            });
                         }
                     });
                 }
-               /* rationItemModel.find({'rationGljList.gljId': adjGljId}, function (err, result) {
-                    if(err){
-                        cb(err);
-                    }
-                    else{
-                        cb(null, result);
-                    }
-                });*/
             },
             function (result, cb) {
                 async.each(result, function (rationItem, ecb) {
                     let rationGljList = rationItem.rationGljList,
                         gljIds = [];
-                    rationGljList.forEach(function (rationGlj) {
-                        gljIds.push(rationGlj.gljId);
-                    });
-                    gljDao.getGljItems(gljIds, function(err, gljItems){
+                    gljDao.getStdCompleGljItems(rationGljList, function(err, gljItems){
                         if(err){
                             ecb(err);
                         }
@@ -336,16 +350,30 @@ rationItemDAO.prototype.updateRationBasePrc = function (basePrcArr, callback) {
                             }
                             updatePrc.basePrice = scMathUtil.roundTo(updatePrc.labourPrice + updatePrc.materialPrice + updatePrc.machinePrice, -2);
                             //updateDataBase
-                            rationItemModel.update({ID: rationItem.ID}, {$set: {labourPrice: updatePrc.labourPrice.toString(), materialPrice: updatePrc.materialPrice.toString(),
-                                    machinePrice: updatePrc.machinePrice.toString(), basePrice: updatePrc.basePrice.toString()}},
-                                function (err, result) {
-                                    if(err){
-                                        ecb(err);
-                                    }
-                                    else {
-                                        ecb(null);
-                                    }
-                                });
+                            if(rationItem._doc.type !== undefined && rationItem._doc.type === 'complementary'){
+                                compleRationModel.update({ID: rationItem.ID}, {$set: {labourPrice: updatePrc.labourPrice.toString(), materialPrice: updatePrc.materialPrice.toString(),
+                                        machinePrice: updatePrc.machinePrice.toString(), basePrice: updatePrc.basePrice.toString()}},
+                                    function (err, result) {
+                                        if(err){
+                                            ecb(err);
+                                        }
+                                        else {
+                                            ecb(null);
+                                        }
+                                    });
+                            }
+                            else {
+                                rationItemModel.update({ID: rationItem.ID}, {$set: {labourPrice: updatePrc.labourPrice.toString(), materialPrice: updatePrc.materialPrice.toString(),
+                                        machinePrice: updatePrc.machinePrice.toString(), basePrice: updatePrc.basePrice.toString()}},
+                                    function (err, result) {
+                                        if(err){
+                                            ecb(err);
+                                        }
+                                        else {
+                                            ecb(null);
+                                        }
+                                    });
+                            }
                         }
                     });
                 }, function(err){
@@ -513,6 +541,8 @@ rationItemDAO.prototype.batchAddFromExcel = async function(rationRepId, data) {
     // 编码列表,用于查找库中是否有对应数据
     let rationCodeList = [];
     let gljCodeList = [];
+    // 插入失败的工料机列表(用于提示)
+    this.failGLJList = [];
     for (const tmp of data) {
         if (tmp.length <= 0) {
             continue;
@@ -521,6 +551,8 @@ rationItemDAO.prototype.batchAddFromExcel = async function(rationRepId, data) {
         if (tmp[0] === undefined && Object.keys(lastData).length > 0) {
             // 如果不存在对应的工料机库数据则跳过
             if (stdGLJList[tmp[1]] === undefined) {
+                const failString = '定额' + lastData.code + '下的' + tmp[1];
+                this.failGLJList.push(failString);
                 continue;
             }
             const tmpRationGlj = {

+ 27 - 1
modules/ration_repository/models/schemas.js

@@ -104,9 +104,35 @@ var rationItemSchema = new Schema({
     isDeleted: Boolean
 });
 
+//补充定额
+let compleRationSchema = new Schema({
+    userId: Number,
+    compilationId: String,
+    rationRepId: Number,
+    ID:Number,
+    code: String,
+    name: String,
+    unit: String,
+    labourPrice: String,
+    materialPrice: String,
+    machinePrice: String,
+    basePrice: String,
+    sectionId: Number,
+    caption: String,
+    feeType: Number,
+    jobContent: String,
+    annotation: String,
+    rationGljList: Array,
+    rationCoeList: Array,
+    rationAssList: Array,
+    deleteInfo: Schema.Types.Mixed
+}, {versionKey: false});
+
 let coeListModel = db.model("std_ration_lib_coe_list",coeListSchema, "std_ration_lib_coe_list")
 let rationRepository = db.model("std_ration_lib_map", RepositoryMapSchema, "std_ration_lib_map");
 let rationChapterTreeModel = db.model("std_ration_lib_ration_chapter_trees", rationChapterTreeSchema, "std_ration_lib_ration_chapter_trees");
 let rationItemModel = db.model("std_ration_lib_ration_items",rationItemSchema, "std_ration_lib_ration_items");
+//补充定额
+let compleRationModel = db.model('complementary_ration_items', compleRationSchema, 'complementary_ration_items');
 
-export{coeListModel, rationRepository, rationChapterTreeModel, rationItemModel};
+export{coeListModel, rationRepository, rationChapterTreeModel, rationItemModel, compleRationModel};

+ 17 - 1
modules/std_glj_lib/models/schemas.js

@@ -77,10 +77,26 @@ let gljClassTemplate = mongoose.Schema({
     deleted: Boolean
 }, {versionKey: false});
 
+//补充工料机跟用户和编办绑定
+let complementaryGljSchema = new Schema({
+    userId: Number,
+    compilationId: String,
+    ID: Number,
+    code: String,
+    name: String,
+    specs: String,
+    unit: String,
+    basePrice: String,
+    gljClass: Number,
+    gljType: Number,
+    shortName: String,
+    component: Array
+}, {versionKey: false});
 
 let gljMapModel = mongoose.model('std_glj_lib_map', gljMapSchema, 'std_glj_lib_map');
 let gljModel = mongoose.model('std_glj_lib_gljList', gljSchema, 'std_glj_lib_gljList');
 let gljClassModel = mongoose.model('std_glj_lib_gljClass', gljClassSchema, 'std_glj_lib_gljClass');
 let gljClassTemplateModel = mongoose.model('std_glj_lib_gljClassTemplate', gljClassTemplate, 'std_glj_lib_gljClassTemplate');
+let compleGljModel = mongoose.model('complementary_glj_lib', complementaryGljSchema, 'complementary_glj_lib');
 
-export {gljMapModel as default, gljModel, gljClassModel, gljClassTemplateModel};
+export {gljMapModel as default, gljModel, gljClassModel, gljClassTemplateModel, compleGljModel};

+ 2 - 0
modules/users/controllers/compilation_controller.js

@@ -14,6 +14,7 @@ import STDFeeRateLibsModel from "../../common/std/std_fee_rate_libs_model";
 import {default as EngineeringConst, List as EngineeringList} from "../../common/const/engineering";
 import BillsTemplateModel from "../models/bills_template_model";
 import {default as BillsFixedFlagConst, List as BillsFixedFlagList} from "../../common/const/bills_fixed.js";
+import {default as BillsTypeFlagConst, List as BillsTypeFlagList} from "../../common/const/bills_type.js";
 import EngineeringLibModel from "../models/engineering_lib_model";
 import STDLabourCoesModel from "../../common/std/std_labour_coes_model";
 import STDCalcProgramModel from "../../common/std/std_calc_program_model";
@@ -482,6 +483,7 @@ class CompilationController extends BaseController {
             billList: JSON.stringify(billList),
             billsTemplateData: JSON.stringify(billsTemplateData),
             billsFixedFlagList: JSON.stringify(BillsFixedFlagList),
+            billsTypeFlagList: JSON.stringify(BillsTypeFlagList),
             valuationData: valuationData,
             valuationList: valuationList,
             selectedCompilation: selectedCompilation,

+ 3 - 3
modules/users/models/bills_template_model.js

@@ -25,9 +25,9 @@ class BillsTemplateModel extends BaseModel {
      */
     async getTemplateData (valuationId, engineering) {
         // 筛选字段
-        let field = {_id: 1, valuationId: 1, ID: 1, ParentID: 1, NextSiblingID: 1, code: 1, name: 1, unit: 1, flags: 1};
+        let field = {_id: 1, valuationId: 1, ID: 1, ParentID: 1, NextSiblingID: 1, code: 1, name: 1, unit: 1, flags: 1, type: 1};
         let data = await this.findDataByCondition({valuationId: valuationId, engineering: engineering}, field, false);
-
+        console.log(data);
         return data === null ? [] : data;
     }
 
@@ -39,7 +39,7 @@ class BillsTemplateModel extends BaseModel {
      */
     async getTemplateDataForNewProj (valuationId, engineering) {
         // 筛选字段
-        let field = {_id: 0, ID: 1, ParentID: 1, NextSiblingID: 1, code: 1, name: 1, unit: 1, flags: 1};
+        let field = {_id: 0, ID: 1, ParentID: 1, NextSiblingID: 1, code: 1, name: 1, unit: 1, flags: 1, type: 1};
         let data = await this.findDataByCondition({valuationId: valuationId, engineering: engineering}, field, false);
 
         return data === null ? [] : data;

+ 2 - 0
modules/users/models/schemas/bills_template.js

@@ -22,6 +22,8 @@ let BillsTemplateSchema = {
     name: String,
     // 单位
     unit: String,
+    // 类别
+    type: Number,
     // 标记
     flags:{
         type: [flagsSchema],

+ 9 - 1
web/maintain/ration_repository/js/main.js

@@ -132,6 +132,10 @@ $(function () {
                     self.removeAttr('disabled');
                     self.text('确定导入');
                     if (response.err === 0) {
+                        const message = response.msg !== undefined ? response.msg : '';
+                        if (message !== '') {
+                            alert(message);
+                        }
                         // 成功则关闭窗体
                         dialog.modal("hide");
                     } else {
@@ -275,7 +279,11 @@ function createRationLib(rationObj, dispNamesArr){
                     "<td>"+createDate+" </td>" +
                     "<td><a href='javascript:void(0);' data-toggle='modal' data-target='#edit' title='编辑'>" +
                     "<i class='fa fa-pencil-square-o'></i></a> <a href='javascript:void(0);' data-toggle='modal' data-target='#del' class='text-danger' title='删除'>" +
-                    "<i class='fa fa-remove'></i></a></td></tr>");
+                    "<i class='fa fa-remove'></i></a>" +
+                    "<td><a class='btn btn-secondary btn-sm import-source' href='javacript:void(0);' data-id='"+ id +"' title='导入原始数据'><i class='fa fa-sign-in fa-rotate-90'></i>导入</a></td>" +
+                    "<td><a class='btn btn-success btn-sm export' href='javacript:void(0);' data-toggle='modal' data-id='"+ id +"' data-target='#emport' title='导出内部数据'><i class='fa fa-sign-out fa-rotate-270'></i>导出</a> " +
+                    "<a class='btn btn-secondary btn-sm import-data' href='javacript:void(0);' data-id='"+ id +"' title='导入内部数据'><i class='fa fa-sign-in fa-rotate-90'></i>导入</a></td>" +
+                    "</tr>");
                 var newHref = "/rationRepository/ration?repository="+id;
                 $("#tempId td:first a").attr("href", newHref);
                 $("#tempId").attr("id", id);

+ 2 - 1
web/maintain/ration_repository/js/ration_assist.js

@@ -23,7 +23,8 @@ var rationAssistOprObj = {
     buildSheet: function(sheet) {
         var me = this;
         me.sheet = sheet;
-        me.libID = storageUtil.getSessionCache("RationGrp","repositoryID"); // 不可靠,有时取不到
+        //me.libID = storageUtil.getSessionCache("RationGrp","repositoryID"); // 不可靠,有时取不到
+        me.libID = pageOprObj.rationLibId; // 不可靠,有时取不到
         if (me.libID == undefined){me.libID = getQueryString('repository')};
 
         sheetCommonObj.initSheet(me.sheet, me.setting, 30);

+ 2 - 1
web/maintain/ration_repository/js/ration_coe.js

@@ -23,7 +23,8 @@ var rationCoeOprObj = {
     buildSheet: function(sheet) {
         var me = this;
         me.sheet = sheet;
-        me.libID = storageUtil.getSessionCache("RationGrp","repositoryID"); // 不可靠,有时取不到
+        //me.libID = storageUtil.getSessionCache("RationGrp","repositoryID"); // 不可靠,有时取不到
+        me.libID = pageOprObj.rationLibId; // 不可靠,有时取不到
         if (me.libID == undefined){me.libID = getQueryString('repository')};
         sheetCommonObj.initSheet(me.sheet, me.setting, 30);
         me.sheet.bind(GC.Spread.Sheets.Events.ClipboardPasting, me.onClipboardPasting);

+ 4 - 6
web/maintain/ration_repository/js/ration_glj.js

@@ -143,10 +143,10 @@ var rationGLJOprObj = {
         }
     },
     onClipboardPasted: function(e, info) {
-        var me = rationGLJOprObj, repId = storageUtil.getSessionCache("RationGrp","repositoryID");
+        var me = rationGLJOprObj, repId = pageOprObj.rationLibId;
         me.tempCacheArr = [];
         if (repId) {
-            let gljLibId = storageUtil.getSessionCache("gljLib", "repositoryID_" + repId);
+            let gljLibId = pageOprObj.gljLibId;
             if(gljLibId){
                 if (info.cellRange.col == 0) {
                     let cacheArr = me.cache["_GLJ_" + me.currentRationItem.ID];
@@ -257,15 +257,13 @@ var rationGLJOprObj = {
                         if (args.row < cacheArr.length && args.editingText !== cacheArr[args.row].code) {//更新
                             me.tempCacheArr.push({org: cacheArr[args.row], newCode: args.editingText.toString().trim()});
                             cacheArr.splice(args.row, 1);
-                            let rationRepId = storageUtil.getSessionCache("RationGrp", "repositoryID");
-                            let gljLibID = storageUtil.getSessionCache("gljLib", "repositoryID_" + rationRepId);
+                            let gljLibID = pageOprObj.gljLibId;
                             let codes = [];
                             codes.push(args.editingText.toString().trim());
                             me.addGljItems(codes, gljLibID, args);
                         }
                         else if (args.row >= cacheArr.length) {//新增
-                            let rationRepId = storageUtil.getSessionCache("RationGrp", "repositoryID");
-                            let gljLibID = storageUtil.getSessionCache("gljLib", "repositoryID_" + rationRepId);
+                            let gljLibID = pageOprObj.gljLibId;
                             if (gljLibID) {
                                 var codes = [];
                                 codes.push(args.editingText.toString().trim());

+ 3 - 0
web/users/js/main_tree_col.js

@@ -69,6 +69,9 @@ let MainTreeCol = {
         },
         forMarketPrice:function (node) {
             return MainTreeCol.readOnly.non_volumePrice(node);
+        },
+        forContain:function (node) {
+            return MainTreeCol.readOnly.non_ration(node)&&!MainTreeCol.readOnly.glj(node);
         }
     },
     cellType: {

+ 32 - 6
web/users/js/template.js

@@ -6,8 +6,25 @@ let TEMPLATE_BILLS_SETTING = {
     "emptyRows":1,
     "headRows":1,
     "headRowHeight":[35],
-    "treeCol": 0,
+    "treeCol": 1,
     "cols":[{
+        "width":80,
+        "readOnly":false,
+        "head":{
+            "titleNames":["类别"],
+            "spanCols":[1],
+            "spanRows":[1],
+            "vAlign":[1],
+            "hAlign":[1],
+            "font":["Arial"]
+        },
+        "data":{
+            "field":"type",
+            "vAlign":0,
+            "hAlign":1,
+            "font":"Arail",
+        }
+    }, {
         "width":200,
         "readOnly":false,
         "head":{
@@ -152,16 +169,23 @@ $(document).ready(function () {
             }
         });
     };
-    let getFixedFlagCellType = function () {
-        let billsFixedFlagData = JSON.parse(billsFixedFlagList);
+    let getNameValueComboCellType = function (datas) {
         let comboItems = [];
-        for (let data of billsFixedFlagData) {
+        for (let data of datas) {
             comboItems.push({text: data.name, value: data.value});
         }
         let combo = new GC.Spread.Sheets.CellTypes.ComboBox();
         combo.editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.value)
             .items(comboItems);
         return combo;
+    }
+    let getFixedFlagCellType = function () {
+        let billsFixedFlagData = JSON.parse(billsFixedFlagList);
+        return getNameValueComboCellType(billsFixedFlagData);
+    };
+    let getTypeFlagCellType = function () {
+        let billsTypeFlagData = JSON.parse(billsTypeFlagList);
+        return getNameValueComboCellType(billsTypeFlagData);
     };
     let setFee = function (data, fullField, value) {
         let fields = fullField.split('.'), valueField = data;
@@ -195,7 +219,9 @@ $(document).ready(function () {
     }
 
     for (col of TEMPLATE_BILLS_SETTING.cols) {
-        if (col.data.field === 'flagsIndex.fixed.flag' && TEMPLATE_BILLS_SETTING.cols.indexOf(col) !== TEMPLATE_BILLS_SETTING.treeCol) {
+        if (col.data.field === 'type' && TEMPLATE_BILLS_SETTING.cols.indexOf(col) !== TEMPLATE_BILLS_SETTING.treeCol) {
+            col.data.cellType = getTypeFlagCellType();
+        } else if (col.data.field === 'flagsIndex.fixed.flag' && TEMPLATE_BILLS_SETTING.cols.indexOf(col) !== TEMPLATE_BILLS_SETTING.treeCol) {
             col.data.cellType = getFixedFlagCellType();
         }
     }
@@ -210,7 +236,7 @@ $(document).ready(function () {
         var node = controller.tree.items[info.row];
         var fieldName = controller.setting.cols[info.col].data.field;
         var data = {type: 'update', data: {ID: node.getID()}};
-        if (/flagsIndex/.test(fieldName)) {
+       if (/flagsIndex/.test(fieldName)) {
             data.data.flags = [];
             let flagField = fieldName.split('.');
             data.data.flags.push({fieldName: flagField[1], flag: info.editingText});

+ 1 - 1
web/users/views/compilation/engineering.html

@@ -132,7 +132,7 @@
                                data-toggle="modal" data-target="" class="btn btn-primary btn-sm pull-right"
                                style="margin-right:5px">模板设置</a>
                         <input type="hidden" name="main_tree_col" value="<%= mainTreeCol %>">
-                        <div id="main-tree-col"></div>
+                        <div id="main-tree-col" style="height: 400px;"></div>
                     </div>
                 </div>
                 <input type="hidden" name="engineering" value="<%= engineeringInfo.id %>" id="engineering">

+ 5 - 5
web/users/views/compilation/template.html

@@ -25,7 +25,7 @@
         <div class="c-body">
             <legend>清单模板设置<a href="/compilation/valuation/<%= section %>/<%= valuationId %>" class="btn btn-default btn-sm pull-right">返回</a><a href="#" class="btn btn-primary btn-sm pull-right" style="margin-right:5px">保存</a></legend>
             <div class="row">
-                <div class="col-md-8">
+                <div class="col-md-9">
                     <div class="tools-btn btn-group align-top">
                         <a href="" class="btn btn-sm"><i class="fa fa-files-o" aria-hidden="true"></i> 复制</a>
                         <a href="" class="btn btn-sm"><i class="fa fa-scissors" aria-hidden="true"></i> 剪切</a>
@@ -37,13 +37,12 @@
                         <a href="javascript:void(0)" class="btn btn-sm" id="downMove"><i class="fa fa-arrow-down" aria-hidden="true"></i> 下移</a>
                         <a href="javascript:void(0)" class="btn btn-sm" id="upMove"><i class="fa fa-arrow-up" aria-hidden="true"></i> 上移</a>
                     </div>
-                    <div class="mb-qd-height" id="billsSpread">
+                    <div class="mb-qd-height" id="billsSpread" style="height: 500px;">
                     </div>
                 </div>
-                <div class="col-md-4">
-                    <select class="form-control"><option>定额</option></select>
+                <div class="col-md-3">
+                    <select class="form-control" style="display: none"><option>定额</option></select>
                     <div class="mb-de-height">
-
                     </div>
                 </div>
             </div>
@@ -53,6 +52,7 @@
 <script>
     let billsTemplateData = '<%- billsTemplateData %>';
     let billsFixedFlagList = '<%- billsFixedFlagList %>';
+    let billsTypeFlagList = '<%- billsTypeFlagList %>';
     let updateUrl = '/compilation/template/<%= section %>/<%= valuationId %>/<%= engineering %>/update';
 </script>
 <script type="text/javascript" src="/public/web/id_tree.js"></script>