Преглед на файлове

Merge branch 'master' of http://192.168.1.41:3000/SmartCost/ConstructionOperation

Tony Kang преди 3 години
родител
ревизия
9242c1f4f7
променени са 28 файла, в които са добавени 1689 реда и са изтрити 5 реда
  1. 23 0
      modules/all_models/monomer_template.js
  2. 23 0
      modules/all_models/single_info.js
  3. 23 0
      modules/all_models/structural_segment.js
  4. 1 1
      modules/bills_template_lib/controllers/bills_template_controller.js
  5. 1 2
      modules/bills_template_lib/facade/bills_template_facade.js
  6. 119 0
      modules/monomer_template_lib/controllers/monomer_template_controller.js
  7. 49 0
      modules/monomer_template_lib/facade/monomer_template_facade.js
  8. 21 0
      modules/monomer_template_lib/routes/monomer_template_routes.js
  9. 116 0
      modules/single_info_lib/controllers/single_info_controller.js
  10. 47 0
      modules/single_info_lib/facade/single_info_facade.js
  11. 21 0
      modules/single_info_lib/routes/single_info_routes.js
  12. 116 0
      modules/structural_segment_lib/controllers/structural_segment_controller.js
  13. 47 0
      modules/structural_segment_lib/facade/structural_segment_facade.js
  14. 21 0
      modules/structural_segment_lib/routes/structural_segment_routes.js
  15. 1 1
      web/maintain/bill_template_lib/js/bills_template.js
  16. 2 1
      web/maintain/billsGuidance_lib/html/zhiyin.html
  17. 32 0
      web/maintain/monomer_template_lib/html/edit.html
  18. 147 0
      web/maintain/monomer_template_lib/html/main.html
  19. 81 0
      web/maintain/monomer_template_lib/js/monomer_template.js
  20. 136 0
      web/maintain/monomer_template_lib/js/monomer_template_edit.js
  21. 32 0
      web/maintain/single_info_lib/html/edit.html
  22. 147 0
      web/maintain/single_info_lib/html/main.html
  23. 81 0
      web/maintain/single_info_lib/js/single_info.js
  24. 69 0
      web/maintain/single_info_lib/js/single_info_edit.js
  25. 32 0
      web/maintain/structural_segment_lib/html/edit.html
  26. 147 0
      web/maintain/structural_segment_lib/html/main.html
  27. 81 0
      web/maintain/structural_segment_lib/js/structural_segment.js
  28. 73 0
      web/maintain/structural_segment_lib/js/structural_segment_edit.js

+ 23 - 0
modules/all_models/monomer_template.js

@@ -0,0 +1,23 @@
+/**
+ * Created by zhang on 2018/7/12.
+ */
+//单体模板库
+const mongoose = require('mongoose');
+const Schema = mongoose.Schema;
+const oprSchema = require('../all_schemas/opr_schema');
+const monomerTemplate_lib = new Schema({
+        ID:{type:String,index:true},
+        creator: String,
+        createDate: Number,
+        recentOpr: [oprSchema],
+        name: String,
+        compilationID: String,
+        data: {
+            type: [Schema.Types.Mixed],
+            default: []
+        }
+    },
+    {versionKey: false}
+);
+
+mongoose.model("std_monomer_template", monomerTemplate_lib,"std_monomer_template");

+ 23 - 0
modules/all_models/single_info.js

@@ -0,0 +1,23 @@
+/**
+ * Created by zhang on 2018/7/12.
+ */
+//单体模板库
+const mongoose = require('mongoose');
+const Schema = mongoose.Schema;
+const oprSchema = require('../all_schemas/opr_schema');
+const monomerTemplate_lib = new Schema({
+        ID:{type:String,index:true},
+        creator: String,
+        createDate: Number,
+        recentOpr: [oprSchema],
+        name: String,
+        compilationID: String,
+        data: {
+            type: [Schema.Types.Mixed],
+            default: []
+        }
+    },
+    {versionKey: false}
+);
+
+mongoose.model("std_single_info", monomerTemplate_lib,"std_single_info");

+ 23 - 0
modules/all_models/structural_segment.js

@@ -0,0 +1,23 @@
+/**
+ * Created by zhang on 2018/7/12.
+ */
+//单体模板库
+const mongoose = require('mongoose');
+const Schema = mongoose.Schema;
+const oprSchema = require('../all_schemas/opr_schema');
+const monomerTemplate_lib = new Schema({
+        ID:{type:String,index:true},
+        creator: String,
+        createDate: Number,
+        recentOpr: [oprSchema],
+        name: String,
+        compilationID: String,
+        data: {
+            type: [Schema.Types.Mixed],
+            default: []
+        }
+    },
+    {versionKey: false}
+);
+
+mongoose.model("std_structural_segment", monomerTemplate_lib,"std_structural_segment");

+ 1 - 1
modules/bills_template_lib/controllers/bills_template_controller.js

