Sfoglia il codice sorgente

1. 不允许重复添加同一审核人
2. 期计量,前端各页面统一审核相关代码
3. 期计量,审核按钮显示控制

MaiXinRong 6 anni fa
parent
commit
d9669035ee

+ 12 - 0
app/controller/ledger_audit_controller.js

@@ -123,6 +123,18 @@ module.exports = app => {
                 if (isNaN(id) || id <= 0) {
                     throw '参数错误';
                 }
+                // 检查权限等
+                if (ctx.tender.data.user_id !== ctx.session.sessionUser.accountId) {
+                    throw '您无权添加审核人';
+                }
+                if (ctx.tender.data.status === auditConst.status.checking || ctx.tender.data.status === auditConst.status.checked) {
+                    throw '当前不允许添加审核人';
+                }
+                // 检查审核人是否已存在
+                const exist = await ctx.service.ledgerAudit.getAuditor(ctx.tender.id, id);
+                if (exist) {
+                    throw '该审核人已存在,请勿重复添加';
+                }
 
                 const result = await ctx.service.ledgerAudit.addAuditor(ctx.tender.id, id);
                 if (!result) {

+ 13 - 1
app/controller/stage_controller.js

@@ -588,10 +588,22 @@ module.exports = app => {
             try {
                 await this._getStage(ctx);
                 const data = JSON.parse(ctx.request.body.data);
-                const id = data.auditorId;
+                const id = this.app._.toInteger(data.auditorId);
                 if (isNaN(id) || id <= 0) {
                     throw '参数错误';
                 }
+                // 检查权限等
+                if (ctx.stage.user_id !== ctx.session.sessionUser.accountId) {
+                    throw '您无权添加审核人';
+                }
+                if (ctx.stage.status === auditConst.flow.status.checking || ctx.stage.status === auditConst.flow.status.checked) {
+                    throw '当前不允许添加审核人';
+                }
+                // 检查审核人是否已存在
+                const exist = this.app._.find(ctx.stage.auditors, {aid: id});
+                if (exist) {
+                    throw '该审核人已存在,请勿重复添加';
+                }
 
                 const result = await ctx.service.stageAudit.addAuditor(ctx.stage.id, id);
                 if (!result) {

+ 10 - 5
app/public/js/ledger.js

@@ -1280,11 +1280,16 @@ $(document).ready(function() {
         }
         postData('/search/user', data, (data) => {
             const resultDiv = $('#searchResult');
-            $('h5>span', resultDiv).text(data.name);
-            $('#addAuditor').attr('auditorId', data.id);
-            $('h6', resultDiv).text(data.role);
-            $('p', resultDiv).text(data.company);
-            resultDiv.show();
+            if (data) {
+                $('h5>span', resultDiv).text(data.name);
+                $('#addAuditor').attr('auditorId', data.id);
+                $('h6', resultDiv).text(data.role);
+                $('p', resultDiv).text(data.company);
+                resultDiv.show();
+            } else {
+                toast('未查询到该审核人', 'info');
+                resultDiv.hide();
+            }
         }, () => {
             $('#searchResult').hide();
         });

+ 10 - 5
app/public/js/stage_audit.js

@@ -22,11 +22,16 @@ $(document).ready(function () {
         };
         postData('/search/user', data, (data) => {
             const resultDiv = $('#searchResult');
-            $('h5>span', resultDiv).text(data.name);
-            $('#addAuditor').attr('auditorId', data.id);
-            $('h6', resultDiv).text(data.role);
-            $('p', resultDiv).text(data.company);
-            resultDiv.show();
+            if (data) {
+                $('h5>span', resultDiv).text(data.name);
+                $('#addAuditor').attr('auditorId', data.id);
+                $('h6', resultDiv).text(data.role);
+                $('p', resultDiv).text(data.company);
+                resultDiv.show();
+            } else {
+                toast('未查询到该审核人', 'info');
+                resultDiv.hide();
+            }
         }, () => {
             $('#searchResult').hide();
         });

+ 7 - 6
app/public/js/stage_pay.js

@@ -17,7 +17,7 @@ function getStageId() {
 }
 
 class PayCalculate {
-    constructor (bases) {
+    constructor (bases, decimal) {
         this.bases = _.sortBy(bases, function (a, b) {
             if (a && b) {
                 return b.code.indexOf(a.code) === -1 ? 1 : -1;
@@ -29,6 +29,7 @@ class PayCalculate {
             b.reg = new RegExp(b.code, 'igm');
         }
         this.percentReg = /[0-9]+%/g;
+        this.decimal = decimal.pay ? decimal.payTp : decimal.tp;
     }
 
     calculateExpr(expr) {
@@ -49,10 +50,10 @@ class PayCalculate {
     calculateStartRangePrice (pays) {
         for (const p of pays) {
             if (!p.sprice && p.sexpr && p.sexpr !== '') {
-                p.sprice = this.calculateExpr(p.sexpr);
+                p.sprice = _.round(this.calculateExpr(p.sexpr), this.decimal);
             }
             if (!p.rprice && p.rexpr && p.rexpr !== '') {
-                p.rprice = this.calculateExpr(p.rexpr);
+                p.rprice = _.round(this.calculateExpr(p.rexpr), this.decimal);
             }
         }
     }
@@ -61,17 +62,17 @@ class PayCalculate {
         for (const p of pays) {
             if (p.ptype === 1 || p.ptype === 4) {
                 if (p.expr && p.expr !== '') {
-                    p.tp = this.calculateExpr(p.expr);
+                    p.tp = _.round(this.calculateExpr(p.expr), this.decimal);
                 }
             }
-            p.end_tp = _.add(p.tp, p.pre_tp);
+            p.end_tp = _.round(_.add(p.tp, p.pre_tp), this.decimal);
         }
     }
 }
 
 $(document).ready(() => {
     autoFlashHeight();
-    const calcualtor = new PayCalculate(calcBase);
+    const calcualtor = new PayCalculate(calcBase, decimal);
     calcualtor.calculateStartRangePrice(dealPay);
     calcualtor.calculate(dealPay);
 

+ 0 - 1
app/service/stage_audit.js

@@ -149,7 +149,6 @@ module.exports = app => {
          * @returns {Promise<boolean>}
          */
         async deleteAuditor(stageId, auditorId, times = 1) {
-            console.log('delete-1');
             const transaction = await this.db.beginTransaction();
             try {
                 const condition = {sid: stageId, aid: auditorId, times: times};

+ 21 - 0
app/view/stage/audit_btn.ejs

@@ -0,0 +1,21 @@
+<div>
+    <% if (ctx.stage.status === auditConst.status.uncheck) { %>
+        <% if (ctx.session.sessionUser.accountId === ctx.stage.user_id) {%>
+            <a href="#sub-sp" data-toggle="modal" data-target="#sub-sp" class="btn btn-primary btn-sm pull-right">上报审批</a>
+        <% } %>
+    <% } else if (ctx.stage.status === auditConst.status.checking) { %>
+        <% if (ctx.stage.curAuditor && ctx.stage.curAuditor.id === ctx.session.sessionUser.accountId) { %>
+            <a href="#sp-done" data-toggle="modal" data-target="#sp-done" class="btn btn-success btn-sm pull-right">审批通过</a>
+            <a href="#sp-back" data-toggle="modal" data-target="#sp-back" class="btn btn-warning btn-sm pull-right">审批退回</a>
+        <% } else { %>
+            <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-secondary btn-sm pull-right">审批中</a>
+        <% } %>
+    <% } else if (ctx.stage.status === auditConst.status.checked) { %>
+        <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-secondary btn-sm pull-right">审批完成</a>
+    <% } else if (ctx.stage.status === auditConst.statu.checkNo) { %>
+        <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm pull-right text-muted">审批退回</a>
+        <% if (ctx.session.sessionUser.accountId === ctx.stage.user_id) { %>
+            <a href="#sub-sp2" data-toggle="modal" data-target="#sub-sp2" class="btn btn-primary btn-sm pull-right">重新上报</a>
+        <% } %>
+    <% } %>
+</div>

+ 1 - 12
app/view/stage/detail.ejs

@@ -9,18 +9,7 @@
                     </div>
                 </div>
             </div>
-            <div>
-                <!--上报-->
-                <a href="#sub-sp" data-toggle="modal" data-target="#sub-sp" class="btn btn-primary btn-sm pull-right">上报审批</a>
-                <a href="#sub-sp2" data-toggle="modal" data-target="#sub-sp2" class="btn btn-primary btn-sm pull-right">重新上报</a>
-                <!--状态显示-->
-                <!-- <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-success btn-sm pull-right">审批完成</a>
-                <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-secondary btn-sm pull-right">审批中</a>
-                <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm pull-right text-muted">审批退回</a> -->
-                <!--审批操作-->
-                <!-- <a href="#sp-done" data-toggle="modal" data-target="#sp-done" class="btn btn-success btn-sm pull-right">审批通过</a>
-                <a href="#sp-back" data-toggle="modal" data-target="#sp-back" class="btn btn-warning btn-sm pull-right">审批退回</a> -->
-            </div>
+            <% include ./audit_btn.ejs %>
         </div>
     </div>
     <div class="content-wrap">

+ 1 - 14
app/view/stage/index.ejs

@@ -13,20 +13,7 @@
             <div class="ml-2">
                 <button href="#row-view" class="btn btn-sm btn-light" data-toggle="modal" data-target="#row-view"><i class="fa fa-table"></i> 列显示</button>
             </div>
-            <div class="ml-auto">
-                <!--上报-->
-                <a href="#sub-sp" data-toggle="modal" data-target="#sub-sp" class="btn btn-primary btn-sm pull-right">上报审批</a>
-                <a href="#sub-sp2" data-toggle="modal" data-target="#sub-sp2" class="btn btn-primary btn-sm pull-right">重新上报</a>
-                <!--状态显示-->
-                <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-success btn-sm pull-right">审批完成</a>
-                <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-secondary btn-sm pull-right">审批中</a>
-                <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm pull-right text-muted">审批退回</a>
-                <!--审批操作-->
-                <a href="#sp-done" data-toggle="modal" data-target="#sp-done" class="btn btn-success btn-sm pull-right">审批通过</a>
-                <a href="#sp-back" data-toggle="modal" data-target="#sp-back" class="btn btn-warning btn-sm pull-right">审批退回</a>
-                <!--sjs 里调用变更令-->
-                <a href="#use-bg" data-toggle="modal" data-target="#use-bg" class="bt btn-sm pull-right">调用变更令</a>
-            </div>
+            <% include ./audit_btn.ejs %>
         </div>
     </div>
     <div class="content-wrap pr-46">

+ 2 - 9
app/view/stage/pay.ejs

@@ -19,15 +19,7 @@
                     </div>
                 </div>
             </div>
-            <div>
-                <a href="#sub-sp" data-toggle="modal" data-target="#sub-sp" class="btn btn-primary btn-sm pull-right">上报审批</a>
-                <a href="#sub-sp2" data-toggle="modal" data-target="#sub-sp2" class="btn btn-primary btn-sm pull-right">重新上报</a>
-                <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-secondary btn-sm pull-right">审批中</a>
-                <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm pull-right text-muted">审批退回</a>
-                <!--审批-->
-                <a href="#sp-done" data-toggle="modal" data-target="#sp-done" class="btn btn-success btn-sm pull-right">审批通过</a>
-                <a href="#sp-back" data-toggle="modal" data-target="#sp-back" class="btn btn-warning btn-sm pull-right">审批退回</a>
-            </div>
+            <% include ./audit_btn.ejs %>
         </div>
     </div>
     <div class="content-wrap">
@@ -65,4 +57,5 @@
 <script>
     const dealPay = JSON.parse('<%- JSON.stringify(dealPay) %>');
     const calcBase = JSON.parse('<%- JSON.stringify(calcBase) %>');
+    const decimal = JSON.parse('<%- JSON.stringify(ctx.tender.info.decimal) %>');
 </script>

+ 1 - 0
config/web.js

@@ -134,6 +134,7 @@ const JsFiles = {
                 mergeFiles: [
                     "/public/js/spreadjs_rela/spreadjs_zh.js",
                     "/public/js/stage_pay.js",
+                    "/public/js/stage_audit.js",
                 ],
                 mergeFile: 'stage_pay',
             },