소스 검색

解决冲突

olym 7 년 전
부모
커밋
a08f219e2a

+ 44 - 30
modules/fee_rates/facade/fee_rates_facade.js

@@ -25,7 +25,8 @@ module.exports={
     getChangeInfo:getChangeInfo,
     changeFeeRateFileFromCurrent:changeFeeRateFileFromCurrent,
     changeFeeRateFileFromOthers:changeFeeRateFileFromOthers,
-    newFeeRateFile:newFeeRateFile
+    newFeeRateFile:newFeeRateFile,
+    getFeeRatesByProject:getFeeRatesByProject
 };
 let operationMap={
     'ut_create':create_fee_rate,
@@ -265,27 +266,37 @@ async function newFeeRateFile(updateData){
     if(updateData.property !== null){
         let property = updateData.property;
         logger.info("Create new feeRate file for project :"+updateData.ID);
-        let libID = property.feeFile;
+        let feeFile = property.feeFile;
         let rootProjectID = property.rootProjectID;
         let name = updateData.name;
-        let doc={
-            rootProjectID:rootProjectID,
-            name:name
-        };
-        if(libID!== ''){
-            let template = await std_fee_rate_lib_model.findOne({"ID":libID});
-            let newFeeRate = {};
-            newFeeRate.ID =uuidV1();
-            newFeeRate.rates=template.rates;
-            await feeRateModel.create(newFeeRate);
-            doc.libID = libID;
-            doc.libName = template.libName;
-            doc.feeRateID =  newFeeRate.ID;
+        if(feeFile.indexOf("newFeeRate")!=-1){
+            let temFee = await feeRateFileModel.findOne({rootProjectID:rootProjectID,name:name,deleteInfo:null});
+            if(temFee){
+                return temFee.ID;
+            }
+            let temA = feeFile.split("-");
+            let libID = temA[1];
+            let doc={
+                rootProjectID:rootProjectID,
+                name:name
+            };
+            if(libID!== ''){
+                let template = await std_fee_rate_lib_model.findOne({"ID":libID});
+                let newFeeRate = {};
+                newFeeRate.ID =uuidV1();
+                newFeeRate.rates=template.rates;
+                await feeRateModel.create(newFeeRate);
+                doc.libID = libID;
+                doc.libName = template.libName;
+                doc.feeRateID =  newFeeRate.ID;
+            }
+            doc.ID = uuidV1();
+            await feeRateFileModel.create(doc);
+            return doc.ID;
+        }else {
+            return feeFile
         }
 
-        doc.ID = uuidV1();
-        await feeRateFileModel.create(doc);
-        return doc.ID;
     }
     return null;
 }
@@ -303,25 +314,28 @@ async function checkFeeRateName(jdata) {
 
 async function getChangeInfo(jdata){
     let data = JSON.parse(jdata);
-    //{ projectID: 99, user_id: '76075' }
+    //{ rootProjectID: 99, user_id: '76075' }
     let result={};
-    let currentProject = {projectID:99,name:'建设项目1'};//dummy 数据
-    currentProject.currentOptions=await feeRateFileModel.find({rootProjectID:data.projectID,deleteInfo:null},['ID','name']);
+    let currentProject = await projectsModel.findOne({'ID':data.rootProjectID},['ID','name']); //{projectID:99,name:'建设项目1'};//dummy 数据
+    currentProject._doc.currentOptions=await getFeeRatesByProject(data.rootProjectID);
     //根据用户ID 找除了当前项目的其它建设项目;
-    let others = [
-        {projectID:100,name:'建设项目2',optionList:[
-            {ID:'590cf860-7d99-11e7-90b0-e3a3dfdb2116',name:'2-test另存'},
-            {ID:'c55718d0-7d98-11e7-b3b4-cfc9038d29b0',name:'2-费率B'},
-            {ID:'da059df1-7c18-11e7-9e2f-1390b52643b4',name:'2-费率A'}
-        ] },
-        {projectID:101,name:'建设项目3',optionList:currentProject.currentOptions },
-        {projectID:102,name:'建设项目4',optionList:currentProject.currentOptions },
-    ]
+    let others =await projectsModel.find({'$and': [
+            {'$or':[{'userID': data.user_id,'projType':'Project', 'deleteInfo': null}, {'userID': data.user_id,'projType':'Project', 'deleteInfo.deleted': {'$in': [null, false]}}]},
+            { 'ID':{'$nin':[data.rootProjectID]}}
+        ]},['ID','name']);
+    for(let o of others){
+        o._doc.optionList = await getFeeRatesByProject(o.ID);
+    }
     result.currentProject=currentProject;
     result.others = others;
     return result;
 }
 
+async function getFeeRatesByProject(rootProjectID) {
+       let feeRates = await feeRateFileModel.find({rootProjectID:rootProjectID,deleteInfo:null},['ID','name']);
+       return feeRates;
+}
+
 async function changeFeeRateFileFromCurrent(jdata){
     let data = JSON.parse(jdata);
     let result = await  project_feerate_temp.findOneAndUpdate({projectID:data.projectID},{feeRateFileID:data.newFeeRateFileID});

+ 0 - 38
modules/main/models/proj_counter.js

@@ -1,38 +0,0 @@
-/**
- * Created by Mai on 2017/6/13.
- */
-
-let mongoose = require('mongoose');
-let baseModel = require('./base_model');
-
-class projCounter extends baseModel {
-    constructor (name) {
-        let db = require("../db/project_db");
-        let Schema = require("mongoose").Schema;
-        let projCounterSchema = new Schema({
-            projectID: Number,
-            bills: Number,
-            ration: Number,
-            volume_price: Number
-        });
-        let projCounterModel = db.model(name, projCounterSchema);
-        super(projCounterModel);
-        this.collectionName = name;
-    };
-
-    getData (projectID, callback) {
-        this.model.findOne({"projectID": projectID}, '-_id', function (err, result) {
-            if (!err) {
-                callback(0, '', result);
-            } else {
-                callback(1, '查询数据失败。', null);
-            }
-        });
-    };
-
-    save (user_id, data, callback) {
-        this.model.update({"projectID": data.projectID}, data, callback);
-    }
-};
-
-module.exports = new projCounter('projCounter');

+ 29 - 0
modules/main/models/proj_counter_model.js

@@ -0,0 +1,29 @@
+/**
+ * Created by Mai on 2017/6/13.
+ */
+
+let baseModel = require('./base_model');
+import {default as projCounterSchema, collectionName as collectionName} from "./schemas/proj_counter";
+
+class projCounter extends baseModel {
+    constructor() {
+        super(projCounterSchema);
+        this.collectionName = collectionName;
+    }
+
+    getData (projectID, callback) {
+        this.model.findOne({"projectID": projectID}, '-_id', function (err, result) {
+            if (!err) {
+                callback(0, collectionName, result);
+            } else {
+                callback(1, '查询数据失败。', null);
+            }
+        });
+    };
+
+    save (user_id, data, callback) {
+        this.model.update({"projectID": data.projectID}, data, callback);
+    }
+};
+
+module.exports = new projCounter();

+ 30 - 0
modules/main/models/proj_setting_model.js

@@ -0,0 +1,30 @@
+/**
+ * Created by Mai on 2017/9/14.
+ */
+
+let baseModel = require('./base_model');
+import {default as projSettingSchema, collectionName as collectionName} from "./schemas/proj_setting";
+
+class projSettingModel extends baseModel {
+
+    constructor() {
+        super(projSettingSchema);
+        this.collectionName = collectionName;
+    }
+
+    getData (projectID, callback) {
+        this.model.findOne({"projectID": projectID}, '-_id', function (err, result) {
+            if (!err) {
+                callback(0, collectionName, result);
+            } else {
+                callback(1, '查询数据失败。', null);
+            }
+        });
+    };
+
+    save (user_id, data, callback) {
+        this.model.update({"projectID": data.projectID}, data, callback);
+    };
+}
+
+module.exports = new projSettingModel();

+ 3 - 1
modules/main/models/project.js

@@ -9,7 +9,8 @@ var ration_coe_data = require('../../ration_glj/facade/ration_coe_facade');
 var ration_ass_data = require('../../ration_glj/facade/ration_ass_facade');
 var quantity_detail_data = require('../../ration_glj/facade/quantity_detail_facade');
 var fee_rate_data = require('../../fee_rates/facade/fee_rates_facade');
-let projCounter = require('./proj_counter');
+let projCounter = require('./proj_counter_model');
+let projSetting = require('./proj_setting_model');
 let volumePriceData = require('../../volume_price/models/volume_price_model');
 var consts = require('./project_consts');
 var projectConsts = consts.projectConst;
@@ -25,6 +26,7 @@ moduleMap[projectConsts.RATION_COE] = ration_coe_data;
 moduleMap[projectConsts.RATION_ASS] = ration_ass_data;
 moduleMap[projectConsts.QUANTITY_DETAIL] = quantity_detail_data;
 moduleMap[projCounter.collectionName] = projCounter;
+moduleMap[projSetting.collectionName] = projSetting;
 moduleMap[volumePriceData.collectionName] = volumePriceData;
 moduleMap[projectConsts.FEERATE] = fee_rate_data;
 

+ 15 - 0
modules/main/models/schemas/proj_counter.js

@@ -0,0 +1,15 @@
+/**
+ * Created by Mai on 2017/9/15.
+ */
+
+let mongoose = require("mongoose");
+let Schema = mongoose.Schema;
+let collectionName = 'projCounter';
+let projSettingSchema = {
+    projectID: Number,
+    bills: Number,
+    ration: Number,
+    volume_price: Number
+};
+let model = mongoose.model(collectionName, new Schema(projSettingSchema, {versionKey: false, collection: collectionName}));
+export {model as default, collectionName as collectionName};

+ 17 - 0
modules/main/models/schemas/proj_setting.js

@@ -0,0 +1,17 @@
+/**
+ * Created by Mai on 2017/9/14.
+ */
+
+let mongoose = require("mongoose");
+let Schema = mongoose.Schema;
+let collectionName = 'proj_setting';
+let projSettingSchema = {
+    projectID: Number,
+    // 列设置
+    main_tree_col: {
+        type: Schema.Types.Mixed,
+        default: {}
+    }
+};
+let model = mongoose.model(collectionName, new Schema(projSettingSchema, {versionKey: false, collection: collectionName}));
+export {model as default, collectionName as collectionName};

+ 3 - 1
modules/pm/controllers/copy_proj_controller.js

@@ -4,7 +4,8 @@
 
 let billsData = require('../../main/models/bills');
 let rationData = require('../../main/models/ration');
-let projCounter = require('../../main/models/proj_counter');
+let projCounter = require('../../main/models/proj_counter_model');
+let projSetting = require('../../main/models/proj_setting_model');
 let volumePriceData = require('../../volume_price/models/volume_price_model');
 let async = require('async');
 
@@ -30,6 +31,7 @@ module.exports = {
         fun.push(copyData(billsData));
         fun.push(copyData(rationData));
         fun.push(copyData(projCounter));
+        fun.push(copyData(projSetting));
         fun.push(copyData(volumePriceData));
         async.parallel(fun, (err) => callback(err));
     }

+ 8 - 1
modules/pm/controllers/new_proj_controller.js

@@ -3,10 +3,12 @@
  */
 
 let billsData = require('../../main/models/bills');
-let projCounter = require('../../main/models/proj_counter');
+let projCounter = require('../../main/models/proj_counter_model');
+let projSetting = require('../../main/models/proj_setting_model');
 let async = require('async');
 
 import BillsTemplateModel from "../models/templates/bills_template_model";
+import EngineeringLibModel from "../../users/models/engineering_lib_model";
 
 module.exports = {
     copyTemplateData: async function (property, newProjID, callback) {
@@ -23,6 +25,11 @@ module.exports = {
             },
             function (cb) {
                 projCounter.insertData({"projectID": newProjID}, cb);
+            },
+            async function (cb) {
+                let engineeringModel = new EngineeringLibModel();
+                let engineering = await engineeringModel.getEngineering(property.engineering_id);
+                projSetting.insertData({"projectID": newProjID, main_tree_col: engineering.main_tree_col}, cb);
             }
         ], (err) => callback(err));
     }

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

@@ -6,6 +6,7 @@ let ProjectsData = require('../models/project_model').project;
 let projType = require('../models/project_model').projType;
 const engineering = require("../../common/const/engineering");
 let EngineeringLibModel = require("../../users/models/engineering_lib_model");
+let fee_rate_facade = require("../../fee_rates/facade/fee_rates_facade");
 
 //统一回调函数
 let callback = function(req, res, err, message, data){
@@ -170,5 +171,22 @@ module.exports = {
             let responseData = error.err === 1 ? null : [];
             callback(request, response, error.err, error.msg, responseData);
         }
+    },
+    getFeeRateFileList:async function(request, response) {
+        let data = request.body.data;
+        try {
+            data = JSON.parse(data);
+            let projectId = data.parentID !== undefined ? data.parentID : 0;
+            if (isNaN(projectId) && projectId <= 0) {
+                throw {msg: 'id数据有误!', err: 1};
+            }
+            // 获取对应建设项目下所有的单位工程id
+            let feeRateFileList = await fee_rate_facade.getFeeRatesByProject(projectId);
+            callback(request, response, 0, '',feeRateFileList );
+        } catch (error) {
+            console.log(error);
+            let responseData = error.err === 1 ? null : [];
+            callback(request, response, error.err, error.msg, responseData);
+        }
     }
 };

+ 4 - 2
modules/pm/models/project_model.js

@@ -89,8 +89,10 @@ ProjectsDAO.prototype.updateUserProjects = async function(userId, datas, callbac
                     callback(1, '同级目录已存在相同名称数据.', null);
                     return;
                 }
-                let  feeRateFileID = await feeRateFacade.newFeeRateFile(data.updateData);
-                newProject.property.feeFile = feeRateFileID?feeRateFileID:-1;
+                if(data.updateData.projType==='Tender'){
+                    let  feeRateFileID = await feeRateFacade.newFeeRateFile(data.updateData);
+                    newProject.property.feeFile = feeRateFileID?feeRateFileID:-1;
+                }
                 newProject.save(async function (err, result) {
                     if (!err && result._doc.projType === projectType.tender) {
                         newProjController.copyTemplateData(data.updateData.property, newProject.ID, updateAll);

+ 1 - 0
modules/pm/routes/pm_route.js

@@ -41,6 +41,7 @@ module.exports = function (app) {
     pmRouter.post('/getProject', pmController.getProject);
     pmRouter.post('/getNewProjectID', pmController.getNewProjectID);
     pmRouter.post('/getUnitFile', pmController.getUnitFileList);
+    pmRouter.post('/getFeeRateFile', pmController.getFeeRateFileList);
 
     app.use('/pm/api', pmRouter);
 };

+ 28 - 17
public/web/sheet/sheet_data_helper.js

@@ -61,23 +61,29 @@ var SheetDataHelper = {
         }
         sheet.setColumnCount(setting.cols.length);
         sheet.setRowCount(setting.headRows, GC.Spread.Sheets.SheetArea.colHeader);
-        setting.headRowHeight.forEach(function (rowHeight, index) {
-            sheet.setRowHeight(index, rowHeight, GC.Spread.Sheets.SheetArea.colHeader);
-        })
-        setting.cols.forEach(function (col, index) {
-            var i, iRow = 0, cell;
-            for (i = 0; i < col.head.spanCols.length; i++) {
-                if (col.head.spanCols[i] !== 0) {
-                    cell = sheet.getCell(iRow, index, GC.Spread.Sheets.SheetArea.colHeader);
-                    cell.value(col.head.titleNames[i]).font(col.head.font).hAlign(col.head.hAlign[i]).vAlign(col.head.vAlign[i]);
-                }
-                if (col.head.spanCols[i] > 1 || col.head.spanRows[i] > 1) {
-                    sheet.addSpan(iRow, index, col.head.spanRows[i], col.head.spanCols[i], GC.Spread.Sheets.SheetArea.colHeader);
-                }
-                iRow += col.head.spanRows[i];
-            };
-            sheet.setColumnWidth(index, col.width);
-        });
+        if (setting.headRowHeight) {
+            setting.headRowHeight.forEach(function (rowHeight, index) {
+                sheet.setRowHeight(index, rowHeight, GC.Spread.Sheets.SheetArea.colHeader);
+            });
+        }
+        if (setting.cols) {
+            sheet.setColumnCount(setting.cols.length);
+            setting.cols.forEach(function (col, index) {
+                var i, iRow = 0, cell;
+                for (i = 0; i < col.head.spanCols.length; i++) {
+                    if (col.head.spanCols[i] !== 0) {
+                        cell = sheet.getCell(iRow, index, GC.Spread.Sheets.SheetArea.colHeader);
+                        cell.value(col.head.titleNames[i]).font(col.head.font).hAlign(col.head.hAlign[i]).vAlign(col.head.vAlign[i]).wordWrap(true);
+                    }
+                    if (col.head.spanCols[i] > 1 || col.head.spanRows[i] > 1) {
+                        sheet.addSpan(iRow, index, col.head.spanRows[i], col.head.spanCols[i], GC.Spread.Sheets.SheetArea.colHeader);
+                    }
+                    iRow += col.head.spanRows[i];
+                };
+                sheet.setColumnWidth(index, col.width);
+                sheet.setColumnVisible(index, col.visible);
+            });
+        }
     },
     protectdSheet: function (sheet) {
         var option = {
@@ -191,6 +197,11 @@ var SheetDataHelper = {
         sheet.resumeEvent();
         sheet.resumePaint();
     },
+    refreshColumnVisible: function (setting, sheet) {
+        setting.cols.forEach(function (col, index) {
+            sheet.setColumnVisible(index, col.visible);
+        });
+    },
     bindSheetData: function (setting, sheet, datas) {     
         var getBindColInfo = function (setting) {
             var colInfo = {};

+ 4 - 5
public/web/tree_sheet/tree_sheet_helper.js

@@ -30,7 +30,6 @@ var TREE_SHEET_HELPER = {
         spread.options.cutCopyIndicatorVisible = false;
         spread.options.allowCopyPasteExcelStyle = false;
         spread.options.allowUserDragDrop = false;
-        spread.options.
         spread.getActiveSheet().setRowCount(3);
         return spread;
     },
@@ -61,7 +60,7 @@ var TREE_SHEET_HELPER = {
             for (i = 0; i < col.head.spanCols.length; i++) {
                 if (col.head.spanCols[i] !== 0) {
                     cell = sheet.getCell(iRow, index, GC.Spread.Sheets.SheetArea.colHeader);
-                    cell.value(col.head.titleNames[i]).font(col.head.font).hAlign(col.head.hAlign[i]).vAlign(col.head.vAlign[i]).wordWrap(col.head.wordWrap);
+                    cell.value(col.head.titleNames[i]).font(col.head.font).hAlign(col.head.hAlign[i]).vAlign(col.head.vAlign[i]).wordWrap(true);
                 }
                 if (col.head.spanCols[i] > 1 || col.head.spanRows[i] > 1) {
                     sheet.addSpan(iRow, index, col.head.spanRows[i], col.head.spanCols[i], GC.Spread.Sheets.SheetArea.colHeader);
@@ -69,6 +68,7 @@ var TREE_SHEET_HELPER = {
                 iRow += col.head.spanRows[i];
             };
             sheet.setColumnWidth(index, col.width);
+            sheet.setColumnVisible(index, col.visible && true);
         });
     },
     protectdSheet: function (sheet) {
@@ -131,12 +131,12 @@ var TREE_SHEET_HELPER = {
                     }
                     return data;
                 };
-                if (colSetting.data.getText) {
+                if (colSetting.data.getText && Object.prototype.toString.apply(colSetting.data.getText) === "[object Function]") {
                     cell.value(colSetting.data.getText(node));
                 } else {
                     cell.value(getFieldText2());
                 }
-                if (colSetting.data.cellType) {
+                if (colSetting.data.cellType && Object.prototype.toString.apply(colSetting.data.cellType) !== "[object String]") {
                     cell.cellType(colSetting.data.cellType);
                 }
                 if (colSetting.readOnly) {
@@ -164,7 +164,6 @@ var TREE_SHEET_HELPER = {
         };
         TreeNodeCellType.prototype = new GC.Spread.Sheets.CellTypes.Text();
         TreeNodeCellType.prototype.paint = function (ctx, value, x, y, w, h, style, options) {
-            console.log(style);
             if (style.backColor) {
                 ctx.save();
                 ctx.fillStyle = style.backColor;

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

@@ -74,21 +74,21 @@ body {
     margin-left: 29px;
     background: #fff
 }
-.toolsbar {
+.toolsbar,.toolsbar-f {
   border-bottom: 1px solid #ccc
 }
 .tools-btn {
     height: 30px;
     line-height: 30px;
 }
-.toolsbar .tools-btn.btn:hover {
+.toolsbar .tools-btn.btn:hover,.toolsbar-f .tools-btn.btn:hover {
     background: #f7f7f9;
 }
 .main-side {
     border-left: 1px solid #ccc;
     overflow-y: hidden;
 }
-.main-data-top{
+.main-data-top,.main-data-full{
   overflow: hidden;
   width:100%
 }
@@ -290,10 +290,13 @@ body {
   width:inherit;
   height: inherit;
 }
-.modal-fixed-height {
+.modal-auto-height {
   height: 400px;
   overflow-y: auto;
-  width:100%
+}
+.modal-fixed-height {
+  height: 400px;
+  overflow-y: hidden;
 }
 .sidebar-tools-bar {
   background:#fff
@@ -302,26 +305,3 @@ body {
   background:#fff;
   border-bottom:1px solid #ddd
 }
-
-/* .grid { height: 500px !important; margin:0 10px 10px 40px;}*/
-.grid .gc-cell.c1 {
-    text-align: right;}
-.gc-grid{
-    border:0 !important;
-}
-.gc-column-header-cell ,.gc-corner-header-cell{
-    border-top: 1px solid rgba(0,0,0,.2);
-}
-.gc-cell,.gc-column-header-cell,select{
-    font-size: 0.9rem!important;
-}
-.gc-cell select{
-    height: auto;
-}
-.grid{
-    overflow: hidden;
-    width:100%;
-    height: 100%;
-}
-/*
-.gc-cell span{font-size: 12px !important}*/

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

@@ -25,9 +25,9 @@
                 </div>
                 <div class=" grid  main-data-full-fl" id="divFee"></div>
             </div>
-            <div class="col-lg-4 p-0">
+            <div class="col-lg-4 py-1">
                 <div class="py-1"><input type="checkbox" id="cascadeSet" checked >统一设置相同参数</div>
-                <div class="grid  py-1" id="subRate"></div>
+                <div class="grid  main-data-full-fl" id="subRate"></div>
             </div>
         </div>
 </div>

+ 10 - 12
web/building_saas/js/global.js

@@ -2,6 +2,7 @@
 function autoFlashHeight(){
     var headerHeight = $(".header").height();
     var toolsbarHeight = $(".toolsbar").height();
+    var ftoolsbarHeight = $(".toolsbar-f").height();
     var bottomContentHeight = $(".bottom-content").height();
     var toolsBarHeightQ = $(".tools-bar-height-q").height();
     var toolsBarHeightD = $(".tools-bar-height-d").height();
@@ -10,22 +11,19 @@ function autoFlashHeight(){
     $(".main-data-top").height($(window).height()-headerHeight-toolsbarHeight-bottomContentHeight-1);
     $(".main-data-full").height($(window).height()-headerHeight-toolsbarHeight-1);
     $(".main-data-full-fl").height($(window).height()-headerHeight-toolsbarHeight-37);
+    $(".main-data-not").height($(window).height()-headerHeight-1);
     $(".main-data-side-search").height($(window).height()-headerHeight-toolsbarHeight-64);
     $(".side-content").height($(window).height()-headerHeight );
-    $(".poj-list").height($(window).height()-headerHeight-toolsbarHeight);
+    $(".poj-list").height($(window).height()-headerHeight-ftoolsbarHeight);
     $(".form-list").height($(window).height()-headerHeight-50 );
-    $(".grid").height($(window).height()-headerHeight-toolsbarHeight-50);
-
 };
-// 获取get参数
-function getQueryString(name) {
-    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
-    var r = window.location.search.substr(1).match(reg);
-    if (r != null) return unescape(r[2]); return null;
-}
 $(window).resize(autoFlashHeight);
 /*全局自适应高度结束*/
 $(function(){
+/*侧滑*/
+$(".open-sidebar").click(function(){
+    $(".slide-sidebar").animate({width:"800"}).addClass("open");
+});
 $("body").click(function(event){
         var e = event || window.event; //浏览器兼容性
         if(!$(event.target).is('a')) {
@@ -42,8 +40,8 @@ $("body").click(function(event){
     });
 /*侧滑*/
 /*工具提示*/
-$('*[data-toggle=tooltip]').mouseover(function() {
- $(this).tooltip('show');
-  });
+$(function () {
+  $('[data-toggle="tooltip"]').tooltip()
+});
 /*工具提示*/
 });

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

@@ -13,11 +13,11 @@
     <div class="container-fluid">
         <div class="row">
         <div class="col-lg-3 p-0">
-            <div class="main-data-full" id="mainSpread">
+            <div class="main-data-not" id="mainSpread">
             </div>
         </div>
         <div class="col-lg-9 p-0">
-            <div class="main-data-full" id="detailSpread">
+            <div class="main-data-not" id="detailSpread">
             </div>
         </div>
     </div>

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

@@ -112,6 +112,9 @@
                     <a href="javascript:void(0)" class="btn btn-sm" id="downMove"><i class="fa fa-arrow-down" aria-hidden="true"></i> 下移</a>
                     <a href="javascript:void(0)" class="btn btn-sm" id="upMove"><i class="fa fa-arrow-up" aria-hidden="true"></i> 上移</a>
                   </div>
+                  <div>
+                      <a href="javacript:void(0);" data-toggle="modal" data-target="#column" class="btn btn-sm"><i class="fa fa-table" aria-hidden="true"></i> 列设置</a>
+                  </div>
                   <div class="side-tabs">
                       <ul class="nav nav-tabs" role="tablist">
                           <li class="nav-item">
@@ -406,6 +409,24 @@
 
         </div>
     </div>
+    <!--弹出列设置-->
+    <div class="modal fade" id="column" data-backdrop="static">
+        <div class="modal-dialog modal-lg" role="document">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <h5 class="modal-title"><i class="fa fa-table"></i> 列设置</h5>
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">&times;</span>
+                    </button>
+                </div>
+                <div class="modal-body modal-auto-height" id="col_setting_spread" style="height: 130px; overflow: hidden;">
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                </div>
+            </div>
+        </div>
+    </div>
     <!-- JS. -->
     <script type="text/javascript">
         autoFlashHeight();

+ 4 - 3
web/building_saas/main/js/models/fee_rate.js

@@ -198,10 +198,11 @@ var FeeRate = {
             return  this.datas;
         };
         FeeRate.prototype.getChangeInfo = function (callback) {
-            var projectID = projectInfoObj.projectInfo.ID; //这里暂时用的是当前项目的ID,以后要改成顶层的建设项目ID
+           // var projectID = projectInfoObj.projectInfo.ID;
+            var feeRate = this.getActivateFeeRate();
             var data={
-                "projectID": projectID,
-                "user_id":userID
+                "user_id":userID,
+                "rootProjectID":feeRate.rootProjectID,
             };
             CommonAjax.post('/feeRates/getChangeInfo', data, function (data) {
                 callback(data);

+ 6 - 2
web/building_saas/main/js/models/project.js

@@ -12,7 +12,8 @@ var PROJECT = {
             updateData: [],
             operation: '',
             modules: {},
-            projCounter: 'projCounter'
+            projCounter: 'projCounter',
+            projSetting: 'proj_setting'
         };
 
         var me = tools;
@@ -35,6 +36,9 @@ var PROJECT = {
                     me.modules[item.moduleName].loadData(item.data);
                 } else if (item.moduleName === me.projCounter) {
                     counter = item.data;
+                } else if (item.moduleName === me.projSetting) {
+                    me._project.projSetting = item.data;
+                    me._project.projSetting.moduleName = me.projSetting;
                 }
             });
             for (module in counter) {
@@ -274,7 +278,7 @@ var PROJECT = {
                 this.push(moduleName, data);
             }
             this.endUpdate();
-        }
+        };
 
         project.prototype.registerModule = function(moduleName, obj){
             if (!tools.modules.hasOwnProperty(moduleName)){

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

@@ -247,6 +247,7 @@ var feeRateObject={
             feeRateObject.createSpreadView();
             feeRateObject.loadPageContent();
             projectObj.project.FeeRate.synchronizeFeeRate();
+            subRateObject.destorySpreadView();
         };
         projectObj.project.FeeRate.changeFeeRateStandard(newVal,callback);
     },
@@ -291,7 +292,7 @@ var feeRateObject={
         $('#currentOptions').val(projectObj.project.FeeRate.getActivateFeeRateID());
         $('#otherProject').empty();
         _.forEach(data.others,function (p) {
-            var option =  $("<option>").val(p.projectID).text(p.name);
+            var option =  $("<option>").val(p.ID).text(p.name);
             $('#otherProject').append(option);
         });
         $('#otherFeeRateOption').empty();

+ 51 - 0
web/building_saas/main/js/views/main_tree_col.js

@@ -86,3 +86,54 @@ let MainTreeCol = {
         }
     }
 };
+
+let colSettingObj = {
+    settingSpread: null,
+    checkBox: new GC.Spread.Sheets.CellTypes.CheckBox(),
+    loadSetting: function (sheet, setting) {
+        sheet.setColumnCount(setting.cols.length);
+        sheet.setRowCount(setting.headRows, GC.Spread.Sheets.SheetArea.colHeader);
+        sheet.setRowCount(1);
+        sheet.getRange(0, -1, 1, -1).cellType(this.checkBox).hAlign(GC.Spread.Sheets.HorizontalAlign.center);
+
+        setting.headRowHeight.forEach(function (rowHeight, index) {
+            sheet.setRowHeight(index, rowHeight, GC.Spread.Sheets.SheetArea.colHeader);
+        });
+        setting.cols.forEach(function (col, index) {
+            let i, iRow = 0, cell;
+            for (i = 0; i < col.head.spanCols.length; i++) {
+                if (col.head.spanCols[i] !== 0) {
+                    cell = sheet.getCell(iRow, index, GC.Spread.Sheets.SheetArea.colHeader);
+                    cell.value(col.head.titleNames[i]).font(col.head.font).hAlign(col.head.hAlign[i]).vAlign(col.head.vAlign[i]).wordWrap(true);
+                }
+                if (col.head.spanCols[i] > 1 || col.head.spanRows[i] > 1) {
+                    sheet.addSpan(iRow, index, col.head.spanRows[i], col.head.spanCols[i], GC.Spread.Sheets.SheetArea.colHeader);
+                }
+                iRow += col.head.spanRows[i];
+            };
+            sheet.setColumnWidth(index, col.width);
+            cell = sheet.getCell(0, index).value(col.visible);
+        });
+    },
+    initSettingSpread: function () {
+        this.settingSpread = SheetDataHelper.createNewSpread($('#col_setting_spread')[0], {sheetCount: 1});
+        this.settingSpread.options.showScrollTip = GC.Spread.Sheets.ShowScrollTip.horizontal;
+        this.loadSetting(this.settingSpread.getActiveSheet(), projectObj.project.projSetting.main_tree_col);
+    }
+};
+
+$('#column').on('shown.bs.modal', function () {
+    if (!colSettingObj.settingSpread) {
+        colSettingObj.initSettingSpread();
+    }
+});
+
+$('#column').on('hide.bs.modal', function () {
+    let sheet = colSettingObj.settingSpread.getActiveSheet();
+    for (let iCol = 0; iCol < sheet.getColumnCount(); iCol ++) {
+        projectObj.project.projSetting.main_tree_col.cols[iCol].visible = sheet.getValue(0, iCol);
+        projectObj.project.projSetting.mainGridSetting.cols[iCol].visible = sheet.getValue(0, iCol);
+    }
+    SheetDataHelper.refreshColumnVisible(projectObj.project.projSetting.mainGridSetting, projectObj.mainSpread.getActiveSheet());
+    projectObj.project.pushNow('editColSetting', projectObj.project.projSetting.moduleName, {projectID: projectObj.project.ID(), main_tree_col: projectObj.project.projSetting.main_tree_col});
+})

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

@@ -91,8 +91,11 @@ var projectObj = {
         this.project = PROJECT.createNew(scUrlUtil.GetQueryString('project'), userID);
         this.project.loadDatas(function (err) {
             if (!err) {
-                TREE_SHEET_HELPER.initSetting($('#billsSpread')[0], BillsGridSetting);
-                BillsGridSetting.cols.forEach(function (col) {
+                let str = JSON.stringify(that.project.projSetting.main_tree_col);
+                that.project.projSetting.mainGridSetting = JSON.parse(str);
+                that.project.projSetting.mainGridSetting.frozenCols = 4;
+                TREE_SHEET_HELPER.initSetting($('#billsSpread')[0], that.project.projSetting.mainGridSetting);
+                that.project.projSetting.mainGridSetting.cols.forEach(function (col) {
                     col.data.splitFields = col.data.field.split('.');
                     if (col.data.getText && Object.prototype.toString.apply(col.data.getText) === "[object String]") {
                         col.data.getText = MainTreeCol.getEvent(col.data.getText);
@@ -109,7 +112,7 @@ var projectObj = {
                         col.data.formatter = MainTreeCol.getNumberFormatter(col.data.decimal);
                     }
                 });
-                that.mainController = TREE_SHEET_CONTROLLER.createNew(that.project.mainTree, that.mainSpread.getActiveSheet(), BillsGridSetting);
+                that.mainController = TREE_SHEET_CONTROLLER.createNew(that.project.mainTree, that.mainSpread.getActiveSheet(), that.project.projSetting.mainGridSetting);
                 that.mainController.showTreeData();
                 that.mainController.bind('refreshBaseActn', function (tree) {
                     var setButtonValid = function (valid, btn) {
@@ -403,3 +406,4 @@ $('#downMove').click(function () {
         controller.downMove();
     }
 });
+

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

@@ -366,7 +366,7 @@
                     </div>
                     <div class="form-group hidden-area">
                         <label>费率文件</label>
-                        <select class="form-control" id="tender-fee-rate"><option value="">请选择费率文件</option></select>
+                        <select class="form-control" id="tender-fee-rate"><option value="">新建费率文件</option></select>
                     </div>
                     <div class="form-group">
                         <label>计价方式</label>

+ 58 - 9
web/building_saas/pm/js/pm_main.js

@@ -249,7 +249,8 @@ $(document).ready(function() {
 
         // 获取单价文件数据
         getUnitFile(projectInfo.data.ID);
-
+        // 获取费率文件数据
+        getFeeRateFile(projectInfo.data.ID);
     });
 
     // 新增单位工程
@@ -536,14 +537,9 @@ $(document).ready(function() {
             return false;
         }
         // 输出数据到页面
-        let feeHtml = '<option>请选择费率文件</option>';
         if (currentLib.fee_lib !== undefined && currentLib.fee_lib.length > 0) {
-            for (let fee of currentLib.fee_lib) {
-                feeHtml += '<option value="'+ fee.id +'">'+ fee.name +'</option>';
-            }
+            $("#tender-fee-rate").children("option").first().val("newFeeRate-"+currentLib.fee_lib[0].id);
         }
-        $("#tender-fee-rate").html(feeHtml);
-
         $(this).parent().siblings('.hidden-area').slideDown('fast');
     });
 });
@@ -554,6 +550,9 @@ $(document).ready(function() {
  * @return {void}
  */
 function init() {
+    billValuation = billValuation.replace(/\n/g, '\\n');
+    rationValuation = rationValuation.replace(/\n/g, '\\n');
+
     let table = $('#ProjTree');
     $('thead', table).remove();
     $('tbody', table).remove();
@@ -822,8 +821,14 @@ function AddFolder() {
 function GetUpdateData(parent, next, name, property, newId, type) {
     let data = [];
     let updateData = {};
-    let rootProject = parent ? parent.parent : Tree._root;
-    let rootProjectID = rootProject ? rootProject.id() : -1;
+
+    if(type.projectType== projectType.tender){
+        let rootProject = parent ? parent.parent : Tree._root;
+        let rootProjectID = rootProject ? rootProject.id() : -1;
+        if(property){
+            property.rootProjectID=rootProjectID;
+        }
+    }
 
     updateData['updateType'] = type.updateType === undefined ? 'new' : type.updateType;
     updateData['updateData'] = {};
@@ -1104,6 +1109,50 @@ function getUnitFile(parentID) {
 }
 
 /**
+ * 获取费率文件
+ *
+ * @param {Number} parentID
+ * @return {void}
+ */
+function getFeeRateFile(parentID) {
+    parentID = parseInt(parentID);
+    if (isNaN(parentID) && parentID <= 0) {
+        return;
+    }
+
+    $.ajax({
+        url: '/pm/api/getFeeRateFile',
+        type: 'post',
+        data: {'data': JSON.stringify({"user_id": userID, "parentID": parentID})},
+        dataType: 'json',
+        error: function() {
+            alert('数据传输错误!');
+        },
+        beforeSend: function() {
+
+        },
+        success: function(response) {
+            if (response.error === 1) {
+                alert('获取失败!');
+            } else {
+                if (response.data.length <= 0) {
+                    return false;
+                }
+                var first = $("#tender-fee-rate").children("option").first();
+                $("#tender-fee-rate").empty();
+                $("#tender-fee-rate").append(first);
+                for(let tmp of response.data) {
+                    var option =  $("<option>").val(tmp.ID).text(tmp.name);
+                    $("#tender-fee-rate").append(option);
+                }
+            }
+        }
+    });
+
+}
+
+
+/**
  * 加载数据到侧边栏
  *
  * @return {void}