Browse Source

计量审批,改版,加入必须完成中间计量的提示

MaiXinRong 6 years atrás
parent
commit
789294691e

+ 109 - 72
app/controller/stage_controller.js

@@ -208,12 +208,84 @@ module.exports = app => {
                 } else if (data.bills) {
                     responseData.data.curStageData = await ctx.service.stageBills.updateStageData(data.bills);
                 }
+                await this.ctx.service.stage.updateCheckDetailFlag(ctx.stage.id, true);
                 ctx.body = responseData;
             } catch (err) {
                 this.log(err);
                 ctx.body = {err: 1, msg: err.toString(), data: null};
             }
         }
+        /**
+         * 查询可用变更令 (Ajax-Post)
+         * @param ctx
+         * @returns {Promise<void>}
+         */
+        async searchValidChange(ctx) {
+            try {
+                // if (ctx.stage.readOnly) {
+                //     throw '您无权调用变更令';
+                // }
+
+                const data = JSON.parse(ctx.request.body.data);
+                if (!data.bills && !data.pos) {
+                    throw '数据错误';
+                }
+                const bills = data.bills ? data.bills : await ctx.service.ledger.getDataById(data.pos.lid);
+                const pos = data.pos;
+                const changes = await ctx.service.change.getValidChanges(ctx.tender.id, bills);
+                const useChanges = await ctx.service.stageChange.getLastestStageData(ctx.tender.id, ctx.stage.id, bills.id, pos ? pos.id : -1);
+                ctx.body = {err: 0, msg: '', data: {changes, useChanges}};
+            } catch(err) {
+                this.log(err);
+                ctx.body = {err: 1, msg: err.toString(), data: null};
+            }
+        }
+        /**
+         * 调用变更令 (Ajax-Post)
+         * @param ctx
+         * @returns {Promise<void>}
+         */
+        async useChange(ctx) {
+            try {
+                if (ctx.stage.readOnly) {
+                    throw '您无权使用变更令';
+                }
+
+                const data = JSON.parse(ctx.request.body.data);
+                if (!data.target || (!data.target.bills && !data.target.pos) || !data.change) {
+                    throw '调用变更令数据错误'
+                }
+                let result;
+                if (data.target.bills) {
+                    result = await ctx.service.stageChange.billsChange(data.target.bills, data.change);
+                } else {
+                    result = await ctx.service.stageChange.posChange(data.target.pos, data.change);
+                }
+                await this.ctx.service.stage.updateCheckDetailFlag(ctx.stage.id, true);
+                ctx.body = {err: 0, msg: '', data: result};
+            } catch(err) {
+                this.log(err);
+                ctx.body = {err: 1, msg: err.toString(), data: null};
+            }
+        }
+        /**
+         * 查询变更令 明细数据(包括附件、变更清单、累计使用情况、本期使用情况) (Ajax-Post)
+         * @param ctx
+         * @returns {Promise<void>}
+         */
+        async changeDetail(ctx) {
+            try {
+                const data = JSON.parse(ctx.request.body.data);
+                if (!data.cid) {
+                    throw '查询数据错误';
+                }
+                const detailData = await this._getChangeDetailData(ctx.tender.id, ctx.stage.id, data.cid);
+                ctx.body = {err: 0, msg: '', data: detailData};
+            } catch(err) {
+                this.log(err);
+                ctx.body = {err: 1, msg: err.toString(), data: null};
+            }
+        }
 
         /**
          * 中间计量 (Get)
@@ -398,6 +470,36 @@ module.exports = app => {
         }
 
         /**
+         * 中间计量 -- 完成中间计量(Post)
+         * @param ctx
+         * @returns {Promise<void>}
+         */
+        async doneDetail(ctx) {
+            try {
+                await ctx.service.stage.updateCheckDetailFlag(ctx.stage.id, false);
+                ctx.stage.check_detail = false;
+                ctx.redirect(ctx.request.header.referer);
+            } catch (err) {
+                ctx.redirect(ctx.request.header.referer);
+            }
+        }
+
+        /**
+         * 中间计量 -- 解锁编辑(Post)
+         * @param ctx
+         * @returns {Promise<void>}
+         */
+        async unlockDetail(ctx) {
+            try {
+                await ctx.service.stage.updateCheckDetailFlag(ctx.stage.id, true);
+                ctx.stage.check_detail = true;
+                ctx.redirect(ctx.request.header.referer);
+            } catch (err) {
+                ctx.redirect(ctx.request.header.referer);
+            }
+        }
+
+        /**
          * 合同支付 (Get)
          * @param ctx
          * @returns {Promise<void>}
@@ -592,77 +694,6 @@ module.exports = app => {
                 ctx.redirect('/tender/' + ctx.tender.id + '/measure/stage');
             }
         }
-        /**
-         * 查询可用变更令 (Ajax-Post)
-         * @param ctx
-         * @returns {Promise<void>}
-         */
-        async searchValidChange(ctx) {
-            try {
-                // if (ctx.stage.readOnly) {
-                //     throw '您无权调用变更令';
-                // }
-
-                const data = JSON.parse(ctx.request.body.data);
-                if (!data.bills && !data.pos) {
-                    throw '数据错误';
-                }
-                const bills = data.bills ? data.bills : await ctx.service.ledger.getDataById(data.pos.lid);
-                const pos = data.pos;
-                const changes = await ctx.service.change.getValidChanges(ctx.tender.id, bills);
-                const useChanges = await ctx.service.stageChange.getLastestStageData(ctx.tender.id, ctx.stage.id, bills.id, pos ? pos.id : -1);
-                ctx.body = {err: 0, msg: '', data: {changes, useChanges}};
-            } catch(err) {
-                this.log(err);
-                ctx.body = {err: 1, msg: err.toString(), data: null};
-            }
-        }
-        /**
-         * 调用变更令 (Ajax-Post)
-         * @param ctx
-         * @returns {Promise<void>}
-         */
-        async useChange(ctx) {
-            try {
-                if (ctx.stage.readOnly) {
-                    throw '您无权使用变更令';
-                }
-
-                const data = JSON.parse(ctx.request.body.data);
-                if (!data.target || (!data.target.bills && !data.target.pos) || !data.change) {
-                    throw '调用变更令数据错误'
-                }
-                let result;
-                if (data.target.bills) {
-                    result = await ctx.service.stageChange.billsChange(data.target.bills, data.change);
-                } else {
-                    result = await ctx.service.stageChange.posChange(data.target.pos, data.change);
-                }
-                ctx.body = {err: 0, msg: '', data: result};
-            } catch(err) {
-                this.log(err);
-                ctx.body = {err: 1, msg: err.toString(), data: null};
-            }
-        }
-        /**
-         * 查询变更令 明细数据(包括附件、变更清单、累计使用情况、本期使用情况) (Ajax-Post)
-         * @param ctx
-         * @returns {Promise<void>}
-         */
-        async changeDetail(ctx) {
-            try {
-                const data = JSON.parse(ctx.request.body.data);
-                if (!data.cid) {
-                    throw '查询数据错误';
-                }
-                const detailData = await this._getChangeDetailData(ctx.tender.id, ctx.stage.id, data.cid);
-                ctx.body = {err: 0, msg: '', data: detailData};
-            } catch(err) {
-                this.log(err);
-                ctx.body = {err: 1, msg: err.toString(), data: null};
-            }
-        }
-
 
         // 审批相关
         /**
@@ -743,6 +774,9 @@ module.exports = app => {
                 if (ctx.stage.status === auditConst.status.checking || ctx.stage.status === auditConst.status.checked) {
                     throw '该期数据当前无法上报';
                 }
+                if (ctx.stage.check_detail) {
+                    throw '上报前,需要完成中间计量。';
+                }
 
                 await ctx.service.stageAudit.start(ctx.stage.id, ctx.stage.times);
 
@@ -773,6 +807,9 @@ module.exports = app => {
                 if (!data.checkType || isNaN(data.checkType)) {
                     throw '提交数据错误';
                 }
+                if (data.checkType === auditConst.status.checked && ctx.stage.check_detail) {
+                    throw '审批通过前,需要完成中间计量。';
+                }
                 if (data.checkType === auditConst.status.checkNo) {
                     if (!data.checkType || isNaN(data.checkType)) {
                         throw '提交数据错误';
@@ -841,7 +878,7 @@ module.exports = app => {
                 renderData.dealBills = await ctx.service.dealBills.getAllDataByCondition({ where: {tender_id: this.ctx.tender.id} });
 
                 renderData.jsFiles = this.app.jsFiles.common.concat(this.app.jsFiles.stage.gather);
-                await this.layout('stage/gather.ejs', renderData);
+                await this.layout('stage/gather.ejs', renderData, 'stage/gather_modal.ejs');
             } catch (err) {
                 this.log(err);
                 ctx.redirect('/tender/' + ctx.tender.id + '/measure/stage/' + ctx.params.order);

+ 3 - 0
app/public/js/ledger.js

@@ -346,6 +346,8 @@ $(document).ready(function() {
          * @param info
          */
         clipboardPasted: function (e, info) {
+            console.log(e);
+            console.log(info);
             if (info.sheet.zh_setting && info.sheet.zh_dataType === 'tree') {
                 const tree = info.sheet.zh_tree;
                 if (!tree) { return; }
@@ -498,6 +500,7 @@ $(document).ready(function() {
     };
     // 绑定事件
     ledgerSpread.bind(GC.Spread.Sheets.Events.SelectionChanged, treeOperationObj.selectionChanged);
+    ledgerSpread.bind(GC.Spread.Sheets.Events.ClipboardChanging, treeOperationObj.clipboardChanging);
     if (!ledgerSpreadSetting.readOnly) {
         ledgerSpread.bind(GC.Spread.Sheets.Events.SelectionChanged, function (e, info) {
             treeOperationObj.refreshOperationValid(info.sheet, info.newSelections);

+ 11 - 0
app/public/js/stage.js

@@ -81,6 +81,10 @@ function initTreeColSettingEvents(setting) {
         }
     }
 }
+function needCheckDetail() {
+    stage.check_detail = true;
+    $('#check_point').show();
+}
 
 $(document).ready(() => {
     // 界面布局
@@ -270,6 +274,7 @@ $(document).ready(() => {
                     const nodes = stageTree.loadPostStageData(result.bills);
                     stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes);
                     stagePosSpreadObj.loadCurPosData();
+                    needCheckDetail();
                     self.obj.modal('hide');
                 });
             })
@@ -462,6 +467,7 @@ $(document).ready(() => {
                 postData(window.location.href + '/update', { bills: billsData }, function (data) {
                     const nodes = stageTree.loadPostStageData(data);
                     stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes);
+                    needCheckDetail();
                 });
             }
         },
@@ -508,6 +514,7 @@ $(document).ready(() => {
                     postData(window.location.href + '/update', {bills: datas}, function (result) {
                         const nodes = stageTree.loadPostStageData(result);
                         stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes);
+                        needCheckDetail();
                     });
                 }
             }
@@ -566,6 +573,7 @@ $(document).ready(() => {
                     postData(window.location.href + '/update', { bills: datas }, function (data) {
                         const nodes = stageTree.loadPostStageData(data);
                         stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes.concat(filterNodes));
+                        needCheckDetail();
                     });
                 } else {
                     stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), filterNodes);
