Browse Source

feat: 添加预付款首页进度条实时显示功能

lanjianrong 4 years ago
parent
commit
7e27632272

+ 9 - 4
app/controller/advance_controller.js

@@ -1,9 +1,9 @@
 'use strict';
 const accountGroup = require('../const/account_group').group;
 const auditConst = require('../const/audit').advance;
-
 module.exports = app => {
     class advanceController extends app.BaseController {
+
         /**
          * 开工预付款页面(AJAX) GET
          * @param {Object} ctx 全局上下文
@@ -12,6 +12,8 @@ module.exports = app => {
             const type = auditConst.type.start;
             const advanceList = await ctx.service.advance.getAdvanceList(ctx.tender.id, type);
             const latestOrder = await ctx.service.advance.getLastestAdvance(ctx.tender.id, type, true);
+            const advancePayTotal = ctx.tender.info.deal_param.startAdvance;
+            const progress = await ctx.service.advance.calcProgress(latestOrder, advancePayTotal);
             const renderData = {
                 type,
                 advanceList,
@@ -19,7 +21,8 @@ module.exports = app => {
                 auditConst,
                 preUrl: `/tender/${ctx.tender.id}/advance/${type}/create`,
                 jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.advance.main),
-                advancePayTotal: ctx.tender.info.deal_param.startAdvance,
+                advancePayTotal,
+                progress,
             };
             await this.layout('advance/index.ejs', renderData, 'advance/modal.ejs');
         }
@@ -32,6 +35,8 @@ module.exports = app => {
             const type = auditConst.type.material;
             const advanceList = await ctx.service.advance.getAdvanceList(ctx.tender.id, type);
             const latestOrder = await ctx.service.advance.getLastestAdvance(ctx.tender.id, type, true);
+            const advancePayTotal = ctx.tender.info.deal_param.materialAdvance;
+            const progress = await ctx.service.advance.calcProgress(latestOrder, advancePayTotal);
             const renderData = {
                 type,
                 advanceList,
@@ -39,7 +44,8 @@ module.exports = app => {
                 auditConst,
                 preUrl: `/tender/${ctx.tender.id}/advance/${type}/create`,
                 jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.advance.main),
-                advancePayTotal: ctx.tender.info.deal_param.materialAdvance,
+                advancePayTotal,
+                progress,
             };
             await this.layout('advance/index.ejs', renderData, 'advance/modal.ejs');
         }
@@ -114,7 +120,6 @@ module.exports = app => {
                 const { status } = ctx.advance;
                 // 获取上一期预付款记录
                 const prevAdvance = await ctx.service.advance.getPreviousRecord(ctx.tender.id, ctx.advance.type);
-                console.log('prevAdvance', prevAdvance);
                 renderData.isEdited = status === uncheck || status === checkNo;
                 renderData.advance = ctx.advance;
                 renderData.advancePayTotal = advancePayTotal;

+ 1 - 1
app/public/js/advance_audit.js

@@ -122,7 +122,7 @@ $(document).ready(function () {
     $('.pay-input').on('input propertychange', function(e) {
         let val = parseInt(e.target.value)
         const p_amount = prevAdvance && prevAdvance.prev_total_amount || 0 // 截止本期金额
-        const re_amount = ZhCalc.sub(advancePayTotal, p_amount)
+        const re_amount = ZhCalc.sub(advancePayTotal, p_amount) // 剩余未付款的总额
         const min = parseInt($(this).attr('min'))
         const max = parseInt($(this).attr('max'))
         const type = parseInt($(this).data('type'))

+ 23 - 0
app/service/advance.js

@@ -1,6 +1,7 @@
 'use strict';
 
 const auditConst = require('../const/audit').advance;
+const bc = require('../lib/base_calc.js');
 
 module.exports = app => {
     class Advance extends app.BaseService {
@@ -103,6 +104,28 @@ module.exports = app => {
             const [sql, sqlParam] = this.sqlBuilder.build(this.tableName);
             return await this.db.queryOne(sql, sqlParam);
         }
+
+        /**
+         * 计算列表进度条所需数据
+         * @param {Object} latest 最新期的数据
+         * @param {Number} payTotal 预付款金额总数
+         * @return {Object} progress所需数据
+         */
+        async calcProgress(latest, payTotal) {
+            const { ctx } = this;
+            const surplus = ctx.helper.sub(payTotal, latest.prev_total_amount);
+            const p_ratio = ctx.helper.mul(ctx.helper.div(latest.prev_amount, payTotal), 100, 2); // 截止上期金额总数
+            const c_ratio = ctx.helper.mul(ctx.helper.div(latest.cur_amount, payTotal), 100, 0); // 截止本期金额总数
+            const s_ratio = ctx.helper.mul(ctx.helper.div(surplus, payTotal), 100, 0); // 剩余金额总数
+            return {
+                p_amount: latest.prev_amount,
+                c_amount: latest.cur_amount,
+                s_amount: surplus,
+                p_ratio,
+                c_ratio,
+                s_ratio,
+            };
+        }
     }
     return Advance;
 };