@@ -158,7 +158,7 @@ class BillsTemplateController extends BaseController {
         try {
             const data = JSON.parse(req.body.data);
             const userName = req.session.managerData.username;
-            await billsTemplateFacade.copyLib(data.libID, data.name, userName ,data.libType);
+            await billsTemplateFacade.copyLib(data.libID, data.name, userName);
             res.json({error: 0, data: null, message: 'success'})
         } catch (err) {
             console.log(err);

+ 1 - 2
modules/bills_template_lib/facade/bills_template_facade.js

@@ -96,14 +96,13 @@ async function addLib(data){
     }
 }
 
-async function copyLib(libID, name, userName,libType) {
+async function copyLib(libID, name, userName) {
     const lib = await billTemplateLibModel.findOne({ID: libID}, '-_id').lean();
     const libItems = await billTemplateItemsModel.find({libID}, '-_id').lean();
     lib.creator = userName;
     lib.createDate = Date.now();
     lib.recentOpr = [{operator: userName, operator: moment(lib.createDate).format('YYYY-MM-D HH:mm:ss')}];
     lib.name = name;
-    lib.libType=libType;
     lib.ID = uuidV1();
     await billTemplateLibModel.create(lib);
     libItems.forEach(item => {

+ 119 - 0
modules/monomer_template_lib/controllers/monomer_template_controller.js

@@ -0,0 +1,119 @@
+/**
+ * Created by zhang on 2018/9/3.
+ */
+import BaseController from "../../common/base/base_controller";
+import monomerTemplateFacade from "../facade/monomer_template_facade";
+let config = require("../../../config/config.js");
+let logger = require('../../../logs/log_helper').logger;
+import CompilationModel from '../../users/models/compilation_model';
+let mongoose = require('mongoose');
+let monomerTemplateModel = mongoose.model('std_monomer_template');
+
+class MonomerTemplateController extends BaseController{
+    async main(request, response) {
+     
+        let compilationModel = new CompilationModel();
+        let compilationList = await compilationModel.getCompilationList({_id: 1, name: 1});
+        compilationList.unshift({_id: 'all', name: '所有'});
+        let activeCompilation = compilationList.find(compilation => compilation._id.toString() === request.query.filter);
+        if (activeCompilation) {
+            activeCompilation.active = 'active';
+        } else {
+            compilationList[0].active = 'active'
+        }
+        let filter = request.query.filter ? {compilationID: request.query.filter} : {};
+        let templateLibs = await monomerTemplateFacade.findByCondition(filter,{feature:0},false);
+        let renderData = {
+            title:'单体模板库',
+            userAccount: request.session.managerData.username,
+            userID: request.session.managerData.userID,
+            templateLibs:templateLibs,
+            compilationList: compilationList,
+            layout: 'maintain/common/html/layout'
+        };
+        response.render("maintain/monomer_template_lib/html/main", renderData);
+    }
+    async addLib(request, response){
+        try {
+            await monomerTemplateFacade.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 monomerTemplateFacade.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);
+            console.log(data.data);
+            let resultData= await monomerTemplateFacade.saveLib(data);
+            result.data=resultData;
+        }catch (err){
+            console.log(err);
+            result.error=1;
+            result.message = err.message;
+        }
+        response.json(result);
+    }
+    async deleteLibByID(request,response){
+        logger.info(`delete projectFeatureLib ${request.ip}`);
+        let result={
+            error:0
+        };
+        try {
+            let data = request.body.data;
+            data = JSON.parse(data);
+            let resultData= await monomerTemplateFacade.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 monomerTemplate = await monomerTemplateFacade.findByCondition({'ID':libID});
+        
+        if(monomerTemplate){
+            let randerData = {
+                title:'单体模板库',
+                mainURL:'/monomerTemplate/main',
+                libName:monomerTemplate.name,
+                userAccount: request.session.managerData.username,
+                userID: request.session.managerData.userID,
+                templateLibs:JSON.stringify(monomerTemplate),
+                libID:libID,
+                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                layout: 'maintain/common/html/edit_layout'
+            };
+            response.render("maintain/monomer_template_lib/html/edit", randerData);
+        }else {
+            response.redirect(request.headers.referer);
+        }
+    }
+}
+export default MonomerTemplateController;

+ 49 - 0
modules/monomer_template_lib/facade/monomer_template_facade.js

@@ -0,0 +1,49 @@
+/**
+ * Created by zhang on 2018/9/3.
+ */
+import mongoose from "mongoose";
+const uuidV1 = require('uuid/v1');
+let moment = require("moment");
+let monomerTemplateModel = mongoose.model('std_monomer_template');
+let compilationModel = mongoose.model('compilation');
+
+
+let monomerTemplateLib = {
+    findByCondition:async function(conditions,options,single=true){
+        if(single == true){
+            return await monomerTemplateModel.findOne(conditions,options);
+        }else {
+            return await  monomerTemplateModel.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}],
+                name: data.name,
+                compilationID: data.compilationId,
+                compilationName: compilation.name,
+            };
+            newLib.ID = uuidV1();
+            return await monomerTemplateModel.create(newLib);
+        }else {
+            throw  new Error("没有找到该编办!");
+        }
+    },
+    saveLib:async function(param) {
+        console.log('par===============================')
+        console.log(param)
+        return await monomerTemplateModel.findOneAndUpdate(param.query,param.data);
+    },
+    deleteLibByID:async function(ID){
+        return await monomerTemplateModel.deleteOne({ID:ID});
+    },
+};
+
+export default monomerTemplateLib

+ 21 - 0
modules/monomer_template_lib/routes/monomer_template_routes.js

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

+ 116 - 0
modules/single_info_lib/controllers/single_info_controller.js

@@ -0,0 +1,116 @@
+/**
+ * Created by zhang on 2018/9/3.
+ */
+import BaseController from "../../common/base/base_controller";
+import singleInfoFacade from "../facade/single_info_facade";
+let config = require("../../../config/config.js");
+let logger = require('../../../logs/log_helper').logger;
+import CompilationModel from '../../users/models/compilation_model';
+
+class singleInfoController extends BaseController{
+    async main(request, response) {
+     
+        let compilationModel = new CompilationModel();
+        let compilationList = await compilationModel.getCompilationList({_id: 1, name: 1});
+        compilationList.unshift({_id: 'all', name: '所有'});
+        let activeCompilation = compilationList.find(compilation => compilation._id.toString() === request.query.filter);
+        if (activeCompilation) {
+            activeCompilation.active = 'active';
+        } else {
+            compilationList[0].active = 'active'
+        }
+        let filter = request.query.filter ? {compilationID: request.query.filter} : {};
+        let templateLibs = await singleInfoFacade.findByCondition(filter,false);
+        let renderData = {
+            title:'单项信息库',
+            userAccount: request.session.managerData.username,
+            userID: request.session.managerData.userID,
+            templateLibs:templateLibs,
+            compilationList: compilationList,
+            layout: 'maintain/common/html/layout'
+        };
+        response.render("maintain/single_info_lib/html/main", renderData);
+    }
+    async addLib(request, response){
+        try {
+            await singleInfoFacade.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 singleInfoFacade.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);
+            console.log(data.data);
+            let resultData= await singleInfoFacade.saveLib(data);
+            result.data=resultData;
+        }catch (err){
+            console.log(err);
+            result.error=1;
+            result.message = err.message;
+        }
+        response.json(result);
+    }
+    async deleteLibByID(request,response){
+        logger.info(`delete projectFeatureLib ${request.ip}`);
+        let result={
+            error:0
+        };
+        try {
+            let data = request.body.data;
+            data = JSON.parse(data);
+            let resultData= await singleInfoFacade.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 singleInfo = await singleInfoFacade.findByCondition({'ID':libID});
+        if(singleInfo){
+            let randerData = {
+                title:'单项信息库',
+                mainURL:'/singleInfo/main',
+                libName:singleInfo.name,
+                userAccount: request.session.managerData.username,
+                userID: request.session.managerData.userID,
+                templateLibs:JSON.stringify(singleInfo),
+                libID:libID,
+                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                layout: 'maintain/common/html/edit_layout'
+            };
+            response.render("maintain/single_info_lib/html/edit", randerData);
+        }else {
+            response.redirect(request.headers.referer);
+        }
+    }
+}
+export default singleInfoController;

+ 47 - 0
modules/single_info_lib/facade/single_info_facade.js

@@ -0,0 +1,47 @@
+/**
+ * Created by zhang on 2018/9/3.
+ */
+import mongoose from "mongoose";
+const uuidV1 = require('uuid/v1');
+let moment = require("moment");
+let singleInfoModel = mongoose.model('std_single_info');
+let compilationModel = mongoose.model('compilation');
+
+
+let structuralSegmentLib = {
+    findByCondition:async function(conditions,single=true){
+        if(single == true){
+            return await singleInfoModel.findOne(conditions);
+        }else {
+            return await  singleInfoModel.find(conditions);
+        }
+    },
+    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}],
+                name: data.name,
+                compilationID: data.compilationId,
+                compilationName: compilation.name,
+            };
+            newLib.ID = uuidV1();
+            return await singleInfoModel.create(newLib);
+        }else {
+            throw  new Error("没有找到该编办!");
+        }
+    },
+    saveLib:async function(param) {
+        return await singleInfoModel.findOneAndUpdate(param.query,param.data);
+    },
+    deleteLibByID:async function(ID){
+        return await singleInfoModel.deleteOne({ID:ID});
+    },
+};
+
+export default structuralSegmentLib

