| 
					
				 | 
			
			
				@@ -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); 
			 |