Bladeren bron

feat: 增加递延清单库编辑器

zhangweicheng 1 jaar geleden
bovenliggende
commit
13dfae17ea

+ 37 - 0
modules/all_models/bill_code.js

@@ -0,0 +1,37 @@
+//单体模板库
+const mongoose = require('mongoose');
+const Schema = mongoose.Schema;
+const oprSchema = require('../all_schemas/opr_schema');
+const billCodeLib = new Schema({
+        ID:{type:String,index:true},
+        creator: String,
+        createDate: Number,
+        recentOpr: [oprSchema],
+        name: String,
+        compilationID: String
+    },
+    {versionKey: false}
+);
+
+mongoose.model("std_bill_code_lib", billCodeLib,"std_bill_code_lib");
+
+
+
+const billCodeItem = new Schema({
+    ID:{type:String,index:true},
+    libID: {type:String,index:true},
+    code: {type:String},
+    name: String,
+    formatName: String,
+    formatName2: String,
+    unit: String,
+    subArea: Boolean,
+    startValue: Number,
+    stepValue: Number,
+    startCode: String,
+},
+{versionKey: false}
+);
+
+billCodeItem.index({ libID: 1, code: 1 });
+mongoose.model("std_bill_code_item", billCodeItem,"std_bill_code_item");

+ 5 - 0
modules/all_models/engineering_lib.js

@@ -74,6 +74,11 @@ let modelSchema = {
         type: Schema.Types.Mixed,
         default: []
     },
+    //车船税文件
+    billCode_lib: {
+        type: Schema.Types.Mixed,
+        default: []
+    },
     //设置人材机显示列
     glj_col:{
         showAdjustPrice:Boolean//是否显示调整价列

+ 118 - 0
modules/bill_code_lib/controllers/bill_code_controller.js

@@ -0,0 +1,118 @@
+/**
+ * Created by zhang on 2018/9/3.
+ */
+import BaseController from "../../common/base/base_controller";
+import billCodeFacade from "../facade/bill_code_facade";
+let config = require("../../../config/config.js");
+let logger = require('../../../logs/log_helper').logger;
+import CompilationModel from '../../users/models/compilation_model';
+
+class BillCodeController 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 billCodeFacade.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/bill_code_lib/html/main", renderData);
+    }
+    async addLib(request, response){
+        try {
+            await billCodeFacade.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 billCodeFacade.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 billCodeFacade.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 billCodeFacade.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 billCodeSegment = await billCodeFacade.findByCondition({'ID':libID});
+        let items = await billCodeFacade.findItemsByCondition({'libID':libID},"-_id -libID -ID");
+        console.log(items);
+        if(billCodeSegment){
+            let randerData = {
+                title:'递延清单',
+                mainURL:'/billCode/main',
+                libName:billCodeSegment.name,
+                userAccount: request.session.managerData.username,
+                userID: request.session.managerData.userID,
+                templateLibs:JSON.stringify({data:items}),
+                libID:libID,
+                LicenseKey:config.getLicenseKey(process.env.NODE_ENV),
+                layout: 'maintain/common/html/edit_layout'
+            };
+            response.render("maintain/bill_code_lib/html/edit", randerData);
+        }else {
+            response.redirect(request.headers.referer);
+        }
+    }
+}
+export default BillCodeController;

+ 58 - 0
modules/bill_code_lib/facade/bill_code_facade.js

