Przeglądaj źródła

Merge branch 'master' of http://192.168.1.12:3000/SmartCost/ConstructionCost

TonyKang 7 lat temu
rodzic
commit
655e844518

+ 2 - 0
modules/all_models/project_glj.js

@@ -89,6 +89,8 @@ let modelSchema = {
     mix_ratio_id: Number,
     // 显示关联父级工料机code(组合物用)
     connect_code: String,
+    materialType: Number,   //三材类别
+    materialCoe: Number,    //三材系数
     ratio_data: Schema.Types.Mixed
 };
 mongoose.model(collectionName, new Schema(modelSchema, {versionKey: false}));

+ 1 - 1
modules/glj/controllers/glj_controller.js

@@ -82,7 +82,7 @@ class GLJController extends BaseController {
         try {
             // 可编辑的字段
             let editableField = ['is_evaluate', 'unit_price.market_price', 'is_adjust_price', 'mix_ratio.consumption',
-                'supply', 'supply_quantity'];
+                'supply', 'supply_quantity','delivery_address','delivery','materialType','materialCoe'];
             if (editableField.indexOf(field) < 0) {
                 throw '对应字段不能编辑';
             }

+ 3 - 1
modules/glj/models/glj_list_model.js

@@ -596,7 +596,9 @@ class GLJListModel extends BaseModel {
                 unit: tmp.unit === undefined ? '' : tmp.unit,
                 type: tmp.gljType,
                 adjCoe:tmp.adjCoe,
-                original_code:tmp.code
+                original_code:tmp.code,
+                materialType: tmp.materialType,   //三材类别
+                materialCoe: tmp.materialCoe
             };
             gljInsertData.push(gljData);
 

+ 2 - 0
modules/main/facade/ration_facade.js

@@ -269,6 +269,8 @@ async function addRationGLJ(std,newRation) {
                 newGLJ.type = std_glj.gljType;
                 newGLJ.repositoryId = std_glj.repositoryId;
                 newGLJ.adjCoe = std_glj.adjCoe;
+                newGLJ.materialType = std_glj.materialType;
+                newGLJ.materialCoe = std_glj.materialCoe;
                 let info = await  ration_glj_facade.getInfoFromProjectGLJ(newGLJ,unitPriceFileId);
                 newGLJ = ration_glj_facade.createNewRecord(info);
                 newRationGLJList.push(newGLJ);

+ 2 - 0
modules/pm/models/project_property_template.js

@@ -9,6 +9,7 @@ const defaultDecimal = {
     glj: {quantity: 3, unitPrice: 2},
     feeRate: 2,
     quantity_detail: 4,
+    material:5,//三材系数
     process: 6
 };
 const displaySetting = {
@@ -115,6 +116,7 @@ const projectFeature = [
     {dispName: '基础类型', key: 'baseType', value: ''},
     {dispName: '建筑特征', key: 'buildingFeature', value: ''},
     {dispName: '建筑面积(m2)', key: 'buildingArea', value: ''},
+    {dispName: '其中地下室建筑面积(m2)', key: 'basementBuildingArea', value: ''},
     {dispName: '总层数', key: 'totalFloors', value: ''},
     {dispName: '地下室层数(+/-0.00以下)', key: 'basementFloors', value: ''},
     {dispName: '建筑层数(+/-0.00以下)', key: 'buildingFloors', value: ''},

+ 2 - 0
modules/ration_glj/facade/ration_glj_facade.js

@@ -578,6 +578,8 @@ function getGLJSearchInfo(ration_glj) {
         market_price: ration_glj.basePrice,
         repositoryId: ration_glj.repositoryId,
         adjCoe: ration_glj.adjCoe,
+        materialType:ration_glj.materialType,
+        materialCoe:ration_glj.materialCoe,
         from: ration_glj.from ? ration_glj.from : 'std'//std:标准工料机库, cpt:补充工料机库
     };
     let glj_type_object = glj_type_util.getStdGljTypeCacheObj();

+ 7 - 3
modules/users/controllers/login_controller.js

@@ -75,15 +75,19 @@ class LoginController {
             if (!result) {
                 throw '标记用户信息失败!';
             }
-
             let compilationModel = new CompilationModel();
-            compilationList = preferenceSetting.login_ask === 1 ? await compilationModel.getList() : [];
+            if(preferenceSetting.login_ask === 1 || preferenceSetting.select_version === ''){
+                preferenceSetting.login_ask = 1;
+                compilationList = await  compilationModel.getList();
+            }
+            else{
+                compilationList = [];
+            }
             // 获取编办信息
             let sessionCompilation = request.session.sessionCompilation;
 
             if (preferenceSetting.login_ask === 0 && !sessionCompilation &&
                 preferenceSetting.select_version !== '') {
-
                 let compilationData = await compilationModel.getCompilationById(preferenceSetting.select_version);
                 request.session.sessionCompilation = compilationData;
             }

+ 69 - 0
modules/users/controllers/user_controller.js

@@ -12,6 +12,8 @@ import LogModel from "../models/log_model";
 import SettingModel from "../models/setting_model";
 import SettingType from "../../common/const/setting_type_const";
 import CompilationModel from "../models/compilation_model";
+import mongoose from "mongoose";
+import moment from "moment";
 
 class UserController extends BaseController {
 
@@ -189,6 +191,73 @@ class UserController extends BaseController {
         response.redirect(request.headers.referer);
     }
 
+    /*
+    * 版本激活
+    * */
+    async activateVersion(request, response){
+        try{
+            let userModel = new UserModel();
+            let sessionUser = request.session.sessionUser;
+            let data = JSON.parse(request.body.data);
+            let activateCode = data.activateCode,
+                activateCompilation = data.activateCompilation;
+            let isActivated = true;//调激活接口
+            if(!isActivated){
+                throw '激活失败';
+            }
+            //激活成功,更新入库
+            let userObjId = mongoose.Types.ObjectId(sessionUser.id);
+            let versionInfo = {};
+            versionInfo.compilationId = activateCompilation;
+            versionInfo.activatedDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
+            await userModel.addVersion({_id: userObjId}, versionInfo);
+            response.json({error: 0, msg: 'success'});
+        }
+        catch (error){
+            response.json({error: 1, msg: error})
+        }
+    }
+    /*
+    * 更新版本状态
+    * */
+    async updateVersionState(request, response){
+        try{
+            let userModel = new UserModel();
+            let activated = request.body.activated,
+                userId = request.body.userId,
+                compilationId = request.body.compilationId;
+            if(activated){
+                let versionInfo = {};
+                versionInfo.compilationId = compilationId;
+                versionInfo.activatedDate = moment(Date.now()).format('YYYY-MM-DD HH:mm:ss');
+                await userModel.addVersion({_id: mongoose.Types.ObjectId(userId)}, versionInfo);
+            }
+            else{
+                await userModel.removeVersion(userId, compilationId);
+            }
+            response.json({error: 0, msg: 'success'});
+        }
+        catch (error){
+            response.json({error: 1, msg: error});
+        }
+    }
+
+    /*
+    * 获取用户版本信息
+    * */
+    async getVersionInfo(request, response){
+        try{
+            let userModel = new UserModel();
+            let userId = request.session.sessionUser.id;
+            let userData = await userModel.findDataById(userId);
+            let versionInfo = userData ? userData.versionInfo ? userData.versionInfo : [] : [];
+            response.json({error: 0, msg: 'success', data: versionInfo});
+        }
+        catch(error){
+            response.json({error: 1, msg: error, data: null});
+        }
+    }
+
 }
 
 export default UserController;

+ 9 - 0
modules/users/models/user_model.js

@@ -191,6 +191,15 @@ class UserModel extends BaseModel {
         return this.db.update(condition, updateData);
     }
 
+    async addVersion(condition, versionInfo){
+        return await this.db.findOneAndUpdate(condition, {$addToSet: {versionInfo: versionInfo}});
+    }
+
+    async removeVersion(userId, compilationId){
+        let userObjId = mongoose.Types.ObjectId(userId);
+        return await this.db.findOneAndUpdate({_id: userObjId}, {$pull: {versionInfo: {compilationId: compilationId}}});
+    }
+
 }
 
 export default UserModel;

+ 2 - 0
modules/users/routes/user_route.js

@@ -19,5 +19,7 @@ module.exports = function (app) {
     router.get('/preferences', userController.init, userController.preferences);
     router.post('/save-preferences', userController.init, userController.savePreferences);
     router.post('/info', userController.init, userController.saveData);
+
+    router.post('/getVersionInfo', userController.init, userController.getVersionInfo);
     app.use('/user',router);
 };

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

@@ -220,8 +220,15 @@
                                                   </select>
                                               </p>
                                               <p style="text-align: center">
+                                                  <% if (projectData.property.lockBills == true) { %>
+                                                  <button class="btn btn-primary btn-sm disabled" type="button" id="use-to-current">应用到选中清单</button>
+                                                  <button class="btn btn-primary btn-sm disabled" type="button" id="use-to-all">应用到所有清单</button>
+                                                  <% } else { %>
                                                   <button class="btn btn-primary btn-sm" type="button" id="use-to-current">应用到选中清单</button>
                                                   <button class="btn btn-primary btn-sm" type="button" id="use-to-all">应用到所有清单</button>
+                                                  <% } %>
+                                                  <!--<button class="btn btn-primary btn-sm" type="button" id="use-to-current">应用到选中清单</button>
+                                                  <button class="btn btn-primary btn-sm" type="button" id="use-to-all">应用到所有清单</button>-->
                                               </p>
                                           </div>
                                       </div>

+ 15 - 0
web/building_saas/main/js/models/calc_program.js

@@ -579,6 +579,14 @@ let calcTools = {
         for (let rID of rationIDs){
             rationNodes.push(nodes['id_' + rID]);
         };
+
+        // 工料机形式的定额
+        let items = projectObj.project.mainTree.items;
+        for (let item of items){
+            if (item.data.projectGLJID == PGLJID)
+                rationNodes.push(item);
+        };
+
         return rationNodes;
     },
     getNodesByProgramID(programID){
@@ -1666,6 +1674,13 @@ class CalcProgram {
                 leafBills.push(leafBill);
         };
 
+        mergeArr(billNodes, leafBills);
+
+        for (let bill of billNodes){
+            let changeBills = me.calculate(bill, true, false);
+            mergeArr(allChangedNodes, changeBills);
+        };
+
         me.calcFormulaNodes(allChangedNodes);
         me.saveNodes(allChangedNodes, callback);
     };

+ 5 - 3
web/building_saas/main/js/models/composition.js

@@ -112,7 +112,8 @@ Composition.prototype.updateConsumptionInCache = function (pid,recode,updateData
         //乘以父工料机的消耗量得到该组成物总消耗量的改变量
         changValue = operationWithRound(parentGlj.quantity,changValue,"glj.quantity","*");
         let oldQuantity =  scMathUtil.roundForObj(mglj.quantity,decimal);
-        mglj.quantity = scMathUtil.roundToString(oldQuantity+changValue,decimal);
+        mglj.quantity = scMathUtil.roundForObj(oldQuantity+changValue,decimal);
+        projectObj.project.projectGLJ.quantityChangeMap[mglj.id] = mglj.quantity;
         let p_key = gljOprObj.getIndex(parentGlj,gljKeyArray);
         let m_list = projectObj.project.projectGLJ.datas.mixRatioMap[p_key];
         if(operation == 'delete'){//如果是删除
@@ -132,6 +133,7 @@ Composition.prototype.updateConsumptionInCache = function (pid,recode,updateData
         // 设置父级3个价格
         parentGlj.unit_price.market_price =  updateData.market_price;
         parentGlj.unit_price.base_price =  updateData.base_price;
+        return mglj.id;
     }
 }
 
@@ -142,9 +144,9 @@ Composition.prototype.updateConsumption = function (updateData,recode,pid,callba
     $.bootstrapLoading.start();
     CommonAjax.specialPost( '/glj/update',updateData,function (result) {
         //更新缓存
-        me.updateConsumptionInCache(pid,recode,updateData);
+       let sid = me.updateConsumptionInCache(pid,recode,updateData);
         if(callback){
-            callback();
+            callback(sid);
         }
         $.bootstrapLoading.end();
     })

+ 14 - 0
web/building_saas/main/js/models/main_consts.js

@@ -209,6 +209,13 @@ const materialType = {
     4: '水泥',
     5: '标准砖'
 };
+const materialTypeMap = {
+    GC: 1,
+    GJ: 2,
+    MC: 3,
+    SN: 4,
+    SZ: 5
+}
 
 //清单固定行
 const fixedFlag = {
@@ -340,4 +347,11 @@ const blockType ={
 const installFeeType = ['子目费用','分项费用','措施费用'];
 const installSectionBase = ['分别按人材机乘系数','人工','材料','机械'];
 const supplyComboMap = [{text:"自行采购",value:0},{text:"完全甲供",value:2},{text:"部分甲供",value:1},{text:"甲定乙供",value:3}];//后来调整了下拉选项的顺序,为了不改之前的业务逻辑,这里的值对换了一下
+const materialComboMap = [
+    {text:materialType[materialTypeMap.GC],value:materialTypeMap.GC},
+    {text:materialType[materialTypeMap.GJ],value:materialTypeMap.GJ},
+    {text:materialType[materialTypeMap.MC],value:materialTypeMap.MC},
+    {text:materialType[materialTypeMap.SN],value:materialTypeMap.SN},
+    {text:materialType[materialTypeMap.SZ],value:materialTypeMap.SZ}
+];
 

+ 26 - 4
web/building_saas/main/js/models/project_glj.js

@@ -8,6 +8,7 @@
 function ProjectGLJ() {
     this.datas = null;
     this.isLoading = false;
+    this.quantityChangeMap=null;
 }
 
 /**
@@ -690,15 +691,16 @@ ProjectGLJ.prototype.getShortNameByID = function (ID) {
     return gljTypeMap["typeId" + ID].shortName;
 };
 
-ProjectGLJ.prototype.calcQuantity  = function (){
+ProjectGLJ.prototype.calcQuantity  = function (init=false){
     let project_gljs = this.datas.gljList;
     let mixRatioConnectData = this.datas.mixRatioConnectData;
     let mixRatioMap = this.datas.mixRatioMap;
     let rations = projectObj.project.Ration.datas;
     let rationMap = _.indexBy(rations,'ID');
-    let quantityMap={};
+    let quantityMap={},changeArray=[];
     let rationGljGroup = _.groupBy(projectObj.project.ration_glj.datas,'projectGLJID')
     let q_decimal = getDecimal("glj.quantity");
+    console.log(init);
     for(let pglj of project_gljs ){
         let pg_index = gljOprObj.getIndex(pglj,gljKeyArray);
         pglj.subdivisionQuantity = 0;
@@ -709,7 +711,6 @@ ProjectGLJ.prototype.calcQuantity  = function (){
         pglj.subdivisionQuantity = result.subdivisionQuantity;
         pglj.techQuantity = result.techQuantity;
         pglj.quantity = result.quantity;
-
         quantityMap[pg_index] = pglj;
     }
     //计算做为组成物的消耗量
@@ -729,8 +730,29 @@ ProjectGLJ.prototype.calcQuantity  = function (){
             }
         }
     }
+    if(init == true || this.quantityChangeMap == null){//如果是初始化,建立一个映射表
+        this.quantityChangeMap = {};
+        for(let pglj of project_gljs){
+            this.quantityChangeMap[pglj.id] = pglj.quantity;
+        }
+    }else if(this.quantityChangeMap != null){
+        for(let pglj of project_gljs){
+            if(this.quantityChangeMap[pglj.id] != undefined|| this.quantityChangeMap[pglj.id] != null){
+                if(this.quantityChangeMap[pglj.id] !=  pglj.quantity){
+                    changeArray.push(pglj);
+                    this.quantityChangeMap[pglj.id] = pglj.quantity;
+                }
+            }else { //映射表没有,说明是新添加的项目工料机
+                changeArray.push(pglj);
+                this.quantityChangeMap[pglj.id] = pglj.quantity;
+            }
+        }
+    }
+    changeArray.length > 0 && projectGljObject.calcPartASupplyFeeByProjectGLJs ?projectGljObject.calcPartASupplyFeeByProjectGLJs(changeArray):'';
 
-}
+
+
+};
 
 ProjectGLJ.prototype.getQuantityPerGLJ = function (ration_glj_list,rations,rationMap,pglj) {
     let billIDs =   projectObj.project.Bills.getSubdivisionProjectLeavesID();//取分部分项上的所有叶子清单ID

+ 10 - 8
web/building_saas/main/js/models/ration_glj.js

@@ -532,6 +532,8 @@ var ration_glj = {
                         serialNo: serialNo,
                         GLJID: glj.ID,
                         adjCoe: glj.adjCoe,
+                        materialType:glj.materialType,
+                        materialCoe:glj.materialCoe,
                         repositoryId: glj.repositoryId
                     }
                     if (glj.hasOwnProperty("compilationId")) {
@@ -608,6 +610,8 @@ var ration_glj = {
                     type: glj.gljType,
                     adjCoe: glj.adjCoe,
                     createType: 'add',
+                    materialType:glj.materialType,
+                    materialCoe:glj.materialCoe,
                     repositoryId: glj.repositoryId
                 }
                 if (glj.hasOwnProperty("compilationId")) {
@@ -645,6 +649,8 @@ var ration_glj = {
             oldData.specs = glj.specs;
             oldData.basePrice = glj.basePrice;
             oldData.repositoryId = glj.repositoryId;
+            oldData.materialType = glj.materialType;
+            oldData. materialCoe =  glj.materialCoe;
             if (glj.hasOwnProperty("compilationId")) {
                 oldData.from = "cpt";
                 if (glj.code.indexOf('-') != -1) {//这条工料机是用户通过修改包称、规格、型号等保存到补充工料机库的
@@ -690,6 +696,8 @@ var ration_glj = {
                 type: glj.gljType,
                 basePrice: glj.basePrice,
                 repositoryId: glj.repositoryId,
+                materialType: glj.materialType,   //三材类别
+                materialCoe: glj.materialCoe,
                 projectID: oldData.projectID
             }
             if (oldData.createType == 'replace') {
@@ -795,16 +803,10 @@ var ration_glj = {
             return false
         };
         ration_glj.prototype.findGLJNodeByID = function (ID) {
-            let node = _.find(projectObj.project.mainTree.items, function (n) {//找到对应的树节点
-                return n.sourceType == ModuleNames.ration_glj && n.data.ID == ID;
-            });
-            return node;
+           return projectObj.project.mainTree.findNode(ID);
         };
         ration_glj.prototype.findRationNodeByID = function (ID) {
-            let node = _.find(projectObj.project.mainTree.items, function (n) {//找到对应定额的树节点
-                return n.sourceType == ModuleNames.ration && n.data.ID == ID;
-            });
-            return node;
+            return projectObj.project.mainTree.findNode(ID);
         };
         ration_glj.prototype.reCalcWhenGLJChange = function (ration_glj) {//当改变定额工料机时,重新计算定额以及其父节点
             let node = this.findRationNodeByID(ration_glj.rationID);

+ 147 - 69
web/building_saas/main/js/views/character_content_view.js

@@ -24,6 +24,7 @@ let contentOprObj = {
         let sheet = workBook.getActiveSheet(), me = contentOprObj;
         const EVENTS = GC.Spread.Sheets.Events;
         workBook.bind(EVENTS.ButtonClicked, me.onButtonClicked);
+        sheet.bind(EVENTS.EditStarting, me.onEditStart);
         sheet.bind(EVENTS.EditEnded, me.onEditEnded);
         sheet.bind(EVENTS.ClipboardPasting, me.onClipboardPasting);
         sheet.bind(EVENTS.ClipboardPasted, me.onClipboardPasted);
@@ -116,6 +117,7 @@ let contentOprObj = {
         me.save(function () {
             me.workBook.focus();
             me.workBook.getSheet(0).setActiveCell(cell.row - 1, cell.col);
+            me.initSelection(cell.row - 1);
         });
     },
     downMove: function (cell) {
@@ -130,6 +132,7 @@ let contentOprObj = {
         me.save(function () {
             me.workBook.focus();
             me.workBook.getSheet(0).setActiveCell(cell.row + 1, cell.col);
+            me.initSelection(cell.row + 1);
         });
     },
     deleteContent: function (rowIdx) {
@@ -160,6 +163,12 @@ let contentOprObj = {
         const setting = projectObj.project.property.addRule !== undefined ? projectObj.project.property.addRule : getAddRuleSetting();
         pageCCOprObj.setCharacterBySetting(selectedNode, setting, callback, contentOprObj);
     },
+    onEditStart(sender, args){
+        if(projectInfoObj.projectInfo.property.lockBills){
+            args.cancel = true;
+            return;
+        }
+    },
     onEditEnded: function (sender, args) {
         let me = contentOprObj;
         if(me.setting.header[args.col].dataCode === 'isChecked'){
@@ -178,6 +187,10 @@ let contentOprObj = {
         if(args.sheet.isEditing()){
             args.sheet.endEdit(true);
         }
+        if(projectInfoObj.projectInfo.property.lockBills){
+            args.sheet.setValue(args.row, args.col, 0);
+            return;
+        }
         let isChecked = args.sheet.getValue(args.row, args.col);
         if(me.currentCache.length > args.row){
             me.currentCache[args.row].isChecked = isChecked;
@@ -191,6 +204,10 @@ let contentOprObj = {
     },
     //复制粘贴
     onClipboardPasting: function (sender, args) {
+        if(projectInfoObj.projectInfo.property.lockBills){
+            args.cancel = true;
+            return;
+        }
         if(args.cellRange.colCount > 1 || args.cellRange.col !== 0){
             args.cancel = true;
         }
@@ -211,21 +228,29 @@ let contentOprObj = {
         if(args.newSelections && args.newSelections.length > 0){
             me.initSelection(args.newSelections[0].row);
         }
-        me.initSelection(args.newSelections[0].row);
     },
     initSelection: function (row) {
         let me = contentOprObj;
         let disObj = {jobAdd: false, jobInsert: true, jobDel: true, jobUp: true, jobDown: true};
-        if(row !== -1){
-            //在表内
-            if(row < me.currentCache.length){
-                disObj.jobDel = false;
-                disObj.jobInsert = false;
-                if(row !== 0){
-                    disObj.jobUp = false;
-                }
-                if(row !== me.currentCache.length - 1){
-                    disObj.jobDown = false;
+        if(projectInfoObj.projectInfo.property.lockBills){
+            disObj.jobAdd = true;
+            disObj.jobInsert = true;
+            disObj.jobDel = true;
+            disObj.jobUp = true;
+            disObj.jobDown = true;
+        }
+        else{
+            if(row !== -1){
+                //在表内
+                if(row < me.currentCache.length){
+                    disObj.jobDel = false;
+                    disObj.jobInsert = false;
+                    if(row !== 0){
+                        disObj.jobUp = false;
+                    }
+                    if(row !== me.currentCache.length - 1){
+                        disObj.jobDown = false;
+                    }
                 }
             }
         }
@@ -263,46 +288,56 @@ let contentOprObj = {
                 let sheet = me.workBook.getSheet(0);
                 let addDis = pageCCOprObj.isBillsType() ? false : true,  insertDis = false, delDis = false, upDis = false, downDis = false;
                 if(target.hitTestType === 3){//在表格内&& typeof target.row !== 'undefined' && typeof target.col !== 'undefined'
-                    if(typeof target.row !== 'undefined'){
-                        //控制按钮是否可用
-                        sheet.setActiveCell(target.row, target.col);
-                        if(!me.currentCache ||target.row >= me.currentCache.length){//右键定位在有数据的行,删除键才显示可用
-                            insertDis = true;
-                            delDis = true;
-                            downDis = true;
-                            upDis = true;
-                        }
-                        else{//有数据
-                            if(typeof target.col === 'undefined'){//定位不在表格内
+                    //清单锁定,不可用
+                    if(projectInfoObj.projectInfo.property.lockBills){
+                        addDis = true;
+                        insertDis = true;
+                        delDis = true;
+                        upDis = true;
+                        downDis = true;
+                    }
+                    else{
+                        if(typeof target.row !== 'undefined'){
+                            //控制按钮是否可用
+                            sheet.setActiveCell(target.row, target.col);
+                            if(!me.currentCache ||target.row >= me.currentCache.length){//右键定位在有数据的行,删除键才显示可用
                                 insertDis = true;
+                                delDis = true;
                                 downDis = true;
                                 upDis = true;
-                                delDis = true;
                             }
-                            else{//定位在表格内
-                                if(target.row === me.currentCache.length -1){//定位在最后一行,不可下移
+                            else{//有数据
+                                if(typeof target.col === 'undefined'){//定位不在表格内
+                                    insertDis = true;
                                     downDis = true;
-                                }
-                                if(target.row === 0){//定位在第一行,不可上移
                                     upDis = true;
+                                    delDis = true;
+                                }
+                                else{//定位在表格内
+                                    if(target.row === me.currentCache.length -1){//定位在最后一行,不可下移
+                                        downDis = true;
+                                    }
+                                    if(target.row === 0){//定位在第一行,不可上移
+                                        upDis = true;
+                                    }
                                 }
                             }
                         }
-                    }
-                    else{
-                        insertDis = true;
-                        delDis = true;
-                        downDis = true;
-                        upDis = true;
+                        else{
+                            insertDis = true;
+                            delDis = true;
+                            downDis = true;
+                            upDis = true;
+                        }
                     }
                     me.refreshTools({jobAdd: addDis, jobInsert: insertDis, jobDel: delDis, jobUp: upDis, jobDown: downDis});
                     return {
                         callback: function(){},
                         items: {
-                            "insert": {name: "插入", disabled: insertDis, icon: "context-menu-icon context-menu-icon-add", callback: function (key, opt) {
+                            "insert": {name: "插入", disabled: insertDis, icon: "fa-sign-in", callback: function (key, opt) {
                                 me.insertContent(sheet, sheet.getActiveRowIndex(), '');
                             }},
-                            "add": {name: "添加", disabled: addDis, icon: "fa-sign-in", callback: function (key, opt) {
+                            "add": {name: "添加", disabled: addDis, icon: "context-menu-icon context-menu-icon-add", callback: function (key, opt) {
                                 me.insertContent(sheet, me.currentCache.length, '');
                             }},
                             "delete": {name: "删除", disabled: delDis, icon: "fa-remove", callback: function (key, opt) {
@@ -491,6 +526,7 @@ let characterOprObj = {
         me.save(function () {
             me.workBook.getSheet(0).setActiveCell(cell.row - 1, cell.col);
             me.workBook.focus();
+            me.initSelection(cell.row - 1);
         });
     },
     downMove: function (cell) {
@@ -505,6 +541,7 @@ let characterOprObj = {
         me.save(function () {
             me.workBook.getSheet(0).setActiveCell(cell.row + 1, cell.col);
             me.workBook.focus();
+            me.initSelection(cell.row + 1);
         });
     },
     deleteCharacter: function (rowIdx) {
@@ -585,6 +622,10 @@ let characterOprObj = {
     },
     onEditStart: function (sender, args) {
         let me = characterOprObj;
+        if(projectInfoObj.projectInfo.property.lockBills){
+            args.cancel = true;
+            return;
+        }
         if(args.col === 1){//改变选择的特征值
             me.currentSelectedValue = me.currentCache.length > args.row ?  me.getCurrentSelected(me.currentCache[args.row]) : null;
         }
@@ -623,6 +664,9 @@ let characterOprObj = {
         }
     },
     onClipboardPasting: function (sender, args) {
+        if(projectInfoObj.projectInfo.property.lockBills){
+            args.cancel = true;
+        }
         if(args.cellRange.col + args.colCount - 1 > 1){
             args.cancel = true;
         }
@@ -666,6 +710,10 @@ let characterOprObj = {
         if(args.sheet.isEditing()){
             args.sheet.endEdit(true);
         }
+        if(projectInfoObj.projectInfo.property.lockBills){
+            args.sheet.setValue(args.row, args.col, 0);
+            return;
+        }
         let isChecked = args.sheet.getValue(args.row, args.col);
         if(me.currentCache.length > args.row){
             me.currentCache[args.row].isChecked = isChecked;
@@ -685,16 +733,26 @@ let characterOprObj = {
     initSelection: function (row) {
         let me = characterOprObj;
         let disObj = {itemAdd: false, itemInsert: true, itemDel: true, itemUp: true, itemDown: true};
-        if(row !== -1){
-            //在表内
-            if(row < me.currentCache.length){
-                disObj.itemDel = false;
-                disObj.itemInsert = false;
-                if(row !== 0){
-                    disObj.itemUp = false;
-                }
-                if(row !== me.currentCache.length - 1){
-                    disObj.itemDown = false;
+        //清单锁定,不可用
+        if(projectInfoObj.projectInfo.property.lockBills){
+            disObj.itemAdd = true;
+            disObj.itemInsert = true;
+            disObj.itemDel = true;
+            disObj.itemUp = true;
+            disObj.itemDown = true;
+        }
+        else{
+            if(row !== -1){
+                //在表内
+                if(row < me.currentCache.length){
+                    disObj.itemDel = false;
+                    disObj.itemInsert = false;
+                    if(row !== 0){
+                        disObj.itemUp = false;
+                    }
+                    if(row !== me.currentCache.length - 1){
+                        disObj.itemDown = false;
+                    }
                 }
             }
         }
@@ -720,37 +778,47 @@ let characterOprObj = {
                 let sheet = me.workBook.getSheet(0);
                 let addDis = pageCCOprObj.isBillsType() ? false : true, insertDis = false, delDis = false, upDis = false, downDis = false;
                 if(target.hitTestType === 3){//在表格内 && typeof target.row !== 'undefined' && typeof target.col !== 'undefined'
-                    if(typeof target.row !== 'undefined'){
-                        //控制按钮是否可用
-                        sheet.setActiveCell(target.row, target.col);
-                        if(!me.currentCache ||target.row >= me.currentCache.length){//右键定位在有数据的行,删除键才显示可用
-                            insertDis = true;
-                            delDis = true;
-                            downDis = true;
-                            upDis = true;
-                        }
-                        else{//有数据
-                            if(typeof target.col === 'undefined'){//定位在表格外
+                    //清单锁定,则不可用
+                    if(projectInfoObj.projectInfo.property.lockBills){
+                        addDis = true;
+                        insertDis = true;
+                        delDis = true;
+                        upDis = true;
+                        downDis = true;
+                    }
+                    else{
+                        if(typeof target.row !== 'undefined'){
+                            //控制按钮是否可用
+                            sheet.setActiveCell(target.row, target.col);
+                            if(!me.currentCache ||target.row >= me.currentCache.length){//右键定位在有数据的行,删除键才显示可用
                                 insertDis = true;
+                                delDis = true;
                                 downDis = true;
                                 upDis = true;
-                                delDis = true;
                             }
-                            else{
-                                if(target.row === me.currentCache.length -1){//定位在最后一行,不可下移
+                            else{//有数据
+                                if(typeof target.col === 'undefined'){//定位在表格外
+                                    insertDis = true;
                                     downDis = true;
-                                }
-                                if(target.row === 0){//定位在第一行,不可上移
                                     upDis = true;
+                                    delDis = true;
+                                }
+                                else{
+                                    if(target.row === me.currentCache.length -1){//定位在最后一行,不可下移
+                                        downDis = true;
+                                    }
+                                    if(target.row === 0){//定位在第一行,不可上移
+                                        upDis = true;
+                                    }
                                 }
                             }
                         }
-                    }
-                    else{
-                        insertDis = true;
-                        delDis = true;
-                        downDis = true;
-                        upDis = true;
+                        else{
+                            insertDis = true;
+                            delDis = true;
+                            downDis = true;
+                            upDis = true;
+                        }
                     }
                     me.refreshTools({itemAdd: addDis, itemInsert: insertDis, itemDel: delDis, itemUp: upDis, itemDown: downDis});
                     return {
@@ -874,8 +942,8 @@ let pageCCOprObj = {
                 sheet.autoFitRow(row);
             }
         }
-        contentOprObj.initSelection(0);
-        characterOprObj.initSelection(0);
+        contentOprObj.initSelection(contentOprObj.workBook.getSheet(0).getActiveRowIndex());
+        characterOprObj.initSelection(characterOprObj.workBook.getSheet(0).getActiveRowIndex());
         sheet.resumeEvent();
         sheet.resumePaint();
     },
@@ -887,6 +955,16 @@ let pageCCOprObj = {
         sheetCommonObj.cleanSheet(theCha.workBook.getSheet(0), theCha.setting, -1);
         projectObj.mainSpread.focus(true);
     },
+    //锁定/解锁清单后添加规则的改变
+    refreshRuleTools: function (lockBills) {
+        $('#use-to-current').removeClass('disabled');
+        $('#use-to-all').removeClass('disabled');
+        if(lockBills){
+            $('#use-to-current').addClass('disabled');
+            $('#use-to-all').addClass('disabled');
+        }
+
+    },
     //更新特征及内容数据
     updateCharacterContent: function (findSet, updateObj, txtObj, oprObj, callback) {
         let me = pageCCOprObj, updateCol;

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

@@ -1527,7 +1527,7 @@ var gljOprObj = {
                     if (project.ration_glj.needShowToTree(t)) {//如果是造价书中的树节点,则也须刷新
                         project.ration_glj.transferToNodeData(t);
                         var node = project.ration_glj.findGLJNodeByID(t.ID);
-                        nodes.push(node);
+                        node ? nodes.push(node):'';
                     }
                 }
             })

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

@@ -348,7 +348,7 @@ function getGLJData(actionType) {
         console.log(+new Date());
         $("#glj_tree_div").modal({show:true});
         setTimeout(function(){
-            gljOprObj.gljLibSpresd.refresh();
+            gljOprObj.gljLibSpresd?gljOprObj.gljLibSpresd.refresh():'';
         }, 200);
     })
 }

+ 49 - 14
web/building_saas/main/js/views/project_glj_view.js

@@ -19,12 +19,14 @@ projectGljObject={
             {headerName: "是否暂估", headerWidth: 60, dataCode: "is_evaluate", hAlign: "center", dataType: "String",cellType:'checkBox'},
             {headerName: "供货方式", headerWidth: 80, dataCode: "supply", hAlign: "center", dataType: "String",cellType:'comboBox',editorValueType:true,options:supplyComboMap},
             {headerName: "甲供数量", headerWidth: 100, dataCode: "supply_quantity", hAlign: "right", dataType: "Number",validator:"number"},
+            {headerName: "三材类别", headerWidth: 80, dataCode: "materialType", hAlign: "center", dataType: "String",cellType:'comboBox',editorValueType:true,options:materialComboMap},
+            {headerName: "三材系数", headerWidth: 100, dataCode: "materialCoe", hAlign: "right", dataType: "Number",decimalField:'material'},
             {headerName: "交货方式", headerWidth: 90, dataCode: "delivery", hAlign: "left", dataType: "String"},
             {headerName: "送达地点", headerWidth: 100, dataCode: "delivery_address", hAlign: "left", dataType: "String"},
             {headerName: "不调价", headerWidth: 55, dataCode: "is_adjust_price", dataType: "String",cellType: "checkBox"}
         ],
         view: {
-            lockColumns: [0,1,2,3,4,5,7,12,13]
+            lockColumns: [0,1,2,3,4,5,7]
         }
     },
     projectGljSpread:null,
@@ -98,8 +100,9 @@ projectGljObject={
             me.mixRatioSheet.setValue(0, consumptionCol, '消耗量', GC.Spread.Sheets.SheetArea.colHeader);
         }
         let sel = me.projectGljSheet.getSelections()[0];
-        if(me.projectGljSheetData.length>sel.row){
-            gljId = me.projectGljSheetData[sel.row].id;
+        let srow = sel.row == -1?0:sel.row;
+        if(me.projectGljSheetData.length>srow){
+            gljId = me.projectGljSheetData[srow].id;
         }
         projectObj.project.projectGLJ.getRatioData(gljId,function (data) {
             let rationList =[];
@@ -138,10 +141,16 @@ projectGljObject={
             args.cancel = true;
         }
     },
-    projectGljEditChecking:function (row,col) {//return false表示不能编
+    projectGljEditChecking:function (row,col) {//return false表示不能编
         let me = projectGljObject;
         let data = me.projectGljSheetData[row];
         let dataCode = me.projectGljSetting.header[col].dataCode;
+        let lockColumns = me.projectGljSetting.view.lockColumns;
+
+        if(lockColumns.indexOf(col)!= -1){
+            return false;
+        }
+
         if(dataCode=='is_adjust_price'||dataCode=='is_evaluate'){
             return false;
         }
@@ -170,6 +179,14 @@ projectGljObject={
         let me = projectGljObject;
         let changeInfo=[];
         let canChange = true;
+        if(me.projectGljEditChecking(info.row,info.col) == false){
+            canChange = false;
+        }else if (info.action == GC.Spread.Sheets.RangeChangedAction.clear) {
+            info.newValue = null;
+            me.onProjectGLJValueChange(sender,info);
+            return ;
+        }
+
         for(let c of info.changedCells){
             let value=  info.sheet.getCell(c.row, c.col).text();
             changeInfo.push({row:c.row,col:c.col,value:value});
@@ -182,7 +199,6 @@ projectGljObject={
             }
         }
         if(canChange == false){//恢复原来的值
-            console.log('1');
             me.showProjectGljData();
         }else {
              me.batchUpdatePrice(changeInfo);
@@ -200,6 +216,7 @@ projectGljObject={
 
 
     showProjectGljData:function () {
+        let sel = this.projectGljSheet.getSelections()[0];
         let projectGljSheetData = [];
         let gljList = projectObj.project.projectGLJ.datas.gljList;
         gljList = this.filterProjectGLJ(gljList);
@@ -211,6 +228,7 @@ projectGljObject={
         this.projectGljSheet.setRowCount(0);
         sheetCommonObj.showData(this.projectGljSheet, this.projectGljSetting,this.projectGljSheetData);
         this.projectGljSheet.setRowCount(this.projectGljSheetData.length);
+        this.projectGljSheet.setSelection(sel.row,sel.col,sel.rowCount,sel.colCount);
     },
     filterProjectGLJ:function (gljList) {
         let me = projectGljObject;
@@ -245,6 +263,8 @@ projectGljObject={
             quantity:glj.quantity,
             supply:glj.supply,
             supply_quantity:glj.supply_quantity,
+            materialType:glj.materialType,
+            materialCoe:glj.materialCoe,
             delivery:glj.delivery,
             delivery_address:glj.delivery_address,
             is_adjust_price:glj.is_adjust_price,
@@ -312,16 +332,16 @@ projectGljObject={
         let updateData ={id: recode.mix_ratio_id, field: 'mix_ratio.' + dataCode, value: value, market_price: parentMarketPrice, base_price: parentBasePrice};
         let prow= projectGljObject.projectGljSheet.getActiveRowIndex();//取父机械或组成物的下标
         let prowData = projectGljObject.projectGljSheetData[prow];
-        composition.updateConsumption(updateData,recode,prowData.id,function () {
-           me.refreshParentData(prow,prowData.id);
+        composition.updateConsumption(updateData,recode,prowData.id,function (sid) {
+           me.refreshParentData(prow,prowData.id,sid);
         });
     },
-    refreshParentData:function (row,pid) {
+    refreshParentData:function (row,pid,sid) {
         let me = this;
         me.refreshProjectGljRow(row);
         // 更新组成物缓存
         projectObj.project.composition.loadData();
-        //查找使用了父项目工料机的定额工料机
+        //查找使用了父项目工料机的定额工料机
         let updateNodes=[];
         let ration_gljs = _.filter(projectObj.project.ration_glj.datas,{'projectGLJID':pid});
         for(let rg of ration_gljs){
@@ -339,8 +359,14 @@ projectGljObject={
                 updateNodes.push(r_node);
             }
         }
+        if(sid){
+            let subRations = calcTools.getRationsByProjectGLJ(sid);
+            updateNodes = updateNodes.concat(subRations);
+        }
         if(updateNodes.length>0){
-            projectObj.project.calcProgram.calcRationsAndSave(updateNodes);
+            projectObj.project.calcProgram.calcRationsAndSave(updateNodes,function () {
+                projectObj.mainController.refreshTreeNode(projectObj.project.mainTree.roots);
+            });
         }
         gljOprObj.refreshView();
     },
@@ -377,7 +403,7 @@ projectGljObject={
         parentBasePrice = parentBasePrice.toDecimal(getDecimal("glj.unitPrice"));
         return [parentMarketPrice, parentBasePrice];
     },
-    onProjectGLJValueChange:function (e,info) {
+    onProjectGLJValueChange:function (e,info) {//me.projectGljSetting
         let projectGLJ = projectObj.project.projectGLJ;
         let me = projectGljObject,row = info.row, col = info.col;
         let dataCode = me.projectGljSetting.header[col].dataCode;
@@ -400,10 +426,9 @@ projectGljObject={
             }
             info.sheet.resumeEvent();
             info.sheet.resumePaint();
-
-            if (dataCode === 'supply' || dataCode === 'supply_quantity'){
+            if (dataCode === 'supply' || dataCode === 'supply_quantity'){    // basePrice、marketPrice 有自己的计算代码,无需走这里重复计算
                 let rations = calcTools.getRationsByProjectGLJ(recode.id);
-                projectObj.project.calcProgram.calcRationsAndSave(rations, function () {
+                projectObj.project.calcProgram.calcNodesAndSave(rations, function () {
                     projectObj.mainController.refreshTreeNode(projectObj.project.mainTree.roots);
                 });
             }
@@ -498,6 +523,16 @@ projectGljObject={
             socket.emit('changeNewRoom',data);
             socketObject.roomInfo.unitFile = socketObject.getUnitFileRoomID();
         }
+    },
+    calcPartASupplyFeeByProjectGLJs: function (projectGLJsArr) {
+        for (let pGLJ of projectGLJsArr){
+              if (pGLJ.supply == supplyType.BFJG){
+                  let rations = calcTools.getRationsByProjectGLJ(pGLJ.id);
+                  projectObj.project.calcProgram.calcNodesAndSave(rations, function () {
+                      projectObj.mainController.refreshTreeNode(projectObj.project.mainTree.roots);
+                  });
+              }
+        };
     }
 };
 

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

@@ -9,6 +9,7 @@ let defaultDecimal = {
         bills: {editable: true, data: {unitPrice: 2, totalPrice: 2}},
         ration: {editable: true, data: {quantity: 3, unitPrice: 2, totalPrice: 2}},
         glj: {editable: true, data: {quantity: 3, unitPrice: 2}},
+        material: {editable: false, data: 5},
         feeRate: {editable: true, data: 2},
         quantity_detail: {editable: false, data: 4},
         process: {editable: false, data: 6}

+ 3 - 2
web/building_saas/main/js/views/project_property_projFeature.js

@@ -25,7 +25,7 @@ let projFeatureView = {
             {row: 3, key: 'baseType', items: ['带基', '框排架柱距6m以内', '框排架柱距6m以外', '满基筏式', '满基板式', '满基箱式', '独立基础']},
             {row: 4, key: 'buildingFeature', items: ['点式', '凹式', '凸式', 'Y式', '其他']}
         ],
-        numRows: [5, 6, 7, 8, 9, 10, 11, 12, 13],
+        numRows: [5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
         dateRows: [],
         locked: {
             rows: [0],
@@ -136,7 +136,8 @@ let projFeatureView = {
             if(me.setting.numRows.indexOf(args.row) !== -1){//控制数值
                 if(!me.isNum(v)){
                     alert('只能输入数值');
-                    args.sheet.setValue(args.row, args.col, me.datas[args.row].value && me.isNum(me.datas[args.row].value) ? me.datas[args.row].value : '');
+                    v = me.datas[args.row].value && me.isNum(me.datas[args.row].value) ? me.datas[args.row].value : '';
+                    args.sheet.setValue(args.row, args.col, v);
                 }
             }
             me.datas[args.row].value = v;

+ 16 - 1
web/building_saas/main/js/views/project_view.js

@@ -595,7 +595,7 @@ var projectObj = {
             let mTime = +new Date();
             console.log(`get data时间——${mTime - startTime}`);
             if (!err) {
-                that.project.projectGLJ.calcQuantity();//计算分部分项和技术措施项目消耗量;
+                that.project.projectGLJ.calcQuantity(true);//计算分部分项和技术措施项目消耗量;
                 let quantityTime = +new Date();
                 console.log(`计算quantity时间——${quantityTime - mTime}`);
                 that.project.property = projectInfoObj.projectInfo.property;
@@ -660,6 +660,7 @@ var projectObj = {
 
                 that.mainSpread.getActiveSheet().startEdit();
                 that.mainSpread.getActiveSheet().endEdit();
+                that.mainSpread.bind(GC.Spread.Sheets.Events.SelectionChanged, that.amountAreaNumber);
                 that.mainSpread.bind(GC.Spread.Sheets.Events.LeaveCell, that.mainSpreadLeaveCell);
                 that.mainSpread.bind(GC.Spread.Sheets.Events.EnterCell, that.mainSpreadEnterCell);
                 that.mainSpread.bind(GC.Spread.Sheets.Events.EditStarting, that.mainSpreadEditStarting);
@@ -1364,6 +1365,7 @@ $("a[name='lockBills']").click(function () {
         controller.refreshTreeNode(nodes);
         projectObj.mainController.setTreeSelected(selected);//触发树节点选中事件
         projectObj.loadLockBillsButton();
+        pageCCOprObj.refreshRuleTools(lockBills);
     });
 });
 //显示至..
@@ -1865,6 +1867,15 @@ function doAfterImport(resData){
             projectObj.project.Bills.tree.m_delete(delIdNodes);
         }
         if(resData.insert.bill.length > 0){
+            //设置flagsIndex
+            for(let insertBill of resData.insert.bill){
+                insertBill.flagsIndex = {};
+                if (insertBill.flags) {
+                    insertBill.flags.forEach(function (flag) {
+                        insertBill.flagsIndex[flag.fieldName] = flag;
+                    });
+                }
+            }
             //插入清单节点
             projectObj.project.Bills.tree.insertByDatas(resData.insert.bill);
             //插入主树节点
@@ -1876,6 +1887,10 @@ function doAfterImport(resData){
             }
             ProjectController.syncDisplayNewNodes(projectObj.mainController, newNodes);
         }
+        //如果清单未锁定,导入后锁定清单
+        if(!projectInfoObj.projectInfo.property.lockBills){
+            $("a[name='lockBills']").click();
+        }
         $.bootstrapLoading.end();
         //重算
         projectObj.project.calcProgram.calcAllNodesAndSave(calcAllType.catAll, function () {

+ 3 - 0
web/building_saas/main/js/views/std_bills_lib.js

@@ -178,6 +178,9 @@ var billsLibObj = {
                 let selectNode = stdBillsTree.items[args.row];
                 let name = selectNode.data.name;
                 if (stdBillsTree.items[args.row].children.length === 0) {
+                    if(projectInfoObj.projectInfo.property.lockBills == true){
+                        return;
+                    }
                     //特征及内容转化
                     pageCCOprObj.setItemContentNode(stdBillsTree.items[args.row], getBillsJobs(stdBillsTree.items[args.row]), getBillsFeatures(stdBillsTree.items[args.row]), name);
                     if (/\//.test(selectNode.data.unit)) {

+ 2 - 2
web/building_saas/pm/html/project-management.html

@@ -124,7 +124,7 @@
 
                         <legend>单价文件</legend>
                         <table class="table table-bordered table-hover table-sm" id="summary-project-unit-price-table">
-                            <thead><th style="width: 40px;"></th><th style="width: 500px;">名称</th><th style="width:50px;">使用</th></thead>
+                            <thead><th style="width: 25px;"></th><th style="width: 330px;">名称</th><th style="width:40px;">使用</th></thead>
                             <tbody>
                             <tr><td>1</td><td>A单价文件</td></tr>
                             <tr><td>2</td><td>B单价文件</td></tr>
@@ -135,7 +135,7 @@
 
                         <legend>费率文件</legend>
                         <table class="table table-bordered table-hover table-sm" id="summary-project-fee-table">
-                            <thead><th style="width: 40px;"></th><th style="width: 500px;">名称</th><th style="width:50px;">使用</th></thead>
+                            <thead><th style="width: 25px;"></th><th style="width: 330px;">名称</th><th style="width:40px;">使用</th></thead>
                             <tbody>
                             <tr><td>1</td><td>A费率文件</td></tr>
                             <tr><td>2</td><td>B费率文件</td></tr>

+ 5 - 2
web/building_saas/pm/js/pm_newMain.js

@@ -43,7 +43,7 @@ const projTreeObj = {
             {name: '工程造价', dataCode: 'engineeringCost', width: 170, vAlign: 'center', hAlign: 'right'},
             {name: '单价文件', dataCode: 'unitPriceFile', width: 250, vAlign: 'center', hAlign: 'left'},
             {name: '费率文件', dataCode: 'feeRateFile', width: 250, vAlign: 'center', hAlign: 'left'},
-            {name: '创建日期', dataCode: 'createDateTime', width: 170, vAlign: 'center', hAlign: 'center'}
+            {name: '创建日期', dataCode: 'createDateTime', width: 90, vAlign: 'center', hAlign: 'center'}
         ],
         //选中行颜色
         style: {
@@ -557,7 +557,7 @@ const projTreeObj = {
                 //建设项目,侧滑汇总
                 if(node.data.projType === projectType.project && withingClickArea()){
                     setDataToSideBar();
-                    $(".slide-sidebar").animate({width:"650"}).addClass("open");
+                    $(".slide-sidebar").animate({width:"440"}).addClass("open");
                     $('body').unbind('click');
                     setTimeout(function () {
                         $("body").bind('click', function (event) {
@@ -926,6 +926,7 @@ $(document).ready(function() {
 
     // 新增单位工程点击
     $("#add-tender-btn").click(function() {
+        //弹出新建单位工程之前,判断当前使用版本,且当前使用单位工程数是否已到最大值
         let selectedItem = projTreeObj.tree.selected;
         $("#add-tender-dialog").modal("show");
     });
@@ -2618,3 +2619,5 @@ function refreshTenderFile(tenders, type, newName){
        }
    });
 }
+
+//获取当前版本信息