Просмотр исходного кода

feat: 预付款增加修改审批流程

lanjianrong 6 часов назад
Родитель
Сommit
d49907d7b7

+ 29 - 1
app/controller/advance_controller.js

@@ -6,6 +6,7 @@ const typeConsts = require('../const/advance');
 const sendToWormhole = require('stream-wormhole');
 const path = require('path');
 const fs = require('fs');
+const auditType = require('../const/audit').auditType;
 module.exports = app => {
     class advanceController extends app.BaseController {
         constructor(ctx) {
@@ -81,9 +82,11 @@ module.exports = app => {
                 jsFiles: this.app.jsFiles.common.concat(this.app.jsFiles.advance.info),
                 preUrl: `/tender/${ctx.tender.id}/advance/${ctx.advance.id}`,
                 whiteList: ctx.app.config.multipart.whitelist,
+                adminAuditors: [],
             };
             // 获取所有项目参与者
-            if ((ctx.advance.status === auditConst.status.uncheck || ctx.advance.status === auditConst.status.checkNo) && ctx.session.sessionUser.accountId === ctx.advance.uid) {
+            if (((ctx.advance.status === auditConst.status.uncheck || ctx.advance.status === auditConst.status.checkNo) && ctx.session.sessionUser.accountId === ctx.advance.uid) ||
+                (ctx.session.sessionUser.is_admin && ctx.advance.status !== auditConst.status.uncheck && ctx.advance.status !== auditConst.status.checked)) {
                 // data.accountGroup = accountGroup;
                 // 获取所有项目参与者
                 const accountList = await ctx.service.projectAccount.getAllSubProjectAccount(ctx.subProject);
@@ -94,6 +97,9 @@ module.exports = app => {
                     return { groupName: item.name, groupList };
                 }).filter(x => { return x.groupList.length > 0; });
                 data.auditorList = await ctx.service.advanceAudit.getAuditors(ctx.advance.id, ctx.advance.times);
+                if (ctx.session.sessionUser.is_admin) {
+                    data.adminAuditors = await ctx.service.advanceAudit.getAdminAuditGroups(ctx.advance.id, ctx.advance.times);
+                }
             }
             // data.fileList = await ctx.service.advanceFile.getAdvanceFiles({ vid: ctx.advance.id });
             // 获取审批流程中右边列表
@@ -187,6 +193,7 @@ module.exports = app => {
                 renderData.typeColMap = typeConsts.typeColMap;
                 renderData.advancePayTotal = advancePayTotal;
                 renderData.prevAdvance = prevAdvance;
+                renderData.auditType = auditType;
                 await this.layout('advance/detail.ejs', renderData, 'advance/modal_audit.ejs');
             } catch (error) {
                 this.log(error);
@@ -444,6 +451,27 @@ module.exports = app => {
             }
         }
 
+        /**
+         * 管理员修改当前预付款审批流程
+         * @param {Object} ctx 全局上下文
+         */
+        async saveAudit(ctx) {
+            try {
+                if (!ctx.session.sessionUser.is_admin ||
+                    ctx.advance.status === auditConst.status.uncheck ||
+                    ctx.advance.status === auditConst.status.checked) {
+                    throw '您无权进行该操作';
+                }
+                const data = JSON.parse(ctx.request.body.data);
+                await ctx.service.advanceAudit.saveAudit(ctx.advance, data);
+                const auditors = await ctx.service.advanceAudit.getAdminAuditGroups(ctx.advance.id, ctx.advance.times);
+                ctx.body = { err: 0, msg: '', data: auditors };
+            } catch (err) {
+                ctx.log(err);
+                ctx.body = { err: 1, msg: err.toString(), data: null };
+            }
+        }
+
         _checkAdvanceFileCanModify(ctx) {
             // 检查登录用户,是否可操作
             const accountId = ctx.session.sessionUser.accountId;

+ 104 - 4
app/public/js/advance_audit.js

@@ -34,6 +34,104 @@ $(document).ready(function () {
     let oldSearchVal = null
     handleFileList(fileList)
 
+    if ($('#admin-edit-shenpi').length) {
+        let adminAuditors = advanceAdminAuditors
+        let adminAuditChanged = false
+
+        function makeAdminSelect(code, aid, operate) {
+            let groups = ''
+            accountGroup.forEach((group, idx) => {
+                if (!group) return
+                const users = group.groupList.map(item => `<dd class="border-bottom p-2 mb-0" data-id="${item.id}">
+                    <p class="mb-0 d-flex"><span class="text-primary">${item.name}</span><span class="ml-auto">${item.mobile || ''}</span></p>
+                    <span class="text-muted">${item.role || ''}</span></dd>`).join('')
+                groups += `<dt><a href="javascript:void(0);" class="acc-btn" data-groupid="${idx}" data-type="hide"><i class="fa fa-plus-square"></i></a> ${group.groupName}</dt>
+                    <div class="dd-content" data-toggleid="${idx}">${users}</div>`
+            })
+            return `<div class="dropdown-menu dropdown-menu-right" id="${code}_dropdownMenu" aria-labelledby="${code}_dropdownMenuButton" style="width:220px">
+                <div class="mb-2 p-2"><input class="form-control form-control-sm gr-search" placeholder="姓名/手机 检索" autocomplete="off" data-code="${code}"></div>
+                <dl class="list-unstyled book-list" data-aid="${aid}" data-operate="${operate}">${groups}</dl></div>`
+        }
+
+        function renderAdminAuditors(groups) {
+            const html = []
+            groups.forEach((group, i) => {
+                if (i === 0) return
+                group.forEach((auditor, j) => {
+                    html.push('<tr>')
+                    html.push(`<td class="text-left">${j === 0 ? i + '审' : ''}</td>`)
+                    html.push(`<td>${auditor.name} <small class="text-muted">${auditor.role || ''}</small></td>`)
+                    const statusText = auditor.status === auditConst.status.uncheck ? '待审批' : (auditConst.auditString[auditor.status] || '')
+                    html.push(`<td class="text-center"><span class="${auditConst.auditStringClass[auditor.status] || ''}">${statusText}</span></td>`)
+                    html.push('<td class="text-center">')
+                    if ((auditor.status === auditConst.status.checking || auditor.status === auditConst.status.uncheck) && j === group.length - 1) {
+                        html.push(`<span class="dropdown mr-2"><a href="javascript:void(0)" id="${auditor.audit_id}_add_dropdownMenuButton" data-toggle="dropdown">增加</a>${makeAdminSelect(auditor.audit_id + '_add', auditor.audit_id, 'add')}</span>`)
+                    }
+                    if (auditor.status === auditConst.status.uncheck) {
+                        html.push(`<span class="dropdown mr-2"><a href="javascript:void(0)" id="${auditor.audit_id}_change_dropdownMenuButton" data-toggle="dropdown">更换</a>${makeAdminSelect(auditor.audit_id + '_change', auditor.audit_id, 'change')}</span>`)
+                        html.push(`<span class="dropdown"><a href="javascript:void(0)" class="text-danger" data-toggle="dropdown">移除</a>
+                            <div class="dropdown-menu"><span class="dropdown-item">确认移除审批人?</span><div class="dropdown-divider"></div>
+                            <div class="px-2 py-1 text-center"><button class="remove-audit btn btn-sm btn-danger" data-id="${auditor.audit_id}">移除</button> <button class="btn btn-sm btn-secondary">取消</button></div></div></span>`)
+                    }
+                    html.push('</td></tr>')
+                })
+            })
+            $('#admin-edit-shenpi-list').html(html.join(''))
+        }
+
+        renderAdminAuditors(adminAuditors)
+
+        $('body').on('click', '#admin-edit-shenpi .book-list dt', function () {
+            const idx = $(this).find('.acc-btn').attr('data-groupid')
+            const button = $(this).find('.acc-btn')
+            const content = $(this).parent().find(`div[data-toggleid="${idx}"]`)
+            const showing = button.attr('data-type') === 'hide'
+            content.toggle(showing)
+            button.attr('data-type', showing ? 'show' : 'hide')
+            button.find('i').toggleClass('fa-plus-square', !showing).toggleClass('fa-minus-square-o', showing)
+            return false
+        })
+
+        let adminSearchTimer = null
+        $('body').on('input propertychange', '#admin-edit-shenpi .gr-search', function () {
+            const input = $(this)
+            clearTimeout(adminSearchTimer)
+            adminSearchTimer = setTimeout(() => {
+                const keyword = input.val()
+                const list = input.closest('.dropdown-menu').find('.book-list')
+                if (!keyword) {
+                    list.html($(makeAdminSelect(input.data('code'), list.data('aid'), list.data('operate'))).find('.book-list').html())
+                    return
+                }
+                list.html(accountList.filter(item => item && (item.name.indexOf(keyword) !== -1 || (item.mobile && item.mobile.indexOf(keyword) !== -1)))
+                    .map(item => `<dd class="border-bottom p-2 mb-0" data-id="${item.id}"><p class="mb-0 d-flex"><span class="text-primary">${item.name}</span><span class="ml-auto">${item.mobile || ''}</span></p><span class="text-muted">${item.role || ''}</span></dd>`).join(''))
+            }, 400)
+        })
+
+        $('body').on('click', '#admin-edit-shenpi dl dd', function () {
+            const newAid = Number($(this).data('id'))
+            const list = $(this).closest('.book-list')
+            if (adminAuditors.some(group => group.some(auditor => auditor.audit_id === newAid))) return toastr.warning('该审核人已存在,请勿重复添加')
+            postData(preUrl + '/audit/save', { operate: list.data('operate'), old_aid: Number(list.data('aid')), new_aid: newAid }, datas => {
+                adminAuditors = datas
+                adminAuditChanged = true
+                renderAdminAuditors(datas)
+            })
+        })
+
+        $('body').on('click', '#admin-edit-shenpi .remove-audit', function () {
+            postData(preUrl + '/audit/save', { operate: 'del', old_aid: Number($(this).data('id')) }, datas => {
+                adminAuditors = datas
+                adminAuditChanged = true
+                renderAdminAuditors(datas)
+            })
+        })
+
+        $('#sub-sp2').on('hidden.bs.modal', function () {
+            if (adminAuditChanged) window.location.reload()
+        })
+    }
+
     // 控制上报弹窗的文案
     function checkModal(isHide) {
         $('#start-modal').empty()
@@ -61,8 +159,8 @@ $(document).ready(function () {
                         <span class="text-muted">${item.role || ''}</span>
                     </dd>`
                 })
-                $('.book-list').empty()
-                $('.book-list').append(html)
+                $('.book-list').not('#admin-edit-shenpi .book-list').empty()
+                $('.book-list').not('#admin-edit-shenpi .book-list').append(html)
             } else {
                 if (!$('.acc-btn').length) {
                     accountGroup.forEach((group, idx) => {
@@ -81,8 +179,8 @@ $(document).ready(function () {
                         });
                         html += '</div>'
                     })
-                    $('.book-list').empty()
-                    $('.book-list').append(html)
+                    $('.book-list').not('#admin-edit-shenpi .book-list').empty()
+                    $('.book-list').not('#admin-edit-shenpi .book-list').append(html)
                 }
             }
         }, 400);
@@ -90,6 +188,7 @@ $(document).ready(function () {
 
     // 添加审批流程按钮逻辑
     $('.book-list').on('click', 'dt', function () {
+        if ($(this).closest('#admin-edit-shenpi').length) return
         const idx = $(this).find('.acc-btn').attr('data-groupid')
         const type = $(this).find('.acc-btn').attr('data-type')
         if (type === 'hide') {
@@ -109,6 +208,7 @@ $(document).ready(function () {
 
     // 添加到审批流程中
     $('dl').on('click', 'dd', function () {
+        if ($(this).closest('#admin-edit-shenpi').length) return
         const id = parseInt($(this).data('id'))
         if (id !== 0) {
             postData(preUrl + '/audit/add', { auditorId: id }, (datas) => {

+ 1 - 0
app/router.js

@@ -674,6 +674,7 @@ module.exports = app => {
     app.post('/tender/:id/advance/:order/audit/delete', sessionAuth, tenderCheck, subProjectCheck, advanceCheck, 'advanceController.deleteAudit');
     app.post('/tender/:id/advance/:order/audit/start', sessionAuth, tenderCheck, subProjectCheck, tenderBuildCheck, advanceCheck, 'advanceController.start');
     app.post('/tender/:id/advance/:order/audit/check', sessionAuth, tenderCheck, subProjectCheck, tenderBuildCheck, advanceCheck, 'advanceController.checkAudit');
+    app.post('/tender/:id/advance/:order/audit/save', sessionAuth, tenderCheck, subProjectCheck, tenderBuildCheck, advanceCheck, 'advanceController.saveAudit');
     app.post('/tender/:id/advance/:order/update', sessionAuth, tenderCheck, subProjectCheck, advanceCheck, 'advanceController.update');
     app.post('/tender/:id/advance/:order/file/upload', sessionAuth, tenderCheck, subProjectCheck, advanceCheck, 'advanceController.upload');
     app.get('/tender/:id/advance/:order/file/:fid/download', sessionAuth, tenderCheck, subProjectCheck, 'advanceController.downloadFile');

+ 90 - 0
app/service/advance_audit.js

@@ -7,6 +7,7 @@ const pushOperate = require('../const/spec_3f').pushOperate;
 const smsTypeConst = require('../const/sms_type');
 const wxConst = require('../const/wechat_template.js');
 const advanceConst = require('../const/advance');
+const auditType = require('../const/audit').auditType;
 module.exports = app => {
     class AdvanceAudit extends app.BaseService {
         constructor(ctx) {
@@ -786,6 +787,95 @@ module.exports = app => {
         }
 
         /**
+         * 管理员修改审批流程使用的分组数据(当前预付款为单人逐级审批)。
+         */
+        async getAdminAuditGroups(vid, times) {
+            const ownerAndAuditors = await this.getAuditorsWithOwner(vid, times);
+            const owner = ownerAndAuditors[0];
+            const auditors = [owner].concat(await this.getAuditors(vid, times));
+            return auditors.map((item, index) => [{
+                ...item,
+                audit_type: auditType.key.common,
+                audit_order: index,
+            }]);
+        }
+
+        /**
+         * 管理员修改审批流程。
+         */
+        async saveAudit(advance, data) {
+            const transaction = await this.db.beginTransaction();
+            try {
+                const audits = await transaction.select(this.tableName, {
+                    where: { vid: advance.id, times: advance.times },
+                    orders: [['order', 'asc'], ['id', 'asc']],
+                });
+                const current = audits.find(item => item.audit_id === Number(data.old_aid));
+                if (!current) throw '审批人不存在';
+
+                if (data.operate !== 'del') {
+                    const newId = Number(data.new_aid);
+                    if (!newId) throw '请选择审批人';
+                    if (audits.some(item => item.audit_id === newId && item.id !== current.id)) {
+                        throw '该审核人已存在,请勿重复添加';
+                    }
+                    const account = await this.ctx.service.projectAccount.getDataById(newId);
+                    if (!account || !account.enable || Number(account.project_id) !== Number(this.ctx.session.sessionProject.id)) {
+                        throw '审批人不存在或已停用';
+                    }
+
+                    if (data.operate === 'add') {
+                        if ([auditConst.status.uncheck, auditConst.status.checking].indexOf(current.status) < 0) throw '当前节点后无法新增';
+                        await this._syncOrderByDelete(transaction, advance.id, current.order + 1, advance.times, '+');
+                        await transaction.insert(this.tableName, {
+                            tid: advance.tid,
+                            vid: advance.id,
+                            type: advance.type,
+                            audit_id: newId,
+                            times: advance.times,
+                            order: current.order + 1,
+                            status: auditConst.status.uncheck,
+                        });
+                    } else if (data.operate === 'change') {
+                        if (current.status !== auditConst.status.uncheck) throw '当前审批人无法更换';
+                        await transaction.update(this.tableName, { id: current.id, audit_id: newId });
+                    } else {
+                        throw '不支持的操作';
+                    }
+                } else {
+                    if (current.status !== auditConst.status.uncheck) throw '当前审批人无法移除';
+                    await transaction.delete(this.tableName, { id: current.id });
+                    await this._syncOrderByDelete(transaction, advance.id, current.order + 1, advance.times);
+                }
+
+                // 同步固定审批配置,避免中间件再次用旧配置覆盖本次调整。
+                const shenpiStatus = this.ctx.tender.info.shenpi.advance;
+                const newAudits = await transaction.select(this.tableName, {
+                    where: { vid: advance.id, times: advance.times },
+                    orders: [['order', 'asc'], ['id', 'asc']],
+                });
+                if (shenpiStatus === shenpiConst.sp_status.gdspl) {
+                    const groups = newAudits.map((item, index) => [{
+                        ...item,
+                        audit_type: auditType.key.common,
+                        audit_order: index + 1,
+                    }]);
+                    await this.ctx.service.shenpiAudit.updateAuditListWithAuditType(
+                        transaction, this.ctx.tender.id, shenpiStatus, shenpiConst.sp_type.advance, groups, advance.sp_group || 0
+                    );
+                } else if (shenpiStatus === shenpiConst.sp_status.gdzs) {
+                    await this.ctx.service.shenpiAudit.updateAuditList(
+                        transaction, this.ctx.tender.id, shenpiStatus, shenpiConst.sp_type.advance, this._.map(newAudits, 'audit_id')
+                    );
+                }
+                await transaction.commit();
+            } catch (err) {
+                await transaction.rollback();
+                throw err;
+            }
+        }
+
+        /**
          * 取待审批期列表(wap用)
          *
          * @param auditorId

+ 19 - 11
app/view/advance/detail.ejs

@@ -93,9 +93,12 @@
                             </tr>
                         </thead>
                         <tbody>
-                            <tr>
-                                <td width="30%">
-                                    <div class="card">
+                            <tr>
+                                <td width="30%">
+                                    <% if (ctx.session.sessionUser.is_admin && advance.status !== auditConst.status.uncheck && advance.status !== auditConst.status.checked) { %>
+                                    <a class="sp-list-item hideSp" href="#sub-sp2" data-toggle="modal" data-target="#sub-sp2">修改审批流程</a>
+                                    <% } %>
+                                    <div class="card">
                                         <ul class="list-group list-group-flush" id="auditors2">
                                             <% auditors.forEach((item, idx) => { %>
                                             <% if (idx === 0) { %>
@@ -186,9 +189,12 @@
                             </tr>
                         </thead>
                         <tbody>
-                            <tr>
-                                <td width="30%" style="vertical-align: top">
-                                    <div class="card">
+                            <tr>
+                                <td width="30%" style="vertical-align: top">
+                                    <% if (ctx.session.sessionUser.is_admin && advance.status !== auditConst.status.uncheck && advance.status !== auditConst.status.checked) { %>
+                                    <a class="sp-list-item hideSp" href="#sub-sp2" data-toggle="modal" data-target="#sub-sp2">修改审批流程</a>
+                                    <% } %>
+                                    <div class="card mt-2">
                                         <ul class="list-group list-group-flush">
                                             <% auditors.forEach((item, idx) => { %>
                                             <% if (idx === 0) { %>
@@ -378,7 +384,8 @@
     const preUrl = '<%- preUrl %>';
     const fileList = JSON.parse(unescape('<%- escape(JSON.stringify(fileList)) %>')) || [];
     const whiteList = JSON.parse('<%- JSON.stringify(whiteList) %>');
-    const curAuditor = JSON.parse(unescape('<%- escape(JSON.stringify(ctx.advance.curAuditor)) %>'));
+    const curAuditor = JSON.parse(unescape('<%- escape(JSON.stringify(ctx.advance.curAuditor)) %>'));
+    const auditType = JSON.parse('<%- JSON.stringify(auditType) %>');
 
     // 展开历史审核记录
     $('td #fold-btn').click(function () {
@@ -399,10 +406,11 @@
     // 处理换行
     advance.remark && $('#ad-remark').html(advance.remark.replace(/<br\/>/g, '\n').replace(/' '/, '\s'));
 </script>
-<% if(isEdited && ctx.session.sessionUser.accountId === ctx.advance.uid) { %>
-<script>
-    const accountList = JSON.parse(unescape('<%- escape(JSON.stringify(accountList)) %>'));
-    const accountGroup = JSON.parse(unescape('<%- escape(JSON.stringify(accountGroup)) %>'));
+<% if((isEdited && ctx.session.sessionUser.accountId === ctx.advance.uid) || (ctx.session.sessionUser.is_admin && advance.status !== auditConst.status.uncheck && advance.status !== auditConst.status.checked)) { %>
+<script>
+    const accountList = JSON.parse(unescape('<%- escape(JSON.stringify(accountList)) %>'));
+    const accountGroup = JSON.parse(unescape('<%- escape(JSON.stringify(accountGroup)) %>'));
+    const advanceAdminAuditors = JSON.parse(unescape('<%- escape(JSON.stringify(adminAuditors || [])) %>'));
     const shenpi_status = <%- ctx.tender.info.shenpi.advance %>;
     const shenpiConst =  JSON.parse('<%- JSON.stringify(shenpiConst) %>');
 </script>

+ 61 - 10
app/view/advance/modal_audit.ejs

@@ -1,4 +1,50 @@
 <!--上报审批-->
+<% if (ctx.session.sessionUser.is_admin && ctx.advance.status !== auditConst.status.uncheck && ctx.advance.status !== auditConst.status.checked) { %>
+<div class="modal fade" id="sub-sp2" data-backdrop="static">
+    <div class="modal-dialog" style="max-width: 650px" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">修改审批流程</h5>
+            </div>
+            <div class="modal-body">
+                <div class="card mt-1">
+                    <div class="modal-height-500" style="overflow: auto">
+                      <style>
+                                    #admin-edit-shenpi thead th {
+                                        border-bottom: 0;
+                                    }
+
+                                    #admin-edit-shenpi td, #admin-edit-shenpi th {
+                                        padding: 0.75rem;
+                                    }
+
+                                    #admin-edit-shenpi th {
+                                        background: none;
+                                        color: #212529;
+                                        border-top: 0;
+                                    }
+                                </style>
+                        <table class="table table-hover" id="admin-edit-shenpi">
+                            <thead>
+                            <tr class="card-header text-center">
+                                <th width="100px">审批流程</th>
+                                <th>审批人员</th>
+                                <th width="80" style="text-align: center">审批状态</th>
+                                <th width="200" style="text-align: center">操作</th>
+                            </tr>
+                            </thead>
+                            <tbody id="admin-edit-shenpi-list"></tbody>
+                        </table>
+                    </div>
+                </div>
+            </div>
+            <form class="modal-footer">
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+            </form>
+        </div>
+    </div>
+</div>
+<% } %>
 <div class="modal fade" id="sub-sp" data-backdrop="static">
     <div class="modal-dialog" role="document">
         <div class="modal-content">
@@ -197,7 +243,7 @@
                                                             <%- auditor.status === auditConst.status.checkNoPre ? history.find(item => item.sort === auditor.sort-1).name : '' %>
                                                         </span>
                                                     </div>
-                                                    
+
                                                 </div>
                                             </div>
                                             <!--审批意见-->
@@ -294,10 +340,10 @@
                                                             <div class="col">
                                                                 <span
                                                                     class="pull-right text-success"><%- idx !== 0 ? '重新' : '' %>上报审批</span>
-                                                            
+
                                                             </div>
 
-                                                            
+
                                                         </div>
                                                     </div>
                                                 </div>
@@ -501,9 +547,9 @@
                                                             <div class="col">
                                                                 <span
                                                                     class="pull-right text-success"><%- idx !== 0 ? '重新' : '' %>上报审批</span>
-                                                            
+
                                                             </div>
-                                                            
+
                                                         </div>
                                                     </div>
                                                 </div>
@@ -543,7 +589,7 @@
                                                             <div class="col">
                                                                 <span
                                                                     class="pull-right <%- auditConst.statusClass[auditor.status] %>"><%- auditConst.statusString[auditor.status] %></span>
-                                                            
+
                                                             </div>
 
                                                         </div>
@@ -736,6 +782,11 @@
             </div>
         </div>
     <% } %>
+<style>
+    #admin-edit-shenpi thead th { border-bottom: 0; }
+    #admin-edit-shenpi td, #admin-edit-shenpi th { padding: 0.75rem; }
+    #admin-edit-shenpi th { background: none; color: #212529; border-top: 0; }
+</style>
 <script>
     const csrf = '<%= ctx.csrf %>';
     const authMobile = '<%= authMobile %>';
@@ -833,11 +884,11 @@
     $('.sp-list-btn').click(function () {
         const type = $(this).data('type')
         if (type === 'hide') {
-            $('.sp-list-item').hide()
-            $('.modal-title').text('审批流程')
+            $('#sp-list .sp-list-item').hide()
+            $('#sp-list .modal-title').text('审批流程')
         } else {
-            $('.sp-list-item').show()
-            $('.modal-title').text('重新上报')
+            $('#sp-list .sp-list-item').show()
+            $('#sp-list .modal-title').text('重新上报')
         }
     });