@@ -658,6 +666,7 @@ $(document).ready(() => {
                     const refreshData = stageTree.loadPostStageData(result.ledger);
                     stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), refreshData);
                     stagePosSpreadObj.loadCurPosData();
+                    needCheckDetail();
                 }, function () {
                     stagePosSpreadObj.loadCurPosData();
                 });
@@ -749,6 +758,7 @@ $(document).ready(() => {
                     const nodes = stageTree.loadPostStageData(result.ledger);
                     stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes);
                     stagePosSpreadObj.loadCurPosData();
+                    needCheckDetail();
                 }, function () {
                     stagePosSpreadObj.loadCurPosData();
                 });
@@ -793,6 +803,7 @@ $(document).ready(() => {
                         }
                         const nodes = stageTree.loadPostStageData(result.ledger);
                         stageTreeSpreadObj.refreshTreeNodes(slSpread.getActiveSheet(), nodes);
+                        needCheckDetail();
                         // todo 只加载改变项
                         stagePosSpreadObj.loadCurPosData();
                     });

+ 7 - 1
app/public/js/stage_audit.js

@@ -134,8 +134,14 @@ $(document).ready(function () {
     $('#hideSp').click(function () {
         $('#sp-list2').modal('hide');
     });
+    $('a[target]').click(function () {
+        if (stage.check_detail) {
+            $('#sub-sp3').modal('show');
+        } else {
+            $($(this).attr('target')).modal('show');
+        }
+    })
 });
