Bläddra i källkod

Merge branch 'master' of http://smartcost.f3322.net:3000/SmartCost/ConstructionCost

zhongzewei 7 år sedan
förälder
incheckning
cac40eaa7a

+ 7 - 2
modules/fee_rates/facade/fee_rates_facade.js

@@ -350,8 +350,13 @@ async function getFeeRatesByProject(rootProjectID) {
 
 
 async function setFeeRateToBill(data){
 async function setFeeRateToBill(data){
     data=JSON.parse(data);
     data=JSON.parse(data);
-    let result  = await billModel.model.findOneAndUpdate(data.query,data.doc);
-    return result
+    if(data.hasOwnProperty('bills')){
+        await billModel.model.findOneAndUpdate(data.bills.query,data.bills.doc);
+    }
+    if(data.hasOwnProperty('feeRate')){
+        await feeRateModel.findOneAndUpdate(data.feeRate.query,data.feeRate.doc);
+    }
+    return "ok";
 }
 }
 
 
 async function changeFeeRateFileFromCurrent(jdata){
 async function changeFeeRateFileFromCurrent(jdata){

+ 28 - 4
modules/glj/controllers/glj_controller.js

@@ -318,23 +318,42 @@ class GLJController extends BaseController {
     async changeUnitPriceFile(request, response) {
     async changeUnitPriceFile(request, response) {
         let projectId = request.body.project_id;
         let projectId = request.body.project_id;
         let changeUnitPriceId = request.body.change_id;
         let changeUnitPriceId = request.body.change_id;
+        let type = request.body.type;
+        type = parseInt(type);
         let responseData = {
         let responseData = {
             err: 0,
             err: 0,
             msg: ''
             msg: ''
         };
         };
         try {
         try {
             let currentUnitPriceId = await ProjectModel.getUnitPriceFileId(projectId);
             let currentUnitPriceId = await ProjectModel.getUnitPriceFileId(projectId);
+            let unitPriceFileModel = new UnitPriceFileModel();
 
 
+            let insertData = null;
+            if (type > 0) {
+                let currentUnitPrice = await unitPriceFileModel.findDataByCondition({id: changeUnitPriceId});
+                if (currentUnitPrice === null) {
+                    throw '不存在对应单价文件';
+                }
+                // 获取当前项目的rootProjectId
+                let projectData = await ProjectModel.getProject(projectId);
+                let rootProjectId = projectData.property.rootProjectID !== undefined ? projectData.property.rootProjectID : 0;
+
+                insertData = JSON.parse(JSON.stringify(currentUnitPrice));
+                insertData.root_project_id = rootProjectId;
+                insertData.user_id = insertData.user_id === undefined ? request.session.sessionUser.ssoId : insertData.user_id;
+                delete insertData._id;
+                delete insertData.ID;
+            }
             // 获取即将更改的单价文件信息
             // 获取即将更改的单价文件信息
-            let unitPriceFileModel = new UnitPriceFileModel();
-            let targetUnitPriceFile = await unitPriceFileModel.findDataByCondition({id: changeUnitPriceId});
+            let targetUnitPriceFile = type === 0 ? await unitPriceFileModel.findDataByCondition({id: changeUnitPriceId}) :
+                await unitPriceFileModel.add(insertData);
             if (targetUnitPriceFile === null) {
             if (targetUnitPriceFile === null) {
                 throw '没有找到对应的单价文件';
                 throw '没有找到对应的单价文件';
             }
             }
 
 
             // 查找对应单价文件的项目工料机数据
             // 查找对应单价文件的项目工料机数据
             let unitPriceModel = new UnitPriceModel();
             let unitPriceModel = new UnitPriceModel();
-            let copyResult = await unitPriceModel.copyNotExist(currentUnitPriceId, changeUnitPriceId);
+            let copyResult = await unitPriceModel.copyNotExist(currentUnitPriceId, targetUnitPriceFile.id);
             // 复制成功后更改project数据
             // 复制成功后更改project数据
             if (!copyResult) {
             if (!copyResult) {
                 throw '复制数据失败';
                 throw '复制数据失败';
@@ -375,12 +394,17 @@ class GLJController extends BaseController {
         try {
         try {
             // 当前单价文件id
             // 当前单价文件id
             let currentUnitPriceId = await ProjectModel.getUnitPriceFileId(projectId);
             let currentUnitPriceId = await ProjectModel.getUnitPriceFileId(projectId);
+            // 获取当前项目的rootProjectId
+            let projectData = await ProjectModel.getProject(projectId);
+            let rootProjectId = projectData.property.rootProjectID !== undefined ? projectData.property.rootProjectID : 0;
 
 
             // 新增单价文件信息
             // 新增单价文件信息
             let unitPriceFileModel = new UnitPriceFileModel();
             let unitPriceFileModel = new UnitPriceFileModel();
             let insertData = {
             let insertData = {
                 name: name,
                 name: name,
-                project_id: projectId
+                project_id: projectId,
+                user_id: request.session.sessionUser.ssoId,
+                root_project_id: rootProjectId
             };
             };
             let addResult = await unitPriceFileModel.add(insertData);
             let addResult = await unitPriceFileModel.add(insertData);
             if (!addResult) {
             if (!addResult) {

+ 4 - 0
modules/glj/models/schemas/unit_price_file.js

@@ -19,6 +19,10 @@ let modelSchema = {
     },
     },
     // 显示名称
     // 显示名称
     name: String,
     name: String,
+    // 所属用户id
+    user_id: Number,
+    // 顶层projectId
+    root_project_id: Number,
 };
 };
 let model = mongoose.model(collectionName, new Schema(modelSchema, {versionKey: false, collection: collectionName}));
 let model = mongoose.model(collectionName, new Schema(modelSchema, {versionKey: false, collection: collectionName}));
 export {model as default, collectionName as collectionName};
 export {model as default, collectionName as collectionName};

+ 52 - 0
modules/main/controllers/calc_program_controller.js

@@ -0,0 +1,52 @@
+/**
+ * Created by CSL on 2017-10-25.
+ */
+
+let mongoose = require('mongoose');
+let calcProgramFacade = require('../facade/calc_program_facade');
+
+module.exports = {
+    getProjectCalcProgram: getProjectCalcProgram,
+    getStdCalcProgram: getStdCalcProgram,
+    saveCalcItem: saveCalcItem
+};
+
+async function getProjectCalcProgram(req, res) {
+    let result = {error: 0, message: '', data: null};
+
+    try {
+        let projCP = await calcProgramFacade.getProjectCalcProgramFile(req.body.data.calcProgramID);
+        result.data= projCP;
+    }catch (err){
+        result.error = 1;
+        result.message = err.message;
+    }
+
+    res.json(result);
+};
+
+async function getStdCalcProgram(req, res) {
+    let result = {error: 0, message: '', data: null};
+
+    try {
+        let stdCP = await calcProgramFacade.getStdCalcProgramFile(req.body.ID);
+        result.data= stdCP;
+    }catch (err){
+        result.error = 1;
+        result.message = err.message;
+    }
+
+    res.json(result);
+};
+
+async function saveCalcItem(req, res) {
+    let result = {error: 0, message: ''};
+
+    calcProgramFacade.saveCalcItem(req.body.data, function (err, msg) {
+        if (err) {
+            result.error = 1;
+        };
+        result.message = msg;
+    });
+    res.json(result);
+};

+ 42 - 6
modules/main/facade/calc_program_facade.js

@@ -17,7 +17,8 @@ module.exports = {
     getProjectCalcProgramFile: getProjectCalcProgramFile,
     getProjectCalcProgramFile: getProjectCalcProgramFile,
     getStdCalcProgramFile: getStdCalcProgramFile,
     getStdCalcProgramFile: getStdCalcProgramFile,
     getData: getData,
     getData: getData,
-    save: save
+    save: save,
+    saveCalcItem: saveCalcItem
 };
 };
 
 
 async function newProjectCalcProgramFile(data) {
 async function newProjectCalcProgramFile(data) {
@@ -44,13 +45,13 @@ async function newProjectCalcProgramFile(data) {
 };
 };
 
 
 async function getProjectCalcProgramFile(ID) {
 async function getProjectCalcProgramFile(ID) {
-    let projLC = await projectCalcProgramsModel.findOne({ID:ID});
-    return projLC;
+    let projCP = await projectCalcProgramsModel.findOne({ID:ID});
+    return projCP;
 };
 };
 
 
 async function getStdCalcProgramFile(libID) {
 async function getStdCalcProgramFile(libID) {
-    let stdLC = await stdCalcProgramsModel.findOne({ID:libID});
-    return stdLC;
+    let stdCP = await stdCalcProgramsModel.findOne({ID:libID});
+    return stdCP;
 };
 };
 
 
 // 统一的 getData() 方法供project调用
 // 统一的 getData() 方法供project调用
@@ -84,4 +85,39 @@ function getData(projectID, callback) {
 // 统一的 save() 方法供project调用
 // 统一的 save() 方法供project调用
 function save (user_id, datas, callback) {
 function save (user_id, datas, callback) {
     projectCalcProgramsModel.update({"projectID": 553}, {"libName":"goo—test"}, callback(null, {data: 'test'}));
     projectCalcProgramsModel.update({"projectID": 553}, {"libName":"goo—test"}, callback(null, {data: 'test'}));
-}
+}
+
+function saveCalcItem(dataObj, callback) {
+    projectCalcProgramsModel.findOne({projectID: dataObj.projectID}, function (err, data) {
+        if(!err){
+            for (let i = 0; i < data.templates.length; i++){
+                if (data.templates[i].ID == dataObj.templatesID){
+                    for (let j=0; j < data.templates[i].calcItems.length; j++){
+                        if (data.templates[i].calcItems[j].ID == dataObj.calcItem.ID){
+                            data.templates[i].calcItems[j] = dataObj.calcItem;
+                            data.save(function (err) {
+                                if (err) {
+                                    callback({err:1, msg:'本条计算规则保存失败'});
+                                } else {
+                                    callback({err:0, msg:'本条计算规则保存成功'});
+                                }
+                            });
+                            break;
+                        };
+                    };
+                    break;
+                };
+            };
+        }
+        else {
+            callback( {err:1, msg:'没有找到计算程序文件'} );
+        }
+    });
+
+};
+
+// for test
+/*let udata = {ID:8, code: '8.8.8', name: '被改成了888', hehe: '增加的属性'};
+saveCalcItem({projectID: 597, templatesID: 4, calcItemID: 8, data: udata}, function (data) {
+    console.log({msg:data.msg, data: data.data});
+})*/

+ 21 - 0
modules/main/routes/calc_program_route.js

@@ -0,0 +1,21 @@
+/**
+ * Created by CSL on 2017-10-25.
+ */
+
+let express = require('express');
+let cpController = require('../controllers/calc_program_controller');
+
+module.exports = function (app) {
+
+    var cpRouter = express.Router();
+
+    cpRouter.post('/getProjectCalcProgram', cpController.getProjectCalcProgram);
+    cpRouter.post('/getStdCalcProgram', cpController.getStdCalcProgram);
+    cpRouter.post('/saveCalcItem', cpController.saveCalcItem);
+
+    app.use('/calcProgram',cpRouter);
+}
+
+
+
+

+ 5 - 3
modules/pm/models/project_model.js

@@ -75,7 +75,9 @@ ProjectsDAO.prototype.updateUserProjects = async function(userId, datas, callbac
 
 
                     let insertData = {
                     let insertData = {
                         name: data.updateData.name,
                         name: data.updateData.name,
-                        project_id: data.updateData.ID
+                        project_id: data.updateData.ID,
+                        user_id: userId,
+                        root_project_id: data.property.rootProjectID
                     };
                     };
                     let addResult = await unitPriceFileModel.add(insertData);
                     let addResult = await unitPriceFileModel.add(insertData);
                     if (!addResult) {
                     if (!addResult) {
@@ -305,7 +307,7 @@ ProjectsDAO.prototype.getTenderByUnitPriceFileId = async function(unitPriceFileI
         return result;
         return result;
     }
     }
 
 
-    let condition = {projType: 'Tender', "property.unitPriceFile.id": unitPriceFileId + ''};
+    let condition = {projType: 'Tender', "property.unitPriceFile.id": unitPriceFileId};
     result = await Projects.find(condition);
     result = await Projects.find(condition);
 
 
     return result;
     return result;
@@ -324,7 +326,7 @@ ProjectsDAO.prototype.getUnitPriceFileId = async function(projectId) {
         return result;
         return result;
     }
     }
 
 
-    result = projectData.property.unitPriceFile.id;
+    result = projectData.property.unitPriceFile !== undefined ? projectData.property.unitPriceFile.id : 0;
     return result;
     return result;
 };
 };
 
 

+ 15 - 2
public/web/number_util.js

@@ -10,6 +10,19 @@ var  number_util = {
     isNumber : function (obj) {
     isNumber : function (obj) {
         return obj === +obj;
         return obj === +obj;
     },
     },
-
-
+    checkNumberValue: function (editingText, decimal) {
+        let value;
+        if (decimal) {
+            value = Number(editingText);
+            if (number_util.isNumber(value)) {
+                value = value.toDecimal(decimal);
+            } else {
+                value = null;
+                alert('当前输入的数据类型不正确,请重新输入。');
+            }
+        } else {
+            value = editingText;
+        }
+        return value;
+    }
 }
 }

+ 1 - 1
public/web/socket/connection.js

@@ -8,7 +8,7 @@ socketObject={
       socket = io('http://'+hostName+':3300');
       socket = io('http://'+hostName+':3300');
       socket.on('connect', function () {
       socket.on('connect', function () {
 
 
-          var roomID = projectObj.project.FeeRate.getActivateFeeRateID();
+          var roomID = projectObj.project.FeeRate.getActivateFeeRateFileID();
           socket.emit('join', roomID);
           socket.emit('join', roomID);
           console.log('连接成功');
           console.log('连接成功');
       });
       });

+ 3 - 3
socketdockerfile

@@ -1,8 +1,8 @@
-FROM server:2.0
+FROM costbase:latest
 
 
-COPY . ConstructionCost
+WORKDIR /home/ConstructionCost
 
 
-WORKDIR ConstructionCost
+RUN git pull http://192.168.1.12:3000/SmartCost/ConstructionCost master
 
 
 RUN cnpm install 
 RUN cnpm install 
 
 

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

@@ -163,7 +163,7 @@ $(document).ready(function () {
         $.ajax({
         $.ajax({
             url: '/glj/change-file',
             url: '/glj/change-file',
             type: 'post',
             type: 'post',
-            data: {project_id: scUrlUtil.GetQueryString('project'), change_id: changeUnitPriceId},
+            data: {project_id: scUrlUtil.GetQueryString('project'), change_id: changeUnitPriceId, type: type},
             error: function() {
             error: function() {
                 isChanging = false;
                 isChanging = false;
             },
             },

+ 115 - 16
web/building_saas/main/js/models/fee_rate.js

@@ -33,7 +33,7 @@ var FeeRate = {
             }
             }
             return feeRate;
             return feeRate;
         };
         };
-        FeeRate.prototype.getActivateFeeRateID = function(){
+        FeeRate.prototype.getActivateFeeRateFileID = function(){
             var feeRate = this.getActivateFeeRate();
             var feeRate = this.getActivateFeeRate();
             if(feeRate){
             if(feeRate){
                 return feeRate.ID;
                 return feeRate.ID;
@@ -41,6 +41,14 @@ var FeeRate = {
                 return 0;
                 return 0;
             }
             }
         };
         };
+        FeeRate.prototype.getActivateFeeRateID = function(){
+            var feeRate = this.getActivateFeeRate();
+            if(feeRate){
+                return feeRate.feeRateID;
+            }else {
+                return 0;
+            }
+        };
         FeeRate.prototype.getFeeRateByID=function (ID) {
         FeeRate.prototype.getFeeRateByID=function (ID) {
             var rates = this.getActivateFeeRate().rates;
             var rates = this.getActivateFeeRate().rates;
             return _.find(rates,{'ID':ID})
             return _.find(rates,{'ID':ID})
@@ -115,6 +123,7 @@ var FeeRate = {
                 rateIndex:params.sourceIndex,
                 rateIndex:params.sourceIndex,
                 rate:params.dataItem
                 rate:params.dataItem
             }
             }
+            doc.rate.rate =doc.rate.rate.toDecimal(feeRate_consts.decimal);
             this.updateFeeRate(query,doc);
             this.updateFeeRate(query,doc);
             if(this.ifRateChange(params)){
             if(this.ifRateChange(params)){
                 this.synchronizeFeeRate();
                 this.synchronizeFeeRate();
@@ -130,7 +139,7 @@ var FeeRate = {
         FeeRate.prototype.updateFeeRate=function (query,doc) {
         FeeRate.prototype.updateFeeRate=function (query,doc) {
           var updateData = this.getUpdateData('ut_update',query,doc,'update_rates');
           var updateData = this.getUpdateData('ut_update',query,doc,'update_rates');
             project.pushNow('updateFeeRate',[this.sourceType],updateData);
             project.pushNow('updateFeeRate',[this.sourceType],updateData);
-            socket.emit('feeRateChangeNotify', this.getActivateFeeRateID());
+            socket.emit('feeRateChangeNotify', this.getActivateFeeRateFileID());
         };
         };
         FeeRate.prototype.updateStatusBySelected = function (updateTasks) {
         FeeRate.prototype.updateStatusBySelected = function (updateTasks) {
             var updateData = [];
             var updateData = [];
@@ -173,7 +182,7 @@ var FeeRate = {
                     me.datas.libName=data.libName;
                     me.datas.libName=data.libName;
                     me.datas.feeRateID=data.feeRateID;
                     me.datas.feeRateID=data.feeRateID;
                     me.datas.rates=data.rates;
                     me.datas.rates=data.rates;
-                    socket.emit('feeRateChangeNotify', me.getActivateFeeRateID());
+                    socket.emit('feeRateChangeNotify', me.getActivateFeeRateFileID());
                     callback();
                     callback();
                 }
                 }
             });
             });
@@ -198,7 +207,7 @@ var FeeRate = {
             var updateData = this.getUpdateData('ut_update',{projectID:projectInfoObj.projectInfo.ID},this.datas,'feeRateFileSaveAs');
             var updateData = this.getUpdateData('ut_update',{projectID:projectInfoObj.projectInfo.ID},this.datas,'feeRateFileSaveAs');
             project.pushNow('updateFeeRate',[this.sourceType],updateData);
             project.pushNow('updateFeeRate',[this.sourceType],updateData);
 
 
-            socket.emit('feeRateChangeNotify', this.getActivateFeeRateID());
+            socket.emit('feeRateChangeNotify', this.getActivateFeeRateFileID());
             return  this.datas;
             return  this.datas;
         };
         };
         FeeRate.prototype.getChangeInfo = function (callback) {
         FeeRate.prototype.getChangeInfo = function (callback) {
@@ -216,17 +225,107 @@ var FeeRate = {
                 callback(data);
                 callback(data);
             });
             });
         };
         };
-        FeeRate.prototype.setFeeRateToBill=function (rate,bills,callback) {
-            var query={
-                ID:bills.ID,
-                projectID:bills.projectID,
-                deleteInfo:null
+        FeeRate.prototype.updateFeeRateFromBills=function(value,node){
+            var me =this;
+            if(node.sourceType === project.Bills.getSourceType()){
+                var value= number_util.checkNumberValue(value,feeRate_consts.decimal);
+                if(value){
+                    var bill = node.data;
+                    var rate =me.getFeeRateByID(bill.feeRateID);
+                    var data=me.getfbUpdateData(rate,bill,value);
+                    this.setFeeRateToBill(data,function (result) {
+                        if(data.hasOwnProperty('feeRate')){
+                            me.refreshBillsByRateID(rate,value);
+                            socket.emit('feeRateChangeNotify', me.getActivateFeeRateFileID());
+                        }else {
+                            bill.feeRate=value;
+                            projectObj.mainController.refreshTreeNode([node])
+                        }
+                    });
+                }else {
+                    projectObj.mainController.refreshTreeNode([node]);
+                }
+            }
+        };
+        FeeRate.prototype.refreshBillsByRateID=function(rate,value){
+            rate.rate=value;
+            var nodes = _.filter(projectObj.project.mainTree.items,function (n) {
+                if(n.sourceType==ModuleNames.bills&&n.data.feeRateID==rate.ID){
+                    n.data.feeRate=value;
+                    return true;
+                }else {
+                    return false;
+                }
+            })
+            if(nodes.length>0){
+                projectObj.mainController.refreshTreeNode(nodes)
             }
             }
-            var doc={
-                feeRate:null,
-                feeRateID:rate.ID
+        };
+
+        FeeRate.prototype.getfbUpdateData=function (rate,bill,value) {
+            var data={};
+            if(bill.feeRateID){
+                data.feeRate={
+                    query:{
+                        'ID':this.getActivateFeeRateID(),
+                        'rates.ID':rate.ID
+                    },
+                    doc:{
+                        'rates.$.rate':value
+                    }
+                }
+            }else {
+                data.bills={
+                    query:{
+                        ID:bill.ID,
+                        projectID:bill.projectID,
+                        deleteInfo:null
+                    },
+                    doc:{
+                        feeRate:value
+                    }
+                }
             }
             }
-            CommonAjax.post('/feeRates/setFeeRateToBill', {query:query,doc:doc}, function (data) {
+            return data;
+        };
+
+        FeeRate.prototype.cleanFeeRateID=function (node) {
+            var data ={
+                bills:{
+                    query:{
+                        ID:node.data.ID,
+                        projectID:node.data.projectID,
+                        deleteInfo:null
+                    },
+                    doc:{
+                        feeRate:null,
+                        feeRateID:null
+                    }
+                }
+            }
+            this.setFeeRateToBill(data,function (result) {
+                node.data.feeRate=null;
+                node.data.feeRateID=null;
+            });
+        };
+        FeeRate.prototype.submitFeeRateFromBill=function (rate,bills,callback) {
+            var data ={
+                    bills:{
+                        query:{
+                            ID:bills.ID,
+                            projectID:bills.projectID,
+                            deleteInfo:null
+                        },
+                        doc:{
+                            feeRate:null,
+                            feeRateID:rate.ID
+                        }
+                    }
+                }
+            this.setFeeRateToBill(data,callback);
+        };
+        FeeRate.prototype.setFeeRateToBill=function(data,callback){
+            CommonAjax.post('/feeRates/setFeeRateToBill', data, function (data) {
                 callback(data);
                 callback(data);
             });
             });
         };
         };
@@ -234,7 +333,7 @@ var FeeRate = {
             if(node.data.feeRateID){
             if(node.data.feeRateID){
                 var feeRate = this.getFeeRateByID(node.data.feeRateID);
                 var feeRate = this.getFeeRateByID(node.data.feeRateID);
                 if(feeRate){
                 if(feeRate){
-                    node.data.feeRate=feeRate.rate.toString();
+                    node.data.feeRate=parseFloat(feeRate.rate).toFixed(feeRate_consts.decimal);
                 }
                 }
             }
             }
         };
         };
@@ -248,7 +347,7 @@ var FeeRate = {
             CommonAjax.post('/feeRates/changeFeeRateFileFromCurrent', data, function (data) {
             CommonAjax.post('/feeRates/changeFeeRateFileFromCurrent', data, function (data) {
                 if (data) {
                 if (data) {
                     me.datas=data;
                     me.datas=data;
-                    socket.emit('feeRateChangeNotify', me.getActivateFeeRateID());
+                    socket.emit('feeRateChangeNotify', me.getActivateFeeRateFileID());
                     callback();
                     callback();
                 }
                 }
             });
             });
@@ -266,7 +365,7 @@ var FeeRate = {
             CommonAjax.post('/feeRates/changeFeeRateFileFromOthers', data, function (data) {
             CommonAjax.post('/feeRates/changeFeeRateFileFromOthers', data, function (data) {
                 if (data) {
                 if (data) {
                     me.datas=data;
                     me.datas=data;
-                    socket.emit('feeRateChangeNotify', me.getActivateFeeRateID());
+                    socket.emit('feeRateChangeNotify', me.getActivateFeeRateFileID());
                     callback();
                     callback();
                 }
                 }
             });
             });

+ 4 - 1
web/building_saas/main/js/models/main_consts.js

@@ -15,4 +15,7 @@ const ModuleNames = {
     projectGLJ: 'project_glj',
     projectGLJ: 'project_glj',
     labour_coe: 'labour_coe',
     labour_coe: 'labour_coe',
     calc_program: 'calc_program'
     calc_program: 'calc_program'
-};
+};
+const feeRate_consts={
+    decimal:3
+}

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

@@ -75,7 +75,38 @@ let rationPM = {
         var dData = me.datas[row].calcItems;
         var dData = me.datas[row].calcItems;
         sheetCommonObj.showData(dSheet, me.detailSetting, dData);
         sheetCommonObj.showData(dSheet, me.detailSetting, dData);
         me.detailSpread.resumePaint();
         me.detailSpread.resumePaint();
-    }
+    },
+
+    saveCalcItem: function (projectID, templatesID, calcItem) {
+        let me = this;
+/*        let projectID = projectInfoObj.projectInfo.ID,
+            templatesID = me.datas,
+            calcItem = {
+                "ID" : 99,
+                "code" : "test",
+                "name" : "testName",
+                "fieldName" : "direct",
+                "dispExpr" : "F2+F5+F6+F10",
+                "expression" : "@('2') + @('5') + @('6') + @('10')",
+                "compiledExpr" : "",
+                "statement" : "基价人工费+基价材料费+基价机械费+未计价材料费"
+            };*/
+
+        $.ajax({
+            type: 'post',
+            url: '/calcProgram/saveCalcItem',
+            data: {projectID: projectID, templatesID: templatesID, calcItem: calcItem},
+            dataType: 'json',
+            success: function (result) {
+                if(!result.error){
+                    alert('成功:' + result.message);
+                }
+                else{
+                    alert('失败:' + result.message);
+                }
+            }
+        })
+    },
 };
 };
 
 
 $(document).ready(function(){
 $(document).ready(function(){

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

@@ -18,7 +18,7 @@ var feeRateObject={
     sheetSetting: {
     sheetSetting: {
         header: [
         header: [
             {headerName: "专业名称", headerWidth: 200, dataCode: "name", dataType: "String"},
             {headerName: "专业名称", headerWidth: 200, dataCode: "name", dataType: "String"},
-            {headerName: "值%", headerWidth: 150, dataCode: "rate", dataType: "String",hAlign: "right"},
+            {headerName: "值%", headerWidth: 150, dataCode: "rate", dataType: "Number",hAlign: "right",tofix:feeRate_consts.decimal},
             {headerName: "备注", dataCode: "memo", dataType: "String"}
             {headerName: "备注", dataCode: "memo", dataType: "String"}
         ],
         ],
         view: {
         view: {
@@ -359,12 +359,7 @@ var feeRateObject={
         document.querySelector('#divFee').focus();
         document.querySelector('#divFee').focus();
     },
     },
     reFreshRateViews:function() {
     reFreshRateViews:function() {
-        if(this.mainViews){
-            this.mainViews.refresh()
-        }else {
-            feeRateObject.createSpreadView();
-            //setTimeout("feeRateObject.createSpreadView()",100);
-        }
+        feeRateObject.createSpreadView();
     },
     },
     updateBySelect:function (rate,selectMap,mapID) {
     updateBySelect:function (rate,selectMap,mapID) {
        var selected = this.mainViews.getSelections()[0];
        var selected = this.mainViews.getSelections()[0];
@@ -559,7 +554,7 @@ var feeRateObject={
             var option =  $("<option>").val(s.ID).text(s.name);
             var option =  $("<option>").val(s.ID).text(s.name);
             $('#currentOptions').append(option);
             $('#currentOptions').append(option);
         })
         })
-        $('#currentOptions').val(projectObj.project.FeeRate.getActivateFeeRateID());
+        $('#currentOptions').val(projectObj.project.FeeRate.getActivateFeeRateFileID());
         $('#otherProject').empty();
         $('#otherProject').empty();
         _.forEach(data.others,function (p) {
         _.forEach(data.others,function (p) {
             var option =  $("<option>").val(p.ID).text(p.name);
             var option =  $("<option>").val(p.ID).text(p.name);
@@ -635,12 +630,12 @@ var feeRateObject={
         }
         }
         return validate;
         return validate;
     },
     },
-    setFeeRateToBill:function () {
+    submitFeeRateFromBill:function () {
        var rate = feeRateObject.feeRateSelection;
        var rate = feeRateObject.feeRateSelection;
        var selected = projectObj.project.mainTree.selected;
        var selected = projectObj.project.mainTree.selected;
-        projectObj.project.FeeRate.setFeeRateToBill(rate,selected.data,function (data) {
+        projectObj.project.FeeRate.submitFeeRateFromBill(rate,selected.data,function (data) {
             selected.data.feeRateID=rate.ID.toString();
             selected.data.feeRateID=rate.ID.toString();
-            selected.data.feeRate=rate.rate.toString();
+            selected.data.feeRate=parseFloat(rate.rate).toFixed(feeRate_consts.decimal);
             projectObj.mainController.refreshTreeNode([selected]);
             projectObj.mainController.refreshTreeNode([selected]);
             $("#fee_rate_tree").modal('hide');
             $("#fee_rate_tree").modal('hide');
         });
         });
@@ -651,7 +646,7 @@ var feeRateObject={
             if($('#edit_from').val()=='calc_detail'){
             if($('#edit_from').val()=='calc_detail'){
                 //do calc_detail
                 //do calc_detail
             }else {
             }else {
-                this.setFeeRateToBill();
+                this.submitFeeRateFromBill();
             }
             }
         }else {
         }else {
             //$("#fee_rate_tree").modal('hide');
             //$("#fee_rate_tree").modal('hide');

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

@@ -881,7 +881,6 @@ $(function(){
             gljOprObj.gljLibSheet = gljOprObj.gljLibSpresd.getSheet(0);
             gljOprObj.gljLibSheet = gljOprObj.gljLibSpresd.getSheet(0);
             gljOprObj.gljLibSheet.options.isProtected = true;
             gljOprObj.gljLibSheet.options.isProtected = true;
             gljOprObj.gljLibSheet.name('glj_lib');
             gljOprObj.gljLibSheet.name('glj_lib');
-            console.log("show feeRate tree");
         }
         }
         gljOprObj.gljLibSheetData =gljOprObj.AllRecode;
         gljOprObj.gljLibSheetData =gljOprObj.AllRecode;
         var selected=null;
         var selected=null;

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

@@ -59,6 +59,11 @@ let MainTreeCol = {
                 '根', '组', '系统', '台', '套', '株', '丛', '缸', '支', '只', '块', '座', '对', '份', '樘', '攒', '榀']);
                 '根', '组', '系统', '台', '套', '株', '丛', '缸', '支', '只', '块', '座', '对', '份', '樘', '攒', '榀']);
             return combo;
             return combo;
         },
         },
+
+        units: function () {
+            this.unit;
+        },
+
         feeRate: function () {
         feeRate: function () {
             return feeRateObject.getFeeRateEditCellType();
             return feeRateObject.getFeeRateEditCellType();
         }
         }

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

@@ -258,7 +258,9 @@ var projectObj = {
                 projectObj.updateAndReCalculate(node, fieldName, value);
                 projectObj.updateAndReCalculate(node, fieldName, value);
             } else if (fieldName === 'feesIndex.common.unitFee') {
             } else if (fieldName === 'feesIndex.common.unitFee') {
                 projectObj.updateAndReCalculate(node, fieldName, value);
                 projectObj.updateAndReCalculate(node, fieldName, value);
-            } else {
+            } else if(fieldName ==='feeRate'){
+                project.FeeRate.updateFeeRateFromBills(value,node,fieldName);
+            }else {
                 if (node.sourceType === project.Bills.getSourceType()) {
                 if (node.sourceType === project.Bills.getSourceType()) {
                     project.Bills.updateField(node.source, fieldName, value, true);
                     project.Bills.updateField(node.source, fieldName, value, true);
                 } else if (node.sourceType === project.Ration.getSourceType()) {
                 } else if (node.sourceType === project.Ration.getSourceType()) {
@@ -271,6 +273,8 @@ var projectObj = {
                 }
                 }
                 projectObj.mainController.refreshTreeNode([node]);
                 projectObj.mainController.refreshTreeNode([node]);
             }
             }
+        }else if(value==null&&fieldName ==='feeRate'){
+            project.FeeRate.cleanFeeRateID(node);
         }
         }
     },
     },
     checkMainSpread: function () {
     checkMainSpread: function () {