Browse Source

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

chenshilong 6 years ago
parent
commit
9fba93b969
34 changed files with 653 additions and 273 deletions
  1. 1 1
      modules/all_models/compleGlj_glj.js
  2. 11 0
      modules/complementary_glj_lib/controllers/gljController.js
  3. 9 1
      modules/complementary_glj_lib/models/gljModel.js
  4. 1 0
      modules/complementary_glj_lib/routes/routes.js
  5. 11 12
      modules/ration_glj/facade/ration_glj_facade.js
  6. 1 1
      public/web/sheet/sheet_common.js
  7. 8 0
      public/web/slideResize.js
  8. 2 2
      web/building_saas/complementary_glj_lib/html/tools-gongliaoji.html
  9. 34 10
      web/building_saas/complementary_glj_lib/js/components.js
  10. 44 33
      web/building_saas/complementary_glj_lib/js/glj.js
  11. 11 6
      web/building_saas/complementary_glj_lib/js/gljClassTree.js
  12. 13 6
      web/building_saas/complementary_glj_lib/js/gljComponent.js
  13. 4 2
      web/building_saas/complementary_glj_lib/js/sheetOpr.js
  14. 5 4
      web/building_saas/complementary_ration_lib/html/dinge.html
  15. 32 11
      web/building_saas/complementary_ration_lib/js/gljSelect.js
  16. 1 5
      web/building_saas/complementary_ration_lib/js/ration_glj.js
  17. 14 23
      web/building_saas/complementary_ration_lib/js/section_tree.js
  18. 8 1
      web/building_saas/css/custom.css
  19. 62 8
      web/building_saas/css/main.css
  20. 1 2
      web/building_saas/js/global.js
  21. 74 36
      web/building_saas/main/html/main.html
  22. 5 5
      web/building_saas/main/js/controllers/material_controller.js
  23. 17 15
      web/building_saas/main/js/views/billsElf.js
  24. 36 5
      web/building_saas/main/js/views/glj_view.js
  25. 4 1
      web/building_saas/main/js/views/glj_view_contextMenu.js
  26. 16 2
      web/building_saas/main/js/views/mbzm_view.js
  27. 4 1
      web/building_saas/main/js/views/project_info.js
  28. 59 5
      web/building_saas/main/js/views/project_view.js
  29. 7 2
      web/building_saas/main/js/views/side_tools.js
  30. 4 5
      web/building_saas/main/js/views/std_billsGuidance_lib.js
  31. 18 11
      web/building_saas/main/js/views/std_ration_lib.js
  32. 95 3
      web/building_saas/main/js/views/sub_view.js
  33. 41 28
      web/building_saas/main/js/views/zmhs_view.js
  34. 0 26
      web/building_saas/pm/js/pm_newMain.js

+ 1 - 1
modules/all_models/compleGlj_glj.js

@@ -24,7 +24,7 @@ const comple_glj = new Schema({
     specs: String,
     unit: String,
     basePrice: String,
-    gljClass: Number,
+    gljClass: String,
     gljType: Number,
     model: Number,
     shortName: String,

+ 11 - 0
modules/complementary_glj_lib/controllers/gljController.js

@@ -61,6 +61,17 @@ class GljController extends BaseController{
             callback(req,res,err, 'Get Tree', data)
         });
     }
