Jelajahi Sumber

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

zhangweicheng 6 tahun lalu
induk
melakukan
77435beb47

+ 35 - 0
modules/all_models/block_lib_model.js

@@ -0,0 +1,35 @@
+/**
+ * Created by CSL on 2018-12-17.
+ */
+let mongoose = require('mongoose');
+let Schema = mongoose.Schema;
+
+let dataSchema = new Schema({
+    ID: String,
+    NextSiblingID: String,
+    ParentID: String,
+    children: [],
+    code: String,
+    compilationID: String,
+    copyTime: Number,
+    firstNodeType: Number,
+    isFBFX: {type: Boolean, default: true},
+    itemCharacterText: String,
+    name: String,
+    nodeName: String,
+    type: Number,
+    unit: String,
+    unitFee: String,
+    _id: false
+},{versionKey:false});
+
+let blockLibsSchema = new Schema({
+    userID: String,
+    compilationID: String,
+    libID: Number,
+    libName: String,
+    datas: [dataSchema],
+    share: {}
+},{versionKey:false});
+
+mongoose.model('blockLibsModel', blockLibsSchema, 'block_libs');

+ 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);
 

+ 23 - 0
modules/main/controllers/block_lib_controller.js

@@ -0,0 +1,23 @@
+/**
+ * Created by CSL on 2018-12-17.
+ */
+
+let mongoose = require('mongoose');
+let blFacade = require('../facade/block_lib_facade');
+
+module.exports = {
+    doController: async function (req, res) {
+        let result = {error: 0, message: '', data: null};
+        try {
+            let funcName = req.url.replace(/\//g, "");
+            let dataObj = JSON.parse(req.body.data);
+            result.data = await blFacade[funcName](dataObj);
+        } catch (err) {
+            console.log(err);
+            result.error = 1;
+            result.message = err.message;
+        }
+        res.json(result);
+    }
+};
+

+ 38 - 0
modules/main/facade/block_lib_facade.js

@@ -0,0 +1,38 @@
+/**
+ * Created by CSL on 2018-12-17.
+ */
+
+let mongoose = require('mongoose');
+let blModel = mongoose.model('blockLibsModel');
+
+module.exports = {
+    getLibNames: getLibNames,
+    getLib: getLib,
+    getLibNamesAndFirstLib: getLibNamesAndFirstLib,
+    saveBlock: saveBlock
+};
+
+// userID、compilationID
+async function getLibNames(data) {
+    let libNames = await blModel.find({userID: data.userID, compilation: data.compilationID}, ["libID","libName","-_id"]);
+    return libNames;
+};
+
+// libID
+async function getLib(data) {
+    let lib = await blModel.findOne({libID: data.libID});
+    return lib;
+};
+
+// userID、compilationID
+async function getLibNamesAndFirstLib(data) {
+    let libNames = await getLibNames(data);
+    let firstLib = await getLib(libNames[0]);
+    return {libNames: libNames, firstLib: firstLib};
+};
+
+// libID
+async function saveBlock(data) {
+    await blModel.update({libID: data.libID}, {"$addToSet": {"datas": data}});
+    return 'saveBlock.OK';
+};

+ 19 - 0
modules/main/routes/block_lib_route.js

@@ -0,0 +1,19 @@
+/**
+ * Created by CSL on 2018-12-14.
+ */
+
+let express = require('express');
+let blController = require('../controllers/block_lib_controller');
+
+module.exports = function (app) {
+    let blRouter = express.Router();
+    let funcNames = ['getLibNames', 'getLib', 'getLibNamesAndFirstLib', 'saveBlock'];
+    for (let name of funcNames) {
+        blRouter.post(`/${name}`, blController.doController);
+    }
+    app.use('/blockLib', blRouter);
+}
+
+
+
+

+ 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;

+ 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();
             }

+ 34 - 19
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,
@@ -175,6 +174,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 +192,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 +391,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 +400,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 +413,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;

+ 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();

+ 3 - 2
web/building_saas/complementary_ration_lib/js/gljSelect.js

@@ -39,7 +39,7 @@ let gljSelOprObj = {
             delete glj.ID;
         }
     },
