Browse Source

feat: 预付款新增两个功能模块

lanjianrong 3 years ago
parent
commit
3fa14a552d

+ 12 - 3
app/const/advance.js

@@ -12,10 +12,19 @@
 const typeCol = [
     { key: 'start', type: 0, name: '开工预付款' },
     { key: 'material', type: 1, name: '材料预付款' },
-    // { key: 'safe', type: 2, name: '安全生产预付款' },
-    // { key: 'dust', type: 2, name: '扬尘污染预付款' },
-]
+    { key: 'safe', type: 2, name: '安全生产预付款' },
+    { key: 'dust', type: 3, name: '扬尘污染预付款' },
+];
+
+const typeColMap = {
+    0: { text: '开工预付款', value: 'start' },
+    1: { text: '材料预付款', value: 'material' },
+    2: { text: '安全生产预付款', value: 'safe' },
+    3: { text: '扬尘污染预付款', value: 'dust' },
+};
+
 
 module.exports = {
     typeCol,
+    typeColMap,
 };

+ 30 - 26
app/controller/advance_controller.js

@@ -2,6 +2,7 @@
 const accountGroup = require('../const/account_group').group;
 const auditConst = require('../const/audit').advance;
 const shenpiConst = require('../const/shenpi');
+const typeConsts = require('../const/advance');
 const sendToWormhole = require('stream-wormhole');
 const path = require('path');
 const fs = require('fs');
