Kaynağa Gözat

Merge branch '1.0.0_online' of http://192.168.1.12:3000/SmartCost/ConstructionCost into 1.0.0_online

TonyKang 6 yıl önce
ebeveyn
işleme
3c528f24e0
52 değiştirilmiş dosya ile 1916 ekleme ve 853 silme
  1. 1 0
      config/gulpConfig.js
  2. 3 0
      lib/fileSaver/FileSaver.min.js
  3. 14 1
      modules/common/const/bills_fixed.js
  4. 16 12
      modules/complementary_ration_lib/models/compleRationModel.js
  5. 2 0
      modules/main/models/project.js
  6. 2 1
      modules/main/models/project_consts.js
  7. 38 0
      modules/pm/controllers/pm_controller.js
  8. 3 3
      modules/pm/facade/pm_facade.js
  9. 7 0
      modules/users/controllers/login_controller.js
  10. 9 0
      public/web/gljUtil.js
  11. 1 1
      web/building_saas/complementary_ration_lib/js/main.js
  12. 7 0
      web/building_saas/css/custom.css
  13. 1 1
      web/building_saas/fee_rates/fee_rate.html
  14. 2 2
      web/building_saas/glj/js/project_glj.js
  15. 2 1
      web/building_saas/main/html/main.html
  16. 2 2
      web/building_saas/main/js/controllers/block_controller.js
  17. 2 2
      web/building_saas/main/js/models/calc_program.js
  18. 1605 663
      web/building_saas/main/js/models/exportStandardInterface.js
  19. 6 6
      web/building_saas/main/js/models/fee_rate.js
  20. 4 4
      web/building_saas/main/js/models/installation_fee.js
  21. 31 3
      web/building_saas/main/js/models/main_consts.js
  22. 18 8
      web/building_saas/main/js/models/project.js
  23. 11 12
      web/building_saas/main/js/models/project_glj.js
  24. 7 7
      web/building_saas/main/js/models/ration.js
  25. 5 2
      web/building_saas/main/js/models/ration_coe.js
  26. 4 4
      web/building_saas/main/js/models/ration_glj.js
  27. 1 1
      web/building_saas/main/js/models/volume_price.js
  28. 2 2
      web/building_saas/main/js/views/billsElf.js
  29. 1 1
      web/building_saas/main/js/views/block_lib.js
  30. 1 1
      web/building_saas/main/js/views/calc_program_manage.js
  31. 10 10
      web/building_saas/main/js/views/character_content_view.js
  32. 1 1
      web/building_saas/main/js/views/fee_rate_view.js
  33. 11 18
      web/building_saas/main/js/views/glj_view.js
  34. 1 1
      web/building_saas/main/js/views/glj_view_contextMenu.js
  35. 4 4
      web/building_saas/main/js/views/installation_fee_view.js
  36. 6 5
      web/building_saas/main/js/views/main_tree_col.js
  37. 1 1
      web/building_saas/main/js/views/mbzm_view.js
  38. 1 1
      web/building_saas/main/js/views/project_glj_view.js
  39. 13 22
      web/building_saas/main/js/views/project_info.js
  40. 2 2
      web/building_saas/main/js/views/project_property_display_view.js
  41. 1 1
      web/building_saas/main/js/views/project_property_labour_coe_view.js
  42. 18 15
      web/building_saas/main/js/views/project_view.js
  43. 4 2
      web/building_saas/main/js/views/side_tools.js
  44. 1 1
      web/building_saas/main/js/views/std_billsGuidance_lib.js
  45. 2 2
      web/building_saas/main/js/views/std_bills_lib.js
  46. 11 11
      web/building_saas/main/js/views/std_ration_lib.js
  47. 1 1
      web/building_saas/main/js/views/tender_price_view.js
  48. 1 1
      web/building_saas/main/js/views/zmhs_view.js
  49. 11 11
      web/building_saas/report/js/rpt_main.js
  50. 1 1
      web/building_saas/report/js/rpt_print.js
  51. 3 2
      web/users/html/login.html
  52. 4 0
      web/users/js/login.js

+ 1 - 0
config/gulpConfig.js

@@ -109,6 +109,7 @@ module.exports = {
         'public/web/id_tree.js',
         'web/building_saas/main/js/models/cache_tree.js',
         'web/building_saas/main/js/calc/calc_fees.js',
+        'web/building_saas/main/js/models/exportStandardInterface.js',
         // 'web/building_saas/main/js/calc/ration_calc.js',
         // 'web/building_saas/main/js/calc/bills_calc.js',
         // 'public/calc_util.js',

Dosya farkı çok büyük olduğundan ihmal edildi
+ 3 - 0
lib/fileSaver/FileSaver.min.js


+ 14 - 1
modules/common/const/bills_fixed.js

@@ -45,7 +45,20 @@ const fixedFlag = {
     //专项技术措施暂估价
     SPECIAL_TECH_PROVISIONAL: 21,
     //专业发包工程管理费
-    LET_CONTRACT_MANAGEMENT: 22
+    LET_CONTRACT_MANAGEMENT: 22,
+    //人工
+    LABOUR: 23,
+    //材料
+    MATERIAL: 24,
+    //施工机械
+    MACHINE: 25,
+    //索赔
+    CLAIM: 26,
+    //现场签证
+    VISA: 27,
+    ADDITIONAL_TAX: 28,
+    //环境保护税
+    ENVIRONMENTAL_PROTECTION_TAX: 29
 };
 
 export default fixedFlag;

+ 16 - 12
modules/complementary_ration_lib/models/compleRationModel.js

@@ -168,16 +168,18 @@ class CompleRatoinDao {
                 }
                 return 0;
             });
-            for(let glj of gljDatas){
-                hintsArr.push(` ${glj.code} ${glj.name}${glj.specs ? '   ' + glj.specs : ''} &nbsp ${glj.unit}   ${gljAmtMapping[glj.ID]}`)
-            }
-            hintsArr.push(`基价 元 ${ration.basePrice}`);
             if(ration.jobContent && ration.jobContent.toString().trim() !== ''){
-                hintsArr.push(`工作内容:`);
+                hintsArr.push(`<label class="nomargin font_blue">工作内容:`);
                 hintsArr = hintsArr.concat(ration.jobContent.split('\n'));
+                hintsArr.push("</label>")
+                hintsArr.push("");
             }
+            for(let glj of gljDatas){
+                hintsArr.push(`<label class="nomargin ${glj.gljType==4?"font_blue":""}"> ${glj.code} ${glj.name}${glj.specs ? '&nbsp;&nbsp;&nbsp;' + glj.specs : ''}&nbsp;&nbsp&nbsp;${glj.unit}&nbsp;&nbsp;&nbsp;${gljAmtMapping[glj.ID]}</label>`)
+            }
+            hintsArr.push(`基价 元 ${ration.basePrice}`);
             if(ration.annotation && ration.annotation.toString().trim() !== ''){
-                hintsArr.push(`附注:`);
+                hintsArr.push(`<br>附注:`);
                 hintsArr = hintsArr.concat(ration.annotation.split('\n'));
             }
             ration._doc.hint = hintsArr.join('<br>');
@@ -254,16 +256,18 @@ class CompleRatoinDao {
                 }
                 return 0;
             });
-            for(let glj of gljDatas){
-                hintsArr.push(` ${glj.code} ${glj.name}${glj.specs ? '&nbsp;&nbsp;&nbsp;' + glj.specs : ''}&nbsp;&nbsp&nbsp;${glj.unit}&nbsp;&nbsp;&nbsp;${gljAmtMapping[glj.ID]}`)
-            }
-            hintsArr.push(`基价 元 ${ration.basePrice}`);
             if(ration.jobContent && ration.jobContent.toString().trim() !== ''){
-                hintsArr.push(`工作内容:`);
+                hintsArr.push(`<label class="nomargin font_blue">工作内容:`);
                 hintsArr = hintsArr.concat(ration.jobContent.split('\n'));
+                hintsArr.push("</label>");
+                hintsArr.push("");
             }
+            for(let glj of gljDatas){
+                hintsArr.push(`<label class="nomargin ${glj.gljType==4?"font_blue":""}"> ${glj.code} ${glj.name}${glj.specs ? '&nbsp;&nbsp;&nbsp;' + glj.specs : ''}&nbsp;&nbsp&nbsp;${glj.unit}&nbsp;&nbsp;&nbsp;${gljAmtMapping[glj.ID]}</label>`)
+            }
+            hintsArr.push(`基价 元 ${ration.basePrice}`);
             if(ration.annotation && ration.annotation.toString().trim() !== ''){
-                hintsArr.push(`附注:`);
+                hintsArr.push(`<br>附注:`);
                 hintsArr = hintsArr.concat(ration.annotation.split('\n'));
             }
             ration._doc.hint = hintsArr.join('<br>');

+ 2 - 0
modules/main/models/project.js

@@ -17,6 +17,7 @@ var labour_coe_facade = require('../facade/labour_coe_facade');
 var calc_program_facade = require('../facade/calc_program_facade');
 import GLJController from "../../glj/controllers/glj_controller";
 let installation_facade = require('../facade/installation_facade');
+let pmController = require('../../pm/controllers/pm_controller');
 
 
 const ProjectModel = require('../../pm/models/project_model').project;
@@ -43,6 +44,7 @@ moduleMap[projectConsts.CALC_PROGRAM] = calc_program_facade;
 moduleMap[projectConsts.PROJECTGLJ] = new GLJController();
 moduleMap[projectConsts.INSTALLATION_FEE] = installation_facade;
 moduleMap[projectConsts.RATION_TEMPLATE] = ration_template;
+moduleMap[projectConsts.PROJECT_INFO] = pmController;
 
 var Project = function (){};
 

+ 2 - 1
modules/main/models/project_consts.js

@@ -20,7 +20,8 @@ let projectConst = {
     FEERATE:'feeRate',
     LABOUR_COE:'labour_coe',
     CALC_PROGRAM:'calc_program',
-    INSTALLATION_FEE:'installation_fee'
+    INSTALLATION_FEE:'installation_fee',
+    PROJECT_INFO: 'project_info'
 };
 
 let projectConstList = [

+ 38 - 0
modules/pm/controllers/pm_controller.js

@@ -27,6 +27,7 @@ const fs = require('fs');
 const _ = require('lodash');
 import SectionTreeDao from '../../complementary_ration_lib/models/sectionTreeModel';
 let sectionTreeDao = new SectionTreeDao();
+let consts = require('../../main/models/project_consts');
 
 //统一回调函数
 let callback = function(req, res, err, message, data){
@@ -196,6 +197,41 @@ module.exports = {
             callback(req, res, err, message, null);
         });
     },