+ 21 - 0
modules/single_info_lib/routes/single_info_routes.js

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

+ 116 - 0
modules/structural_segment_lib/controllers/structural_segment_controller.js

@@ -0,0 +1,116 @@
+/**
+ * Created by zhang on 2018/9/3.
+ */
+import BaseController from "../../common/base/base_controller";
+import structuralSegmentFacade from "../facade/structural_segment_facade";
+let config = require("../../../config/config.js");
+let logger = require('../../../logs/log_helper').logger;
+import CompilationModel from '../../users/models/compilation_model';
+
+class StructuralSegmentController extends BaseController{
+    async main(request, response) {
+     
+        let compilationModel = new CompilationModel();
+        let compilationList = await compilationModel.getCompilationList({_id: 1, name: 1});
+        compilationList.unshift({_id: 'all', name: '所有'});
+        let activeCompilation = compilationList.find(compilation => compilation._id.toString() === request.query.filter);
+        if (activeCompilation) {
+            activeCompilation.active = 'active';
+        } else {
+            compilationList[0].active = 'active'
+        }
+        let filter = request.query.filter ? {compilationID: request.query.filter} : {};
+        let templateLibs = await structuralSegmentFacade.findByCondition(filter,{feature:0},false);
+        let renderData = {
+            title:'结构分部库',
+            userAccount: request.session.managerData.username,
+            userID: request.session.managerData.userID,
+            templateLibs:templateLibs,
+            compilationList: compilationList,
+            layout: 'maintain/common/html/layout'
+        };
+        response.render("maintain/structural_segment_lib/html/main", renderData);
+    }
+    async addLib(request, response){
+        try {
+            await structuralSegmentFacade.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 structuralSegmentFacade.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);
+            console.log(data.data);
+            let resultData= await structuralSegmentFacade.saveLib(data);
+            result.data=resultData;
+        }catch (err){
+            console.log(err);
+            result.error=1;
+            result.message = err.message;
+        }
+        response.json(result);
+    }
+    async deleteLibByID(request,response){
+        logger.info(`delete projectFeatureLib ${request.ip}`);
+        let result={
+            error:0
+        };
+        try {
+            let data = request.body.data;
+            data = JSON.parse(data);
+            let resultData= await structuralSegmentFacade.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 structuralSegment = await structuralSegmentFacade.findByCondition({'ID':libID});
+        if(structuralSegment){
+            let randerData = {
+                title:'结构分部库',
+                mainURL:'/structuralSegment/main',
+                libName:structuralSegment.name,
+                userAccount: request.session.managerData.username,
+                userID: request.session.managerData.userID,
+                templateLibs:JSON.stringify(structuralSegment),
+                libID:libID,
+                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                layout: 'maintain/common/html/edit_layout'
+            };
+            response.render("maintain/structural_segment_lib/html/edit", randerData);
+        }else {
+            response.redirect(request.headers.referer);
+        }
+    }
+}
+export default StructuralSegmentController;

