浏览代码

update FeeRate

zhangweicheng 8 年之前
父节点
当前提交
e36f51ab49

+ 128 - 7
modules/fee_rates/controllers/fee_rates_controller.js

@@ -5,6 +5,9 @@
 const uuidV1 = require('uuid/v1');
 const uuidV1 = require('uuid/v1');
 let mongoose = require('mongoose');
 let mongoose = require('mongoose');
 let feeRateModel = mongoose.model('fee_rates');
 let feeRateModel = mongoose.model('fee_rates');
+let feeRateFileModel = mongoose.model('fee_rate_file');
+let feeRateFacde=require('../facade/fee_rates_facade');
+
 let template = require('./feerate_template');
 let template = require('./feerate_template');
 /*
 /*
 var stdFeeRateLibs = require('../../std_fee_rate_libs/models/std_fee_rate_libs');
 var stdFeeRateLibs = require('../../std_fee_rate_libs/models/std_fee_rate_libs');
@@ -44,13 +47,131 @@ module.exports = {
 
 
 
 
 module.exports = {
 module.exports = {
-    libNames: function (req, res) {
-        var region = req.body.region;
-        let temObject = template.feerate_template2;
-        temObject.ID=uuidV1();
-        feeRateModel.create(temObject,function (err,doc) {
-            res.json({data: doc});
-        });
+    libNames: libNames,
+    getFeeRateStandards:getFeeRateStandards,
+    changeFeeRateStandard:changeFeeRateStandard,
+    checkFeeRateName:checkFeeRateName,
+    getChangeInfo:getChangeInfo,
+    changeFeeRateFileFromCurrent:changeFeeRateFileFromCurrent,
+    changeFeeRateFileFromOthers:changeFeeRateFileFromOthers
+}
+
+function libNames(req, res) {
+    // var region = req.body.region;
+    let temObject = template.feerate_template1;
+    var feeRate = {};
+    feeRate.ID = uuidV1();
+    feeRate.rates = temObject.rates;
+    var feeRateFile = {};
+    feeRateFile.ID = uuidV1();
+    feeRateFile.rootProjectID =99;
+    feeRateFile.name = '费率1';
+    feeRateFile.libID = temObject.ID;
+    feeRateFile.libName = temObject.libName;
+    feeRateFile.feeRateID = feeRate.ID;
+
+    feeRateModel.create(feeRate,function (err,doc) {
+
+    });
 
 
+    feeRateFileModel.create(feeRateFile,function (err,doc) {
+
+    });
+}
+
+
+function getFeeRateStandards(req, res) {
+    let result={
+        error:0
     }
     }
+    try {
+        let data = req.body.data;
+        let feeRateStandards= feeRateFacde.getFeeRateStandardsByProjectID(data.rootProjectID);
+        result.data= feeRateStandards;
+    }catch (err){
+        console.log(err);
+        result.error=1;
+        result.message = err.message;
+    }
+    res.json(result);
 }
 }
+
+async function changeFeeRateStandard(req, res) {
+    let result={
+        error:0
+    }
+    try {
+        let data = req.body.data;
+        let newFeeRateFile= await feeRateFacde.changeFeeRateStandard(data);
+        result.data= newFeeRateFile;
+    }catch (err){
+        console.log(err);
+        result.error=1;
+        result.message = err.message;
+    }
+    res.json(result);
+}
+
+async function checkFeeRateName(req, res) {
+    let result={
+        error:0
+    }
+    try {
+        let data = req.body.data;
+        let nameExist= await feeRateFacde.checkFeeRateName(data);
+        result.data= nameExist;
+    }catch (err){
+        console.log(err);
+        result.error=1;
+        result.message = err.message;
+    }
+    res.json(result);
+}
+
+async function getChangeInfo(req, res) {
+    let result={
+        error:0
+    }
+    try {
+        let data = req.body.data;
+        let info= await feeRateFacde.getChangeInfo(data);
+        result.data= info;
+    }catch (err){
+        console.log(err);
+        result.error=1;
+        result.message = err.message;
+    }
+    res.json(result);
+}
+
+async function changeFeeRateFileFromCurrent(req, res) {
+    let result={
+        error:0
+    }
+    try {
+        let data = req.body.data;
+        let feeRateFile= await feeRateFacde.changeFeeRateFileFromCurrent(data);
+        result.data= feeRateFile;
+    }catch (err){
+        console.log(err);
+        result.error=1;
+        result.message = err.message;
+    }
+    res.json(result);
+}
+
+async function changeFeeRateFileFromOthers(req, res) {
+    let result={
+        error:0
+    }
+    try {
+        let data = req.body.data;
+        let feeRateFile= await feeRateFacde.changeFeeRateFileFromOthers(data);
+        result.data= feeRateFile;
+    }catch (err){
+        console.log(err);
+        result.error=1;
+        result.message = err.message;
+    }
+    res.json(result);
+}

+ 5 - 7
modules/fee_rates/controllers/feerate_template.js

@@ -4,10 +4,9 @@
 
 
 module.exports={
 module.exports={
     feerate_template1:{
     feerate_template1:{
-        "libID": 2,
-        "libName": "重庆2016年标准",
-        "projectID": 99,
-        "status": "activate",
+        "ID": '2',
+        "libName": "重庆渝建发[2016]35号",
+        "region": '重庆',
         "rates": [
         "rates": [
             {
             {
                 "ID": 1,
                 "ID": 1,
@@ -646,10 +645,9 @@ module.exports={
             }]
             }]
     },
     },
     feerate_template2:{
     feerate_template2:{
-        "libID": 2,
+        "ID": '3',
         "libName": "北京2009年标准",
         "libName": "北京2009年标准",
-        "projectID": 99,
-        "status": "disable",
+        "region": '北京',
         "rates": [
         "rates": [
             {
             {
                 "ID": 1,
                 "ID": 1,

+ 186 - 6
modules/fee_rates/facade/fee_rates_facade.js

@@ -5,12 +5,23 @@
 let async_n = require("async");
 let async_n = require("async");
 let mongoose = require('mongoose');
 let mongoose = require('mongoose');
 let feeRateModel = mongoose.model('fee_rates');
 let feeRateModel = mongoose.model('fee_rates');
+let feeRateFileModel = mongoose.model('fee_rate_file');
+let std_fee_rate_lib_model = mongoose.model('std_fee_rate_libs');
+let project_feerate_temp = mongoose.model('project_feerate_temp');
 let consts = require('../../main/models/project_consts');
 let consts = require('../../main/models/project_consts');
 let _=require("lodash");
 let _=require("lodash");
+let template = require('../controllers/feerate_template');
+const uuidV1 = require('uuid/v1');
 
 
 module.exports={
 module.exports={
     save:save,
     save:save,
-    getData:getData
+    getData:getData,
+    getFeeRateStandardsByProjectID:getFeeRateStandardsByProjectID,
+    changeFeeRateStandard:changeFeeRateStandard,
+    checkFeeRateName:checkFeeRateName,
+    getChangeInfo:getChangeInfo,
+    changeFeeRateFileFromCurrent:changeFeeRateFileFromCurrent,
+    changeFeeRateFileFromOthers:changeFeeRateFileFromOthers
 };
 };
 let operationMap={
 let operationMap={
     'ut_create':create_fee_rate,
     'ut_create':create_fee_rate,
@@ -21,9 +32,19 @@ let operationMap={
 let updateFunctionMap = {
 let updateFunctionMap = {
     'normalUpdate':normalUpdate,
     'normalUpdate':normalUpdate,
     'update_rates':update_rates,
     'update_rates':update_rates,
-    'updateStatusBySelected':updateStatusBySelected
+    'updateStatusBySelected':updateStatusBySelected,
+    'feeRateFileSaveAs':feeRateFileSaveAs
 }
 }
 
 
+//测试数据 key projectID, value feeRateFileID
+let project_feeRateF_map={
+    99:'da059df1-7c18-11e7-9e2f-1390b52643b4'
+}
+
+
+
+
+
 function create_fee_rate() {
 function create_fee_rate() {
 
 
 }
 }
@@ -45,6 +66,40 @@ function updateStatusBySelected(user_id,datas) {
 
 
     }
     }
 }
 }
+function feeRateFileSaveAs(user_id,datas) {
+    return function(callback){
+        let doc = datas.doc;
+        let projectID=datas.query.projectID;
+        let feeRate={
+            ID:doc.feeRateID,
+            rates:doc.rates
+        };
+        delete doc._id;
+        delete doc.rates;
+        creatFeeRateFile(doc,feeRate,projectID).then(function (result) {
+            commonCallback(callback,result,result.err);
+        })
+
+    }
+}
+
+
+async function creatFeeRateFile(feeRateFile,feeRate,projectID) {//预留projectID
+    let result={
+        err:null
+    }
+    try {
+        await project_feerate_temp.findOneAndUpdate({projectID:projectID},{feeRateFileID:feeRateFile.ID});
+        await feeRateFileModel.create(feeRateFile);
+        await  feeRateModel.create(feeRate);
+    }catch (err){
+        console.log(err);
+        result.err=err;
+    }
+    return result;
+}
+
+
 function normalUpdate(user_id,datas) {
 function normalUpdate(user_id,datas) {
     return function(callback){
     return function(callback){
         console.log(datas)
         console.log(datas)
@@ -69,7 +124,6 @@ function  generateUpdateTaks(updateTasks) {
 
 
 function update_rates(user_id,datas) {
 function update_rates(user_id,datas) {
     return function(callback){
     return function(callback){
-        console.log(datas);
         feeRateModel.findOne(datas.query,['rates'],function(err, data){
         feeRateModel.findOne(datas.query,['rates'],function(err, data){
             let doc = datas.doc;
             let doc = datas.doc;
             if(_.isArray(doc)){
             if(_.isArray(doc)){
@@ -113,19 +167,145 @@ function save (user_id, datas, callback) {
 }
 }
 
 
 function getData(projectID, callback) {
 function getData(projectID, callback) {
-    feeRateModel.find({'projectID':projectID}).exec((err,datas)=>{
-        if(err){
+    getFeeRateData(projectID).then(function (result) {
+        if(result.err){
             callback(1, '', null);
             callback(1, '', null);
         }else {
         }else {
-            callback(0, consts.projectConst.FEERATE, datas);
+            //feeRateModel
+            callback(0, consts.projectConst.FEERATE, result.datas);
         }
         }
     })
     })
 }
 }
 
 
+async function getFeeRateData(projectID) {
+    // to do 需根据projectID查找对应的费率文件
+    let result={
+        err:null
+    }
+    try {
+        //
+        let tem = await project_feerate_temp.findOne({projectID:projectID});//暂时取tem表的记录
+        let feeRateData = await feeRateFileModel.findOne({'ID':tem.feeRateFileID,deleteInfo:null});
+        let feeRate = await feeRateModel.findOne({ID:feeRateData.feeRateID});
+        feeRateData._doc.rates = feeRate.rates;
+        //
+        feeRateData._doc.usageProjects=getUsageProjects(feeRateData.ID);
+        result.datas = feeRateData;
+    }catch (err){
+        console.log(err);
+        result.err=err;
+    }
+    return result;
+}
+
+function getUsageProjects(feeRateID){
+   //从数据库中查,项目结构暂时还没做 todo
+    var projects = [];
+    projects.push({ID:99,name:'单价调整'});
+    projects.push({ID:100,name:'工程02'});
+    projects.push({ID:101,name:'建筑工程'});
+    return projects;
+}
+
+
 function commonCallback(callback,result,err) {
 function commonCallback(callback,result,err) {
     if(err){
     if(err){
         callback(err,'');
         callback(err,'');
     }else {
     }else {
         callback(null,result);
         callback(null,result);
     }
     }
+}
+
+function getFeeRateStandardsByProjectID(rootProjectID) {
+    //这里应该从项目配置中读取 to do, 暂时使用模板文件里的数据
+    let t1 = template.feerate_template1;
+    let t2 = template.feerate_template2;
+
+    let feeRateStandards=[];
+    feeRateStandards.push({ID:t1.ID,libName:t1.libName});
+    feeRateStandards.push({ID:t2.ID,libName:t2.libName});
+    return feeRateStandards;
+}
+
+async function changeFeeRateStandard(jdata){
+    let data = JSON.parse(jdata);
+    let template = await std_fee_rate_lib_model.findOne({"ID":data.newLibID});
+    let newFeeRate = {};
+    newFeeRate.ID =uuidV1();
+    newFeeRate.rates=template.rates;
+    await feeRateModel.create(newFeeRate);
+    let doc={
+        libID:data.newLibID,
+        libName:template.libName,
+        feeRateID: newFeeRate.ID
+    };
+    let deleteInfo = {deleted: true, deleteDateTime: new Date(), deleteBy: data.user_id};
+    await feeRateFileModel.findOneAndUpdate({ID:data.feeRateFileID,deleteInfo:null},doc);
+    await feeRateModel.findOneAndUpdate({ID:data.feeRateID},{deleteInfo:deleteInfo});
+    doc.rates=newFeeRate.rates;
+    return doc;
+}
+
+async function checkFeeRateName(jdata) {
+    let data = JSON.parse(jdata);
+    let count = await feeRateFileModel.count({rootProjectID:data.rootProjectID,name:data.name,deleteInfo:null});
+    if(count>0){
+        return true;
+    }
+    return false;
+}
+
+async function getChangeInfo(jdata){
+    let data = JSON.parse(jdata);
+    //{ projectID: 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']);
+    //根据用户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 },
+    ]
+    result.currentProject=currentProject;
+    result.others = others;
+    return result;
+}
+
+async function changeFeeRateFileFromCurrent(jdata){
+    let data = JSON.parse(jdata);
+    let result = await  project_feerate_temp.findOneAndUpdate({projectID:data.projectID},{feeRateFileID:data.newFeeRateFileID});
+    let feeRateData = await feeRateFileModel.findOne({'ID':data.newFeeRateFileID});
+    let feeRate = await feeRateModel.findOne({ID:feeRateData.feeRateID});
+    feeRateData._doc.rates = feeRate.rates;
+    //
+    feeRateData._doc.usageProjects=getUsageProjects(feeRateData.ID);
+    return feeRateData;
+}
+
+async function changeFeeRateFileFromOthers(jdata) {
+    let data = JSON.parse(jdata);
+    console.log(data);
+    let feeRateFile = await feeRateFileModel.findOne({'ID':data.feeRateFileID});
+    let feeRate = await feeRateModel.findOne({ID:feeRateFile.feeRateID});
+    let newFeeRate={};
+    newFeeRate.ID=uuidV1();
+    newFeeRate.rates =feeRate.rates;
+    let newFeeRateFile = {};
+    newFeeRateFile.ID = uuidV1();
+    newFeeRateFile.name = data.name;
+    newFeeRateFile.libName = feeRateFile.libName;
+    newFeeRateFile.libID=feeRateFile.libID;
+    newFeeRateFile.rootProjectID = data.rootProjectID;
+    newFeeRateFile.feeRateID =newFeeRate.ID;
+    await feeRateModel.create(newFeeRate);
+    await feeRateFileModel.create(newFeeRateFile);
+    await project_feerate_temp.findOneAndUpdate({projectID:data.projectID},{feeRateFileID:newFeeRateFile.ID});
+    newFeeRateFile.rates=newFeeRate.rates;
+    newFeeRateFile.usageProjects=getUsageProjects(newFeeRateFile.ID);
+    return newFeeRateFile;
 }
 }

+ 31 - 5
modules/fee_rates/models/fee_rates.js

@@ -4,6 +4,7 @@
 
 
 let mongoose = require('mongoose');
 let mongoose = require('mongoose');
 let Schema = mongoose.Schema;
 let Schema = mongoose.Schema;
+let deleteSchema = require('../../../public/models/delete_schema');
 // {ID:1,name:'工程分类',optionList:[{name:'一类工程',value:1,selected:true},{name:'二类工程',value:2,selected:false},{name:'三类工程',value:3,selected:false},{name:'四类工程',value:4,selected:false}]},
 // {ID:1,name:'工程分类',optionList:[{name:'一类工程',value:1,selected:true},{name:'二类工程',value:2,selected:false},{name:'三类工程',value:3,selected:false},{name:'四类工程',value:4,selected:false}]},
 let optionSchema = new Schema({
 let optionSchema = new Schema({
     name:String,
     name:String,
@@ -38,15 +39,40 @@ let ratesSchema = new Schema({
 
 
 let feeRatesSchema = new Schema({
 let feeRatesSchema = new Schema({
     ID: String,
     ID: String,
-    libID: Number,
-    libName: String,
+    rates: [ratesSchema],
+    deleteInfo: deleteSchema
+},{versionKey:false});
+
+mongoose.model('fee_rates', feeRatesSchema, 'fee_rates');
+
+
+let feeRateFileSchema = new Schema({
+    ID: String,
+    rootProjectID:Number,//顶层项目ID
     name:String,
     name:String,
-    projectID:Number,
-    status:String,
+    libID: String,
+    libName: String,
+    feeRateID:String,//关联的费率ID
+    deleteInfo: deleteSchema
+},{versionKey:false});
+
+mongoose.model('fee_rate_file', feeRateFileSchema, 'fee_rate_file');
+
+
+
+let feeRatesLibSchema = new Schema({
+    ID: String,
+    region: String,                     // 工程所在地
+    libName: String,
     rates: [ratesSchema]
     rates: [ratesSchema]
 },{versionKey:false});
 },{versionKey:false});
 
 
-mongoose.model('fee_rates', feeRatesSchema, 'fee_rates');
+mongoose.model('std_fee_rate_libs', feeRatesLibSchema, 'std_fee_rate_libs');
 
 
 
 
+let temSchema = new Schema({
+    projectID:Number,
+    feeRateFileID:String
+},{versionKey:false})
 
 
+mongoose.model('project_feerate_temp', temSchema, 'project_feerate_temp');

+ 9 - 1
modules/fee_rates/routes/fee_rates_route.js

@@ -9,9 +9,17 @@ module.exports = function (app) {
 
 
     var frRouter = express.Router();
     var frRouter = express.Router();
     frRouter.get('/', function(req, res) {
     frRouter.get('/', function(req, res) {
+        frController.libNames(req, res);
         res.render('building_saas/fee_rates/fee_rate', {});
         res.render('building_saas/fee_rates/fee_rate', {});
     });
     });
-    frRouter.post('/getLibNames', frController.libNames);
+    frRouter.post('/getFeeRateStandards', frController.getFeeRateStandards);
+    frRouter.post('/changeFeeRateStandard', frController.changeFeeRateStandard);
+    frRouter.post('/checkFeeRateName', frController.checkFeeRateName);
+    frRouter.post('/getChangeInfo', frController.getChangeInfo);
+    frRouter.post('/changeFeeRateFileFromCurrent', frController.changeFeeRateFileFromCurrent);
+    frRouter.post('/changeFeeRateFileFromOthers', frController.changeFeeRateFileFromOthers);
+
+    //
 /*    frRouter.post('/getLibNames', frController.libNames);
 /*    frRouter.post('/getLibNames', frController.libNames);
     frRouter.post('/getLibFeeRates', frController.libFeeRates);
     frRouter.post('/getLibFeeRates', frController.libFeeRates);
     frRouter.post('/getProjectFeeRates', frController.projectFeeRates);
     frRouter.post('/getProjectFeeRates', frController.projectFeeRates);

+ 4 - 2
modules/std_fee_rate_libs/models/std_fee_rate_libs.js

@@ -1,6 +1,7 @@
-/**
+/*
+/!**
  * Created by CSL on 2017-03-22.
  * Created by CSL on 2017-03-22.
- */
+ *!/
 
 
 var mg = require('mongoose');
 var mg = require('mongoose');
 var dbm = require("../../../config/db/db_manager");
 var dbm = require("../../../config/db/db_manager");
