Pārlūkot izejas kodu

refactor: 预付款列表页支付比例动态计算

lanjianrong 5 gadi atpakaļ
vecāks
revīzija
de73b85cae

+ 2 - 2
app/service/advance.js

@@ -125,8 +125,8 @@ module.exports = app => {
             }
             const surplus = ctx.helper.sub(payTotal, latest.prev_total_amount || 0);
             const p_ratio = ctx.helper.mul(ctx.helper.div(latest.prev_amount || 0, payTotal), 100, 2); // 截止上期金额总数
-            const c_ratio = ctx.helper.mul(ctx.helper.div(latest.cur_amount || 0, payTotal), 100, 0); // 截止本期金额总数
-            const s_ratio = ctx.helper.mul(ctx.helper.div(surplus, payTotal), 100, 0); // 剩余金额总数
+            const c_ratio = ctx.helper.mul(ctx.helper.div(latest.cur_amount || 0, payTotal), 100, 2); // 截止本期金额总数
+            const s_ratio = ctx.helper.mul(ctx.helper.div(surplus, payTotal), 100, 2); // 剩余金额总数
             return {
                 p_amount: latest.prev_amount,
                 c_amount: latest.cur_amount,

+ 0 - 1
app/service/advance_file.js

@@ -1,5 +1,4 @@
 'use strict';
-const auditConst = require('../const/audit');
 /**
  * 附件表 数据模型
  * @author LanJianRong

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

@@ -59,7 +59,7 @@
                         <% advanceList.forEach(item => { %>
                             <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><%- item.cur_amount && ctx.helper.mul(ctx.helper.div(item.cur_amount, advancePayTotal), 100) || 0%>%</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>

+ 171 - 153
app/view/advance/modal_audit.ejs

@@ -54,170 +54,171 @@
                     <div class="col-4">
                         <div class="card mt-3">
                             <ul class="list-group list-group-flush">
-                                <li class="list-group-item">
-                                    <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- ctx.advance.user.name %>
-                                    <small class="text-muted"><%- ctx.advance.user.role %></small><span
-                                        class="pull-right">原报</span>
+                                <% auditors.forEach((item, idx) => { %>
+                                <% if (idx === 0) { %>
+                                <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
+                                    <i class="fa fa fa-play-circle fa-rotate-90"></i> <%- item.name %>
+                                    <small class="text-muted"><%- item.role %></small>
+                                    <span class="pull-right">原报</span>
                                 </li>
-                                <% for (let i = 0; i < ctx.advance.auditors2.length; i++) { %>
-                                <li class="list-group-item">
-                                    <% if (i < ctx.advance.auditors2.length - 1) { %>
-                                    <i class="fa fa-chevron-circle-down"></i> <%- ctx.advance.auditors2[i].name %>
-                                    <small class="text-muted"><%- ctx.advance.auditors2[i].role %></small><span
-                                        class="pull-right"><%= ctx.helper.transFormToChinese(i+1) %>审</span>
-                                    <% } else { %>
-                                    <i class="fa fa fa-stop-circle"></i> <%- ctx.advance.auditors2[i].name %> <small
-                                        class="text-muted"><%- ctx.advance.auditors2[i].role %></small><span
-                                        class="pull-right">终审</span>
-                                    <% } %>
+                                <% } else if(idx === auditors.length -1 && idx !== 0) { %>
+                                <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
+                                    <i class="fa fa fa-stop-circle"></i> <%- item.name %>
+                                    <small class="text-muted"><%- item.role %></small>
+                                    <span class="pull-right">终审</span>
+                                </li>
+                                <% } else {%>
+                                <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
+                                    <i class="fa fa-chevron-circle-down"></i> <%- item.name %>
+                                    <small class="text-muted"><%- item.role %></small>
+                                    <span class="pull-right"><%= ctx.helper.transFormToChinese(idx) %>审</span>
                                 </li>
                                 <% } %>
+                                <% }) %>
                             </ul>
                         </div>
                     </div>
                     <div class="col-8 modal-height-500" style="overflow: auto">
-                        <% for (const ah of ctx.advance.auditHistory) { %>
-                        <div class="card mt-3">
-                            <ul class="list-group list-group-flush">
-                                <% for (let iA = 0; iA < ah.length; iA++) { %>
-                                <% if (iA === 0) { %>
-                                <li class="list-group-item">
-                                    <h5 class="card-title">
-                                        <i class="fa fa-play-circle fa-rotate-90 text-success"></i>
-                                        <%- ctx.advance.user.name %> <small
-                                            class="text-muted"><%- ctx.advance.user.role %></small><span
-                                            class="pull-right">原报</span>
-                                    </h5>
-                                    <div class="ml-3">
-                                        <span
-                                            class="text-success"><small><%- ctx.helper.formatFullDate(ah[iA].create_time) %></small>
-                                            <% if (ctx.advance.auditHistory.indexOf(ah) > 0) { %>重新<% } %>上报</span>
-                                    </div>
-                                </li>
-                                <li class="list-group-item">
-                                    <h5 class="card-title">
-                                        <i
-                                            class="fa <%if (iA === ah.length - 1) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> <%- auditConst.statusClass[ah[iA].status] %>"></i>
-                                        <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span
-                                            class="pull-right"><%= ah[iA].sort === ah[iA].max_sort ? '终' : ctx.helper.transFormToChinese(ah[iA].sort) %>审</span>
-                                    </h5>
-                                    <div class="ml-3">
-                                        <% if (ah[iA].status !== auditConst.status.uncheck) { %>
-                                        <span
-                                            class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo) { %><small><%- ctx.helper.formatFullDate(ah[iA].end_time) %></small>
-                                            <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %>
-                                            <%- ctx.advance.user.name %><% } %></span>
+                        <% auditHistory.forEach((auditors, idx) => { %>
+                            <!-- 收起历史流程 -->
+                            <% if(idx > 0 && idx === 1) { %>
+                            <div class="text-right"><a href="javascript: void(0);" id="fold-btn1">收起历史审批流程</a></div>
+                            <% } %>
+
+                            <div class="<%- idx < auditHistory.length - 1 ? 'fold-btn' : '' %>">
+                                <div class="text-center text-muted" <%- idx === auditHistory.length - 1 ? `id="end-target"` : "" %> ><%- idx+1 %>#</div>
+                                <ul class="timeline-list list-unstyled mt-2">
+                                    <% auditors.forEach((auditor, index) => { %>
+                                    <% if (index === 0) { %>
+                                    <li class="timeline-list-item pb-2">
+                                        <div class="timeline-item-date">
+                                            <%- ctx.helper.formatDate(auditor.create_time) %>
+                                        </div>
+                                        <div class="timeline-item-tail"></div>
+                                        <div class="timeline-item-icon bg-success text-light">
+                                            <i class="fa fa-caret-down"></i>
+                                        </div>
+                                        <div class="timeline-item-content">
+                                            <div class="card">
+                                                <div class="card-body p-3">
+                                                    <div class="card-text">
+                                                        <p class="mb-1"><span
+                                                                class="h5"><%- advance.user.name %></span><span
+                                                                class="pull-right text-success"><%- idx !== 0 ? '重新' : '' %>上报审批</span>
+                                                        </p>
+                                                        <p class="text-muted mb-0"><%- advance.user.role %></p>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </li>
+                                    <li class="timeline-list-item pb-2">
+                                        <div class="timeline-item-date">
+                                            <%- ctx.helper.formatDate(auditor.end_time) %>
+                                        </div>
+                                        <% if(index < auditors.length - 1) { %>
+                                            <div class="timeline-item-tail"></div>
                                         <% } %>
-                                        <p class="card-text"><%- ah[iA].opinion %></p>
-                                    </div>
-                                </li>
-                                <% } else if (iA === ah.length - 1) { %>
-                                <li class="list-group-item">
-                                    <h5 class="card-title">
-                                        <i class="fa fa-stop-circle <%- auditConst.statusClass[ah[iA].status] %>"></i>
-                                        <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span
-                                            class="pull-right">终审</span>
-                                    </h5>
-                                    <div class="ml-3">
-                                        <% if (ah[iA].status !== auditConst.status.uncheck) { %>
-                                        <span
-                                            class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo) { %><small><%- ctx.helper.formatFullDate(ah[iA].end_time) %></small>
-                                            <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %>
-                                            <%- ctx.advance.user.name %><% } %></span>
+                                        <% if(auditor.status === auditConst.status.checked) { %>
+                                        <div class="timeline-item-icon bg-success text-light">
+                                            <i class="fa fa-check"></i>
+                                        </div>
+                                        <% } else if(auditor.status === auditConst.status.checkNo || auditor.status === auditConst.status.checkNoPre) {%>
+                                        <div class="timeline-item-icon bg-warning text-light">
+                                            <i class="fa fa-level-up"></i>
+                                        </div>
+                                        <% } else if(auditor.status === auditConst.status.checking) { %>
+                                        <div class="timeline-item-icon bg-warning text-light">
+                                            <i class="fa fa-ellipsis-h"></i>
+                                        </div>
+                                        <% } else {%>
+                                        <div class="timeline-item-icon bg-secondary text-light">
+                                        </div>
                                         <% } %>
-                                        <p class="card-text"><%- ah[iA].opinion %></p>
-                                    </div>
-                                </li>
-                                <% } else { %>
-                                <li class="list-group-item">
-                                    <h5 class="card-title">
-                                        <i
-                                            class="fa <%if (iA === ah.length - 1) { %>fa-stop-circle<% } else { %>fa-chevron-circle-down<% } %> <%- auditConst.statusClass[ah[iA].status] %>"></i>
-                                        <%- ah[iA].name %> <small class="text-muted"><%- ah[iA].role %></small><span
-                                            class="pull-right"><%= ah[iA].sort === ah[iA].max_sort ? '终' : ctx.helper.transFormToChinese(ah[iA].sort) %>审</span>
-                                    </h5>
-                                    <div class="ml-3">
-                                        <% if (ah[iA].status !== auditConst.status.uncheck) { %>
-                                        <span
-                                            class="<%- auditConst.statusClass[ah[iA].status] %>"><% if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo) { %><small><%- ctx.helper.formatFullDate(ah[iA].end_time) %></small>
-                                            <% } %><%- auditConst.statusString[ah[iA].status]%><% if (ah[iA].status === auditConst.status.checkNo) { %>
-                                            <%- ctx.advance.user.name %><% } %></span>
+                                        <div class="timeline-item-content">
+                                            <div class="card">
+                                                <div class="card-body p-3">
+                                                    <div class="card-text">
+                                                        <p class="mb-1"><span
+                                                                class="h5"><%- auditor.name %></span><span
+                                                                class="pull-right <%- auditConst.statusClass[auditor.status] %>"><%- auditConst.statusString[auditor.status] %></span>
+                                                        </p>
+                                                        <p class="text-muted mb-0"><%- auditor.role %></p>
+                                                    </div>
+                                                </div>
+                                                <!--审批意见-->
+                                                <div class="card-body p-3 border-top">
+                                                    <% if (auditor.status === auditConst.status.checking) { %>
+                                                        <label>审批意见<b class="text-danger">*</b></label>
+                                                        <textarea class="form-control form-control-sm" name="opinion">同意</textarea>
+                                                    <% } else { %>
+                                                        <p style="margin: 0;"><%- auditor.opinion %></p>
+                                                    <% } %>
+                                                </div>
+                                            </div>
+                                        </div>
+                                    </li>
+                                    <% } else {%>
+                                    <li class="timeline-list-item pb-2">
+                                        <div class="timeline-item-date">
+                                            <%- ctx.helper.formatDate(auditor.end_time) %>
+                                        </div>
+                                        <% if(index < auditors.length - 1) { %>
+                                            <div class="timeline-item-tail"></div>
                                         <% } %>
-                                        <p class="card-text"><%- ah[iA].opinion %></p>
-                                    </div>
-                                </li>
-                                <% } %>
-                                <% } %>
-                            </ul>
-                        </div>
-                        <% } %>
-                        <div class="card mt-3">
-                            <ul class="list-group list-group-flush">
-                                <li class="list-group-item">
-                                    <h5 class="card-title">
-                                        <i class="fa fa-play-circle fa-rotate-90 text-success"></i>
-                                        <%- ctx.advance.user.name %> <small
-                                            class="text-muted"><%- ctx.advance.user.role %></small><span
-                                            class="pull-right">原报</span>
-                                    </h5>
-                                    <div class="ml-3">
-                                        <span
-                                            class="text-success"><small><%- ctx.helper.formatFullDate(ctx.advance.auditors[0].create_time) %></small>
-                                            上报</span>
-                                    </div>
-                                </li>
-                                <% for (let iA = 0; iA < ctx.advance.auditors.length; iA++) { %>
-                                <% const auditors = ctx.advance.auditors; %>
-                                <li class="list-group-item">
-                                    <% if (auditors[iA].status === auditConst.status.checked) { %>
-                                    <h5 class="card-title">
-                                        <i
-                                            class="<%- (iA < auditors.length - 1 ? 'fa fa-chevron-circle-down text-success' : 'fa fa-stop-circle text-success') %>"></i>
-                                        <%- auditors[iA].name %> <small
-                                            class="text-muted"><%- auditors[iA].role %></small><span
-                                            class="pull-right"><%= auditors[iA].sort === auditors[iA].max_sort ? '终' : ctx.helper.transFormToChinese(auditors[iA].sort) %>审</span>
-                                    </h5>
-                                    <div class="ml-3">
-                                        <span
-                                            class="text-success"><small><%- ctx.helper.formatFullDate(auditors[iA].end_time) %></small>
-                                            审批通过</span>
-                                        <p class="card-text"><%- auditors[iA].opinion %></p>
-                                    </div>
-                                    <% } else if (auditors[iA].stauts == auditConst.status.checking) { %>
-                                    <h5 class="card-title">
-                                        <i
-                                            class="<%- (iA < auditors.length - 1 ? 'fa fa-chevron-circle-down' : 'fa fa-stop-circle') %>"></i>
-                                        <%- auditors[iA].name %> <small
-                                            class="text-muted"><%- auditors[iA].role %></small><span
-                                            class="pull-right"><%= auditors[iA].sort === auditors[iA].max_sort ? '终' : ctx.helper.transFormToChinese(auditors[iA].sort) %>审</span>
-                                    </h5>
-                                    <div class="ml-3">
-                                        <span>审批中</span>
-                                        <p class="card-text"><%- auditors[iA].opinion %></p>
-                                    </div>
-                                    <% } else { %>
-                                    <h5 class="card-title">
-                                        <i
-                                            class="<%- (iA < auditors.length - 1 ? 'fa fa-chevron-circle-down' : 'fa fa-stop-circle') %>"></i>
-                                        <%- auditors[iA].name %> <small
-                                            class="text-muted"><%- auditors[iA].role %></small><span
-                                            class="pull-right"><%= auditors[iA].sort === auditors[iA].max_sort ? '终' : ctx.helper.transFormToChinese(auditors[iA].sort) %>审</span>
-                                    </h5>
-                                    <div class="ml-3">
-                                        <p class="card-text"><%- auditors[iA].opinion %></p>
-                                    </div>
-                                    <% } %>
-                                    <% if (auditors[iA].status === auditConst.status.checked) { %>
-                                    <% } else if (auditors[iA].status === auditConst.status.checking) { %>
-                                    <div class="form-group">
-                                        <label>审批意见<b class="text-danger">*</b></label>
-                                        <textarea class="form-control form-control-sm" name="opinion">同意</textarea>
-                                    </div>
+                                        <% if(auditor.status === auditConst.status.checked) { %>
+                                        <div class="timeline-item-icon bg-success text-light">
+                                            <i class="fa fa-check"></i>
+                                        </div>
+                                        <% } else if(auditor.status === auditConst.status.checkNo || auditor.status === auditConst.status.checkNoPre) {%>
+                                        <div class="timeline-item-icon bg-warning text-light">
+                                            <i class="fa fa-level-up"></i>
+                                        </div>
+                                        <% } else if(auditor.status === auditConst.status.checking) { %>
+                                        <div class="timeline-item-icon bg-warning text-light">
+                                            <i class="fa fa-ellipsis-h"></i>
+                                        </div>
+                                        <% } else { %>
+                                        <div class="timeline-item-icon bg-secondary text-light">
+                                        </div>
+                                        <% } %>
+                                        <div class="timeline-item-content">
+                                            <div class="card">
+                                                <div class="card-body p-3">
+                                                    <div class="card-text">
+                                                        <p class="mb-1"><span
+                                                                class="h5"><%- auditor.name %></span>
+                                                            <span
+                                                                class="pull-right
+                                                                            <%- auditConst.statusClass[auditor.status] %>"><%- auditor.status !== auditConst.status.uncheck ? auditConst.statusString[auditor.status] : ''%>
+                                                                <%- auditor.status === auditConst.status.checkNo ? advance.user.name : '' %>
+                                                                <%- auditor.status === auditConst.status.checkNoPre ? auditors[index-1].name : '' %>
+                                                            </span>
+                                                        </p>
+                                                        <p class="text-muted mb-0"><%- auditor.role %></p>
+                                                    </div>
+                                                </div>
+                                                <!--审批意见-->
+                                                    <div class="card-body p-3 border-top">
+                                                        <% if (auditor.status === auditConst.status.checking) { %>
+                                                            <label>审批意见<b class="text-danger">*</b></label>
+                                                            <textarea class="form-control form-control-sm" name="opinion">同意</textarea>
+                                                        <% } else { %>
+                                                            <p style="margin: 0;"><%- auditor.opinion %></p>
+                                                        <% } %>
+                                                    </div>
+                                            </div>
+                                        </div>
+                                    </li>
                                     <% } %>
-                                </li>
-                                <% } %>
-                            </ul>
-                        </div>
+                                    <% }) %>
+                                </ul>
+                            </div>
+                            <!-- 展开历史流程 -->
+                            <% if(idx === auditHistory.length - 1) { %>
+                                <div class="text-right"><a href="javascript: void(0);" id="fold-btn2" style="display: none;" data-target="<%- idx + 1 %>">展开历史审批流程</a></div>
+                            <% } %>
+                            <% }) %>
                     </div>
                 </div>
             </div>
@@ -1194,4 +1195,21 @@
         if (!text) return null
         return text.replace(/(\r\n)|(\n)/g, '<br/>').replace(/\s/g, ' ')
     }
+
+    // 展开/收起历史审核记录
+    $('.modal-body #fold-btn1').click(function() {
+        $('.modal-body .fold-btn').slideUp('swing', () => {
+            $('.modal-body #end-target').text('1#')
+            $('.modal-body #fold-btn1').hide()
+            $('.modal-body #fold-btn2').show()
+        });
+    });
+    $('.modal-body #fold-btn2').click(function() {
+        const idx = $(this).data('target')
+        $('.modal-body .fold-btn').slideDown('swing', () => {
+            $('.modal-body #end-target').text(idx + '#')
+            $('.modal-body #fold-btn1').show()
+            $('.modal-body #fold-btn2').hide()
+        });
+    });
 </script>