Prechádzať zdrojové kódy

台账审批流程同步

laiguoran 4 rokov pred
rodič
commit
de2ad6ac85

+ 10 - 8
app/controller/ledger_audit_controller.js

@@ -9,6 +9,7 @@
  */
 const auditConst = require('../const/audit').ledger;
 const spreadConst = require('../const/spread');
+const shenpiConst = require('../const/shenpi');
 const measureType = require('../const/tender').measureType;
 
 module.exports = app => {
@@ -74,7 +75,10 @@ module.exports = app => {
                     throw '审核信息错误';
                 }
 
-                const auditors = await ctx.service.ledgerAudit.getAuditorsWithOwner(ctx.tender.id, ctx.tender.data.ledger_times);
+                renderData.user = await ctx.service.projectAccount.getAccountInfoById(ctx.tender.data.user_id);
+                renderData.auditHistory = [];
+                const times = ctx.tender.data.ledger_status === auditConst.status.checkNo ? ctx.tender.data.ledger_times - 1 : ctx.tender.data.ledger_times;
+                const auditors = await ctx.service.ledgerAudit.getAuditorsWithOwner(ctx.tender.id, times);
                 if (ctx.tender.data.user_id !== ctx.session.sessionUser.accountId) {
                     if (auditors.length > 0) {
                         const auditor = auditors.find(function(a) { return a.audit_id === ctx.session.sessionUser.accountId; });
@@ -83,10 +87,6 @@ module.exports = app => {
                         }
                     }
                 }
-
-                renderData.user = await ctx.service.projectAccount.getAccountInfoById(ctx.tender.data.user_id);
-                renderData.auditHistory = [];
-                const times = ctx.tender.data.ledger_status === auditConst.status.checkNo ? ctx.tender.data.ledger_times - 1 : ctx.tender.data.ledger_times;
                 if (times >= 1) {
                     for (let i = 1; i <= times; i++) {
                         renderData.auditHistory.push(await ctx.service.ledgerAudit.getAuditors(ctx.tender.id, i));
@@ -138,13 +138,14 @@ module.exports = app => {
                 if (exist) {
                     throw '该审核人已存在,请勿重复添加';
                 }
-
-                const result = await ctx.service.ledgerAudit.addAuditor(ctx.tender.id, id, ctx.tender.data.ledger_times);
+                const is_gdzs = ctx.tender.info.shenpi.ledger === shenpiConst.sp_status.gdzs ? 1 : 0;
+                const result = await ctx.service.ledgerAudit.addAuditor(ctx.tender.id, id, ctx.tender.data.ledger_times, is_gdzs);
                 if (!result) {
                     throw '添加审核人失败';
                 }
 
-                responseData.data = await ctx.service.ledgerAudit.getAuditor(ctx.tender.id, id, ctx.tender.data.ledger_times);
+                // responseData.data = await ctx.service.ledgerAudit.getAuditor(ctx.tender.id, id, ctx.tender.data.ledger_times);
+                responseData.data = await ctx.service.ledgerAudit.getAuditorsWithOwner(ctx.tender.id, ctx.tender.data.ledger_times);
             } catch (err) {
                 responseData.err = 1;
                 responseData.msg = err.toString();
@@ -206,6 +207,7 @@ module.exports = app => {
                 ctx.body = { err: 0, msg: '', data: { url: '/tender/' + ctx.tender.id + '/ledger' } };
             } catch (err) {
                 this.log(err);
+                ctx.session.postError = err.toString();
                 ctx.body = this.ajaxErrorBody(err, '上报失败,请刷新页面重试');
             }
         }

+ 6 - 2
app/controller/ledger_controller.js

@@ -18,6 +18,7 @@ const auditConst = audit.ledger;
 const tenderMenu = require('../../config/menu').tenderMenu;
 const measureType = require('../const/tender').measureType;
 const spreadConst = require('../const/spread');
+const shenpiConst = require('../const/shenpi');
 const externalDataConst = require('../const/external_data.js');
 const fs = require('fs');
 const LzString = require('lz-string');
@@ -131,7 +132,9 @@ module.exports = app => {
                 const times = tender.data.ledger_status === auditConst.status.checkNo ? tender.data.ledger_times - 1 : tender.data.ledger_times;
 
                 const curAuditor = await ctx.service.ledgerAudit.getCurAuditor(tender.id, tender.data.ledger_times);
-                const auditors = await ctx.service.ledgerAudit.getAuditorsWithOwner(tender.id, times);
+                const auditors = tender.data.ledger_status === auditConst.status.checkNo && tender.data.user_id !== ctx.session.sessionUser.accountId ?
+                    await ctx.service.ledgerAudit.getAuditorsWithOwner(tender.id, times) :
+                    await ctx.service.ledgerAudit.getAuditorsWithOwner(tender.id, tender.data.ledger_times);
                 const user = await ctx.service.projectAccount.getAccountInfoById(ctx.tender.data.user_id);
                 const auditHistory = [];
                 if (times >= 1) {
@@ -157,7 +160,8 @@ module.exports = app => {
                     jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.ledger.explode),
                     stdBills,
                     stdChapters,
-                    dealBillsPermission: this._canUpdateDealBills(tender.data, auditors.filter(x => {return x.audit_order > 0}))
+                    dealBillsPermission: this._canUpdateDealBills(tender.data, auditors.filter(x => {return x.audit_order > 0})),
+                    shenpiConst,
                 };
                 if ((tender.data.ledger_status === auditConst.status.uncheck || tender.data.ledger_status === auditConst.status.checkNo) && tender.data.user_id === ctx.session.sessionUser.accountId) {
                     // renderData.accountGroup = accountGroup;

+ 67 - 0
app/middleware/ledger_audit_check.js

@@ -0,0 +1,67 @@
+'use strict';
+
+/**
+ *
+ *
+ * @author Ellisran
+ * @date 2020/10/15
+ * @version
+ */
+
+const status = require('../const/audit').ledger.status;
+const shenpiConst = require('../const/shenpi');
+const _ = require('lodash');
+
+module.exports = options => {
+    /**
+     * 标段校验 中间件
+     * 1. 读取标段数据(包括属性)
+     * 2. 检验用户是否可见标段(不校验具体权限)
+     *
+     * @param {function} next - 中间件继续执行的方法
+     * @return {void}
+     */
+    return function* ledgerAuditCheck(next) {
+        try {
+            if ((this.tender.data.ledger_status === status.uncheck || this.tender.data.ledger_status === status.checkNo) && this.tender.info.shenpi.ledger !== shenpiConst.sp_status.sqspr) {
+                const shenpi_status = this.tender.info.shenpi.ledger;
+                // 进一步比较审批流是否与审批流程设置的相同,不同则替换为固定审批流或固定的终审
+                const auditList = yield this.service.ledgerAudit.getAllDataByCondition({ where: { tender_id: this.tender.id, times: this.tender.data.ledger_times } });
+                const auditIdList = _.map(auditList, 'audit_id');
+                if (shenpi_status === shenpiConst.sp_status.gdspl) {
+                    const shenpiList = yield this.service.shenpiAudit.getAllDataByCondition({ where: { tid: this.tender.id, sp_type: shenpiConst.sp_type.ledger, sp_status: shenpi_status } });
+                    const shenpiIdList = _.map(shenpiList, 'audit_id');
+                    // 判断2个id数组是否相同,不同则删除原审批流,切换成固定的审批流
+                    if (!_.isEqual(auditIdList, shenpiIdList)) {
+                        yield this.service.ledgerAudit.updateNewAuditList(this.tender.data, shenpiIdList);
+                    }
+                } else if (shenpi_status === shenpiConst.sp_status.gdzs) {
+                    const shenpiInfo = yield this.service.shenpiAudit.getDataByCondition({ tid: this.tender.id, sp_type: shenpiConst.sp_type.ledger, sp_status: shenpi_status });
+                    // 判断最后一个id是否与固定终审id相同,不同则删除原审批流中如果存在的id和添加终审
+                    if (shenpiInfo && shenpiInfo.audit_id !== _.last(auditIdList)) {
+                        yield this.service.ledgerAudit.updateLastAudit(this.tender.data, auditList, shenpiInfo.audit_id);
+                    } else if (!shenpiInfo) {
+                        // 不存在终审人的状态下这里恢复为授权审批人
+                        this.tender.info.shenpi.ledger = shenpiConst.sp_status.sqspr;
+                    }
+                }
+            }
+            yield next;
+        } catch (err) {
+            console.log(err);
+            // 输出错误到日志
+            if (err.stack) {
+                this.logger.error(err);
+            } else {
+                this.getLogger('fail').info(JSON.stringify({
+                    error: err,
+                    project: this.session.sessionProject,
+                    user: this.session.sessionUser,
+                    body: this.session.body,
+                }));
+            }
+            // 重定向值标段管理
+            this.redirect(this.request.headers.referer);
+        }
+    };
+};

+ 42 - 44
app/public/js/ledger.js

@@ -2990,44 +2990,38 @@ $(document).ready(function() {
     $('dl').on('click', 'dd', function () {
         const auditorId = parseInt($(this).data('id'))
         if (auditorId) {
-            postData('/tender/' + getTenderId() + '/ledger/audit/add', { auditorId }, (data) => {
+            postData('/tender/' + getTenderId() + '/ledger/audit/add', { auditorId }, (datas) => {
                 const html = [];
-                html.push('<li class="list-group-item" auditorId="' + data.audit_id + '"><a href="javascript: void(0)" class="text-danger pull-right">移除</a>');
-                html.push('<span>');
-                html.push(data.audit_order + ' ');
-                html.push(data.name + ' ');
-                html.push('</span>');
-                html.push('<small class="text-muted">');
-                html.push(data.role);
-                html.push('</small></li>');
-                $('#auditors').append(html.join(''));
-
                 // 如果是重新上报,添加到重新上报列表中
                 const auditorshtml = [];
-                // 重新上报时。令其它的审批人流程图标转换
-                $('#auditors-list li i').removeClass('fa-stop-circle').addClass('fa-chevron-circle-down');
-                for (let i = 0; i < $('#auditors-list li').length; i++) {
-                    $('#auditors-list li').eq(i).find('.pull-right').text(transFormToChinese(i+1) + '审');
-                    $('#auditors-list2 li').eq(i).find('.pull-right').text(transFormToChinese(i+1) + '审');
-                }
-                // 添加新审批人
-                auditorshtml.push('<li class="list-group-item" data-auditid="' + data.audit_id + '">');
-                auditorshtml.push('<i class="fa fa-stop-circle"></i> ');
-                auditorshtml.push(data.name + ' <small class="text-muted">' + data.role + '</small>');
-                auditorshtml.push('<span class="pull-right">终审</span>');
-                auditorshtml.push('</li>');
-                $('#auditors-list').append(auditorshtml.join(''));
-
-                const auditorshtml2 = [];
-                // 重新上报时。令其它的审批人流程图标转换
-                $('#auditors-list2 li i').removeClass('fa-stop-circle').addClass('fa-chevron-circle-down');
-                // 添加新审批人
-                auditorshtml2.push('<li class="list-group-item" data-auditid="' + data.audit_id + '">');
-                auditorshtml2.push('<h5 class="card-title"><i class="fa fa-stop-circle"></i> ');
-                auditorshtml2.push(data.name + ' <small class="text-muted">' + data.role + '</small>');
-                auditorshtml2.push('<span class="pull-right">终审</span>');
-                auditorshtml2.push('</h5></li>');
-                $('#auditors-list2').append(auditorshtml2.join(''));
+                for (const [index,data] of datas.entries()) {
+                    if (index !== 0) {
+                        html.push('<li class="list-group-item" auditorId="' + data.audit_id + '">');
+                        if (shenpi_status === shenpiConst.sp_status.sqspr || (shenpi_status === shenpiConst.sp_status.gdzs && index+1 !== datas.length)) {
+                            html.push('<a href="javascript: void(0)" class="text-danger pull-right">移除</a>');
+                        }
+                        html.push('<span>');
+                        html.push(data.audit_order + ' ');
+                        html.push(data.name + ' ');
+                        html.push('</span>');
+                        html.push('<small class="text-muted">');
+                        html.push(data.role);
+                        html.push('</small></li>');
+                    }
+                    auditorshtml.push('<li class="list-group-item" data-auditid="' + data.audit_id + '">');
+                    auditorshtml.push('<i class="fa fa-stop-circle"></i> ');
+                    auditorshtml.push(data.name + ' <small class="text-muted">' + data.role + '</small>');
+                    if (index === 0) {
+                        auditorshtml.push('<span class="pull-right">原报</span>');
+                    } else if (index+1 === datas.length) {
+                        auditorshtml.push('<span class="pull-right">终审</span>');
+                    } else {
+                        auditorshtml.push('<span class="pull-right">'+ transFormToChinese(index) +'审</span>');
+                    }
+                    auditorshtml.push('</li>');
+                }
+                $('#auditors').html(html.join(''));
+                $('#auditors-list').html(auditorshtml.join(''));
             });
         }
     });
@@ -3045,19 +3039,19 @@ $(document).ready(function() {
 
             // 如果是重新上报
             // 令最后一个图标转换
-            $('#auditors-list li[data-auditid="' + data.auditorId + '"]').remove();
+            $('#auditors-list li[data-auditorid="' + data.auditorId + '"]').remove();
             if ($('#auditors-list li').length !== 0 && !$('#auditors-list li i').hasClass('fa-stop-circle')) {
                 $('#auditors-list li').eq($('#auditors-list li').length-1).children('i')
                     .removeClass('fa-chevron-circle-down').addClass('fa-stop-circle');
             }
-            $('#auditors-list2 li[data-auditid="' + data.auditorId + '"]').remove();
-            if ($('#auditors-list2 li').length !== 0 && !$('#auditors-list2 li i').hasClass('fa-stop-circle')) {
-                $('#auditors-list2 li').eq($('#auditors-list2 li').length-1).children('i')
-                    .removeClass('fa-chevron-circle-down').addClass('fa-stop-circle');
-            }
+            // $('#auditors-list2 li[data-auditid="' + data.auditorId + '"]').remove();
+            // if ($('#auditors-list2 li').length !== 0 && !$('#auditors-list2 li i').hasClass('fa-stop-circle')) {
+            //     $('#auditors-list2 li').eq($('#auditors-list2 li').length-1).children('i')
+            //         .removeClass('fa-chevron-circle-down').addClass('fa-stop-circle');
+            // }
             for (let i = 0; i < $('#auditors-list li').length; i++) {
-                $('#auditors-list li').eq(i).find('.pull-right').text((i+1 === $('#auditors-list li').length ? '终' : transFormToChinese(i+1)) + '审')
-                $('#auditors-list2 li').eq(i).find('.pull-right').text((i+1 === $('#auditors-list2 li').length ? '终' : transFormToChinese(i+1)) + '审')
+                $('#auditors-list li').eq(i).find('.pull-right').text(i === 0 ? '原报' : (i+1 === $('#auditors-list li').length ? '终' : transFormToChinese(i+1)) + '审')
+                // $('#auditors-list2 li').eq(i).find('.pull-right').text((i+1 === $('#auditors-list2 li').length ? '终' : transFormToChinese(i+1)) + '审')
             }
         });
     });
@@ -3219,7 +3213,11 @@ $(document).ready(function() {
 // 检查上报情况
 function checkAuditorFrom () {
     if ($('#auditors li').length === 0) {
-        toastr.error('请先选择审批人,再上报数据');
+        if(shenpi_status === shenpiConst.sp_status.gdspl) {
+            toastr.error('请联系管理员添加审批人');
+        } else {
+            toastr.error('请先选择审批人,再上报数据');
+        }
         return false;
     } else {
         $('#hide-all').show();

+ 2 - 2
app/public/js/stage_audit.js

@@ -247,9 +247,9 @@ $(document).ready(function () {
 function checkAuditorFrom () {
     if ($('#auditors li').length === 0) {
         if(shenpi_status === shenpiConst.sp_status.gdspl) {
-            toast('请联系管理员添加审批人', 'error', 'exclamation-circle');
+            toastr.error('请联系管理员添加审批人');
         } else {
-            toast('请先选择审批人,再上报数据', 'error', 'exclamation-circle');
+            toastr.error('请先选择审批人,再上报数据');
         }
         return false;
     }

+ 3 - 2
app/router.js

@@ -9,6 +9,7 @@ module.exports = app => {
     const projectManagerCheck = app.middlewares.projectManagerCheck();
     // 标段读取中间件
     const tenderCheck = app.middlewares.tenderCheck();
+    const ledgerAuditCheck = app.middlewares.ledgerAuditCheck();
     const uncheckTenderCheck = app.middlewares.uncheckTenderCheck();
     // 期读取中间件
     const stageCheck = app.middlewares.stageCheck();
@@ -131,7 +132,7 @@ module.exports = app => {
     app.get('/tender/:id/cooperation', sessionAuth, tenderCheck, 'tenderController.tenderCooperation');
 
     // 台账管理相关
-    app.get('/tender/:id/ledger', sessionAuth, tenderCheck, uncheckTenderCheck, 'ledgerController.explode');
+    app.get('/tender/:id/ledger', sessionAuth, tenderCheck, uncheckTenderCheck, ledgerAuditCheck, 'ledgerController.explode');
     app.post('/tender/:id/ledger/load', sessionAuth, tenderCheck, uncheckTenderCheck, 'ledgerController.loadExplodeData');
     app.post('/tender/:id/ledger/get-children', sessionAuth, tenderCheck, uncheckTenderCheck, 'ledgerController.getChildren');
     app.post('/tender/:id/ledger/update', sessionAuth, tenderCheck, uncheckTenderCheck, 'ledgerController.update');
@@ -140,7 +141,7 @@ module.exports = app => {
     app.post('/tender/:id/pos/update', sessionAuth, tenderCheck, uncheckTenderCheck, 'ledgerController.posUpdate');
     app.post('/tender/:id/pos/paste', sessionAuth, tenderCheck, uncheckTenderCheck, 'ledgerController.posPaste');
     app.post('/tender/:id/ledger/deal2sgfh', sessionAuth, tenderCheck, uncheckTenderCheck, 'ledgerController.deal2sgfh');
-    app.post('/tender/:id/ledger/check', sessionAuth, tenderCheck, uncheckTenderCheck, 'ledgerController.check');
+    app.post('/tender/:id/ledger/check', sessionAuth, tenderCheck, uncheckTenderCheck, ledgerAuditCheck, 'ledgerController.check');
 
     // 台账审批相关
     app.get('/tender/:id/ledger/audit', sessionAuth, tenderCheck, uncheckTenderCheck, 'ledgerAuditController.index');

+ 79 - 14
app/service/ledger_audit.js

@@ -13,6 +13,7 @@ const smsTypeConst = require('../const/sms_type');
 const SMS = require('../lib/sms');
 const SmsAliConst = require('../const/sms_alitemplate');
 const wxConst = require('../const/wechat_template');
+const shenpiConst = require('../const/shenpi');
 const pushType = require('../const/audit').pushType;
 
 module.exports = app => {
@@ -148,17 +149,28 @@ module.exports = app => {
          * @param {Number} times - 第几次审批
          * @return {Promise<number>}
          */
-        async addAuditor(tenderId, auditorId, times = 1) {
-            const newOrder = await this.getNewOrder(tenderId, times);
-            const data = {
-                tender_id: tenderId,
-                audit_id: auditorId,
-                times,
-                audit_order: newOrder,
-                status: auditConst.status.uncheck,
-            };
-            const result = await this.db.insert(this.tableName, data);
-            return (result.effectRows = 1);
+        async addAuditor(tenderId, auditorId, times = 1, is_gdzs = 0) {
+            const transaction = await this.db.beginTransaction();
+            try {
+                let newOrder = await this.getNewOrder(tenderId, times);
+                // 判断是否存在固定终审,存在则newOrder - 1并使终审order+1
+                newOrder = is_gdzs === 1 ? newOrder - 1 : newOrder;
+                if (is_gdzs) await this._syncOrderByDelete(transaction, tenderId, newOrder, times, '+');
+                const data = {
+                    tender_id: tenderId,
+                    audit_id: auditorId,
+                    times,
+                    audit_order: newOrder,
+                    status: auditConst.status.uncheck,
+                };
+                const result = await transaction.insert(this.tableName, data);
+                await transaction.commit();
+                return (result.effectRows = 1);
+            } catch (err) {
+                await transaction.rollback();
+                throw err;
+            }
+            return false;
         }
 
         /**
@@ -170,7 +182,7 @@ module.exports = app => {
          * @return {Promise<*>}
          * @private
          */
-        async _syncOrderByDelete(transaction, tenderId, order, times) {
+        async _syncOrderByDelete(transaction, tenderId, order, times, selfOperate = '-') {
             this.initSqlBuilder();
             this.sqlBuilder.setAndWhere('tender_id', {
                 value: tenderId,
@@ -186,7 +198,7 @@ module.exports = app => {
             });
             this.sqlBuilder.setUpdateData('audit_order', {
                 value: 1,
-                selfOperate: '-',
+                selfOperate: selfOperate,
             });
             const [sql, sqlParam] = this.sqlBuilder.build(this.tableName, 'update');
             const data = await transaction.query(sql, sqlParam);
@@ -230,7 +242,11 @@ module.exports = app => {
         async start(tenderId, times = 1) {
             const audit = await this.getDataByCondition({ tender_id: tenderId, times, audit_order: 1 });
             if (!audit) {
-                throw '审核人信息错误';
+                if(this.ctx.tender.info.shenpi.ledger === shenpiConst.sp_status.gdspl) {
+                    throw '请联系管理员添加审批人';
+                } else {
+                    throw '请先选择审批人,再上报数据';
+                }
             }
             const sum = await this.ctx.service.ledger.addUp({ tender_id: tenderId /* , is_leaf: true*/ });
 
@@ -511,6 +527,55 @@ module.exports = app => {
             result.unshift(user);
             return result;
         }
+
+        async updateNewAuditList(tender, newIdList) {
+            const transaction = await this.db.beginTransaction();
+            try {
+                // 先删除旧的审批流,再添加新的
+                transaction.delete(this.tableName, { tender_id: tender.id, times: tender.ledger_times });
+                const newAuditors = [];
+                let order = 1;
+                for (const aid of newIdList) {
+                    newAuditors.push({
+                        tender_id: tender.id, audit_id: aid,
+                        times: tender.ledger_times, audit_order: order, status: auditConst.status.uncheck,
+                    });
+                    order++;
+                }
+                if(newAuditors.length > 0) await transaction.insert(this.tableName, newAuditors);
+                await transaction.commit();
+            } catch (err) {
+                await transaction.rollback();
+                throw err;
+            }
+        }
+
+        async updateLastAudit(tender, auditList, lastId) {
+            const transaction = await this.db.beginTransaction();
+            try {
+                // 先判断auditList里的aid是否与lastId相同,相同则删除并重新更新order
+                const idList = this._.map(auditList, 'audit_id');
+                let order = idList.length + 1;
+                if (idList.indexOf(lastId) !== -1) {
+                    transaction.delete(this.tableName, { tender_id: tender.id, times: tender.ledger_times, audit_id: lastId });
+                    const audit = this._.find(auditList, { 'audit_id': lastId });
+                    // 顺移之后审核人流程顺序
+                    await this._syncOrderByDelete(transaction, tender.id, audit.audit_order, tender.ledger_times);
+                    order = order - 1;
+                }
+
+                // 添加终审
+                const newAuditor = {
+                    tender_id: tender.id, audit_id: lastId,
+                    times: tender.ledger_times, audit_order: order, status: auditConst.status.uncheck,
+                };
+                await transaction.insert(this.tableName, newAuditor);
+                await transaction.commit();
+            } catch (err) {
+                await transaction.rollback();
+                throw err;
+            }
+        }
     }
 
     return LedgerAudit;

+ 13 - 2
app/view/ledger/explode_modal.ejs

@@ -94,6 +94,7 @@
             </div>
             <div class="modal-body">
                 <div class="dropdown text-right">
+                    <% if (ctx.tender.info.shenpi.ledger !== shenpiConst.sp_status.gdspl) { %>
                     <button class="btn btn-outline-primary btn-sm dropdown-toggle" type="button"
                         id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true"
                         aria-expanded="false">
@@ -118,6 +119,7 @@
                             <% }) %>
                         </dl>
                     </div>
+                    <% } %>
                 </div>
                 <div class="card mt-3">
                     <div class="card-header">
@@ -127,8 +129,11 @@
                     <ul class="list-group list-group-flush" id="auditors">
                         <% for (let i = 0, iLen = auditorList.length; i < iLen; i++) { %>
                         <li class="list-group-item" auditorId="<%- auditorList[i].audit_id %>">
+                            <% if (ctx.tender.info.shenpi.ledger === shenpiConst.sp_status.sqspr ||
+                                    (ctx.tender.info.shenpi.ledger === shenpiConst.sp_status.gdzs && i+1 !== iLen)) { %>
                             <a href="javascript: void(0)" class="text-danger pull-right">移除</a>
-                            <%- auditorList[i].audit_order %> <%- auditorList[i].name %>
+                            <% } %>
+                            <span><%- auditorList[i].audit_order %> <%- auditorList[i].name %></span>
                             <small class="text-muted"><%- auditorList[i].role %></small>
                         </li>
                         <% } %>
@@ -160,7 +165,7 @@
                             <a class="sp-list-item" href="#sub-sp" data-toggle="modal" data-target="#sub-sp" id="hideSp">修改审批流程</a>
                         <% } %>
                         <div class="card mt-3">
-                            <ul class="list-group list-group-flush">
+                            <ul class="list-group list-group-flush" id="auditors-list">
                                 <% auditors.forEach((item, idx) => { %>
                                 <% if (idx === 0) { %>
                                 <li class="list-group-item" data-auditorId="<%- item.audit_id %>">
@@ -330,6 +335,12 @@
         </div>
     </div>
 </div>
+<% if (ctx.session.sessionUser.accountId === ctx.tender.data.user_id && (ctx.tender.data.ledger_status === auditConst.status.uncheck || ctx.tender.data.ledger_status === auditConst.status.checkNo)) { %>
+    <script>
+        const shenpi_status = <%- ctx.tender.info.shenpi.ledger %>;
+        const shenpiConst =  JSON.parse('<%- JSON.stringify(shenpiConst) %>');
+    </script>
+<% } %>
 <script>
     const cur_uid  = parseInt('<%- ctx.session.sessionUser.accountId %>');
     $('.sp-location-list').on('shown.bs.modal', function () {