+ 5 - 5
app/view/advance/detail.ejs

@@ -53,22 +53,22 @@
                             <tr>
                                 <th width="150">支付比例</th>
                                 <td class="text-right">
-                                    <h5><%- advance.pay_ratio %>%</h5>
+                                    <h5><%- advance.pay_ratio || 0 %>%</h5>
                                 </td>
                                 <th width="150">本期金额</th>
                                 <td class="text-right">
-                                    <h5><%- ctx.helper.formatMoney(advance.cur_amount) %></h5>
+                                    <h5><%- ctx.helper.formatMoney(advance.cur_amount || 0) %></h5>
                                 </td>
                             </tr>
                             <% } %>
                             <tr>
                                 <th>截止上期</th>
                                 <td class="text-right">
-                                    <h5><%- ctx.helper.formatMoney(prevAdvance.prev_total_amount) %></h5>
+                                    <h5><%- ctx.helper.formatMoney(prevAdvance && prevAdvance.prev_total_amount || 0) %></h5>
                                 </td>
                                 <th>截止本期金额</th>
                                 <td class="text-right">
-                                    <h5 id="p_total"><%- ctx.helper.formatMoney(prevAdvance.prev_total_amount + advance.cur_amount) %></h5>
+                                    <h5 id="p_total"><%- ctx.helper.formatMoney(prevAdvance && prevAdvance.prev_total_amount + advance.cur_amount || 0) %></h5>
                                 </td>
                             </tr>
                             <tr>
@@ -76,7 +76,7 @@
                                 <td colspan="3">
                                     <textarea id="ad-remark" class="form-control form-control-sm"
                                         <%- isEdited && ctx.session.sessionUser.accountId === ctx.advance.uid ? '' : 'disabled' %>
-                                        value="<%- advance.remark %>"></textarea>
+                                        ><%- advance.remark %></textarea>
                                 </td>
                             </tr>
                         </tbody>

+ 9 - 9
app/view/advance/index.ejs

@@ -19,12 +19,12 @@
                 </div>
                 <div class="d-inline-block ml-4" style="width:300px">
                     <div class="progress">
-                        <div class="progress-bar bg-success" style="width: 14%;" data-placement="bottom"
-                            data-toggle="tooltip" data-original-title="截止上期金额:¥40,000.00">14%</div>
-                        <div class="progress-bar bg-info" style="width:8%;" data-placement="bottom"
-                            data-toggle="tooltip" data-original-title="本期金额:¥30,000.00">8%</div>
-                        <div class="progress-bar bg-gray" style="width:78%;" data-placement="bottom"
-                            data-toggle="tooltip" data-original-title="未完成:¥930,00.00">78%</div>
+                        <div class="progress-bar bg-success" style="width: <%- progress.p_ratio%>%;" data-placement="bottom"
+                            data-toggle="tooltip" data-original-title="截止上期金额:¥<%- ctx.helper.formatMoney(progress.p_amount) %>"><%- progress.p_ratio %>%</div>
+                        <div class="progress-bar bg-info" style="width:<%- progress.c_ratio%>%;" data-placement="bottom"
+                            data-toggle="tooltip" data-original-title="本期金额:¥<%- ctx.helper.formatMoney(progress.c_amount) %>"><%- progress.c_ratio %>%</div>
+                        <div class="progress-bar bg-gray" style="width:<%- progress.s_ratio%>%;" data-placement="bottom"
+                            data-toggle="tooltip" data-original-title="未完成:¥<%- ctx.helper.formatMoney(progress.s_amount) %>"><%- progress.s_ratio %>%</div>
                     </div>
                 </div>
             </div>
@@ -60,9 +60,9 @@
                             <tr>
                                 <td><a href="/tender/<%- ctx.tender.id %>/advance/<%- item.id %>/detail" data-id="<%- item.id %>">第<%- item.order %>期</a></td>
                                 <td><%- item.pay_ratio || 0%>%</td>
-                                <td class="text-right"><%- item.cur_amount%></td>
-                                <td class="text-right"><%- item.prev_amount%></td>
-                                <td class="text-right"><%- item.prev_total_amount%></td>
+                                <td class="text-right"><%- ctx.helper.formatMoney(item.cur_amount)%></td>
+                                <td class="text-right"><%- ctx.helper.formatMoney(item.prev_amount)%></td>
+                                <td class="text-right"><%- ctx.helper.formatMoney(item.prev_total_amount)%></td>
                                 <td><a class="btn btn-sm" href="#file" data-toggle="modal" data-target="#file"><i
                                             class="fa fa-paperclip "></i> 3</a></td>
                                 <td>