@@ -0,0 +1,58 @@
+/**
+ * Created by zhang on 2018/9/3.
+ */
+import mongoose from "mongoose";
+const uuidV1 = require('uuid/v1');
+let moment = require("moment");
+let billCodeLibModel = mongoose.model('std_bill_code_lib');
+let billCodeItemModel = mongoose.model('std_bill_code_item');
+let compilationModel = mongoose.model('compilation');
+
+
+let billCodeLib = {
+    findByCondition:async function(conditions,options,single=true){
+        if(single == true){
+            return await billCodeLibModel.findOne(conditions,options);
+        }else {
+            return await billCodeLibModel.find(conditions,options);
+        }
+    },
+    findItemsByCondition:async function(conditions,options){
+        return await  billCodeItemModel.find(conditions,options).lean();
+    },
+    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 billCodeLibModel.create(newLib);
+        }else {
+            throw  new Error("没有找到该编办!");
+        }
+    },
+    saveLib:async function(param) {
+        await billCodeItemModel.deleteMany({libID:param.query.ID});
+        const items = param.data.data.map((item) => {
+            item.libID = param.query.ID;
+            item.ID = uuidV1();
+            return item;
+        });
+        return await billCodeItemModel.insertMany(items);
+    },
+    deleteLibByID:async function(ID){
+        await billCodeItemModel.deleteMany({libID:ID});
+        return await billCodeLibModel.deleteOne({ID:ID});
+    },
+};
+
+export default billCodeLib

+ 21 - 0
modules/bill_code_lib/routes/bill_code_routes.js

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

+ 7 - 1
modules/users/controllers/compilation_controller.js

@@ -25,6 +25,7 @@ import projectFeatureFacade from "../../project_feature_lib/facade/project_featu
 import basicInfoFacade from "../../basic_info_lib/facade/basic_info_facade";
 import progressiveFacade from "../../progressive_interval_lib/facade/progressive_facade";
 import vvTaxFacade from "../../vehicleVessel_lib/facade/vvTax_facade";
+import billCodeFacade from "../../bill_code_lib/facade/bill_code_facade";
 import {default as category, List as categoryList} from "../../common/const/category_const.js";
 import locationList from  "../../common/const/locationList";
 