-
 // 检查上报情况
 function checkAuditorFrom () {
     if ($('#auditors li').length === 0) {

+ 0 - 1
app/public/js/stage_im.js

@@ -330,7 +330,6 @@ const stageIm = (function () {
                     return imFields.indexOf(key) > -1 && !_.isUndefined(sV) ? sV : oV;
                 });
             }
-            console.log(imData);
         }
     }
 

+ 2 - 0
app/router.js

@@ -139,6 +139,8 @@ module.exports = app => {
     app.post('/tender/:id/measure/stage/:order/detail/save', sessionAuth, tenderCheck, stageCheck, 'stageController.saveDetailData');
     app.post('/tender/:id/measure/stage/:order/detail/add-img', sessionAuth, tenderCheck, stageCheck, 'stageController.addCalcImage');
     app.post('/tender/:id/measure/stage/:order/detail/merge-img', sessionAuth, tenderCheck, stageCheck, 'stageController.mergeCalcImage');
+    app.get('/tender/:id/measure/stage/:order/detail/done', sessionAuth, tenderCheck, stageCheck, 'stageController.doneDetail');
+    app.get('/tender/:id/measure/stage/:order/detail/unlock', sessionAuth, tenderCheck, stageCheck, 'stageController.unlockDetail');
     // 合同支付
     app.get('/tender/:id/measure/stage/:order/pay', sessionAuth, tenderCheck, stageCheck, 'stageController.pay');
     app.post('/tender/:id/measure/stage/:order/pay/detail', sessionAuth, tenderCheck, stageCheck, 'stageController.chapterDetail');

+ 11 - 0
app/service/stage.js

@@ -241,6 +241,17 @@ module.exports = app => {
             }
             return calcBase;
         }