+ 47 - 0
modules/structural_segment_lib/facade/structural_segment_facade.js

@@ -0,0 +1,47 @@
+/**
+ * Created by zhang on 2018/9/3.
+ */
+import mongoose from "mongoose";
+const uuidV1 = require('uuid/v1');
+let moment = require("moment");
+let structuralSegmentModel = mongoose.model('std_structural_segment');
+let compilationModel = mongoose.model('compilation');
+
+
+let structuralSegmentLib = {
+    findByCondition:async function(conditions,options,single=true){
+        if(single == true){
+            return await structuralSegmentModel.findOne(conditions,options);
+        }else {
+            return await  structuralSegmentModel.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}],
+                name: data.name,
+                compilationID: data.compilationId,
+                compilationName: compilation.name,
+            };
+            newLib.ID = uuidV1();
+            return await structuralSegmentModel.create(newLib);
+        }else {
+            throw  new Error("没有找到该编办!");
+        }
+    },
+    saveLib:async function(param) {
+        return await structuralSegmentModel.findOneAndUpdate(param.query,param.data);
+    },
+    deleteLibByID:async function(ID){
+        return await structuralSegmentModel.deleteOne({ID:ID});
+    },
+};
+
+export default structuralSegmentLib

+ 21 - 0
modules/structural_segment_lib/routes/structural_segment_routes.js

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

+ 1 - 1
web/maintain/bill_template_lib/js/bills_template.js

