瀏覽代碼

变更重新审批添加短信验证码

laiguoran 4 年之前
父節點
當前提交
69d77fea34
共有 4 個文件被更改,包括 147 次插入8 次删除
  1. 27 3
      app/controller/change_controller.js
  2. 58 0
      app/public/js/change_detail.js
  3. 62 4
      app/view/change/info_modal.ejs
  4. 0 1
      app/view/stage/audit_modal.ejs

+ 27 - 3
app/controller/change_controller.js

@@ -259,7 +259,7 @@ module.exports = app => {
                 const whiteList = this.ctx.app.config.multipart.whitelist;
                 const tenderid = ctx.params.id !== undefined ? ctx.params.id : ctx.session.sessionUser.tenderId;
                 ctx.session.sessionUser.tenderId = tenderid;
-                const tender = await this.service.tender.getDataById(tenderid);
+                const tender = await ctx.service.tender.getDataById(tenderid);
                 const change = await ctx.service.change.getDataByCondition({ cid: ctx.params.cid });
 
                 // 后台判断当前人查看info状态
@@ -272,6 +272,10 @@ module.exports = app => {
                 const auditList = await ctx.service.changeAudit.getListByStatus(change, auditStatus);
                 // 获取已选清单
                 let changeList = await ctx.service.changeAuditList.getAllDataByCondition({ where: { cid: ctx.params.cid } });
+
+                // 获取用户人验证手机号
+                const pa = await ctx.service.projectAccount.getDataById(ctx.session.sessionUser.accountId);
+                const auth_mobile = pa.auth_mobile;
                 const renderData = {
                     uid: ctx.session.sessionUser.accountId,
                     tender,
@@ -286,6 +290,7 @@ module.exports = app => {
                     changeList,
                     tpUnit: ctx.tender.info.decimal.tp,
                     upUnit: ctx.tender.info.decimal.up,
+                    authMobile: auth_mobile,
                 };
                 // 根据auditStatus状态获取的不同的数据
                 if (auditStatus === 1 || auditStatus === 2) {
@@ -773,15 +778,34 @@ module.exports = app => {
                 if (changeData.status !== audit.flow.status.checked || ctx.session.sessionUser.accountId !== auditInfo.uid) {
                     throw '您无权进行该操作';
                 }
+                const code = ctx.request.body.code;
+                const pa = await ctx.service.projectAccount.getDataById(ctx.session.sessionUser.accountId);
+                const cacheKey = 'smsCode:' + ctx.session.sessionUser.accountId;
+                const cacheCode = await app.redis.get(cacheKey);
+                // console.log(cacheCode);
+                if (cacheCode === null || code === undefined || cacheCode !== (code + pa.auth_mobile)) {
+                    throw '验证码不正确!';
+                }
+
                 // 重新审批
                 const result = await ctx.service.change.checkAgain(changeData.cid);
                 if (!result) {
                     throw '重新审批失败';
                 }
-                ctx.redirect('/tender/' + changeData.tid + '/change/' + changeData.cid + '/info');
+                // ctx.redirect('/tender/' + changeData.tid + '/change/' + changeData.cid + '/info');
+                ctx.body = {
+                    err: 0,
+                    url: ctx.request.header.referer,
+                    msg: '',
+                };
             } catch (err) {
                 console.log(err);
-                ctx.redirect(ctx.request.header.referer);
+                // ctx.redirect(ctx.request.header.referer);
+                ctx.body = {
+                    err: 1,
+                    // url: ctx.request.header.referer,
+                    msg: err,
+                };
             }
         }
 

+ 58 - 0
app/public/js/change_detail.js

@@ -128,4 +128,62 @@ $(document).ready(() => {
         setLocalCache('change-checkbox-account-'+ accountId, $(this).is(':checked'));
         column.visible(!column.visible());
     })
+
+    // 重新审批获取手机验证码
+    // 获取验证码
+    let isPosting = false;
+    $("#get-code").click(function() {
+        if (isPosting) {
+            return false;
+        }
+        const btn = $(this);
+
+        $.ajax({
+            url: '/profile/code?_csrf=' + csrf,
+            type: 'post',
+            data: { mobile: authMobile, type: 'shenpi' },
+            dataTye: 'json',
+            error: function() {
+                isPosting = false;
+            },
+            beforeSend: function() {
+                isPosting = true;
+            },
+            success: function(response) {
+                isPosting = false;
+                if (response.err === 0) {
+                    codeSuccess(btn);
+                    $("input[name='code']").removeAttr('readonly');
+                    $("#re-shenpi-btn").removeAttr('disabled');
+                } else {
+                    toast(response.msg, 'error');
+                }
+            }
+        });
+    });
 });
+/**
+ * 获取成功后的操作
+ *
+ * @param {Object} btn - 点击的按钮
+ * @return {void}
+ */
+function codeSuccess(btn) {
+    let counter = 60;
+    btn.addClass('disabled').text('重新获取 ' + counter + 'S');
+    btn.parent().siblings('input').removeAttr('readonly').attr('placeholder', '输入短信中的6位验证码');
+    const bindBtn = $("#bind-btn");
+    bindBtn.removeClass('btn-secondary disabled').addClass('btn-primary');
+
+    const countDown = setInterval(function() {
+        const countString = counter - 1 <= 0 ? '' : ' ' + (counter - 1) + 'S';
+        // 倒数结束后
+        if (countString === '') {
+            clearInterval(countDown);
+            btn.removeClass('disabled');
+        }
+        const text = '重新获取' + countString;
+        btn.text(text);
+        counter -= 1;
+    }, 1000);
+}

+ 62 - 4
app/view/change/info_modal.ejs

@@ -692,26 +692,56 @@
     </div>
 </div>
 <% if (auditStatus === 4 && ctx.session.sessionUser.accountId === auditList[auditList.length-1].uid && stageChangeNum === 0) { %>
-<!--重新审批-->
+<% if (!authMobile) { %>
+    <!--终审重新审批-->
+    <div class="modal fade" id="sp-down-back" data-backdrop="static">
+        <div class="modal-dialog" role="document">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <h5 class="modal-title">重新审批</h5>
+                </div>
+                <div class="modal-body">
+                    <h5>重新审批需要您的手机短信验证</h5>
+                    <h5>您目前还没设置认证手机,请先设置。</h5>
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">取消</button>
+                    <a href="/profile/sms" class="btn btn-sm btn-primary">去设置</a>
+                </div>
+            </div>
+        </div>
+    </div>
+<% } else { %>
+    <!--重新审批-->
 <div class="modal fade" id="sp-down-back" data-backdrop="static">
     <div class="modal-dialog" role="document">
-        <form class="modal-content" method="post" action="/tender/<%- tender.id %>/change/check/again">
+        <form id="againForm" class="modal-content" method="post" action="/tender/<%- tender.id %>/change/check/again" onsubmit="return false;">
             <div class="modal-header">
                 <h5 class="modal-title">重新审批</h5>
             </div>
             <div class="modal-body">
                 <h5>确认由「终审-<%= auditList[auditList.length-1].name %>」重新审批「<%= change.code %>」?</h5>
+                <div class="form-group">
+                    <label>重审需要验证码确认,验证码将发送至尾号<%- authMobile.slice(-4) %>的手机</label>
+                    <div class="input-group input-group-sm mb-3">
+                        <input class="form-control" type="text" readonly="readonly" name="code" placeholder="输入短信中的6位验证码" />
+                        <div class="input-group-append">
+                            <button class="btn btn-outline-secondary" type="button" id="get-code">获取验证码</button>
+                        </div>
+                    </div>
+                </div>
             </div>
             <div class="modal-footer">
                 <input type="hidden" name="cid" value="<%= change.cid %>">
                 <input type="hidden" name="_csrf" value="<%= ctx.csrf %>" />
                 <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
-                <button type="submit" class="btn btn-warning btn-sm">确定重审</button>
+                <button type="button" id="re-shenpi-btn" class="btn btn-warning btn-sm" disabled>确定重审</button>
             </div>
         </form>
     </div>
 </div>
 <% } %>
+<% } %>
 
 <div class="modal fade" id="warning-ledger" data-backdrop="static">
     <div class="modal-dialog" role="document">
@@ -728,7 +758,10 @@
         </div>
     </div>
 </div>
-
+<script type="text/javascript">
+    const csrf = '<%= ctx.csrf %>';
+    const authMobile = '<%= authMobile %>';
+</script>
 <script>
     $('.sp-location-list').on('shown.bs.modal', function () {
         const height = $(this)[0].scrollHeight;
@@ -754,4 +787,29 @@
     $('#led-warning').click(function () {
         $('#warning-ledger').modal('hide');
     });
+
+    $('#re-shenpi-btn').click(function () {
+        const code = $("#againForm input[name='code']").val();
+        if ($(this).hasClass('disabled')) {
+            return false;
+        }
+        if (code.length < 6) {
+            // alert('请填写正确的验证码');
+            toast('请填写正确的验证码', 'error');
+            return false;
+        }
+        $.ajax({
+            url: '/tender/<%- tender.id %>/change/check/again?_csrf=' + csrf,
+            type: 'post',
+            data: { code: code, cid: '<%- change.cid %>' },
+            dataTye: 'json',
+            success: function(response) {
+                if (response.err === 0) {
+                    window.location.href = response.url;
+                } else {
+                    toast(response.msg, 'error');
+                }
+            }
+        });
+    })
 </script>

+ 0 - 1
app/view/stage/audit_modal.ejs

@@ -1655,7 +1655,6 @@
     // 重新审批按钮
     $("#re-shenpi-btn").click(function() {
         const code = $("input[name='code']").val();
-        const mobile = $("input[name='auth_mobile']").val();
         if ($(this).hasClass('disabled')) {
             return false;
         }