+
+        /**
+         * 更新 check_detail 标识
+         * @param {Integer}sid - 期id
+         * @param {Boolean}check - 标记
+         * @returns {Promise<void>}
+         */
+        async updateCheckDetailFlag(sid, check) {
+            const result = await this.db.update(this.tableName, {id: sid, check_detail: check});
+            return result.affectedRows === 1;
+        }
     }
 
     return Stage;

+ 11 - 11
app/view/stage/audit_btn.ejs

@@ -1,27 +1,27 @@
-<div>
+<div class="contarl-box">
     <% 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>
+            <a href="javascript: void(0);" target="#sub-sp" class="btn btn-primary btn-sm btn-block">上报审批</a>
         <% } %>
     <% } else if (ctx.stage.status === auditConst.status.checking) { %>
         <% if (ctx.stage.curAuditor && ctx.stage.curAuditor.aid === 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>
+            <a href="javascript: void(0);" target="#sp-done" class="btn btn-success btn-sm btn-block">审批通过</a>
+            <a href="#sp-back" data-toggle="modal" data-target="#sp-back" class="btn btn-warning btn-sm btn-block">审批退回</a>
         <% } else { %>
-            <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-secondary btn-sm btn-block">审批中</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>
+        <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-secondary btn-sm btn-block">审批完成</a>
     <% } else if (ctx.stage.status === auditConst.status.checkNo) { %>
-        <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-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm btn-block text-muted">审批退回</a>
         <% if (ctx.session.sessionUser.accountId === ctx.stage.user_id) { %>
-            <a href="#sp-list2" data-toggle="modal" data-target="#sp-list2" class="btn btn-primary btn-sm pull-right">重新上报</a>
+            <a href="javascript: void(0);" target="#sp-list2" class="btn btn-primary btn-sm btn-block">重新上报</a>
         <% } %>
     <% } else if (ctx.stage.status === auditConst.status.checkNoPre) { %>
-        <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-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm btn-block text-muted">审批退回</a>
         <% if (ctx.session.sessionUser.accountId === ctx.stage.curAuditor.aid) { %>
-            <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>
+            <a href="javascript: void(0);" target="#sp-done" class="btn btn-success btn-sm btn-block">审批通过</a>
+            <a href="#sp-back" data-toggle="modal" data-target="#sp-back" class="btn btn-warning btn-sm btn-block">审批退回</a>
         <% } %>
     <% } %>
 </div>

+ 82 - 14
app/view/stage/audit_modal.ejs

@@ -1,7 +1,7 @@
 <% if (ctx.stage.status === auditConst.status.uncheck || ctx.stage.status === auditConst.status.checkNo) { %>
 <% if (ctx.session.sessionUser.accountId === ctx.stage.user_id) {%>
-        <!--上报审批-->
-        <div class="modal fade" id="sub-sp" data-backdrop="static">
+<!--上报审批-->
+<div class="modal fade" id="sub-sp" data-backdrop="static">
     <div class="modal-dialog" role="document">
         <div class="modal-content">
             <div class="modal-header">
@@ -69,6 +69,23 @@
         </div>
     </div>
 </div>
+<!--上报审批 需要完成中间计量-->
+<div class="modal fade" id="sub-sp3" 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>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- ctx.stage.order %>/detail" class="btn btn-primary">进入中间计量</a>
+            </div>
+        </div>
+    </div>
+</div>
 <% } %>
 <% } %>
 <% if (ctx.stage.status === auditConst.status.checking) { %>
@@ -226,6 +243,23 @@
         </form>
     </div>
 </div>
+        <!--上报审批 需要完成中间计量-->
+        <div class="modal fade" id="sub-sp3" 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>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- ctx.stage.order %>/detail" class="btn btn-primary">进入中间计量</a>
+            </div>
+        </div>
+    </div>
+</div>
     <% } else { %>
         <!--审批流程/结果-->
         <div class="modal fade" id="sp-list" data-backdrop="static">
@@ -496,7 +530,7 @@
 <% } else if (ctx.stage.status === auditConst.status.checkNo) { %>
     <!--审批流程/结果-->
     <div class="modal fade" id="sp-list" data-backdrop="static">
-    <div class="modal-dialog modal-lg" role="document">
+        <div class="modal-dialog modal-lg" role="document">
         <div class="modal-content">
             <div class="modal-header">
                 <h5 class="modal-title">审批流程</h5>
@@ -577,7 +611,7 @@
             </div>
         </div>
     </div>
-</div>
+    </div>
     <% if (ctx.session.sessionUser.accountId === ctx.stage.user_id) { %>
     <!--重新上报-->
     <div class="modal fade" id="sp-list2" data-backdrop="static">
@@ -694,11 +728,28 @@
             </div>
         </div>
     </div>
+    <!--上报审批 需要完成中间计量-->
+    <div class="modal fade" id="sub-sp3" 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>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <a href="/tender/<%- ctx.tender.id %>/measure/stage/<% ctx.stage.order %>/detail" class="btn btn-primary">进入中间计量</a>
+            </div>
+        </div>
+    </div>
+    </div>
     <% } %>
 <% } else if (ctx.stage.status === auditConst.status.checkNoPre) { %>
     <!--审批流程/结果-->
     <div class="modal fade" id="sp-list" data-backdrop="static">
-    <div class="modal-dialog modal-lg" role="document">
+        <div class="modal-dialog modal-lg" role="document">
         <div class="modal-content">
             <div class="modal-header">
                 <h5 class="modal-title">审批流程</h5>
@@ -827,11 +878,11 @@
             </div>
         </div>
     </div>
-</div>
+    </div>
     <% if (ctx.session.sessionUser.accountId === ctx.stage.curAuditor.aid) { %>
-        <!--审批通过-->
-        <div class="modal fade" id="sp-done" data-backdrop="static">
-    <div class="modal-dialog modal-lg" role="document">
+    <!--审批通过-->
+    <div class="modal fade" id="sp-done" data-backdrop="static">
+        <div class="modal-dialog modal-lg" role="document">
         <form class="modal-content" action="<%- preUrl %>/audit/check" method="post">
             <div class="modal-header">
                 <h5 class="modal-title">审批通过</h5>
@@ -899,10 +950,10 @@
             </div>
         </form>
     </div>
-</div>
-        <!--审批退回-->
-        <div class="modal fade" id="sp-back" data-backdrop="static">
-    <div class="modal-dialog modal-lg" role="document">
+    </div>
+    <!--审批退回-->
+    <div class="modal fade" id="sp-back" data-backdrop="static">
+        <div class="modal-dialog modal-lg" role="document">
         <form class="modal-content" action="<%- preUrl %>/audit/check" method="post">
             <div class="modal-header">
                 <h5 class="modal-title">审批退回</h5>
@@ -981,6 +1032,23 @@
             </div>
         </form>
     </div>
-</div>
+    </div>
+    <!--上报审批 需要完成中间计量-->
+    <div class="modal fade" id="sub-sp3" 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>
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                    <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- ctx.stage.order %>/detail" class="btn btn-primary">进入中间计量</a>
+                </div>
+            </div>
+        </div>
+    </div>
     <% } %>
 <% } %>

+ 1 - 1
app/view/stage/change.ejs

@@ -1,4 +1,4 @@
-<% include ../tender/tender_sub_menu.ejs %>
+<% include ./stage_sub_menu.ejs %>
 <div class="panel-content">
     <div class="panel-title">
         <div class="title-main d-flex justify-content-between">

+ 2 - 1
app/view/stage/compare.ejs

@@ -1,4 +1,4 @@
-<% include ../tender/tender_sub_menu.ejs %>
+<% include ./stage_sub_menu.ejs %>
 <div class="panel-content">
     <div class="panel-title">
         <div class="title-main d-flex justify-content-between">
@@ -41,6 +41,7 @@
 </div>
 <script>
     //const auditors = JSON.parse(<%- JSON.stringify(ctx.stage.auditors) %>);
+    const stage = JSON.parse('<%- JSON.stringify(ctx.stage) %>');
     const ledgerSpreadSetting = JSON.parse('<%- JSON.stringify(ledgerSpread) %>');
     const posSpreadSetting = JSON.parse('<%- JSON.stringify(posSpread) %>');
     const ledger = JSON.parse('<%- JSON.stringify(ledger) %>');

+ 2 - 1
app/view/stage/compare_modal.ejs

@@ -23,4 +23,5 @@
         </div>
     </div>
 </div>
-<% } %>
+<% } %>
+<% include ./audit_modal.ejs %>

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