+    //project getData接口
+    getData: function(projectID, callback) {
+        projectModel.findOne({$or: [{deleteInfo: null}, {'deleteInfo.deleted': false}], ID: projectID}, '-_id').then(async function (project) {
+            if (!project) {
+                callback('', consts.projectConst.PROJECT_INFO, {});
+            }
+            let engineeringLibModel = new EngineeringLibModel();
+            let engineeringInfo = project !== null && project.property.engineering_id !== undefined ?
+                await engineeringLibModel.getEngineering(project.property.engineering_id) : null;
+            let projInfo = project._doc;
+            if (engineeringInfo !== null) {
+                if(engineeringInfo.billsGuidance_lib){
+                    for(let billsGuidanceLib of engineeringInfo.billsGuidance_lib){
+                        let stdBillsGuidanceLib = await stdBillsGuidanceLibModel.findOne({ID: billsGuidanceLib.id});
+                        if(stdBillsGuidanceLib){
+                            billsGuidanceLib.type = stdBillsGuidanceLib.type ? stdBillsGuidanceLib.type : 1;
+                        }
+                    }
+                }
+                projInfo.engineeringInfo = engineeringInfo;
+            }
+            //读取建设项目的项目属性
+            let constructionProperty = await ProjectsData.getConstructionProperty(projectID);
+            //基本信息
+            projInfo.property.basicInformation = constructionProperty && constructionProperty.basicInformation ? constructionProperty.basicInformation : [];
+            //编制说明
+            projInfo.property.compilationIllustrationProject = constructionProperty && constructionProperty.compilationIllustration ? constructionProperty.compilationIllustration : '';
+            //获取单位工程完整目录结构
+            let fullPath = await pm_facade.getFullPath(projectID);
+            projInfo.fullPath = fullPath;
+            callback('', consts.projectConst.PROJECT_INFO, project);
+        }, function (err) {
+            callback(err, consts.projectConst.PROJECT_INFO, {});
+        });
+    },
     getProject: function(req, res){
         let data = JSON.parse(req.body.data);
         let projectID = data.proj_id;
@@ -219,6 +255,8 @@ module.exports = {
                 }
                 //读取建设项目的项目属性
                 let constructionProperty = await ProjectsData.getConstructionProperty(projectID);
+                console.log(projectID);
+                console.log(constructionProperty);
                 //基本信息
                 projInfo.property.basicInformation = constructionProperty && constructionProperty.basicInformation ? constructionProperty.basicInformation : [];
                 //编制说明

+ 3 - 3
modules/pm/facade/pm_facade.js

@@ -1062,7 +1062,7 @@ async function getProjectByGranularity(tenderID, granularity, userID, versionNam
         ENGINEERING: 2,
         TENDER: 3
     };
-    let theTender = await projectModel.findOne({ID: tenderID});
+    let theTender = await projectModel.findOne({userID: userID, ID: tenderID}); //加上session的userID,防止tenderID被篡改过
     if (!theTender) {
         return null;
     }
@@ -1083,9 +1083,9 @@ async function getProjectByGranularity(tenderID, granularity, userID, versionNam
     } else {
         engineerings = [theEngineering];
         if (granularity === GRANULARITY.ENGINEERING) {
-            theEngineering._doc.children = theTender;
-        } else {
             theEngineering._doc.children = await projectModel.find({ParentID: theEngineering.ID, $or: notDeleted});
+        } else {
+            theEngineering._doc.children = [theTender];
         }
     }
     constructionProject._doc.children = engineerings;

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

@@ -202,6 +202,13 @@ class LoginController {
                 throw '接口返回数据错误';
             }
 
+            // 正确登录后 存入session
+            let userData = responseData[0];
+
+            if (userData.mobile === '') {
+                return response.json({error: 2,ssoId: userData.id});
+            }
+
             const userInfo = await userModel.findDataByAccount(account);
             if (userInfo && userInfo.upgrade_list !== undefined) {
                 for (const ul of userInfo.upgrade_list) {

+ 9 - 0
public/web/gljUtil.js

@@ -308,6 +308,15 @@ let gljUtil = {
         }, "code"])
         return list;
     },
+    getTotalQuantity:function(glj,ration,rd,gd){
+        if(ration){
+            let quantity = ration.quantity;
+            quantity = (quantity == 0 || quantity == undefined || quantity == null || quantity == "") ? 0 : quantity;
+            quantity = scMathUtil.roundForObj(quantity, rd);//计算前进行4舍5入
+            glj.quantity = scMathUtil.roundForObj(glj.quantity, gd);
+            return scMathUtil.roundToString(quantity * glj.quantity, gd);
+        }
+    },
     fixedFlag : {
         // 分部分项工程
         SUB_ENGINERRING: 1,

+ 1 - 1
web/building_saas/complementary_ration_lib/js/main.js

@@ -28,7 +28,7 @@ let compleRationMain = {
                 }
             }
         };