+    //获取标准分类树和补充分类树
+    async getMixedTree(req, res){
+        try {
+            let data = JSON.parse(req.body.data);
+            let treeData = await gljDao.getMixedTree(data.gljLibId, req.session.sessionUser.id, req.session.sessionCompilation._id);
+            callback(req, res, 0, 'success', treeData);
+        } catch (err) {
+            console.log(err);
+            callback(req, res, 1, err, null);
+        }
+    }
 
     createNewGljTypeNode(req, res) {
         let repId = req.body.repositoryId;

+ 9 - 1
modules/complementary_glj_lib/models/gljModel.js

@@ -5,13 +5,14 @@ const mongoose = require('mongoose');
 const complementaryGljModel = mongoose.model('complementary_glj_lib');
 const stdGljModel = mongoose.model('std_glj_lib_gljList');
 const gljClassModel = mongoose.model('std_glj_lib_gljClass');
+const compleClassModel = mongoose.model('complementary_glj_section');
 import counter from "../../../public/counter/counter";
 import async from "async";
 import STDGLJLibGLJListModel from "../../common/std/std_glj_lib_glj_list_model";
 
 class GljDao {
     getGljTypes (gljLibId, callback){
-        gljClassModel.find({"repositoryId": gljLibId, "$or": [{"isDeleted": null}, {"isDeleted": false} ]},function(err,data){
+        gljClassModel.find({"repositoryId": gljLibId},function(err,data){
             if(data.length) {
                 callback(0,data);
             }
@@ -335,6 +336,13 @@ class GljDao {
 
         return result;
     }
+
+    async getMixedTree(gljLibId, userId, compilationId){
+        let rst = {std: [], comple: []};
+        rst.std = await gljClassModel.find({repositoryId: gljLibId});
+        rst.comple = await compleClassModel.find({userId: userId, compilationId: compilationId});
+        return rst;
+    }
 }
 
 export default GljDao;

+ 1 - 0
modules/complementary_glj_lib/routes/routes.js

@@ -26,6 +26,7 @@ module.exports = function (app) {
     router.post("/updateRationBasePrc",compleRationController.init, compleRationController.updateRationBasePrc);//更新定额单价
     //router.post("/getGljItemsByIds", gljController.init, gljController.getGljItemsByIds);
     //router.post("/getGljItemsByCodes", gljController.init, gljController.getGljItemsByCodes);
+    router.post('/getMixedTree', gljController.init, gljController.getMixedTree);
 
     app.use("/complementartGlj/api", router);
 

+ 11 - 12
modules/ration_glj/facade/ration_glj_facade.js

@@ -27,6 +27,7 @@ const complementaryGljModel = mongoose.model('complementary_glj_lib');
 const stdGljModel = mongoose.model('std_glj_lib_gljList');
 const gljClassModel = mongoose.model('std_glj_lib_gljClass');
 const projectDao = require('../../pm/models/project_model').project;
+const compleClassModel = mongoose.model('complementary_glj_section');
 
 module.exports = {
     save: save,
@@ -544,15 +545,13 @@ function getGLJData(info, callback) {
     let gljDistTypeCache = stdgljutil.getStdGljTypeCacheObj().toArray();
     datas.distTypeTree = gljDistTypeCache;
     async_n.parallel([
-        function (cb) {
-            gljDao.getGljTypes(info.gljLibId, function (err, data) {
-                if (err) {
-                    cb(err);
-                } else {
-                    datas.treeData = data;
-                    cb(null);
-                }
-            })
+        async function (cb) {
+            try {
+                datas.treeData = await gljDao.getMixedTree(info.gljLibId, info.userID, info.compilationId);
+                cb(null);
+            } catch (err) {
+                cb(err);
+            }
         },
         function (cb) {
             gljDao.getGljItems(info.gljLibId, info.userID, info.compilationId, function (err, data) {
@@ -804,9 +803,9 @@ async function getGLJClass(info, data) {
         return result
     }
     //查找工料机类型树
-    let items = await gljClassModel.find({
-        "repositoryId": info.gljLibId,
-        "$or": [{"isDeleted": null}, {"isDeleted": false}]
+    let items = await compleClassModel.find({
+        userId: info.userID,
+        compilationId: info.compilationId
     });
     result.items = items;
     return result;

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

@@ -319,7 +319,7 @@ var sheetCommonObj = {
                 $editor.css("position", "fixed");
                 $editor.css("background", "white");
                 //$editor.css("width", cellRect.width); 2018-11-15 改成固定列宽
-                $editor.css("width", 140);
+                $editor.css("width", 160);
                 $editor.attr("gcUIElement", "gcEditingInput");
                 if(htmlGenerator) htmlGenerator(context,cellRect,$editor);
             }

+ 8 - 0
public/web/slideResize.js

@@ -27,10 +27,18 @@ const SlideResize = (function() {
         let resizeParentWidth = resize.parent().width();
         let resizeDecimalWidth = fixedWidth / resizeParentWidth,
             otherDecimalWidth = 1 - resizeDecimalWidth;
+        if(bros.length > 2){ //当同层有多个子元素时,other 的宽度要排除其余的宽度
+            for(let i = 2; i< bros.length;i++){
+                otherDecimalWidth = otherDecimalWidth - $(bros[i]).width()/resizeParentWidth
+            }
+        }
+
         let resizePercentWidth = resizeDecimalWidth * 100 + '%',
             otherPercentWidth = otherDecimalWidth * 100 + '%';
         resize.css('width', resizePercentWidth);
         other.css('width', otherPercentWidth);
+
+
     }
 
     let mouseMoveCount = 0;

+ 2 - 2
web/building_saas/complementary_glj_lib/html/tools-gongliaoji.html

@@ -67,7 +67,7 @@
                 </div>
                 <div class="modal-body" style="padding-left: 0; padding-right: 3px; margin-left: 0;">
                         <div style="width: 36%; float: left;">
-                            <input type="radio" class="glj-radio" name="glj" value="allGljs">所有&nbsp;&nbsp;
+                            <!--<input type="radio" class="glj-radio" name="glj" value="allGljs">所有&nbsp;-->&nbsp;
                             <input type="radio" class="glj-radio" name="glj" value="stdGljs">标准&nbsp;&nbsp;
                             <input type="radio" class="glj-radio" name="glj" value="complementaryGljs">补充&nbsp;&nbsp;
                             <div  class="modal-auto-height" id="componentTreeDiv" style="overflow: hidden">
@@ -98,8 +98,8 @@
                         </div>
                 </div>
                 <div class="modal-footer">
-                    <button type="button" id="componentsCacnel" class="btn btn-secondary" data-dismiss="modal">取消</button>
                     <a href="javascript:void(0);" id="componentsConf" class="btn btn-primary">确定</a>
+                    <button type="button" id="componentsCacnel" class="btn btn-secondary" data-dismiss="modal">取消</button>
                 </div>
             </div>
         </div>

+ 34 - 10
web/building_saas/complementary_glj_lib/js/components.js

@@ -7,6 +7,7 @@
 let componentOprObj = {
     treeObj:null,
     rootNode: null,//分类树根节点
+    parentNodeIds: {},
     radiosSelected: null,//allGljs, stdGljs, complementaryGljs
     workBook: null,
     selectedList: [],//选中的组成物
@@ -98,6 +99,24 @@ let componentOprObj = {
                 }
             }
     },
+    //初始化分类树
+    //@param {String}type(标准或补充) {Array}treeData(树数据)
+    initClassTree: function (type, treeData) {
+        let me = this;
+        if (me.treeObj) {
+            me.treeObj.destroy();
+            me.parentNodeIds = {};
+        }
+        zTreeHelper.createTree(treeData, componentSetting, "componentTree", componentOprObj);
+        let rootNode = componentOprObj.treeObj.getNodes()[0];
+        if(rootNode && rootNode.isParent && rootNode.isFirstNode){
+            componentOprObj.rootNode = rootNode;
+        }
+        if(me.rootNode){
+            me.treeObj.selectNode(me.rootNode);
+            componentTypeTreeOprObj.onClick(null, 'componentTree', me.rootNode);
+        }
+    },
     //初始默认radio
     initRadio: function () {
         let that = repositoryGljObj, me = componentOprObj;
@@ -108,13 +127,13 @@ let componentOprObj = {
         if(typeof $("input[name='glj']:checked")[0] !== 'undefined'){
             $("input[name='glj']:checked")[0].checked = false;
         }
-        $("input[value = 'allGljs']")[0].checked = true;
-        me.radiosSelected = 'allGljs';
+        $("input[value = 'stdGljs']")[0].checked = true;
+        me.radiosSelected = 'stdGljs';
         //初始为所有工料机,机械类型可添加机械组成物,混凝土,砂浆、配合比可添加普通材料
         me.showGljList = [];
-        if(me.radiosSelected === 'allGljs'){
+        if(me.radiosSelected === 'stdGljs'){
             me.setShowGljList(that.stdGljList, true);
-            me.setShowGljList(that.complementaryGljList, true);
+            //me.setShowGljList(that.complementaryGljList, true);
             that.sortGlj(me.showGljList);
         }
     },
@@ -147,8 +166,8 @@ let componentOprObj = {
         me.showGljItems(me.showGljList, me.gljCurTypeId);
         //切换radio后更新cache
         if (me.currentOprParent = 1) {
-            if(re.parentNodeIds["_pNodeId_" + me.gljCurTypeId]){
-                me.currentCache = me.getParentCache(re.parentNodeIds["_pNodeId_" + me.gljCurTypeId]);
+            if(me.parentNodeIds["_pNodeId_" + me.gljCurTypeId]){
+                me.currentCache = me.getParentCache(me.parentNodeIds["_pNodeId_" + me.gljCurTypeId]);
             }
             else{
                 me.currentCache = [];
@@ -159,8 +178,13 @@ let componentOprObj = {
     },
     //监听radios选择事件
     radiosChange: function () {
-        let me = componentOprObj, re = repositoryGljObj;
+        let me = componentOprObj, gc = gljClassTreeObj;
         $('.glj-radio').change(function () {
+            if($(this).val() === 'stdGljs') {
+                me.initClassTree('std', gc.treeData.std);
+            } else {
+                me.initClassTree('comple', gc.treeData.comple);
+            }
             me.filterDatasAndShow();
         });
     },
@@ -192,7 +216,7 @@ let componentOprObj = {
         let me = componentOprObj, re = repositoryGljObj;
         if (me.workBook) {
             let cacheSection = [];
-            let pArr = re.parentNodeIds["_pNodeId_" + type];
+            let pArr = me.parentNodeIds["_pNodeId_" + type];
             for (let i = 0; i < data.length; i++) {
                 if (pArr && pArr.indexOf(data[i].gljClass) >= 0) {
                     cacheSection.push(data[i]);
@@ -248,9 +272,9 @@ let componentTypeTreeOprObj = {
         let me = componentOprObj, re = repositoryGljObj, that = gljComponentOprObj, gljTypeId = treeNode.ID;
         if(me.gljCurTypeId !== treeNode.ID){
             me.gljCurTypeId = treeNode.ID;
-            if (re.parentNodeIds["_pNodeId_" + treeNode.ID]) {
+            if (me.parentNodeIds["_pNodeId_" + treeNode.ID]) {
                 me.currentOprParent = 1;
-                me.currentCache = me.getParentCache(re.parentNodeIds["_pNodeId_" + treeNode.ID]);
+                me.currentCache = me.getParentCache(me.parentNodeIds["_pNodeId_" + treeNode.ID]);
             } else {
                 me.currentCache = me.getCache();
             }

+ 44 - 33
web/building_saas/complementary_glj_lib/js/glj.js

@@ -4,17 +4,6 @@
 
 $(document).ready(function () {
     let moduleName = 'compleGLj';
-    function refreshALlWorkBook() {
-        if (gljClassTreeObj.workBook) {
-            gljClassTreeObj.workBook.refresh();
-        }
-        if (repositoryGljObj.workBook) {
-            repositoryGljObj.workBook.refresh();
-        }
-        if (gljComponentOprObj.workBook) {
-            gljComponentOprObj.workBook.refresh();
-        }
-    }
     SlideResize.loadHorizonWidth(moduleName, [$('#rightResize'), $('#leftResize')], [$('#leftContent'), $('#midContent'), $('#rightContent')], function () {
         refreshALlWorkBook();
     });
@@ -39,7 +28,17 @@ $(document).ready(function () {
         refreshALlWorkBook();
     });
 });
-
+function refreshALlWorkBook() {
+    if (gljClassTreeObj.workBook) {
+        gljClassTreeObj.workBook.refresh();
+    }
+    if (repositoryGljObj.workBook) {
+        repositoryGljObj.workBook.refresh();
+    }
+    if (gljComponentOprObj.workBook) {
+        gljComponentOprObj.workBook.refresh();
+    }
+}
 let pageOprObj = {
     gljLibName : null,
     stdGljLibId: null,
@@ -115,7 +114,7 @@ let repositoryGljObj = {
         let me = this;
         let distType;
         let distTypeTree = {
-            prefix : 'gljType',
+            prefix: 'gljType',
             distTypes: {},
             comboDatas: [],
             distTypesArr: []
@@ -125,24 +124,20 @@ let repositoryGljObj = {
                 data: typeData,
                 children: [],
                 parent: null
-            };
-            if(allowGljType.includes(typeData.ID)){
-                distTypeTree.distTypes[distTypeTree.prefix + typeData.ID] = typeObj;
-                distTypeTree.distTypesArr.push(typeObj);
             }
+            distTypeTree.distTypes[distTypeTree.prefix + typeData.ID] = typeObj;
+            distTypeTree.distTypesArr.push(typeObj);
         });
         gljDistType.forEach(function (typeData) {
-            if(allowGljType.includes(typeData.ID)){
-                distType = distTypeTree.distTypes[distTypeTree.prefix + typeData.ID];
-                let parent = distTypeTree.distTypes[distTypeTree.prefix + typeData.ParentID];
-                if(parent){
-                    distType.parent = parent;
-                    parent.children.push(distType);
-                }
+            distType = distTypeTree.distTypes[distTypeTree.prefix + typeData.ID];
+            let parent = distTypeTree.distTypes[distTypeTree.prefix + typeData.ParentID];
+            if (parent) {
+                distType.parent = parent;
+                parent.children.push(distType);
             }
         });
         distTypeTree.distTypesArr.forEach(function (distTypeObj) {
-            if(distTypeObj.data.fullName !== '材料' && distTypeObj.data.fullName !== '机械'){
+            if (distTypeObj.data.fullName !== '材料' && distTypeObj.data.fullName !== '机械') {
                 distTypeTree.comboDatas.push({text: distTypeObj.data.fullName, value: distTypeObj.data.ID});
             }
         });
@@ -175,6 +170,7 @@ let repositoryGljObj = {
         });
     },
     getGljItems: function(stdGljLibId, callback) {
+        console.log('enterGG');
         let me = this;
         CommonAjax.post('complementartGlj/api/getGljItems', {stdGljLibId: stdGljLibId}, function (rstData) {
             me.stdGljList = rstData.stdGljs;
@@ -192,12 +188,6 @@ let repositoryGljObj = {
             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) {
@@ -397,7 +387,7 @@ let repositoryGljObj = {
         }
     },
     initSel: function (row) {
-        let me = repositoryGljObj, that = gljComponentOprObj;
+        let me = repositoryGljObj, that = gljComponentOprObj, componentCanEdit = false;
         sheetOpr.cleanData(that.workBook.getSheet(0), that.setting, -1);
         me.workBook.focus(true);
         me.currentComponent = [];
@@ -406,6 +396,7 @@ let repositoryGljObj = {
             //标记当前工料机
             me.currentGlj = me.currentCache[row];
             if(allowComponent.includes(me.currentCache[row].gljType)){
+                componentCanEdit = true;
                 //展示数据
                 if(me.currentGlj.component.length > 0){
                     me.currentComponent = me.getCurrentComponent(me.currentGlj.component);
@@ -418,6 +409,26 @@ let repositoryGljObj = {
         else{
             me.currentGlj = null;
         }
+
+        //组成物表能编辑则显示,否则隐藏该工作表
+        let rightWidth = getLocalCache('compleGLjrightContentWidth') || '25%';
+        rightWidth = rightWidth.replace('%', '');
+        let curMidWidth = $('#midContent')[0].style.width.replace('%', ''),
+            curRightWidth = $('#rightContent')[0].style.width.replace('%', '');
+        if (componentCanEdit && curRightWidth === '0') {
+            curMidWidth = parseFloat(curMidWidth) - parseFloat(rightWidth);
+            $('#midContent').css('width', `${curMidWidth}%`);
+            $('#rightContent').css('width', `${rightWidth}%`);
+        } else if(!componentCanEdit && curRightWidth !== '0') {
+            curMidWidth = parseFloat(curMidWidth) + parseFloat(rightWidth);
+            $('#midContent').css('width', `${curMidWidth}%`);
+            $('#rightContent').css('width', `0%`);
+        }
+        //减少触发
+        if (me.preComponentCanEdit !== componentCanEdit) {
+            refreshALlWorkBook();
+        }
+        me.preComponentCanEdit = componentCanEdit;
     },
     onEnterCell: function (sender, args) {
         let me = repositoryGljObj;
@@ -1113,7 +1124,7 @@ let repositoryGljObj = {
         // }
     },
     updateRationBasePrcRq: function (basePrcArr) {
-        CommonAjax.post('complementartGlj/api/updateRationBasePrc', {basePrcArr: basePrcArr}, function (rstData) {
+        CommonAjax.post('/complementartGlj/api/updateRationBasePrc', {basePrcArr: basePrcArr}, function (rstData) {
         });
     },
   /*  getRationGljIds: function (repId) {

+ 11 - 6
web/building_saas/complementary_glj_lib/js/gljClassTree.js

@@ -2,6 +2,7 @@
  * Created by Zhong on 2018/1/16.
  */
 let gljClassTreeObj = {
+    treeData: null,
     cache: null,//ref to tree.items
     tree: null,
     controller: null,
@@ -110,22 +111,25 @@ let gljClassTreeObj = {
     },
 
     getGljClassTree: function (gljLibId, callback) {
+        console.log('enter1');
         let me = gljClassTreeObj;
         let re = repositoryGljObj;
-        let url = 'complementartGlj/api/getGljTree';
+        let url = '/complementartGlj/api/getMixedTree';
         let postData = {gljLibId: gljLibId};
         let sucFunc = function (rstData) {
-            zTreeHelper.createTree(rstData, componentSetting, "componentTree", componentOprObj);
+            me.treeData = rstData;
+            let compleTreeData = me.treeData.comple;
+            /*zTreeHelper.createTree(rstData.std, 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;
+            }*/
+            if (compleTreeData && compleTreeData.length > 0) {
+                me.gljCurTypeId = compleTreeData[0].ID;
             }
             //init
             me.buildSheet();
-            me.initTree(rstData);
+            me.initTree(compleTreeData);
             me.cache = me.tree.items;
             re.updateParentNodeIds(me.cache, re);
             me.initController(me.tree, me.sheet, me.setting.sheet);
@@ -177,6 +181,7 @@ let gljClassTreeObj = {
             re.currentCache = re.getCache();
         }
         re.showGljItems(re.complementaryGljList, gljTypeId);
+        re.initSel(re.workBook.getSheet(0).getActiveRowIndex());
         me.workBook.focus(true);
     }
 }

+ 13 - 6
web/building_saas/complementary_glj_lib/js/gljComponent.js

@@ -18,9 +18,19 @@ let gljComponentOprObj = {
             lockedCols:[0, 1, 2, 3]
         }
     },
+    buildHeader: function (sheet, header) {
+        sheet.setRowCount(2, GC.Spread.Sheets.SheetArea.colHeader);
+        for (let i = 0; i < header.length; i++) {
+            sheet.setValue(1, i, header[i].headerName, GC.Spread.Sheets.SheetArea.colHeader);
+            sheet.setColumnWidth(i, header[i].headerWidth? header[i].headerWidth:100);
+        }
+        sheet.setValue(0, 0, '组成物信息', GC.Spread.Sheets.SheetArea.colHeader);
+        sheet.addSpan(0, 0, 1, header.length, GC.Spread.Sheets.SheetArea.colHeader);
+    },
     buildSheet: function(container) {
         let me = gljComponentOprObj;
-        me.workBook = sheetOpr.buildSheet(container, me.setting, 30);
+        me.workBook = sheetOpr.buildSheet(container, me.setting, 30, false);
+        me.buildHeader(me.workBook.getSheet(0), me.setting.header);
         sheetCommonObj.spreadDefaultStyle(me.workBook);
         me.workBook.getSheet(0).setColumnWidth(0, 20, GC.Spread.Sheets.SheetArea.rowHeader);
         me.workBook.getSheet(0).setFormatter(-1, 0, "@", GC.Spread.Sheets.SheetArea.viewport);
@@ -85,10 +95,7 @@ let gljComponentOprObj = {
                                 co.initRadio();
                                 co.gljCurTypeId = null;
                                 //默认点击树根节点
-                                if(co.rootNode){
-                                    co.treeObj.selectNode(co.rootNode);
-                                    componentTypeTreeOprObj.onClick(null, 'componentTree', co.rootNode);
-                                }
+                                co.initClassTree('std', gljClassTreeObj.treeData.std);
                                 //弹出窗口
                                 $('#component').modal('show');
                             }},
@@ -433,7 +440,7 @@ let gljComponentOprObj = {
                 if(row + i < that.currentComponent.length){
                     let currentObj = that.currentComponent[row + i];
                     if(items[i].consumeAmt.trim().length > 0 && items[i].consumeAmt !== currentObj.consumeAmt){
-                        let roundCons = scMathUtil.roundTo(parseFloat(items[i].consumeAmt), 3);
+                        let roundCons = scMathUtil.roundTo(parseFloat(items[i].consumeAmt), -3);
                         isChange = true;
                         currentObj.consumeAmt = roundCons;
                         for(let j = 0; j < component.length; j++){

+ 4 - 2
web/building_saas/complementary_glj_lib/js/sheetOpr.js

@@ -34,7 +34,7 @@ let sheetOpr = {
         sheet.resumePaint();
     },
 
-    buildSheet: function(container, setting, rowCount) {
+    buildSheet: function(container, setting, rowCount, buildHeader = true) {
         var me = this;
         var spreadBook = new GC.Spread.Sheets.Workbook(container, { sheetCount: 1 });
         spreadBook.options.tabStripVisible = false;
@@ -60,7 +60,9 @@ let sheetOpr = {
         };
         sheet.showRowOutline(false);
         //setup column header
-        me.buildHeader(sheet, setting);
+        if (buildHeader) {
+            me.buildHeader(sheet, setting);
+        }
         //setup cells
         if (rowCount > 0) sheet.setRowCount(rowCount);
         sheet.resumeEvent();

+ 5 - 4
web/building_saas/complementary_ration_lib/html/dinge.html

@@ -518,12 +518,13 @@
             </div>
             <div class="modal-body" style="padding-left: 0; padding-right: 3px; margin-left: 0;">
                 <div style="width: 36%; float: left;">
+                    &nbsp;
+                    <input type="radio" class="glj-radio" name="glj" value="stdGljs">标准&nbsp;&nbsp;
+                    <input type="radio" class="glj-radio" name="glj" value="complementaryGljs">补充&nbsp;&nbsp;
                     <div  class="modal-auto-height" id="gljSelTreeDiv" style="overflow: hidden">
-                        <!--<div class="print-list">-->
                         <div style="width: 100%; height: 100%; overflow: auto">
                             <ul id="selGljTree" class="ztree"></ul>
                         </div>
-                        <!--</div>-->
                     </div>
                 </div>
                 <div style="width: 64%; padding-left: 3px; float: left;">
@@ -531,9 +532,9 @@
                         <div class="col-12" id="gljRadios">
                             <div class="row">
                                 <div class="col-7" style="margin-top: 5px;">
-                                    <input type="radio" class="glj-radio" name="glj" value="allGljs">所有&nbsp;&nbsp;
+                                  <!--  <input type="radio" class="glj-radio" name="glj" value="allGljs">所有&nbsp;&nbsp;
                                     <input type="radio" class="glj-radio" name="glj" value="stdGljs">标准&nbsp;&nbsp;
-                                    <input type="radio" class="glj-radio" name="glj" value="complementaryGljs">补充&nbsp;&nbsp;
+                                    <input type="radio" class="glj-radio" name="glj" value="complementaryGljs">补充&nbsp;&nbsp;-->
                                 </div>
                                 <div class="input-group col-5" style="margin-bottom: 5px;">
                                     <input type="text" class="form-control form-control-sm" placeholder="请输入筛选编码或名称" value="" id="gljSearchKeyword">

+ 32 - 11
web/building_saas/complementary_ration_lib/js/gljSelect.js

@@ -62,16 +62,32 @@ let gljSelOprObj = {
             }
         });
     },
+    initClassTree: function (type, treeData) {
+        let me = this;
+        if (me.treeObj) {
+            me.treeObj.destroy();
+            me.parentNodeIds = {};
+        }
+        zTreeHelper.createTree(treeData, gljSelTreeOprObj.setting, "selGljTree", me);
+        let rootNode = me.treeObj.getNodes()[0];
+        if(rootNode && rootNode.isParent && rootNode.isFirstNode){
+            me.rootNode = rootNode;
+        }
+        if(me.rootNode){
+            me.treeObj.selectNode(me.rootNode);
+            if ((me.stdGljList && me.stdGljList.length > 0) ||
+                (me.complementaryGljList && me.complementaryGljList.length > 0)) {
+                gljSelTreeOprObj.setting.callback.onClick(null, 'selGljTree', me.rootNode);
+            }
+        }
+    },
     getGljClassTree: function (gljLibId, callback) {
         let me = this;
-        let url = '/complementartGlj/api/getGljTree';
+        let url = '/complementartGlj/api/getMixedTree';
         let postData = {gljLibId: gljLibId};
         let sucFunc = function (rstData) {
-            zTreeHelper.createTree(rstData, gljSelTreeOprObj.setting, "selGljTree", gljSelOprObj);
-            let rootNode = gljSelOprObj.treeObj.getNodes()[0];
-            if(rootNode && rootNode.isParent && rootNode.isFirstNode){
-                gljSelOprObj.rootNode = rootNode;
-            }
+            me.treeData = rstData;
+            me.initClassTree('std', me.treeData.std);
             gljSelOprObj.buildSheet($('#gljSelSheet')[0]);
             if(callback){
                 callback();
@@ -166,13 +182,13 @@ let gljSelOprObj = {
         if(typeof $("input[name='glj']:checked")[0] !== 'undefined'){
             $("input[name='glj']:checked")[0].checked = false;
         }
-        $("input[value = 'allGljs']")[0].checked = true;
-        me.radiosSelected = 'allGljs';
-        //初始为所有工料机
+        $("input[value = 'stdGljs']")[0].checked = true;
+        me.radiosSelected = 'stdGljs';
+        //初始为标准工料机
         me.showGljList = [];
-        if(me.radiosSelected === 'allGljs'){
+        if(me.radiosSelected === 'stdGljs'){
             me.setShowGljList(me.stdGljList, true);
-            me.setShowGljList(me.complementaryGljList, true);
+            //me.setShowGljList(me.complementaryGljList, true);
             me.sortGlj(me.showGljList);
         }
     },
@@ -219,6 +235,11 @@ let gljSelOprObj = {
     radiosChange: function () {
         let me = gljSelOprObj;
         $('.glj-radio').change(function () {
+            if($(this).val() === 'stdGljs') {
+                me.initClassTree('std', me.treeData.std);
+            } else {
+                me.initClassTree('comple', me.treeData.comple);
+            }
             me.filterDatasAndShow();
         });
     },

+ 1 - 5
web/building_saas/complementary_ration_lib/js/ration_glj.js

@@ -136,11 +136,7 @@ var rationGLJOprObj = {
                                 //默认radio所有工料机
                                 gljSelOprObj.initRadio();
                                 gljSelOprObj.gljCurTypeId = null;
-                                //默认点击树根节点
-                                if(gljSelOprObj.rootNode){
-                                    gljSelOprObj.treeObj.selectNode(gljSelOprObj.rootNode);
-                                    gljSelTreeOprObj.setting.callback.onClick(null, 'componentTree', gljSelOprObj.rootNode);
-                                }
+                                gljSelOprObj.initClassTree('std', gljSelOprObj.treeData.std);
                                 //弹出窗口
                                 $('#selGlj').modal('show');
                             }},

+ 14 - 23
web/building_saas/complementary_ration_lib/js/section_tree.js

@@ -26,29 +26,20 @@ let pageOprObj = {
     gljLibId: gljLibId,
     initPage : function() {
         let me = this;
-       // me.getRationLibInfo(rationLibId, function (rstData) {
-            //if(rstData.length > 0){
-                //me.rationLibName = rstData[0].dispName;
-                //let $rationName = $(`<div id='rationname' class='navbar-text'><a id='rationLibBtn' href='javascript:void(0);'>定额库</a><i class='fa fa-angle-right fa-fw'></i>${me.rationLibName}</div>`);
-                //let $rationName = $(`<div id='rationname' class='navbar-text'>${me.rationLibName}</div>`);
-               // $('.header-logo').after($rationName);
-              //  me.gljLibId = rstData[0].gljLib;
-                sectionTreeObj.getSectionTree();
-                //job
-                jobContentOprObj.radiosChange(jobContentOprObj.radios, jobContentOprObj.tableAll, jobContentOprObj.tablePartial);
-                $('#addConBtn').click(jobContentOprObj.bindAddConBtn());
-                $('#updateConBtn').click(jobContentOprObj.bindUpdateConBtn());
-                jobContentOprObj.bindAllEvents($('#txtareaAll'));
-                //fz
-                annotationOprObj.radiosChange(annotationOprObj.radios, annotationOprObj.fzTableAll, annotationOprObj.fzTablePartial);
-                $('#fzAddConBtn').click(annotationOprObj.bindAddConBtn());
-                $('#fzUpdateConBtn').click(annotationOprObj.bindUpdateConBtn());
-                annotationOprObj.bindAllEvents($('#fzTxtareaAll'));
-           // }
-            gljSelOprObj.getGljClassTree(gljLibId, function () {
-                    gljSelOprObj.getSelGljItems(gljLibId);
-            });
-       // });
+        sectionTreeObj.getSectionTree();
+        //job
+        jobContentOprObj.radiosChange(jobContentOprObj.radios, jobContentOprObj.tableAll, jobContentOprObj.tablePartial);
+        $('#addConBtn').click(jobContentOprObj.bindAddConBtn());
+        $('#updateConBtn').click(jobContentOprObj.bindUpdateConBtn());
+        jobContentOprObj.bindAllEvents($('#txtareaAll'));
+        //fz
+        annotationOprObj.radiosChange(annotationOprObj.radios, annotationOprObj.fzTableAll, annotationOprObj.fzTablePartial);
+        $('#fzAddConBtn').click(annotationOprObj.bindAddConBtn());
+        $('#fzUpdateConBtn').click(annotationOprObj.bindUpdateConBtn());
+        annotationOprObj.bindAllEvents($('#fzTxtareaAll'));
+        gljSelOprObj.getGljClassTree(gljLibId, function () {
+            gljSelOprObj.getSelGljItems(gljLibId);
+        });
     },
     getRationLibInfo: function (rationLibId, callback) {
         CommonAjax.post('api/getRationLib', {rationRepId: rationLibId}, callback);

+ 8 - 1
web/building_saas/css/custom.css

@@ -274,7 +274,6 @@ legend.legend{
 .item_spread{
     width: 29.8%;
     float: left;
-    margin-top: -5px;
     background: #F1F1F1;
     word-wrap:break-word
 }
@@ -288,4 +287,12 @@ input.text-right{
 }
 .more{
     padding-left:.25rem!important
+}
+.bottom-tznrTools {
+    height: 30px;
+    line-height: 30px;
+    background:#efefef;
+    bottom:30px;
+    left:0px;
+    z-index: 999
 }

+ 62 - 8
web/building_saas/css/main.css

@@ -36,7 +36,7 @@ a{
     font-size: 1rem;
     height:38px;
     background:url(logo.png) no-repeat 0 0;
-    padding-left:40px;
+    padding-left:50px;
 }
 .header-logo div.v-title{
     font-size:11px;
@@ -169,6 +169,9 @@ a{
 .main-side.col-lg-0{
     width:0%;
 }
+.sidebar-middle{
+    height:80px;
+}
 .sidebar-bottom,.sidebar-bottom .col-lg-6,.sidebar-bottom .col-lg-12 {
     height:300px
 }
@@ -185,6 +188,14 @@ a{
     border-radius: 0;
     padding: 0.2em 0.5em
 }
+.bottom-tools {
+    height: 30px;
+    line-height: 30px;
+    background:#fff;
+    bottom:20px;
+    left:22px;
+    z-index: 999
+}
 .side-tabs .nav-tabs .nav-item {
     z-index: 999
 }
@@ -314,7 +325,7 @@ a{
 .bottom-content .tab-content .ovf-hidden{
     overflow: hidden;
 }
-.tn-nav{
+.tn-nav,.rn-nav{
     width:30px;
     height: 100%;
     border-left:1px solid #dee2e6 ;
@@ -326,6 +337,34 @@ a{
     background:#f7f7f9;
     cursor: pointer;
 }
+.rn-nav {
+    background: #f7f7f9
+}
+.rn-nav .nav{
+    padding: 0
+}
+.rn-nav .nav-tabs {
+    border:none;
+    margin-top:2px;
+}
+.rn-nav .nav-tabs .nav-link{
+    padding:0.8em 0.4em;
+    line-height: 16px
+}
+.rn-nav .nav-tabs .nav-link.active {
+    border:none;
+    background-color: #fff;
+    border-left:1px solid #fff;
+    margin-left:-1px;
+    border-top:1px solid #ccc;
+    border-bottom:1px solid #ccc;
+}
+.rn-nav .nav-tabs .nav-link span{
+    display:none;
+}
+.rn-nav .nav-tabs .nav-link.active span{
+    display: inline-block;
+}
 .form-signin {
     max-width: 500px;
     margin: 150px auto;
@@ -493,10 +532,25 @@ a{
 .navbar-crumb .f-nav li.focus .s-nav{
     display: block
 }
-.bottom-tools {
-    height: 30px;
-    line-height: 30px;
-    background:#F1F1F1;
-    bottom:25px;
-    left:0px;
+/*书签颜色*/
+.annotate-color-1{
+    background: #E2F2C5
+}
+.annotate-color-2{
+    background: #F9E2CF
+}
+.annotate-color-3{
+    background: #F2EFD9
+}
+.annotate-color-4{
+    background: #F5D1DA
+}
+.annotate-color-5{
+    background: #E3E3E3
+}
+.annotate-color-6{
+    background: #B6F3F2
 }
+.annotate-color-7{
+    background: #ECE0F5
+}

+ 1 - 2
web/building_saas/js/global.js

@@ -33,8 +33,7 @@ function autoFlashHeight(){
     $(".form-list").height($(window).height()-headerHeight);
     $('#comments').find('textarea').height($('#comments').height() - 25);
     typeof(adaptiveTzjnrWidth)== 'function' ?adaptiveTzjnrWidth():''
-    typeof MaterialController === 'object' ? MaterialController.initItemWidth() : '';
-    typeof zmhs_obj === 'object' ? zmhs_obj.loadSideResize() : '';
+    //typeof zmhs_obj === 'object' ? zmhs_obj.loadSideResize() : '';
 };
 
 

File diff suppressed because it is too large
+ 74 - 36
web/building_saas/main/html/main.html


+ 5 - 5
web/building_saas/main/js/controllers/material_controller.js

@@ -220,15 +220,15 @@ let MaterialController = {
         if(selected&&parent){
             text = parent.data.itemCharacterText?parent.data.itemCharacterText.replace(/\n/g,"<br>"):"";
         }
-        if(text == "") {//为空的时候不显示
+       /* if(text == "") {//为空的时候不显示
             $("#replaceM").hide();
             $("#subSpread").removeClass("ration_glj_spread");
             $('#subSpread').css('width','');
             return;
-        }
-        $('#replaceM').css('margin-top',0);
-        this.toggleItemInit();
-        $("#replaceText").html(text);
+        }*/
+        //$('#replaceM').css('margin-top',0);
+        //this.toggleItemInit();
+        $("#itemCharacterText").html("<br>"+text);
     },
     //初始化人材机和项目特征文本两个区域的宽度,改变窗口大小时调用此方法,实时刷新
     initItemWidth: function () {

+ 17 - 15
web/building_saas/main/js/views/billsElf.js

@@ -465,26 +465,28 @@ const BillsElf = (function() {
             let $editInput = $(`<div style="height: ${height}px; background: ${cellStyle.backColor};overflow: hidden; white-space: nowrap; text-overflow: ellipsis">${node.data.options}</div>`),
                 $optDiv = $(`<div style="position: fixed; width: ${cellRect.width}px; top: ${top}px;background: ${cellStyle.backColor};border: 1px solid; overflow: auto; height: ${options.length > 6 ? height*6+5 : height*options.length+5}px; font-size: 0.9rem;"></div>`);
             for(let opt of options){
-                let $opt = $(`<div title="${opt.name ? opt.name : ''}" class="elf-options" style="height: ${height}px;overflow: hidden; white-space: nowrap; text-overflow: ellipsis"></div>`),
-                    $optInput = $(`<input rank="${opt.rank}" value="${opt.ID}" style="margin-left: 5px; vertical-align: middle" type="checkbox" 
-                    ${node.data.optionChecked && _.find(node.data.optionChecked, {ID: opt.ID}) ? 'checked' : ''}>`);
+                let $opt = $(`<div title="${opt.name ? opt.name : ''}" class="elf-options" style="cursor: pointer; height: ${height}px;overflow: hidden; white-space: nowrap; text-overflow: ellipsis"></div>`),
+                    $optInput = $(`<input rank="${opt.rank}" value="${opt.ID}" style="cursor: pointer; margin-left: 5px; vertical-align: middle" type="checkbox" 
+                    ${node.data.optionChecked && _.find(node.data.optionChecked, {ID: opt.ID}) ? 'checked' : ''} ${projectReadOnly ? 'disabled' : ''}>`);
                 $opt.text(`${opt.name ? opt.name : ''}`);
                 $opt.prepend($optInput);
                 $optDiv.append($opt);
                 //选项复选框点击监听
-                $opt.click(function () {
-                    //单选
-                    if(billsGuidanceSelMode === 0){
-                        let $allInput = $optDiv.find('input');
-                        for(let input of $allInput){
-                            $(input).prop('checked', false);
-                        }
-                        $($optInput).prop('checked', 'checked');
-                        elfItem.workBook.getSheet(0).endEdit();
-                    } else {//多选
+                if (!projectReadOnly) {
+                    $opt.click(function () {
+                        //单选
+                        if(billsGuidanceSelMode === 0){
+                            let $allInput = $optDiv.find('input');
+                            for(let input of $allInput){
+                                $(input).prop('checked', false);
+                            }
+                            $($optInput).prop('checked', 'checked');
+                            elfItem.workBook.getSheet(0).endEdit();
+                        } else {//多选
 
-                    }
-                });
+                        }
+                    });
+                }
             }
             $editor.append($editInput);
             $editor.append($optDiv);

+ 36 - 5
web/building_saas/main/js/views/glj_view.js

@@ -69,6 +69,7 @@ var gljOprObj = {
                         me.gljCurTypeId = treeNode.ID;
                         me.filterLibGLJSheetData();
                         me.showLibGLJSheetData();
+                        gljOprObj.initSelection({row: me.gljLibSheet.getActiveRowIndex()});
                     }
                 } else {
                     if (treeNode.isParent) {
@@ -323,6 +324,7 @@ var gljOprObj = {
     initSelection: function (sel) {
         let me = gljOprObj;
         if(sel){
+            sel.row = !sel.row || sel.row == -1 ? 0 : sel.row;
             me.gljLibSheet.setStyle(sel.row, -1, me.getSelStyle(true));
         }
         if(me.preGljLibSelection && me.preGljLibSelection.row !== sel.row){
@@ -517,7 +519,8 @@ var gljOprObj = {
                 }else {
                     if($('#linkGLJ').hasClass('active')){
                         this.showRationGLJData(node);
-                        MaterialController.showReplaceDiv(node);
+                        subObj.showGljSubTabData();
+                       // MaterialController.showReplaceDiv(node);
                     }
                     if($('#linkAZZJF').hasClass('active')) installationFeeObj.showRationInstallationData(node);
                     if($('#linkMBZM').hasClass('active')) mbzm_obj.showMBZMData(node);
@@ -539,7 +542,7 @@ var gljOprObj = {
             MaterialController.hideReplaceDiv();
         }
         //子目换算
-        zmhs_obj.showZMHSData(node);
+        //zmhs_obj.showZMHSData(node);
         //   $('#dropdown').hide();
     },
     showMixRatio:function (node) {//显示组成物到定额工料机
@@ -1092,6 +1095,7 @@ var gljOprObj = {
                 distTypeTree.comboDatas.push({text: distTypeObj.data.fullName, value: distTypeObj.data.ID});
             }
         });
+        console.log(distTypeTree);
         return distTypeTree;
     },
     doInsertGLJ: function () {
@@ -1409,6 +1413,26 @@ var gljOprObj = {
         }else {
             gljOprObj.billsTab = gljOprObj.activeTab;
         }
+    },
+    //初始化分类树
+    //@param {String}type(标准或补充) {Array}treeData(树数据)
+    initClassTree: function (type, treeData, initSel = false) {
+        let me = this;
+        if (me.treeObj) {
+            me.treeObj.destroy();
+            me.parentNodeIds = {};
+        }
+        zTreeHelper.createTree(treeData, me.gljTreeSetting, "gljTree", me);
+        if (initSel) {
+            let rootNode = me.treeObj.getNodes()[0];
+            if(rootNode && rootNode.isParent && rootNode.isFirstNode){
+                me.rootNode = rootNode;
+            }
+            if(me.rootNode){
+                me.treeObj.selectNode(me.rootNode);
+                me.gljTreeSetting.callback.onClick(null, 'gljTree', me.rootNode);
+            }
+        }
     }
 }
 
@@ -1476,9 +1500,15 @@ $(function () {
             gljOprObj.filterLibGLJSheetData();
             gljOprObj.showLibGLJSheetData();
         } else {
-            gljOprObj.gljLibSheetData = gljOprObj[val];
-            gljOprObj.filterLibGLJSheetData();
-            gljOprObj.showLibGLJSheetData();
+            if(val === 'stdGLJ') {
+                gljOprObj.initClassTree('std', gljOprObj.treeData.std, true);
+            } else {
+                gljOprObj.initClassTree('comple', gljOprObj.treeData.comple, true);
+            }
+            gljOprObj.initSelection({row: 0});
+            //gljOprObj.gljLibSheetData = gljOprObj[val];
+            /*gljOprObj.filterLibGLJSheetData();
+            gljOprObj.showLibGLJSheetData();*/
         }
     });
 /*    //工料机搜索
@@ -1496,6 +1526,7 @@ $(function () {
     $('#gljSearchKeyword').bind('keyup', function (e) {
         gljOprObj.filterLibGLJSheetData();
         gljOprObj.showLibGLJSheetData();
+        gljOprObj.initSelection({row: 0});
     });
 
     $('#glj_selected_conf').click(function () {

+ 4 - 1
web/building_saas/main/js/views/glj_view_contextMenu.js

@@ -378,7 +378,9 @@ function getGLJData(actionType) {
     $.bootstrapLoading.start();
     projectObj.project.ration_glj.getGLJData(function (result) {
         console.log(+new Date());
-        zTreeHelper.createTree(result.datas.treeData, gljOprObj.gljTreeSetting, "gljTree", gljOprObj);
+        gljOprObj.treeData =  result.datas.treeData;
+        //zTreeHelper.createTree(result.datas.treeData, gljOprObj.gljTreeSetting, "gljTree", gljOprObj);
+        gljOprObj.initClassTree('std', gljOprObj.treeData.std);
         gljOprObj.stdGLJ=result.datas.stdGLJ;
         gljOprObj.complementaryGLJs=result.datas.complementaryGLJs;
         for(let compleGlj of gljOprObj.complementaryGLJs){
@@ -386,6 +388,7 @@ function getGLJData(actionType) {
             compleGlj.isComplementary = true;
         }
         gljOprObj.AllRecode=gljOprObj.stdGLJ.concat(gljOprObj.complementaryGLJs);
+        //gljOprObj.AllRecode=gljOprObj.stdGLJ;
         gljOprObj.distTypeTree=gljOprObj.getComboData(result.datas.distTypeTree);
         $('#modalCon').width($(window).width()*0.5);
         $("input[name='glj']").get(0).checked=true;

+ 16 - 2
web/building_saas/main/js/views/mbzm_view.js

@@ -15,8 +15,8 @@ let mbzm_obj={
         header: [
             {headerName: "编码", headerWidth: 130, dataCode: "code", dataType: "String", formatter: "@"},
             {headerName: "模板类别", headerWidth: 260, dataCode: "name", dataType: "String", hAlign: "left"},
-            {headerName: "系数", headerWidth: 65, dataCode: "coe", dataType: "Number",validator:"number"},
             {headerName: "单位", headerWidth: 45, dataCode: "unit", dataType: "String", hAlign: "center",getText:'forUnit'},
+            {headerName: "系数", headerWidth: 65, dataCode: "coe", dataType: "Number",validator:"number"},
             {headerName: "工程量", headerWidth: 65, dataCode: "quantity", dataType: "Number",validator:"number"},
             {headerName: "关联类别", headerWidth: 100, dataCode: "type", dataType: "String"},
             {headerName: "清单位置", headerWidth: 200, dataCode: "position", hAlign: "left", dataType: "String",cellType:'selectButton',getText:'forPosition'},
@@ -81,7 +81,7 @@ let mbzm_obj={
                 if(template) {
                     $("#createLocation").val(template.createLocation);
                     let pcol = _.findIndex(this.setting.header,{dataCode:"position"});
-                    this.setting.header[pcol].visible = template.createLocation == 3?false:true;
+                    this.setting.header[pcol].visible = template.createLocation == this.locateMap.AFTERRATION?false:true;
                     datas = _.cloneDeep(template.templateList);
                 }
             }
@@ -289,7 +289,18 @@ let mbzm_obj={
                 }
             }
             if(billsID == ""){//也没有生成过的情况下,要自动生成清单
+                //2018-12-19  对于新生成的清单,根据新清单编码的前6位去查询有没有完全匹配的清单,有的话将这一节点做为新清单的父项清单
+                let subNodes=[];
+                //默认没有找到编码匹配的就挂在技术措施项目下
                 let parentNode = projectObj.project.Bills.getAutoParentNode("措施费用");
+                if(data.billsLocation.length >= 6){
+                    projectObj.mainController.tree.getAllSubNode(rootNode,subNodes);
+                    let tem_code = data.billsLocation.substr(0,6);
+                    let n_parentNode = _.find(subNodes,function (n) {
+                        return n.data.code == tem_code;
+                    });
+                    if(n_parentNode) parentNode = n_parentNode;
+                }
                 billsID = uuid.v1();
                 let newBill = {
                     ID:billsID,
@@ -472,6 +483,9 @@ $('#createLocation').change(function(){
 
 
 $('#next_mbzm').click(function () {
+    if (projectReadOnly) {
+        return;
+    }
     let mainSheet = projectObj.mainSpread.getActiveSheet();
     let selection = mainSheet.getSelections()[0];
     let node =  projectObj.project.mainTree.selected;

+ 4 - 1
web/building_saas/main/js/views/project_info.js

@@ -18,7 +18,10 @@ var projectInfoObj = {
                 <span data-toggle="tooltip" data-placement="bottom" data-original-title="${engName}"><i class="fa fa-cube"></i>...</span>
                 <span class="text-muted px-1">\</span>
                  <span><i class="fa fa-sticky-note-o"></i></span>
-                <span class="text-truncate"  data-toggle="tooltip" data-placement="bottom" data-original-title="${proj.name}">&nbsp;${proj.name}</span>`;
+                <span class="text-truncate"  data-toggle="tooltip" data-placement="bottom" data-original-title="${proj.name}">&nbsp;${proj.name}</span>
+                ${projectReadOnly ? '' +
+                '<span data-toggle="tooltip" data-placement="bottom" data-original-title="当前的工程状态为“只读”,如果要进行编辑,请在项目管理-分享界面,使用“拷贝工程”功能。">(只读)</span>' 
+                : ''}`;
             fullPath.push(newHtml);
 
         }

+ 59 - 5
web/building_saas/main/js/views/project_view.js

@@ -904,6 +904,7 @@ var projectObj = {
                 // that.project.initCalcFields();
                 let str = JSON.stringify(that.project.projSetting.main_tree_col);
                 that.project.projSetting.mainGridSetting = JSON.parse(str);
+                console.log(that.project.projSetting.mainGridSetting);
                 that.project.projSetting.mainGridSetting.frozenCols = 4;
                 TREE_SHEET_HELPER.initSetting($('#billsSpread')[0], that.project.projSetting.mainGridSetting);
                 that.project.projSetting.mainGridSetting.setAutoFitRow = MainTreeCol.getEvent("setAutoFitRow");
@@ -977,9 +978,9 @@ var projectObj = {
                 that.mainSpread.bind(GC.Spread.Sheets.Events.ColumnWidthChanged, that.onColumnWidthChanged);
                 that.mainSpread.bind(GC.Spread.Sheets.Events.ClipboardPasting, that.onClipboardPasting);
                 //let loadOtherStartTime = +new Date();
-                if(!projectReadOnly){
+                //if(!projectReadOnly){
                     that.loadMainSpreadContextMenu();
-                }
+                //}
                 socketObject.connect();//连接socket服务器
                 let endTime = +new Date();
                 console.log(`其它时间——${endTime - endShowTime}`);
@@ -1169,7 +1170,7 @@ var projectObj = {
                     name: "插入大项费用",
                     icon: 'fa-sign-in',
                     disabled: function () {
-                        return projectObj.project.isBillsLocked() && project.withinBillsLocked(project.mainTree.selected);
+                        return projectReadOnly || (projectObj.project.isBillsLocked() && project.withinBillsLocked(project.mainTree.selected));
                         //return project.mainTree.selected ? project.mainTree.selected.sourceType !== project.Bills.getSourceType() : false;
                     },
                     callback: function (key, opt) {
@@ -1183,6 +1184,9 @@ var projectObj = {
                     name: "插入分部",
                     icon: 'fa-sign-in',
                     disabled: function () {
+                        if (projectReadOnly) {
+                            return true;
+                        }
                         let selected = project.mainTree.selected;
                         if(projectObj.project.isBillsLocked()== false&&selected&&selected.sourceType==project.Bills.getSourceType()){
                             if(selected.data.type==billType.FB){
@@ -1214,6 +1218,9 @@ var projectObj = {
                     name: "插入分项",
                     icon: 'fa-sign-in',
                     disabled: function () {
+                        if (projectReadOnly) {
+                            return true;
+                        }
                         let selected = project.mainTree.selected;
                         if(projectObj.project.isBillsLocked()== false&& selected&&selected.sourceType==project.Bills.getSourceType()){
                             if(selected.data.type==billType.FX||selected.data.type==billType.BX){//焦点行是分项,有效显示
@@ -1252,6 +1259,9 @@ var projectObj = {
                     name: "插入清单",
                     icon: 'fa-sign-in',
                     disabled: function () {
+                        if (projectReadOnly) {
+                            return true;
+                        }
                         let selected = project.mainTree.selected;
                         if(!(projectObj.project.isBillsLocked()== true && project.withinBillsLocked(selected)) && selected && selected.sourceType === project.Bills.getSourceType()){
                             return false
@@ -1281,6 +1291,9 @@ var projectObj = {
                     name: "插入定额",
                     icon: 'fa-sign-in',
                     disabled: function () {
+                        if (projectReadOnly) {
+                            return true;
+                        }
                         // var selected = project.mainTree.selected;
                         // return project.Ration.addRationChecking(selected);  // Vincent, 2018-01-02
                         // 工具栏要加按钮,且不能隐藏。菜单可以隐藏,两者又必须统一,所以启用新规则。怕以后又要改回来,所以保留。 CSL, 2018-01-02
@@ -1299,6 +1312,9 @@ var projectObj = {
                     name: "插入量价",//插入量价不需要自动定位到编号列
                     icon: 'fa-sign-in',
                     disabled: function () {
+                        if (projectReadOnly) {
+                            return true;
+                        }
                         // var selected = project.mainTree.selected;
                         // return project.Ration.addRationChecking(selected);  // Vincent, 2018-01-02
                         return !project.Ration.canAdd(project.mainTree.selected);
@@ -1351,6 +1367,9 @@ var projectObj = {
                     name: "插入人材机",
                     icon: 'fa-sign-in',
                     disabled: function () {
+                        if (projectReadOnly) {
+                            return true;
+                        }
                         // var selected = project.mainTree.selected;
                         // return project.Ration.addRationChecking(selected);  // Vincent, 2018-01-02
                         return !project.Ration.canAdd(project.mainTree.selected);
@@ -1376,6 +1395,9 @@ var projectObj = {
                     name: "计取安装费用",
                     icon: 'fa-sign-in',
                     disabled: function () {
+                        if (projectReadOnly) {
+                            return true;
+                        }
                         return false;
                     },
                     callback: function (key, opt) {
@@ -1389,6 +1411,9 @@ var projectObj = {
                     name: '删除',
                     icon: 'fa-remove',
                     disabled: function () {
+                        if (projectReadOnly) {
+                            return true;
+                        }
                         return !ifCanDelete();
                     },
                     callback: function () {
@@ -1406,6 +1431,11 @@ var projectObj = {
                     callback: function () {
                         project.calcProgram.calcAllNodesAndSave();
                     },
+                    disabled: function () {
+                        if (projectReadOnly) {
+                            return true;
+                        }
+                    },
                     visible:function(key, opt){//2018-11-15 新需求隐藏右键“造价计算”。
                         return false;
                     }
@@ -1415,6 +1445,9 @@ var projectObj = {
                     name: '复制整块',
                     icon: 'fa-copy',
                     disabled: function () {
+                        if (projectReadOnly) {
+                            return true;
+                        }
                         let selection = projectObj.mainSpread.getActiveSheet().getSelections()[0];
                         let firstNode = projectObj.project.mainTree.items[selection.row];//当多选的情况,用mainTree.selected判断不正确,要用第一个选中的节点
                         for(let i = 0;i< selection.rowCount;i++){ //多选的时候判断所有与第一个节点同级的节点
@@ -1442,6 +1475,9 @@ var projectObj = {
                     name: '粘贴整块',
                     icon: 'fa-paste',
                     disabled: function (){
+                        if (projectReadOnly) {
+                            return true;
+                        }
                         return BlockController.pasteBtnDisable(project.mainTree.selected);
                     },
                     callback: function () {
@@ -1451,6 +1487,9 @@ var projectObj = {
                 "editEngineer": {
                     name: '编辑工程内容',
                     icon: 'fa-edit',
+                    disabled: function () {
+                        return projectReadOnly;
+                    },
                     visible: function(key, opt){
                          let  selected = project.mainTree.selected;
                          return selected.sourceType==ModuleNames.bills&&project.Bills.isEngineerEst(selected);//当焦点行是“专业工程暂估价”时,右键可见并有效。
@@ -1465,6 +1504,9 @@ var projectObj = {
                 "editService": {
                     name: '编辑服务内容',
                     icon: 'fa-edit',
+                    disabled: function () {
+                        return projectReadOnly;
+                    },
                     visible: function(key, opt){
                         let  selected = project.mainTree.selected;
                         return selected.sourceType==ModuleNames.bills&&project.Bills.isTotalService(selected);//当焦点行是“总承包服务费”时,右键可见并有效。
@@ -1479,6 +1521,9 @@ var projectObj = {
                 "editAccording": {
                     name: '编辑签证及索赔依据',
                     icon: 'fa-edit',
+                    disabled: function () {
+                        return projectReadOnly;
+                    },
                     visible: function(key, opt){
                         let  selected = project.mainTree.selected;
                         return selected.sourceType==ModuleNames.bills&&project.Bills.isClaimVisa(selected);//当焦点行是“签证及索赔计价”时,右键可见并有效。
@@ -1494,6 +1539,9 @@ var projectObj = {
                     name:'智能材料替换',
                     icon: 'fa-edit',
                     disabled:function (key,opt) {
+                        if (projectReadOnly) {
+                            return true;
+                        }
                         let  selected = project.mainTree.selected;
                         return selected.sourceType==ModuleNames.bills ?!(project.Bills.isFXorBX(selected)||selected.source.children.length ==0):true//是分项、补项或叶子清单才有效;
                     },
@@ -1508,6 +1556,9 @@ var projectObj = {
                     name:'生成组价模板',
                     icon: 'fa-puzzle-piece',
                     disabled:function (key,opt) {
+                        if (projectReadOnly) {
+                            return true;
+                        }
                         let selected = project.mainTree.selected;
                         return selected.sourceType != ModuleNames.bills;
                     },
@@ -3103,6 +3154,9 @@ function disableTools(){
     //清单精灵
     $('#elfInsertRation').addClass('disabled');
     $('#elfInsertSingle').addClass('disabled');
+    //模板子目:应用、下一条
+    $('#apply_mbzm').addClass('disabled');
+    $('#next_mbzm').addClass('disabled');
     //特征及内容
     $('#add-rule').find('select').prop('disabled', 'disabled');
     $('#use-to-current').addClass('disabled');
@@ -3117,9 +3171,9 @@ function disableTools(){
     $('#compleRationLib').addClass('disabled');
     $('#compleGljLib').addClass('disabled')
     //库
-    $('#stdBillsGuidanceTab').addClass('disabled');
+    //$('#stdBillsGuidanceTab').addClass('disabled');
     $('#stdBillsTab').addClass('disabled');
-    $('#stdRationTab').addClass('disabled');
+    //$('#stdRationTab').addClass('disabled');
     $('#blockLibTab').addClass('disabled');
     //人材机汇总,选择其他、另存使用
     $('a[data-target="#change-unitFile"]').remove();

+ 7 - 2
web/building_saas/main/js/views/side_tools.js

@@ -10,6 +10,9 @@ $(window).resize(function() {
     loadSideToolsHeight();
     //刷新主界面与各库中间的拖动条宽度:始终保持为一个宽度(在小窗口打开一个库,再放大窗口后,该拖动条宽度会变大)
     SlideResize.setResizeWidth($('#sideResize'));
+    subObj.initGljSubTab();
+    refreshSubSpread();
+
 });
 //造价书与各库左右拖动
 let sideResizeEles = {};
@@ -25,7 +28,8 @@ sideResizeEles.limit = {
     max: `$('#mainRow').width()-150`
 };
 SlideResize.horizontalSlide(sideResizeEles.eleObj, sideResizeEles.limit, function(){
-    MaterialController.showReplaceDiv();
+   // MaterialController.showReplaceDiv();
+    subObj.initGljSubTab();
     pageCCOprObj.resizeWidth();
     BillsElf.setColumnWidthByRate();
     projectObj.refreshMainSpread();
@@ -189,7 +193,8 @@ var sideToolsObj = {
         }
         adaptiveTzjnrWidth();
         autoFlashHeight();
-        MaterialController.showReplaceDiv();
+        subObj.initGljSubTab();
+        //MaterialController.showReplaceDiv();
         pageCCOprObj.resizeWidth();
         billsGuidance.refreshWorkBook();
         billsLibObj.refreshBillsSpread();

+ 4 - 5
web/building_saas/main/js/views/std_billsGuidance_lib.js

@@ -105,10 +105,7 @@ const billsGuidance = (function () {
                 if(!node){
                     return;
                 }
-                if(node.children.length === 0){
-                    billsLibObj.insertBills(stdBillsJobData, stdBillsFeatureData, node);
-                }
-                else {
+                if(node.children.length > 0){
                     node.setExpanded(!node.expanded);
                     //设置展开收起状态
                     sessionStorage.setItem('stdBillsGuidanceExpState', bills.tree.getExpState(bills.tree.items));
@@ -121,6 +118,8 @@ const billsGuidance = (function () {
                         args.sheet.invalidateLayout();
                     });
                     args.sheet.repaint();
+                } else if(!projectReadOnly) {
+                    billsLibObj.insertBills(stdBillsJobData, stdBillsFeatureData, node);
                 }
             }
         }
@@ -737,7 +736,7 @@ const billsGuidance = (function () {
     function bindBtn(){
         //打开清单指引库
         $('#stdBillsGuidanceTab').click(function () {
-            if(libSel.children().length === 0 && !projectReadOnly && !$(this).hasClass('disabled')){
+            if(libSel.children().length === 0 && !$(this).hasClass('disabled')){
                 initLibs(projectInfoObj.projectInfo.engineeringInfo.billsGuidance_lib);
             }
         });

+ 18 - 11
web/building_saas/main/js/views/std_ration_lib.js

@@ -27,8 +27,9 @@ var rationLibObj = {
         if (!this.sectionRationsSpread) {
             this.sectionRationsSpread = SheetDataHelper.createNewSpread($('#stdSectionRations')[0]);
             sheetCommonObj.spreadDefaultStyle(this.sectionRationsSpread);
-
-            this.sectionRationsSpread.bind(GC.Spread.Sheets.Events.CellDoubleClick, this.onRationSpreadCellDoubleClick);
+            if (!projectReadOnly) {
+                this.sectionRationsSpread.bind(GC.Spread.Sheets.Events.CellDoubleClick, this.onRationSpreadCellDoubleClick);
+            }
             this.refreshSettingForHint();
         }
     },
@@ -280,6 +281,9 @@ var rationLibObj = {
                 "insertStdRation": {
                     name: "插入定额",
                     icon: 'fa-sign-in',
+                    disabled: function () {
+                        return projectReadOnly;
+                    },
                     callback: function (key, opt) {
                         let select = $('#stdRationLibSelect'), rationSelect = rationSheet.getSelections();
                         let rationCode = rationSelect.length > 0 ? rationSheet.getText(rationSelect[0].row, 0) : '';
@@ -292,6 +296,9 @@ var rationLibObj = {
                 "replaceStdRation": {
                     name: "替换定额",
                     icon: 'fa-sign-in',
+                    disabled: function () {
+                        return projectReadOnly
+                    },
                     callback: function (key, opt) {
                         let select = $('#stdRationLibSelect'), rationSelect = rationSheet.getSelections();
                         let rationCode = rationSelect.length > 0 ? rationSheet.getText(rationSelect[0].row, 0) : '';
@@ -533,14 +540,12 @@ if($('#stdRationChapter').height() === 0 || $('#stdSectionRations').height() ===
 }
 
 $('#stdRationTab').bind('click', function () {
-    if(!projectReadOnly){
-        var select = $('#stdRationLibSelect');
-        rationLibObj.checkSpread();
-        if (select[0].options.length === 0) {
-            rationLibObj.loadStdRationLibs();
-            rationLibObj.loadStdRationContextMenu();
-        };
-    }
+    var select = $('#stdRationLibSelect');
+    rationLibObj.checkSpread();
+    if (select[0].options.length === 0) {
+        rationLibObj.loadStdRationLibs();
+        rationLibObj.loadStdRationContextMenu();
+    };
 });
 $('#stdRationLibSelect').change(function () {
     var select = $(this);
@@ -694,7 +699,9 @@ function seachRation(){
             rationLibObj.resultSpread = resultSpread;
             bindContextmenuOpr(resultSpread.getActiveSheet());
             SheetDataHelper.loadSheetHeader(rationLibObj.sectionRationsSetting, resultSpread.getActiveSheet());
-            resultSpread.bind(GC.Spread.Sheets.Events.CellDoubleClick, rationLibObj.onRationSpreadCellDoubleClick);
+            if (!projectReadOnly) {
+                resultSpread.bind(GC.Spread.Sheets.Events.CellDoubleClick, rationLibObj.onRationSpreadCellDoubleClick);
+            }
             resultSpread.bind(GC.Spread.Sheets.Events.TopRowChanged, rationLibObj.onRationSpreadTopRowChanged);
         }else {
             rationLibObj.resultSpread.refresh();

+ 95 - 3
web/building_saas/main/js/views/sub_view.js

@@ -10,6 +10,7 @@
 let subSpread = null;
 let subObj = {
     TZJNRrePercent:null,
+    showGljSubTab:false,
     initSubSpread:function () {
         //清单精灵
         BillsElf.buildSheet();
@@ -89,6 +90,54 @@ let subObj = {
             $(gljOprObj.billsTab).click();
         }
         projectObj.mainSpread.focus();
+    },
+    //初始化人材机和项目特征文本两个区域的宽度,改变窗口大小时调用此方法,实时刷新
+    initItemWidth:function (){
+        //总宽度
+        let totalWidth = $('#subItems').width();
+        //人材机和项目特征文本比例
+        const openWidth = 30;//打开项目特征工具条
+        let textVisible = $('#replaceText').is(':visible'),
+            //默认比例
+            textPercent = '15%',
+            rcjPercent = '85%';
+        //文本没显示,则打开工具条固定30px转换百分比
+        if (!subObj.showGljSubTab) {
+            textPercent = openWidth / totalWidth;
+            rcjPercent = 1 - textPercent;
+            textPercent = textPercent * 100 + '%';
+            rcjPercent = rcjPercent * 100 + '%';
+        }
+        //设置特征及内容与排版规则的比例
+        $('#subSpread').css('width', rcjPercent);
+        $('#itemTextDiv').css('width', textPercent);
+        //打开了项目特征,则继续加载人材机表和项目特征文本具体比例
+        if (subObj.showGljSubTab === true) {
+            let rg_sideResizeEles = MaterialController.getSideResize();
+            SlideResize.loadHorizonWidth(rg_sideResizeEles.eleObj.module,
+                [rg_sideResizeEles.eleObj.resize], [rg_sideResizeEles.eleObj.left, rg_sideResizeEles.eleObj.right]);
+            $("#gljSubDiv").width( $('#itemTextDiv').width() - rg_sideResizeEles.eleObj.resize.width() - 30)
+        }
+    },
+    initGljSubTab:function() {
+        if(!($('#linkGLJ').hasClass('active'))){
+            return;
+        }
+        if(this.showGljSubTab == true){
+            $("#gljSubDiv").show();
+            $("#rgResize").show();
+        } else {
+            $("#gljSubDiv").hide();
+            $("#rgResize").hide();
+        }
+        $("#subSpread").addClass("ration_glj_spread");
+        this.initItemWidth();
+    },
+    showGljSubTabData:function () {
+        this.initGljSubTab();
+        if($('#rnc-zm').is(':visible')) zmhs_obj.showCoeData();
+        if($('#rnc-fz').is(':visible')) zmhs_obj.showAssData();
+        refreshSubSpread();
     }
 };
 
@@ -97,8 +146,11 @@ let subObj = {
 $("#linkGLJ").click(function(){
     $("#subItems").children().hide();//控制显示subSpread,隐藏特征及内容spread
     //show
-    MaterialController.showReplaceDiv();
+    //MaterialController.showReplaceDiv();
+    subObj.showGljSubTabData();
     $("#subSpread").show();
+    $("#itemTextDiv").show();
+    $("#gljItemTab").show();
     pageCCOprObj.active = false;
     subSpread.options.allowUserDragFill = false;
     refreshSubSpread();
@@ -579,7 +631,8 @@ function refreshSubSpread(){
         if(MaterialController.spread) MaterialController.spread.refresh();
     }
     BillsElf.refreshWorkBook();
-    if($('#linkZMHS').hasClass('active')) zmhs_obj.refresh();
+    //if($('#linkZMHS').hasClass('active')) zmhs_obj.refresh();
+    if($('#rnc-zm').is(':visible')|| $('#rnc-fz').is(':visible')) zmhs_obj.refresh();
     if($('#linkMBZM').hasClass('active')) mbzm_obj.refresh();
 }
 
@@ -661,4 +714,43 @@ $('#linkGCLMX').on('shown.bs.tab', function () {
 
 $('#linkAZZJF').on('shown.bs.tab', function () {
     gljOprObj.showDataIfRationSelect(projectObj.project.mainTree.selected, '111111');
-});
+});
+
+$('.gljSubTab ul li a').bind('click',function () {
+    if($(this).hasClass("active")){//点击展开了后又点击了自身,这时要隐藏tab和修改本身class
+        subObj.showGljSubTab = false;
+        closeTab(this);
+        subSpread.focus();//要加上这个,不然右边侧栏的选中状态的border线不会消换
+    }else {
+        subObj.showGljSubTab = true;
+    }
+    subObj.initGljSubTab();
+    refreshSubSpread();
+});
+
+$('.gljSubTab ul li a').on('shown.bs.tab', function () {
+    if(this.hash == "#rnc-xm"){
+        MaterialController.showItemCharacterText();
+    }else if(this.hash == "#rnc-zm"){
+        zmhs_obj.initCoeSpread();
+        zmhs_obj.refresh();
+        zmhs_obj.showCoeData();
+    }else if(this.hash == "#rnc-fz"){
+        zmhs_obj.initAssSpread();
+        zmhs_obj.refresh();
+        zmhs_obj.showAssData();
+    }
+});
+
+function closeTab(elem) {
+    setTimeout(function () {
+        $(elem).removeClass("show");
+        $(elem).removeClass("active");
+        $(elem).attr("aria-selected",false);
+        $(elem.hash).removeClass("show");
+        $(elem.hash).removeClass("active");
+    },50);
+
+}
+
+

+ 41 - 28
web/building_saas/main/js/views/zmhs_view.js

@@ -45,30 +45,35 @@ let zmhs_obj = {
         }
     },
     initSpread:function () {
-        this.coeSpread = SheetDataHelper.createNewSpread($("#coeSpread")[0]);
-        sheetCommonObj.spreadDefaultStyle(this.coeSpread);
-        this.assSpread = SheetDataHelper.createNewSpread($("#assSpread")[0]);
-        sheetCommonObj.spreadDefaultStyle(this.assSpread);
-
-        this.coeSheet = this.coeSpread.getSheet(0);
-        sheetCommonObj.initSheet(this.coeSheet, this.coeSetting, 30);
-        this.coeSheet.name('ration_coe');
-        this.coeSheet.bind(GC.Spread.Sheets.Events.CellClick, this.onCoeCellClick);
-        this.coeSpread.bind(GC.Spread.Sheets.Events.ButtonClicked, this.onButtonClick);
-        this.coeSheet.bind(GC.Spread.Sheets.Events.ValueChanged,this.onCoeValueChange);
-        this.coeSheet.bind(GC.Spread.Sheets.Events.SelectionChanged, function (e,args) {
-            args.sheet.repaint();
-        });
-
-
-        this.assSheet = this.assSpread.getSheet(0);
-        sheetCommonObj.initSheet(this.assSheet, this.assSetting, 30);
-        this.assSheet.bind(GC.Spread.Sheets.Events.EditEnded, this.onAssEditEnded);
-        this.assSheet.bind(GC.Spread.Sheets.Events.RangeChanged, this.onAssRangeChanged);
-        this.assSheet.name('ration_ass');
-        SheetDataHelper.protectdSheet(this.coeSheet);
-        if(projectReadOnly){
-            disableSpread(zmhs_obj.coeSpread);
+        this.initCoeSpread();
+        this.initAssSpread();
+    },
+    initCoeSpread:function () {
+        if(zmhs_obj.coeSpread == null){
+            this.coeSpread = SheetDataHelper.createNewSpread($("#coeSpread")[0]);
+            sheetCommonObj.spreadDefaultStyle(this.coeSpread);
+            this.coeSheet = this.coeSpread.getSheet(0);
+            sheetCommonObj.initSheet(this.coeSheet, this.coeSetting, 30);
+            this.coeSheet.name('ration_coe');
+            this.coeSheet.bind(GC.Spread.Sheets.Events.CellClick, this.onCoeCellClick);
+            this.coeSpread.bind(GC.Spread.Sheets.Events.ButtonClicked, this.onButtonClick);
+            this.coeSheet.bind(GC.Spread.Sheets.Events.ValueChanged,this.onCoeValueChange);
+            this.coeSheet.bind(GC.Spread.Sheets.Events.SelectionChanged, function (e,args) {
+                args.sheet.repaint();
+            });
+            SheetDataHelper.protectdSheet(this.coeSheet);
+        }
+    },
+    initAssSpread:function () {
+        if(zmhs_obj.assSheet == null){
+            this.assSpread = SheetDataHelper.createNewSpread($("#assSpread")[0]);
+            sheetCommonObj.spreadDefaultStyle(this.assSpread);
+            this.assSheet = this.assSpread.getSheet(0);
+            sheetCommonObj.initSheet(this.assSheet, this.assSetting, 30);
+            this.assSheet.bind(GC.Spread.Sheets.Events.EditEnded, this.onAssEditEnded);
+            this.assSheet.bind(GC.Spread.Sheets.Events.RangeChanged, this.onAssRangeChanged);
+            this.assSheet.name('ration_ass');
+            SheetDataHelper.protectdSheet(this.assSheet);
         }
     },
     showCoeData:function (node) {
@@ -81,6 +86,8 @@ let zmhs_obj = {
         }
         sheetCommonObj.showData(this.coeSheet, this.coeSetting,coeList);
         if (coeList.length > 0) {
+            this.coeSheet.suspendPaint();
+            this.coeSheet.suspendEvent();
             for(let i =0;i<coeList.length;i++ ){
                 if(gljUtil.isDef(coeList[i].option_codes)&&coeList[i].option_codes!=""){
                     this.getComboBoxForCodes(coeList[i],i);//设置可选类型的下拉框
@@ -90,8 +97,13 @@ let zmhs_obj = {
                     this.coeSheet.setCellType(i, 1, sheetCommonObj.getCustomerCoeCellType(this.generateHtmlString,this.bindCusEditorValue,this.updateCusCoeAfterEditor), GC.Spread.Sheets.SheetArea.viewport);
                 }
             }
+            this.coeSheet.resumeEvent();
+            this.coeSheet.resumePaint();
         }
         this.coeSheetData = coeList;
+        if(projectReadOnly){
+            disableSpread(zmhs_obj.coeSpread);
+        }
     },
     getComboBoxForCodes:function (coe,i) {
         this.coeSheet.getCell(i, 2, GC.Spread.Sheets.SheetArea.viewport).locked(false);
@@ -103,7 +115,6 @@ let zmhs_obj = {
 
     },
 
-
     showAssData:function (node) {
         this.assSheet.suspendPaint();
         this.assSheet.suspendEvent();
@@ -115,7 +126,9 @@ let zmhs_obj = {
         this.assSheet.getRange(assList.length,-1,this.assSheet.getRowCount()-assList.length, -1, GC.Spread.Sheets.SheetArea.viewport).locked(true);
         this.assSheet.resumePaint();
         this.assSheet.resumeEvent();
-
+        if(projectReadOnly){
+            disableSpread(this.assSpread);
+        }
     },
     refreshAfterUpdate:function(result,reload){
         let ration_glj = projectObj.project.ration_glj;
@@ -423,8 +436,8 @@ let zmhs_obj = {
     }
 };
 
-let zmhsResize = zmhs_obj.getSideResize();
+/*let zmhsResize = zmhs_obj.getSideResize();
 SlideResize.horizontalSlide(zmhsResize.eleObj, zmhsResize.limit, function () {
     zmhs_obj.refresh();
-});
+});*/
 

+ 0 - 26
web/building_saas/pm/js/pm_newMain.js

@@ -1780,32 +1780,6 @@ function init() {
             $.bootstrapLoading.end();
         })
     }
-    //return;
-    //$.bootstrapLoading.start();
-    /*GetAllProjectData(function (datas) {
-        //设置工程专业
-        for (let data of datas) {
-            if (data.projType === projectType.tender) {
-                data.feeStandardName = data.property.feeStandardName || '';
-            }
-        }
-        CommonAjax.post('/options/getOptions', [], function (rstData) {
-            projTreeObj.setting.style.selectedColor = rstData.COLOROPTS.SELECTED.backColor;
-            projTreeObj.tree = pmTree.createNew(projTreeObj.setting, datas);
-            projTreeObj.tree.selected = projTreeObj.tree.items[0];
-            projTreeObj.workBook = projTreeObj.buildSheet(projTreeObj.workBook,'projSpread',projTreeObj.setting);
-            projTreeObj.workBook.getSheet(0).frozenColumnCount(2);
-            sheetCommonObj.spreadDefaultStyle(projTreeObj.workBook);
-            projTreeObj.sumEngineeringCost();
-            projTreeObj.showTreeData(projTreeObj.tree.items, projTreeObj.setting.header, projTreeObj.workBook.getActiveSheet());
-            //初始选择
-            let initSel = projTreeObj.workBook.getSheet(0).getSelections()[0] ? projTreeObj.workBook.getSheet(0).getSelections()[0] : {row: 0, rowCount: 1};
-            projTreeObj.initSelection(initSel,null,projTreeObj.workBook.getActiveSheet());
-            $.bootstrapLoading.end();
-            autoFlashHeight();
-            projTreeObj.workBook.refresh();
-        });
-    });*/
     engineering = engineeringList !== null && engineeringList !== undefined ? JSON.parse(engineeringList) : [];
 }