Explorar o código

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

chenshilong %!s(int64=7) %!d(string=hai) anos
pai
achega
6cfcda9ca1

+ 4 - 0
config/gulpConfig.js

@@ -133,7 +133,11 @@ module.exports = {
         'public/web/common_ajax.js',
         'public/web/treeDataHelper.js',
         'public/web/QueryParam.js',
+        'public/web/id_tree.js',
+        'public/web/tree_sheet/tree_sheet_controller.js',
+        'public/web/tree_sheet/tree_sheet_helper.js',
         'web/building_saas/complementary_glj_lib/js/glj.js',
+        'web/building_saas/complementary_glj_lib/js/gljClassTree.js',
         'web/building_saas/complementary_glj_lib/js/gljComponent.js',
         'web/building_saas/complementary_glj_lib/js/components.js',
         'public/web/ztree_common.js',

+ 1 - 1
modules/main/facade/quantity_detail_facade.js

@@ -351,7 +351,7 @@ async function summateResults (query,detailList,decimal) {
         decimal = await decimal_facade.getBillsQuantityDecimal(query.projectID,bill.unit);
        // quantity = getQuantityByUnit(quantity,bill.unit);
         quantity = scMathUtil.roundTo(quantity, -decimal);
-        doc = {quantity:quantity,isFromDetail:1};
+        doc = {quantity:quantity,isFromDetail:1,quantityEXP:'GCLMXHJ'};
         await bill_model.update({'ID':query.billID,'projectID':query.projectID,deleteInfo: null},doc);
     }
     return doc

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

@@ -29,6 +29,7 @@ let billsSchema = new Schema({
     name: String,
     unit: String,
     quantity: String, // Decimal
+    quantityEXP:String,//工程量表达式
     feeRateID:Number,
     feeRate:String,
     isFromDetail:{type: Number,default:0},//1 true 0 false

+ 25 - 23
public/web/tree_sheet/tree_sheet_helper.js

@@ -47,29 +47,31 @@ var TREE_SHEET_HELPER = {
         return style;
     },
     loadSheetHeader: function (setting, sheet) {
-        if (setting.frozenCols) {
-            sheet.frozenColumnCount(setting.frozenCols);
-        }
-        sheet.setColumnCount(setting.cols.length);
-        sheet.setRowCount(setting.headRows, GC.Spread.Sheets.SheetArea.colHeader);
-        setting.headRowHeight.forEach(function (rowHeight, index) {
-            sheet.setRowHeight(index, rowHeight, GC.Spread.Sheets.SheetArea.colHeader);
-        });
-        setting.cols.forEach(function (col, index) {
-            var i, iRow = 0, cell;
-            for (i = 0; i < col.head.spanCols.length; i++) {
-                if (col.head.spanCols[i] !== 0) {
-                    cell = sheet.getCell(iRow, index, GC.Spread.Sheets.SheetArea.colHeader);
-                    cell.value(col.head.titleNames[i]).font(col.head.font).hAlign(col.head.hAlign[i]).vAlign(col.head.vAlign[i]).wordWrap(true);
-                }
-                if (col.head.spanCols[i] > 1 || col.head.spanRows[i] > 1) {
-                    sheet.addSpan(iRow, index, col.head.spanRows[i], col.head.spanCols[i], GC.Spread.Sheets.SheetArea.colHeader);
-                }
-                iRow += col.head.spanRows[i];
-            };
-            sheet.setColumnWidth(index, col.width);
-            sheet.setColumnVisible(index, col.visible && true);
-        });
+        this.massOperationSheet(sheet, function () {
+            if (setting.frozenCols) {
+                sheet.frozenColumnCount(setting.frozenCols);
+            }
+            sheet.setColumnCount(setting.cols.length);
+            sheet.setRowCount(setting.headRows, GC.Spread.Sheets.SheetArea.colHeader);
+            setting.headRowHeight.forEach(function (rowHeight, index) {
+                sheet.setRowHeight(index, rowHeight, GC.Spread.Sheets.SheetArea.colHeader);
+            });
+            setting.cols.forEach(function (col, index) {
+                var i, iRow = 0, cell;
+                for (i = 0; i < col.head.spanCols.length; i++) {
+                    if (col.head.spanCols[i] !== 0) {
+                        cell = sheet.getCell(iRow, index, GC.Spread.Sheets.SheetArea.colHeader);
+                        cell.value(col.head.titleNames[i]).font(col.head.font).hAlign(col.head.hAlign[i]).vAlign(col.head.vAlign[i]).wordWrap(true);
+                    }
+                    if (col.head.spanCols[i] > 1 || col.head.spanRows[i] > 1) {
+                        sheet.addSpan(iRow, index, col.head.spanRows[i], col.head.spanCols[i], GC.Spread.Sheets.SheetArea.colHeader);
+                    }
+                    iRow += col.head.spanRows[i];
+                };
+                sheet.setColumnWidth(index, col.width);
+                sheet.setColumnVisible(index, col.visible && true);
+            });
+        });      
     },
     protectdSheet: function (sheet) {
         var option = {

+ 15 - 11
web/building_saas/complementary_glj_lib/html/tools-gongliaoji.html

@@ -64,20 +64,20 @@
         </div>
         <div class="content">
             <div class="container-fluid">
-              <div class="row">
-                <div class="col-lg-2 p-0">
-                  <div class="print-list">
-                    <div class="form-list">
-                      <ul id="repositoryTree" class="ztree"></ul>
+                <div class="row">
+                    <div class="col-lg-2 p-0">
+                        <div class="print-list">
+                            <div class="form-list">
+                                <div id="gljClassSpread" style="height: 100%; width: 100%;"></div>
+                            </div>
+                        </div>
                     </div>
-                  </div>
-                </div>
-                <div id="GLJListSheet" class="col-lg-7 p-0">
+                    <div id="GLJListSheet" class="col-lg-7 p-0">
 
+                    </div>
+                    <div id="gljComponentSheet" class="col-lg-3 p-0">
+                    </div>
                 </div>
-                <div id="gljComponentSheet" class="col-lg-3 p-0">
-                </div>
-              </div>
             </div>
         </div>
       </div>
@@ -194,7 +194,11 @@
     <script type="text/javascript" src="/public/web/common_ajax.js"></script>
     <script type="text/javascript" src="/public/web/treeDataHelper.js"></script>
     <script type="text/javascript" src="/public/web/QueryParam.js"></script>
+    <script type="text/javascript" src="/public/web/id_tree.js"></script>
+    <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="/web/building_saas/complementary_glj_lib/js/glj.js"></script>
+    <script type="text/javascript" src="/web/building_saas/complementary_glj_lib/js/gljClassTree.js"></script>
     <script type="text/javascript" src="/web/building_saas/complementary_glj_lib/js/gljComponent.js"></script>
     <script type="text/javascript" src="/web/building_saas/complementary_glj_lib/js/components.js"></script>
     <script type="text/javascript" src="/public/web/ztree_common.js"></script>

+ 29 - 4
web/building_saas/complementary_glj_lib/js/glj.js

@@ -18,8 +18,11 @@ let pageOprObj = {
         //repositoryGljObj.getRationGljIds(gljLibId);
         repositoryGljObj.getGljDistType(function () {
             repositoryGljObj.currentRepositoryId = me.stdGljLibId;
-            repositoryGljObj.getGljTree(stdGljLibId, function () {
+           /* repositoryGljObj.getGljTree(stdGljLibId, function () {
                 repositoryGljObj.getGljItems(me.stdGljLibId, me.userId, me.compilationId);
+            });*/
+            repositoryGljObj.getGljItems(me.stdGljLibId, me.userId, me.compilationId, function () {
+                gljClassTreeObj.getGljClassTree(stdGljLibId);
             });
         });
     }
@@ -116,7 +119,7 @@ let repositoryGljObj = {
             }
         });
     },
-    getGljItems: function(stdGljLibId, userId, compilationId) {
+    getGljItems: function(stdGljLibId, userId, compilationId, callback) {
         let me = this;
         CommonAjax.post('complementartGlj/api/getGljItems', {stdGljLibId: stdGljLibId, userId: userId, compilationId: compilationId}, function (rstData) {
             me.stdGljList = rstData.stdGljs;
@@ -125,12 +128,15 @@ let repositoryGljObj = {
             me.sortGlj(me.stdGljList);
             me.setProp('isStd', true, me.stdGljList);
             me.sortGlj(me.complementaryGljList);
-            let rootNode = me.treeObj.getNodes()[0];
+            if(callback){
+                callback();
+            }
+         /*   let rootNode = me.treeObj.getNodes()[0];
             if(rootNode && rootNode.isParent && rootNode.isFirstNode){
                 componentOprObj.rootNode = rootNode;
                 me.treeObj.selectNode(rootNode);
                 gljTypeTreeOprObj.onClick(null, 'repositoryTree', rootNode);
-            }
+            }*/
         });
     },
     showGljItems: function(data, type) {
@@ -1048,6 +1054,25 @@ let repositoryGljObj = {
         }
         //allgljs
     },
+    updateParentNodeIds: function (nodes, caller) {
+        let private_build_parentNodeIds = function(pNodeId, nodesArr){
+            let rst = [];
+            for (let i = 0; i < nodesArr.length; i++) {
+                if (nodesArr[i].children.length > 0) {
+                    rst = rst.concat(private_build_parentNodeIds(nodesArr[i].data.ID, nodesArr[i].children));
+                } else {
+                    rst.push(nodesArr[i].data.ID);
+                }
+            }
+            if (pNodeId && rst.length > 0) {
+                caller.parentNodeIds["_pNodeId_" + pNodeId] = rst;
+            }
+            return rst;
+        };
+        if (caller.parentNodeIds) {
+            private_build_parentNodeIds(null, nodes);
+        }
+    },
     setProp: function (prop, value, gljList) {
         let me = this;
         for(let i = 0, len = gljList.length; i < len; i++){

+ 180 - 0
web/building_saas/complementary_glj_lib/js/gljClassTree.js

@@ -0,0 +1,180 @@
+/**
+ * Created by Zhong on 2018/1/16.
+ */
+let gljClassTreeObj = {
+    cache: null,//ref to tree.items
+    tree: null,
+    controller: null,
+    workBook: null,
+    sheet: null,
+    setting: {
+        sheet: {
+            cols:[
+                {
+                    head: {
+                        titleNames: ['名称'],
+                        spanCols: [1],
+                        spanRows: [2],
+                        vAlign: [1, 1],
+                        hAlign: [1, 1],
+                        font: 'Arial'
+                    },
+                    data: {
+                        field: 'Name',
+                        vAlign: 1,
+                        hAlign: 0,
+                        font: 'Arial'
+                    },
+                    width: 400
+                }
+            ],
+            headRows: 1,
+            headRowHeight: [47],
+            emptyRows: 0,
+            treeCol: 0
+        },
+        tree: {
+            id: 'ID',
+            pid: 'ParentID',
+            nid: 'NextSiblingID',
+            rootId: -1
+        },
+        options: {
+            tabStripVisible:  false,
+            allowCopyPasteExcelStyle : false,
+            allowExtendPasteRange: false,
+            allowUserDragDrop : false,
+            allowUserDragFill: false,
+            scrollbarMaxAlign : true
+        }
+    },
+
+    isDef: function (v) {
+        return v !== undefined && v !== null;
+    },
+    isFunc: function (v) {
+        return this.isDef(v) && typeof v === 'function';
+    },
+    //sheet things
+    setOptions: function (workbook, opts) {
+        for(let opt in opts){
+            workbook.options[opt] = opts[opt];
+        }
+    },
+
+    renderFunc: function (sheet, func) {
+        sheet.suspendPaint();
+        sheet.suspendEvent();
+        if(this.isFunc(func)){
+            func();
+        }
+        sheet.resumePaint();
+        sheet.resumeEvent();
+    },
+
+    buildSheet: function () {
+        if(!this.isDef(this.workBook)){
+            this.workBook = new GC.Spread.Sheets.Workbook($('#gljClassSpread')[0], {sheetCount: 1});
+            this.sheet = this.workBook.getActiveSheet();
+            this.setOptions(this.workBook, this.setting.options);
+            this.sheet.options.clipBoardOptions = GC.Spread.Sheets.ClipboardPasteOptions.values;
+            this.bindEvents(this.sheet);
+        }
+    },
+
+    bindEvents: function (sheet) {
+        let me = gljClassTreeObj;
+        const Events = GC.Spread.Sheets.Events;
+        sheet.bind(Events.SelectionChanging, me.onSelectionChanged);
+        sheet.bind(Events.EditStarting, me.onEditStarting);
+        sheet.bind(Events.ClipboardPasting, me.onClipboardPasting);
+    },
+
+    onSelectionChanged: function (sender, info) {
+        let me = gljClassTreeObj;
+        if(info.oldSelections.length === 0 && info.newSelections.length > 0 || info.oldSelections[0].row !== info.newSelections[0].row){
+            let row = info.newSelections[0].row;
+            let node = me.cache[row];
+            me.initSelection(node);
+        }
+    },
+
+    onEditStarting: function (sender, args) {
+        args.cancel = true;
+    },
+
+    onClipboardPasting: function (sender, info) {
+        info.cancel = true;
+    },
+
+    getGljClassTree: function (gljLibId, callback) {
+        let me = gljClassTreeObj;
+        let re = repositoryGljObj;
+        let url = 'complementartGlj/api/getGljTree';
+        let postData = {gljLibId: gljLibId};
+        let sucFunc = function (rstData) {
+            zTreeHelper.createTree(rstData, componentSetting, "componentTree", componentOprObj);
+            let rootNode = componentOprObj.treeObj.getNodes()[0];
+            if(rootNode && rootNode.isParent && rootNode.isFirstNode){
+                componentOprObj.rootNode = rootNode;
+            }
+            if (rstData && rstData.length > 0) {
+                me.gljCurTypeId = rstData[0].ID;
+            }
+            //init
+            me.buildSheet();
+            me.initTree(rstData);
+            me.cache = me.tree.items;
+            re.updateParentNodeIds(me.cache, re);
+            me.initController(me.tree, me.sheet, me.setting.sheet);
+            me.controller.showTreeData();
+            me.sheet.setFormatter(-1, 0, '@');
+            me.initSelection(me.tree.selected);
+            if(callback){
+                callback();
+            }
+        };
+        let errFunc = function () {
+
+        };
+        CommonAjax.post(url, postData, sucFunc, errFunc);
+    },
+
+    initTree: function (datas) {
+        this.tree = idTree.createNew(this.setting.tree);
+        this.tree.loadDatas(datas);
+        this.tree.selected = this.tree.items.length > 0 ? this.tree.items[0] : null;
+    },
+
+    initController: function (tree, sheet, setting) {
+        this.controller = TREE_SHEET_CONTROLLER.createNew(tree, sheet, setting);
+    },
+
+    gljClassTreeAjax: function (postData, scFunc, errFunc) {
+        CommonAjax.post('api/updateNodes', {updateData: postData, lastOpr: userAccount}, scFunc, errFunc);
+    },
+    //模仿默认点击
+    initSelection: function (node) {
+        let me = this,
+            re = repositoryGljObj,
+            that = gljComponentOprObj;
+        if(!re.isDef(node)){
+            return;
+        }
+
+        let gljTypeId = node.data.ID;
+        re.gljCurTypeId = node.data.ID;
+        re.addGljObj = null;
+        sheetOpr.cleanSheet(that.workBook.getSheet(0), that.setting, 5);
+        if (re.parentNodeIds["_pNodeId_" + gljTypeId]) {
+            re.currentOprParent = 1;
+            re.currentCache = re.getParentCache(re.parentNodeIds["_pNodeId_" + gljTypeId]);
+            re.workBook.getSheet(0).setRowCount(re.currentCache.length);
+        } else {
+            re.currentOprParent = 0;
+            re.currentCache = re.getCache();
+        }
+        re.showGljItems(re.complementaryGljList, gljTypeId);
+        me.workBook.focus(true);
+    }
+}

+ 40 - 3
web/building_saas/glj/js/composition.js

@@ -12,8 +12,10 @@ $(document).ready(function() {
 
     // 切换tab触发refresh
     $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
+        if($(e.target).data('name')==undefined){
+            return;
+        }
         currentTag = $(e.target).data('name');
-
         // 获取工料机当前选中的行号
         let projectGLJId = 0;
         if (currentTag === "mix-ratio") {
@@ -68,6 +70,7 @@ function compositionSuccess(info) {
     let parentData = jsonData[row];
     let ratioData = _.find(parentData.ratio_data,{"id":info.id});
     let con_key = gljOprObj.getIndex(ratioData,gljKeyArray);
+    let updateNodes=[];
     for(let i=0;i< jsonData.length;i++){
         let tem_key = gljOprObj.getIndex(jsonData[i],gljKeyArray);
         if(con_key == tem_key){
@@ -76,11 +79,45 @@ function compositionSuccess(info) {
             projectGLJSheet.setCellByField('quantity', info.change, true,i);
         }
     }
-
+    //更新ratio 数据
+    ratioData[info.field]=info.newValue;
+    //更新组成物map里的数据
+    let p_key = gljOprObj.getIndex(parentData,gljKeyArray);
+    let m_list = projectObj.project.projectGLJ.datas.mixRatioMap[p_key];
+    let m_ratioData = _.find(m_list,{"id":info.id});
+    if(m_ratioData){
+        m_ratioData[info.field]=info.newValue;
+    }
     // 设置父级3个价格
+    parentData.unit_price.market_price =  info.parentMarketPrice;
+    parentData.unit_price.base_price =  info.parentBasePrice;
+    //更新表格
     projectGLJSheet.setCellByField('unit_price.market_price', info.parentMarketPrice, false);
-    projectGLJSheet.setCellByField('unit_price.base_price', info.parentBasePrice, false);
+    projectGLJSheet.setCellByField('base_price', info.parentBasePrice, false);
     projectGLJSheet.setCellByField('adjust_price', info.parentMarketPrice, false);
     // 更新组成物缓存
     projectObj.project.composition.loadData();
+    //选查找使用了父项目工料机的定额工料机
+    let ration_gljs = _.filter(projectObj.project.ration_glj.datas,{'projectGLJID':parentData.id});
+    let nodes = projectObj.project.mainTree.nodes;
+    let prefix = projectObj.project.mainTree.prefix;
+    for(let rg of ration_gljs){
+        let node = nodes[prefix+rg.rationID];
+        if(node){
+            updateNodes.push(node);
+        }
+    }
+    //或者是使用了父项目工料机的工料机类型的定额
+    let rations = _.filter(projectObj.project.Ration.datas,{'type':3,'projectGLJID':parentData.id});
+    for(let r of rations){
+        let r_node = nodes[prefix+r.ID];
+        if(r_node){
+            r_node.data.marketUnitFee=info.parentMarketPrice;
+            updateNodes.push(r_node);
+        }
+    }
+    if(updateNodes.length>0){
+        projectObj.project.calcProgram.calcRationsAndSave(updateNodes);
+    }
+    gljOprObj.refreshView();
 }

+ 1 - 0
web/building_saas/glj/js/composition_spread.js

@@ -229,6 +229,7 @@ CompositionSpread.prototype.updateConsumption = function(info, callback) {
                 alert('更改数据失败!');
             } else {
                 info.id = id;
+                info.field = field;
                 info.parentMarketPrice = parentMarketPrice;
                 info.parentBasePrice = parentBasePrice;
                 info.change = info.newValue - info.oldValue;

+ 7 - 0
web/building_saas/glj/js/project_glj.js

@@ -27,6 +27,10 @@ let otherFileData = {};
 let currentTag = '';
 let isChanging = false;
 let initPage = false;
+let projectGLJView={
+    currentTag:''
+}
+
 $(document).ready(function () {
     $('#tab_gongliaoji').on('show.bs.tab', function (e) {
         $(e.relatedTarget.hash).removeClass('active');
@@ -287,6 +291,9 @@ function spreadInit() {
 
     // 切换tab触发refresh
     $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
+        if($(e.target).data('name')==undefined){
+            return;
+        }
         currentTag = $(e.target).data('name');
         if (currentTag === 'ration') {
             projectGLJSheet.filterData('unit_price.type', []);

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

@@ -520,6 +520,9 @@ var Bills = {
                     project.ration_glj.updataOrdelete(selected.source);
                 }
                 if(parent){
+                    if(parent.children.length==0&&parent.data.feesIndex&&parent.data.feesIndex.common){
+                        parent.data.feesIndex.common.unitFee = 0;
+                    }
                     projectObj.converseCalculateBills(parent);
                 }else { //删除的是大项费用要重新计算工程造价节点
                     project.Bills.calcEngineeringCostNode(controller);

+ 6 - 3
web/building_saas/main/js/models/quantity_detail.js

@@ -164,7 +164,7 @@ var quantity_detail = {
                 let newNode = nodes[0];
                 if(newNode.sourceType === project.Bills.getSourceType()){
                     console.log(newNode.data.quantity);
-                    this.updateBillQuantity(newNode.data.quantity,newNode);
+                    this.updateBillQuantity(newNode.data.quantity,newNode,newNode.data.quantityEXP);
                 }else {//更新定额所使用的值要用还没转换前的
                     this.updateRationQuantity(node.data.r_quantity,newNode,newNode.data.quantityEXP);//to do 加上工程量表达式和含量更新
                 }
@@ -534,7 +534,7 @@ var quantity_detail = {
         quantity_detail.prototype.editMainTreeNodeQuantity=function (value,node,fieldName) {
             var me = this;
             if(isNaN(value)){
-                alert("当前输入的数据类型不正确,请重新输入");
+                alert("当前输入的数据类型不正确,请重新输入");
                 projectObj.mainController.refreshTreeNode([node]);
             }else {
                 value=value?value:0;
@@ -553,9 +553,11 @@ var quantity_detail = {
                 },100);
             }
         };
-        quantity_detail.prototype.updateBillQuantity=function (value,node) {
+        quantity_detail.prototype.updateBillQuantity=function (value,node,quantityEXP) {
+            node.data.quantityEXP = quantityEXP?quantityEXP:value;
             value = scMathUtil.roundForObj(value,getDecimal("quantity",node));
             node.data.quantity = value+"";
+            console.log(value);
             let needUpdateChildren = [];//需更新的子定额
             let gljNodes=[];//当定额工程量改变时需刷新的子工料机
             if(node.children.length>0){//如果有子项则
@@ -584,6 +586,7 @@ var quantity_detail = {
                 }
             }
             if(needUpdateChildren.length>0){
+                node.changed = true;//本身发生了改变,需要存储。
                 project.calcProgram.calcRationsAndSave(needUpdateChildren);
             }else {
                 node.changed = true;

+ 1 - 0
web/building_saas/main/js/models/ration.js

@@ -349,6 +349,7 @@ var Ration = {
             if (optionsOprObj.getOption(optionsOprObj.optionsTypes.GENERALOPTS, 'rationQuanACToBillsQuan')) {
                 let billsNode = this.project.Bills.tree.findNode(ration[this.project.masterField.ration]);
                 let billsQuantity = billsNode.data.quantity ? billsNode.data.quantity : 0;
+                billsQuantity=scMathUtil.roundForObj(billsQuantity,quantity_decimal);
                 ration.contain = 1;
                 ration.quantityEXP="QDL";
                 if (optionsOprObj.getOption(optionsOprObj.optionsTypes.GENERALOPTS, 'rationQuanACToRationUnit')) {

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

@@ -146,7 +146,7 @@ var ration_glj = {
                             }
                         }
                         nextNodeID = nextNodeID ? nextNodeID : parentNode.tree.rootID();
-                        let newNode = projectObj.project.mainTree.insert(parentNode.getID(), nextNodeID);
+                        let newNode = projectObj.project.mainTree.insert(parentNode.getID(), nextNodeID,data.ID);
                         newNode.source = data;
                         newNode.sourceType = this.getSourceType();
                         newNode.data = data;

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

@@ -758,9 +758,15 @@ var gljOprObj = {
         var ration_glj = projectObj.project.ration_glj;
         node = node ? node : projectObj.project.mainTree.selected;
         if (node.sourceType == ModuleNames.ration) {
-            let ration = node.data;
-            gljList = this.filterGljByRation(ration, ration_glj.datas);
-            this.showInSheet(gljList);
+            if(node.data.type==rationType.gljRation){
+                this.showMixRatio(node);
+            }else {
+                let ration = node.data;
+                gljList = this.filterGljByRation(ration, ration_glj.datas);
+                this.showInSheet(gljList);
+            }
+        }else if(node.sourceType == ModuleNames.ration_glj){
+            this.showMixRatio(node);
         }
     },
     showRationGLJSheetData: function (init) {

+ 45 - 37
web/building_saas/main/js/views/project_view.js

@@ -63,42 +63,10 @@ var projectObj = {
                 return false;
             }
         };
-        let canDelete = function (node,m_selection) {
-            if (node) {
-                if (node.sourceType === that.project.Bills.getSourceType()) {
-                    if(node.data.type == billType.DXFY&&node.data.isAdd!=1){
-                        return false;
-                    }
-                }
-                if(m_selection!=true&&node.sourceType === that.project.ration_glj.getSourceType()){//多选的时候不做这一项判断
-                    return false;
-                }
-                return true;
-            } else {
-                return false;
-            }
-        };
-        let canDelete_m = function (selection) {
-            for(let i =0;i<selection.rowCount;i++){
-                if(tree.items[selection.row+i]==undefined||tree.items[selection.row+i]==null){
-                    return false;
-                }
-                if(i==0&&tree.items[selection.row].sourceType === that.project.ration_glj.getSourceType()){
-                    return false
-                }
-                if(canDelete(tree.items[selection.row+i],true)==false){
-                    return false
-                }
-            }
-            return true
-        };
 
-        let selections = projectObj.mainSpread.getActiveSheet().getSelections();
-        if(selections[0].rowCount==1){//选中单行
-            setButtonValid(canDelete(selected), $('#delete'));
-        }else {
-            setButtonValid(canDelete_m(selections[0]), $('#delete'));
-        }
+
+
+        setButtonValid(ifCanDelete(), $('#delete'));
         setButtonValid(canUpLevel(selected), $('#upLevel'));
         setButtonValid(canDownLevel(selected), $('#downLevel'));
         setButtonValid(selected && (selected.depth() > 0) && selected.canUpMove(), $('#upMove'));
@@ -703,8 +671,7 @@ var projectObj = {
                     name: '删除',
                     icon: 'fa-remove',
                     disabled: function () {
-                        var selected = project.mainTree.selected;
-                        return !selected;
+                        return !ifCanDelete();
                     },
                     callback: function () {
                         $("#delete_row").modal({show:true});//弹出删除提示框;
@@ -1147,3 +1114,44 @@ function isSingleSelect() {//是否选中造价书中的单行
     }
     return false;
 }
+function ifCanDelete() {
+    let selections = projectObj.mainSpread.getActiveSheet().getSelections();
+    let tree = projectObj.project.mainTree;
+    let selected = projectObj.project.mainTree.selected;
+    if(selections[0].rowCount==1){//选中单行
+        return canDelete(selected);
+    }else {
+       return canDelete_m(selections[0]);
+    }
+
+    function canDelete(node,m_selection) {
+        if (node) {
+            if (node.sourceType === projectObj.project.Bills.getSourceType()) {
+                if(node.data.type == billType.DXFY&&node.data.isAdd!=1){
+                    return false;
+                }
+            }
+            if(m_selection!=true&&node.sourceType === projectObj.project.ration_glj.getSourceType()){//多选的时候不做这一项判断
+                return false;
+            }
+            return true;
+        } else {
+            return false;
+        }
+    };
+
+    function canDelete_m(selection) {
+        for(let i =0;i<selection.rowCount;i++){
+            if(tree.items[selection.row+i]==undefined||tree.items[selection.row+i]==null){
+                return false;
+            }
+            if(i==0&&tree.items[selection.row].sourceType === projectObj.project.ration_glj.getSourceType()){
+                return false
+            }
+            if(canDelete(tree.items[selection.row+i],true)==false){
+                return false
+            }
+        }
+        return true
+    };
+}

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

@@ -299,6 +299,7 @@ $('#rationSearch').click(function () {
         resultObj.append(getResultHtml(result));
         $('a', resultObj).click(function () {
             resultObj.hide();
+            $(".main-data-side-d").height($(window).height() - $(".header").height() - $(".toolsbar").height() -  $(".tools-bar-height-d").height() - 202);
             $(".main-data-side-search", resultObj).height(0);
         });
         resultObj.show();