Browse Source

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

TonyKang 7 years ago
parent
commit
6fc103fe60
42 changed files with 638 additions and 192 deletions
  1. 11 13
      config/gulpConfig.js
  2. 2 1
      modules/all_models/bills_template_items.js
  3. 12 0
      modules/main/controllers/bills_controller.js
  4. 1 1
      modules/pm/models/templates/bills_template_model.js
  5. 0 1
      modules/ration_glj/controllers/ration_glj_controller.js
  6. 31 6
      modules/ration_glj/facade/glj_calculate_facade.js
  7. 3 3
      modules/ration_glj/facade/ration_ass_facade.js
  8. 6 4
      modules/ration_glj/facade/ration_glj_facade.js
  9. 29 0
      public/web/common_ajax.js
  10. 20 0
      public/web/sheet/sheet_common.js
  11. 1 1
      public/web/tree_sheet/tree_sheet_helper.js
  12. 2 2
      server.js
  13. 0 3
      web/building_saas/complementary_glj_lib/html/tools-gongliaoji.html
  14. 0 3
      web/building_saas/complementary_ration_lib/html/anzhuang.html
  15. 7 9
      web/building_saas/complementary_ration_lib/html/dinge.html
  16. 0 3
      web/building_saas/complementary_ration_lib/html/fuzhu.html
  17. 0 3
      web/building_saas/complementary_ration_lib/html/gongliao.html
  18. 12 3
      web/building_saas/css/main.css
  19. 3 0
      web/building_saas/js/global.js
  20. 134 33
      web/building_saas/main/html/main.html
  21. 1 1
      web/building_saas/main/js/controllers/block_controller.js
  22. 2 0
      web/building_saas/main/js/models/calc_program.js
  23. 1 1
      web/building_saas/main/js/models/ration.js
  24. 14 11
      web/building_saas/main/js/models/ration_glj.js
  25. 57 12
      web/building_saas/main/js/views/calc_base_view.js
  26. 37 4
      web/building_saas/main/js/views/character_content_view.js
  27. 40 7
      web/building_saas/main/js/views/fee_rate_view.js
  28. 14 1
      web/building_saas/main/js/views/glj_col.js
  29. 10 4
      web/building_saas/main/js/views/glj_view.js
  30. 6 3
      web/building_saas/main/js/views/main_tree_col.js
  31. 14 4
      web/building_saas/main/js/views/project_info.js
  32. 142 7
      web/building_saas/main/js/views/project_view.js
  33. 2 2
      web/building_saas/main/js/views/std_billsGuidance_lib.js
  34. 2 2
      web/building_saas/main/js/views/std_bills_lib.js
  35. 0 2
      web/building_saas/pm/html/project-management.html
  36. 9 9
      web/building_saas/pm/js/pm_gc.js
  37. 4 18
      web/building_saas/pm/js/pm_newMain.js
  38. 4 4
      web/building_saas/pm/js/pm_share.js
  39. 5 2
      web/common/html/header.html
  40. 0 3
      web/users/html/user-info.html
  41. 0 3
      web/users/html/user-safe.html
  42. 0 3
      web/users/html/user-set.html

+ 11 - 13
config/gulpConfig.js

