ソースを参照

指标库 no.7 up

laiguoran 7 年 前
コミット
e15e6b8608

+ 46 - 4
app/controller/lib_controller.js

@@ -100,7 +100,7 @@ module.exports = app => {
         }
 
         /**
-         * 指标源详细页面
+         * 指标源全局参数详细页面
          *
          * @param {object} ctx - egg全局context
          * @return {void}
@@ -118,14 +118,48 @@ module.exports = app => {
                 // if(libInfo.status === libConst.status.enter){
                 //     throw '指标源已入库';
                 // }
+                const renderData = {
+                    libInfo,
+                    libConst
+                };
+                await this.layout('lib/detail.ejs', renderData);
+            } catch (error) {
+                console.log(error);
+                ctx.redirect('/lib');
+            }
+        }
+
+        /**
+         * 指标源项目节参数详细页面
+         *
+         * @param {object} ctx - egg全局context
+         * @return {void}
+         */
+        async detail2 (ctx) {
+            let lid = ctx.params.id;
+            lid = parseInt(lid);
+
+            try{
+                if(isNaN(lid) || lid < 0){
+                    throw '参数有误';
+                }
+                //获取指标源数据
+                const libInfo = await ctx.service.quotaLib.getLibDataById(lid);
+                // if(libInfo.status === libConst.status.enter){
+                //     throw '指标源已入库';
+                // }
 
                 //获取项目节编号
-                // const billsList = await ctx.service.bills.getListById(lid);
+                let billsList = {};
+                if(libInfo){
+                    billsList = await ctx.service.quotaBills.getListByLid(lid);
+                }
                 const renderData = {
                     libInfo,
-                    libConst
+                    libConst,
+                    billsList
                 };
-                await this.layout('lib/detail.ejs', renderData, 'lib/detail-modal.ejs');
+                await this.layout('lib/detail2.ejs', renderData, 'lib/detail-modal.ejs');
             } catch (error) {
                 console.log(error);
                 ctx.redirect('/lib');
@@ -150,12 +184,20 @@ module.exports = app => {
                 if(text === undefined || text !== '确认删除'){
                     throw '参数错误';
                 }
+                //获取指标源数据
+                const libInfo = await ctx.service.quotaLib.getLibDataById(id);
+                if(!libInfo){
+                    throw '不存在该标段';
+                }
+                //删清指标源和清单数据
                 const result = ctx.service.quotaLib.deleteLibById(id);
 
                 if (!result) {
                     throw '删除标段失败';
                 }
 
+                fs.unlinkSync(libInfo.filepath);
+
                 ctx.redirect('/lib');
             } catch (error) {
                 console.log(error);

+ 28 - 28
app/public/js/global.js

@@ -1,19 +1,18 @@
 /*全局自适应高度*/
 function autoFlashHeight(){
     var cHeader = $(".c-header").height();
-    var sBar = $(".sjs-bar").height();
     $(".sjs-height-1").height($(window).height()-cHeader-160);
     $(".sjs-height-2").height($(window).height()-cHeader-191);
-    $(".sjs-height-3").height($(window).height()-cHeader-sBar-560);
+    $(".sjs-height-3").height($(window).height()-cHeader-520);
 };
 $(window).resize(autoFlashHeight);
 /*全局自适应高度结束*/
 $(function(){
-/*侧滑*/
-$(".open-sidebar").click(function(){
-    $(".slide-sidebar").animate({width:"800"}).addClass("open");
-});
-$("body").click(function(event){
+    /*侧滑*/
+    $(".open-sidebar").click(function(){
+        $(".slide-sidebar").animate({width:"800"}).addClass("open");
+    });
+    $("body").click(function(event){
         var e = event || window.event; //浏览器兼容性
         if(!$(event.target).is('a')) {
             var elem = event.target || e.srcElement;
@@ -27,27 +26,28 @@ $("body").click(function(event){
         }
 
     });
-/*侧滑*/
-/*工具提示*/
-$(function () {
-  $('[data-toggle="tooltip"]').tooltip()
-});
-/*侧栏菜单*/
-$(".bg-nav > li > a").click(function() {
-      var self = $(this);
-      var subMenu = $(this).siblings('ul.sub-menu');
-      if(subMenu.length > 0) {
-          if(subMenu.is(":visible")) {
-              self.find('.menu-arrow').removeClass('fa-angle-up').addClass('fa-angle-down');
-              subMenu.slideUp('fast');
-              self.parent().removeClass('active');
-          }else{
-              self.parent().addClass('active');
-              self.find('.menu-arrow').removeClass('fa-angle-down').addClass('fa-angle-up');
-              subMenu.slideDown('fast');
-          }
-      }
-  });
+    /*侧滑*/
+    /*工具提示*/
+    $(function () {
+        $('[data-toggle="tooltip"]').tooltip();
+        $('[data-toggle="popover"]').popover()
+    });
+    /*侧栏菜单*/
+    $(".bg-nav > li > a").click(function() {
+        var self = $(this);
+        var subMenu = $(this).siblings('ul.sub-menu');
+        if(subMenu.length > 0) {
+            if(subMenu.is(":visible")) {
+                self.find('.menu-arrow').removeClass('fa-angle-up').addClass('fa-angle-down');
+                subMenu.slideUp('fast');
+                self.parent().removeClass('active');
+            }else{
+                self.parent().addClass('active');
+                self.find('.menu-arrow').removeClass('fa-angle-down').addClass('fa-angle-up');
+                subMenu.slideDown('fast');
+            }
+        }
+    });
 });
 
 /**

+ 1 - 0
app/router.js

@@ -18,6 +18,7 @@ module.exports = app => {
     app.get('/lib', sessionAuth, 'libController.index');
     app.post('/lib/upload', sessionAuth, 'libController.upload');
     app.get('/lib/detail/:id', sessionAuth, 'libController.detail');
+    app.get('/lib/detail2/:id', sessionAuth, 'libController.detail2');
     app.post('/lib/delete', sessionAuth, 'libController.delete');
     app.post('/lib/enter', sessionAuth, 'libController.enter');
 

+ 0 - 29
app/service/bills.js

@@ -1,29 +0,0 @@
-'use strict';
-
-/**
- *
- *
- * @author EllisRan.
- * @date 2018/4/25
- * @version
- */
-
-module.exports = app => {
-
-    class Bills extends app.BaseService {
-
-        /**
-         * 构造函数
-         *
-         * @param {Object} ctx - egg全局变量
-         * @return {void}
-         */
-        constructor(ctx) {
-            super(ctx);
-            this.tableName = 'quota_bills';
-        }
-
-    }
-
-    return Bills;
-}

+ 49 - 0
app/service/quota_bills.js

@@ -0,0 +1,49 @@
+'use strict';
+
+/**
+ *
+ *
+ * @author EllisRan.
+ * @date 2018/4/25
+ * @version
+ */
+
+module.exports = app => {
+
+    class QuotaBills extends app.BaseService {
+
+        /**
+         * 构造函数
+         *
+         * @param {Object} ctx - egg全局变量
+         * @return {void}
+         */
+        constructor(ctx) {
+            super(ctx);
+            this.tableName = 'quota_bills';
+        }
+
+        /**
+         * 获取标段项目节列表
+         *
+         * @param {Object} lid - 指标库id
+         * @return {Array} - 返回列表数据
+         */
+        async getListByLid(lid) {
+
+            this.initSqlBuilder();
+
+            this.sqlBuilder.setAndWhere('lib_id', {
+                value: lid,
+                operate: '=',
+            });
+
+            const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
+
+            return await this.db.query(sql, sqlParam);
+        }
+
+    }
+
+    return QuotaBills;
+}

+ 14 - 2
app/service/quotaLib.js

@@ -94,7 +94,19 @@ module.exports = app => {
          * @return {Boolean} - 删除结果
          */
         async deleteLibById(id) {
-            return await this.deleteById(id);
+            const conn = await this.db.beginTransaction(); // 初始化事务
+            try{
+                const libResult = await conn.deleteById(id);
+                const billsResult = await conn.delete('is_quota_bills',{lib_id: id});
+                await conn.commit(); // 提交事务
+                return true;
+            } catch(err) {
+                console.log(err);
+                await conn.rollback();
+                throw err;
+                return false;
+            }
+
         }
 
         /**
@@ -138,7 +150,7 @@ module.exports = app => {
                     RoadLength: jsonData.properties.RoadLength,
                     RoadWidth: jsonData.properties.RoadWidth,
                 };
-                // postData.push(updateData);
+
                 const libResult = await conn.insert(this.tableName, insertData);
                 const lib_id = libResult.insertId;
                 const billsData = jsonData.bills;

+ 21 - 186
app/view/lib/detail.ejs

@@ -3,208 +3,43 @@
         <div class="title-main">
             <h2>
                 <%= libInfo.filename %>
-                <% if(libInfo.status === libConst.status.pend) { %><a href="#storage" data-toggle="modal" data-target="#storage" class="btn btn-primary btn-sm pull-right">入库</a><% } %>
-                <a href="#del" data-toggle="modal" data-target="#del" class="btn btn-outline-danger btn-sm pull-right">从库中删除</a>
+                <a href="/lib/detail2/<%= libInfo.id %>" class="btn btn-primary btn-sm pull-right">填写项目节参数</a>
             </h2>
         </div>
     </div>
     <div class="content-wrap">
-        <div class="c-header p-0 col-12"></div>
+        <div class="c-header p-0 col-12">
+            <ul class="nav nav-tabs">
+                <li class="nav-item">
+                    <a class="nav-link active" href="javascript:void(0);">全局参数</a>
+                </li>
+                <li class="nav-item">
+                    <a class="nav-link disabled" data-container="body" data-toggle="popover" data-placement="right" data-content="请点击右上角「填写项目节参数」">项目节参数</a>
+                </li>
+            </ul>
+        </div>
         <div class="c-body">
             <div class="row">
                 <div class="col-5">
-                    <div class="sjs-height-1" id="">
-                        <table class="table table-bordered table-sm">
-                            <tr>
-                                <th></th>
-                                <th>项目节编号</th>
-                                <th>名称</th>
-                                <th>单位</th>
-                                <th>数量</th>
-                                <th>合价</th>
-                            </tr>
-                            <tr>
-                                <td>1</td>
-                                <td>1</td>
-                                <td>第一部分 建筑安装工程费</td>
-                                <td>公路公里</td>
-                                <td></td>
-                                <td>1045756</td>
-                            </tr>
-                            <tr>
-                                <td>2</td>
-                                <td>1-1</td>
-                                <td>临时工程</td>
-                                <td>公路公里</td>
-                                <td></td>
-                                <td>50000</td>
-                            </tr>
-                            <tr class="table-primary">
-                                <td>3</td>
-                                <td>1-1-1</td>
-                                <td>临时道路</td>
-                                <td>km</td>
-                                <td></td>
-                                <td></td>
-                            </tr>
-                            <tr>
-                                <td>4</td>
-                                <td>1-1-2</td>
-                                <td>临时便桥</td>
-                                <td>m/座</td>
-                                <td></td>
-                                <td></td>
-                            </tr>
-                            <tr>
-                                <td>5</td>
-                                <td>1-1-3</td>
-                                <td>临时轨道铺设</td>
-                                <td>km</td>
-                                <td></td>
-                                <td></td>
-                            </tr>
-                            <tr>
-                                <td>6</td>
-                                <td>1-1-4</td>
-                                <td>临时电力线路</td>
-                                <td>km</td>
-                                <td></td>
-                                <td></td>
-                            </tr>
-                            <tr>
-                                <td>7</td>
-                                <td>1-1-5</td>
-                                <td>临时电力线路</td>
-                                <td>km</td>
-                                <td></td>
-                                <td></td>
-                            </tr>
-                            <tr>
-                                <td>8</td>
-                                <td>1-1-6</td>
-                                <td>临时码头</td>
-                                <td>km</td>
-                                <td></td>
-                                <td></td>
-                            </tr>
-                            <tr>
-                                <td>9</td>
-                                <td>1-1-7</td>
-                                <td>临时道路修建、养护与拆除(包括原道路的养护费)</td>
-                                <td>km</td>
-                                <td></td>
-                                <td></td>
-                            </tr>
-                        </table>
-                    </div>
-                </div>
-                <div class="col-7">
-                    <div class="sjs-height-3">
-                        <table class="table table-bordered table-sm">
-                            <tr>
-                                <th>指标编号</th>
-                                <th>项目或费用名称</th>
-                                <th colspan="2">指标单位</th>
-                                <th>合价(元)</th>
-                                <th>计算规则</th>
-                                <th>指标计算</th>
-                                <th>经济指标</th>
-                            </tr>
-                            <tr>
-                                <td>z1-a</td>
-                                <td>临时道路</td>
-                                <td></td>
-                                <td>km</td>
-                                <td></td>
-                                <td>指新建便道与利用原有道路的总长</td>
-                                <td></td>
-                                <td></td>
-                            </tr>
-                            <tr>
-                                <td>z1-a-1</td>
-                                <td>临时道路公路公里造价</td>
-                                <td>元</td>
-                                <td>公路公里</td>
-                                <td></td>
-                                <td>合价/路线总长度</td>
-                                <td></td>
-                                <td></td>
-                            </tr>
-                            <tr>
-                                <td>z1-a-2</td>
-                                <td>临时道路公里造价</td>
-                                <td>元</td>
-                                <td>km</td>
-                                <td></td>
-                                <td>km指临时道路长度,合价/临时道路长</td>
-                                <td></td>
-                                <td></td>
-                            </tr>
-                            <tr>
-                                <td>z1-a-3</td>
-                                <td>临时道路建筑面积造价</td>
-                                <td>元</td>
-                                <td>m2</td>
-                                <td></td>
-                                <td>合价/(临时道路长度×路基均宽)</td>
-                                <td></td>
-                                <td></td>
-                            </tr>
-                            <tr>
-                                <td>z1-a-4</td>
-                                <td>临时道路造价占比</td>
-                                <td></td>
-                                <td>%</td>
-                                <td></td>
-                                <td>合价/临时工程费用</td>
-                                <td></td>
-                                <td></td>
-                            </tr>
-                            <tr>
-                                <td>z1-a-5</td>
-                                <td>临时道路面积长度比</td>
-                                <td></td>
-                                <td>%</td>
-                                <td></td>
-                                <td>临时道路建筑面积/临时道路长度</td>
-                                <td></td>
-                                <td></td>
-                            </tr>
-                            <tr>
-                                <td>z1-a-6</td>
-                                <td>临时道路路线长度比</td>
-                                <td>km</td>
-                                <td>公路公里</td>
-                                <td></td>
-                                <td>临时道路长度/路线总长度</td>
-                                <td></td>
-                                <td></td>
-                            </tr>
-                        </table>
-                    </div>
-                    <div class="sjs-bottom-2">
-                        <legend class="mt-3">填写参数</legend>
-                        <table class="table table-bordered table-sm">
+                    <div class="sjs-height-1">
+                        <!--全局参数-->
+                        <table class="table table-bordered table-sm table-hover">
                             <tr><th colspan="4" class="text-center">全局参数</th></tr>
                             <tr><th colspan="4" class="text-center"><b class="text-danger">*全局参数影响所有指标,谨慎修改</b></th></tr>
                             <tr>
-                                <th>总造价</th><td><input class="form-control form-control-sm"></td>
-                                <th>路线总长度</th><td><input class="form-control form-control-sm"></td>
+                                <th>参数名称</th><th>绑定分项节点</th><th>参数数值</th>
                             </tr>
                             <tr>
-                                <th>路基工程费用</th><td><input class="form-control form-control-sm"></td>
-                                <th>边沟圬工体积</th><td><input class="form-control form-control-sm"></td>
+                                <td>总造价</th><td></td><td><input class="form-control form-control-sm"></td>
+                            </tr>
+                            <tr>
+                                <td>路线总长度</td><td>1-1-2</td><td><input class="form-control form-control-sm" value="15123"></td>
                             </tr>
-                        </table>
-                        <table class="table table-bordered table-sm">
-                            <tr><th colspan="4" class="text-center">1-1 项目节 参数</th></tr>
                             <tr>
-                                <th>总造价</th><td><input class="form-control form-control-sm"></td>
-                                <th>路线总长度</th><td><input class="form-control form-control-sm"></td>
+                                <td>路基工程费用</td><td>1-4-1</td><td><input class="form-control form-control-sm" value="50410"></td>
                             </tr>
                             <tr>
-                                <th>路基工程费用</th><td><input class="form-control form-control-sm"></td>
-                                <th>边沟圬工体积</th><td><input class="form-control form-control-sm"></td>
+                                <td>边沟圬工体积</td><td></td><td><input class="form-control form-control-sm"></td>
                             </tr>
                         </table>
                     </div>

+ 160 - 0
app/view/lib/detail2.ejs

@@ -0,0 +1,160 @@
+<div class="panel-content">
+    <div class="panel-title fluid">
+        <div class="title-main">
+            <h2>
+                <%= libInfo.filename %>
+                <% if(libInfo.status === libConst.status.pend) { %><a href="#storage" data-toggle="modal" data-target="#storage" class="btn btn-primary btn-sm pull-right">入库</a><% } %>
+                <a href="#del" data-toggle="modal" data-target="#del" class="btn btn-outline-danger btn-sm pull-right">从库中删除</a>
+            </h2>
+        </div>
+    </div>
+    <div class="content-wrap">
+        <div class="c-header p-0 col-12">
+            <ul class="nav nav-tabs">
+                <li class="nav-item">
+                    <a class="nav-link" href="/lib/detail/<%= libInfo.id %>">全局参数</a>
+                </li>
+                <li class="nav-item">
+                    <a class="nav-link active" href="javascript:void(0);">项目节参数</a>
+                </li>
+            </ul>
+        </div>
+        <div class="c-body">
+            <div class="row">
+                <div class="col-5">
+                    <div class="sjs-height-1">
+                        <table class="table table-bordered table-sm">
+                            <tr>
+                                <th></th>
+                                <th>项目节编号</th>
+                                <th>名称</th>
+                                <th>单位</th>
+                                <th>数量</th>
+                                <th>合价</th>
+                            </tr>
+                            <% if(billsList.length > 0) { %>
+                            <% billsList.forEach(function(bills) { %>
+                            <tr>
+                                <td><%= bills.id %></td>
+                                <td><% if(bills.code !== '') { %><%= bills.code %><% } else { %><%= bills.b_code %><% } %></td>
+                                <td><%= bills.name %></td>
+                                <td><%= bills.units %></td>
+                                <td><% if(bills.quantity !== 0) { %><%= bills.quantity %><% } %></td>
+                                <td><% if(bills.total_price !== 0) { %><%= bills.total_price %><% } %></td>
+                            </tr>
+                            <% }) %>
+                            <% } %>
+                        </table>
+                    </div>
+                </div>
+                <div class="col-7">
+                    <div class="sjs-height-3">
+                        <table class="table table-bordered table-sm">
+                            <tr>
+                                <th>指标编号</th>
+                                <th>项目或费用名称</th>
+                                <th colspan="2">指标单位</th>
+                                <th>合价(元)</th>
+                                <th>计算规则</th>
+                                <th>指标计算</th>
+                                <th>经济指标</th>
+                            </tr>
+                            <tr>
+                                <td>z1-a</td>
+                                <td>临时道路</td>
+                                <td></td>
+                                <td>km</td>
+                                <td></td>
+                                <td>指新建便道与利用原有道路的总长</td>
+                                <td></td>
+                                <td></td>
+                            </tr>
+                            <tr>
+                                <td>z1-a-1</td>
+                                <td>临时道路公路公里造价</td>
+                                <td>元</td>
+                                <td>公路公里</td>
+                                <td></td>
+                                <td>合价/路线总长度</td>
+                                <td></td>
+                                <td></td>
+                            </tr>
+                            <tr>
+                                <td>z1-a-2</td>
+                                <td>临时道路公里造价</td>
+                                <td>元</td>
+                                <td>km</td>
+                                <td></td>
+                                <td>km指临时道路长度,合价/临时道路长</td>
+                                <td></td>
+                                <td></td>
+                            </tr>
+                            <tr>
+                                <td>z1-a-3</td>
+                                <td>临时道路建筑面积造价</td>
+                                <td>元</td>
+                                <td>m2</td>
+                                <td></td>
+                                <td>合价/(临时道路长度×路基均宽)</td>
+                                <td></td>
+                                <td></td>
+                            </tr>
+                            <tr>
+                                <td>z1-a-4</td>
+                                <td>临时道路造价占比</td>
+                                <td></td>
+                                <td>%</td>
+                                <td></td>
+                                <td>合价/临时工程费用</td>
+                                <td></td>
+                                <td></td>
+                            </tr>
+                            <tr>
+                                <td>z1-a-5</td>
+                                <td>临时道路面积长度比</td>
+                                <td></td>
+                                <td>%</td>
+                                <td></td>
+                                <td>临时道路建筑面积/临时道路长度</td>
+                                <td></td>
+                                <td></td>
+                            </tr>
+                            <tr>
+                                <td>z1-a-6</td>
+                                <td>临时道路路线长度比</td>
+                                <td>km</td>
+                                <td>公路公里</td>
+                                <td></td>
+                                <td>临时道路长度/路线总长度</td>
+                                <td></td>
+                                <td></td>
+                            </tr>
+                        </table>
+                    </div>
+                    <div class="sjs-bottom-2">
+                        <legend class="mt-3">填写参数</legend>
+                        <!--本节点参数-->
+                        <table class="table table-bordered table-sm table-hover">
+                            <tr><th colspan="4" class="text-center">1-1 项目节 参数</th></tr>
+                            <tr>
+                                <th>参数名称</th><th>绑定分项节点</th><th>参数数值</th>
+                            </tr>
+                            <tr>
+                                <td>总造价</th><td></td><td><input class="form-control form-control-sm"></td>
+                            </tr>
+                            <tr>
+                                <td>路线总长度</td><td>1-1-2</td><td><input class="form-control form-control-sm" value="15123"></td>
+                            </tr>
+                            <tr>
+                                <td>路基工程费用</td><td>1-4-1</td><td><input class="form-control form-control-sm" value="50410"></td>
+                            </tr>
+                            <tr>
+                                <td>边沟圬工体积</td><td></td><td><input class="form-control form-control-sm"></td>
+                            </tr>
+                        </table>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>

+ 6 - 6
config/menu.js

@@ -9,18 +9,18 @@
  */
 
 const menu = {
-    lib: {
-        name: '指标库',
-        icon: 'fa-list-ul',
-        display: true,
-        url: '/lib',
-    },
     template: {
         name: '指标模板',
         icon: 'fa-file-text-o',
         display: true,
         url: '/template',
     },
+    lib: {
+        name: '指标库',
+        icon: 'fa-list-ul',
+        display: true,
+        url: '/lib',
+    },
     compare: {
         name: '指标对比',
         icon: 'fa-search',