@@ -1,4 +1,4 @@
-<% include ../tender/tender_sub_menu.ejs %>
+<% include ./stage_sub_menu.ejs %>
 <div class="panel-content">
     <div class="panel-title">
         <div class="title-main d-flex justify-content-between">
@@ -9,7 +9,14 @@
                     </div>
                 </div>
             </div>
-            <% include ./audit_btn.ejs %>
+            <div class="ml-auto">
+                <!--完成中间计量-->
+                <% if (ctx.stage.check_detail) { %>
+                <a href="javascirpt: void(0);" data-toggle="modal" data-target="#done" class="btn btn-success btn-sm pull-right">完成本期中间计量</a>
+                <% } else { %>
+                <span class="text-success" id="locked-hint">已完成,请继续完成「上报审批」 <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- ctx.stage.order %>/detail/unlock">解锁编辑</a></span>
+                <% } %>
+            </div>
         </div>
     </div>
     <div class="content-wrap">
@@ -37,7 +44,7 @@
                 <div class="tab-content">
                     <div class="tab-pane active" id="zhongjian">
                         <div class="sjs-sh-1" style="overflow: auto;">
-                            <% if (!stage.readOnly) { %>
+                            <% if (!stage.readOnly && stage.check_detail) { %>
                             <div class="d-flex justify-content-end mt-1 mr-1">
                                 <a href="#" class="btn btn-sm btn-outline-primary" id="edit-detail">编辑</a>
                                 <a href="#" class="btn btn-sm btn-outline-success mr-1" id="save-detail">保存</a>
@@ -75,7 +82,7 @@
                             <div class="form-group">
                                 <div class="d-flex justify-content-between my-3">
                                     <label>计算草图:</label>
-                                    <% if (!stage.readOnly) { %>
+                                    <% if (!stage.readOnly && stage.check_detail) { %>
                                     <a href="#edit-img" data-toggle="modal" data-target="#edit-img" id="modify-img">添加草图</a>
                                     <% } %>
                                 </div>
@@ -124,7 +131,7 @@
     </div>
 </div>
 <script>
-    const readOnly = <%- stage.readOnly %>;
+    const readOnly = <%- (stage.readOnly || !stage.check_detail) %>;
     const stage = JSON.parse('<%- JSON.stringify(ctx.stage) %>');
     const imType = JSON.parse('<%- JSON.stringify(imType) %>');
 </script>

+ 18 - 0
app/view/stage/detail_modal.ejs

@@ -126,4 +126,22 @@
         </div>
     </div>
 </div>
+<!--完成中间计量-->
+<div class="modal fade" id="done" 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-secondary" data-dismiss="modal">取消</button>
+                <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- ctx.stage.order %>/detail/done" class="btn btn-success" >确认完成</a>
+            </div>
+        </div>
+    </div>
+</div>
 <% include ./audit_modal.ejs %>

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

@@ -71,6 +71,7 @@
     </div>
 </div>
 <script>
+    const stage = JSON.parse('<%- JSON.stringify(ctx.stage) %>');
     const gclSpreadSetting = JSON.parse('<%- JSON.stringify(gclSpread) %>');
     const leafXmjSpreadSetting = JSON.parse('<%- JSON.stringify(leafXmjSpread) %>');
     const ledger = JSON.parse('<%- JSON.stringify(ledger) %>');

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

@@ -0,0 +1 @@
+<% include ./audit_modal.ejs %>

+ 4 - 2
app/view/stage/index.ejs

@@ -1,4 +1,4 @@
-<% include ../tender/tender_sub_menu.ejs %>
+<% include ./stage_sub_menu.ejs %>
 <div class="panel-content">
     <div class="panel-title">
         <div class="title-main d-flex justify-content-between">
@@ -13,7 +13,9 @@
             <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>
-            <% include ./audit_btn.ejs %>
+            <div class="ml-auto">
+
+            </div>
         </div>
     </div>
     <div class="content-wrap pr-46">

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

@@ -1,4 +1,4 @@
-<% include ../tender/tender_sub_menu.ejs %>
+<% include ./stage_sub_menu.ejs %>
 <div class="panel-content">
     <div class="panel-title">
         <div class="title-main d-flex justify-content-between">
@@ -21,7 +21,6 @@
                     </div>
                 </div>
             </div>
-            <% include ./audit_btn.ejs %>
         </div>
     </div>
     <div class="content-wrap">
@@ -53,6 +52,7 @@
 <img src="/public/images/file_clip.png" id="rela-file-icon" />
 <img src="/public/images/file_clip_hover.png" id="rela-file-hover" />
 <script>
+    const stage = JSON.parse('<%- JSON.stringify(ctx.stage) %>');
     const readOnly = <%- stage.readOnly %>;
     const dealPay = JSON.parse('<%- JSON.stringify(dealPay) %>');
     const calcBase = JSON.parse('<%- JSON.stringify(calcBase) %>');

+ 60 - 0
app/view/stage/stage_sub_menu.ejs

@@ -0,0 +1,60 @@
+<div class="panel-sidebar">
+    <div class="panel-title">
+        <div class="title-bar">
+            <h2 class="text-truncate" data-toggle="tooltip" data-placement="right" title=""  data-original-title="<%- tender.name %>"><%- tender.name %></h2>
+        </div>
+    </div>
+    <div class="scrollbar-auto">
+        <div class="nav-box">
+                <ul class="nav-list list-unstyled">
+                    <li class=""><a href="/tender/<%- ctx.tender.id %>/measure/stage"><i class="fa fa-chevron-left "></i> <span>返回</span></a></li>
+                </ul>
+            </div>
+        <div class="nav-box">
+                <ul class="nav-list list-unstyled">
+                    <li class="<% if (ctx.url === '/tender' + ctx.tender.id + '/measure/stage' + ctx.stage.order) { %>active<% } %>">
+                        <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- ctx.stage.order %>"><span class="ml-3">计量台帐</span></a>
+                    </li>
+                </ul>
+            </div>
+        <div class="nav-box">
+                <ul class="nav-list list-unstyled">
+                    <li class="<% if (ctx.url === '/tender' + ctx.tender.id + '/measure/stage' + ctx.stage.order) { %>active<% } %>">
+                        <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- stage.order %>/detail"><span class="ml-3">中间计量</span></a>
+                        <span class=" position-absolute tips-dot" data-toggle="tooltip" data-placement="bottom" data-original-title="完成中间计量" id="check_point" <% if (!ctx.stage.check_detail) { %>style="display: none;"<% } %>>
+                            <i class="fa fa-circle text-danger"></i>
+                        </span>
+                    </li>
+                </ul>
+            </div>
+        <div class="nav-box">
+                <ul class="nav-list list-unstyled">
+                    <li class="<% if (ctx.url === '/tender' + ctx.tender.id + '/measure/stage' + ctx.stage.order) { %>active<% } %>">
+                        <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- stage.order %>/pay"><span class="ml-3">合同支付</span></a>
+                    </li>
+                </ul>
+            </div>
+        <div class="nav-box">
+                <ul class="nav-list list-unstyled">
+                    <li class="<% if (ctx.url === '/tender' + ctx.tender.id + '/measure/stage' + ctx.stage.order) { %>active<% } %>">
+                        <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- stage.order %>/bgl"><span class="ml-3">变更概况</span></a>
+                    </li>
+                </ul>
+            </div>
+        <div class="nav-box">
+                <ul class="nav-list list-unstyled">
+                    <li class="<% if (ctx.url === '/tender' + ctx.tender.id + '/measure/stage' + ctx.stage.order) { %>active<% } %>">
+                        <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- stage.order %>/gather"><span class="ml-3">清单汇总</span></a>
+                    </li>
+                </ul>
+            </div>
+        <div class="nav-box">
+                <ul class="nav-list list-unstyled">
+                    <li class="<% if (ctx.url === '/tender' + ctx.tender.id + '/measure/stage' + ctx.stage.order) { %>active<% } %>">
+                        <a href="/tender/<%- ctx.tender.id %>/measure/stage/<%- stage.order %>/compare"><span class="ml-3">审核比较</span></a>
+                    </li>
+                </ul>
+            </div>
+        <% include ./audit_btn.ejs %>
+    </div>
+</div>