@@ -50,3 +51,4 @@ StdFeeRateLibs.prototype.rates = function(libID, controllerFun){
 module.exports = new StdFeeRateLibs();
 module.exports = new StdFeeRateLibs();
 
 
 
 
+*/

+ 0 - 15
public/web/socket/connection.js

@@ -22,20 +22,5 @@ socketObject={
           //window.location.reload();
           //window.location.reload();
       })
       })
 
 
-      /*   socket.on('connect', function () {
-       socket.emit('join', roomId);
-       console.log('连接成功');
-       });
-
-       // 接收到改变
-       socket.on('dataChange', function(data) {
-       data = JSON.parse(data);
-       if (data.newValue === undefined) {
-       return false;
-       }
-       changeInfo.push(data);
-       $("#message").html('市场单位已被修改,<a href="javascript:void(0);" id="load-data">点击加载</a>');
-       $("#notify").slideDown('fast');
-       });*/
   }
   }
 }
 }

文件差异内容过多而无法显示
+ 1 - 0
public/web/uuid.js


+ 1 - 1
socket.js

@@ -12,7 +12,7 @@ const socketIO = socket(3300);
 // socket.io相关操作
 // socket.io相关操作
 socketIO.on('connection', function(socket) {
 socketIO.on('connection', function(socket) {
     let roomId = '';
     let roomId = '';
-
+    console.log("new connection");
     // 加入房间
     // 加入房间
     socket.on('join', function(data) {
     socket.on('join', function(data) {
         roomId = data;
         roomId = data;

+ 138 - 7
web/building_saas/fee_rates/fee_rate.html

@@ -11,8 +11,9 @@
 <body >
 <body >
 <div class="toolsbar px-1">
 <div class="toolsbar px-1">
     <div class="form-inline py-1">
     <div class="form-inline py-1">
-        <div class="col-lg-6" > <button id="selctFeeFile">选择费率文件</button></div>
-        <div class="col-lg-3" style="text-align: center"> 费率文件: <span id="projectName"></span></div>
+        <label class="mx-2" >当前使用:<span id="feeRateFileName">费率1</span>(<a href="#" id="pop-lv"><span id="projectCount">3</span> 单位工程使用</a>)
+            <a class="btn btn-sm ml-1" href="#" data-toggle="modal" data-target="#change-lv" id="changFeeRateFile"><i class="fa fa-exchange"></i> 选择其他</a>
+            <a class="btn btn-sm ml-1" href="#" data-toggle="modal" id="saveAs" data-target="#copy-lv"><i class="fa fa-files-o"></i> 另存单独用</a></label>
     </div>
     </div>
 </div>
 </div>
 <div class="container-fluid">
 <div class="container-fluid">
@@ -21,11 +22,8 @@
             <div class="row">
             <div class="row">
                 <div class="col-lg-6">
                 <div class="col-lg-6">
                     <div class="form-inline py-1">
                     <div class="form-inline py-1">
-                        <label class="mx-2" for="inlineFormCustomSelect">费率标准:</label>
-                        <select class="form-control form-control-sm" id="inlineFormCustomSelect">
-
-                        </select>
-                        <span>&nbsp;</span>
+                        <label class="mx-2" >基于&nbsp;&nbsp;<span id="feeRateLibName">重庆渝建发[2016]35号</span></label>
+                        <a class="btn btn-sm ml-1" href="#" data-toggle="modal" data-target="#set-lv" id="setNewFeeRate"><i class="fa fa-cog"></i> 重选标准</a>
                     </div>
                     </div>
                     <div class=" grid  main-data-top" id="divFee"></div>
                     <div class=" grid  main-data-top" id="divFee"></div>
                 </div>
                 </div>
@@ -37,8 +35,141 @@
         </div>
         </div>
     </div>
     </div>
 </div>
 </div>
+<!--弹出更换-->
+<div class="modal fade" id="change-lv" 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">
+                <div class="form-group">
+                    <label class="custom-control custom-radio">
+                        <input id="radio1" name="chaneg-lv-Radio" type="radio" value="0" onclick="changeFRadioClick()" class="custom-control-input" checked>
+                        <span class="custom-control-indicator"></span>
+                        <span class="custom-control-description">从本建设项目中选择</span>
+                    </label>
+                    <label class="custom-control custom-radio">
+                        <input id="radio2" name="chaneg-lv-Radio" type="radio" value="1" onclick="changeFRadioClick()" class="custom-control-input">
+                        <span class="custom-control-indicator"></span>
+                        <span class="custom-control-description">从其他建设项目中复制</span>
+                    </label>
+                </div>
+                <!--从本建设项目中选择-->
+                <div class="form-group" id="fromProject">
+                    <label id="currentProject">建设项目A</label>
+                    <select class="form-control" id="currentOptions"><option>费率1</option><option>费率2</option><option>费率3</option></select>
+                </div>
+                <!--从其他建设项目中复制-->
+                <div id="fromOther" >
+                    <div class="form-group">
+                        <label>选择建设项目</label>
+                        <select class="form-control" id="otherProject"><option>建设项目B</option><option>建设项目C</option><option>建设项目D</option></select>
+                    </div>
+                    <div class="form-group">
+                        <select class="form-control" id="otherFeeRateOption"><option>费率1</option><option>费率2</option><option>费率3</option></select>
+                        <small class="form-text text-muted">你选择的费率文件将复制一份至新项目,不会影响原建设项目的费率文件。</small>
+                    </div>
+                </div>
+
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                <button type="button"  class="btn btn-primary" data-dismiss="modal" id="changeFeeRateConfirm">确定</button>
+            </div>
+        </div>
+    </div>
+</div>
+<!--弹出设置-->
+<div class="modal fade" id="set-lv" data-backdrop="static">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">费率1 重选标准</h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <div class="form-group">
+                    <label >费率标准</label>
+                    <select class="form-control" id="standardSelect"></select>
+                    <small class="form-text text-danger">重新选择费率标准将重置当前费率文件的所有费率,正在使用当前费率文件的其他单位工程也将受影响。</small>
+                </div>
+                <div class="form-group">
+                    <label>正在使用 费率1 的单位工程</label>
+                    <ul class="list-unstyled" id="usageProjectList">
+
+                    </ul>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                <button type="button" class="btn btn-primary" id="changeConfirm" data-dismiss="modal">确定</button>
+            </div>
+        </div>
+    </div>
+</div>
+
+<!--弹出 另存新文件-->
+<div class="modal fade" id="copy-lv" 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">
+                <div class="form-group">
+                    <label>费率文件名称</label>
+                    <input class="form-control" id="copyFeeRateName" value="">
+                    <!--默认为复制费率文件名字+副本 2字,用户修改后需判断是否在同项目下存在同名-->
+                    <small class="form-text text-danger" id="nameError" style="display: none">已存在同名费率文件。</small>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                <button type="button" class="btn btn-primary" data-dismiss="modal" id="saveAsConfirm">确定</button>
+            </div>
+        </div>
+    </div>
+</div>
+
+<!--弹出 重命名窗口-->
+<div class="modal fade" id="rename-lv" 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">
+                <div class="form-group">
+                    <label>费率文件名称</label>
+                    <input class="form-control" id="newFeeRateID" value="" style="display: none">
+                    <input class="form-control" id="newFeeRateName" value="">
+                    <small class="form-text text-danger" id="renameError">本建设项目中已存在同名费率文件。</small>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+                <button type="button" class="btn btn-primary" data-dismiss="modal" id="renameConfirm" disabled>确定</button>
+            </div>
+        </div>
+    </div>
+</div>
+
 
 
 </body>
 </body>
+
 <script src="/web/glj/js/socket.io.slim.js"></script>
 <script src="/web/glj/js/socket.io.slim.js"></script>
 <script src="/public/web/socket/connection.js"></script>
 <script src="/public/web/socket/connection.js"></script>
+<script src="/public/web/uuid.js"></script>
 </html>
 </html>

+ 1 - 1
web/building_saas/js/global.js

@@ -13,7 +13,7 @@ function autoFlashHeight(){
     $(".side-content").height($(window).height()-headerHeight );
     $(".side-content").height($(window).height()-headerHeight );
     $(".poj-list").height($(window).height()-headerHeight-toolsbarHeight);
     $(".poj-list").height($(window).height()-headerHeight-toolsbarHeight);
     $(".form-list").height($(window).height()-headerHeight-50 );
     $(".form-list").height($(window).height()-headerHeight-50 );
-    $(".grid").height($(window).height()-headerHeight-50 );
+    $(".grid").height($(window).height()-headerHeight-toolsbarHeight-50);
 
 
 };
 };
 $(window).resize(autoFlashHeight);
 $(window).resize(autoFlashHeight);

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

@@ -491,7 +491,7 @@
     <script src="/lib/spreadjs/views/gc.spread.views.dataview.10.0.0.min.js" type="text/javascript"></script>
     <script src="/lib/spreadjs/views/gc.spread.views.dataview.10.0.0.min.js" type="text/javascript"></script>
     <!--<script src="/lib/spreadjs/views/common/gc.spread.common.10.0.0.min.js" type="text/javascript"></script>-->
     <!--<script src="/lib/spreadjs/views/common/gc.spread.common.10.0.0.min.js" type="text/javascript"></script>-->
     <script src="/lib/spreadjs/views/plugins/gc.spread.views.gridlayout.10.0.0.min.js" type="text/javascript"></script>
     <script src="/lib/spreadjs/views/plugins/gc.spread.views.gridlayout.10.0.0.min.js" type="text/javascript"></script>
-    <script src="/lib/spreadjs/views/locale/gc.spread.views.dataview.locale.zh-CN.10.0.0.min.js" type="text/javascript"></script>
+    <!--<script src="/lib/spreadjs/views/locale/gc.spread.views.dataview.locale.zh-CN.10.0.0.min.js" type="text/javascript"></script>-->
     <script>GC.Spread.Views.LicenseKey = "559432293813965#A0y3iTOzEDOzkjMyMDN9UTNiojIklkI1pjIEJCLi4TPB9mM5AFNTd4cvZ7SaJUVy3CWKtWYXx4VVhjMpp7dYNGdx2ia9sEVlZGOTh7NRlTUwkWR9wEV4gmbjBDZ4ElR8N7cGdHVvEWVBtCOwIGW0ZmeYVWVr3mI0IyUiwCMzETN8kzNzYTM0IicfJye&Qf35VfiEzRwEkI0IyQiwiIwEjL6ByUKBCZhVmcwNlI0IiTis7W0ICZyBlIsIyNyMzM5ADI5ADNwcTMwIjI0ICdyNkIsIibj9SbvNmL4N7bjRnch56ciojIz5GRiwiI8+Y9sWY9QmZ0Jyp96uL9v6L0wap9biY9qiq95q197Wr9g+89iojIh94Wiqi";</script>
     <script>GC.Spread.Views.LicenseKey = "559432293813965#A0y3iTOzEDOzkjMyMDN9UTNiojIklkI1pjIEJCLi4TPB9mM5AFNTd4cvZ7SaJUVy3CWKtWYXx4VVhjMpp7dYNGdx2ia9sEVlZGOTh7NRlTUwkWR9wEV4gmbjBDZ4ElR8N7cGdHVvEWVBtCOwIGW0ZmeYVWVr3mI0IyUiwCMzETN8kzNzYTM0IicfJye&Qf35VfiEzRwEkI0IyQiwiIwEjL6ByUKBCZhVmcwNlI0IiTis7W0ICZyBlIsIyNyMzM5ADI5ADNwcTMwIjI0ICdyNkIsIibj9SbvNmL4N7bjRnch56ciojIz5GRiwiI8+Y9sWY9QmZ0Jyp96uL9v6L0wap9biY9qiq95q197Wr9g+89iojIh94Wiqi";</script>
 
 
 
 

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

@@ -25,12 +25,12 @@ var FeeRate = {
             return rates;
             return rates;
         };*/
         };*/
         FeeRate.prototype.getActivateFeeRate = function () {
         FeeRate.prototype.getActivateFeeRate = function () {
-            var feeRate=null;
-            _.forEach(this.datas,function (item) {
-                if(item.status == 'activate'){
-                    feeRate= item;
-                }
-            })
+            var feeRate={
+                rates:[]
+            };
+            if(this.datas){
+                feeRate = this.datas;
+            }
             return feeRate;
             return feeRate;
         };
         };
         FeeRate.prototype.getActivateFeeRateID = function(){
         FeeRate.prototype.getActivateFeeRateID = function(){
@@ -106,8 +106,7 @@ var FeeRate = {
         };
         };
         FeeRate.prototype.updateFeeRateByEdit = function(params,feerate){
         FeeRate.prototype.updateFeeRateByEdit = function(params,feerate){
             var query={
             var query={
-                ID:feerate.ID,
-                projectID:feerate.projectID
+                ID:feerate.feeRateID
             };
             };
             var doc ={
             var doc ={
                 rateIndex:params.sourceIndex,
                 rateIndex:params.sourceIndex,
@@ -121,8 +120,7 @@ var FeeRate = {
 
 
         FeeRate.prototype.batchUpdateFeeRate = function (items,feerate) {
         FeeRate.prototype.batchUpdateFeeRate = function (items,feerate) {
             var query={
             var query={
-                ID:feerate.ID,
-                projectID:project.ID()
+                ID:feerate.feeRateID
             };
             };
             this.updateFeeRate(query,items);
             this.updateFeeRate(query,items);
         };
         };
@@ -143,26 +141,114 @@ var FeeRate = {
         };
         };
         FeeRate.prototype.synchronizeFeeRate = function () {
         FeeRate.prototype.synchronizeFeeRate = function () {
             var node = project.mainTree.selected;
             var node = project.mainTree.selected;
-            if (node.sourceType==='ration'&&rationCalcView.sheet) {
-                rationCalcView.showData(node);
+            if(node){
+                if (node.sourceType==='ration'&&rationCalcView.sheet) {
+                    rationCalcView.showData(node);
+                }
             }
             }
         };
         };
-
         FeeRate.prototype.ifRateChange=function (params) {
         FeeRate.prototype.ifRateChange=function (params) {
             if(params.dataItem.rate!=params.oldDataItem.rate){
             if(params.dataItem.rate!=params.oldDataItem.rate){
                 return true;
                 return true;
             }else {
             }else {
                 return false;
                 return false;
             }
             }
+        };
+        FeeRate.prototype.changeFeeRateStandard=function(newVal,callback){
+            var me =this;
+            var feeRate = this.getActivateFeeRate();
+            var data={
+                "newLibID": newVal,
+                "feeRateFileID":feeRate.ID,
+                "feeRateID":feeRate.feeRateID,
+                "user_id":userID
+            };
+            CommonAjax.post('/feeRates/changeFeeRateStandard', data, function (data) {
+                if (data) {
+                    me.datas.libID=data.libID;
+                    me.datas.libName=data.libName;
+                    me.datas.feeRateID=data.feeRateID;
+                    me.datas.rates=data.rates;
+                    socket.emit('feeRateChangeNotify', me.getActivateFeeRateID());
+                    callback();
+                }
+            });
+        };
+        FeeRate.prototype.checkFeeRateName = function(newVal,callback){
+            var me =this;
+            var feeRate = this.getActivateFeeRate();
+            var data = {
+                name:newVal,
+                rootProjectID:feeRate.rootProjectID
+            }
+            CommonAjax.post('/feeRates/checkFeeRateName', data, function (data) {
+                callback(data);
+            });
+        };
+        FeeRate.prototype.feeRateFileSaveAs = function (newName) {
+            this.datas.name = newName;
+            this.datas.ID = uuid.v1();
+            this.datas.feeRateID=uuid.v1();
+            this.datas.usageProjects=[];
+            this.datas.usageProjects.push({name:projectInfoObj.projectInfo.name,ID:projectInfoObj.projectInfo.ID});
+            var updateData = this.getUpdateData('ut_update',{projectID:projectInfoObj.projectInfo.ID},this.datas,'feeRateFileSaveAs');
+            project.pushNow('updateFeeRate',[this.sourceType],updateData);
 
 
+            socket.emit('feeRateChangeNotify', this.getActivateFeeRateID());
+            return  this.datas;
+        };
+        FeeRate.prototype.getChangeInfo = function (callback) {
+            var projectID = projectInfoObj.projectInfo.ID; //这里暂时用的是当前项目的ID,以后要改成顶层的建设项目ID
+            var data={
+                "projectID": projectID,
+                "user_id":userID
+            };
+            CommonAjax.post('/feeRates/getChangeInfo', data, function (data) {
+                callback(data);
+            });
         };
         };
 
 
-        FeeRate.prototype.getRate = function (fileID, rateID){
+        FeeRate.prototype.changeFeeRateFileFromCurrent = function (newFeeRateFileID,callback){
+            var me=this;
+            var projectID = projectInfoObj.projectInfo.ID;
+            var data={
+                "projectID": projectID,
+                "newFeeRateFileID":newFeeRateFileID
+            };
+            CommonAjax.post('/feeRates/changeFeeRateFileFromCurrent', data, function (data) {
+                if (data) {
+                    me.datas=data;
+                    socket.emit('feeRateChangeNotify', me.getActivateFeeRateID());
+                    callback();
+                }
+            });
+        };
 
 
+        FeeRate.prototype.changeFeeRateFileFromOthers=function (feeRateFileID,name,callback) {
+            var me = this;
+            var projectID = projectInfoObj.projectInfo.ID;
+            var data={
+                "projectID": projectID,
+                "feeRateFileID":feeRateFileID,
+                "name":name,
+                "rootProjectID":me.getActivateFeeRate().rootProjectID
+            };
+            CommonAjax.post('/feeRates/changeFeeRateFileFromOthers', data, function (data) {
+                if (data) {
+                    me.datas=data;
+                    socket.emit('feeRateChangeNotify', me.getActivateFeeRateID());
+                    callback();
+                }
+            });
+
+        };
+
+        FeeRate.prototype.getRate = function (fileID, rateID){
             return 1.25;
             return 1.25;
-        }
+        };
 
 
         var feeRate = new FeeRate(project);
         var feeRate = new FeeRate(project);
         return feeRate;
         return feeRate;
-    }
+    },
+
 };
 };

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

@@ -2,36 +2,7 @@
  * Created by chen on 2017/8/1.
  * Created by chen on 2017/8/1.
  */
  */
 
 
-/*var rate_data = [
-    {"ID":1,"ParentID":null,"name":"企业管理费","rate":null,"memo":""},
-{"ID":101,"ParentID":1,"name":"建筑工程","rate":16.36,"memo":""},
-{"ID":102,"ParentID":1,"name":"市政工程","rate":17.43,"memo":""},
-{"ID":103,"ParentID":1,"name":"机械土石方","rate":10.82,"memo":""},
-{"ID":104,"ParentID":1,"name":"仿古建筑工程","rate":12,"memo":""},
-{"ID":105,"ParentID":1,"name":"建筑修缮工程","rate":12.47,"memo":""},
-{"ID":106,"ParentID":1,"name":"炉窑砌筑工程","rate":10.8,"memo":""},
-{"ID":2,   "ParentID":null,"name":"夜间施工费","rate":null,"memo":""},
-{"ID":201,"ParentID":2,"name":"建筑工程","rate":0.45,"memo":""},
-{"ID":202,"ParentID":2,"name":"市政工程","rate":0.4,"memo":""},
-{"ID":203,"ParentID":2,"name":"机械土石方","rate":0.7,"memo":""},
-{"ID":204,"ParentID":2,"name":"仿古建筑工程","rate":0.2,"memo":""},
-{"ID":205,"ParentID":2,"name":"建筑修缮工程","rate":0.35,"memo":""},
-{"ID":206,"ParentID":2,"name":"炉窑砌筑工程","rate":0.4,"memo":""},
-{"ID":3,   "ParentID":null,"name":"规费","rate":null,"memo":""},
-{"ID":301,"ParentID":3,"name":"建筑工程","rate":16.03,"memo":""},
-{"ID":302,"ParentID":3,"name":"市政工程","rate":16.33,"memo":""},
-{"ID":303,"ParentID":3,"name":"机械土石方","rate":15.5,"memo":""},
-{"ID":304,"ParentID":3,"name":"仿古建筑工程","rate":12,"memo":""},
-{"ID":305,"ParentID":3,"name":"建筑修缮工程","rate":12.47,"memo":""},
-{"ID":306,"ParentID":3,"name":"炉窑砌筑工程","rate":10.8,"memo":""},
-{"ID":4,"ParentID":null,"name":"利润","rate":null,"memo":""},
-{"ID":401,"ParentID":4,"name":"建筑工程","rate":8.73,"memo":""},
-{"ID":402,"ParentID":4,"name":"市政工程","rate":9.2,"memo":""},
-{"ID":403,"ParentID":4,"name":"机械土石方","rate":6.5,"memo":""},
-{"ID":404,"ParentID":4,"name":"仿古建筑工程","rate":7,"memo":""},
-{"ID":405,"ParentID":4,"name":"建筑修缮工程","rate":3.72,"memo":""},
-{"ID":406,"ParentID":4,"name":"炉窑砌筑工程","rate":4.9,"memo":""},
-{"ID":5,"ParentID":null,"name":"税金","rate":11,"memo":""}];*/
+
 
 
 var feeRateObject={
 var feeRateObject={
     mainViews:null,
     mainViews:null,
@@ -40,6 +11,7 @@ var feeRateObject={
     activateFeeRate:null,
     activateFeeRate:null,
     needCascadeSet:false,
     needCascadeSet:false,
     selectionLoad:false,
     selectionLoad:false,
+    changeInfo:null,
     columns: [
     columns: [
         {
         {
             id: 'name',
             id: 'name',
@@ -242,6 +214,13 @@ var feeRateObject={
 
 
         projectObj.project.FeeRate.batchUpdateFeeRate(items,feeRateObject.activateFeeRate);
         projectObj.project.FeeRate.batchUpdateFeeRate(items,feeRateObject.activateFeeRate);
     },
     },
+    loadPageContent:function(){
+        var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
+        var usageProjects = feeRateFile.usageProjects;
+        $('#feeRateFileName').text(feeRateFile.name);
+        $('#feeRateLibName').text(feeRateFile.libName);
+        $('#projectCount').text(usageProjects.length);
+    },
     loadFeeRateSelection:function() {
     loadFeeRateSelection:function() {
         if(!this.selectionLoad){
         if(!this.selectionLoad){
             var selectedID=0;
             var selectedID=0;
@@ -254,22 +233,243 @@ var feeRateObject={
             })
             })
             $('#inlineFormCustomSelect').val(selectedID);
             $('#inlineFormCustomSelect').val(selectedID);
         }
         }
+    },
+    getFeeRateStandards:function (callback) {
+        CommonAjax.post('/feeRates/getFeeRateStandards', {"rootProjectID": this.activateFeeRate.rootProjectID}, function (data) {
+            if (data) {
+                callback(data);
+            }
+        });
+    },
+    changeFeeRateStandard:function(newVal){
+        var callback=function () {
+            feeRateObject.createSpreadView();
+            feeRateObject.loadPageContent();
+            projectObj.project.FeeRate.synchronizeFeeRate();
+        };
+        projectObj.project.FeeRate.changeFeeRateStandard(newVal,callback);
+    },
+    checkFeeRateName:function (newVal) {
+        if(!newVal||newVal==""){
+            $('#saveAsConfirm').attr("disabled","disabled");
+            $('#nameError').text("请输入文件名称。").show();
+            return;
+        }
+        var callback=function (data) {
+            if(data){
+                $('#saveAsConfirm').attr("disabled","disabled");
+                $('#nameError').text("已存在同名费率文件。").show();
+            }else {
+                $('#saveAsConfirm').removeAttr("disabled");
+                $('#nameError').hide();
+            }
+            console.log(data);
+        };
+        projectObj.project.FeeRate.checkFeeRateName(newVal,callback);
+    },
+    feeRateFileSaveAs:function (newName) {
+        this.activateFeeRate =  projectObj.project.FeeRate.feeRateFileSaveAs(newName);
+        feeRateObject.loadPageContent();
+    },
+    getChangeInfo:function () {
+        var me = this;
+        var callback=function (data) {
+            me.changeInfo=data;
+            me.loadChangePageContent(data);
+            console.log(data);
+        };
+        projectObj.project.FeeRate.getChangeInfo(callback);
+    },
+    loadChangePageContent:function (data) {
+        $('#currentProject').text(data.currentProject.name);
+        $('#currentOptions').empty();
+        _.forEach(data.currentProject.currentOptions,function (s) {
+            var option =  $("<option>").val(s.ID).text(s.name);
+            $('#currentOptions').append(option);
+        })
+        $('#currentOptions').val(projectObj.project.FeeRate.getActivateFeeRateID());
+        $('#otherProject').empty();
+        _.forEach(data.others,function (p) {
+            var option =  $("<option>").val(p.projectID).text(p.name);
+            $('#otherProject').append(option);
+        });
+        $('#otherFeeRateOption').empty();
+        if(data.others.length>0){
+            _.forEach(data.others[0].optionList,function (f) {
+                var option =  $("<option>").val(f.ID).text(f.name);
+                $('#otherFeeRateOption').append(option);
+            });
+        }
+    },
+    changeFeeRateFileFromCurrent:function(){
+        var newVal = $("#currentOptions").val();
+        if($("#currentOptions").val()==this.activateFeeRate.ID){
+            return;
+        }
+        var callback=function () {
+            feeRateObject.createSpreadView();
+            feeRateObject.loadPageContent();
+            projectObj.project.FeeRate.synchronizeFeeRate();
+        }
+        projectObj.project.FeeRate.changeFeeRateFileFromCurrent(newVal,callback);
+    },
+    changeFeeRateFileFromOthers:function () {
+        var feeRateFileID = $("#otherFeeRateOption").val();
+        var name =$("#otherFeeRateOption").find("option:selected").text();
+        var currentOption = _.find(this.changeInfo.currentProject.currentOptions,{name:name})
+        if(currentOption){
+            $("#rename-lv").modal({show:true});
+            $("#newFeeRateID").val(feeRateFileID);
+            $("#newFeeRateName").val(name);
+        }else {
+            this.changeFeeRateFileConfirm(feeRateFileID,name);
+        }
+    },
+    changeFeeRateFileConfirm:function(feeRateFileID,name){
+        var callback=function () {
+            feeRateObject.createSpreadView();
+            feeRateObject.loadPageContent();
+            projectObj.project.FeeRate.synchronizeFeeRate();
+        }
+        projectObj.project.FeeRate.changeFeeRateFileFromOthers(feeRateFileID,name,callback);
     }
     }
 }
 }
 
 
+function getPopoverContent() {
+    var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
+    var usageProjects = feeRateFile.usageProjects;
+    var popover_content = "";
+    _.forEach(usageProjects,function (p,index) {
+        if(index>0){
+            popover_content+='<br>';
+        }
+        popover_content+=p.name;
+    })
+    return popover_content;
+}
+
+$('#pop-lv').popover({
+        placement:"bottom",
+        html:true,
+        trigger:"hover | focus",
+        content:getPopoverContent
+    }
+);
+
+
 $('#tab_fee_rate').bind('click', function () {
 $('#tab_fee_rate').bind('click', function () {
-    $("#de").trigger("click");
     feeRateObject.reFreshRateViews();
     feeRateObject.reFreshRateViews();
-    $('#projectName').text(projectInfoObj.projectInfo.name);
-    feeRateObject.loadFeeRateSelection();
+    feeRateObject.loadPageContent();
+    //feeRateObject.loadFeeRateSelection();
 });
 });
 
 
-/*$('#fee_rates').bind('click', function () {
-    feeRateObject.datas[0].name = 'test';
-    feeRateObject.mainViews.refresh();
-    feeRateObject.mainViews.invalidate();
+$('#setNewFeeRate').bind('click', function () {
+    var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
+    var usageProjects = feeRateFile.usageProjects;
+    var listString ='';
+    _.forEach(usageProjects,function (u) {
+        listString+="<li>"+u.name+"</li>"
+    })
+    $("#usageProjectList").html(listString);
+
+    feeRateObject.getFeeRateStandards(function (data) {
+        $('#standardSelect').empty();
+        _.forEach(data,function (s) {
+            var option =  $("<option>").val(s.ID).text(s.libName);
+            $('#standardSelect').append(option);
+        })
+        $('#standardSelect').val(feeRateFile.libID);
+    });
+
+});
+$('#changeConfirm').bind('click', function (){
+    var newVal=$('#standardSelect').val();
+    var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
+    if(newVal&&newVal!=feeRateFile.libID){
+        feeRateObject.changeFeeRateStandard(newVal);
+    }
+});
+
+$('#saveAs').bind('click', function (){
+    var feeRateFile = projectObj.project.FeeRate.getActivateFeeRate();
+    $('#copyFeeRateName').val(feeRateFile.name+'副本');
+});
+
+$('#saveAsConfirm').bind('click',function () {
+    feeRateObject.feeRateFileSaveAs($('#copyFeeRateName').val());
+})
+
+
+$('#copyFeeRateName').change(function () {
+    feeRateObject.checkFeeRateName(this.value);
+});
+
+$('#newFeeRateName').change(function () {
+    var newName = $(this).val();
+    if(!newName||newName==""){
+        $('#renameConfirm').attr("disabled","disabled");
+        $('#renameError').text("请输入文件名称。").show();
+        return;
+    }
+    var callback=function (data) {
+        if(data){
+            $('#renameConfirm').attr("disabled","disabled");
+            $('#renameError').text("本建设项目中已存在同名费率文件。").show();
+        }else {
+            $('#renameConfirm').removeAttr("disabled");
+            $('#renameError').hide();
+        }
+    };
+    projectObj.project.FeeRate.checkFeeRateName(newName,callback);
+});
+
+
+function changeFRadioClick() {
+    var radioV= $("input[name='chaneg-lv-Radio']:checked").val();
+    if(radioV==='0'){
+        $("#fromProject").show();
+        $("#fromOther").hide();
+    }else {
+        $("#fromProject").hide();
+        $("#fromOther").show();
+    }
+}
+$('#changeFeeRateConfirm').bind('click',function (){
+    var radioV= $("input[name='chaneg-lv-Radio']:checked").val();
+    if(radioV==='0'){
+        feeRateObject.changeFeeRateFileFromCurrent();
+    }else {
+        feeRateObject.changeFeeRateFileFromOthers();
+    }
+
+})
+
+
+
+$('#changFeeRateFile').bind('click',function (){
+    $("input[name='chaneg-lv-Radio']")[0].checked=true;
+    $("#fromProject").show();
+    $("#fromOther").hide();
+    feeRateObject.getChangeInfo();
+})
+
+$('#otherProject').change(function(){
+    var newVal = $(this).val();
+    var projects = feeRateObject.changeInfo.others;
+    var selected = _.find(projects,{projectID:parseInt(newVal)});
+    $('#otherFeeRateOption').empty();
+    _.forEach(selected.optionList,function (f) {
+        var option =  $("<option>").val(f.ID).text(f.name);
+        $('#otherFeeRateOption').append(option);
+    });
+})
+
+$('#renameConfirm').bind('click',function (){
+    var feeRateFileID= $("#newFeeRateID").val();
+    var name = $("#newFeeRateName").val();
+    feeRateObject.changeFeeRateFileConfirm(feeRateFileID,name);
+})
 
 
-});*/
 
 
 $('#inlineFormCustomSelect').change(function(){
 $('#inlineFormCustomSelect').change(function(){
     var updateTask = [];
     var updateTask = [];
@@ -284,11 +484,11 @@ $('#inlineFormCustomSelect').change(function(){
         }else {
         }else {
             feeRate.status='disable';
             feeRate.status='disable';
         }
         }
-        updateTask.push({query:{ID:feeRate.ID,projectID:projectObj.project.ID()},doc:{status:feeRate.status}});
+        updateTask.push({query:{ID:feeRate.feeRateID},doc:{status:feeRate.status}});
     })
     })
     projectObj.project.FeeRate.updateStatusBySelected(updateTask);
     projectObj.project.FeeRate.updateStatusBySelected(updateTask);
     feeRateObject.createSpreadView();
     feeRateObject.createSpreadView();
     subRateObject.destorySpreadView();
     subRateObject.destorySpreadView();
     socket.emit('changeActivateFeeRate',{oldRoom:oldValue,newRoom:selectID});
     socket.emit('changeActivateFeeRate',{oldRoom:oldValue,newRoom:selectID});
+})
 
 
-})

+ 0 - 10
web/building_saas/main/js/views/sub_fee_rate_views.js

@@ -1,16 +1,6 @@
 /**
 /**
  * Created by chen on 2017/8/1.
  * Created by chen on 2017/8/1.
  */
  */
-var optionMap={
-"1":[{}]
-
-};
-
-
-var subRateData=[
-    {"ID":10101,"name":"工程分类","typeName":"一类工程",optionList:[{name:'一类工程',value:"1",selected:true},{name:'二类工程',value:"2",selected:false},{name:'三类工程',value:"3",selected:false}]},
-    {"ID":10102,"name":"地区","typeName":"在市区",optionList:[{name:'在市区',value:16.36,selected:false},{name:'县城镇',value:16.21,selected:true},{name:'不在市区、县城镇',value:15.94,selected:false}]}
-];
 
 
 var subRateObject={
 var subRateObject={
     views:null,
     views:null,