@@ -6,9 +6,9 @@ module.exports = {
     version:'1.0.1',
     common_jspaths:[
         'lib/jquery/jquery-3.2.1.min.js',
+        'lib/jquery-ui/jquery-ui.min.js',
         'lib/popper/popper.min.js',
         'lib/bootstrap/bootstrap.min.js',
-        'lib/jquery-ui/jquery-0i.min.js',
         'web/building_saas/js/*.js',
         'public/web/scMathUtil.js',
         'public/web/gljUtil.js',
@@ -17,7 +17,9 @@ module.exports = {
         'public/web/commonAlert.js'
     ],
     common_css:[
+        'lib/jquery-ui/jquery-ui.css',
         'lib/bootstrap/css/bootstrap.min.css',
+        'lib/spreadjs/sheets/css/gc.spread.sheets.sc.css',
         'web/building_saas/css/main.css',
         'web/building_saas/css/custom.css',
         'lib/font-awesome/font-awesome.min.css'
@@ -28,7 +30,6 @@ module.exports = {
     ],
     pm_css:[
         'lib/ztree/css/zTreeStyle.css',
-        'lib/spreadjs/sheets/css/gc.spread.sheets.sc.css',
         'lib/jquery-contextmenu/jquery.contextMenu.css'
     ],
     pm_jspaths:[
@@ -45,16 +46,16 @@ module.exports = {
     ],
     main_css:[
         'lib/ztree/css/zTreeStyle.css',
-        'lib/jquery-ui/jquery-ui.css',
-        'lib/spreadjs/sheets/css/gc.spread.sheets.sc.css',
+        //'lib/jquery-ui/jquery-ui.css',
+        //'lib/spreadjs/sheets/css/gc.spread.sheets.sc.css',
         'lib/jquery-contextmenu/jquery.contextMenu.css'
     ],
     main_jspaths:[
         'lib/JSExpressionEval_src/*.js',
         '!lib/JSExpressionEval_src/JsHashMap.js',
-        'lib/jquery-ui/jquery-ui.min.js',
+       /* 'lib/jquery-ui/jquery-ui.min.js',
         'lib/jquery-ui/jquery-ui-datepickerCN.js',
-        'lib/jquery-contextmenu/*.js',
+        'lib/jquery-contextmenu/!*.js',*/
         //'lib/lodash/lodash.js',
         // 'test/tmp_data/test_ration_calc/ration_calc_base.js',
         'web/building_saas/main/js/models/main_consts.js',
@@ -153,7 +154,6 @@ module.exports = {
     compleGlj_css: [
         'lib/jquery-contextmenu/jquery.contextMenu.css',
         'lib/ztree/css/zTreeStyle.css',
-        'lib/spreadjs/sheets/css/gc.spread.sheets.sc.css'
     ],
     compleGlj_jspaths: [
         'public/web/common_ajax.js',
@@ -174,11 +174,12 @@ module.exports = {
         'public/web/storageUtil.js'
     ],
     compleRation_ration_css: [
-        'lib/jquery-contextmenu/jquery.contextMenu.css',
         'lib/ztree/css/zTreeStyle.css',
-        'lib/spreadjs/sheets/css/gc.spread.sheets.sc.css'
+        'lib/jquery-contextmenu/jquery.contextMenu.css',
     ],
     compleRation_ration_jspaths:[
+        'lib/jquery-contextmenu/jquery.contextMenu.min.js',
+        'lib/jquery-contextmenu/jquery.ui.position.js',
         'lib/ztree/jquery.ztree.core.js',
         'web/building_saas/complementary_ration_lib/js/global.js',
         'public/web/id_tree.js',
@@ -206,7 +207,6 @@ module.exports = {
         'web/building_saas/complementary_ration_lib/js/ration_installation.js.js'
     ],
     compleRation_glj_css: [
-        'lib/spreadjs/sheets/css/gc.spread.sheets.sc.css'
     ],
     compleRation_glj_jspaths: [
         'web/building_saas/complementary_ration_lib/js/global.js',
@@ -220,7 +220,6 @@ module.exports = {
         'public/web/storageUtil.js'
     ],
     compleRation_coe_css: [
-        'lib/spreadjs/sheets/css/gc.spread.sheets.sc.css'
     ],
     compleRation_coe_jspaths: [
         'web/building_saas/complementary_ration_lib/js/global.js',
@@ -234,8 +233,7 @@ module.exports = {
         'web/building_saas/complementary_ration_lib/js/coe.js'
     ],
     compleRation_inst_css: [
-        'lib/spreadjs/sheets/css/gc.spread.sheets.sc.css',
-        'lib/jquery-contextmenu/jquery.contextMenu.css'
+        'lib/jquery-contextmenu/jquery.contextMenu.css',
     ],
     compleRation_inst_jspaths: [
         'public/web/QueryParam.js',

+ 2 - 1
modules/all_models/bills_template_items.js

@@ -34,7 +34,8 @@ let BillsTemplateSchema = {
     //计算基数
     calcBase: String,
     //费率ID
-    feeRateID:Number
+    feeRateID:Number,
+    quantity: String,
 };
 
 mongoose.model(collectionName, new Schema(BillsTemplateSchema, {versionKey: false, collection: collectionName}));

+ 12 - 0
modules/main/controllers/bills_controller.js

@@ -213,6 +213,7 @@ module.exports = {
         };
         const form = new multiparty.Form(uploadOption);
         let uploadFullName;
+        let parseSheetDateA = +new Date();
         form.parse(req, async function(err, fields, files) {
             try{
                 const projectID = fields.projectID !== undefined && fields.projectID.length > 0 ?
@@ -263,7 +264,10 @@ module.exports = {
                         validSheets[sheetInfo.position].push(sheet)
                     }
                 }
+                let parseSheetB = +new Date();
+                console.log(`解析表时间: ${parseSheetB - parseSheetDateA}===================================================================`);
                 //合并同类表并提取表的有效数据
+                let validSheetDataA = +new Date();
                 let toImportSheets = [];
                 for(let uploadPosition in validSheets){
                     let validExcelData = [];
@@ -274,7 +278,10 @@ module.exports = {
                         toImportSheets.push({position: uploadPosition, colMapping: validSheets[uploadPosition][0].colMapping, validExcelData: validExcelData});
                     }
                 }
+                let validSheetDataB = +new Date();
+                console.log(`获取表格有效数据时间: ${validSheetDataB - validSheetDataA}==========================================================`);
                 //匹配的清单库
+                let stdDateA = +new Date();
                 const billsLibId = fields.billsLibId !== undefined && fields.billsLibId.length > 0 && fields.billsLibId[0]? parseInt(fields.billsLibId[0]) : null;
                 let stdBills = [], stdJobs = [], stdCharacters = [];
                 if(billsLibId){
@@ -283,13 +290,18 @@ module.exports = {
                     stdCharacters = await stdBillCharacterModel.find({billsLibId: billsLibId, deleted: false});
                 }
                 let stdData = {stdBills: stdBills, stdJobs: stdJobs, stdCharacters: stdCharacters};
+                let stdDateB = +new Date();
+                console.log(`获取标准清单库数据时间: ${stdDateB - stdDateA}`);
                 //导入表
+                let importDateA = +new Date();
                 for(let importData of toImportSheets){
                     let updateFrontData = await importSheet(importData, req.session.sessionUser.id, projectID, stdData);
                     if(updateFrontData){
                         responseData.data.push(updateFrontData);
                     }
                 }
+                let importDateB = +new Date();
+                console.log(`导入时间: ${importDateB - importDateA}=========================================================================`);
                 if(responseData.data.length === 0){
                     throw 'excel无有效数据';
                 }

+ 1 - 1
modules/pm/models/templates/bills_template_model.js

@@ -39,7 +39,7 @@ class BillsTemplateModel extends BaseModel {
      */
     async getTemplateDataForNewProj (libID) {
         // 筛选字段
-        let field = {_id: 0, ID: 1, ParentID: 1, NextSiblingID: 1, code: 1, name: 1, unit: 1, flags: 1,type:1, calcBase: 1,feeRateID:1};
+        let field = {_id: 0, ID: 1, ParentID: 1, NextSiblingID: 1, code: 1, name: 1, unit: 1, flags: 1,type:1, calcBase: 1,feeRateID:1,quantity:1};
         let data = await this.findDataByCondition({libID: libID}, field, false);
 
         return data === null ? [] : data;

+ 0 - 1
modules/ration_glj/controllers/ration_glj_controller.js

@@ -85,7 +85,6 @@ async function replaceGLJ(req, res){
     try {
         let data = req.body.data;
         data = JSON.parse(data);
-        console.log(data);
         let rdata= await ration_glj_facade.replaceGLJ(data);
         result.data=rdata;
     }catch (err){

+ 31 - 6
modules/ration_glj/facade/glj_calculate_facade.js

@@ -30,14 +30,14 @@ let stateSeq ={
 };
 
 
-async function calculateQuantity(query,noNeedCal){
+async function calculateQuantity(query,noNeedCal,refreshRationName = false){
     try {
          let  result ={
              glj_result:[],
              rationID:query.rationID
          };
          let impactRation = await ration.findOne({projectID:query.projectID,ID:query.rationID,deleteInfo:null});
-         let gljList = await ration_glj.find(query)//{projectID:query.projectID,rationID:query.rationID}
+         let gljList = await ration_glj.find(query);//{projectID:query.projectID,rationID:query.rationID}
          let coeList = await ration_coe.find({projectID:query.projectID,rationID:query.rationID}).sort('seq').exec();
          let assList=[];
          let assRation = null;
@@ -55,19 +55,25 @@ async function calculateQuantity(query,noNeedCal){
                  }
              }
          }
-        gljList = sortRationGLJ(gljList);
+         gljList = sortRationGLJ(gljList);
          for(let i =0;i<gljList.length;i++ ){
              let r = await calculateQuantityPerGLJ(gljList[i],i,coeList,assList,adjustState,noNeedCal);
              result.glj_result.push(r);
          }
 
-        if(noNeedCal==null){
+         if(noNeedCal==null){
             await ration_glj.bulkWrite(generateUpdateTasks(result.glj_result));
-        }
+         }
          adjustState= _.sortByOrder(adjustState, ['index'], ['asc']);
          adjustState=_.map(adjustState, _.property('content'));
          let adjustStateString = adjustState.join(';');
-         await ration.update({projectID:query.projectID,ID:query.rationID,deleteInfo: null},{adjustState:adjustStateString});
+         let setData = {adjustState:adjustStateString};
+         if(refreshRationName == true){//需要更新定额名称
+             let newName = generateRationName(impactRation,gljList);
+             setData.name = newName;
+             result.rationName = newName;
+         }
+         await ration.update({projectID:query.projectID,ID:query.rationID,deleteInfo: null},setData);
          result.adjustState=adjustStateString;
          return result;
     }catch (err){
@@ -76,6 +82,25 @@ async function calculateQuantity(query,noNeedCal){
     }
 }
 
+function generateRationName(ration,gljList) {
+    let caption = ration.caption ? ration.caption:ration.name;
+    if(ration.rationAssList && ration.rationAssList.length > 0){
+        let ass = ration.rationAssList[0];
+        if(ass.actualValue != null && ass.actualValue != undefined ){
+            caption =  caption.replace('%s',ass.actualValue);
+        }
+    }
+
+    for(let g of gljList){
+        //glj._doc.createType=='replace'&&glj.rcode!=glj.code
+        if(g.createType=='replace'&&g.rcode!=g.code){ //是替换工料机
+            caption = caption + ' '+g.name;
+            if(!_.isEmpty(g.specs)) caption = caption + ' '+g.specs
+        }
+    }
+    return caption;
+}
+
 function generateUpdateTasks(result) {
     let tasks = [];
     for(let i =0;i<result.length;i++){

+ 3 - 3
modules/ration_glj/facade/ration_ass_facade.js

@@ -58,7 +58,7 @@ function update_ration_ass(user_id,datas) {
                         stateRefresh:true,
                         rationID:result.cal_result.rationID,
                         adjustState:result.cal_result.adjustState,
-                        name:datas.doc.name
+                        name:result.cal_result.rationName
                     }
                 };
                 callback(null,[newObject,ration_glj_data,ration_data]);
@@ -73,10 +73,10 @@ async function doRationAssAdjust(ration,doc) {
     let result ={
         err:null,
         cal_result:[]
-    }
+    };
     try{
         await rationModel.update({projectID:ration.projectID,ID:ration.ID,deleteInfo: null},doc);
-        let cal_result = await glj_calculate_facade.calculateQuantity({projectID:ration.projectID,rationID:ration.ID});
+        let cal_result = await glj_calculate_facade.calculateQuantity({projectID:ration.projectID,rationID:ration.ID},null,true);
         result.cal_result=cal_result;
         return result;
     }catch (err){

+ 6 - 4
modules/ration_glj/facade/ration_glj_facade.js

@@ -644,9 +644,10 @@ async function replaceGLJ(data) {
     let stateResult = await glj_calculate_facade.calculateQuantity({
         projectID: data.projectID,
         rationID: data.rationID
-    }, true);
+    }, true,true);
     rdata.data = data;
     rdata.adjustState = stateResult.adjustState;
+    rdata.name = stateResult.rationName;
     return rdata;
 }
 async function mReplaceGLJ(data) {
@@ -724,8 +725,9 @@ async function doRationGLJUpdate(data) {
     let stateResult = await glj_calculate_facade.calculateQuantity({
         projectID: data.query.projectID,
         rationID: data.query.rationID
-    });
+    },null,true);
     resutl.adjustState = stateResult.adjustState;
+    resutl.name = stateResult.rationName;
     return resutl;
 }
 
@@ -800,9 +802,9 @@ async function changAdjustState(data, rationList) {
         let stateResult = await glj_calculate_facade.calculateQuantity({
             projectID: data.query.projectID,
             rationID: r
-        }, true);
+        }, true,true);
         if(stateResult){
-            stateList.push({rationID: r, adjustState: stateResult.adjustState});
+            stateList.push({rationID: r, adjustState: stateResult.adjustState,name:stateResult.rationName});
         }
     }
     return stateList;

+ 29 - 0
public/web/common_ajax.js

@@ -133,6 +133,35 @@ $.ajaxSetup({
     }
 });
 
+
+
+async function ajaxPost(url, data) {
+    return new Promise(function (resolve, reject) {
+        $.ajax({
+            type:"POST",
+            url: url,
+            data: {'data': JSON.stringify(data)},
+            dataType: 'json',
+            cache: false,
+            timeout: 50000,
+            success: function(result){
+                if (result.error === 0) {
+                    resolve(result.data);
+                } else {
+                    alert('error: ' + result.message);
+                    reject(result.message);
+                }
+            },
+            error: function(jqXHR, textStatus, errorThrown){
+                ajaxErrorInfo(jqXHR, textStatus, errorThrown);
+                reject("请求错误");
+            }
+        });
+
+    });
+}
+
+
 /**
  * 在页面中任何嵌套层次的窗口中获取顶层窗口
  * @return 当前页面的顶层窗口对象

+ 20 - 0
public/web/sheet/sheet_common.js

@@ -651,5 +651,25 @@ var sheetCommonObj = {
             sheet.setDefaultStyle(defaultStyle, GC.Spread.Sheets.SheetArea.rowHeader);
         }
     },
+    //动态根据工作簿宽度和各列宽度比例设置宽度
+    setColumnWidthByRate: function (workBookWidth, workBook, headers){
+        if(workBook){
+            const sheet = workBook.getActiveSheet();
+            sheet.suspendEvent();
+            sheet.suspendPaint();
+            for(let col = 0; col < headers.length; col++){
+                if(headers[col]['rateWidth'] !== undefined && headers[col]['rateWidth'] !== null && headers[col]['rateWidth'] !== ''){
+                    sheet.setColumnWidth(col, workBookWidth * headers[col]['rateWidth'], GC.Spread.Sheets.SheetArea.colHeader)
+                }
+                else {
+                    if(headers[col]['headerWidth'] !== undefined && headers[col]['headerWidth'] !== null && headers[col]['headerWidth'] !== ''){
+                        sheet.setColumnWidth(col, headers[col]['headerWidth'], GC.Spread.Sheets.SheetArea.colHeader)
+                    }
+                }
+            }
+            sheet.resumeEvent();
+            sheet.resumePaint();
+        }
+    }
 
 }

+ 1 - 1
public/web/tree_sheet/tree_sheet_helper.js

@@ -407,7 +407,7 @@ var TREE_SHEET_HELPER = {
             let cellWidth = hitinfo.sheet.getCell(-1, hitinfo.col).width();
             let dataField = setting.cols[hitinfo.col].data.field;
 
-            if(hitinfo.sheet.getCell(hitinfo.row,hitinfo.col).wordWrap()==true){
+            if(tag==''&&hitinfo.sheet.getCell(hitinfo.row,hitinfo.col).wordWrap()==true){//显示其它列的标记为空并且设置了自动换行
                 return;
             }
             if(dataField === 'itemCharacterText' || dataField === 'jobContentText' || dataField === 'adjustState'){

+ 2 - 2
server.js

@@ -34,8 +34,8 @@ app.engine('.html', require('ejs').__express);
 app.set('view engine', 'html');
 
 let bodyParser = require('body-parser');
-app.use(bodyParser.urlencoded({limit: '3mb', extended: false}));
-app.use(bodyParser.json({limit: '3mb'}));
+app.use(bodyParser.urlencoded({limit: '10mb', extended: false}));
+app.use(bodyParser.json({limit: '10mb'}));
 
 app.use(session({
     name: 'usersSession',

+ 0 - 3
web/building_saas/complementary_glj_lib/html/tools-gongliaoji.html

@@ -133,7 +133,6 @@
         </div>
     </div>
     <!-- JS. -->
-    <script src="/lib/jquery/jquery-3.2.1.min.js"></script>
     <script src="/lib/jquery-contextmenu/jquery.contextMenu.min.js"></script>
     <script src="/lib/jquery-contextmenu/jquery.ui.position.js"></script>
     <script src = "/lib/spreadjs/sheets/gc.spread.sheets.all.11.1.2.min.js"></script>
@@ -142,8 +141,6 @@
     <script type="text/javascript" src="/lib/ztree/jquery.ztree.excheck.js"></script>
     <script type="text/javascript" src="/lib/ztree/jquery.ztree.exedit.js"></script>
     <!--inject:js-->
-    <script src="/lib/popper/popper.min.js"></script>
-    <script src="/lib/bootstrap/bootstrap.min.js"></script>
     <script src="/web/building_saas/js/global.js"></script>
     <!-- zTree -->
     <script type="text/javascript" src="/public/web/common_ajax.js"></script>

+ 0 - 3
web/building_saas/complementary_ration_lib/html/anzhuang.html

@@ -155,12 +155,9 @@
     <!-- JS. -->
     <script src = "/lib/spreadjs/sheets/gc.spread.sheets.all.11.1.2.min.js"></script>
     <script>GC.Spread.Sheets.LicenseKey =  '<%- LicenseKey %>';</script>
-    <script src="/lib/jquery/jquery-3.2.1.min.js"></script>
     <script src="/lib/jquery-contextmenu/jquery.contextMenu.min.js"></script>
     <script src="/lib/jquery-contextmenu/jquery.ui.position.js"></script>
     <!--inject:js-->
-    <script type="text/javascript" src="/lib/popper/popper.min.js"></script>
-    <script src="/lib/bootstrap/bootstrap.min.js"></script>
     <script type="text/javascript" src="/public/web/QueryParam.js"></script>
     <script src="/public/web/uuid.js"></script>
     <script src="/public/web/common_util.js"></script>

+ 7 - 9
web/building_saas/complementary_ration_lib/html/dinge.html

@@ -7,12 +7,13 @@
     <meta http-equiv="x-ua-compatible" content="ie=edge">
     <title>定额库编辑器-纵横云计价</title>
     <!--inject:css-->
-    <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css" type="text/css">
-    <link rel="stylesheet" href="/web/building_saas/css/main.css" type="text/css">
-    <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css" type="text/css">
-    <link rel="stylesheet" href="/lib/jquery-contextmenu/jquery.contextMenu.css" type="text/css">
-    <link rel="stylesheet" href="/lib/ztree/css/zTreeStyle.css" type="text/css">
+    <link rel="stylesheet" href="/lib/jquery-ui/jquery-ui.css" type="text/css">
+    <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
     <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.sc.css" type="text/css">
+    <link rel="stylesheet" href="/web/building_saas/css/main.css">
+    <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">
+    <link rel="stylesheet" href="/lib/ztree/css/zTreeStyle.css" type="text/css">
+    <link rel="stylesheet" href="/lib/jquery-contextmenu/jquery.contextMenu.css" type="text/css">
     <!--endinject-->
     <style type="text/css">
         .nav-tabs .nav-item.show .nav-link, .nav-tabs .nav-link.active{
@@ -506,12 +507,9 @@
 <!-- JS. -->
 <script src = "/lib/spreadjs/sheets/gc.spread.sheets.all.11.1.2.min.js"></script>
 <script>GC.Spread.Sheets.LicenseKey =  '<%- LicenseKey %>';</script>
-<script type="text/javascript" src="/lib/jquery/jquery-3.2.1.min.js"></script>
+<!--inject:js-->
 <script type="text/javascript" src="/lib/jquery-contextmenu/jquery.contextMenu.min.js"></script>
 <script type="text/javascript" src="/lib/jquery-contextmenu/jquery.ui.position.js"></script>
-<!--inject:js-->
-<script type="text/javascript" src="/lib/popper/popper.min.js"></script>
-<script type="text/javascript" src="/lib/bootstrap/bootstrap.min.js"></script>
 <script type="text/javascript" src="/lib/ztree/jquery.ztree.core.js"></script>
 <script type="text/javascript" src="/web/building_saas/complementary_ration_lib/js/global.js"></script>
 <script type="text/javascript" src="/public/web/id_tree.js"></script>

+ 0 - 3
web/building_saas/complementary_ration_lib/html/fuzhu.html

@@ -70,9 +70,6 @@
     <script src = "/lib/spreadjs/sheets/gc.spread.sheets.all.11.1.2.min.js"></script>
     <script>GC.Spread.Sheets.LicenseKey =  '<%- LicenseKey %>';</script>
     <!--inject:js-->
-    <script src="/lib/jquery/jquery-3.2.1.min.js"></script>
-    <script src="/lib/popper/popper.min.js"></script>
-    <script src="/lib/bootstrap/bootstrap.min.js"></script>
     <script type="text/javascript" src="/web/building_saas/complementary_ration_lib/js/global.js"></script>
     <!-- zTree -->
     <script type="text/javascript" src="/public/web/common_ajax.js"></script>

+ 0 - 3
web/building_saas/complementary_ration_lib/html/gongliao.html

@@ -221,7 +221,6 @@
         </div>
     </div>
     <!-- JS. -->
-    <script src="/lib/jquery/jquery-3.2.1.min.js"></script>
     <script src="/public/web/PerfectLoad.js"></script>
     <script src = "/lib/spreadjs/sheets/gc.spread.sheets.all.11.1.2.min.js"></script>
     <script>GC.Spread.Sheets.LicenseKey =  '<%- LicenseKey %>';</script>
@@ -229,8 +228,6 @@
     <script type="text/javascript" src="/lib/ztree/jquery.ztree.excheck.js"></script>
     <script type="text/javascript" src="/lib/ztree/jquery.ztree.exedit.js"></script>
     <!--inject:js-->
-    <script type="text/javascript" src="/lib/popper/popper.min.js"></script>
-    <script src="/lib/bootstrap/bootstrap.min.js"></script>
     <script type="text/javascript" src="/web/building_saas/complementary_ration_lib/js/global.js"></script>
     <!-- zTree -->
     <script type="text/javascript" src="/public/web/common_ajax.js"></script>

+ 12 - 3
web/building_saas/css/main.css

@@ -1,9 +1,11 @@
-
 /*building SAAS 0.1*/
 /*bootstrap 初始化*/
 body {
     font-size: 0.9rem;
-    overflow: hidden
+    overflow: hidden;
+}
+a{
+    outline: none
 }
 .dropdown-menu {
     font-size: 0.9rem
@@ -127,6 +129,13 @@ body {
 .toolsbar .tools-btn.btn:hover,.toolsbar-f .tools-btn.btn:hover {
     background: #f7f7f9;
 }
+.toolsbar .btn-light {
+    color:#007bff;
+    min-width: 34px;
+}
+.toolsbar .btn-light.disabled {
+    color:#999;
+}
 .main-side {
     border-left: 1px solid #ccc;
     overflow-y: hidden;
@@ -386,4 +395,4 @@ body {
 }
 .custom-file-input:lang(zh) ~ .custom-file-label::after {
     content: "浏览";
-}
+}

+ 3 - 0
web/building_saas/js/global.js

@@ -61,6 +61,9 @@ $(function () {
     /*工具提示*/
     $(function () {
         $('[data-toggle="tooltip"]').tooltip();
+        $('[data-toggle="tooltip"]').click(function () {
+            $(this).tooltip('hide');
+        })
     });
 
 });

+ 134 - 33
web/building_saas/main/html/main.html

@@ -6,19 +6,24 @@
     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     <meta http-equiv="x-ua-compatible" content="ie=edge">
     <title><%= projectData.name !== undefined ? projectData.name : '造价书' %>-纵横云计价</title>
+
     <!-- inject:css -->
+    <link rel="stylesheet" href="/lib/jquery-ui/jquery-ui.css" type="text/css">
     <link rel="stylesheet" href="/lib/bootstrap/css/bootstrap.min.css">
+    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.sc.css" type="text/css">
     <link rel="stylesheet" href="/web/building_saas/css/main.css">
     <link rel="stylesheet" href="/web/building_saas/css/custom.css">
     <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">
+    <link rel="stylesheet" href="/lib/jquery-contextmenu/jquery.contextMenu.css" type="text/css">
+
     <!--zTree-->
     <link rel="stylesheet" href="/lib/ztree/css/zTreeStyle.css" type="text/css">
     <!--SpreadJs-->
-    <link rel="stylesheet" href="/lib/jquery-ui/jquery-ui.css" type="text/css">
-    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.sc.css" type="text/css">
+   <!-- <link rel="stylesheet" href="/lib/jquery-ui/jquery-ui.css" type="text/css">
+    <link rel="stylesheet" href="/lib/spreadjs/sheets/css/gc.spread.sheets.sc.css" type="text/css">-->
     <link rel="stylesheet" href="/lib/spreadjs/views/gc.spread.views.dataview.10.0.0.css">
     <!-- jquery.contextmenu -->
-    <link rel="stylesheet" href="/lib/jquery-contextmenu/jquery.contextMenu.css" type="text/css">
+   <!-- <link rel="stylesheet" href="/lib/jquery-contextmenu/jquery.contextMenu.css" type="text/css">-->
     <!-- endinject -->
     <script>
         // 这里的变量供页面调用
@@ -63,22 +68,22 @@
                     <!--<a href="javascript:void(0)" class="btn btn-sm" title="复制" ><i class="fa fa-files-o" aria-hidden="true"></i></a>
                     <a href="javascript:void(0)" class="btn btn-sm" title="剪切"><i class="fa fa-scissors" aria-hidden="true"></i></a>
                     <a href="javascript:void(0)" class="btn btn-sm" title="粘贴"><i class="fa fa-clipboard" aria-hidden="true"></i></a>-->
-                    <a class="btn btn-sm" href="javascript:void(0);" aria-expanded="false" data-toggle="modal" data-target="#poj-set" title="项目属性"><i class="fa fa-cog" data-placement="bottom"></i></a>
-                    <span class="btn btn-sm">
-                        <a class="dropdown-toggle" id="uploadDropDown" href="#" data-toggle="dropdown" title="导入"><i class="fa  fa-cloud-upload" data-placement="bottom"></i></a>
+                    <a class="btn btn-light btn-sm" href="javascript:void(0);" aria-expanded="false" data-toggle="modal" data-target="#poj-set"><i class="fa fa-cog" data-toggle="tooltip" data-original-title="项目属性" data-placement="bottom"></i></a>
+                    <span class="btn btn-light btn-sm">
+                        <a class="dropdown-toggle" id="uploadDropDown" href="#" data-toggle="dropdown"><i class="fa fa-cloud-upload" data-toggle="tooltip" data-original-title="导入" data-placement="bottom"></i></a>
                         <div class="dropdown-menu">
                             <a id="uploadLj" class="dropdown-item" href="#import" data-toggle="modal" data-target="#import">导入09表Excel清单</a>
                             <a id="uploadGld" class="dropdown-item" href="#import" data-toggle="modal" data-target="#import">导入广联达算量Excel清单</a>
                         </div>
                     </span>
-                    <a href="javascript:void(0)" class="btn btn-sm" id="insertRation" title="插入定额"><i class="fa fa-sign-in" aria-hidden="true"></i></a>
-                    <a href="javascript:void(0)" class="btn btn-sm" id="delete" title="删除"><i class="fa fa-remove" aria-hidden="true"></i></a>
-                    <a href="javascript:void(0)" class="btn btn-sm" id="upLevel" title="升级"><i class="fa fa-arrow-left" aria-hidden="true"></i></a>
-                    <a href="javascript:void(0)"  class="btn btn-sm" id="downLevel" title="降级"><i class="fa fa-arrow-right" aria-hidden="true"></i></a>
-                      <a href="javascript:void(0)" class="btn btn-sm" id="upMove" title="上移"><i class="fa fa-arrow-up" aria-hidden="true"></i></a>
-                      <a href="javascript:void(0)" class="btn btn-sm" id="downMove" title="下移"><i class="fa fa-arrow-down" aria-hidden="true"></i></a>
-                    <span class="btn btn-sm">
-                      <a href="" data-toggle="dropdown" title="显示至..."><span  data-placement="bottom"><i class="fa fa-list-ol"></i></span></a>
+                    <a href="javascript:void(0)" class="btn btn-light btn-sm" id="insertRation" data-toggle="tooltip" data-placement="bottom" data-original-title="插入定额"><i class="fa fa-sign-in" aria-hidden="true"></i></a>
+                    <a href="javascript:void(0)" class="btn btn-light btn-sm" id="delete" data-toggle="tooltip" data-placement="bottom" data-original-title="删除"><i class="fa fa-remove" aria-hidden="true"></i></a>
+                    <a href="javascript:void(0)" class="btn btn-light btn-sm" id="upLevel" data-toggle="tooltip" data-placement="bottom" data-original-title="升级"><i class="fa fa-arrow-left" aria-hidden="true"></i></a>
+                    <a href="javascript:void(0)"  class="btn btn-light btn-sm" id="downLevel" data-toggle="tooltip" data-placement="bottom" data-original-title="降级"><i class="fa fa-arrow-right" aria-hidden="true"></i></a>
+                      <a href="javascript:void(0)" class="btn btn-light btn-sm" id="upMove" data-toggle="tooltip" data-placement="bottom" data-original-title="上移"><i class="fa fa-arrow-up" aria-hidden="true"></i></a>
+                      <a href="javascript:void(0)" class="btn btn-light btn-sm" id="downMove" data-toggle="tooltip" data-placement="bottom" data-original-title="下移"><i class="fa fa-arrow-down" aria-hidden="true"></i></a>
+                    <span class="btn btn-light btn-sm">
+                      <a href="" data-toggle="dropdown"><span data-toggle="tooltip" data-original-title="显示至" data-placement="bottom"><i class="fa fa-list-ol"></i></span></a>
                       <div class="dropdown-menu dropdown-menu-left" style="min-width: 6.5rem">
                       <a class="dropdown-item" href="javascript:void(0);" id="displayDXFY">大项费用</a>
                       <a class="dropdown-item" href="javascript:void(0);"  id="displayFB1">一级分部</a>
@@ -90,13 +95,13 @@
                       <a class="dropdown-item" href="javascript:void(0);"  id="displayZD">最底层</a>
                     </div>
                     </span>
-                      <a href="javascript:void(0);" id="ZLFB_btn" class="btn btn-sm" data-placement="bottom" title="整理分部"><i class="fa fa-retweet" aria-hidden="true"></i></a>
+                      <a href="javascript:void(0);" id="ZLFB_btn" class="btn btn-light btn-sm" data-placement="bottom" data-toggle="tooltip" data-original-title="整理分部"><i class="fa fa-retweet" aria-hidden="true"></i></a>
                       <% if (projectData.property.lockBills == true) { %>
-                      <a href="javascript:void(0)"  class="btn btn-sm" name="lockBills" title="解锁清单"> <i class="fa fa-unlock-alt" aria-hidden="true"></i></a>
+                      <a href="javascript:void(0)"  class="btn btn-light btn-sm" name="lockBills" data-toggle="tooltip" data-placement="bottom" data-original-title="解锁清单"> <i class="fa fa-unlock-alt" aria-hidden="true"></i></a>
                       <% } else { %>
-                      <a href="javascript:void(0)"  class="btn btn-sm" name="lockBills" title="锁定清单"> <i class="fa fa-lock" aria-hidden="true"></i></a>
+                      <a href="javascript:void(0)"  class="btn btn-light btn-sm" name="lockBills" data-toggle="tooltip" data-placement="bottom" data-original-title="锁定清单"> <i class="fa fa-lock" aria-hidden="true"></i></a>
                       <% } %>
-                      <a id="switchTznr" href="javascript:void(0);"  class="btn btn-sm"  data-placement="bottom" title="显示特征"><i class="fa fa-eye" aria-hidden="true"></i></a>
+                      <a id="switchTznr" href="javascript:void(0);"  class="btn btn-light btn-sm"  data-toggle="tooltip" data-placement="bottom" data-original-title="显示特征"><i class="fa fa-eye" aria-hidden="true"></i></a>
                   </div>
                   <div class="side-tabs">
                       <ul class="nav nav-tabs" role="tablist">
@@ -348,9 +353,9 @@
                                           <div class="col px-1">
                                               <div class="input-group" id="stdBillsGuidanceSearch">
                                                   <input type="text" class="form-control form-control-sm" placeholder="输入编码或名称">
-                                                  <span class="input-group-btn">
-                                            <button class="btn btn-secondary btn-sm" type="button"><i class="fa fa-search" aria-hidden="true"></i></button>
-                                        </span>
+                                                  <div class="input-group-append">
+                                                      <button class="btn btn-secondary btn-sm" type="button"><i class="fa fa-search" aria-hidden="true"></i></button>
+                                                  </div>
                                               </div>
                                           </div>
                                           <div class="col p-0">
@@ -389,11 +394,17 @@
                                           <select class="form-control form-control-sm col-6" id="stdBillsLibSelect">
                                           </select>
                                           <div class="input-group col-6" id="stdBillsSearch">
+                                              <input type="text" class="form-control form-control-sm" placeholder="输入编码或名称" value="">
+                                              <div class="input-group-append">
+                                                  <button class="btn btn-secondary btn-sm" type="button"><i class="fa fa-search" aria-hidden="true"></i></button>
+                                              </div>
+                                          </div>
+                                         <!-- <div class="input-group col-6" id="stdBillsSearch">
                                               <input type="text" class="form-control form-control-sm" placeholder="输入编码或名称">
                                               <span class="input-group-btn">
                                                   <button class="btn btn-secondary btn-sm" type="button"><i class="fa fa-search" aria-hidden="true"></i></button>
                                               </span>
-                                          </div>
+                                          </div>-->
                                           <!--搜索结果窗体-->
                                           <div class="side-search-box col-12 p-2" id="stdBillsSearchResult" style="display: none;">
                                               <div class="d-flex justify-content-between">
@@ -428,9 +439,9 @@
                                           </select>
                                           <div class="input-group col-6">
                                               <input type="text" class="form-control form-control-sm" placeholder="搜索定额" value="" id="rationSearchKeyword">
-                                              <span class="input-group-btn">
+                                              <div class="input-group-append">
                                                   <button class="btn btn-secondary btn-sm" type="button" id="rationSearch"><i class="fa fa-search" aria-hidden="true"></i></button>
-                                              </span>
+                                              </div>
                                           </div>
                                           <!--搜索结果窗体-->
                                           <div class="side-search-box col-12 p-0" id="rationSearchResult" style="display: none;">
@@ -844,7 +855,7 @@
                     <input type="hidden" id="actionType">
                 </div>
                 <div class="modal-body" style="padding-left: 0; padding-right: 3px; margin-left: 0;">
-                        <div style="width: 20%; float: left;">
+                        <div style="width: 25%; float: left;">
                             <div  class="modal-auto-height" id="componentTreeDiv" style=" height: 415px; overflow: hidden;">
                                 <!--<div class="print-list">-->
                                 <div style="width: 100%; height: 100%; overflow: auto">
@@ -853,7 +864,7 @@
                                 <!--</div>-->
                             </div>
                         </div>
-                        <div style="width:80%; padding-left: 3px; float: left;">
+                        <div style="width:75%; padding-left: 3px; float: left;">
                             <div class="row">
                                 <div class="col-12" id="gljRadios">
                                     <div class="row">
@@ -914,7 +925,7 @@
         </div>
     </div>
     <!--费率选择窗口-->
-    <div class="modal fade" id="fee_rate_tree" data-backdrop="static">
+    <!--<div class="modal fade" id="fee_rate_tree" data-backdrop="static">
         <div class="modal-dialog modal-feeRate" role="document" id="fee_rate_dialog">
             <div class="modal-content" >
                 <div class="modal-header">
@@ -935,9 +946,95 @@
                 </div>
             </div>
         </div>
+    </div>-->
+    <!--弹出 清单 计算基数 和 费率(%)-->
+    <div class="modal fade" id="calcBaseFeeRate" data-backdrop="static">
+        <div class="modal-dialog" role="document">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <h5 class="modal-title">计算基数选择</h5>
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">&times;</span>
+                    </button>
+                </div>
+                <div class="modal-body">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">×</span>
+                    </button>
+                    <ul class="nav nav-tabs mb-3" role="tablist">
+                        <li class="nav-item">
+                            <a class="nav-link active px-3" data-toggle="tab" href="#m-js" id="tabCalcBase" role="tab">计算基数</a>
+                        </li>
+                        <li class="nav-item">
+                            <a class="nav-link px-3" data-toggle="tab" href="#m-fl" id="tabFeeRate" role="tab">费率(%)</a>
+                        </li>
+                    </ul>
+                    <div class="tab-content">
+                        <div class="tab-pane active" id="m-js" role="tabpanel">
+                            <div class="form-group">
+                                <input class="form-control" id="calcBaseExp" value="">
+                                <p class="form-text">
+                                    <button class="btn btn-secondary btn-sm" id="addOpr">+</button>
+                                    <button class="btn btn-secondary btn-sm" id="subOpr">-</button>
+                                    <button class="btn btn-secondary btn-sm" id="mulOpr">*</button>
+                                    <button class="btn btn-secondary btn-sm" id="divOpr">/</button>
+                                    <button class="btn btn-secondary btn-sm" id="leftOpr">(</button>
+                                    <button class="btn btn-secondary btn-sm" id="rightOpr">)</button>
+                                    <span id="errorInfo" style="margin-left:15px;"></span>
+                                </p>
+                            </div>
+                            <div class="row" id="cbRowDiv">
+                                <div class="col-3" id="cbClassList">
+                                    <ul class="list-unstyled">
+                                        <li class="py-1">
+                                            <a id="cb_ALL" class="btn btn-outline-secondary btn-sm active" href="javascript:void(0)">所有</a>
+                                        </li>
+                                        <li class="py-1">
+                                            <a id="cb_FBFX"  href="javascript:void(0);">分部分项</a>
+                                        </li>
+                                        <li class="py-1">
+                                            <a id="cb_CSXM" href="javascript:void(0)">措施项目</a>
+                                        </li>
+                                        <li class="py-1">
+                                            <a id="cb_QTXM" href="javascript:void(0)">其他项目</a>
+                                        </li>
+                                        <li class="py-1">
+                                            <a id="cb_RCJ" href="javascript:void(0)">人材机</a>
+                                        </li>
+                                        <li class="py-1">
+                                            <a id="cb_FBF" href="javascript:void(0)">分包费</a>
+                                        </li>
+                                        <li class="py-1">
+                                            <a id="cb_GF" href="javascript:void(0)">规费</a>
+                                        </li>
+                                        <li class="py-1">
+                                            <a id="cb_SJ" href="javascript:void(0)">税金</a>
+                                        </li>
+                                        <li class="py-1">
+                                            <a id="cb_SQGCZJ" href="javascript:void(0)">税前工程造价</a>
+                                        </li>
+                                    </ul>
+                                </div>
+                                <div class=" modal-auto-height col-9" style="overflow: hidden; padding: 0; margin: 0;" id="billsBaseSpread">
+                                </div>
+                            </div>
+                        </div>
+                        <div class="tab-pane" id="m-fl" role="tabpanel">
+                            <input type="hidden" id="edit_from">
+                            <div class="modal-fixed-height" style="overflow: hidden" id="fee_rate_sheet">
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="modal-footer">
+                    <a href="javascript:void(0);" class="btn btn-primary" id="calcBaseFeeRateConf">确定</a>
+                    <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                </div>
+            </div>
+        </div>
     </div>
     <!--弹出 清单 计算基数-->
-    <div class="modal fade" id="qd-jsjs" data-backdrop="static">
+    <!--<div class="modal fade" id="qd-jsjs" data-backdrop="static">
         <div class="modal-dialog" role="document">
             <div class="modal-content" style="width:670px;">
                 <div class="modal-header">
@@ -1002,7 +1099,7 @@
                 </div>
             </div>
         </div>
-    </div>
+    </div>-->
     <!--弹出补充定额库-->
     <div class="modal fade" id="comple-ration" data-backdrop="static">
         <div class="modal-dialog modal-lg" role="document">
@@ -1356,6 +1453,10 @@
         <script src = "/lib/spreadjs/sheets/gc.spread.sheets.all.11.1.2.min.js"></script>
         <script>GC.Spread.Sheets.LicenseKey =  '<%- LicenseKey %>';</script>
 
+    <script type="text/javascript" src="/lib/jquery-ui/jquery-ui-datepickerCN.js"></script>
+    <script type="text/javascript" src="/lib/jquery-contextmenu/jquery.contextMenu.js"></script>
+    <script type="text/javascript" src="/lib/jquery-contextmenu/jquery.ui.position.js"></script>
+
         <script src="/lib/spreadjs/views/gc.spread.views.dataview.10.0.0.min.js" type="text/javascript"></script>
         <script type="text/javascript" src="/lib/ztree/jquery.ztree.core.js"></script>
         <script type="text/javascript" src="/lib/ztree/jquery.ztree.excheck.js"></script>
@@ -1385,10 +1486,10 @@
         <script src="/lib/JSExpressionEval_src/Tokanizer.js"></script>
         <script src="/lib/JSExpressionEval_src/Evaluator.js"></script>
         <!--end expression calculate-->
-        <script type="text/javascript" src="/lib/jquery-ui/jquery-ui.min.js"></script>
+        <!--<script type="text/javascript" src="/lib/jquery-ui/jquery-ui.min.js"></script>
         <script type="text/javascript" src="/lib/jquery-ui/jquery-ui-datepickerCN.js"></script>
         <script type="text/javascript" src="/lib/jquery-contextmenu/jquery.contextMenu.js"></script>
-        <script type="text/javascript" src="/lib/jquery-contextmenu/jquery.ui.position.js"></script>
+        <script type="text/javascript" src="/lib/jquery-contextmenu/jquery.ui.position.js"></script>-->
         <!--<script type="text/javascript" src="/lib/lodash/lodash.js"></script>-->
     <!-- Common -->
         <script type="text/javascript" src="/public/web/common_ajax.js"></script>
@@ -1397,8 +1498,8 @@
         <script type="text/javascript" src="/public/web/sheet/sheet_common.js"></script>
 
         <!-- JS. -->
-        <script src="/lib/popper/popper.min.js"></script>
-        <script src="/lib/bootstrap/bootstrap.min.js"></script>
+        <!--<script src="/lib/popper/popper.min.js"></script>
+        <script src="/lib/bootstrap/bootstrap.min.js"></script>-->
         <script src="/web/building_saas/js/global.js"></script>
         <!--报表 zTree -->
 

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

@@ -523,7 +523,7 @@ let BlockController = {
             temData.ID = newID; //新的清单ID
             if(temData.billsLibId && temData.billsLibId!="" && temData.code.length == 12){//是从清单库来的
                 let value = temData.code.substr(0,9);
-                if (value&&value.length === 9 && /^[\d]+$/.test(value)) {
+                if (value&&value.length === 9) {//&& /^[\d]+$/.test(value) 去掉全数字判断    07-31 zhang
                     temData.code = me.newFormatCode(value);
                 }
             }

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

@@ -1931,6 +1931,8 @@ class CalcProgram {
     calcFormulaNodes(changedArr, tender){
         let me = this;
         let formulaNodes = cbTools.getFormulaNodes(true);
+        for(let n of formulaNodes){
+        }
         if (formulaNodes.length == 0) return;
         for (let formulaNode of formulaNodes){
             formulaNode.data.userCalcBase = formulaNode.data.calcBase;    // 这句不该出现,projectObj.project.calcBase中要改进。

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

@@ -737,7 +737,7 @@ var Ration = {
                 if (calcTools.isLeafBill(node)
                     && (node.data.type != billType.DXFY)
                     && (node.data.type != billType.FB)
-                    && !project.Bills.isMeasure(node)) return true;  // 叶子清单项
+                    && project.Bills.isMeasure(node)) return true;  // 叶子清单项
             };
 
             return false;

+ 14 - 11
web/building_saas/main/js/models/ration_glj.js

@@ -430,9 +430,7 @@ var ration_glj = {
                     for (var key in doc) {
                         recode[key] = doc[key];
                     }
-                    if (data.hasOwnProperty('adjustState')) {//更新定额调整状态
-                        me.updateRationAdjustState(data.adjustState, recode.rationID, node);
-                    }
+                    me.refreshRationAfterEdit(data,recode.rationID, node);//更新名称和定额调整状态
                     if (recode.subList && recode.subList.length > 0) {
                         initShow = true;
                     }
@@ -481,16 +479,19 @@ var ration_glj = {
             var me = this;
             data.glj_result.forEach(function (item) {
                 me.refreshEachItme(item.doc, item.query);
-            })
-            me.updateRationAdjustState(data.adjustState, data.rationID, node);
+            });
+            me.refreshRationAfterEdit(data, data.rationID, node);
         };
-        ration_glj.prototype.updateRationAdjustState = function (adjustState, rationID, rnode) {
-            var nodes = [];
-            var node = _.find(projectObj.project.mainTree.items, function (n) {
-                return n.sourceType == ModuleNames.ration && n.data.ID == rationID;
-            })
+        ration_glj.prototype.refreshRationAfterEdit= function(data,rationID,rnode){
+            let nodes = [];
+            let node = projectObj.project.mainTree.findNode(rationID);
             if (node) {
-                node.data.adjustState = adjustState;
+                if(data.adjustState){
+                    node.data.adjustState = data.adjustState;
+                }
+                if(data.name){
+                    node.data.name = data.name;
+                }
                 nodes.push(node);
             }
             if (rnode) {
@@ -498,6 +499,7 @@ var ration_glj = {
             }
             projectObj.mainController.refreshTreeNode(nodes);
         };
+
         ration_glj.prototype.getGLJData = function (cb) {
             let engineerID = projectInfoObj.projectInfo.property.engineering_id;
             CommonAjax.get('/rationGlj/getGLJData/'+engineerID, function (data) {
@@ -684,6 +686,7 @@ var ration_glj = {
                             node ? nodes.push(node) : "";
                         }
                         rationNode.data.adjustState = result.adjustState;
+                        rationNode.data.name = result.name;
                         projectObj.mainController.refreshTreeNode(nodes);
                         project.calcProgram.calcAndSave(rationNode);
                         $.bootstrapLoading.end();

+ 57 - 12
web/building_saas/main/js/views/calc_base_view.js

@@ -7,7 +7,7 @@
 let calcBaseView = {
     //可用计算基数的清单固定列映射(与fixedFlag)
     inputExpr: $('#calcBaseExp'),
-    confirmBtn: $('#calcBaseConf'),
+    confirmBtn: $('#calcBaseFeeRateConf'),//org:calcBaseConf
     type: {bills: 'bills', ration: 'ration'},
     billsCBClass:{ALL: [], FBFX: [], CSXM: [], QTXM: [], FBF: [], RCJ: [], GF: [], SJ: [], SQGCZJ: []},
     curType: null,
@@ -15,8 +15,8 @@ let calcBaseView = {
     workBook: null,
     setting:{
         billsHeader: [
-            {name: '计算基础名称', dataCode: 'base', width: 280, vAlign: 'center', hAlign: 'left'},
-            {name: '金额', dataCode: 'price', width: 120, vAlign: 'center', hAlign: 'right'}
+            {name: '计算基础名称', dataCode: 'base', width: 220, vAlign: 'center', hAlign: 'left'},
+            {name: '金额', dataCode: 'price', width: 100, vAlign: 'center', hAlign: 'right'}
         ],
         rationHeader: [
             {name: '定额计算程序基数名称', dataCode: 'base', width: 400, vAlign: 'center', hAlign: 'left'}
@@ -54,8 +54,12 @@ let calcBaseView = {
         let fuc = function () {
             sheet.options.clipBoardOptions = GC.Spread.Sheets.ClipboardPasteOptions.values;
             sheet.options.isProtected = true;
+            sheet.options.protectionOptions = {
+                allowResizeColumns: true
+            };
             sheet.setColumnCount(headers.length);
             sheet.setRowHeight(0, 40, GC.Spread.Sheets.SheetArea.colHeader);
+            sheet.setColumnWidth(0, 20, GC.Spread.Sheets.SheetArea.rowHeader);
             for(let i = 0, len = headers.length; i < len; i++){
                 sheet.setValue(0, i, headers[i].name, GC.Spread.Sheets.SheetArea.colHeader);
                 sheet.setColumnWidth(i, headers[i].width, GC.Spread.Sheets.SheetArea.colHeader);
@@ -179,7 +183,7 @@ let calcBaseView = {
             }
             //显示清单基数分类
             $('#cbClassList').show();
-            $('#qd-jsjs .modal-content').css('width', '670px');
+           // $('#qd-jsjs .modal-content').css('width', '670px');
             $('#cbRowDiv').addClass('row');
             $('#billsBaseSpread').addClass('col-9');
             //
@@ -196,7 +200,7 @@ let calcBaseView = {
         else if (type == me.type.ration) {
             //去除清单基数分类
             $('#cbClassList').hide();
-            $('#qd-jsjs .modal-content').css('width', '');
+            //$('#qd-jsjs .modal-content').css('width', '');
             $('#cbRowDiv').removeClass('row');
             $('#billsBaseSpread').removeClass('col-9');
 
@@ -218,7 +222,8 @@ let calcBaseView = {
 
         me.buildSheet();
         me.showData(showDatas);
-        $('#qd-jsjs').modal('show');
+        //$('#qd-jsjs').modal('show');
+        $('#calcBaseFeeRate').modal('show');
     },
 
     getInputExpr: function () {
@@ -281,12 +286,18 @@ let calcBaseView = {
     calcBaseConf: function () {
         let me = calcBaseView;
         me.confirmBtn.bind('click', function () {
+            //通过什么触发:计算基数、综合合价
+            let toggle = me.confirmBtn.attr('toggle');
+            if(!toggle || toggle !== 'calcBase'){
+                return;
+            }
             //bills
             if(me.curType === me.type.bills){
                 let selected = projectObj.project.mainTree.selected;
                 projectObj.updateCellValue(selected, me.getInputExpr(), {data: {field: 'calcBase'}});
                 if(projectObj.project.calcBase.success){
-                    $('#qd-jsjs').modal('hide');
+                    //$('#qd-jsjs').modal('hide');
+                    $('#calcBaseFeeRate').modal('hide');
                 }
             }
             else if (me.curType === me.type.ration) {
@@ -318,7 +329,8 @@ let calcBaseView = {
                                 let relationNodes = calcTools.getNodesByProgramID(template.ID);
                                 cp.calcNodesAndSave(relationNodes);
                                 calcProgramManage.refreshDetailSheet();
-                                $('#qd-jsjs').modal('hide');
+                                //$('#qd-jsjs').modal('hide');
+                                $('#calcBaseFeeRate').modal('hide');
                                 $.bootstrapLoading.end();
                             }
                         });
@@ -327,8 +339,10 @@ let calcBaseView = {
                         $('#errorInfo').html(analyzer.error);
                     };
                 }
-                else
-                    $('#qd-jsjs').modal('hide');
+                else{
+                    //$('#qd-jsjs').modal('hide');
+                    $('#calcBaseFeeRate').modal('hide');
+                }
             }
         });
     },
@@ -398,6 +412,9 @@ let calcBaseView = {
                 var imageWidth = hitinfo.cellRect.width*2/7;
                 if(hitinfo.x<offset&&hitinfo.x>offset-imageWidth){
                     if(!projectReadOnly && me.ifEdit(type, hitinfo.row)){
+                        calcBaseView.confirmBtn.attr('toggle', 'calcBase');
+                        changeCalcBaseFeeRate('calcBase');
+                        $('#tabCalcBase').tab('show');
                         calcBaseView.initCalctor(type);
                     }
                 }
@@ -416,11 +433,25 @@ let calcBaseView = {
 };
 
 $(document).ready(function () {
-    $('#qd-jsjs').on('shown.bs.modal', function () {
+ /*   $('#qd-jsjs').on('shown.bs.modal', function () {
         calcBaseView.workBook.refresh();
+    });*/
+    $('#calcBaseFeeRate').on('shown.bs.modal', function () {
+        let toggle = calcBaseView.confirmBtn.attr('toggle');
+        if(toggle === 'calcBase'){
+            $('#tabCalcBase').tab('show');
+        }
+        if(calcBaseView.workBook){
+            calcBaseView.workBook.refresh();
+        }
+    });
+    $('#tabCalcBase').on('shown.bs.tab', function () {
+        if(calcBaseView.workBook){
+            calcBaseView.workBook.refresh();
+        }
     });
 
-    $('#qd-jsjs').on('hidden.bs.modal', function () {
+    /*$('#qd-jsjs').on('hidden.bs.modal', function () {
         $('#errorInfo').text('');
         //清空输入框
         calcBaseView.inputExpr.val('');
@@ -430,6 +461,20 @@ $(document).ready(function () {
         for(let attr in calcBaseView.billsCBClass){
             calcBaseView.billsCBClass[attr] = [];
         }
+    });*/
+
+    $('#calcBaseFeeRate').on('hidden.bs.modal', function () {
+        $('#errorInfo').text('');
+        //清空输入框
+        calcBaseView.inputExpr.val('');
+        if(calcBaseView.workBook){
+            calcBaseView.workBook.destroy();
+            calcBaseView.workBook = null;
+        }
+        //清空清单分类数据
+        for(let attr in calcBaseView.billsCBClass){
+            calcBaseView.billsCBClass[attr] = [];
+        }
     });
 
     //bind operator click function

+ 37 - 4
web/building_saas/main/js/views/character_content_view.js

@@ -7,13 +7,17 @@ let contentOprObj = {
     currentCache: [],//按照serialNo排序
     setting: {
         header: [
-            {headerName:"工作内容",headerWidth:160,dataCode:"content", dataType: "String", hAlign: "left", vAlign: "center"},
-            {headerName:"输出",headerWidth:40,dataCode:"isChecked", cellType:"checkBox", hAlign: "center", vAlign: "center"}
+            {headerName:"工作内容", headerWidth: 360, rateWidth:0.93, dataCode:"content", dataType: "String", hAlign: "left", vAlign: "center"},
+            {headerName:"输出", headerWidth: 40, rateWidth: null, dataCode:"isChecked", cellType:"checkBox", hAlign: "center", vAlign: "center"}
         ]
     },
     buildSheet: function(container) {
         let me = contentOprObj;
         me.workBook = sheetCommonObj.buildSheet(container, me.setting, 30);
+        //获取工作内容列比例
+        let workBookWidth = pageCCOprObj.getWorkBookWidth();
+        me.setRateWith(workBookWidth);
+        sheetCommonObj.setColumnWidthByRate(workBookWidth, me.workBook, me.setting.header);
         me.workBook.options.allowUserDragDrop = false;
         me.workBook.getSheet(0).setColumnWidth(0, 20, GC.Spread.Sheets.SheetArea.rowHeader);
         me.workBook.options.allowCopyPasteExcelStyle = false;
@@ -22,6 +26,12 @@ let contentOprObj = {
         }
         me.bindEvents(me.workBook);
     },
+    setRateWith: function (workBookWidth) {
+        let me = this;
+        let otherWidthRate = me.setting.header[1]['headerWidth'] / workBookWidth;
+        let contentWidthRate = 1 - otherWidthRate;
+        me.setting.header[0]['rateWidth'] = contentWidthRate;
+    },
     bindEvents: function (workBook) {
         let sheet = workBook.getActiveSheet(), me = contentOprObj;
         const EVENTS = GC.Spread.Sheets.Events;
@@ -34,6 +44,7 @@ let contentOprObj = {
         workBook.bind(EVENTS.RangeChanged, me.onRangeChanged);
         me.bindTools();
     },
+
     bindTools: function () {
         let me = contentOprObj;
         let sheet = me.workBook.getActiveSheet();
@@ -398,7 +409,7 @@ let characterOprObj = {
     currentCache: [],
     setting: {
         header: [
-            {headerName:"项目特征",headerWidth:120,dataCode:"character", dataType: "String", hAlign: "left", vAlign: "center"},
+            {headerName:"项目特征",headerWidth:120, rateWidth:0.9, dataCode:"character", dataType: "String", hAlign: "left", vAlign: "center"},
             {headerName:"特征值",headerWidth:160,dataCode:"eigenvalue", dataType: "String", cellType: "comboBox", hAlign: "left", vAlign: "center"},
             {headerName:"输出",headerWidth:40,dataCode:"isChecked", cellType:"checkBox", hAlign: "center", vAlign: "center"}
         ]
@@ -406,6 +417,10 @@ let characterOprObj = {
     buildSheet: function(container) {
         let me = characterOprObj;
         me.workBook = sheetCommonObj.buildSheet(container, me.setting, 30);
+        //获取项目特征列比例
+        let workBookWidth = pageCCOprObj.getWorkBookWidth();
+        me.setRateWith(workBookWidth);
+        sheetCommonObj.setColumnWidthByRate(workBookWidth, me.workBook, me.setting.header);
         me.workBook.options.allowUserDragDrop = false;
         me.workBook.getSheet(0).setColumnWidth(0, 20, GC.Spread.Sheets.SheetArea.rowHeader);
         me.workBook.options.allowCopyPasteExcelStyle = false;
@@ -414,6 +429,12 @@ let characterOprObj = {
         }
         me.bindEvents(me.workBook);
     },
+    setRateWith: function (workBookWidth) {
+        let me = this;
+        let otherWidthRate = (me.setting.header[1]['headerWidth'] + me.setting.header[2]['headerWidth']) / workBookWidth;
+        let contentWidthRate = 1 - otherWidthRate;
+        me.setting.header[0]['rateWidth'] = contentWidthRate;
+    },
     bindEvents: function (workBook) {
         let sheet = workBook.getActiveSheet(), me = characterOprObj;
         const EVENTS = GC.Spread.Sheets.Events;
@@ -1402,4 +1423,16 @@ let pageCCOprObj = {
 
         return updateData;
     },
-}
+    //获取特征及内容工作簿宽度
+    getWorkBookWidth: function () {
+        return ($(window).width() - $('.main-nav').width()) / 3 - 50;
+    }
+}
+
+$(window).resize(function () {
+    let workBookWidth = pageCCOprObj.getWorkBookWidth();
+    contentOprObj.setRateWith(workBookWidth);
+    sheetCommonObj.setColumnWidthByRate(workBookWidth, contentOprObj.workBook, contentOprObj.setting.header);
+    characterOprObj.setRateWith(workBookWidth);
+    sheetCommonObj.setColumnWidthByRate(workBookWidth, characterOprObj.workBook, characterOprObj.setting.header);
+});

+ 40 - 7
web/building_saas/main/js/views/fee_rate_view.js

@@ -360,6 +360,9 @@ var feeRateObject={
                 var imageWidth = hitinfo.cellRect.width*2/7;
                 if(hitinfo.x<offset&&hitinfo.x>offset-imageWidth){
                     if(!projectReadOnly && me.ifFeeRateEdit(hitinfo.row)){
+                        $('#calcBaseFeeRateConf').attr('toggle', 'feeRate');
+                        changeCalcBaseFeeRate('feeRate');
+                        $('#tabFeeRate').tab('show');
                         me.showSelectModal(hitinfo);
                     }
                 }
@@ -381,7 +384,8 @@ var feeRateObject={
         if(project.isBillsLocked() && project.withinBillsLocked(project.mainTree.selected)){
             return;
         }
-        $("#fee_rate_tree").modal({show:true});
+        //$("#fee_rate_tree").modal({show:true});
+        $("#calcBaseFeeRate").modal({show:true});
         $('#edit_from').val(hitinfo.sheet.name());
     },
     setSheetGroup:function (rate,data,groups,row) {
@@ -873,7 +877,8 @@ var feeRateObject={
             selected.changed = true;
             projectObj.project.calcProgram.calcAndSave(selected);
             //projectObj.mainController.refreshTreeNode([selected]);
-            $("#fee_rate_tree").modal('hide');
+            //$("#fee_rate_tree").modal('hide');
+            $("#calcBaseFeeRate").modal('hide');
             $.bootstrapLoading.end();
         });
     },
@@ -889,7 +894,8 @@ var feeRateObject={
             projectObj.project.calcProgram.compileAllTemps();
             projectObj.project.calcProgram.calcAllNodesAndSave();
             calcProgramManage.refreshDetailSheet();
-            $("#fee_rate_tree").modal('hide');
+            //$("#fee_rate_tree").modal('hide');
+            $("#calcBaseFeeRate").modal('hide');
             $.bootstrapLoading.end();
         });
         console.log(calInfo);
@@ -1060,16 +1066,39 @@ $(function(){
         socket.emit('changeActivateFeeRate',{oldRoom:oldValue,newRoom:selectID});
     })
 
-    $('#fee_rate_tree').on('shown.bs.modal', function (e) {
+   /* $('#fee_rate_tree').on('shown.bs.modal', function (e) {
+        if(feeRateObject.feeRateSpreads==null){
+            feeRateObject.createSheet();
+        }
+        feeRateObject.feeRateSelection=null;
+        feeRateObject.showSelectTree(feeRateObject.feeRateSheet,feeRateObject.sheetSetting,projectObj.project.FeeRate.getActivateFeeRate().rates);
+        feeRateObject.locate();
+    });*/
+    $('#calcBaseFeeRate').on('shown.bs.modal', function (e) {
+        let toggle = $('#calcBaseFeeRateConf').attr('toggle');
         if(feeRateObject.feeRateSpreads==null){
             feeRateObject.createSheet();
         }
         feeRateObject.feeRateSelection=null;
         feeRateObject.showSelectTree(feeRateObject.feeRateSheet,feeRateObject.sheetSetting,projectObj.project.FeeRate.getActivateFeeRate().rates);
         feeRateObject.locate();
+        feeRateObject.feeRateSpreads.refresh();
+    });
+    $('#tabFeeRate').on('shown.bs.tab', function () {
+        if(feeRateObject.feeRateSpreads){
+            feeRateObject.feeRateSpreads.refresh();
+        }
     });
 
-    $('#fee_rate_tree').on('hidden.bs.modal', function (e) {
+    /*$('#fee_rate_tree').on('hidden.bs.modal', function (e) {
+        if(feeRateObject.feeRateSpreads){
+            feeRateObject.feeRateSpreads.destroy();
+            feeRateObject.feeRateSpreads=null;
+            $('#edit_from').val('');
+            $('#edit_row').val('');
+        }
+    });*/
+    $('#calcBaseFeeRate').on('hidden.bs.modal', function (e) {
         if(feeRateObject.feeRateSpreads){
             feeRateObject.feeRateSpreads.destroy();
             feeRateObject.feeRateSpreads=null;
@@ -1077,8 +1106,12 @@ $(function(){
             $('#edit_row').val('');
         }
     });
-
-    $('#fee_selected_conf').bind('click',function (){
+    //fee_selected_conf
+    $('#calcBaseFeeRateConf').bind('click',function (){
+        let toggle = $(this).attr('toggle');
+        if(!toggle || toggle !== 'feeRate'){
+            return;
+        }
         feeRateObject.submitFeeRateBySelect();
     })
 })

+ 14 - 1
web/building_saas/main/js/views/glj_col.js

@@ -91,4 +91,17 @@ let gljCol = {
         projectGljObject.mixRatioSetting = me.mixRatio_Setting;
     }
 
-};
+};
+/*
+$(function () {
+    $('#fullpath').click(function () {
+        checkfeeRate();
+
+    });
+
+})
+
+async function checkfeeRate() {
+    let result = await ajaxPost('/feeRates/checkFeeRateName', data = {name: '编辑工程量表达式', rootProjectID: 3163});
+    console.log(result);
+}*/

+ 10 - 4
web/building_saas/main/js/views/glj_view.js

@@ -8,6 +8,7 @@ var gljOprObj = {
     ration: null,
     sheetData: [],
     checkb: null,
+    mainTreeSelectedChange:false,
     detailSheet: null,
     detailData: [],
     GLJSelection: [],
@@ -82,8 +83,8 @@ var gljOprObj = {
         header: [
             {headerName: "选择", headerWidth: 40, dataCode: "select", hAlign: "center", vAlign: "center", cellType: "checkBox"},
             {headerName: "编码", headerWidth: 80, dataCode: "code", dataType: "String", formatter: "@", hAlign: "left", vAlign: "center"},
-            {headerName: "名称", headerWidth: 240, dataCode: "name", dataType: "String", hAlign: "left", vAlign: "center"},
-            {headerName: "规格型号", headerWidth: 190, dataCode: "specs", dataType: "String", hAlign: "left", vAlign: "center"},
+            {headerName: "名称", headerWidth: 220, dataCode: "name", dataType: "String", hAlign: "left", vAlign: "center"},
+            {headerName: "规格型号", headerWidth: 185, dataCode: "specs", dataType: "String", hAlign: "left", vAlign: "center"},
             {headerName: "单位", headerWidth: 40, dataCode: "unit", dataType: "String", hAlign: "center", vAlign: "center"},
             {headerName: "单价", headerWidth: 55, dataCode: "basePrice", dataType: "Number", formatter: "0.00", hAlign: "right", vAlign: "center"},
             {headerName: "类型", headerWidth: 60, dataCode: "gljType", dataType: "String", hAlign: "center", vAlign: "center"},
@@ -519,7 +520,10 @@ var gljOprObj = {
         this.addMixRatioToShow();//显示组成物信息
         this.initRationTree(init,this.getUnitPriceCodeMap());
         sheetCommonObj.showData(this.sheet, this.setting, this.sheetData);
-        if(selected){//定位光标到之前的位置
+        if(this.mainTreeSelectedChange == true){
+            this.sheet.setSelection(0,1,1,1);//默认选中第一行,第二列(名称列)
+            this.mainTreeSelectedChange = false;
+        }else if(selected){//定位光标到之前的位置
             this.sheet.setSelection(selected[0].row,selected[0].col,selected[0].rowCount,selected[0].colCount);
         }
     },
@@ -534,7 +538,7 @@ var gljOprObj = {
                    if(codeMap[preCode]) {
                        codeMap[preCode].push({text:code,value:connectKey});
                    }else {
-                       codeMap[preCode]=[{text:code,value:connectKey}];
+                       codeMap[preCode]=[{text:code ,value:connectKey}];
                    }
                 }
             }
@@ -1071,6 +1075,7 @@ var gljOprObj = {
                     }
                     //project.ration_glj.addToMainTree(data);
                     selected.data.adjustState = result.adjustState;
+                    selected.data.name = result.name;
                     projectObj.mainController.refreshTreeNode(nodes);
                     project.calcProgram.calcAndSave(selected);
                     $.bootstrapLoading.end();
@@ -1126,6 +1131,7 @@ var gljOprObj = {
             })
             if (node) {
                 node.data.adjustState = s.adjustState;
+                node.data.name = s.name;
                 nodes.push(node);
                 rationNodes.push(node);
             }

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

@@ -293,6 +293,9 @@ let MainTreeCol = {
             if(MainTreeCol.readOnly.glj(node)||(calcTools.isGljRation(node)&&projectObj.project.projectGLJ.isEstimateType(node.data.subType))||(MainTreeCol.readOnly.bills(node)&&(node.data.type == billType.BX||node.data.type == billType.FX))){
                 return new GC.Spread.Sheets.CellTypes.CheckBox();
             }
+        },
+        commonTotalFee: function () {
+            return projectObj.getCommonTotalFeeCellType();
         }
     },
     editChecking:function(node){
@@ -518,12 +521,12 @@ function switchTznrHtml(show) {
         return;
     }
     if(show){
-        $('#switchTznr').prop('title', '显示特征');
+        $('#switchTznr').attr('data-original-title', '显示特征');
         $('#switchTznr').find('i').removeClass('fa-eye-slash');
         $('#switchTznr').find('i').addClass('fa-eye');
     }
     else {
-        $('#switchTznr').prop('title', '隐藏特征');
+        $('#switchTznr').attr('data-original-title', '隐藏特征');
         $('#switchTznr').find('i').removeClass('fa-eye');
         $('#switchTznr').find('i').addClass('fa-eye-slash');
     }
@@ -531,7 +534,7 @@ function switchTznrHtml(show) {
 
 $('#switchTznr').click(function () {
     let me = colSettingObj;
-    let cur = $(this).prop('title');
+    let cur = $(this).attr('data-original-title');
     //$("[data-toggle='tooltip']").tooltip('hide');
     if(cur.includes('显示特征')){
         switchTznrHtml(false);

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

@@ -7,7 +7,7 @@ var projectInfoObj = {
     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>';
         // fullPath.push(pm);
-        if (proj && proj.fullFolder) {
+        if (proj) {
             /*
             for (i = 0; i < proj.fullFolder.length; i++) {
                 if (i <= proj.fullFolder.length - 3) {
@@ -21,8 +21,18 @@ var projectInfoObj = {
                 }
             }
              */
-            let newHtml = `<span><i class="fa fa-sticky-note-o"></i></span>
-                <span class="" data-placement="bottom" title="${proj.fullPath}"> <span class="text-truncate float-right">&nbsp;${proj.name}</span></span>`
+            let pathArr = proj.fullPath.split('\\');
+            let engName = pathArr[pathArr.length -2] || '',
+                projectName = pathArr[pathArr.length -3] || '',
+                folderName = pathArr[pathArr.length -4] || '';
+            let newHtml = `   <span data-toggle="tooltip" data-placement="bottom" data-original-title="${folderName}"><i class="fa fa-folder-open-o"></i>...</span>
+                <span class="text-muted px-1">\</span>
+                <span data-toggle="tooltip" data-placement="bottom" data-original-title="${projectName}"><i class="fa fa-cubes"></i>...</span>
+                <span class="text-muted px-1">\</span>
+                <span data-toggle="tooltip" data-placement="bottom" data-original-title="${engName}"><i class="fa fa-cube"></i>...</span>
+                <span class="text-muted px-1">\</span>
+                <span><i class="fa fa-sticky-note-o"></i></span>
+                <span data-toggle="tooltip" data-placement="bottom" data-original-title="${proj.name}"> <span class="text-truncate float-right">&nbsp;${proj.name}</span></span>`;
             fullPath.push(newHtml);
 
         }
@@ -43,7 +53,7 @@ var projectInfoObj = {
                 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();
+                $("[data-toggle='tooltip']").tooltip();
             }
         });
     }

+ 142 - 7
web/building_saas/main/js/views/project_view.js

@@ -35,6 +35,7 @@ var projectObj = {
         if($('#linkComments').hasClass('active')){
             subViewObj.loadComments(node);
         }
+        gljOprObj.mainTreeSelectedChange = true;
         gljOprObj.showDataIfRationSelect(node);
         if (activeSubSheetIsCalcProgram())
             calcProgramObj.refreshCalcProgram(node, 3);
@@ -322,12 +323,12 @@ var projectObj = {
             withinValidFixed = true;
         }
         if(withinValidFixed && (node.data.type==billType.FX||node.data.type==billType.BX||(node.data.type==billType.BILL&&node.source.children.length==0))){//是分项、补项或者叶子清单的情况下才需要查找替换
-            if (value&&value.length === 9 && /^[\d]+$/.test(value)) {
+            if (value&&value.length === 9) {//&& /^[\d]+$/.test(value)  去掉全数字判断    07-31 zhang
                 stdMatchCode = value;
                 formatCode = project.Bills.newFormatCode(stdMatchCode);
                 searchStdBillsAndUpdate(stdMatchCode, formatCode);
                 return;
-            } else if (value&&value.length === 12 && /^[\d]+$/.test(value)) {
+            } else if (value&&value.length === 12 ) {//&& /^[\d]+$/.test(value) 去掉全数字判断    07-31 zhang
                 stdMatchCode = value.substr(0, 9);
                 matchs = project.Bills.sameStdCode(stdMatchCode, node.data.code);
                 if (matchs.indexOf(value) === -1) {
@@ -453,6 +454,9 @@ var projectObj = {
                     if(value === undefined ||value === null || value.toString().trim() === ''){
                         value = '';
                     }
+                    if(value === node.data.calcBase){
+                        return;
+                    }
                     node.data.userCalcBase = value;
                     project.calcBase.calculate(node);
                     if(!project.calcBase.success){
@@ -484,8 +488,7 @@ var projectObj = {
                 }
                 else if (node.sourceType === project.Ration.getSourceType()) {
                     project.Ration.updateField(node.source, fieldName, value);
-                };
-
+                }
                 if (colSetting.data.wordWrap) {
                     this.mainSpread.getActiveSheet().autoFitRow(node.serialNo());
                 }
@@ -1733,10 +1736,10 @@ var projectObj = {
     },
     loadLockBillsButton:function () {
         if(projectInfoObj.projectInfo.property.lockBills == true){
-            $("a[name='lockBills']").prop("title","解锁清单");
+            $("a[name='lockBills']").attr("data-original-title","解锁清单");
             $("a[name='lockBills']").html('<i class="fa fa-unlock-alt" aria-hidden="true"></i>');
         }else {
-            $("a[name='lockBills']").prop("title","锁定清单");
+            $("a[name='lockBills']").attr("data-original-title","锁定清单");
             $("a[name='lockBills']").html('<i class="fa fa-lock" aria-hidden="true"></i>');
         }
     },
@@ -1765,6 +1768,92 @@ var projectObj = {
         })
         return !col.visible;
     },
+    //综合合价cellType
+    getCommonTotalFeeCellType:function () {
+        let type = 'bills';
+        var ns = GC.Spread.Sheets;
+        function CommonTotalFeeCellType() {
+            var init=false;
+        }
+        CommonTotalFeeCellType.prototype = new ns.CellTypes.Text();
+        CommonTotalFeeCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) {
+            //  if(value!=null){
+            // ctx.fillText(value,x+3+ctx.measureText(value).width,y+h-3);
+            // ctx.fillText(value,x+w-3,y+h-3);
+            GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this, arguments);
+            // }
+            if(calcBaseView.editingCell && !projectReadOnly && calcBaseView.ifEdit(type, options.row)){
+                if(calcBaseView.editingCell.row==options.row&&calcBaseView.editingCell.col==options.col){
+                    var image = document.getElementById('f_btn'),imageMagin = 3;
+                    var imageHeight = h-2*imageMagin;
+                    var imageWidth = w*2/(type=='bills'?7:20);
+                    var imageX = x + w - imageWidth- imageMagin, imageY = y + h / 2 - imageHeight / 2;
+                    ctx.save();
+                    ctx.drawImage(image, imageX, imageY,imageWidth,imageHeight);
+                    ctx.beginPath();
+                    ctx.arc(imageX+imageWidth/2,imageY+imageHeight/2,1,0,360,false);
+                    ctx.arc(imageX+imageWidth/2-4,imageY+imageHeight/2,1,0,360,false);
+                    ctx.arc(imageX+imageWidth/2+4,imageY+imageHeight/2,1,0,360,false);
+                    ctx.fillStyle="black";//填充颜色,默认是黑色
+                    ctx.fill();//画实心圆
+                    ctx.closePath();
+                    ctx.restore();
+                }
+            }
+        };
+        CommonTotalFeeCellType.prototype.getHitInfo = function (x, y, cellStyle, cellRect, context) {
+            return {
+                x: x,
+                y: y,
+                row: context.row,
+                col: context.col,
+                cellStyle: cellStyle,
+                cellRect: cellRect,
+                sheetArea: context.sheetArea
+            };
+        };
+        CommonTotalFeeCellType.prototype.processMouseDown = function (hitinfo) {
+            let me=calcBaseView;
+            me.pmLeave = false;
+            if(me.editingCell==null){
+                var showSelectBtn = true;
+                if(hitinfo.sheet.name()!='calc_detail'){
+                    showSelectBtn=me.ifEdit(type, hitinfo.row);
+                }
+                if(showSelectBtn){
+                    me.editingCell={
+                        row:hitinfo.row,
+                        col:hitinfo.col
+                    }
+                    hitinfo.sheet.invalidateLayout();
+                    hitinfo.sheet.repaint();
+                }
+            }else if(hitinfo.row==me.editingCell.row){
+                var offset=hitinfo.cellRect.x+hitinfo.cellRect.width-6;
+                var imageMagin=3;
+                var imageHeight = hitinfo.cellRect.height-2*imageMagin;
+                var imageWidth = hitinfo.cellRect.width*2/7;
+                if(hitinfo.x<offset&&hitinfo.x>offset-imageWidth){
+                    if(!projectReadOnly && me.ifEdit(type, hitinfo.row)){
+                        calcBaseView.confirmBtn.attr('toggle', 'commonTotalFee');
+                        changeCalcBaseFeeRate('commonTotalFee');
+                        $('#tabCalcBase').tab('show');
+                        calcBaseView.initCalctor(type);
+                        feeRateObject.showSelectModal(hitinfo);
+                    }
+                }
+            }
+        };
+        CommonTotalFeeCellType.prototype.processMouseLeave = function (hitinfo) {
+            if(!calcBaseView.pmLeave){
+                calcBaseView.editingCell=null;
+                hitinfo.sheet.invalidateLayout();
+                hitinfo.sheet.repaint();
+                calcBaseView.pmLeave = true;
+            }
+        }
+        return new CommonTotalFeeCellType();
+    },
 
 };
 
@@ -2452,6 +2541,7 @@ $('#customFile').change(function () {
         $('.custom-file-label').text(`请选择上传文件`);
     }
 });
+//线上nginx请求体最大设置为100m
 //从excel导入清单
 $('#uploadConfirm').click(function () {
     let me = this;
@@ -2762,4 +2852,49 @@ function disableSpread(spread){
         sheet.resumePaint();
         sheet.resumeEvent();
     }
-}
+}
+//根据触发改变计算基数、费率弹出框
+function changeCalcBaseFeeRate(toggle) {
+    if(toggle === 'calcBase'){
+        $('#calcBaseFeeRate').find('.modal-header').show();
+        $('#calcBaseFeeRate').find('.modal-title').text('计算基数选择').show();
+        $('#calcBaseFeeRate').find('.modal-body').find('button:first').hide();
+        $('#calcBaseFeeRate').find('.modal-body').find('ul:first').hide();
+    }
+    else if(toggle === 'feeRate'){
+        $('#calcBaseFeeRate').find('.modal-header').show();
+        $('#calcBaseFeeRate').find('.modal-title').text('费率选择').show();
+        $('#calcBaseFeeRate').find('.modal-body').find('button:first').hide();
+        $('#calcBaseFeeRate').find('.modal-body').find('ul:first').hide();
+    }
+    else if(toggle === 'commonTotalFee') {
+        $('#calcBaseFeeRate').find('.modal-header').hide();
+        $('#calcBaseFeeRate').find('.modal-body').find('button:first').show();
+        $('#calcBaseFeeRate').find('.modal-body').find('ul:first').show();
+    }
+}
+//综合合价弹出计算基数费率确认
+$('#calcBaseFeeRateConf').click(function () {
+    let toggle = $(this).attr('toggle');
+    if(!toggle || toggle !== 'commonTotalFee'){
+        return
+    }
+    let needToSave = false;
+    let validateFeeRate = feeRateObject.checkSelectedFeeRate();
+    let calcBaseValue = calcBaseView.getInputExpr() ? calcBaseView.getInputExpr() : '';
+    let selected = projectObj.project.mainTree.selected;
+    if(calcBaseValue !== selected.data.calcBase){
+        needToSave = true;
+        selected.data.userCalcBase = calcBaseValue;
+        projectObj.project.calcBase.calculate(selected);
+    }
+    if(!projectObj.project.calcBase.success){
+        return;
+    }
+    if(validateFeeRate){
+        feeRateObject.submitFeeRateFromBill();
+    }
+    else if(!validateFeeRate && needToSave) {
+        projectObj.project.calcProgram.calcAndSave(selected);
+    }
+});

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

@@ -631,7 +631,7 @@ const billsGuidance = (function () {
             }
         });
         //搜索
-        $('#stdBillsGuidanceSearch>span>button').click(function () {
+        $('#stdBillsGuidanceSearch>div>button').click(function () {
             if(!bills.tree){
                 return;
             }
@@ -697,7 +697,7 @@ const billsGuidance = (function () {
         $('#stdBillsGuidanceSearch>input').bind('keypress', function (event) {
             if(event.keyCode === 13){
                 $(this).blur();
-                $('#stdBillsGuidanceSearch>span>button').click();
+                $('#stdBillsGuidanceSearch>div>button').click();
             }
         });
         // 关闭搜索结果

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

@@ -259,7 +259,7 @@ var billsLibObj = {
             $.bootstrapLoading.end();
         });
 
-        $('#stdBillsSearch>span>button').click(function () {
+        $('#stdBillsSearch>div>button').click(function () {
             billsLibObj.clearHighLight(billsLibObj.stdBillsSpread);
             var keyword = $('#stdBillsSearch>input').val();
             if (!keyword || keyword === '') {
@@ -504,7 +504,7 @@ $('#stdBillsLibSelect').change(function () {
 $('#stdBillsSearch>input').bind('keypress', function (event) {
     if(event.keyCode === 13){
         $(this).blur();
-        $('#stdBillsSearch>span>button').click();
+        $('#stdBillsSearch>div>button').click();
     }
 });
 

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

@@ -531,8 +531,6 @@
 <script src = "/lib/spreadjs/sheets/gc.spread.sheets.all.11.1.2.min.js"></script>
 <script>GC.Spread.Sheets.LicenseKey = '<%- LicenseKey %>';</script>
 <!-- inject:js -->
-<script src="/lib/popper/popper.min.js"></script>
-<script src="/lib/bootstrap/bootstrap.min.js"></script>
 <script src="/web/building_saas/js/global.js"></script>
 <script src="/public/web/PerfectLoad.js"></script>
 <script src="/public/web/date_util.js"></script>

+ 9 - 9
web/building_saas/pm/js/pm_gc.js

@@ -17,15 +17,15 @@ const gcTreeObj = {
             autoUpdate: false
         },
         header: [
-            {name: '工程列表', dataCode: 'name', width: 0.5, vAlign: 'center', hAlign: 'left'},
-            {name: '删除日期', dataCode: 'deleteDateTime', width: 0.1, vAlign: 'center', hAlign: 'left'},
-            {name: '创建日期', dataCode: 'createDateTime', width: 0.1, vAlign: 'center', hAlign: 'left'},
-            {name: '恢复', dataCode: 'recovery', width: 0.05, vAlign: 'center', hAlign: 'left'},
-            {name: '彻底删除', dataCode: 'delete', width: 0.05, vAlign: 'center', hAlign: 'left'},
-            {name: '单价文件', dataCode: 'unitPriceFile', width: 0.05, vAlign: 'center', hAlign: 'left'},
-            {name: '单价文件-清除', dataCode: 'unitPriceFile_delete', width: 0.05, vAlign: 'center', hAlign: 'left'},
-            {name: '费率文件', dataCode: 'feeRateFile', width: 0.05, vAlign: 'center', hAlign: 'left'},
-            {name: '费率文件-清除', dataCode: 'feeRateFile_delete', width: 0.05, vAlign: 'center', hAlign: 'left'}
+            {name: '工程列表', dataCode: 'name', width: 0.5, rateWidth: 0.5, vAlign: 'center', hAlign: 'left'},
+            {name: '删除日期', dataCode: 'deleteDateTime', width: 0.1, rateWidth: 0.1, vAlign: 'center', hAlign: 'left'},
+            {name: '创建日期', dataCode: 'createDateTime', width: 0.1, rateWidth: 0.1, vAlign: 'center', hAlign: 'left'},
+            {name: '恢复', dataCode: 'recovery', width: 0.05, rateWidth: 0.05, vAlign: 'center', hAlign: 'left'},
+            {name: '彻底删除', dataCode: 'delete', width: 0.05, rateWidth: 0.05, vAlign: 'center', hAlign: 'left'},
+            {name: '单价文件', dataCode: 'unitPriceFile', width: 0.05, rateWidth: 0.05, vAlign: 'center', hAlign: 'left'},
+            {name: '单价文件-清除', dataCode: 'unitPriceFile_delete', width: 0.05, rateWidth: 0.05, vAlign: 'center', hAlign: 'left'},
+            {name: '费率文件', dataCode: 'feeRateFile', width: 0.05, rateWidth: 0.05, vAlign: 'center', hAlign: 'left'},
+            {name: '费率文件-清除', dataCode: 'feeRateFile_delete', width: 0.05, rateWidth: 0.05, vAlign: 'center', hAlign: 'left'}
         ],
         //恢复和彻底删除字体色
         style: {

+ 4 - 18
web/building_saas/pm/js/pm_newMain.js

@@ -55,9 +55,9 @@ const projTreeObj = {
             {name: '分部分项合计', dataCode: 'subEngineering', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
             {name: '措施项目合计', dataCode: 'measure', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
             {name: '其他项目合计', dataCode: 'other', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
-           /* {name: '安全文明施工费', dataCode: 'safetyConstruction', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
+            //{name: '安全文明施工费', dataCode: 'safetyConstruction', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
             {name: '规费', dataCode: 'charge', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
-            {name: '税金', dataCode: 'tax', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},*/
+            {name: '税金', dataCode: 'tax', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
             {name: '占造价比例(%)', dataCode: 'rate', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
             {name: '建筑面积', dataCode: 'buildingArea', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
             {name: '单方造价', dataCode: 'perCost', width: 100, vAlign: 'center', hAlign: 'right', formatter: '0.00'},
@@ -1092,9 +1092,8 @@ $(document).ready(function() {
     });
     //列宽随着屏幕改变
     $(window).resize(function () {
-        //autoPmWdith(projTreeObj.workBook, projTreeObj.setting.header);
-        autoPmWdith(gcTreeObj.workBook, gcTreeObj.setting.header);
-        autoPmWdith(pmShare.spreadObj.workBook, pmShare.headers)
+        sheetCommonObj.setColumnWidthByRate(getWorkBookWidth(), gcTreeObj.workBook, gcTreeObj.setting.header);
+        sheetCommonObj.setColumnWidthByRate(getWorkBookWidth(), pmShare.spreadObj.workBook, pmShare.headers);
 
     });
 
@@ -1597,19 +1596,6 @@ function getWorkBookWidth(){
     return workBookWidth = $(window).width() - $('.pm-side').width() - 90;
 }
 
-//根据当前工作表的宽度更改比例
-function autoPmWdith(workBook, headers){
-    if(workBook){
-        const sheet = workBook.getActiveSheet();
-        projTreeObj.renderSheetFuc(sheet, function () {
-            let workBookWidth = getWorkBookWidth();
-            for(let col = 0; col < headers.length; col++){
-                sheet.setColumnWidth(col, workBookWidth * headers[col]['width'], GC.Spread.Sheets.SheetArea.colHeader)
-            }
-        });
-    }
-}
-
 /**
  * 初始化数据
  *

+ 4 - 4
web/building_saas/pm/js/pm_share.js

@@ -24,10 +24,10 @@ const pmShare = (function () {
         }
     };
     const headers = [
-        {name: '工程列表', dataCode: 'name', width: 0.55, vAlign: 'center', hAlign: 'left'},
-        {name: '由...分享', dataCode: 'from', width: 0.15, vAlign: 'center', hAlign: 'left'},
-        {name: '分享给...', dataCode: 'to', width: 0.15, vAlign: 'center', hAlign: 'left'},
-        {name: '操作', dataCode: 'operation', width: 0.15, vAlign: 'center', hAlign: 'left'},
+        {name: '工程列表', dataCode: 'name', width: 0.55, rateWidth: 0.55, vAlign: 'center', hAlign: 'left'},
+        {name: '由...分享', dataCode: 'from', width: 0.15, rateWidth: 0.15, vAlign: 'center', hAlign: 'left'},
+        {name: '分享给...', dataCode: 'to', width: 0.15, rateWidth: 0.15, vAlign: 'center', hAlign: 'left'},
+        {name: '操作', dataCode: 'operation', width: 0.15, rateWidth: 0.15, vAlign: 'center', hAlign: 'left'},
     ];
     const spreadOpts = {
         workBook: {

+ 5 - 2
web/common/html/header.html

@@ -30,7 +30,7 @@
             </li>
             <% if (action === 'index' && controller === 'main') {%>
             <li class="nav-item dropdown">
-                <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-wrench"></i> 工具</a>
+                <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-wrench" data-toggle="tooltip" data-placement="bottom" data-original-title="工具"></i></a>
                 <div class="dropdown-menu dropdown-menu-right">
                     <a id="compleRationLib" class="dropdown-item" href="javascript:void(0);" data-toggle="modal" data-target="#comple-ration">定额库编辑器</a>
                     <a id="compleGljLib" class="dropdown-item" href="/complementaryGlj" target="_">人材机库编辑器</a>
@@ -38,7 +38,7 @@
             </li>
             <% } %>
             <li class="nav-item dropdown">
-                <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-question-circle-o"></i> 帮助</a>
+                <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-question-circle-o" data-toggle="tooltip" data-placement="bottom" data-original-title="帮助"></i></a>
                 <div class="dropdown-menu dropdown-menu-right">
                     <a class="dropdown-item" href="#">帮助</a>
                     <a class="dropdown-item" href="#">升级说明</a>
@@ -130,6 +130,9 @@
 </div>
 <!-- inject:js -->
 <script src="/lib/jquery/jquery-3.2.1.min.js"></script>
+<script type="text/javascript" src="/lib/jquery-ui/jquery-ui.min.js"></script>
+<script src="/lib/popper/popper.min.js"></script>
+<script src="/lib/bootstrap/bootstrap.min.js"></script>
 <script type="text/javascript" src="/web/building_saas/js/moment.min.js"></script>
 <script type="text/javascript" src="/web/building_saas/js/message.js"></script>
 <script type="text/javascript" src="/public/web/scMathUtil.js"></script>

+ 0 - 3
web/users/html/user-info.html

@@ -84,9 +84,6 @@
     </div>
 </div>
 <!-- JS. -->
-<script src="/lib/jquery/jquery-3.2.1.min.js"></script>
-<script src="/lib/popper/popper.min.js"></script>
-<script src="/lib/bootstrap/bootstrap.min.js"></script>
 <script src="/web/building_saas/js/global.js"></script>
 <script src="/web/users/js/user.js"></script>
 </body>

+ 0 - 3
web/users/html/user-safe.html

@@ -10,9 +10,6 @@
     <link rel="stylesheet" href="/web/building_saas/css/main.css">
     <link rel="stylesheet" href="/lib/font-awesome/font-awesome.min.css">
     <!-- JS. -->
-    <script src="/lib/jquery/jquery-3.2.1.min.js"></script>
-    <script src="/lib/popper/popper.min.js"></script>
-    <script src="/lib/bootstrap/bootstrap.min.js"></script>
     <!--<script type="text/javascript" src="/lib/bootstrap/bootstrap-paginator.js"></script>-->
     <!--<script src="/web/building_saas/js/global.js"></script>-->
 </head>

+ 0 - 3
web/users/html/user-set.html

@@ -77,9 +77,6 @@
         </div>
     </div>
     <!-- JS. -->
-    <script src="/lib/jquery/jquery-3.2.1.min.js"></script>
-    <script src="/lib/popper/popper.min.js"></script>
-    <script src="/lib/bootstrap/bootstrap.min.js"></script>
     <script src="/web/building_saas/js/global.js"></script>
 </body>
 <script type="text/javascript">