@@ -67,7 +67,7 @@ $(document).ready(function() {
             return;
         }
         $.bootstrapLoading.start();
-        CommonAjax.post('/billsTemplate/copyLib', {libID, name,libType}, function () {
+        CommonAjax.post('/billsTemplate/copyLib', {libID, name}, function () {
             $.bootstrapLoading.end();
             window.location.reload();
         }, function () {

+ 2 - 1
web/maintain/billsGuidance_lib/html/zhiyin.html

@@ -69,7 +69,7 @@
                                     <button id="searchBillBtn" class="btn btn-secondary btn-sm" type="button"><i class="fa fa-search" aria-hidden="true"></i></button>
                                 </span>
                                 </div>
-                                <a id="editMaterial" href="javascript:void(0);" class="btn btn-sm"><i class="fa fa-edit" aria-hidden="true"></i> 配置材料</a>
+                               
                             </div>
                             <div id="searchBillsResult" style="display: none;">
                                 <div style="display: flex; align-items: center; height: 36px;">
@@ -97,6 +97,7 @@
                                   <a id="downLevel" href="javascript:void(0);" class="btn btn-sm lock-btn-control disabled" data-toggle="tooltip" data-placement="bottom" title="降级"><i class="fa fa-arrow-right" aria-hidden="true"></i></a>
                                   <a id="downMove" href="javascript:void(0);" class="btn btn-sm lock-btn-control" data-toggle="tooltip" data-placement="bottom" title="下移"><i class="fa fa-arrow-down" aria-hidden="true"></i></a>
                                   <a id="upMove" href="javascript:void(0);" class="btn btn-sm lock-btn-control" data-toggle="tooltip" data-placement="bottom" title="上移"><i class="fa fa-arrow-up" aria-hidden="true"></i></a>
+                                  <a id="editMaterial" href="javascript:void(0);" class="btn btn-sm"><i class="fa fa-edit" aria-hidden="true"></i> 配置材料</a>
                                   <a id="expandContract" href="javascript:void(0);" class="btn btn-sm" data-toggle="tooltip" data-placement="bottom" title="收起定额"><i class="fa fa-minus-square-o" aria-hidden="true"></i> 收起定额</a>
                                   <!-- <a id="generate-class" href="javascript:void(0);" class="btn btn-sm lock-btn-control" data-toggle="tooltip" data-placement="bottom" title="生成分类">测试生成分类算法</a> -->
                               </div>

+ 32 - 0
web/maintain/monomer_template_lib/html/edit.html

@@ -0,0 +1,32 @@
+<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 lock-btn-control" id="createNormal"><i class="fa fa-list-alt" aria-hidden="true"></i> 生成默认</a>
+                        <a href="javascript:void(0)" class="btn btn-sm lock-btn-control" id="format"><i class="fa fa-list-alt" aria-hidden="true"></i> 校验格式</a>
+                        <a href="javascript:void(0)" class="btn btn-sm lock-btn-control" id="save"><i class="fa fa-floppy-o" aria-hidden="true"></i> 保存</a>
+                    </div>
+                </div>
+            </nav>
+            <textarea class="form-control lock-text-control" id="templateLibs" rows="38"></textarea>
+        </div>
+        </div>
+        <input type="hidden" id="libID" value="<%= libID %>">
+        <input type="hidden" id="originalFeature" value="<%= templateLibs %>">
+    </div>
+</div>
+
+<script type="text/javascript" src="/lib/json/json2.js"></script>
+<script src="/public/web/lock_util.js"></script>
+<script type="text/javascript" src="/web/maintain/monomer_template_lib/js/monomer_template_edit.js"></script>

+ 147 - 0
web/maintain/monomer_template_lib/html/main.html

@@ -0,0 +1,147 @@
+<div class="main">
+    <div class="content">
+        <div class="container-fluid">
+            <div class="row">
+                <div class="col-md-2">
+                    <div class="list-group mt-3">
+                        <% for (let compilation of compilationList) { %>
+                        <% if (compilation._id === 'all') { %>
+                        <a href="/monomerTemplate/main" class="list-group-item list-group-item-action <%= compilation.active %>">
+                            所有
+                        </a>
+                        <% } else { %>
+                        <a id="<%= compilation._id %>" href="/monomerTemplate/main/?filter=<%= compilation._id %>" class="list-group-item list-group-item-action <%= compilation.active %>">
+                            <%= compilation.name %>
+                        </a>
+                        <% }} %>
+                    </div>
+                </div>
+                <div class="col-md-10">
+                    <div class="warp-p2 mt-3">
+                        <table class="table table-hover table-bordered">
+                            <thead>
+                                <tr>
+                                    <th>单体模板名称</th>
+                                    <th width="160">编办</th>
+                                    <th width="160">添加时间</th>
+                                    <th width="70">操作</th>
+                                </tr>
+                            </thead>
+                            <tbody id="showArea">
+                                <% for(let lib of templateLibs){ %>
+                                <tr class="libTr">
+                                    <td id="<%= lib.ID%>"><a href="/monomerTemplate/edit/<%= lib.ID%>?locked=true"><%= lib.name%></a></td>
+                                    <td><%= lib.compilationName%></td>
+                                    <td><%= moment(lib.createDate).format('YYYY-MM-DD')%></td>
+                                    <td>
+                                        <a class="lock-btn-control disabled" href="javascript:void(0);"
+                                            style="color: #0275d8" onclick='getFeatureLib("<%= lib.ID%>")' title="编辑"><i
+                                                class="fa fa-pencil-square-o"></i></a>
+                                        <a class="text-danger lock-btn-control disabled" href="javascript:void(0);"
+                                            onclick='showDeleteModal("<%= lib.ID%>")' title="删除"><i
+                                                class="fa fa-remove"></i></a>
+                                        <a class="lock" data-locked="true" href="javascript:void(0);" title="解锁"><i
+                                                class="fa fa-unlock-alt"></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="/monomerTemplate/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 class="form-control" name="compilationId">
+                            <% for (let compilation of compilationList) { %>
+                            <% if (compilation.name !== '所有') { %>
+                            <option value="<%= compilation._id %>"><%= compilation.name %></option>
+                            <% }} %>
+                        </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 src="/public/web/lock_util.js"></script>
+<script type="text/javascript" src="/web/maintain/monomer_template_lib/js/monomer_template.js"></script>

+ 81 - 0
web/maintain/monomer_template_lib/js/monomer_template.js

@@ -0,0 +1,81 @@
+/**
+ * Created by zhang on 2018/9/3.
+ */
+$(document).ready(function() {
+    // 保存按钮
+    $("#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 newFeature = await ajaxPost("/monomerTemplate/saveLib",{query:{ID:libID},data:{name:name}});
+                    $("#"+libID).children("a").text(name);
+                    $("#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("/monomerTemplate/deleteLibByID",{ID:libID});
+                    if(result.ok){
+                        $("#"+libID).parent(".libTr").remove();
+                    }
+                    $("#del").modal('hide');
+                }catch (err){
+                    console.log(err);
+                }
+            }
+        }
+    });
+
+    // 锁定、解锁
+    $('.lock').click(function () {
+        lockUtil.handleLockClick($(this));
+    });
+});
+
+async function getFeatureLib (ID) {
+    try {
+        const lib = await ajaxPost("/monomerTemplate/findLib",{ID});
+        if(lib){
+            $("#renameText").val(lib.name);
+            $("#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});
+}

+ 136 - 0
web/maintain/monomer_template_lib/js/monomer_template_edit.js

@@ -0,0 +1,136 @@
+/**
+ * Created by zhang on 2018/9/3.
+ */
+
+$(document).ready(function () {
+    const locked = lockUtil.getLocked();
+    lockUtil.lockTools($(document.body), locked);
+    try {
+        let tem = sortJson(JSON.parse($("#originalFeature").val()));
+        $("#templateLibs").val(JSON.stringify(tem.data,null,4));
+    }catch (err){
+        console.log(err);
+    }
+
+   $("#format").click( function() {
+       try {
+           let jsonText =  $("#templateLibs").val();
+           $("#templateLibs").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 =  $("#templateLibs").val();
+            if(jsonText.indexOf("'")!=-1){
+                alert("输入的格式不能包含 ' 位于:"+jsonText.substr(jsonText.indexOf("'")-15,18));
+                return;
+            }
+            let newFeature = await ajaxPost("/monomerTemplate/saveLib",{query:{ID:libID},data:{data:JSON.parse(jsonText)}});
+        }catch (err){
+            console.log(err);
+            alert("保存失败,请查看输入数据");
+        }
+    });
+    $("#createNormal").click(()=>{
+        $("#createNormal").click(async function() {
+            let explorer =[
+                {
+                    "dispName": "学校",
+                    "items": [
+                        {
+                            "dispName": "教学楼",
+                            "isHaveStructuralSegment": "true",
+                            "key": "academicBuilding",
+                            "monomerType": "building"
+                        },
+                        {
+                            "dispName": "体育馆",
+                            "isHaveStructuralSegment": "true",
+                            "key": "gymnasium",
+                            "monomerType": "building"
+                        },
+                        {
+                            "dispName": "食堂",
+                            "isHaveStructuralSegment": "true",
+                            "key": "Canteen",
+                            "monomerType": "building"
+                        },
+                        {
+                            "dispName": "集体宿舍",
+                            "isHaveStructuralSegment": "true",
+                            "key": "collectiveDormitory",
+                            "monomerType": "building"
+                        }
+                    ],
+                    "key": "school"
+                },
+                {
+                    "dispName": "医院",
+                    "items": [
+                        {
+                            "dispName": "门诊楼",
+                            "isHaveStructuralSegment": "true",
+                            "key": "outpatientBuilding",
+                            "monomerType": "building"
+                        },
+                        {
+                            "dispName": "住院楼",
+                            "isHaveStructuralSegment": "true",
+                            "key": "inpatientBuilding",
+                            "monomerType": "building"
+                        },
+                        {
+                            "dispName": "集体宿舍",
+                            "isHaveStructuralSegment": "true",
+                            "key": "collectiveDormitory",
+                            "monomerType": "building"
+                        }
+                    ],
+                    "key": "hospital"
+                },
+                {
+                    "dispName": "市政工程",
+                    "items": [
+                        {
+                            "dispName": "新建改建扩建",
+                            "isHaveStructuralSegment": "true",
+                            "key": "newConstruction",
+                            "monomerType": "civil"
+                        },
+                        {
+                            "dispName": "景观提升",
+                            "isHaveStructuralSegment": "true",
+                            "key": "landscapeImprovement",
+                            "monomerType": "civil"
+                        },
+                        {
+                            "dispName": "养护大中修",
+                            "isHaveStructuralSegment": "true",
+                            "key": "curing",
+                            "monomerType": "civil"
+                        },
+                        {
+                            "dispName": "小修保养",
+                            "isHaveStructuralSegment": "true",
+                            "key": "routineMaintenance",
+                            "monomerType": "civil"
+                        }
+                    ],
+                    "key": "municipalConstruction"
+                }
+            ];
+            try {
+                let jsonText =  JSON.stringify(explorer);
+                $("#templateLibs").val(JSON.stringify(JSON.parse(jsonText),null,4));
+            }catch (err){
+                console.log(err);
+            }
+        })
+    })
+
+
+});

+ 32 - 0
web/maintain/single_info_lib/html/edit.html

@@ -0,0 +1,32 @@
+<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 lock-btn-control" id="createNormal"><i class="fa fa-list-alt" aria-hidden="true"></i> 生成默认</a>
+                        <a href="javascript:void(0)" class="btn btn-sm lock-btn-control" id="format"><i class="fa fa-list-alt" aria-hidden="true"></i> 校验格式</a>
+                        <a href="javascript:void(0)" class="btn btn-sm lock-btn-control" id="save"><i class="fa fa-floppy-o" aria-hidden="true"></i> 保存</a>
+                    </div>
+                </div>
+            </nav>
+            <textarea class="form-control lock-text-control" id="templateLibs" rows="38"></textarea>
+        </div>
+        </div>
+        <input type="hidden" id="libID" value="<%= libID %>">
+        <input type="hidden" id="originalFeature" value="<%= templateLibs %>">
+    </div>
+</div>
+
+<script type="text/javascript" src="/lib/json/json2.js"></script>
+<script src="/public/web/lock_util.js"></script>
+<script type="text/javascript" src="/web/maintain/single_info_lib/js/single_info_edit.js"></script>

+ 147 - 0
web/maintain/single_info_lib/html/main.html

@@ -0,0 +1,147 @@
+<div class="main">
+    <div class="content">
+        <div class="container-fluid">
+            <div class="row">
+                <div class="col-md-2">
+                    <div class="list-group mt-3">
+                        <% for (let compilation of compilationList) { %>
+                        <% if (compilation._id === 'all') { %>
+                        <a href="/singleInfo/main" class="list-group-item list-group-item-action <%= compilation.active %>">
+                            所有
+                        </a>
+                        <% } else { %>
+                        <a id="<%= compilation._id %>" href="/singleInfo/main/?filter=<%= compilation._id %>" class="list-group-item list-group-item-action <%= compilation.active %>">
+                            <%= compilation.name %>
+                        </a>
+                        <% }} %>
+                    </div>
+                </div>
+                <div class="col-md-10">
+                    <div class="warp-p2 mt-3">
+                        <table class="table table-hover table-bordered">
+                            <thead>
+                                <tr>
+                                    <th>名称</th>
+                                    <th width="160">编办</th>
+                                    <th width="160">添加时间</th>
+                                    <th width="70">操作</th>
+                                </tr>
+                            </thead>
+                            <tbody id="showArea">
+                                <% for(let lib of templateLibs){ %>
+                                <tr class="libTr">
+                                    <td id="<%= lib.ID%>"><a href="/singleInfo/edit/<%= lib.ID%>?locked=true"><%= lib.name%></a></td>
+                                    <td><%= lib.compilationName%></td>
+                                    <td><%= moment(lib.createDate).format('YYYY-MM-DD')%></td>
+                                    <td>
+                                        <a class="lock-btn-control disabled" href="javascript:void(0);"
+                                            style="color: #0275d8" onclick='getFeatureLib("<%= lib.ID%>")' title="编辑"><i
+                                                class="fa fa-pencil-square-o"></i></a>
+                                        <a class="text-danger lock-btn-control disabled" href="javascript:void(0);"
+                                            onclick='showDeleteModal("<%= lib.ID%>")' title="删除"><i
+                                                class="fa fa-remove"></i></a>
+                                        <a class="lock" data-locked="true" href="javascript:void(0);" title="解锁"><i
+                                                class="fa fa-unlock-alt"></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="/singleInfo/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 class="form-control" name="compilationId">
+                            <% for (let compilation of compilationList) { %>
+                            <% if (compilation.name !== '所有') { %>
+                            <option value="<%= compilation._id %>"><%= compilation.name %></option>
+                            <% }} %>
+                        </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 src="/public/web/lock_util.js"></script>
+<script type="text/javascript" src="/web/maintain/single_info_lib/js/single_info.js"></script>

+ 81 - 0
web/maintain/single_info_lib/js/single_info.js

@@ -0,0 +1,81 @@
+/**
+ * Created by zhang on 2018/9/3.
+ */
+$(document).ready(function() {
+    // 保存按钮
+    $("#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 {
+                    await ajaxPost("/singleInfo/saveLib",{query:{ID:libID},data:{name:name}});
+                    $("#"+libID).children("a").text(name);
+                    $("#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("/singleInfo/deleteLibByID",{ID:libID});
+                    if(result.ok){
+                        $("#"+libID).parent(".libTr").remove();
+                    }
+                    $("#del").modal('hide');
+                }catch (err){
+                    console.log(err);
+                }
+            }
+        }
+    });
+
+    // 锁定、解锁
+    $('.lock').click(function () {
+        lockUtil.handleLockClick($(this));
+    });
+});
+
+async function getFeatureLib (ID) {
+    try {
+        const lib = await ajaxPost("/singleInfo/findLib",{ID});
+        if(lib){
+            $("#renameText").val(lib.name);
+            $("#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});
+}

+ 69 - 0
web/maintain/single_info_lib/js/single_info_edit.js

@@ -0,0 +1,69 @@
+/**
+ * Created by zhang on 2018/9/3.
+ */
+
+$(document).ready(function () {
+    const locked = lockUtil.getLocked();
+    lockUtil.lockTools($(document.body), locked);
+    try {
+        let tem = sortJson(JSON.parse($("#originalFeature").val()));
+        $("#templateLibs").val(JSON.stringify(tem.data,null,4));
+    }catch (err){
+        console.log(err);
+    }
+
+   $("#format").click( function() {
+       try {
+           let jsonText =  $("#templateLibs").val();
+           $("#templateLibs").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 =  $("#templateLibs").val();
+            if(jsonText.indexOf("'")!=-1){
+                alert("输入的格式不能包含 ' 位于:"+jsonText.substr(jsonText.indexOf("'")-15,18));
+                return;
+            }
+            let newFeature = await ajaxPost("/singleInfo/saveLib",{query:{ID:libID},data:{data:JSON.parse(jsonText)}});
+        }catch (err){
+            console.log(err);
+            alert("保存失败,请查看输入数据");
+        }
+    });
+    $("#createNormal").click(()=>{
+        $("#createNormal").click(async function() {
+            let explorer = [
+                {
+                    "dispName": "房建工程",
+                    "items": [
+                        {
+                            "dispName": "项目编号",
+                            "key": "projNum",
+                            "required": "true",
+                            "value": "001"
+                        },
+                        {
+                            "dispName": "建设规模",
+                            "key": "buildScale",
+                            "required": "true",
+                            "cellType": "number",
+                            "options":""
+                        }    
+                    ],
+                    "key": "singleBuilding"
+                }
+            ];
+            try {
+                let jsonText =  JSON.stringify(explorer);
+                $("#templateLibs").val(JSON.stringify(JSON.parse(jsonText),null,4));
+            }catch (err){
+                console.log(err);
+            }
+        })
+    })
+});

+ 32 - 0
web/maintain/structural_segment_lib/html/edit.html

@@ -0,0 +1,32 @@
+<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 lock-btn-control" id="createNormal"><i class="fa fa-list-alt" aria-hidden="true"></i> 生成默认</a>
+                        <a href="javascript:void(0)" class="btn btn-sm lock-btn-control" id="format"><i class="fa fa-list-alt" aria-hidden="true"></i> 校验格式</a>
+                        <a href="javascript:void(0)" class="btn btn-sm lock-btn-control" id="save"><i class="fa fa-floppy-o" aria-hidden="true"></i> 保存</a>
+                    </div>
+                </div>
+            </nav>
+            <textarea class="form-control lock-text-control" id="templateLibs" rows="38"></textarea>
+        </div>
+        </div>
+        <input type="hidden" id="libID" value="<%= libID %>">
+        <input type="hidden" id="originalFeature" value="<%= templateLibs %>">
+    </div>
+</div>
+
+<script type="text/javascript" src="/lib/json/json2.js"></script>
+<script src="/public/web/lock_util.js"></script>
+<script type="text/javascript" src="/web/maintain/structural_segment_lib/js/structural_segment_edit.js"></script>

+ 147 - 0
web/maintain/structural_segment_lib/html/main.html

@@ -0,0 +1,147 @@
+<div class="main">
+    <div class="content">
+        <div class="container-fluid">
+            <div class="row">
+                <div class="col-md-2">
+                    <div class="list-group mt-3">
+                        <% for (let compilation of compilationList) { %>
+                        <% if (compilation._id === 'all') { %>
+                        <a href="/structuralSegment/main" class="list-group-item list-group-item-action <%= compilation.active %>">
+                            所有
+                        </a>
+                        <% } else { %>
+                        <a id="<%= compilation._id %>" href="/structuralSegment/main/?filter=<%= compilation._id %>" class="list-group-item list-group-item-action <%= compilation.active %>">
+                            <%= compilation.name %>
+                        </a>
+                        <% }} %>
+                    </div>
+                </div>
+                <div class="col-md-10">
+                    <div class="warp-p2 mt-3">
+                        <table class="table table-hover table-bordered">
+                            <thead>
+                                <tr>
+                                    <th>结构分部名称</th>
+                                    <th width="160">编办</th>
+                                    <th width="160">添加时间</th>
+                                    <th width="70">操作</th>
+                                </tr>
+                            </thead>
+                            <tbody id="showArea">
+                                <% for(let lib of templateLibs){ %>
+                                <tr class="libTr">
+                                    <td id="<%= lib.ID%>"><a href="/structuralSegment/edit/<%= lib.ID%>?locked=true"><%= lib.name%></a></td>
+                                    <td><%= lib.compilationName%></td>
+                                    <td><%= moment(lib.createDate).format('YYYY-MM-DD')%></td>
+                                    <td>
+                                        <a class="lock-btn-control disabled" href="javascript:void(0);"
+                                            style="color: #0275d8" onclick='getFeatureLib("<%= lib.ID%>")' title="编辑"><i
+                                                class="fa fa-pencil-square-o"></i></a>
+                                        <a class="text-danger lock-btn-control disabled" href="javascript:void(0);"
+                                            onclick='showDeleteModal("<%= lib.ID%>")' title="删除"><i
+                                                class="fa fa-remove"></i></a>
+                                        <a class="lock" data-locked="true" href="javascript:void(0);" title="解锁"><i
+                                                class="fa fa-unlock-alt"></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="/structuralSegment/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 class="form-control" name="compilationId">
+                            <% for (let compilation of compilationList) { %>
+                            <% if (compilation.name !== '所有') { %>
+                            <option value="<%= compilation._id %>"><%= compilation.name %></option>
+                            <% }} %>
+                        </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 src="/public/web/lock_util.js"></script>
+<script type="text/javascript" src="/web/maintain/structural_segment_lib/js/structural_segment.js"></script>

+ 81 - 0
web/maintain/structural_segment_lib/js/structural_segment.js

@@ -0,0 +1,81 @@
+/**
+ * Created by zhang on 2018/9/3.
+ */
+$(document).ready(function() {
+    // 保存按钮
+    $("#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 {
+                    await ajaxPost("/structuralSegment/saveLib",{query:{ID:libID},data:{name:name}});
+                    $("#"+libID).children("a").text(name);
+                    $("#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("/structuralSegment/deleteLibByID",{ID:libID});
+                    if(result.ok){
+                        $("#"+libID).parent(".libTr").remove();
+                    }
+                    $("#del").modal('hide');
+                }catch (err){
+                    console.log(err);
+                }
+            }
+        }
+    });
+
+    // 锁定、解锁
+    $('.lock').click(function () {
+        lockUtil.handleLockClick($(this));
+    });
+});
+
+async function getFeatureLib (ID) {
+    try {
+        const lib = await ajaxPost("/structuralSegment/findLib",{ID});
+        if(lib){
+            $("#renameText").val(lib.name);
+            $("#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});
+}

+ 73 - 0
web/maintain/structural_segment_lib/js/structural_segment_edit.js

@@ -0,0 +1,73 @@
+/**
+ * Created by zhang on 2018/9/3.
+ */
+
+$(document).ready(function () {
+    const locked = lockUtil.getLocked();
+    lockUtil.lockTools($(document.body), locked);
+    try {
+        let tem = sortJson(JSON.parse($("#originalFeature").val()));
+        $("#templateLibs").val(JSON.stringify(tem.data,null,4));
+    }catch (err){
+        console.log(err);
+    }
+
+   $("#format").click( function() {
+       try {
+           let jsonText =  $("#templateLibs").val();
+           $("#templateLibs").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 =  $("#templateLibs").val();
+            if(jsonText.indexOf("'")!=-1){
+                alert("输入的格式不能包含 ' 位于:"+jsonText.substr(jsonText.indexOf("'")-15,18));
+                return;
+            }
+            let newFeature = await ajaxPost("/structuralSegment/saveLib",{query:{ID:libID},data:{data:JSON.parse(jsonText)}});
+        }catch (err){
+            console.log(err);
+            alert("保存失败,请查看输入数据");
+        }
+    });
+    $("#createNormal").click(()=>{
+        $("#createNormal").click(async function() {
+            let explorer = [ 
+                {
+                    "valuationName" : "粤建市[2019]6号",
+                    "monomerType" : "building",
+                    "items" : [ 
+                        {
+                            "type" : "单项工程",
+                            "key" : "basicEngineering",
+                            "dispName" : "基础工程",
+                            "subItems" : [ 
+                                {
+                                    "type" : "单位工程",
+                                    "key" : "foundationTreatment",
+                                    "feeType" : "建筑工程",
+                                    "engineering" : "房屋建筑与装饰工程",
+                                    "dispName" : "基础处理与基坑支护工程",
+                                    "calcProgram" : "计算程序2018一般/简易计税(标准)-粤建市[2019]6号",
+                                    "IndicatorSegment" : "基础工程"
+                                }
+                            ],
+                            
+                        }
+                    ]
+                }
+            ];
+            try {
+                let jsonText =  JSON.stringify(explorer);
+                $("#templateLibs").val(JSON.stringify(JSON.parse(jsonText),null,4));
+            }catch (err){
+                console.log(err);
+            }
+        })
+    })
+});