Bladeren bron

Merge branch '1.0.0_online' of http://smartcost.f3322.net:3000/SmartCost/ConstructionOperation into 1.0.0_online

zhongzewei 7 jaren geleden
bovenliggende
commit
c045f4d88e
29 gewijzigde bestanden met toevoegingen van 982 en 55 verwijderingen
  1. 7 3
      modules/common/std/schemas/std_calc_program.js
  2. 8 3
      modules/common/std/schemas/std_fee_rate_libs.js
  3. 100 0
      modules/calc_program_lib/controllers/calc_program_controller.js
  4. 54 0
      modules/calc_program_lib/facade/calc_program_facade.js
  5. 19 0
      modules/calc_program_lib/routes/calc_program_routes.js
  6. 2 2
      modules/common/std/std_calc_program_model.js
  7. 2 2
      modules/common/std/std_fee_rate_libs_model.js
  8. 100 0
      modules/fee_rate_lib/controllers/fee_rate_controller.js
  9. 50 0
      modules/fee_rate_lib/facade/fee_rate_facade.js
  10. 21 0
      modules/fee_rate_lib/routes/fee_rate_routes.js
  11. 0 7
      modules/main_col_lib/controllers/main_col_controller.js
  12. 0 8
      modules/project_feature_lib/routes/project_feature_router.js
  13. 4 2
      public/counter/counter.js
  14. 0 22
      public/web/common_ajax.js
  15. 1 1
      web/maintain/bills_lib/scripts/tools.js
  16. 35 0
      web/maintain/calc_program_lib/html/edit.html
  17. 124 0
      web/maintain/calc_program_lib/html/main.html
  18. 90 0
      web/maintain/calc_program_lib/js/calc_program.js
  19. 37 0
      web/maintain/calc_program_lib/js/calc_program_edit.js
  20. 1 1
      web/maintain/common/html/edit_layout.html
  21. 1 0
      web/maintain/common/html/layout.html
  22. 45 0
      web/maintain/common/js/util.js
  23. 35 0
      web/maintain/fee_rate_lib/html/edit.html
  24. 113 0
      web/maintain/fee_rate_lib/html/main.html
  25. 81 0
      web/maintain/fee_rate_lib/js/fee_rate.js
  26. 36 0
      web/maintain/fee_rate_lib/js/fee_rate_edit.js
  27. 0 1
      web/maintain/main_col_lib/js/main_col_edit.js
  28. 2 3
      web/maintain/project_feature_lib/js/project_feature_edit.js
  29. 14 0
      web/users/views/tool/index.html

+ 7 - 3
modules/common/std/schemas/std_calc_program.js

@@ -9,6 +9,7 @@ import mongoose from "mongoose";
 
 let Schema = mongoose.Schema;
 let collectionName = 'std_calc_programs';
+const oprSchema = require('../all_schemas/opr_schema');
 let modelSchema = {
     // 自增id
     ID: Number,
@@ -23,9 +24,12 @@ let modelSchema = {
         type: String,
         index: true
     },
+    compilationName:String,
     // 模板数据
-    templates: Schema.Types.Mixed
+    templates: {type:[Schema.Types.Mixed],default:[]},
+    creator: String,
+    createDate: Number,
+    recentOpr: [oprSchema]
 };
 
-let model = mongoose.model(collectionName, new Schema(modelSchema, {versionKey: false, collection: collectionName}));
-export {model as default, collectionName as collectionName};
+mongoose.model(collectionName, new Schema(modelSchema, {versionKey: false, collection: collectionName}));

+ 8 - 3
modules/common/std/schemas/std_fee_rate_libs.js

@@ -9,6 +9,7 @@ import mongoose from "mongoose";
 
 let Schema = mongoose.Schema;
 let collectionName = 'std_fee_rate_libs';