@@ -198,7 +199,8 @@ class CompilationController extends BaseController {
             billsTemplateData = [],
             featureList = [],
             progressiveList = [],
-            vvTaxList = [];
+            vvTaxList = [],
+            billCodeList = [];
         let valuationData = {}, valuationList = {}, artificialCoefficientList = [], calculationList = [], billsGuidanceList = [], mainTreeColList = [];
         let billTemplateList = [];
         try {
@@ -265,6 +267,9 @@ class CompilationController extends BaseController {
             //获取车船税库
             vvTaxList = await vvTaxFacade.findByCondition({}, false, false);
 
+             //获取递延清单库
+             billCodeList = await billCodeFacade.findByCondition({}, false, false);
+
         } catch (error) {
             console.log(error);
         }
@@ -293,6 +298,7 @@ class CompilationController extends BaseController {
             infoList: JSON.stringify(infoList),
             progressiveList:JSON.stringify(progressiveList),
             vvTaxList: JSON.stringify(vvTaxList),
+            billCodeList: JSON.stringify(billCodeList),
             title : config[process.env.NODE_ENV].title?config[process.env.NODE_ENV].title:'养护云版',
             layout: 'users/views/layout/layout',
             LicenseKey:config.getLicenseKey(process.env.NODE_ENV)

+ 3 - 0
modules/users/models/engineering_lib_model.js

@@ -190,6 +190,9 @@ class EngineeringLibModel extends BaseModel {
         //判断车船税
         data.vvTax_lib = this._validLib(data.vvTax_lib);
 
+        //判断递延清单库
+        data.billCode_lib = this._validLib(data.billCode_lib);
+
         //计税方式组合
         data.tax_group = this._validLib(data.tax_group);
 

+ 0 - 1
operation.js

@@ -1,7 +1,6 @@
 let express = require('express');
 // import schedule from 'node-schedule';
 let schedule = require("node-schedule");
-
 let config = require("./config/config.js");
 config.setupDb(process.env.NODE_ENV);
 let dbm = require("./config/db/db_manager");

+ 32 - 0
web/maintain/bill_code_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/bill_code_lib/js/bill_code_edit.js"></script>

+ 147 - 0
web/maintain/bill_code_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="/billCode/main" class="list-group-item list-group-item-action <%= compilation.active %>">
+                            所有
+                        </a>
+                        <% } else { %>
+                        <a id="<%= compilation._id %>" href="/billCode/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="/billCode/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="/billCode/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/bill_code_lib/js/bill_code.js"></script>

+ 81 - 0
web/maintain/bill_code_lib/js/bill_code.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("/billCode/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("/billCode/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("/billCode/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});
+}

+ 71 - 0
web/maintain/bill_code_lib/js/bill_code_edit.js

@@ -0,0 +1,71 @@
+/**
+ * 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("/billCode/saveLib",{query:{ID:libID},data:{data:JSON.parse(jsonText)}});
+        }catch (err){
+            console.log(err);
+            alert("保存失败,请查看输入数据");
+        }
+    });
+
+    $("#createNormal").click( function() {
+        let explorer = [ 
+            {
+                "code" : "202-2-1",
+                "name" : "路面厚",
+                "formatName" : "挖除%smm以内厚水泥混凝土路面",
+                "formatName2" : "挖除%smm厚水泥混凝土路面",
+                "unit":"m2",
+                "subArea":false,
+                "startValue":50,
+                "stepValue":50,
+                "startCode":'2'
+            },
+            {
+                "code" : "202-2-2",
+                "name" : "路面厚",
+                "formatName" : "挖除%smm以内厚沥青混凝土路面",
+                "formatName2" : "挖除%smm厚沥青混凝土路面",
+                "unit":"m2",
+                "subArea":true,
+                "startValue":20,
+                "stepValue":10,
+                "startCode":'2'
+            }
+        ];
+        try {
+            let jsonText =  JSON.stringify(explorer);
+            $("#templateLibs").val(JSON.stringify(JSON.parse(jsonText),null,4));
+        }catch (err){
+            console.log(err);
+        }
+    })
+});

+ 33 - 33
web/maintain/structural_segment_lib/js/structural_segment_edit.js

@@ -35,39 +35,39 @@ $(document).ready(function () {
             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);
+
+    $("#createNormal").click( 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);
+        }
     })
+    
 });

+ 26 - 1
web/users/js/compilation.js

@@ -334,7 +334,12 @@ $(document).ready(function() {
                 $("#vvTax-area").show();
                 $("#add-compilation-title").text('添加车船税');
                 break;
+            case 'billCode':
+                $("#billCode-area").show();
+                $("#add-compilation-title").text('添加递延清单库');
+                break;    
         }
+
         $("#addcompilation").modal('show');
     });
 
@@ -350,7 +355,7 @@ $(document).ready(function() {
     });
 
     // 移除操作
-    $(".bill-list, .ration-list, .glj-list, .fee-list, .artificial-list, .program-list, .billsGuidance-list,.feature-list,.info-list,.progressive-list,.vvTax-list").on("click", ".remove-lib", function() {
+    $(".bill-list, .ration-list, .glj-list, .fee-list, .artificial-list, .program-list, .billsGuidance-list,.feature-list,.info-list,.progressive-list,.vvTax-list,.billCode-list").on("click", ".remove-lib", function() {
         $(this).parent().remove();
     });
 
@@ -640,6 +645,7 @@ function initCompilation() {
     let infoData = infoList == undefined ? [] : JSON.parse(infoList);
     let progressiveData = progressiveList == undefined?[]: JSON.parse(progressiveList);
     let vvTaxData = vvTaxList == undefined?[]: JSON.parse(vvTaxList);
+    let billCodeData = billCodeList == undefined?[]: JSON.parse(billCodeList);
     /*mainTreeCol = mainTreeCol !== '' ? mainTreeCol.replace(/\n/g, '\\n') : mainTreeCol;
     billsTemplateData = billsTemplateData.replace(/\n/g, '\\n');
 
@@ -761,6 +767,14 @@ function initCompilation() {
         html += tmpHtml;
     }
     $("select[name='vvTax_lib']").children("option").first().after(html);
+
+     //递延清单库文件
+     html = '';
+     for(let tmp of billCodeData){
+         let tmpHtml = '<option value="' + tmp.ID + '">' + tmp.name + '</option>';
+         html += tmpHtml;
+     }
+     $("select[name='billCode_lib']").children("option").first().after(html);
 }
 
 /**
@@ -782,6 +796,7 @@ function getAndValidData(model) {
     let infoLib = $("select[name='info_lib']").children("option:selected").val();
     let progressiveLib = $("select[name='progressive_lib']").children("option:selected").val();
     let vvTaxLib = $("select[name='vvTax_lib']").children("option:selected").val();
+    let billCodeLib = $("select[name='billCode_lib']").children("option:selected").val();
 
 
     if (name === '' && model === 'all') {
@@ -804,6 +819,10 @@ function getAndValidData(model) {
     if (model === 'vvTax' && (vvTaxLib === '' || vvTaxLib === undefined)) {
         throw '请选择车船税文件';
     }
+    if (model === 'billCode' && (billCodeLib === '' || billCodeLib === undefined)) {
+        throw '请选择递延清单库文件';
+    }
+
 
     if (model === 'glj' && (gljLib === '' || gljLib === undefined)) {
         throw '请选择人材机库';
@@ -832,6 +851,7 @@ function getAndValidData(model) {
     let infoString = $("select[name='info_lib']").children("option:selected").text();
     let progressiveString = $("select[name='progressive_lib']").children("option:selected").text();
     let vvTaxString = $("select[name='vvTax_lib']").children("option:selected").text();
+    let billCodeLibString = $("select[name='billCode_lib']").children("option:selected").text();
 
 
     let result = {
@@ -879,7 +899,12 @@ function getAndValidData(model) {
         vvTax: {
             id: vvTaxLib,
             name: vvTaxString
+        },
+        billCode: {
+            id: billCodeLib,
+            name: billCodeLibString
         }
+
     };
     return result;
 }

+ 21 - 0
web/users/views/compilation/engineering.html

@@ -159,6 +159,26 @@
                             </div>
                     </div>
 
+                    <div class="row">
+                        <div class="form-group col-md-3">
+                            <label>递延清单库</label>
+                            <div class="billCode-list">
+                                <% if (Object.keys(libData).length > 0 && libData.billCode_lib && libData.billCode_lib.length > 0) { %>
+                                <% libData.billCode_lib.forEach(function (billCode, index){ %>
+                                <p class="form-control-static">
+                                    <a class="pull-right text-danger remove-lib" data-model="billCode" title="移除" data-id="<%= billCode.id %>">
+                                        <span class="glyphicon glyphicon-remove"></span>
+                                    </a>
+                                    <input type="hidden" name="billCode_lib" data-id="<%= billCode.id %>" value="<%= JSON.stringify({id: billCode.id, name: billCode.name}) %>">
+                                    <% if (index === 0) {%><i class="glyphicon glyphicon-flag"></i>&nbsp;<% } %><%= billCode.name %>
+                                </p>
+                                <% }) %>
+                                <% } %>
+                            </div>
+                            <a href="#" class="btn btn-link btn-sm add-compilation" data-model="billCode">添加</a>
+                        </div>
+                    </div>
+
                     <div class="col-md-12">
                         <a data-toggle="modal" data-target="#other_setting" class="btn btn-primary btn-sm " style="margin-right:5px">显示设置</a>
                     </div>
@@ -288,6 +308,7 @@
     let infoList = '<%- infoList %>';
     let progressiveList = '<%- progressiveList %>';
     let vvTaxList = '<%- vvTaxList %>';
+    let billCodeList = '<%- billCodeList %>';
     let colSpread = null;
     let colEditSpread = null;
 </script>

+ 10 - 0
web/users/views/compilation/modal.html

@@ -81,6 +81,16 @@
                         </div>
                     </div>
                 </div>
+                <div class="form-group" id="billCode-area">
+                    <label>递延清单库</label>
+                    <div class="row">
+                        <div class="col-xs-12">
+                            <select class="form-control" name="billCode_lib">
+                                <option value="">请选择递延清单库</option>
+                            </select>
+                        </div>
+                    </div>
+                </div>
                 <div class="form-group" id="artificial-area">
                     <label>人工系数</label>
                     <div class="row">