@@ -18,8 +19,9 @@ module.exports = app => {
          * @param {Object} ctx 全局上下文
          */
         async index(ctx) {
-            const type = auditConst.type.start;
-            const advancePayTotal = ctx.tender.info.deal_param.startAdvance;
+            const advanceType = typeConsts.typeCol.find(item => item.key === ctx.params.type);
+            const type = advanceType.type;
+            const advancePayTotal = ctx.tender.info.deal_param[`${advanceType.key}Advance`];
             const advanceList = await ctx.service.advance.getAdvanceList(ctx.tender.id, type, this.decimal, advancePayTotal);
             const latestOrder = await ctx.service.advance.getLastestAdvance(ctx.tender.id, type, true);
             const progress = await ctx.service.advance.calcProgress(latestOrder, advancePayTotal);
@@ -31,6 +33,7 @@ module.exports = app => {
                 advanceList,
                 latestOrder,
                 auditConst,
+                typeColMap: typeConsts.typeColMap,
                 preUrl: `/tender/${ctx.tender.id}/advance/${type}/create`,
                 jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.advance.main),
                 advancePayTotal,
@@ -43,27 +46,27 @@ module.exports = app => {
          * 材料预付款页面(AJAX) GET
          * @param {Object} ctx 全局上下文
          */
-        async materialList(ctx) {
-            const type = auditConst.type.material;
-            const advancePayTotal = ctx.tender.info.deal_param.materialAdvance;
-            const advanceList = await ctx.service.advance.getAdvanceList(ctx.tender.id, type, this.decimal, advancePayTotal);
-            const latestOrder = await ctx.service.advance.getLastestAdvance(ctx.tender.id, type, true);
-            const progress = await ctx.service.advance.calcProgress(latestOrder, advancePayTotal);
-            const showAddBtn = ctx.tender.data.user_id === ctx.session.sessionUser.accountId ? !latestOrder || (latestOrder.status === auditConst.status.checked && latestOrder.prev_total_amount < advancePayTotal) : false;
-            const renderData = {
-                type,
-                decimal: this.decimal,
-                showAddBtn,
-                advanceList,
-                latestOrder,
-                auditConst,
-                preUrl: `/tender/${ctx.tender.id}/advance/${type}/create`,
-                jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.advance.main),
-                advancePayTotal,
-                progress,
-            };
-            await this.layout('advance/index.ejs', renderData, 'advance/modal.ejs');
-        }
+        // async materialList(ctx) {
+        //     const type = auditConst.type.material;
+        //     const advancePayTotal = ctx.tender.info.deal_param.materialAdvance;
+        //     const advanceList = await ctx.service.advance.getAdvanceList(ctx.tender.id, type, this.decimal, advancePayTotal);
+        //     const latestOrder = await ctx.service.advance.getLastestAdvance(ctx.tender.id, type, true);
+        //     const progress = await ctx.service.advance.calcProgress(latestOrder, advancePayTotal);
+        //     const showAddBtn = ctx.tender.data.user_id === ctx.session.sessionUser.accountId ? !latestOrder || (latestOrder.status === auditConst.status.checked && latestOrder.prev_total_amount < advancePayTotal) : false;
+        //     const renderData = {
+        //         type,
+        //         decimal: this.decimal,
+        //         showAddBtn,
+        //         advanceList,
+        //         latestOrder,
+        //         auditConst,
+        //         preUrl: `/tender/${ctx.tender.id}/advance/${type}/create`,
+        //         jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.advance.main),
+        //         advancePayTotal,
+        //         progress,
+        //     };
+        //     await this.layout('advance/index.ejs', renderData, 'advance/modal.ejs');
+        // }
 
         /**
          * 获取通用的renderData(用于layout, Menu, subMenu部分)
@@ -142,7 +145,7 @@ module.exports = app => {
          * @param {Object} ctx 全局上下文
          */
         async detail(ctx) {
-            const advancePayTotal = ctx.advance.type === 0 ? ctx.tender.info.deal_param.startAdvance : ctx.tender.info.deal_param.materialAdvance;
+            const advancePayTotal = ctx.tender.info.deal_param[`${typeConsts.typeColMap[ctx.advance.type].value}startAdvance`];
             try {
                 await this._checkCanEntry(ctx);
                 const { uncheck, checkNo } = auditConst.status;
@@ -178,12 +181,13 @@ module.exports = app => {
                 renderData.prev_total_amount = prev_total_amount;
                 renderData.max_pr = max_pr;
                 renderData.decimal = 2;
+                renderData.typeColMap = typeConsts.typeColMap;
                 renderData.advancePayTotal = advancePayTotal;
                 renderData.prevAdvance = prevAdvance;
                 await this.layout('advance/detail.ejs', renderData, 'advance/modal_audit.ejs');
             } catch (error) {
                 this.log(error);
-                ctx.redirect('/tender/' + ctx.tender.id + '/advance');
+                ctx.redirect('/tender/' + ctx.tender.id + '/advance/' + typeConsts.typeColMap[ctx.advance.type].value);
             }
         }
 
@@ -222,7 +226,7 @@ module.exports = app => {
                 ctx.redirect(`/tender/${ctx.tender.id}/advance/${record.id}/detail`);
             } catch (error) {
                 this.log(error);
-                ctx.redirect(`/tender/${ctx.tender.id}/advance`);
+                ctx.redirect(`/tender/${ctx.tender.id}/advance/${typeConsts.typeColMap[ctx.advance.type].value}`);
             }
         }
 

+ 2 - 2
app/router.js

@@ -135,8 +135,8 @@ module.exports = app => {
     app.post('/tender/:id/tourist/audit/save', sessionAuth, tenderCheck, uncheckTenderCheck, 'tenderController.saveTourist');
 
     // 预付款
-    app.get('/tender/:id/advance', sessionAuth, tenderCheck, 'advanceController.index');
-    app.get('/tender/:id/advance/material', sessionAuth, tenderCheck, 'advanceController.materialList');
+    app.get('/tender/:id/advance/:type', sessionAuth, tenderCheck, 'advanceController.index');
+    // app.get('/tender/:id/advance/material', sessionAuth, tenderCheck, 'advanceController.materialList');
     app.post('/tender/:id/advance/create', sessionAuth, tenderCheck, 'advanceController.create');
     app.post('/tender/:id/advance/delete', sessionAuth, tenderCheck, 'advanceController.delete');
     app.get('/tender/:id/advance/:order/detail', sessionAuth, tenderCheck, advanceCheck, 'advanceController.detail');

+ 2 - 3
app/view/advance/detail.ejs

@@ -17,13 +17,12 @@
             <div class="sjs-height-0">
                 <div class="col-xl-8 mx-auto">
                     <h4 class="mt-3 text-center mb-3">第<%- advance.order %>期
-                        <%- advance.type === auditConst.type.start ? '开工' : '材料' %>预付款</h4>
+                        <%- typeColMap[advance.type].text %></h4>
                     <table class="table table-bordered">
                         <thead>
                             <tr>
                                 <th colspan="4" class="text-center">
-                                    <!-- 签约<%- advance.type === auditConst.type.start ? '开工' : '材料' %>预付款:<%- ctx.helper.formatMoney(advancePayTotal, ',', 2) %> -->
-                                    签约<%- advance.type === auditConst.type.start ? '开工' : '材料' %>预付款:<%- ctx.helper.formatMoney(advancePayTotal, ',', parseFloat(advancePayTotal).toString().split('.')[1] && parseFloat(advancePayTotal).toString().split('.')[1].length || 0) %>
+                                    签约<%- typeColMap[advance.type].text %>:<%- ctx.helper.formatMoney(advancePayTotal, ',', parseFloat(advancePayTotal).toString().split('.')[1] && parseFloat(advancePayTotal).toString().split('.')[1].length || 0) %>
                                 </th>
                             </tr>

+ 8 - 2
app/view/advance/index.ejs

@@ -5,16 +5,22 @@
             <div>
                 <div class="d-inline-block">
                     <div class="btn-group group-tab">
-                        <a class="btn btn-sm btn-light <%- type === 0 ? 'active' : '' %>" href="/tender/<%- ctx.tender.id %>/advance">
+                        <a class="btn btn-sm btn-light <%- type === 0 ? 'active' : '' %>" href="/tender/<%- ctx.tender.id %>/advance/start">
                             开工预付款<%- type === 0 && latestOrder ? `(第${latestOrder.order}期)` : '' %>
                         </a>
                         <a class="btn btn-sm btn-light <%- type === 1 ? 'active' : '' %>" href="/tender/<%- ctx.tender.id %>/advance/material">
                             材料预付款<%- type === 1 && latestOrder ? `(第${latestOrder.order}期)` : '' %>
                         </a>
+                        <a class="btn btn-sm btn-light <%- type === 2 ? 'active' : '' %>" href="/tender/<%- ctx.tender.id %>/advance/safe">
+                          安全生产预付款<%- type === 2 && latestOrder ? `(第${latestOrder.order}期)` : '' %>
+                        </a>
+                        <a class="btn btn-sm btn-light <%- type === 3 ? 'active' : '' %>" href="/tender/<%- ctx.tender.id %>/advance/dust">
+                          扬尘污染预付款<%- type === 3 && latestOrder ? `(第${latestOrder.order}期)` : '' %>
+                        </a>
                     </div>
                 </div>
                 <div class="d-inline-block ml-2">
-                    签约<%- type === 0 ? '开工' : '材料' %>预付款
+                    签约<%- typeColMap[type].text%>
                     <b><%- ctx.helper.formatMoney(advancePayTotal, ',', parseFloat(advancePayTotal).toString().split('.')[1] && parseFloat(advancePayTotal).toString().split('.')[1].length || 0) %></b> 元
                 </div>
                 <div class="d-inline-block ml-4" style="width:300px">

+ 1 - 1
app/view/tender/tender_sub_menu.ejs

@@ -11,7 +11,7 @@
         <div class="nav-box">
             <ul class="nav-list list-unstyled">
                 <% const curUrl = `/tender/${ctx.tender.id}/advance` %>
-                <li <% if (ctx.url.indexOf(curUrl) !== -1) { %>class="active"<% } %>><a href="/tender/<%- ctx.tender.id %>/advance"><i class="fa fa-handshake-o"></i> <span>预付款</span></a></li>
+                <li <% if (ctx.url.indexOf(curUrl) !== -1) { %>class="active"<% } %>><a href="/tender/<%- ctx.tender.id %>/advance/start"><i class="fa fa-handshake-o"></i> <span>预付款</span></a></li>
             </ul>
         </div>
         <div class="nav-box">