Browse Source

提交新增标段代码

olym 7 years ago
parent
commit
7ed2b230dc

+ 32 - 0
app/const/tender.js

@@ -0,0 +1,32 @@
+'use strict';
+
+/**
+ * 标段相关常量
+ *
+ * @author CaiAoLin
+ * @date 2018/2/5
+ * @version
+ */
+
+// 标段状态
+const status = {
+    APPROVAL: 1,
+};
+
+const statusString = [];
+statusString[status.APPROVAL] = '审批中';
+
+// 标段类型
+const type = {
+    TJ: 1,
+};
+
+const typeString = [];
+typeString[type.TJ] = '土建标';
+
+module.exports = {
+    status,
+    statusString,
+    type,
+    typeString,
+};

+ 30 - 0
app/controller/tender_controller.js

@@ -8,6 +8,7 @@
  * @version
  * @version
  */
  */
 
 
+const tenderConst = require('../const/tender');
 module.exports = app => {
 module.exports = app => {
 
 
     class TenderController extends app.BaseController {
     class TenderController extends app.BaseController {
@@ -31,14 +32,43 @@ module.exports = app => {
          * @return {void}
          * @return {void}
          */
          */
         async index(ctx) {
         async index(ctx) {
+            // 获取新增标段的规则
+            const rule = ctx.service.tender.rule('add');
+            const frontRule = ctx.helper.validateConvert(rule);
 
 
             // 根据项目id获取标段数据
             // 根据项目id获取标段数据
             const tenderList = await ctx.service.tender.getList();
             const tenderList = await ctx.service.tender.getList();
+            console.log(tenderConst.type);
             const renderData = {
             const renderData = {
                 tenderList,
                 tenderList,
+                rule: JSON.stringify(frontRule),
+                tenderConst,
             };
             };
             await this.layout('tender/index.ejs', renderData);
             await this.layout('tender/index.ejs', renderData);
         }
         }
+
+        /**
+         * 添加标段操作
+         *
+         * @param {Object} ctx - egg全局变量
+         * @return {void}
+         */
+        async add(ctx) {
+            try {
+                const rule = ctx.service.tender.rule('add');
+                ctx.helper.validate(rule);
+
+                const result = ctx.service.tender.add(ctx.request.body);
+                if (!result) {
+                    throw '新增标段失败';
+                }
+            } catch (error) {
+                console.log(error);
+                this.setMessage(error.toString(), this.messageType.ERROR);
+            }
+
+            ctx.redirect(ctx.request.headers.referer);
+        }
     }
     }
 
 
     return TenderController;
     return TenderController;

+ 4 - 0
app/extend/helper.js

@@ -177,6 +177,10 @@ module.exports = {
 
 
         const postDataKey = Object.keys(postData);
         const postDataKey = Object.keys(postData);
         const ruleKey = Object.keys(rule);
         const ruleKey = Object.keys(rule);
+        // 自动增加字段则填充上,以防判断出错
+        if (postData.create_time !== undefined) {
+            ruleKey.push('create_time');
+        }
         for (const tmp of postDataKey) {
         for (const tmp of postDataKey) {
             // 规则里面没有定义则抛出异常
             // 规则里面没有定义则抛出异常
             if (ruleKey.indexOf(tmp) < 0) {
             if (ruleKey.indexOf(tmp) < 0) {

File diff suppressed because it is too large
+ 32 - 0
app/public/js/echarts/echarts.min.js


+ 129 - 0
app/public/js/tender.js

@@ -0,0 +1,129 @@
+/**
+ * 标段相关js
+ *
+ * @author CaiAoLin
+ * @date 2018/2/5
+ * @version
+ */
+
+// 整理数据
+let tenderData = [];
+try {
+    if (tenderList.length <= 0) {
+        throw '数据为空';
+    }
+    for(const tmp of tenderList) {
+        const tmpData = {
+            value: 7814964.00,
+            name: tmp.name,
+        };
+        tenderData.push(tmpData);
+    }
+} catch (error) {
+
+}
+//1 标段完成占比/
+let myChart = echarts.init(document.getElementById('chartContainer1'));
+let option = {
+    color: ['#e9af68','#57b7b6','#e4575a','#959eac','#6699FF',
+        '#d38b70','#8fb7cf','#cd5c5c','#ffa500','#40e0d0',
+        '#1e90ff','#ff6347','#7b68ee','#00fa9a','#ffd700',
+        '#5c616b','#ff6666','#3cb371','#b8860b','#30e0e0'],
+    title : {
+        text: '标段完成占比',
+        x:'left'
+    },
+
+    tooltip : {
+        trigger: 'item',
+        formatter: "{a} <br/>{b}:{c} 元<br>占:{d} %"
+    },
+    calculable : true,
+    series : [
+        {
+            name:'标段计量分布',
+            type:'pie',
+            radius : '60%',
+            center: ['50%','50%'],
+            data: tenderData
+        }
+    ]
+};
+// 为echarts对象加载数据
+myChart.setOption(option);
+//1 //
+//2 土建标月进度//
+myChart = echarts.init(document.getElementById('chartContainer2'));
+option = {
+    color:['#6699FF','#3cb371'],
+    title : {
+        text: '土建标月进度'
+    },
+    tooltip : {
+        trigger: 'axis',
+        formatter: "{b} <br/>{a}:{c} %<br/>{a1}:{c1} %"
+    },
+    legend: {
+        data:['累计完成','本月完成']
+    },
+    dataZoom : {
+        show : true,
+        start :50,
+        end : 100
+    },
+    xAxis : [
+        {
+            type : 'category',
+            boundaryGap : true,
+            data : [
+                '2017-01','2017-02','2017-03','2017-04','2017-05','2017-06','2017-07','2017-08','2017-09'
+            ]
+        }
+    ],
+    yAxis : [
+        {
+            type : 'value',
+            axisLabel : {
+                formatter: '{value} %'
+            },
+            splitArea : {show : true}
+        }
+    ],
+    series : [
+        {
+            name:'累计完成',
+            type:'line',
+            itemStyle: {
+                normal: {
+                    lineStyle: {
+                        shadowColor : 'rgba(0,0,0,0.4)',
+                        shadowBlur: 5,
+                        shadowOffsetX: 3,
+                        shadowOffsetY: 3
+                    }
+                }
+            },
+            data:[10, 10, 30, 40, 50, 60, 80, 85, 100]
+        },
+        {
+            name:'本月完成',
+            type:'line',
+            itemStyle: {
+                normal: {
+                    lineStyle: {
+                        shadowColor : 'rgba(0,0,0,0.4)',
+                        shadowBlur: 5,
+                        shadowOffsetX: 3,
+                        shadowOffsetY: 3
+                    }
+                }
+            },
+            data:[10, 0, 20, 10, 10, 10, 10, 5, 15]
+        }
+    ]
+};
+
+
+// 为echarts对象加载数据
+myChart.setOption(option);
+//3 标段计量分布//

+ 1 - 0
app/router.js

@@ -42,4 +42,5 @@ module.exports = app => {
 
 
     // 标段管理相关
     // 标段管理相关
     app.get('/tender', sessionAuth, 'tenderController.index');
     app.get('/tender', sessionAuth, 'tenderController.index');
+    app.post('/tender/add', sessionAuth, datetimeFill, 'tenderController.add');
 };
 };

+ 16 - 37
app/service/tender.js

@@ -8,6 +8,7 @@
  * @version
  * @version
  */
  */
 
 
+const tenderConst = require('../const/tender');
 module.exports = app => {
 module.exports = app => {
 
 
     class Tender extends app.BaseService {
     class Tender extends app.BaseService {
@@ -21,9 +22,6 @@ module.exports = app => {
         constructor(ctx) {
         constructor(ctx) {
             super(ctx);
             super(ctx);
             this.tableName = 'tender';
             this.tableName = 'tender';
-            this.status = {
-                INIT: 1,
-            };
         }
         }
 
 
         /**
         /**
@@ -38,6 +36,7 @@ module.exports = app => {
                 case 'add':
                 case 'add':
                     rule = {
                     rule = {
                         name: { type: 'string', required: true, min: 2 },
                         name: { type: 'string', required: true, min: 2 },
+                        type: { type: 'string', required: true, min: 1 },
                     };
                     };
                     break;
                     break;
                 default:
                 default:
@@ -74,40 +73,20 @@ module.exports = app => {
          * @return {Boolean} - 返回新增结果
          * @return {Boolean} - 返回新增结果
          */
          */
         async add(postData) {
         async add(postData) {
-            let result = false;
-            this.transaction = await this.db.beginTransaction();
-            try {
-                // 获取当前用户信息
-                const sessionUser = this.ctx.session.sessionUser;
-                const insertData = {
-                    name: postData.name,
-                    status: this.status.INIT,
-                    project_id: sessionUser.projectId,
-                    user_id: sessionUser.accountId,
-                    create_time: postData.create_time,
-                };
-                const operate = await this.transaction.insert(this.tableName, insertData);
-                result = operate.insertId > 0;
-                if (!result) {
-                    throw '新增标段数据失败';
-                }
-
-                // 获取标段项目节点模板
-                const tenderNodeTemplateData = await this.ctx.service.tenderNodeTemplate.getData();
-                // 复制模板数据到标段数据表
-                this.ctx.service.ledger.transaction = this.transaction;
-                const copyResult = await this.ctx.service.ledger.add(tenderNodeTemplateData, operate.insertId);
-
-                if (!copyResult) {
-                    throw '新增标段项目节点失败';
-                }
-                this.transaction.commit();
-            } catch (error) {
-                result = false;
-                this.transaction.rollback();
-            }
-
-            return result;
+            // 获取当前用户信息
+            const sessionUser = this.ctx.session.sessionUser;
+            // 获取当前项目信息
+            const sessionProject = this.ctx.session.sessionProject;
+            const insertData = {
+                name: postData.name,
+                status: tenderConst.status.APPROVAL,
+                project_id: sessionProject.id,
+                user_id: sessionUser.accountId,
+                create_time: postData.create_time,
+                type: postData.type,
+            };
+            const operate = await this.db.insert(this.tableName, insertData);
+            return operate.insertId > 0;
         }
         }
 
 
     }
     }

+ 12 - 4
app/view/layout/modal.ejs

@@ -1,15 +1,23 @@
-<!--弹出添加帐号-->
+<!--弹出添加标段-->
 <div class="modal fade" id="add-bd" data-backdrop="static">
 <div class="modal fade" id="add-bd" data-backdrop="static">
     <div class="modal-dialog" role="document">
     <div class="modal-dialog" role="document">
-        <form method="post" action="/ledger/tender/add">
+        <form method="post" action="/tender/add">
             <div class="modal-content">
             <div class="modal-content">
                 <div class="modal-header">
                 <div class="modal-header">
                     <h5 class="modal-title">添加新标段</h5>
                     <h5 class="modal-title">添加新标段</h5>
                 </div>
                 </div>
                 <div class="modal-body">
                 <div class="modal-body">
                     <div class="form-group">
                     <div class="form-group">
-                        <label class="required">标段名称</label>
-                        <input class="form-control" placeholder="输入标段名称" type="text" name="name" id="tender-name"/>
+                        <label>标段名称<b class="text-danger">*</b></label>
+                        <input class="form-control"  placeholder="输入标段名称" type="text" name="name" />
+                    </div>
+                    <div class="form-group">
+                        <label>标段类型</label>
+                        <select class="form-control" name="type">
+                            <option value="1">土建标</option>
+                            <option value="2">XX标</option>
+                            <option value="3">YY标</option>
+                        </select>
                     </div>
                     </div>
                 </div>
                 </div>
                 <div class="modal-footer">
                 <div class="modal-footer">

+ 26 - 44
app/view/tender/index.ejs

@@ -13,7 +13,9 @@
                 <div class="btn-group">
                 <div class="btn-group">
                     <select class="form-control form-control-sm m-0">
                     <select class="form-control form-control-sm m-0">
                         <option>标段类型筛选</option>
                         <option>标段类型筛选</option>
-                        <option>土建标</option>
+                        <% for(const index in tenderConst.typeString) { %>
+                        <option value="<%= index %>"><%= tenderConst.typeString[index] %></option>
+                        <% } %>
                     </select>
                     </select>
                 </div>
                 </div>
             </div>
             </div>
@@ -43,9 +45,9 @@
                 <% tenderList.forEach(function(tender) { %>
                 <% tenderList.forEach(function(tender) { %>
                 <tr>
                 <tr>
                     <td><a href="biaoduan-detail.html"><%= tender.name %></a></td>
                     <td><a href="biaoduan-detail.html"><%= tender.name %></a></td>
-                    <td><%= tender.type %></td>
+                    <td><%= tenderConst.typeString[tender.type] %></td>
                     <td>15</td>
                     <td>15</td>
-                    <td><%= tender.status %></td>
+                    <td><%= tenderConst.statusString[tender.status] %></td>
                     <td>0</td>
                     <td>0</td>
                     <td>0</td>
                     <td>0</td>
                     <td>0</td>
                     <td>0</td>
@@ -66,47 +68,11 @@
                 <th>累计合同计量</th>
                 <th>累计合同计量</th>
                 <th>截止本期累计完成/本期完成/未完成</th>
                 <th>截止本期累计完成/本期完成/未完成</th>
                 </thead>
                 </thead>
+                <% if(tenderList.length > 0) { %>
+                <% tenderList.forEach(function(tender) { %>
                 <tr>
                 <tr>
-                    <td><a href="biaoduan-detail.html">WWUJ-1</a></td>
-                    <td>土建标</td>
-                    <td>15</td>
-                    <td>¥5,000,000.00</td>
-                    <td>
-                        <div class="progress">
-                            <div class="progress-bar bg-success" style="width: 45%;" data-placement="bottom"
-                                 data-toggle="tooltip" data-original-title="截止本期累计完成:¥731,121,121.00">45%
-                            </div>
-                            <div class="progress-bar bg-info" style="width:25%;" data-placement="bottom"
-                                 data-toggle="tooltip" data-original-title="本期完成:¥31,121,121.00">25%
-                            </div>
-                            <div class="progress-bar bg-gray" style="width:30%;" data-placement="bottom"
-                                 data-toggle="tooltip" data-original-title="未完成:¥71,121,121.00">30%
-                            </div>
-                        </div>
-                    </td>
-                </tr>
-                <tr>
-                    <td><a href="biaoduan-detail.html">WWUJ-2</a></td>
-                    <td>土建标</td>
-                    <td>15</td>
-                    <td>¥5,000,000.00</td>
-                    <td>
-                        <div class="progress">
-                            <div class="progress-bar bg-success" style="width: 45%;" data-placement="bottom"
-                                 data-toggle="tooltip" data-original-title="截止本期累计完成:¥731,121,121.00">45%
-                            </div>
-                            <div class="progress-bar bg-info" style="width:25%;" data-placement="bottom"
-                                 data-toggle="tooltip" data-original-title="本期完成:¥31,121,121.00">25%
-                            </div>
-                            <div class="progress-bar bg-gray" style="width:30%;" data-placement="bottom"
-                                 data-toggle="tooltip" data-original-title="未完成:¥71,121,121.00">30%
-                            </div>
-                        </div>
-                    </td>
-                </tr>
-                <tr>
-                    <td><a href="biaoduan-detail.html">WWUJ-3</a></td>
-                    <td>土建标</td>
+                    <td><a href="biaoduan-detail.html"><%= tender.name %></a></td>
+                    <td><%= tenderConst.typeString[tender.type] %></td>
                     <td>15</td>
                     <td>15</td>
                     <td>¥5,000,000.00</td>
                     <td>¥5,000,000.00</td>
                     <td>
                     <td>
@@ -123,6 +89,8 @@
                         </div>
                         </div>
                     </td>
                     </td>
                 </tr>
                 </tr>
+                <% }) %>
+                <% } %>
             </table>
             </table>
             <!--按标段类型筛选后,增加显示图表-->
             <!--按标段类型筛选后,增加显示图表-->
             <div class="row mt-5">
             <div class="row mt-5">
@@ -137,4 +105,18 @@
             </div>
             </div>
         </div>
         </div>
     </div>
     </div>
-</div>
+</div>
+<script type="text/javascript">
+    let tenderList = '<%- JSON.stringify(tenderList) %>';
+    tenderList = JSON.parse(tenderList);
+
+    let rule = '<%- rule %>';
+    rule = JSON.parse(rule);
+
+    let message = {
+    };
+</script>
+<script src="/public/js/form_validate.js"></script>
+<script src="/public/js/validate.extend.js"></script>
+<script src=/public/js/echarts/echarts.min.js></script>
+<script src="/public/js/tender.js"></script>