-    getSelGljItems: function(stdGljLibId, callback) {
+    /*getSelGljItems: function(stdGljLibId, callback) {
         let me = this;
         CommonAjax.post('/complementartGlj/api/getGljItems', {stdGljLibId: stdGljLibId}, function (rstData) {
             me.stdGljList = rstData.stdGljs;
@@ -61,8 +61,9 @@ let gljSelOprObj = {
                 callback();
             }
         });
-    },
+    },*/
     getGljClassTree: function (gljLibId, callback) {
+        console.log('enter2');
         let me = this;
         let url = '/complementartGlj/api/getGljTree';
         let postData = {gljLibId: gljLibId};

+ 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);

+ 7 - 6
web/building_saas/main/html/main.html

@@ -38,9 +38,7 @@
         let lockBills = '<%- projectData.property.lockBills %>';
         let userAccount = '<%- userAccount %>';
         let userID = '<%- userID %>';
-        console.log('<%- projectReadOnly %>');
         let projectReadOnly = JSON.parse('<%- projectReadOnly %>');
-        console.log(projectReadOnly);
         const G_SHOW_BLOCK_LIB = true;
 //        const G_SHOW_BLOCK_LIB = false;
     </script>
@@ -637,7 +635,7 @@
                               <div class="tab-pane" id="kmbk">
                                   <div class="tools-bar-height-d container-fluid" id="kmbkToolsBar">
                                       <div class="p-1 row">
-                                          <select class="form-control form-control-sm col-6" id="exampleSelect1">
+                                          <select class="form-control form-control-sm col-6" id="select_block_lib_names">
                                               <option>我的模板库</option>
                                           </select>
                                           <div class="col-6">
@@ -1093,6 +1091,9 @@
                 </div>
                 <div class="modal-body" style="padding-left: 0; padding-right: 3px; margin-left: 0;">
                         <div style="width: 32%; float: left;">
+                            &nbsp;
+                            <input type="radio" class="glj-radio" name="glj" value="stdGLJ">标准&nbsp;&nbsp;
+                            <input type="radio" class="glj-radio" name="glj" value="complementaryGLJs">补充&nbsp;&nbsp;
                             <div  class="modal-auto-height" id="componentTreeDiv" style=" height: 435px; overflow: hidden;">
                                 <!--<div class="print-list">-->
                                 <div style="width: 100%; height: 100%; overflow: auto">
@@ -1105,9 +1106,9 @@
                             <div id="gljRadios">
                                 <div class="row">
                                     <div class="col-7" style="margin-top: 5px;">
-                                        <input type="radio" class="glj-radio" name="glj" value="allGljs" checked>所有&nbsp;&nbsp;
+                                        <!--<input type="radio" class="glj-radio" name="glj" value="allGljs" checked>所有&nbsp;&nbsp;
                                         <input type="radio" class="glj-radio" name="glj" value="stdGLJ">标准&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">
@@ -1116,7 +1117,7 @@
                                 </div>
                                 <!-- <div class="form-group"><input id="searchGlj" type="text" class="form-control-sm" placeholder="查询工料机"></div>-->
                             </div>
-                            <div class="modal-auto-height" style="overflow: hidden" id="gljLibSheet">
+                            <div class="modal-auto-height" style="overflow: hidden;height: 420px" id="gljLibSheet">
 
                             </div>
                         </div>

+ 71 - 41
web/building_saas/main/js/views/block_lib.js

@@ -3,6 +3,8 @@
  * Created by CSL on 2018-09-19.
  */
 var blockLibObj = {
+    libs: [],
+    activeLib: null,
     mainSpread: null,
     mainSheet: null,
     mainTree: null,
@@ -67,10 +69,10 @@ var blockLibObj = {
     },
     cloneType: null,
 
-    buildSheet: function () {
+    buildSheet: async function () {
         $.bootstrapLoading.start();
         let me = this;
-        me.mainDatas = [
+       /* me.mainDatas = [
             {ID: 1, ParentID: -1, NextSiblingID: 2, nodeName: '分类1', type: 1},
             {ID: 2, ParentID: -1, NextSiblingID: 3, nodeName: '分类2', type: 1},
             {ID: 3, ParentID: -1, NextSiblingID: 4, nodeName: '分类3', type: 1},
@@ -79,9 +81,10 @@ var blockLibObj = {
             {ID: 7, ParentID: -1, NextSiblingID: 8, nodeName: '分类7', type: 1},
             {ID: 9, ParentID: -1, NextSiblingID: -1, nodeName: '分类9', type: 1}//,
             // {ID: 201, ParentID: 52, NextSiblingID: -1, nodeName: '块201', type: 2}
-        ];
+        ];*/
 
-        if (me.mainSpread) {
+       if (me.libs.length > 0) me.libs.splice(0, me.libs.length);
+       if (me.mainSpread) {
             me.mainSpread.destroy();
             me.mainSpread = null;
         };
@@ -94,6 +97,21 @@ var blockLibObj = {
             me.rationSpread = null;
         };
 
+        let namesAndLib = await ajaxPost('/blockLib/getLibNamesAndFirstLib', {userID: userID, compilationID: projectInfoObj.projectInfo.compilation});
+        me.mainDatas = namesAndLib.firstLib.datas;
+        me.libs.push(namesAndLib.firstLib);
+        me.activeLib = namesAndLib.firstLib;
+
+        function getLibNamesHtml(libsArr) {
+            let result = '';
+            for (let lib of libsArr) {
+                result += '<option value="' + lib.libID + '">' + lib.libName + '</option>';
+            };
+            return result;
+        };
+        let html = getLibNamesHtml(namesAndLib.libNames);
+        $("#select_block_lib_names").html(html);
+
         me.mainSpread = SheetDataHelper.createNewSpread($('#div_block_tree')[0]);
         // me.mainSpread = TREE_SHEET_HELPER.createNewSpread($('#div_block_tree')[0]);
         me.mainSheet = me.mainSpread.getSheet(0);
@@ -345,43 +363,45 @@ var blockLibObj = {
         };
         return new TreeCell();
     },
-    newNode: function (nodeType, nodeName, categoryID, source){     // 1 分类(只用前两个参数)  2 块文件
+    newNode: async function (nodeType, nodeName, categoryID, source){     // 1 分类(只用前两个参数)  2 块文件
         let tree = blockLibObj.mainTree;
-        let pID = -1, nID = -1;
-        let select = tree.selected;
-        if (nodeType == 1){
-            if (!select) {
-                nID = -1;
-            }
-            else if (select.data.type == 1){
-                nID = select.getNextSiblingID();
-            }
-            else if (select.data.type == 2){
-                nID = select.parent.getNextSiblingID();
-            };
-        }
-        else if (nodeType == 2) {
-            pID = categoryID;
-            nID = -1;
-        }
-
-        let newN = tree.insert(pID, nID);
-        newN.data.type = nodeType;
-        newN.data.nodeName = nodeName;
+        let ID = uuid.v1();
+        let pID = (nodeType == 2) ? categoryID : -1;
+        let nID = -1;
+
+        // 先生成临时结点数据用于提交入库,成功后才生成树结点,并在UI上刷新显示。
+        let temp = {};
+        temp.data = {
+            ID: ID,
+            ParentID: pID,
+            NextSiblingID: nID,
+            libID: blockLibObj.activeLib.libID,
+            type: nodeType,
+            nodeName: nodeName
+        };
         if (nodeType == 2)
-            blockLibObj.assignData(newN, source);
-
-        tree.selected = newN;
-        let sheet = blockLibObj.mainSheet;
-        sheet.suspendPaint();
-        sheet.suspendEvent();
-        let idx = tree.items.indexOf(newN);
-        sheet.addRows(idx, 1);
-        sheet.getRange(idx, 0, 1, 1).locked(true);
-        sheet.setValue(idx, 0, newN.data.nodeName);
-        sheet.setSelection(idx, 0, 1, 1);
-        sheet.resumeEvent();
-        sheet.resumePaint();
+            blockLibObj.assignData(temp, source);
+
+        try {
+            await ajaxPost('/blockLib/saveBlock', temp.data);
+            let newN = tree.insertByID(ID, pID, nID);
+            newN.data = temp.data;
+            tree.selected = newN;
+            let sheet = blockLibObj.mainSheet;
+            sheet.suspendPaint();
+            sheet.suspendEvent();
+            let idx = tree.items.indexOf(newN);
+            sheet.addRows(idx, 1);
+            sheet.getRange(idx, 0, 1, 1).locked(true);
+            sheet.setValue(idx, 0, newN.data.nodeName);
+            sheet.setSelection(idx, 0, 1, 1);
+            sheet.resumeEvent();
+            sheet.resumePaint();
+        }
+        catch (err) {
+            console.log(err.message);
+            return;
+        };
     },
     assignData: function (block, source){
         block.data.compilationID = source.compilationID;
@@ -576,17 +596,27 @@ var blockLibObj = {
         };
         vBlock_WC = JSON.parse(JSON.stringify(vBlock_WC));
         BlockController.confirmPaste(vBlock_WC, projectNode, 'sub');
+    },
+    checkShow: async function () {   // 这里需要处理异步:模板库装载完再弹出位置选择窗。
+        if (!$("#kmbk").is(":visible")){  // 如果还没显示
+            if (!blockLibObj.mainSpread){
+                await blockLibObj.buildSheet();
+            };
+            $('#blockLibTab').click();  // 强制显示
+        };
+        $("#div_createBlocks").modal({show: true});
     }
 };
 
-$(document).ready(function(){
+$(document).ready(function(){    // 这里不需要处理异步:因为不需要弹出位置选择窗。
     $('#blockLibTab').on('click', function (){
-        if ($("#kmbk").is(":visible")){
+        if ($("#kmbk").is(":visible")){    // 显示状态下
             if (!blockLibObj.mainSpread){
                 blockLibObj.buildSheet();
             };
         }
     });
+
     $('#btn_block_newFolder').on('click', function (){
         $('#input_block_newFolder').val('');
     });

+ 32 - 3
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){
@@ -1410,6 +1412,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);
+            }
+        }
     }
 }
 
@@ -1477,9 +1499,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();*/
         }
     });
 /*    //工料机搜索
@@ -1497,6 +1525,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;

+ 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);
 
         }

+ 64 - 16
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,14 +1556,14 @@ 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;
                     },
-                    callback:function(){
-                        if (!$("#kmbk").is(":visible")){
-                            $('#blockLibTab').click()
-                        };
-                        $("#div_createBlocks").modal({show: true});
+                    callback: function(){
+                        blockLibObj.checkShow();
                     },
                     visible: function(key, opt){
                         return G_SHOW_BLOCK_LIB;
@@ -2976,13 +3024,13 @@ $(function () {
         $('#clone_option_noCover').prop("checked", true);
     });
 
-    $("#btn_block_createBlocks").click(function () {
+    $("#btn_block_createBlocks").click(async function () {
         if ($("#select_block_category")[0].options.length < 1) return;
         let cID = $("#select_block_category").val();
         let selected = projectObj.project.mainTree.selected;
         let cover = $('#ckb_block_exist_cover').prop("checked");
-        function createBlocks(aNode, categoryID){
-            function createBlock(node) {
+        async function createBlocks(aNode, categoryID){
+            async function createBlock(node) {
                 if (node.data.name == undefined || node.data.name == '') return;  // 清单名称为空,不生成块模板文件
                 if (node.children.length == 0) return;
                 // 封装成伟城的块文件格式,直接调用伟城接口(定额这里的业务太多太庞杂,不要再重做一遍,尽量共用,维护代价小)
@@ -3005,10 +3053,10 @@ $(function () {
                     if (cover) blockLibObj.assignData(extN, vBlock_WC);
                 }
                 else
-                    blockLibObj.newNode(2, fileName, categoryID, vBlock_WC);
+                    await blockLibObj.newNode(2, fileName, categoryID, vBlock_WC);
             };
 
-            function createRecursion(node){
+            async function createRecursion(node){
                 if (!node) return;
 
                 if (calcTools.isLeafBill(node)) createBlock(node);
@@ -3018,12 +3066,12 @@ $(function () {
             };
 
             if (calcTools.isLeafBill(aNode))
-                createBlock(aNode)
+               await createBlock(aNode)
             else
-                createRecursion(aNode.firstChild());
+               await createRecursion(aNode.firstChild());
         };
 
-        createBlocks(selected, cID);
+        await createBlocks(selected, cID);
         blockLibObj.loadDetailDatas(blockLibObj.mainTree.selected);
         $("#div_createBlocks").modal("hide");
     });

+ 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) : [];
 }