-        let ration_lib = projectInfoObj.projectInfo.engineeringInfo.ration_lib;
+        let ration_lib = projectObj.project.projectInfo.engineeringInfo.ration_lib;
         let ids = [];
         for(lib of ration_lib){
             ids.push(parseInt(lib.id));

+ 7 - 0
web/building_saas/css/custom.css

@@ -315,4 +315,11 @@ input.text-right{
     display: none;
     color: #43CD80;
     margin-left: 8px
+}
+.font_blue{
+    color: #3FB2E5;
+}
+
+.nomargin{
+    margin: 0px;
 }

+ 1 - 1
web/building_saas/fee_rates/fee_rate.html

@@ -5,7 +5,7 @@
     <div class="form-inline py-1">
         <label  class="mx-2" >使用费率文件:<span id="feeRateFileName">费率1</span>(<label class="a_color" id="pop-lv">与<span id="projectCount">3</span> 个单位工程同步</label>)
             <a class="btn btn-sm ml-1" href="#" data-toggle="modal" data-target="#change-lv" id="changFeeRateFile"><i class="fa fa-exchange"></i> 选择其他</a>
-            <a class="btn btn-sm ml-1" href="#" data-toggle="modal" id="saveAs" data-target="#copy-lv"><i class="fa fa-files-o"></i> 另存单独用</a></label>
+            <a class="btn btn-sm ml-1" href="#" data-toggle="modal" id="saveAsFeeRate" data-target="#copy-lv"><i class="fa fa-files-o"></i> 另存单独用</a></label>
     </div>
 </div>
 <div class="toolsbar_feeRate px-1">

+ 2 - 2
web/building_saas/glj/js/project_glj.js

@@ -42,8 +42,8 @@ $(document).ready(function () {
     // 单价文件切换弹框
     $('#change-dj').on('shown.bs.modal', function () {
         // 获取当前建设项数据
-        let projectName = projectInfoObj.projectInfo.fullFolder !== undefined &&
-        projectInfoObj.projectInfo.fullFolder.length > 0 ? projectInfoObj.projectInfo.fullFolder[0] : '';
+        let projectName = projectObj.project.projectInfo.fullFolder !== undefined &&
+        projectObj.project.projectInfo.fullFolder.length > 0 ? projectObj.project.projectInfo.fullFolder[0] : '';
         $("#current-project-name").text(projectName);
 
         // 获取切换单价文件相关数据

+ 2 - 1
web/building_saas/main/html/main.html

@@ -1997,6 +1997,7 @@
     <script src="/lib/spreadjs/views/plugins/gc.spread.views.gridlayout.10.0.0.min.js" type="text/javascript"></script>
     <script src="/lib/js-xlsx/xlsx.core.min.js"></script>
     <script src="/lib/lz-string/lz-string.min.js"></script>
+    <script src="/lib/fileSaver/FileSaver.min.js"></script>
     <!-- inject:js -->
     <!--<script type="text/javascript" src="/test/tmp_data/test_ration_calc/ration_calc_base.js"></script>-->
     <script type="text/javascript" src="/web/building_saas/main/js/models/main_consts.js"></script>
@@ -2131,7 +2132,7 @@
         <script type="text/javascript">
             projectGljObject.initFilterTypeList();
             optionsOprObj.getOptions();
-            projectInfoObj.showProjectInfo();
+            //projectInfoObj.showProjectInfo();
             projectObj.checkMainSpread();
             projectObj.loadProjectData();
            // autoFlashHeight();

+ 2 - 2
web/building_saas/main/js/controllers/block_controller.js

@@ -81,7 +81,7 @@ let BlockController = {
     copyBlock:function (selection) {
         let startTime = +new Date();
         let blockOjb = {
-            compilationID:projectInfoObj.projectInfo.compilation,
+            compilationID:projectObj.project.projectInfo.compilation,
             datas:[]
         };
         let firstNode = projectObj.project.mainTree.items[selection.row];
@@ -219,7 +219,7 @@ let BlockController = {
         let firstParentID = null, lastNextID = null;
         let updateData = [],billUpdate = null;
         let billsIDMap = {};//用来做新旧ID映射
-        if(blockData.compilationID != projectInfoObj.projectInfo.compilation){//如果编办不一样,不能复制
+        if(blockData.compilationID != projectObj.project.projectInfo.compilation){//如果编办不一样,不能复制
             alert("编办不一致,不能粘贴!");
             return;
         }

+ 2 - 2
web/building_saas/main/js/models/calc_program.js

@@ -1523,7 +1523,7 @@ class CalcProgram {
         // 存储费率临时数据,报表用。
         if (me.saveForReports.length > 0){
             let saveDatas = {};
-            saveDatas.projectID = projectInfoObj.projectInfo.ID;
+            saveDatas.projectID = projectObj.project.projectInfo.ID;
             saveDatas.calcItems = me.saveForReports;
             CommonAjax.post('/calcProgram/saveCalcItems', saveDatas, function (result) {
                 if (result){
@@ -1886,7 +1886,7 @@ class CalcProgram {
                 };
             };
             // 2018-08-27   zhang  插入空定额的时候,取费专业也为空
-           // if (treeNode.data.programID == undefined) treeNode.data.programID = projectInfoObj.projectInfo.property.engineering;
+           // if (treeNode.data.programID == undefined) treeNode.data.programID = projectObj.project.projectInfo.property.engineering;
             let template = me.compiledTemplates[treeNode.data.programID];
             treeNode.data.calcTemplate = template;
 

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1605 - 663
web/building_saas/main/js/models/exportStandardInterface.js


+ 6 - 6
web/building_saas/main/js/models/fee_rate.js

@@ -350,9 +350,9 @@ var FeeRate = {
             this.datas.ID = uuid.v1();
             this.datas.feeRateID=uuid.v1();
             this.datas.usageProjects=[];
-            this.datas.usageProjects.push({name:projectInfoObj.projectInfo.name,ID:projectInfoObj.projectInfo.ID});
+            this.datas.usageProjects.push({name:projectObj.project.projectInfo.name,ID:projectObj.project.projectInfo.ID});
             var data={
-                query:{projectID:projectInfoObj.projectInfo.ID},
+                query:{projectID:projectObj.project.projectInfo.ID},
                 doc:this.datas,
                 user_id:userID
             }
@@ -364,11 +364,11 @@ var FeeRate = {
             });
         };
         FeeRate.prototype.getChangeInfo = function (callback) {
-           // var projectID = projectInfoObj.projectInfo.ID;
+           // var projectID = projectObj.project.projectInfo.ID;
             var feeRate = this.getActivateFeeRate();
             var  rootProjectID= feeRate.rootProjectID;
             if(!rootProjectID){
-                rootProjectID=projectInfoObj.projectInfo.property.rootProjectID;
+                rootProjectID=projectObj.project.projectInfo.property.rootProjectID;
             }
             var data={
                 "user_id":userID,
@@ -605,7 +605,7 @@ var FeeRate = {
         };
         FeeRate.prototype.changeFeeRateFileFromCurrent = function (newFeeRateFile,callback){
             let me=this;
-            let projectID = projectInfoObj.projectInfo.ID;
+            let projectID = projectObj.project.projectInfo.ID;
             let data={
                 "projectID": projectID,
                 "newFeeRateFile":newFeeRateFile
@@ -622,7 +622,7 @@ var FeeRate = {
 
         FeeRate.prototype.changeFeeRateFileFromOthers=function (feeRateFileID,name,callback) {
             let me = this;
-            let projectID = projectInfoObj.projectInfo.ID;
+            let projectID = projectObj.project.projectInfo.ID;
             let data={
                 "projectID": projectID,
                 "feeRateFileID":feeRateFileID,

+ 4 - 4
web/building_saas/main/js/models/installation_fee.js

@@ -202,7 +202,7 @@ var installation_fee = {
         };
        installation_fee.prototype.submitInstallationUpdate = function (updateData,rationInstallations,callback) {
             if(updateData){
-                let data = {'projectID':projectInfoObj.projectInfo.ID,'updateData':updateData};
+                let data = {'projectID':projectObj.project.projectInfo.ID,'updateData':updateData};
                 if(rationInstallations){//是否附带更新定额安装费
                     data['rationInstallations'] = rationInstallations;
                 }
@@ -224,8 +224,8 @@ var installation_fee = {
         };
        installation_fee.prototype.calcInstallationFee=function(callback){
             let project = projectObj.project,me = this;
-            let engineering = projectInfoObj.projectInfo.property.engineering;
-            let installSetting = projectInfoObj.projectInfo.property.installSetting;
+            let engineering = projectObj.project.projectInfo.property.engineering;
+            let installSetting = projectObj.project.projectInfo.property.installSetting;
             let rationInstallation  = project.ration_installation;
             let BXs =  project.Bills.getAllBXs();//取所有补项
             let allBillsDatas = _.sortBy(_.cloneDeep(project.Bills.datas),'code');//取所有清单信息,用来查找清单信息和存放中间过程产生的清单
@@ -733,7 +733,7 @@ var installation_fee = {
                 bills: []
             };
             CommonAjax.post('/pm/api/updateMixDatas', {user_id: userID, mixDataArr: mixDatas}, function (rstData) {
-                projectInfoObj.projectInfo.property.installSetting = newValue;
+                projectObj.project.projectInfo.property.installSetting = newValue;
                 if(callback){
                     callback();
                 }

+ 31 - 3
web/building_saas/main/js/models/main_consts.js

@@ -16,7 +16,8 @@ const ModuleNames = {
     quantity_detail:'quantity_detail',
     labour_coe: 'labour_coe',
     calc_program: 'calc_program',
-    installation_fee:'installation_fee'
+    installation_fee:'installation_fee',
+    projectInfo: 'project_info'
 };
 
 let gljType = gljUtil.gljType;
@@ -246,9 +247,36 @@ const fixedFlag = {
     //专项技术措施暂估价
     SPECIAL_TECH_PROVISIONAL: 21,
     //专业发包工程管理费
-    LET_CONTRACT_MANAGEMENT: 22
+    LET_CONTRACT_MANAGEMENT: 22,
+    //人工
+    LABOUR: 23,
+    //材料
+    MATERIAL: 24,
+    //施工机械
+    MACHINE: 25,
+    //索赔
+    CLAIM: 26,
+    //现场签证
+    VISA: 27,
+    //附加税
+    ADDITIONAL_TAX: 28,
+    //环境保护税
+    ENVIRONMENTAL_PROTECTION_TAX: 29
+};
+//费用类别:固定行ID对应
+const FEE_TYPE = {
+    [fixedFlag.SUB_ENGINERRING]: '1100',
+    [fixedFlag.MEASURE]: '1200',
+    [fixedFlag.CONSTRUCTION_ORGANIZATION]: '120201',
+    [fixedFlag.SAFETY_CONSTRUCTION]: '1204',
+    [fixedFlag.OTHER]: '1300',
+    [fixedFlag.CHARGE]: '800',
+    [fixedFlag.TAX]: '900',
+    [fixedFlag.ADDED_VALUE_TAX]: '9001',
+    [fixedFlag.ADDITIONAL_TAX]: '9002',
+    [fixedFlag.ENVIRONMENTAL_PROTECTION_TAX]: '9003',
+    0: '1800',  //其他未定义的大项费用
 };
-
 const gljKeyArray =['code','name','specs','unit','type'];
 const rationKeyArray =['code','name','specs','unit','subType'];
 const gljLibKeyArray =['code', 'name', 'specs', 'unit', 'gljType'];

+ 18 - 8
web/building_saas/main/js/models/project.js

@@ -42,6 +42,8 @@ var PROJECT = {
                     me._project.projSetting.moduleName = me.projSetting;
                 }else if(item.moduleName === ModuleNames.projectGLJ){
                     me._project.projectGLJ.loadToCache(item.data);
+                } else if (item.moduleName === ModuleNames.projectInfo) {
+                    me._project.projectInfo = item.data;
                 }
             });
             for (module in counter) {
@@ -52,7 +54,9 @@ var PROJECT = {
 
             me._project.loadMainTree();
             //me.test(result[0].data[0]);
-            callback(0);
+            if (callback) {
+                callback(0);
+            }
         };
         tools.eachItem=function(item){
             if (me.modules[item.moduleName]){
@@ -149,8 +153,8 @@ var PROJECT = {
                     newNode.source = br[i];
                     newNode.sourceType = that.Ration.getSourceType();
                     newNode.data = br[i];
-                    if(projectInfoObj.projectInfo.property.displaySetting !== undefined &&
-                        projectInfoObj.projectInfo.property.displaySetting.disPlayMainMaterial==true){
+                    if(projectObj.project.projectInfo.property.displaySetting !== undefined &&
+                        projectObj.project.projectInfo.property.displaySetting.disPlayMainMaterial==true){
                         loadRationGLJNode(newNode);
                     }
                 }
@@ -240,6 +244,12 @@ var PROJECT = {
                 }
             });
         };
+        project.prototype.loadDataSync = async function () {
+            let data = await ajaxPost('/project/getData', {user_id: tools._userID, project_id: tools._ID});
+            if (data) {
+                tools.doAfterLoad(data);
+            }
+        };
 
         project.prototype.beginUpdate = function(operation){
             if (tools.updateLock === 0){
@@ -325,12 +335,12 @@ var PROJECT = {
 
         project.prototype.projectMarkChecking = function () {
             let me = this;
-            let  changeMark = projectInfoObj.projectInfo.changeMark;
+            let  changeMark = projectObj.project.projectInfo.changeMark;
             if(changeMark&&changeMark!=''){
                 this.Bills.getEngineeringCostNode(projectObj.mainController).changed = true;
                 this.calcProgram.calcAllNodesAndSave();
                 CommonAjax.post("/project/removeProjectMark",{projectID:me.ID()},function (data) {
-                    delete projectInfoObj.projectInfo.changeMark;
+                    delete projectObj.project.projectInfo.changeMark;
                     if(socket.connected == true){//如果这时候socket已经连接成功,则发送删除标记广播
                         socket.emit('removeProjectMark',{projectID:me.ID(),userID:userID});
                     }else {//如果还没连接成功,则放入消息对象缓存,等socket连接成功后发送
@@ -352,7 +362,7 @@ var PROJECT = {
             };
             $.bootstrapLoading.start();
             CommonAjax.post('/pm/api/updateMixDatas', {user_id: userID, mixDataArr: mixDatas}, function (rstData) {
-                projectInfoObj.projectInfo.property.lockBills = value;
+                projectObj.project.projectInfo.property.lockBills = value;
                 if(callback){
                     callback();
                 }
@@ -361,7 +371,7 @@ var PROJECT = {
         };
         //返回清单是否被锁定
         project.prototype.isBillsLocked =function(){
-            if(projectInfoObj.projectInfo.property.lockBills == true){
+            if(projectObj.project.projectInfo.property.lockBills == true){
                 return true;
             }
             return false;
@@ -532,7 +542,7 @@ var PROJECT = {
 
         //判断项目是否安装工程
         project.prototype.isInstall = function () {
-            return projectInfoObj.projectInfo.property.isInstall?true:false;//如果是undefinded 就也返回false
+            return projectObj.project.projectInfo.property.isInstall?true:false;//如果是undefinded 就也返回false
         };
 
         /*        project.prototype.setBillsCalcMode = function (calcMode) {

+ 11 - 12
web/building_saas/main/js/models/project_glj.js

@@ -56,7 +56,6 @@ ProjectGLJ.prototype.loadData = function (callback = null) {
 
 ProjectGLJ.prototype.loadToCache = function (data) {
     this.datas = data;
-    projectObj.project.projectGLJ = this;
 }
 
 
@@ -567,7 +566,7 @@ ProjectGLJ.prototype.addMixRatio = function(selections,callback){
 }
 
 ProjectGLJ.prototype.checkUnitFileName = function(newVal,callback){
-    let property = projectInfoObj.projectInfo.property;
+    let property = projectObj.project.projectInfo.property;
     let data = {
         name:newVal,
         rootProjectID:property.rootProjectID
@@ -691,7 +690,7 @@ ProjectGLJ.prototype.getByConKey = function (conkey) {//根据5个连接属性
 
 
 ProjectGLJ.prototype.refreshTreeNodePriceIfNeed = function (data) {
-    if ((data.unit_price.type == gljType.MAIN_MATERIAL || data.unit_price.type == gljType.EQUIPMENT) && projectInfoObj.projectInfo.property.displaySetting.disPlayMainMaterial == true) {
+    if ((data.unit_price.type == gljType.MAIN_MATERIAL || data.unit_price.type == gljType.EQUIPMENT) && projectObj.project.projectInfo.property.displaySetting.disPlayMainMaterial == true) {
         let me = this;
         var nodes = _.filter(projectObj.project.mainTree.items, function (tem) {
             if (tem.sourceType == ModuleNames.ration_glj && tem.data.projectGLJID == data.id) {
@@ -712,7 +711,7 @@ ProjectGLJ.prototype.getMainAndEquGLJNodeByID = function (id) {//通过ID取显
     }else {
         ids = [id];
     }
-    if(projectInfoObj.projectInfo.property.displaySetting.disPlayMainMaterial == true){
+    if(projectObj.project.projectInfo.property.displaySetting.disPlayMainMaterial == true){
          nodes = _.filter(projectObj.project.mainTree.items, function (tem) {
             return tem.sourceType == ModuleNames.ration_glj && ids.indexOf(tem.data.projectGLJID)  !== -1
         })
@@ -809,16 +808,16 @@ ProjectGLJ.prototype.setAdjustPrice = function (glj) {
 
 ProjectGLJ.prototype.getAdjustPrice = function (glj,isRadio) {
     let proGLJ =  projectObj.project.projectGLJ;
-    let calcOptions=projectInfoObj.projectInfo.property.calcOptions;
-    let decimalObj = projectInfoObj.projectInfo.property.decimal;
+    let calcOptions=projectObj.project.projectInfo.property.calcOptions;
+    let decimalObj = projectObj.project.projectInfo.property.decimal;
     let labourCoeDatas =  projectObj.project.labourCoe.datas;
     return gljUtil.getAdjustPrice(glj,proGLJ.datas,calcOptions,labourCoeDatas,decimalObj,isRadio,_,scMathUtil);
 };
 
 ProjectGLJ.prototype.getBasePrice = function(glj,isRadio){
     let proGLJ =  projectObj.project.projectGLJ;
-    let calcOptions=projectInfoObj.projectInfo.property.calcOptions;
-    let decimalObj = projectInfoObj.projectInfo.property.decimal;
+    let calcOptions=projectObj.project.projectInfo.property.calcOptions;
+    let decimalObj = projectObj.project.projectInfo.property.decimal;
     let labourCoeDatas =  projectObj.project.labourCoe.datas;
     return gljUtil.getBasePrice(glj,proGLJ.datas,calcOptions,labourCoeDatas,decimalObj,isRadio,_,scMathUtil);
 };
@@ -826,16 +825,16 @@ ProjectGLJ.prototype.getBasePrice = function(glj,isRadio){
 
 ProjectGLJ.prototype.getMarketPrice = function (glj,isRadio) {
     let proGLJ =  projectObj.project.projectGLJ;
-    let calcOptions=projectInfoObj.projectInfo.property.calcOptions;
-    let decimalObj = projectInfoObj.projectInfo.property.decimal;
+    let calcOptions=projectObj.project.projectInfo.property.calcOptions;
+    let decimalObj = projectObj.project.projectInfo.property.decimal;
     let labourCoeDatas =  projectObj.project.labourCoe.datas;
     return gljUtil.getMarketPrice(glj,proGLJ.datas,calcOptions,labourCoeDatas,decimalObj,isRadio,_,scMathUtil);
 };
 
 ProjectGLJ.prototype.getTenderMarketPrice = function (glj,isRadio) {
     let proGLJ =  projectObj.project.projectGLJ;
-    let calcOptions=projectInfoObj.projectInfo.property.calcOptions;
-    let decimalObj = projectInfoObj.projectInfo.property.decimal;
+    let calcOptions=projectObj.project.projectInfo.property.calcOptions;
+    let decimalObj = projectObj.project.projectInfo.property.decimal;
     let labourCoeDatas =  projectObj.project.labourCoe.datas;
     let tenderCoe = 1;
     if (projectObj.project.property.tenderSetting && gljUtil.isDef(projectObj.project.property.tenderSetting.gljPriceTenderCoe) ){

+ 7 - 7
web/building_saas/main/js/models/ration.js

@@ -117,14 +117,14 @@ var Ration = {
         };
         ration.prototype.getTempRationData = function (id, billsID, serialNo, rType,priceType) {
             let newData = {'ID': id, 'serialNo': serialNo, projectID: this.project.ID()};
-            let pEngineer = projectInfoObj.projectInfo.property.projectEngineering;//量价默认使用后台设置的单位工程取费专业
+            let pEngineer = projectObj.project.projectInfo.property.projectEngineering;//量价默认使用后台设置的单位工程取费专业
             newData[project.masterField.ration] = billsID;
             newData['type'] = rType;
             if (rType == rationType.volumePrice){
                 newData['subType'] =  priceType?priceType:gljType.GENERAL_MATERIAL;   // 如果priceType 没传,默认的量价类型为材料
             };
             if(rType == rationType.ration){//空定额暂时不输入取费专业
-               // newData['programID'] = projectInfoObj.projectInfo.property.engineering;
+               // newData['programID'] = projectObj.project.projectInfo.property.engineering;
             }else {
                 if(pEngineer) newData['programID'] = pEngineer;
             }
@@ -389,8 +389,8 @@ var Ration = {
             let libID =  rationLibObj.getCurrentStdRationLibID();
             let libIDs = rationLibObj.getStdRationLibIDs();
             let defaultLibID = rationLibObj.getDefaultStdRationLibID();
-            let engineering = projectInfoObj.projectInfo.property.engineering;
-            let projectID = projectInfoObj.projectInfo.ID;
+            let engineering = projectObj.project.projectInfo.property.engineering;
+            let projectID = projectObj.project.projectInfo.ID;
             let project = projectObj.project;
             let mainTree = project.mainTree;
             let nodeInfo =[];
@@ -446,7 +446,7 @@ var Ration = {
         ration.prototype.addMultiRation = function (items, callback) {
             let me = this;
             let project = projectObj.project, sheetController = projectObj.mainController;
-            let engineering = projectInfoObj.projectInfo.property.engineering;
+            let engineering = projectObj.project.projectInfo.property.engineering;
             let selected = project.mainTree.selected, newSource = null, newNode = null,pre = null,br = null;
             let billItemID = null,serialNo=1,nextID=null;
             let needInstall = false;
@@ -558,7 +558,7 @@ var Ration = {
         ration.prototype.addNewRation = function (itemQuery,rationType,callback=null,isEmpty=false,priceType,needCalcAndSave=true) {//priceType 是量价类型
             let me = this;
             let project = projectObj.project, sheetController = projectObj.mainController;
-            let engineering = projectInfoObj.projectInfo.property.engineering;
+            let engineering = projectObj.project.projectInfo.property.engineering;
             let selected = project.mainTree.selected, newSource = null, newNode = null,pre=null,br=null;
             let billItemID = null,serialNo=1,nextID=null;
             let needInstall = false;
@@ -645,7 +645,7 @@ var Ration = {
         ration.prototype.addNewRationFast = function (rationType,callback) {
             let me = this;
             let project = projectObj.project, sheetController = projectObj.mainController;
-            let engineering = projectInfoObj.projectInfo.property.engineering;
+            let engineering = projectObj.project.projectInfo.property.engineering;
             let selected = project.mainTree.selected, newSource = null, newNode = null,pre=null,br=null;
             let billItemID = null,serialNo=1,nextID=null;
             if (selected === null) { return null; }

+ 5 - 2
web/building_saas/main/js/models/ration_coe.js

@@ -143,9 +143,12 @@ var ration_coe = {
             };
             let gljList = project.ration_glj.getGLJListByRationID(record.rationID);
             if(gljUtil.isDef(record.option_codes)&&record.option_codes!=""){ //说明编辑的是下拉选择编号的类型
-                this.prepareDataForOptionType(record,newval,gljList,updateData,replace,codesList,ext);
+                //勾选而不是下拉的情况下,默认选择下拉框中的第一个
+                if(newval == 1 && (!gljUtil.isDef(doc.select_code)||doc.select_code == '')){
+                    if(record.option_list&&record.option_list.length > 0) doc.select_code = record.option_list[0].value;
+                }
+                this.prepareDataForOptionType(record,newval,gljList,updateData,replace,codesList,doc);
             }
-
             for(let coe of record.coes){//做单个、替换等检查
                 if(coe.coeType == "单个工料机"){ //单个工料机的情况
                     let glj = _.find(gljList,{"code":coe.gljCode});

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

@@ -519,7 +519,7 @@ let ration_glj = {
            return node
         };
         ration_glj.prototype.getGLJData = function (cb) {
-            let property = projectInfoObj.projectInfo.property;
+            let property = projectObj.project.projectInfo.property;
             let engineerID = property.engineering_id;
             CommonAjax.get('/rationGlj/getGLJData/'+engineerID, function (data) {
                 //编办中有多单价设置
@@ -539,7 +539,7 @@ let ration_glj = {
             let gljList = [];
             let allGLJ = gljOprObj.AllRecode;
             let billsItemID = null, serialNo = 0,selectedSerialNo = null,nextNodeID = null, parentNodeID = null, billNode = null;
-            let pEngineer = projectInfoObj.projectInfo.property.projectEngineering;
+            let pEngineer = projectObj.project.projectInfo.property.projectEngineering;
             let children = [];
             if (selected.sourceType === project.Bills.getSourceType()) {
                 billsItemID = selected.data.ID;
@@ -635,7 +635,7 @@ let ration_glj = {
                 return
             }
             $.bootstrapLoading.start();
-            CommonAjax.post("/rationGlj/getGLJDataByCodes", { 'engineerID':projectInfoObj.projectInfo.property.engineering_id,projectID:projectObj.project.ID(),codes:codes}, function (result) {
+            CommonAjax.post("/rationGlj/getGLJDataByCodes", { 'engineerID':projectObj.project.projectInfo.property.engineering_id,projectID:projectObj.project.ID(),codes:codes}, function (result) {
                 $.bootstrapLoading.end();
                 callback(result)
             });
@@ -944,7 +944,7 @@ let ration_glj = {
             }
         };
         ration_glj.prototype.needShowToTree = function (data) {
-            if ((data.type == gljType.MAIN_MATERIAL || data.type == gljType.EQUIPMENT) && projectInfoObj.projectInfo.property.displaySetting.disPlayMainMaterial == true) {
+            if ((data.type == gljType.MAIN_MATERIAL || data.type == gljType.EQUIPMENT) && projectObj.project.projectInfo.property.displaySetting.disPlayMainMaterial == true) {
                 return true
             }
             return false

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

@@ -52,7 +52,7 @@ var VolumePrice = {
                 var newData = {'ID': newID, 'serialNo': serialNo, projectID: tools.owner.ID()};
                 newData[project.masterField.volumePrice] = billsID;
                 newData.type = '材料';
-                newData.programID = projectInfoObj.projectInfo.property.engineering;
+                newData.programID = projectObj.project.projectInfo.property.engineering;
                 return newData;
             };
             getBillsSortVolumePrice (billsID) {

+ 2 - 2
web/building_saas/main/js/views/billsElf.js

@@ -271,8 +271,8 @@ const BillsElf = (function() {
         bills.selected = node;
         if(!node.elf.tree){
             let guidanceLibID;
-            if (projectInfoObj.projectInfo.engineeringInfo && projectInfoObj.projectInfo.engineeringInfo.billsGuidance_lib) {
-                guidanceLibID = projectInfoObj.projectInfo.engineeringInfo.billsGuidance_lib[0] ? projectInfoObj.projectInfo.engineeringInfo.billsGuidance_lib[0].id : null;
+            if (projectObj.project.projectInfo.engineeringInfo && projectObj.project.projectInfo.engineeringInfo.billsGuidance_lib) {
+                guidanceLibID = projectObj.project.projectInfo.engineeringInfo.billsGuidance_lib[0] ? projectObj.project.projectInfo.engineeringInfo.billsGuidance_lib[0].id : null;
             }
             CommonAjax.post('/billsGuidance/api/getItemsByCode', {guidanceLibID: guidanceLibID, code: nineCode}, function (rstData) {
                 //定额数据删除编号信息,(编码后+空格才会去除编码)

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

@@ -73,7 +73,7 @@ var blockLibObj = {
         $.bootstrapLoading.start();
         let me = this;
         let namesAndLib = await ajaxPost('/blockLib/getLibNamesAndFirstLib',
-            {userID: userID, userName: $("#link_userName").text(), compilationID: projectInfoObj.projectInfo.compilation});
+            {userID: userID, userName: $("#link_userName").text(), compilationID: projectObj.project.projectInfo.compilation});
         function getLibNamesHtml(libsArr) {
             let result = '';
             for (let lib of libsArr) {

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

@@ -113,7 +113,7 @@ let calcProgramManage = {
             return result;
         };
 
-        let stdCPHtml = getStdCPFilesHtml(projectInfoObj.projectInfo.engineeringInfo.program_lib);
+        let stdCPHtml = getStdCPFilesHtml(projectObj.project.projectInfo.engineeringInfo.program_lib);
         $("#calcProgramFileSelect").html(stdCPHtml);
     },
     onMainEnterCell: function(sender, args) {

+ 10 - 10
web/building_saas/main/js/views/character_content_view.js

@@ -180,7 +180,7 @@ let contentOprObj = {
         pageCCOprObj.setCharacterBySetting(selectedNode, setting, callback, contentOprObj);
     },
     onEditStart(sender, args){
-        if(projectInfoObj.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
+        if(projectObj.project.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
             args.cancel = true;
             return;
         }
@@ -204,7 +204,7 @@ let contentOprObj = {
         if(args.sheet.isEditing()){
             args.sheet.endEdit(true);
         }
-        if(projectInfoObj.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
+        if(projectObj.project.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
             args.sheet.setValue(args.row, args.col, 0);
             return;
         }
@@ -239,7 +239,7 @@ let contentOprObj = {
     },
     //复制粘贴
     onClipboardPasting: function (sender, args) {
-        if(projectInfoObj.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
+        if(projectObj.project.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
             args.cancel = true;
             return;
         }
@@ -273,7 +273,7 @@ let contentOprObj = {
         let me = contentOprObj;
         let disObj = {jobAdd: false, jobInsert: true, jobDel: true, jobUp: true, jobDown: true};
         disObj.jobAdd = !pageCCOprObj.canAddType();
-        if(projectInfoObj.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
+        if(projectObj.project.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
             disObj.jobAdd = true;
             disObj.jobInsert = true;
             disObj.jobDel = true;
@@ -330,7 +330,7 @@ let contentOprObj = {
                 let addDis = pageCCOprObj.canAddType() ? false : true,  insertDis = false, delDis = false, upDis = false, downDis = false;
                 if(target.hitTestType === 3){//在表格内&& typeof target.row !== 'undefined' && typeof target.col !== 'undefined'
                     //清单锁定,不可用
-                    if(projectInfoObj.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
+                    if(projectObj.project.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
                         addDis = true;
                         insertDis = true;
                         delDis = true;
@@ -683,7 +683,7 @@ let characterOprObj = {
     },
     onEditStart: function (sender, args) {
         let me = characterOprObj;
-        if(projectInfoObj.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
+        if(projectObj.project.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
             args.cancel = true;
             return;
         }
@@ -709,7 +709,7 @@ let characterOprObj = {
         }
     },
     onClipboardPasting: function (sender, args) {
-        if(projectInfoObj.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
+        if(projectObj.project.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
             args.cancel = true;
         }
         if(args.cellRange.col + args.colCount - 1 > 1){
@@ -766,7 +766,7 @@ let characterOprObj = {
         if(args.sheet.isEditing()){
             args.sheet.endEdit(true);
         }
-        if(projectInfoObj.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
+        if(projectObj.project.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
             args.sheet.setValue(args.row, args.col, 0);
             return;
         }
@@ -791,7 +791,7 @@ let characterOprObj = {
         let disObj = {itemAdd: false, itemInsert: true, itemDel: true, itemUp: true, itemDown: true};
         disObj.itemAdd = !pageCCOprObj.canAddType();
         //清单锁定,不可用
-        if(projectInfoObj.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
+        if(projectObj.project.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
             disObj.itemAdd = true;
             disObj.itemInsert = true;
             disObj.itemDel = true;
@@ -836,7 +836,7 @@ let characterOprObj = {
                 let addDis = pageCCOprObj.canAddType() ? false : true, insertDis = false, delDis = false, upDis = false, downDis = false;
                 if(target.hitTestType === 3){//在表格内 && typeof target.row !== 'undefined' && typeof target.col !== 'undefined'
                     //清单锁定,则不可用
-                    if(projectInfoObj.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
+                    if(projectObj.project.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
                         addDis = true;
                         insertDis = true;
                         delDis = true;

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

@@ -1039,7 +1039,7 @@ $(function(){
         //if(newVal&&newVal!=feeRateFile.libID)  feeRateObject.changeFeeRateStandard(newVal);
     });
 
-    $('#saveAs').bind('click', function (){
+    $('#saveAsFeeRate').bind('click', function (){
         var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
         $('#copyFeeRateName').val(feeRateFile.name+'副本');
         $('#valid_name').val(feeRateFile.name+'副本');

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

@@ -685,21 +685,13 @@ var gljOprObj = {
         }
     },
     getTotalQuantity:function(glj,ration){
+        if (glj.isMixRatio == true) return;//如果是用于显示的组成物,则不用计算,跳过
         ration=ration?ration: _.find(projectObj.project.Ration.datas,{"ID":glj.rationID});
-        if(ration){
-            let quantity = ration.quantity;
-            quantity = (quantity == 0 || quantity == undefined || quantity == null || quantity == "") ? 0 : quantity;
-            if (glj.isMixRatio == true) {//如果是用于显示的组成物,则不用计算,跳过
-                return;
-            }
-            quantity = scMathUtil.roundForObj(quantity, getDecimal("ration.quantity"));//计算前进行4舍5入
-            glj.quantity = scMathUtil.roundForObj(glj.quantity, getDecimal("glj.quantity"));
-            glj.totalQuantity = scMathUtil.roundToString(quantity * glj.quantity, getDecimal("glj.quantity"));
-            if (glj.hasOwnProperty('subList')) {//需要计算glj下挂的组成物的总消耗量
-                this.calcMixRationTotalQuantity(glj.subList,glj.totalQuantity);
-            }
-            return  glj.totalQuantity;
+        glj.totalQuantity = gljUtil.getTotalQuantity(glj,ration,getDecimal("ration.quantity"),getDecimal("glj.quantity"));
+        if (glj.hasOwnProperty('subList')) {//需要计算glj下挂的组成物的总消耗量
+            this.calcMixRationTotalQuantity(glj.subList,glj.totalQuantity);
         }
+        return  glj.totalQuantity;
     },
     calcMixRationTotalQuantity(mList,pTotal){ //计算组成物的总消耗量
         for (let subG of mList) {
@@ -745,8 +737,8 @@ var gljOprObj = {
     },
     setGLJPrice:function (data,glj,isRadio = false) {//isRadio 标记是否算组成物的价格
         let proGLJ =  projectObj.project.projectGLJ;
-        let calcOptions=projectInfoObj.projectInfo.property.calcOptions;
-        let decimalObj = projectInfoObj.projectInfo.property.decimal;
+        let calcOptions=projectObj.project.projectInfo.property.calcOptions;
+        let decimalObj = projectObj.project.projectInfo.property.decimal;
         let labourCoeDatas =  projectObj.project.labourCoe.datas;
         glj = glj?glj:_.find(proGLJ.datas.gljList, {'id': data.projectGLJID});
         if(glj){
@@ -770,18 +762,19 @@ var gljOprObj = {
         }
     },
     calcPriceDiff:function (glj) {
-        let calcOptions=projectInfoObj.projectInfo.property.calcOptions;
+        let calcOptions=projectObj.project.projectInfo.property.calcOptions;
         return gljUtil.calcPriceDiff(glj,calcOptions);
     },
     getIndex(obj, pops){
-        let t_index = '';
+        return gljUtil.getIndex(obj,pops);
+       /* let t_index = '';
         let k_arr = [];
         for (let p of pops) {
             let tmpK = (obj[p] == undefined || obj[p] == null || obj[p] == '') ? 'null' : obj[p];
             k_arr.push(tmpK);
         }
         t_index = k_arr.join("|-|");
-        return t_index;
+        return t_index;*/
     },
     getConditionByKey(conKey){//将连接字符串转换成对象
         let valueArray = conKey.split("|-|");

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

@@ -401,7 +401,7 @@ function getGLJData(actionType) {
 }
 
 function showGLJClassTree(record) {
-    let engineerID = projectInfoObj.projectInfo.property.engineering_id;
+    let engineerID = projectObj.project.projectInfo.property.engineering_id;
     CommonAjax.post('/rationGlj/getGLJClass/'+engineerID,record, function (data) {
         if(data.exist==true){
             alert("当前人材机已存在。");

+ 4 - 4
web/building_saas/main/js/views/installation_fee_view.js

@@ -1252,8 +1252,8 @@ let installationFeeObj={
         return data;
     },
     calcInstallationFee:function(callback){//计算安装增加费
-        let engineering = projectInfoObj.projectInfo.property.engineering;
-        let installSetting = projectInfoObj.projectInfo.property.installSetting;
+        let engineering = projectObj.project.projectInfo.property.engineering;
+        let installSetting = projectObj.project.projectInfo.property.installSetting;
         let install_fee = projectObj.project.installation_fee;
         let autoCreate = false;
         if(!projectObj.project.isInstall()){//如果不是安装工程,则不用计算
@@ -1322,7 +1322,7 @@ let installationFeeObj={
         });
     },
     initSettingRadio:function () {
-        let installSetting = projectInfoObj.projectInfo.property.installSetting;
+        let installSetting = projectObj.project.projectInfo.property.installSetting;
         //radio 值设置
         if(installSetting==undefined||installSetting=="0"){
             $("#all_project_calc").prop("checked",true);
@@ -1454,7 +1454,7 @@ $(function () {
     $("input[name='install_setting_radios']").each(function(){
         $(this).click(function(){
             var settingVal = $(this).val();
-            let installSetting = projectInfoObj.projectInfo.property.installSetting;
+            let installSetting = projectObj.project.projectInfo.property.installSetting;
             if(installSetting==settingVal){
                 return;
             }

+ 6 - 5
web/building_saas/main/js/views/main_tree_col.js

@@ -453,14 +453,15 @@ let MainTreeCol = {
         let ration_glj = projectObj.project.ration_glj;
         let gljList = gljOprObj.filterGljByRation(node.data, ration_glj.datas);
         gljList = gljUtil.sortRationGLJ(gljList);
-        for(let glj of gljList){
-            tips += `${glj.code} ${glj.name}${glj.specs ? '&nbsp;&nbsp;&nbsp;' + glj.specs : ''}&nbsp;&nbsp&nbsp;${glj.unit}&nbsp;&nbsp;&nbsp;${glj.quantity}<br>`;
-        }
         if(node.data.content && node.data.content.toString().trim() !== ''){
-            tips += `工作内容:<br>`;
-            tips += `${node.data.content.replace(/\n/g,"<br>")}<br>`;
+            tips += `<label class="nomargin font_blue">工作内容:<br>`;
+            tips += `${node.data.content.replace(/\n/g,"<br>")}</label><br><br>`;
+        }
+        for(let glj of gljList){
+            tips += `<label class="nomargin ${glj.type==gljType.MAIN_MATERIAL?"font_blue":""}">${glj.code} ${glj.name}${glj.specs ? '&nbsp;&nbsp;&nbsp;' + glj.specs : ''}&nbsp;&nbsp&nbsp;${glj.unit}&nbsp;&nbsp;&nbsp;${glj.quantity}</label><br>`;
         }
         if(node.data.annotation && node.data.annotation.toString().trim() !== ''){
+            tips +='<br>';
             tips += `附注:<br>`;
             tips += `${node.data.annotation.replace(/\n/g,"<br>")}<br>`;
         }

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

@@ -344,7 +344,7 @@ let mbzm_obj={
                     NextSiblingID:-1,
                     code:projectObj.project.Bills.newFormatCode(data.billsLocation),
                     type:billType.BILL,
-                    billsLibId:projectInfoObj.projectInfo.engineeringInfo.bill_lib[0].id,//projectInfoObj.projectInfo.engineeringInfo.billsGuidance_lib
+                    billsLibId:projectObj.project.projectInfo.engineeringInfo.bill_lib[0].id,//projectObj.project.projectInfo.engineeringInfo.billsGuidance_lib
                     billsLocation : data.billsLocation//这个是用来在后端查找清单信息
                 };
                 let existB = projectObj.project.Bills.sameStdCodeBillsData(data.billsLocation);//对于多单位的清单

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

@@ -1173,7 +1173,7 @@ $(function () {
     );
     // 单价文件切换弹框
     $('#change-unitFile').on('shown.bs.modal', function () {
-        let rootProjectID = projectInfoObj.projectInfo.property.rootProjectID;
+        let rootProjectID = projectObj.project.projectInfo.property.rootProjectID;
         // 获取切换单价文件相关数据
         $.ajax({
             url: '/glj/get-project-info',

+ 13 - 22
web/building_saas/main/js/views/project_info.js

@@ -3,7 +3,6 @@
  */
 
 var projectInfoObj = {
-    projectInfo: null,
     getFullPathHtml: function (proj) {
         let fullPath = [], i, pm = '<span class="text-truncate"><a href="/pm">项目管理</a></span>', angleRight = '<span class="text-truncate"><i class="fa fa-angle-right fa-fw"></i></span>';
         if (proj) {
@@ -30,26 +29,18 @@ var projectInfoObj = {
         }
         return fullPath.join('');
     },
-    showProjectInfo: function (proj) {
-        var that = this;
-        CommonAjax.post('/pm/api/getProject', {"user_id": userID, "proj_id": scUrlUtil.GetQueryString('project')}, function (data) {
-            if (data) {
-                that.projectInfo = data;
-                if(!data.engineeringInfo.billsGuidance_lib || data.engineeringInfo.billsGuidance_lib.length === 0){
-                    $('#stdBillsGuidanceTab').addClass('disabled');
-                }
-              /*  else {
-                    $('#stdBillsGuidanceTab').text(data.engineeringInfo.billsGuidance_lib[0].type === 1 ? '清单指引' : '清单精灵');
-                }*/
-
-                //init decimal
-                setDecimal(decimalObj, data.property.decimal);
-                billsQuanDecimal.datas = data.property.billsQuantityDecimal || [billsDecimalView.angleDecimal];
-                basicInfoView.orgDatas = data.property.basicInformation ? basicInfoView.toViewDatas(data.property.basicInformation) : [];
-                projFeatureView.orgDatas = data.property.projectFeature ? projFeatureView.toViewDatas(data.property.projectFeature) : [];
-                $('#fullpath').html(that.getFullPathHtml(that.projectInfo));
-                $("[data-toggle='tooltip']").tooltip();
+    showProjectInfo: function (data) {
+        if (data) {
+            if(!data.engineeringInfo.billsGuidance_lib || data.engineeringInfo.billsGuidance_lib.length === 0){
+                $('#stdBillsGuidanceTab').addClass('disabled');
             }
-        });
+            //init decimal
+            setDecimal(decimalObj, data.property.decimal);
+            billsQuanDecimal.datas = data.property.billsQuantityDecimal || [billsDecimalView.angleDecimal];
+            basicInfoView.orgDatas = data.property.basicInformation ? basicInfoView.toViewDatas(data.property.basicInformation) : [];
+            projFeatureView.orgDatas = data.property.projectFeature ? projFeatureView.toViewDatas(data.property.projectFeature) : [];
+            $('#fullpath').html(this.getFullPathHtml(data));
+            $("[data-toggle='tooltip']").tooltip();
+        }
     }
-};
+};

+ 2 - 2
web/building_saas/main/js/views/project_property_display_view.js

@@ -4,7 +4,7 @@
 let projDisplayView = {
     datas: null,//just for view
     init: function () {
-        this.datas = projectInfoObj.projectInfo.property.displaySetting;
+        this.datas = projectObj.project.projectInfo.property.displaySetting;
         this.datas = this.datas === undefined ? {autoHeight: true, disPlayMainMaterial: true} : this.datas;
         //$("#autoHeight").prop("checked", this.datas.autoHeight);
         $("#billsAutoHeight").prop("checked", this.datas.billsAutoHeight);
@@ -41,7 +41,7 @@ let projDisplayView = {
 let calcOptions = {
     datas: null,//just for view
     init: function () {
-        this.datas = projectInfoObj.projectInfo.property.calcOptions;
+        this.datas = projectObj.project.projectInfo.property.calcOptions;
         $("#calc_main").prop("checked", this.datas.calc_main);
         $("#calc_add").prop("checked", this.datas.calc_add);
         $("#calc_est").prop("checked", this.datas.calc_est);

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

@@ -23,7 +23,7 @@ let labourCoeView = {
             return result;
         };
 
-        let stdLCHtml = getStdLabourCoeFilesHtml(projectInfoObj.projectInfo.engineeringInfo.artificial_lib);
+        let stdLCHtml = getStdLabourCoeFilesHtml(projectObj.project.projectInfo.engineeringInfo.artificial_lib);
         $("#std_labour_coe_files").html(stdLCHtml);
     },
     buildSheet: function (){

+ 18 - 15
web/building_saas/main/js/views/project_view.js

@@ -291,10 +291,10 @@ var projectObj = {
         let stdMatchCode, formatCode, matchs;
         let searchStdBillsAndUpdate = function (stdCode, formatCode) {
             let orgCode = node.data.code?node.data.code.substr(0, 9):"";
-            if (projectInfoObj.projectInfo.engineeringInfo.bill_lib.length === 0) {
+            if (projectObj.project.projectInfo.engineeringInfo.bill_lib.length === 0) {
                 normalUpdate(node,value,stdCode === orgCode);
-            } else if (projectInfoObj.projectInfo.engineeringInfo.bill_lib.length > 0) {
-                let libId = projectInfoObj.projectInfo.engineeringInfo.bill_lib[0].id;
+            } else if (projectObj.project.projectInfo.engineeringInfo.bill_lib.length > 0) {
+                let libId = projectObj.project.projectInfo.engineeringInfo.bill_lib[0].id;
                 CommonAjax.post('/stdBillsEditor/getStdBillsByCode', {userId: userID, billsLibId: libId, code: stdCode}, function (data) {
                     if (data) {
                         function sortItems(serialItems, items){
@@ -402,7 +402,7 @@ var projectObj = {
         if(!isDef(node.data.code) && (!isDef(value) || value.toString().trim() == '')){
             return;
         }
-        if (projectInfoObj.projectInfo.engineeringInfo.ration_lib.length === 0) {
+        if (projectObj.project.projectInfo.engineeringInfo.ration_lib.length === 0) {
             alert('当前项目无定额库,请添加定额库。');
             this.mainController.refreshTreeNode([node], false);
         } else {
@@ -899,6 +899,7 @@ var projectObj = {
         this.project.loadDatas(function (err) {
             let mTime = +new Date();
             console.log(`get data时间——${mTime - startTime}`);
+            projectInfoObj.showProjectInfo(that.project.projectInfo);
             //快速列设置
             if(!colSettingObj.getVisible('itemCharacterText')){
                 switchTznrHtml(true);
@@ -913,7 +914,7 @@ var projectObj = {
 
                 let quantityTime = +new Date();
                 console.log(`计算quantity时间——${quantityTime - mTime}`);
-                that.project.property = projectInfoObj.projectInfo.property;
+                that.project.property = projectObj.project.projectInfo.property;
                 if (typeof overwriteRationCalcBases === 'function')
                     overwriteRationCalcBases(that.project.property.taxType);
                 //that.project.calcProgram.compileAllTemps();
@@ -1100,7 +1101,7 @@ var projectObj = {
                 //如果其下没有定额/量价/人材机,则自动在其下插入一条定额空行,在其后自动插入一条分项空行,焦点跳动至定额空行的编码单元格。
                 else if(selected.children.length === 0){
                     //分项没有后兄弟,且没有锁定清单时在其后插入分项
-                    if(!selected.nextSibling && !(projectInfoObj.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected))){
+                    if(!selected.nextSibling && !(projectObj.project.projectInfo.property.lockBills && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected))){
                         ProjectController.addFX(me.project, me.mainController);
                         //将焦点行设置成原本的行,以插入定额
                         me.mainController.setTreeSelected(me.project.mainTree.items[orgRow]);
@@ -1922,7 +1923,7 @@ var projectObj = {
 
     },
     loadLockBillsButton:function () {
-        if(projectInfoObj.projectInfo.property.lockBills == true){
+        if(projectObj.project.projectInfo.property.lockBills == true){
             //$("a[name='lockBills']").attr("data-original-title","解锁清单");
             $("a[name='lockBills']").html('<i class="fa fa-unlock-alt" aria-hidden="true"></i> 解锁清单');
         }else {
@@ -2076,7 +2077,7 @@ $('#downMove').click(function () {
     }
 });
 $("a[name='lockBills']").click(function () {//点击锁定/解锁清单
-    let lockBills = projectInfoObj.projectInfo.property.lockBills;
+    let lockBills = projectObj.project.projectInfo.property.lockBills;
     lockBills = !lockBills;
     projectObj.project.updateLockBills(lockBills,function () {
         var controller = projectObj.mainController, project = projectObj.project;
@@ -2357,10 +2358,12 @@ $('#compilationIllustration').keyup(function () {
 });
 $('#property_ok').click(async function () {
     //test-----
-    /*let xmlObj = new XMLStandard();
-    let testData = await xmlObj.loadData(projectObj.project.ID());
-    console.log(testData);
-    console.log(xmlObj);*/
+  /*  $.bootstrapLoading.start();
+    let xmlObj = new XMLStandard(userID, 1);
+    await xmlObj.toXml(projectObj.project.ID());
+    console.log(xmlObj);
+    $.bootstrapLoading.end();
+    return;*/
     //test-----
     let project = projectObj.project,
         projectID = project.ID(),
@@ -2791,7 +2794,7 @@ $('#importConfirm').click(function () {
         let sDate = +new Date();
         formData.append('projectID', projectID);
         //要去匹配的清单库(第一个)
-        let matchBillLibId = projectInfoObj.projectInfo.engineeringInfo.bill_lib.length > 0 ? projectInfoObj.projectInfo.engineeringInfo.bill_lib[0].id : null;
+        let matchBillLibId = projectObj.project.projectInfo.engineeringInfo.bill_lib.length > 0 ? projectObj.project.projectInfo.engineeringInfo.bill_lib[0].id : null;
         formData.append('billsLibId', matchBillLibId);
         //选择的表及导入位置
         let importSheetsInfo = importBills.getImportSheetsInfo();
@@ -2942,7 +2945,7 @@ function doAfterImport(resData){
             doAfterImportPosition(positionData);
         }
         //如果清单未锁定,导入后锁定清单
-        /*if(!projectInfoObj.projectInfo.property.lockBills){
+        /*if(!projectObj.project.projectInfo.property.lockBills){
             $("a[name='lockBills']").click();
         }*/
         $.bootstrapLoading.end();
@@ -3045,7 +3048,7 @@ $(function () {
                 // 封装成伟城的块文件格式,直接调用伟城接口(定额这里的业务太多太庞杂,不要再重做一遍,尽量共用,维护代价小)
                 // 块文件要构建自己的树结构,所以也有自己的一部分数据。两种结构揉合在一起,显得有点杂乱,但利大于弊。
                 let vBlock_WC = {
-                    compilationID: projectInfoObj.projectInfo.compilation,
+                    compilationID: projectObj.project.projectInfo.compilation,
                     firstNodeType: node.data.type,
                     isFBFX: projectObj.project.Bills.isFBFX(node),
                     copyTime: +new Date(),

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

@@ -3,7 +3,9 @@
  */
 $(window).resize(function() {
     autoFlashHeight();
-    sheetCommonObj.setColumnWidthByRate($('#stdRationChapter').width() - 40, rationLibObj.rationChapterSpread, rationLibObj.rationChapterTreeSetting.cols);
+    if ($('#stdRationChapter').width() > 0) {
+        sheetCommonObj.setColumnWidthByRate($('#stdRationChapter').width() - 30, rationLibObj.rationChapterSpread, rationLibObj.rationChapterTreeSetting.cols);
+    }
     billsGuidance.setColumnWidthByRate(billsGuidance.elfItem.workBook, $('#zy').width(), billsGuidance.elfItem.headers);
     billsGuidance.refreshWorkBook();
     rationLibObj.refreshSpread();
@@ -181,7 +183,7 @@ var sideToolsObj = {
             SlideResize.loadHorizonWidth(id, [sideResizeEles.eleObj.resize], [sideResizeEles.eleObj.left, sideResizeEles.eleObj.right], function(){
                 if (id === 'stdRationTab') {//加载定额库内部上下高度
                     SlideResize.loadVerticalHeight(rationLibResizeEles.eleObj.module, rationLibResizeEles.eleObj, rationLibResizeEles.limit, function () {
-                        rationLibObj.refreshSpread();
+                        sheetCommonObj.setColumnWidthByRate($('#stdRationChapter').width() - 30, rationLibObj.rationChapterSpread, rationLibObj.rationChapterTreeSetting.cols);
                     });
                 } else if (id === 'blockLibTab') {//块模板库
                     SlideResize.loadMultiVerticalHeight(blockLibMulti.module, blockLibMulti.eles, blockLibMulti.totalHeight, function () {

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

@@ -743,7 +743,7 @@ const billsGuidance = (function () {
         //打开清单指引库
         $('#stdBillsGuidanceTab').click(function () {
             if(libSel.children().length === 0 && !$(this).hasClass('disabled')){
-                initLibs(projectInfoObj.projectInfo.engineeringInfo.billsGuidance_lib);
+                initLibs(projectObj.project.projectInfo.engineeringInfo.billsGuidance_lib);
             }
         });
         //更改清单指引库

+ 2 - 2
web/building_saas/main/js/views/std_bills_lib.js

@@ -67,7 +67,7 @@ var billsLibObj = {
         let i, select = $('#stdBillsLibSelect');
         select.empty();
 
-        let bills_lib = projectInfoObj.projectInfo.engineeringInfo.bill_lib;
+        let bills_lib = projectObj.project.projectInfo.engineeringInfo.bill_lib;
         let selectedBillsLib = sessionStorage.getItem('stdBillsLib');
         bills_lib.forEach(function (data) {
             var option = $('<option>').val(data.id).text(data.name);
@@ -126,7 +126,7 @@ var billsLibObj = {
         return features;
     },
     insertBills: function (stdBillsJobData, stdBillsFeatureData, node) {
-        if(projectInfoObj.projectInfo.property.lockBills == true && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
+        if(projectObj.project.projectInfo.property.lockBills == true && projectObj.project.withinBillsLocked(projectObj.project.mainTree.selected)){
             return false;
         }
         $.bootstrapLoading.start();

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

@@ -49,7 +49,7 @@ var rationLibObj = {
     loadStdRationLibs: function () {
         let select = $('#stdRationLibSelect');
         select.empty();
-        let ration_lib = projectInfoObj.projectInfo.engineeringInfo.ration_lib;
+        let ration_lib = projectObj.project.projectInfo.engineeringInfo.ration_lib;
         ration_lib.push({
             isDefault: false,
             id: rationLibObj.compleRationLibId,
@@ -345,8 +345,8 @@ var rationLibObj = {
     locateAtRation: function(libID, code){
         let me = rationLibObj;
         //查找定额,以确定定额所在章节节点
-        let firstLibID = projectInfoObj.projectInfo.engineeringInfo.ration_lib.length > 0 ?
-                        projectInfoObj.projectInfo.engineeringInfo.ration_lib[0].id : null;
+        let firstLibID = projectObj.project.projectInfo.engineeringInfo.ration_lib.length > 0 ?
+                        projectObj.project.projectInfo.engineeringInfo.ration_lib[0].id : null;
         let locateRow = 0,
             locateSubRow = 0;
         CommonAjax.post('/complementaryRation/api/getRationItem', {rationRepIds: [libID], code: code}, function (ration) {
@@ -481,35 +481,35 @@ var rationLibObj = {
     },
     getStdRationLibIDs: function () {
         let ids = [];
-        if(projectInfoObj.projectInfo.engineeringInfo.ration_lib.length === 0){
+        if(projectObj.project.projectInfo.engineeringInfo.ration_lib.length === 0){
             alert('当前项目无定额库,请添加定额库。');
             return null;
         }
-        for(let rationLib of projectInfoObj.projectInfo.engineeringInfo.ration_lib){
+        for(let rationLib of projectObj.project.projectInfo.engineeringInfo.ration_lib){
             ids.push(rationLib.id);
         }
         return ids;
     },
     getCurrentStdRationLibID:function () {
-        if(projectInfoObj.projectInfo.engineeringInfo.ration_lib.length === 0){
+        if(projectObj.project.projectInfo.engineeringInfo.ration_lib.length === 0){
             alert('当前项目无定额库,请添加定额库。');
             return null;
         }
         if($('#stdRationLibSelect').val()){
             return parseInt($('#stdRationLibSelect').val());
         }else {
-            return projectInfoObj.projectInfo.engineeringInfo.ration_lib[0].id;
+            return projectObj.project.projectInfo.engineeringInfo.ration_lib[0].id;
         }
     },
     getFirstStdRationLibID: function () {
-        if(projectInfoObj.projectInfo.engineeringInfo.ration_lib.length === 0){
+        if(projectObj.project.projectInfo.engineeringInfo.ration_lib.length === 0){
             alert('当前项目无定额库,请添加定额库。');
             return null;
         }
-        return parseInt(projectInfoObj.projectInfo.engineeringInfo.ration_lib[0].id);
+        return parseInt(projectObj.project.projectInfo.engineeringInfo.ration_lib[0].id);
     },
     getDefaultStdRationLibID:function(){
-        let ration_lib = projectInfoObj.projectInfo.engineeringInfo.ration_lib;
+        let ration_lib = projectObj.project.projectInfo.engineeringInfo.ration_lib;
         if(ration_lib.length === 0){
             alert('当前项目无定额库,请添加定额库。');
             return null;
@@ -642,7 +642,7 @@ function seachRation(){
     if($('#curRationLib').hasClass('btn-secondary')){
         rationLibIDs.push($('#stdRationLibSelect').val());
     } else {
-        for(let lib of projectInfoObj.projectInfo.engineeringInfo.ration_lib){
+        for(let lib of projectObj.project.projectInfo.engineeringInfo.ration_lib){
             rationLibIDs.push(lib.id);
         }
     }

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

@@ -287,7 +287,7 @@ let tender_obj={
                     let temNode = me.tenderTree.findNode(d.data.ID);
                     temObj = temNode?temNode.data:null;
                 }else if(d.type == ModuleNames.project){
-                    temObj = projectInfoObj.projectInfo;
+                    temObj = projectObj.project.projectInfo;
                 }
                 if(temObj){
                     for(let key in d.data){

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

@@ -174,7 +174,7 @@ let zmhs_obj = {
     getComboBoxForCodes:function (coe,i) {
         this.coeSheet.getCell(i, 1, GC.Spread.Sheets.SheetArea.viewport).locked(false);
         let options = coe.option_list; //coe.option_codes.split("|");
-        let combo = sheetCommonObj.getDynamicCombo(true);
+        let combo =  new GC.Spread.Sheets.CellTypes.ComboBox();//sheetCommonObj.getDynamicCombo(true);  2019-4-1 这里用普通的下拉框,一直显示
         let buttonRow =  this.coeSheet.getViewportBottomRow(1);
         combo.editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.value);
         combo.items(options).maxDropDownItems(buttonRow - i -1 < 3 ?3:buttonRow - i -1 );//itemHeight(options.length).

+ 11 - 11
web/building_saas/report/js/rpt_main.js

@@ -61,17 +61,17 @@ let zTreeOprObj = {
     },
     getReportTemplateTree: function() {
         let me = zTreeOprObj, params = {};
-        params.engineerId = projectInfoObj.projectInfo.property.engineering;
+        params.engineerId = projectObj.project.projectInfo.property.engineering;
         let private_chk_hide = function (chkTplItem) {
             //考虑未来拓展,统一在此判断报表模板是否显示
             let rst = false;
             if (chkTplItem.hasOwnProperty('flags') && chkTplItem.flags.hasOwnProperty('taxType') && chkTplItem.flags['taxType'] !== null &&
-                parseInt(chkTplItem.flags['taxType']) !== parseInt(projectInfoObj.projectInfo.property.taxType)) {
+                parseInt(chkTplItem.flags['taxType']) !== parseInt(projectObj.project.projectInfo.property.taxType)) {
                 rst = true;
             }
             return rst;
         };
-        // projectInfoObj.projectInfo.property.taxType === 1 //1: 一般计税 2: 简易计税
+        // projectObj.project.projectInfo.property.taxType === 1 //1: 一般计税 2: 简易计税
         CommonAjax.postEx("report_tpl_api/getRptTplTree", params, 20000, true, function(result){
             let private_remove_hide_item = function (items) {
                 if (items && items.length > 0) {
@@ -102,7 +102,7 @@ let zTreeOprObj = {
     },
     getCustomerCfg: function() {
         let me = zTreeOprObj, params = {};
-        params.engineerId = projectInfoObj.projectInfo.property.engineering;
+        params.engineerId = projectObj.project.projectInfo.property.engineering;
         CommonAjax.postEx("report_tpl_api/getCustomizeCfg", params, 20000, true, function(result){
                 if (result) {
                     me.defReportPageCfg = result[0];
@@ -209,7 +209,7 @@ let zTreeOprObj = {
             let pageSize = rptControlObj.getCurrentPageSize();
             params.pageSize = pageSize;
             params.rpt_tpl_id = treeNode.refId;
-            params.prj_id = projectInfoObj.projectInfo.ID;
+            params.prj_id = projectObj.project.projectInfo.ID;
             params.custCfg = me.reportPageCfg;
             me.currentNode = treeNode;
             me.requestReport(params);
@@ -239,7 +239,7 @@ let zTreeOprObj = {
         params.pageSize = rptControlObj.getCurrentPageSize();
         params.orientation = rptControlObj.getCurrentOrientation();
         params.rpt_tpl_id = me.currentNode.refId;
-        params.prj_id = projectInfoObj.projectInfo.ID;
+        params.prj_id = projectObj.project.projectInfo.ID;
         params.custCfg = me.reportPageCfg;
         me.requestReport(params);
     },
@@ -385,13 +385,13 @@ let rptControlObj = {
     getAllInOneBook: function () {
         if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
             let me = rptControlObj;
-            let orgRptName = projectInfoObj.projectInfo.name;
+            let orgRptName = projectObj.project.projectInfo.name;
             let refRptTplIds = [];
             for (let node of zTreeOprObj.checkedRptTplNodes) {
                 refRptTplIds.push(node.refId);
             }
             let params = {};
-            params.prj_id = projectInfoObj.projectInfo.ID;
+            params.prj_id = projectObj.project.projectInfo.ID;
             params.rpt_ids = refRptTplIds;
             params.rptName = orgRptName;
             params.pageSize = me.getCurrentPageSize();
@@ -420,7 +420,7 @@ let rptControlObj = {
                 rpt_names.push(tplNode.name)
             }
             let params = {};
-            params.prj_id = projectInfoObj.projectInfo.ID;
+            params.prj_id = projectObj.project.projectInfo.ID;
             params.rpt_ids = rpt_ids;
             params.rpt_names = rpt_names;
             params.pageSize = me.getCurrentPageSize();
@@ -470,7 +470,7 @@ let rptControlObj = {
                 rpt_names.push(tplNode.name)
             }
             let params = {};
-            params.prj_id = projectInfoObj.projectInfo.ID;
+            params.prj_id = projectObj.project.projectInfo.ID;
             params.rpt_ids = rpt_ids;
             params.rpt_names = rpt_names;
             params.pageSize = me.getCurrentPageSize();
@@ -592,7 +592,7 @@ let rptControlObj = {
             let params = {};
             params.pageSize = rptControlObj.getCurrentPageSize();
             params.rpt_tpl_id = treeNode.refId;
-            params.prj_id = projectInfoObj.projectInfo.ID;
+            params.prj_id = projectObj.project.projectInfo.ID;
             params.custCfg = zTreeOprObj.reportPageCfg;
             zTreeOprObj.requestReport(params);
         }

+ 1 - 1
web/building_saas/report/js/rpt_print.js

@@ -10,7 +10,7 @@ let rptPrintHelper = {
             params.pageSize = rptControlObj.getCurrentPageSize();
             params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:rptControlObj.getCurrentOrientation());
             params.custCfg = zTreeOprObj.reportPageCfg;
-            params.prj_id = projectInfoObj.projectInfo.ID;
+            params.prj_id = projectObj.project.projectInfo.ID;
             for (let tplNode of zTreeOprObj.checkedRptTplNodes) {
                 rptIds.push(tplNode.refId);
             }

+ 3 - 2
web/users/html/login.html

@@ -37,7 +37,7 @@
                 <div id="captcha-box"></div>
             </div>
             <div class="form-group btn-area" style="display: none;">
-                <button id="login" class="btn btn-primary btn-block">登录</button>
+                <button id="login" type="button" class="btn btn-primary btn-block">登录</button>
             </div>
             <div class="pt-1 d-flex justify-content-center">
                 <a href="http://sso.smartcost.com.cn/getpasswd" target="_blank" class="mr-3">忘记密码</a>
@@ -118,7 +118,8 @@
                     <h5 class="modal-title">验证码安全登录</h5>
                 </div>
                 <div class="modal-body">
-                    <p class="">您是专业版用户,为您提供手机验证码安全登录。</p>
+                    <p class="">请您提供手机验证码进行安全登录。</p>
+                    <p class="">请点击“获取验证码”,验证码将发送至手机<span id="pro_mobile"></span>,注意查收。</p>
                     <div class="form-row">
                         <div class="form-group col-md-8">
                             <input type="text" class="form-control" id="smsCode" placeholder="输入验证码">

+ 4 - 0
web/users/js/login.js

@@ -69,7 +69,11 @@ $(document).ready(function () {
                             } else {
                                 $('#phonepass').modal('show');
                                 $('#proMobile').val(response.data);
+                                $('#pro_mobile').text(response.data.substr(0, 3) + '****' + response.data.substr(7, 11));
                             }
+                        } else if(response.error === 2) {
+                            $('#check_ssoId').val(response.ssoId);
+                            $('#phone').modal('show');
                         } else {
                             let msg = response.msg !== undefined ? response.msg : '未知错误';
                             showError(msg, $("input"));