+const oprSchema = require('../all_schemas/opr_schema');
 
 let optionSchema = new Schema({
     name:String,
@@ -53,9 +54,13 @@ let modelSchema = {
         type: String,
         index: true
     },
+    compilationName:String,
     // 费率数据
-    rates: [ratesSchema]
+    rates: {type:[ratesSchema],default:[]},
+    creator: String,
+    createDate: Number,
+    recentOpr: [oprSchema]
 };
 
-let model = mongoose.model(collectionName, new Schema(modelSchema, {versionKey: false, collection: collectionName}));
-export {model as default, collectionName as collectionName};
+ mongoose.model(collectionName, new Schema(modelSchema, {versionKey: false, collection: collectionName}));
+

+ 100 - 0
modules/calc_program_lib/controllers/calc_program_controller.js

@@ -0,0 +1,100 @@
+/**
+ * Created by zhang on 2018/9/11.
+ */
+import BaseController from "../../common/base/base_controller";
+let config = require("../../../config/config.js");
+import calcProgramFacade from "../facade/calc_program_facade";
+
+class CalcProgramController extends BaseController {
+    async main(request, response) {
+        let calcProgramLibs = await calcProgramFacade.findByCondition({}, {templates: 0}, false);
+        let randerData = {
+            title: '计算程序模板库',
+            userAccount: request.session.managerData.username,
+            userID: request.session.managerData.userID,
+            calcProgramLibs: calcProgramLibs,
+            layout: 'maintain/common/html/layout'
+        };
+        response.render("maintain/calc_program_lib/html/main", randerData);
+    }
+    async addLib(request, response){
+        try {
+            await calcProgramFacade.addLib(request.body);
+        }catch (error) {
+            console.log(error);
+        }
+        response.redirect(request.headers.referer);
+    }
+    async findLib(request, response){
+        let result={
+            error:0
+        };
+        try {
+            let data = request.body.data;
+            data = JSON.parse(data);
+            let conditions={ID:data.ID};
+            let resultData = await calcProgramFacade.findByCondition(conditions);
+            result.data=resultData;
+        }catch (err){
+            console.log(err);
+            result.error=1;
+            result.message = err.message;
+        }
+        response.json(result);
+    }
+    async saveLib(request, response){
+        let result={
+            error:0
+        };
+        try {
+            let data = request.body.data;
+            data = JSON.parse(data);
+            let resultData= await calcProgramFacade.saveLib(data);
+            result.data=resultData;
+        }catch (err){
+            console.log(err);
+            result.error=1;
+            result.message = err.message;
+        }
+        response.json(result);
+    }
+    async deleteLibByID(request,response){
+        let result={
+            error:0
+        };
+        try {
+            let data = request.body.data;
+            data = JSON.parse(data);
+            let resultData= await calcProgramFacade.deleteLibByID(data.ID);
+            result.data=resultData;
+        }catch (err){
+            console.log(err);
+            result.error=1;
+            result.message = err.message;
+        }
+        response.json(result);
+    }
+    async edit(request,response){
+        //先取出替换库信息:
+        let libID = request.params.libID;
+        let programLib = await calcProgramFacade.findByCondition({'ID':libID});
+        if(programLib){
+            let randerData = {
+                title:'计算程序模板库',
+                mainURL:'/calcProgram/main',
+                libName:programLib.libName,
+                userAccount: request.session.managerData.username,
+                userID: request.session.managerData.userID,
+                templateList:JSON.stringify(programLib.templates),
+                libID:libID,
+                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                layout: 'maintain/common/html/edit_layout'
+            };
+            response.render("maintain/calc_program_lib/html/edit", randerData);
+        }else {
+            response.redirect(request.headers.referer);
+        }
+    }
+}
+
+export default CalcProgramController;

+ 54 - 0
modules/calc_program_lib/facade/calc_program_facade.js

@@ -0,0 +1,54 @@
+/**
+ * Created by zhang on 2018/9/11.
+ */
+
+import mongoose from "mongoose";
+
+const uuidV1 = require('uuid/v1');
+let moment = require("moment");
+let calcProgramModel = mongoose.model("std_calc_programs");
+let compilationModel = mongoose.model("compilation");
+const _ = require('lodash');
+let counter = require('../../../public/counter/counter');
+
+let calcProgramLib = {
+    findByCondition:async function(conditions,options,single=true){
+        if(single == true){
+            return await calcProgramModel.findOne(conditions,options);
+        }else {
+            return await  calcProgramModel.find(conditions,options);
+        }
+    },
+    addLib : async function (data){
+        let now = new Date().getTime();
+        let dateStr = moment(now).format('YYYY-MM-DD HH:mm:ss');
+        //取编办信息
+        let compilation = await compilationModel.findOne({_id:data.compilationId});
+        if(compilation){
+            let IDcounter = await counter.counterDAO.getIDAfterCount(counter.moduleName.stdCalcProgram,1);
+            let newLib = {
+                creator: data.userAccount,
+                createDate: now,
+                recentOpr: [{operator: data.userAccount, operateDate: dateStr}],
+                libName: data.name,
+                displayName:data.displayName,
+                compilationId: data.compilationId,
+                compilationName: compilation.name,
+                templates:[]
+            };
+            newLib.ID = IDcounter.sequence_value;
+            return await calcProgramModel.create(newLib);
+        }else {
+            throw  new Error("没有找到该编办!");
+        }
+
+    },
+    saveLib:async function(param) {
+        return await calcProgramModel.findOneAndUpdate(param.query,param.data,{new:true});
+    },
+    deleteLibByID:async function(ID){
+        return await calcProgramModel.deleteOne({ID:ID});
+    },
+};
+
+export default calcProgramLib

+ 19 - 0
modules/calc_program_lib/routes/calc_program_routes.js

@@ -0,0 +1,19 @@
+/**
+ * Created by zhang on 2018/9/11.
+ */
+
+let express = require("express");
+let calcProgramRouter =express.Router();
+import CalcProgramController from "../controllers/calc_program_controller";
+let calcProgramController = new CalcProgramController();
+
+module.exports =function (app) {
+
+    calcProgramRouter.get("/main", calcProgramController.auth, calcProgramController.init, calcProgramController.main);
+    calcProgramRouter.post("/addLib", calcProgramController.auth, calcProgramController.init, calcProgramController.addLib);
+    calcProgramRouter.post("/findLib", calcProgramController.auth, calcProgramController.init, calcProgramController.findLib);
+    calcProgramRouter.post("/saveLib", calcProgramController.auth, calcProgramController.init, calcProgramController.saveLib);
+    calcProgramRouter.post("/deleteLibByID", calcProgramController.auth, calcProgramController.init, calcProgramController.deleteLibByID);
+    calcProgramRouter.get("/edit/:libID", calcProgramController.auth, calcProgramController.init, calcProgramController.edit);
+    app.use("/calcProgram", calcProgramRouter);
+};

+ 2 - 2
modules/common/std/std_calc_program_model.js

@@ -6,7 +6,7 @@
  * @version
  */
 import BaseModel from "../base/base_model";
-import STDCalcProgramSchema from "./schemas/std_calc_program";
+import mongoose from "mongoose";
 
 class STDCalcProgramModel extends BaseModel {
 
@@ -17,7 +17,7 @@ class STDCalcProgramModel extends BaseModel {
      */
     constructor() {
         let parent = super();
-        parent.model = STDCalcProgramSchema;
+        parent.model = mongoose.model("std_calc_programs");
         parent.init();
     }
 

+ 2 - 2
modules/common/std/std_fee_rate_libs_model.js

@@ -6,7 +6,7 @@
  * @version
  */
 import BaseModel from "../base/base_model";
-import STDFeeRateLibsSchema from "./schemas/std_fee_rate_libs";
+import mongoose from "mongoose";
 
 class STDFeeRateLibsModel extends BaseModel {
 
@@ -17,7 +17,7 @@ class STDFeeRateLibsModel extends BaseModel {
      */
     constructor() {
         let parent = super();
-        parent.model = STDFeeRateLibsSchema;
+        parent.model = mongoose.model("std_fee_rate_libs");
         parent.init();
     }
 

+ 100 - 0
modules/fee_rate_lib/controllers/fee_rate_controller.js

@@ -0,0 +1,100 @@
+/**
+ * Created by zhang on 2018/9/10.
+ */
+import BaseController from "../../common/base/base_controller";
+let config = require("../../../config/config.js");
+import feeRateFacade from "../facade/fee_rate_facade";
+
+class FeeRateController extends BaseController{
+    async main(request, response) {
+        let feeRateLibs = await feeRateFacade.findByCondition({},{rates:0},false);
+        let randerData = {
+            title:'费率标准库',
+            userAccount: request.session.managerData.username,
+            userID: request.session.managerData.userID,
+            feeRateLibs:feeRateLibs,
+            layout: 'maintain/common/html/layout'
+        };
+        response.render("maintain/fee_rate_lib/html/main", randerData);
+    }
+    async addLib(request, response){
+        try {
+            await feeRateFacade.addLib(request.body);
+        }catch (error) {
+            console.log(error);
+        }
+        response.redirect(request.headers.referer);
+    }
+    async findLib(request, response){
+        let result={
+            error:0
+        };
+        try {
+            let data = request.body.data;
+            data = JSON.parse(data);
+            let conditions={ID:data.ID};
+            let resultData = await feeRateFacade.findByCondition(conditions);
+            result.data=resultData;
+        }catch (err){
+            console.log(err);
+            result.error=1;
+            result.message = err.message;
+        }
+        response.json(result);
+    }
+    async saveLib(request, response){
+        let result={
+            error:0
+        };
+        try {
+            let data = request.body.data;
+            data = JSON.parse(data);
+            let resultData= await feeRateFacade.saveLib(data);
+            result.data=resultData;
+        }catch (err){
+            console.log(err);
+            result.error=1;
+            result.message = err.message;
+        }
+        response.json(result);
+    }
+    async deleteLibByID(request,response){
+        let result={
+            error:0
+        };
+        try {
+            let data = request.body.data;
+            data = JSON.parse(data);
+            let resultData= await feeRateFacade.deleteLibByID(data.ID);
+            result.data=resultData;
+        }catch (err){
+            console.log(err);
+            result.error=1;
+            result.message = err.message;
+        }
+        response.json(result);
+    }
+    async edit(request,response){
+        //先取出替换库信息:
+        let libID = request.params.libID;
+        let feeRateLib = await feeRateFacade.findByCondition({'ID':libID});
+        if(feeRateLib){
+            let randerData = {
+                title:'费率标准库',
+                mainURL:'/feeRate/main',
+                libName:feeRateLib.libName,
+                userAccount: request.session.managerData.username,
+                userID: request.session.managerData.userID,
+                rateList:JSON.stringify(feeRateLib.rates),
+                libID:libID,
+                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                layout: 'maintain/common/html/edit_layout'
+            };
+            response.render("maintain/fee_rate_lib/html/edit", randerData);
+        }else {
+            response.redirect(request.headers.referer);
+        }
+    }
+}
+
+export default FeeRateController;

+ 50 - 0
modules/fee_rate_lib/facade/fee_rate_facade.js

@@ -0,0 +1,50 @@
+/**
+ * Created by zhang on 2018/9/10.
+ */
+
+import mongoose from "mongoose";
+
+const uuidV1 = require('uuid/v1');
+let moment = require("moment");
+let feeRateModel = mongoose.model('std_fee_rate_libs');
+let compilationModel = mongoose.model("compilation");
+const _ = require('lodash');
+
+let feeRateLib = {
+    findByCondition:async function(conditions,options,single=true){
+        if(single == true){
+            return await feeRateModel.findOne(conditions,options);
+        }else {
+            return await  feeRateModel.find(conditions,options);
+        }
+    },
+    addLib : async function (data){
+        let now = new Date().getTime();
+        let dateStr = moment(now).format('YYYY-MM-DD HH:mm:ss');
+        //取编办信息
+        let compilation = await compilationModel.findOne({_id:data.compilationId});
+        if(compilation){
+            let newLib = {
+                creator: data.userAccount,
+                createDate: now,
+                recentOpr: [{operator: data.userAccount, operateDate: dateStr}],
+                libName: data.name,
+                compilationId: data.compilationId,
+                compilationName: compilation.name,
+            };
+            newLib.ID = uuidV1();
+            return await feeRateModel.create(newLib);
+        }else {
+            throw  new Error("没有找到该编办!");
+        }
+
+    },
+    saveLib:async function(param) {
+        return await feeRateModel.findOneAndUpdate(param.query,param.data,{new:true});
+    },
+    deleteLibByID:async function(ID){
+        return await feeRateModel.deleteOne({ID:ID});
+    },
+};
+
+export default feeRateLib

+ 21 - 0
modules/fee_rate_lib/routes/fee_rate_routes.js

@@ -0,0 +1,21 @@
+/**
+ * Created by zhang on 2018/9/10.
+ */
+
+let express = require("express");
+let feeRateRouter =express.Router();
+import FeeRateController from "../controllers/fee_rate_controller";
+let feeRateController = new FeeRateController();
+
+module.exports =function (app) {
+
+    feeRateRouter.get("/main", feeRateController.auth, feeRateController.init, feeRateController.main);
+    feeRateRouter.post("/addLib", feeRateController.auth, feeRateController.init, feeRateController.addLib);
+    feeRateRouter.post("/findLib", feeRateController.auth, feeRateController.init, feeRateController.findLib);
+    feeRateRouter.post("/saveLib", feeRateController.auth, feeRateController.init, feeRateController.saveLib);
+    feeRateRouter.post("/deleteLibByID", feeRateController.auth, feeRateController.init, feeRateController.deleteLibByID);
+    feeRateRouter.get("/edit/:libID", feeRateController.auth, feeRateController.init, feeRateController.edit);
+
+
+    app.use("/feeRate", feeRateRouter);
+};

+ 0 - 7
modules/main_col_lib/controllers/main_col_controller.js

@@ -12,13 +12,6 @@ let config = require("../../../config/config.js");
 
 class MainColController extends BaseController {
 
-    /**
-     * 修改计价规则页面
-     *
-     * @param {object} request
-     * @param {object} response
-     * @return {void}
-     */
     async main(request, response) {
         let mainColLibs = await mainColFacade.getAllLibs();
         let randerData = {

+ 0 - 8
modules/project_feature_lib/routes/project_feature_router.js

@@ -15,14 +15,6 @@ module.exports =function (app){
     featureRouter.post("/saveLib", featureController.auth, featureController.init, featureController.saveLib);
     featureRouter.post("/deleteLibByID", featureController.auth, featureController.init, featureController.deleteLibByID);
     featureRouter.get("/edit/:libID", featureController.auth, featureController.init, featureController.edit);
-/*    repRouter.get("/edit/:libID", replaceController.auth, replaceController.init, replaceController.edit);
-    repRouter.post("/findLib", replaceController.auth, replaceController.init, replaceController.findLib);
-    repRouter.post("/addLib", replaceController.auth, replaceController.init, replaceController.addLib);
-    repRouter.post("/saveLib", replaceController.auth, replaceController.init, replaceController.saveLib);
-    repRouter.post("/deleteLibByID", replaceController.auth, replaceController.init, replaceController.deleteLibByID);
-    repRouter.post("/saveBills", replaceController.auth, replaceController.init, replaceController.saveBills);
-    repRouter.post("/saveMaterial", replaceController.auth, replaceController.init, replaceController.saveMaterial);
-    repRouter.post("/findMaterial", replaceController.auth, replaceController.init, replaceController.findMaterial);*/
     app.use("/projectFeature", featureRouter);
 };
 

+ 4 - 2
public/counter/counter.js

@@ -23,7 +23,8 @@ const COUNTER_MODULE_NAME = {
     billsLib_jobs: 'billsLib_jobs',
     billsLib_items: 'billsLib_items',
     coeList: 'coeList',
-    installation: 'installation'
+    installation: 'installation',
+    stdCalcProgram:'std_calc_programs'
 }
 /*const PROJECT_COUNTER = 'projects', USER_COUNTER = 'users', BILL_COUNTER = 'bills', RATION_COUNTER = 'rations',
     REPORT_COUNTER = 'rptTemplates', FEE_COUNTER = 'fees'*/
@@ -43,7 +44,8 @@ counterDAO.prototype.getIDAfterCount = async function(moduleName, stepCount, cal
         sc = Math.round(stepCount + 0.5);
     }
     if (callback === null) {
-        return await counterModel.findOneAndUpdate({_id: moduleName}, { $inc: { sequence_value: sc } }, {'new':true});
+        let result = await counterModel.findOneAndUpdate({_id: moduleName}, { $inc: { sequence_value: sc } }, {'new':true});
+        return result
     } else {
         counterModel.findOneAndUpdate({_id: moduleName}, { $inc: { sequence_value: sc } }, {'new':true}, callback);
     }

+ 0 - 22
public/web/common_ajax.js

@@ -154,25 +154,3 @@ function ajaxErrorInfo(jqXHR, textStatus, errorThrown) {
     }
 }
 
-//对JSON对象排序,按属性key的顺序显示
-function sortJson(obj) {
-    if(obj instanceof Array){
-        for(let o in obj){
-            obj[o] = sortJson(obj[o]);
-        }
-        return obj;
-    }else if(typeof obj == 'object'){
-        let arr=[];
-        let newOjb ={};
-        for(let key in obj){
-            arr.push(key);
-        }
-        arr.sort();
-        for(let a of arr){
-            newOjb[a]= sortJson(obj[a]);
-        }
-        return newOjb;
-    }else {
-        return obj;
-    }
-}

+ 1 - 1
web/maintain/bills_lib/scripts/tools.js

@@ -27,4 +27,4 @@ function getQueryString(name)
     var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
     var r = window.location.search.substr(1).match(reg);
     if(r!=null)return  unescape(r[2]); return null;
-}
+}

+ 35 - 0
web/maintain/calc_program_lib/html/edit.html

@@ -0,0 +1,35 @@
+<nav class="navbar navbar-toggleable-lg justify-content-between navbar-light p-0 second_header">
+    <ul class="nav nav-tabs" role="tablist">
+        <li class="nav-item">
+            <a class="nav-link active px-3" href="javascript: void(0);">计算程序模板</a>
+        </li>
+    </ul>
+</nav>
+
+<div class="main">
+    <div class="content" >
+        <div class="container-fluid" >
+        <div class=" col-lg-12 p-0">
+            <nav class="navbar sticky-top navbar-toggleable-md navbar-light bg-faded tools-bar">
+                <div class="collapse navbar-collapse" id="navbarNav">
+                    <div class="tools-btn btn-group align-top">
+                        <a href="javascript:void(0)" class="btn btn-sm" id="format"><i class="fa fa-list-alt" aria-hidden="true"></i> 校验格式</a>
+                        <a href="javascript:void(0)" class="btn btn-sm" id="save"><i class="fa fa-floppy-o" aria-hidden="true"></i> 保存</a>
+                    </div>
+                </div>
+            </nav>
+            <textarea class="form-control" id="templateList" rows="38"></textarea>
+        </div>
+        </div>
+        <input type="hidden" id="libID" value="<%= libID %>">
+        <input type="hidden" id="originalTemplates" value="<%= templateList %>">
+    </div>
+</div>
+
+
+
+<script type="text/javascript">
+
+</script>
+<script type="text/javascript" src="/lib/json/json2.js"></script>
+<script type="text/javascript" src="/web/maintain/calc_program_lib/js/calc_program_edit.js"></script>

+ 124 - 0
web/maintain/calc_program_lib/html/main.html

@@ -0,0 +1,124 @@
+<div class="main">
+    <div class="content">
+        <div class="container-fluid">
+            <div class="row">
+                <div class="col-md-8">
+                    <div class="warp-p2 mt-3">
+                        <table class="table table-hover table-bordered">
+                            <thead><tr><th>库名称</th><th>自定义显示名称</th><th >费用定额</th><th width="160">添加时间</th><th width="120">操作</th></tr></thead>
+                            <tbody id="showArea">
+                            <% for(let lib of calcProgramLibs){ %>
+                            <tr class="libTr">
+                                <td id="<%= lib.ID%>"><a href="/calcProgram/edit/<%= lib.ID%>"><%= lib.libName%></a></td>
+                                <td><%= lib.displayName%></td>
+                                <td><%= lib.compilationName%></td>
+                                <td><%= moment(lib.createDate).format('YYYY-MM-DD')%></td>
+                                <td>
+                                    <a style="color: #0275d8" onclick='getCalcProgramLib("<%= lib.ID%>")' title="编辑"><i class="fa fa-pencil-square-o"></i></a>
+                                    <a style="color: #0275d8" onclick='showDeleteModal("<%= lib.ID%>")' class="text-danger" title="删除"><i class="fa fa-remove"></i></a>
+                                </td>
+                            </tr>
+                            <% } %>
+                            </tbody>
+                        </table>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<!--弹出添加-->
+<div class="modal fade" id="add" data-backdrop="static" style="display: none;" aria-hidden="true">
+    <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">×</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <form id="addLibForm" method="post" action="/calcProgram/addLib" enctype="application/x-www-form-urlencoded21">
+                    <div class="form-group">
+                        <label>库名称</label>
+                        <input id="name" name="name" class="form-control" placeholder="请输入计算程序模板库名称" type="text">
+                        <small class="form-text text-danger" id="nameError" style="display: none">请输入费率标准库名称。</small>
+                    </div>
+                    <div class="form-group">
+                        <label>自定义显示名称</label>
+                        <input id="displayName" name="displayName" class="form-control" placeholder="请输入自定义显示名称" type="text">
+                        <small class="form-text text-danger" id="displayNameError" style="display: none">请输入自定义显示名称。</small>
+                    </div>
+                    <div class="form-group">
+                        <label>编办名称</label>
+                        <select id="compilationSels" name="compilationId" class="form-control"></select>
+                    </div>
+                    <input type="hidden" name = "userAccount" value="<%= userAccount%>">
+                </form>
+            </div>
+            <div class="modal-footer">
+                <button id="addLibs"  class="btn btn-primary">新建</button>
+                <button type="button" id="cancelBtn" class="btn btn-secondary" data-dismiss="modal">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
+
+<!--弹出编辑-->
+<div class="modal fade" id="edit" data-backdrop="static" style="display: none;" aria-hidden="true">
+    <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">×</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <form>
+                    <div class="form-group">
+                        <label>库名称</label>
+                        <input id="renameText" class="form-control" placeholder="输入名称" type="text" value="">
+                        <small class="form-text text-danger" id="renameError" style="display: none">请输入名称。</small>
+                        <input id="libID" type="hidden">
+                    </div>
+                    <div class="form-group">
+                        <label>自定义显示名称</label>
+                        <input id="renameDisplayText" class="form-control" placeholder="输入自定义名称" type="text" value="">
+                        <small class="form-text text-danger" id="renameDisplayError" style="display: none">请输入自定义名称。</small>
+                    </div>
+                </form>
+            </div>
+            <div class="modal-footer">
+                <a id="rename" href="javascript: void(0);" class="btn btn-primary" >确定</a>
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
+
+<!--弹出删除-->
+<div class="modal fade" id="del" data-backdrop="static" style="display: none;" aria-hidden="true">
+    <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">×</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <h5 class="text-danger">删除后无法恢复,确认是否删除?</h5>
+                <input type="hidden" id="libID_del">
+                <input type="hidden" id="delCount">
+            </div>
+            <div class="modal-footer">
+                <a id="delete" href="javascript:void(0);" class="btn btn-danger" >确认</a>
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script type="text/javascript" src="/web/maintain/calc_program_lib/js/calc_program.js"></script>

+ 90 - 0
web/maintain/calc_program_lib/js/calc_program.js

@@ -0,0 +1,90 @@
+/**
+ * Created by zhang on 2018/9/11.
+ */
+
+$(document).ready(function() {
+    $('#add').on('show.bs.modal',async function () {
+        await initCompilationSelect();
+    });
+
+    // 保存按钮
+    $("#addLibs").click(async function() {
+        let name = $('#name').val();
+        let displayName = $('#displayName').val();
+        if(name==''){
+            $("#nameError").show();
+            return;
+        }if(displayName==''){
+            $("#displayNameError").show();
+            return;
+        }else {
+            $("#addLibs").attr("disabled",true);//防止重复提交
+            $("#addLibForm").submit();
+        }
+    });
+
+    $("#rename").click(async function() {
+        let libID = $("#libID").val();
+        let name = $('#renameText').val();
+        let displayName = $('#renameDisplayText').val();
+        if(libID!=''){
+            if(name ==''){
+                $("#renameError").show();
+                return;
+            }else {
+                try {
+                    let calcProgram = await ajaxPost("/calcProgram/saveLib",{query:{ID:parseInt(libID)},data:{libName:name,displayName:displayName}});
+                    $("#"+libID).children("a").text(calcProgram.libName);
+                    $("#"+libID).next("td").text(calcProgram.displayName);
+                    $("#edit").modal('hide');
+                }catch(err) {
+                    console.log(err);
+                }
+            }
+        }
+    });
+
+    $("#delete").click(async function() {
+        let libID = $("#libID_del").val();
+        let delCount = parseInt($("#delCount").val());
+        delCount = delCount+1;
+        $("#delCount").val(delCount);
+        if(delCount == 3){
+            if(libID!=""){
+                try {
+                    let result = await ajaxPost("/calcProgram/deleteLibByID",{ID:libID});
+                    if(result.ok){
+                        $("#"+libID).parent(".libTr").remove();
+                    }
+                    $("#del").modal('hide');
+                }catch (err){
+                    console.log(err);
+                }
+            }
+        }
+    });
+
+});
+
+
+async function getCalcProgramLib (ID) {
+    try {
+        let lib = await ajaxPost("/calcProgram/findLib",{ID:ID});
+        if(lib){
+            $("#renameText").val(lib.libName);
+            $("#renameDisplayText").val(lib.displayName);
+            $("#libID").val(ID);
+            $("#edit").modal({show:true});
+        }else {
+            alert("没有找到材料库");
+        }
+    }catch (err){
+        console.log(err);
+    }
+}
+
+function showDeleteModal(ID){
+    $("#libID_del").val(ID);
+    $("#delCount").val(0);
+    $("#del").modal({show:true});
+}

+ 37 - 0
web/maintain/calc_program_lib/js/calc_program_edit.js

@@ -0,0 +1,37 @@
+/**
+ * Created by zhang on 2018/9/11.
+ */
+
+
+$(document).ready(function () {
+    try {
+        let tem = sortJson(JSON.parse($("#originalTemplates").val()));
+        $("#templateList").val(JSON.stringify(tem,null,4));
+    }catch (err){
+        console.log(err);
+    }
+
+    $("#format").click( function() {
+        try {
+            let jsonText =  $("#templateList").val();
+            $("#templateList").val(JSON.stringify(JSON.parse(jsonText),null,4));
+        }catch (err){
+            console.log(err);
+            alert("输入的JSON格式有误,请重新输入!");
+        }
+    });
+    $("#save").click(async function() {
+        try {
+            let libID = $("#libID").val();
+            let jsonText =  $("#templateList").val();
+            if(jsonText.indexOf("'")!=-1){
+                alert("输入的格式不能包含 ' 位于:"+jsonText.substr(jsonText.indexOf("'")-15,18));
+                return;
+            }
+            let template = await ajaxPost("/calcProgram/saveLib",{query:{ID: parseInt(libID)},data:{templates:JSON.parse(jsonText)}});
+        }catch (err){
+            console.log(err);
+            alert("保存失败,请查看输入数据");
+        }
+    });
+});

+ 1 - 1
web/maintain/common/html/edit_layout.html

@@ -27,7 +27,7 @@
 <script src="/web/maintain/bills_lib/scripts/bills_lib_ajax.js"></script>
 <script src="/public/web/common_ajax.js"></script>
 <script src="/public/web/commonAlert.js"></script>
-
+<script src="/web/maintain/common/js/util.js"></script>
 
 <body>
 <div class="header">

+ 1 - 0
web/maintain/common/html/layout.html

@@ -35,6 +35,7 @@
 <script src="/public/web/common_ajax.js"></script>
 <script src="/web/maintain/bills_lib/scripts/global.js"></script>
 <script src="/web/maintain/bills_lib/scripts/tools.js"></script>
+<script src="/web/maintain/common/js/util.js"></script>
 <%- body %>
 </body>
 

+ 45 - 0
web/maintain/common/js/util.js

@@ -0,0 +1,45 @@
+/**
+ * Created by zhang on 2018/9/11.
+ */
+
+
+async function initCompilationSelect() {
+    try {
+        $('#compilationSels').empty();
+        let result = await ajaxPost("/stdBillsEditor/getCompilationList");
+        for(let r of result){
+            let $option =  $("<option >"+r.name +"</option>");
+            $option.val( r._id);
+            $('#compilationSels').append($option);
+        }
+    }catch (err){
+        alert("取编办信息有误");
+        console.log(err)
+    }
+}
+
+//对JSON对象排序,按属性key的顺序显示
+function sortJson(obj) {
+    if(obj === null){
+        return null;
+    }
+    if(obj instanceof Array){
+        for(let o in obj){
+            obj[o] = sortJson(obj[o]);
+        }
+        return obj;
+    }else if(typeof obj == 'object'){
+        let arr=[];
+        let newOjb ={};
+        for(let key in obj){
+            arr.push(key);
+        }
+        arr.sort();
+        for(let a of arr){
+            newOjb[a]= sortJson(obj[a]);
+        }
+        return newOjb;
+    }else {
+        return obj;
+    }
+}

+ 35 - 0
web/maintain/fee_rate_lib/html/edit.html

@@ -0,0 +1,35 @@
+<nav class="navbar navbar-toggleable-lg justify-content-between navbar-light p-0 second_header">
+    <ul class="nav nav-tabs" role="tablist">
+        <li class="nav-item">
+            <a class="nav-link active px-3" href="javascript: void(0);">费率标准</a>
+        </li>
+    </ul>
+</nav>
+
+<div class="main">
+    <div class="content" >
+        <div class="container-fluid" >
+        <div class=" col-lg-12 p-0">
+            <nav class="navbar sticky-top navbar-toggleable-md navbar-light bg-faded tools-bar">
+                <div class="collapse navbar-collapse" id="navbarNav">
+                    <div class="tools-btn btn-group align-top">
+                        <a href="javascript:void(0)" class="btn btn-sm" id="format"><i class="fa fa-list-alt" aria-hidden="true"></i> 校验格式</a>
+                        <a href="javascript:void(0)" class="btn btn-sm" id="save"><i class="fa fa-floppy-o" aria-hidden="true"></i> 保存</a>
+                    </div>
+                </div>
+            </nav>
+            <textarea class="form-control" id="rateList" rows="38"></textarea>
+        </div>
+        </div>
+        <input type="hidden" id="libID" value="<%= libID %>">
+        <input type="hidden" id="originalRates" value="<%= rateList %>">
+    </div>
+</div>
+
+
+
+<script type="text/javascript">
+
+</script>
+<script type="text/javascript" src="/lib/json/json2.js"></script>
+<script type="text/javascript" src="/web/maintain/fee_rate_lib/js/fee_rate_edit.js"></script>

+ 113 - 0
web/maintain/fee_rate_lib/html/main.html

@@ -0,0 +1,113 @@
+<div class="main">
+    <div class="content">
+        <div class="container-fluid">
+            <div class="row">
+                <div class="col-md-8">
+                    <div class="warp-p2 mt-3">
+                        <table class="table table-hover table-bordered">
+                            <thead><tr><th>库名称</th><th >费用定额</th><th width="160">添加时间</th><th width="120">操作</th></tr></thead>
+                            <tbody id="showArea">
+                            <% for(let lib of feeRateLibs){ %>
+                            <tr class="libTr">
+                                <td id="<%= lib.ID%>"><a href="/feeRate/edit/<%= lib.ID%>"><%= lib.libName%></a></td>
+                                <td><%= lib.compilationName%></td>
+                                <td><%= moment(lib.createDate).format('YYYY-MM-DD')%></td>
+                                <td>
+                                    <a style="color: #0275d8" onclick='getFeeRateLib("<%= lib.ID%>")' title="编辑"><i class="fa fa-pencil-square-o"></i></a>
+                                    <a style="color: #0275d8" onclick='showDeleteModal("<%= lib.ID%>")' class="text-danger" title="删除"><i class="fa fa-remove"></i></a>
+                                </td>
+                            </tr>
+                            <% } %>
+                            </tbody>
+                        </table>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<!--弹出添加-->
+<div class="modal fade" id="add" data-backdrop="static" style="display: none;" aria-hidden="true">
+    <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">×</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <form id="addLibForm" method="post" action="/feeRate/addLib" enctype="application/x-www-form-urlencoded21">
+                    <div class="form-group">
+                        <label>库名称</label>
+                        <input id="name" name="name" class="form-control" placeholder="请输入费率标准库名称" type="text">
+                        <small class="form-text text-danger" id="nameError" style="display: none">请输入费率标准库名称。</small>
+                    </div>
+                    <div class="form-group">
+                        <label>编办名称</label>
+                        <select id="compilationSels" name="compilationId" class="form-control"></select>
+                    </div>
+                    <input type="hidden" name = "userAccount" value="<%= userAccount%>">
+                </form>
+            </div>
+            <div class="modal-footer">
+                <button id="addLibs"  class="btn btn-primary">新建</button>
+                <button type="button" id="cancelBtn" class="btn btn-secondary" data-dismiss="modal">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
+
+<!--弹出编辑-->
+<div class="modal fade" id="edit" data-backdrop="static" style="display: none;" aria-hidden="true">
+    <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">×</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <form>
+                    <div class="form-group">
+                        <label>标准费率库名称</label>
+                        <input id="renameText" class="form-control" placeholder="输入名称" type="text" value="">
+                        <small class="form-text text-danger" id="renameError" style="display: none">请输入名称。</small>
+                        <input id="libID" type="hidden">
+                    </div>
+                </form>
+            </div>
+            <div class="modal-footer">
+                <a id="rename" href="javascript: void(0);" class="btn btn-primary" >确定</a>
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
+
+<!--弹出删除-->
+<div class="modal fade" id="del" data-backdrop="static" style="display: none;" aria-hidden="true">
+    <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">×</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <h5 class="text-danger">删除后无法恢复,确认是否删除?</h5>
+                <input type="hidden" id="libID_del">
+                <input type="hidden" id="delCount">
+            </div>
+            <div class="modal-footer">
+                <a id="delete" href="javascript:void(0);" class="btn btn-danger" >确认</a>
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script type="text/javascript" src="/web/maintain/fee_rate_lib/js/fee_rate.js"></script>

+ 81 - 0
web/maintain/fee_rate_lib/js/fee_rate.js

@@ -0,0 +1,81 @@
+/**
+ * Created by zhang on 2018/9/11.
+ */
+
+$(document).ready(function() {
+    $('#add').on('show.bs.modal',async function () {
+        await initCompilationSelect();
+    });
+
+    // 保存按钮
+    $("#addLibs").click(async function() {
+        let name = $('#name').val();
+        if(name==''){
+            $("#nameError").show();
+            return;
+        }else {
+            $("#addLibs").attr("disabled",true);//防止重复提交
+            $("#addLibForm").submit();
+        }
+    });
+
+    $("#rename").click(async function() {
+        let libID = $("#libID").val();
+        let name = $('#renameText').val();
+        if(libID!=''){
+            if(name ==''){
+                $("#renameError").show();
+                return;
+            }else {
+                try {
+                    let newFeeRate = await ajaxPost("/feeRate/saveLib",{query:{ID:libID},data:{libName:name}});
+                    $("#"+libID).children("a").text(newFeeRate.libName);
+                    $("#edit").modal('hide');
+                }catch(err) {
+                    console.log(err);
+                }
+            }
+        }
+    });
+
+    $("#delete").click(async function() {
+        let libID = $("#libID_del").val();
+        let delCount = parseInt($("#delCount").val());
+        delCount = delCount+1;
+        $("#delCount").val(delCount);
+        if(delCount == 3){
+            if(libID!=""){
+                try {
+                    let result = await ajaxPost("/feeRate/deleteLibByID",{ID:libID});
+                    if(result.ok){
+                        $("#"+libID).parent(".libTr").remove();
+                    }
+                    $("#del").modal('hide');
+                }catch (err){
+                    console.log(err);
+                }
+            }
+        }
+    });
+});
+
+async function getFeeRateLib (ID) {
+    try {
+        let lib = await ajaxPost("/feeRate/findLib",{ID:ID});
+        if(lib){
+            $("#renameText").val(lib.libName);
+            $("#libID").val(ID);
+            $("#edit").modal({show:true});
+        }else {
+            alert("没有找到材料库");
+        }
+    }catch (err){
+        console.log(err);
+    }
+}
+
+function showDeleteModal(ID){
+    $("#libID_del").val(ID);
+    $("#delCount").val(0);
+    $("#del").modal({show:true});
+}

+ 36 - 0
web/maintain/fee_rate_lib/js/fee_rate_edit.js

@@ -0,0 +1,36 @@
+/**
+ * Created by zhang on 2018/9/11.
+ */
+$(document).ready(function () {
+
+    try {
+        let tem = sortJson(JSON.parse($("#originalRates").val()));
+        $("#rateList").val(JSON.stringify(tem,null,4));
+    }catch (err){
+        console.log(err);
+    }
+
+    $("#format").click( function() {
+        try {
+            let jsonText =  $("#rateList").val();
+            $("#rateList").val(JSON.stringify(JSON.parse(jsonText),null,4));
+        }catch (err){
+            console.log(err);
+            alert("输入的JSON格式有误,请重新输入!");
+        }
+    });
+    $("#save").click(async function() {
+        try {
+            let libID = $("#libID").val();
+            let jsonText =  $("#rateList").val();
+            if(jsonText.indexOf("'")!=-1){
+                alert("输入的格式不能包含 ' 位于:"+jsonText.substr(jsonText.indexOf("'")-15,18));
+                return;
+            }
+            let newFeeRate = await ajaxPost("/feeRate/saveLib",{query:{ID:libID},data:{rates:JSON.parse(jsonText)}});
+        }catch (err){
+            console.log(err);
+            alert("保存失败,请查看输入数据");
+        }
+    });
+});

+ 0 - 1
web/maintain/main_col_lib/js/main_col_edit.js

@@ -4,7 +4,6 @@
 
 $(document).ready(function () {
     try {
-        console.log($("#originalMainCol").val());
         let tem = JSON.parse($("#originalMainCol").val());
         tem = sortJson(tem);
         $("#mainTreeCol").val(JSON.stringify(tem,null,4));

+ 2 - 3
web/maintain/project_feature_lib/js/project_feature_edit.js

@@ -18,8 +18,7 @@ $(document).ready(function () {
            console.log(err);
            alert("输入的JSON格式有误,请重新输入!");
        }
-
-   })
+   });
     $("#save").click(async function() {
         try {
             let libID = $("#libID").val();
@@ -33,7 +32,7 @@ $(document).ready(function () {
             console.log(err);
             alert("保存失败,请查看输入数据");
         }
-    })
+    });
     $("#createNormal").click(async function() {
         let projectFeature = [
             {dispName: '工程专业', key: 'engineering', value: ''},//只读,用户新建单位工程时选择的值

+ 14 - 0
web/users/views/tool/index.html

@@ -76,6 +76,20 @@
                     </h2>
                 </div>
             </div>
+            <div class="col-xs-6 mb-30 ">
+                <div class="c-body">
+                    <h2>费率标准库
+                        <a id="feeRate" href="/feeRate/main" target="_blank" class="btn btn-primary pull-right">进入</a>
+                    </h2>
+                </div>
+            </div>
+            <div class="col-xs-6 mb-30 ">
+                <div class="c-body">
+                    <h2>计算程序模板库
+                        <a id="calcProgram" href="/calcProgram/main" target="_blank" class="btn btn-primary pull-right">进入</a>
+                    </h2>
+                </div>
+            </div>
         </div>
     </div>
 </div>