|  | @@ -1,7 +1,6 @@
 | 
	
		
			
				|  |  |  'use strict';
 | 
	
		
			
				|  |  |  const accountGroup = require('../const/account_group').group;
 | 
	
		
			
				|  |  |  const auditConst = require('../const/audit').advance;
 | 
	
		
			
				|  |  | -const ledgerAuditConst = require('../const/audit').ledger.status;
 | 
	
		
			
				|  |  |  const sendToWormhole = require('stream-wormhole');
 | 
	
		
			
				|  |  |  const path = require('path');
 | 
	
		
			
				|  |  |  const fs = require('fs');
 | 
	
	
		
			
				|  | @@ -19,11 +18,10 @@ module.exports = app => {
 | 
	
		
			
				|  |  |           */
 | 
	
		
			
				|  |  |          async index(ctx) {
 | 
	
		
			
				|  |  |              const type = auditConst.type.start;
 | 
	
		
			
				|  |  | -            const advanceList = await ctx.service.advance.getAdvanceList(ctx.tender.id, type);
 | 
	
		
			
				|  |  | -            const latestOrder = await ctx.service.advance.getLastestAdvance(ctx.tender.id, type, true);
 | 
	
		
			
				|  |  |              const advancePayTotal = ctx.tender.info.deal_param.startAdvance;
 | 
	
		
			
				|  |  | +            const advanceList = await ctx.service.advance.getAdvanceList(ctx.tender.id, type, this.decimal, advancePayTotal);
 | 
	
		
			
				|  |  | +            const latestOrder = await ctx.service.advance.getLastestAdvance(ctx.tender.id, type, true);
 | 
	
		
			
				|  |  |              const progress = await ctx.service.advance.calcProgress(latestOrder, advancePayTotal);
 | 
	
		
			
				|  |  | -            // const showAddBtn = ctx.tender.data.ledger_status !== ledgerAuditConst.uncheck && ctx.tender.data.user_id === ctx.session.sessionUser.accountId ? !latestOrder || (latestOrder.status === auditConst.status.checked && latestOrder.prev_total_amount < advancePayTotal) : false;
 | 
	
		
			
				|  |  |              const showAddBtn = ctx.tender.data.user_id === ctx.session.sessionUser.accountId ? (!latestOrder || (latestOrder.status === auditConst.status.checked && latestOrder.prev_total_amount < advancePayTotal)) : false;
 | 
	
		
			
				|  |  |              const renderData = {
 | 
	
		
			
				|  |  |                  type,
 | 
	
	
		
			
				|  | @@ -46,9 +44,9 @@ module.exports = app => {
 | 
	
		
			
				|  |  |           */
 | 
	
		
			
				|  |  |          async materialList(ctx) {
 | 
	
		
			
				|  |  |              const type = auditConst.type.material;
 | 
	
		
			
				|  |  | -            const advanceList = await ctx.service.advance.getAdvanceList(ctx.tender.id, type);
 | 
	
		
			
				|  |  | -            const latestOrder = await ctx.service.advance.getLastestAdvance(ctx.tender.id, type, true);
 | 
	
		
			
				|  |  |              const advancePayTotal = ctx.tender.info.deal_param.materialAdvance;
 | 
	
		
			
				|  |  | +            const advanceList = await ctx.service.advance.getAdvanceList(ctx.tender.id, type, this.decimal, advancePayTotal);
 | 
	
		
			
				|  |  | +            const latestOrder = await ctx.service.advance.getLastestAdvance(ctx.tender.id, type, true);
 | 
	
		
			
				|  |  |              const progress = await ctx.service.advance.calcProgress(latestOrder, advancePayTotal);
 | 
	
		
			
				|  |  |              const showAddBtn = ctx.tender.data.user_id === ctx.session.sessionUser.accountId ? !latestOrder || (latestOrder.status === auditConst.status.checked && latestOrder.prev_total_amount < advancePayTotal) : false;
 | 
	
		
			
				|  |  |              const renderData = {
 | 
	
	
		
			
				|  | @@ -109,9 +107,21 @@ module.exports = app => {
 | 
	
		
			
				|  |  |              return data;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        _checkCanEntry(ctx) {
 | 
	
		
			
				|  |  | -            if (ctx.session.sessionUser.accountId !== ctx.advance.uid) {
 | 
	
		
			
				|  |  | -                if (ctx.advance.status === auditConst.status.uncheck) {
 | 
	
		
			
				|  |  | +        /**
 | 
	
		
			
				|  |  | +         * 权限判断-进入详情页
 | 
	
		
			
				|  |  | +         * @param {Object} ctx - 全局上下文
 | 
	
		
			
				|  |  | +         * @return {void}
 | 
	
		
			
				|  |  | +         * @private
 | 
	
		
			
				|  |  | +         */
 | 
	
		
			
				|  |  | +        async _checkCanEntry(ctx) {
 | 
	
		
			
				|  |  | +            if (ctx.advance.status === auditConst.status.uncheck) {
 | 
	
		
			
				|  |  | +                if (ctx.session.sessionUser.accountId !== ctx.advance.uid) {
 | 
	
		
			
				|  |  | +                    throw '无权访问';
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            } else {
 | 
	
		
			
				|  |  | +                const auditors = await ctx.service.advanceAudit.getAuditorsWithOwner(ctx.advance.id, ctx.advance.times);
 | 
	
		
			
				|  |  | +                const cur_uid = ctx.session.sessionUser.accountId;
 | 
	
		
			
				|  |  | +                if (auditors.findIndex(item => item.audit_id === cur_uid) === -1) {
 | 
	
		
			
				|  |  |                      throw '无权访问';
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -124,18 +134,26 @@ module.exports = app => {
 | 
	
		
			
				|  |  |          async detail(ctx) {
 | 
	
		
			
				|  |  |              const advancePayTotal = ctx.advance.type === 0 ? ctx.tender.info.deal_param.startAdvance : ctx.tender.info.deal_param.materialAdvance;
 | 
	
		
			
				|  |  |              try {
 | 
	
		
			
				|  |  | -                this._checkCanEntry(ctx);
 | 
	
		
			
				|  |  | -                const renderData = await this._getDefaultRenderData(ctx);
 | 
	
		
			
				|  |  | +                await this._checkCanEntry(ctx);
 | 
	
		
			
				|  |  |                  const { uncheck, checkNo } = auditConst.status;
 | 
	
		
			
				|  |  |                  const { status } = ctx.advance;
 | 
	
		
			
				|  |  | +                const isEdited = ctx.session.sessionUser.accountId === ctx.advance.uid && (status === uncheck || status === checkNo);
 | 
	
		
			
				|  |  | +                const renderData = await this._getDefaultRenderData(ctx);
 | 
	
		
			
				|  |  |                  // 获取上一期预付款记录
 | 
	
		
			
				|  |  |                  const prevAdvance = await ctx.service.advance.getPreviousRecord(ctx.tender.id, ctx.advance.type);
 | 
	
		
			
				|  |  |                  // 最大支付比例
 | 
	
		
			
				|  |  |                  const max_pr = ctx.helper.mul(ctx.helper.div(ctx.helper.sub(advancePayTotal, (prevAdvance && prevAdvance.prev_total_amount || 0)), advancePayTotal, 10), 100);
 | 
	
		
			
				|  |  | -                renderData.isEdited = status === uncheck || status === checkNo;
 | 
	
		
			
				|  |  | +                // 特殊处理金额的显示(formatMoney)
 | 
	
		
			
				|  |  | +                const s1 = parseFloat(ctx.advance.prev_amount).toString().split('.')[1];
 | 
	
		
			
				|  |  | +                const s2 = parseFloat(ctx.advance.prev_total_amount).toString().split('.')[1];
 | 
	
		
			
				|  |  | +                const prev_amount = ctx.helper.formatMoney(ctx.advance.prev_amount, ',', s1 && s1.length || 0);
 | 
	
		
			
				|  |  | +                const prev_total_amount = ctx.helper.formatMoney(ctx.advance.prev_total_amount, ',', s2 && s2.length || 0);
 | 
	
		
			
				|  |  | +                renderData.isEdited = isEdited;
 | 
	
		
			
				|  |  |                  renderData.advance = ctx.advance;
 | 
	
		
			
				|  |  | -                renderData.decimal = this.decimal;
 | 
	
		
			
				|  |  | +                renderData.prev_amount = prev_amount;
 | 
	
		
			
				|  |  | +                renderData.prev_total_amount = prev_total_amount;
 | 
	
		
			
				|  |  |                  renderData.max_pr = max_pr;
 | 
	
		
			
				|  |  | +                renderData.decimal = this.decimal;
 | 
	
		
			
				|  |  |                  renderData.advancePayTotal = advancePayTotal;
 | 
	
		
			
				|  |  |                  renderData.prevAdvance = prevAdvance;
 | 
	
		
			
				|  |  |                  await this.layout('advance/detail.ejs', renderData, 'advance/modal_audit.ejs');
 | 
	
	
		
			
				|  | @@ -152,6 +170,7 @@ module.exports = app => {
 | 
	
		
			
				|  |  |          async update(ctx) {
 | 
	
		
			
				|  |  |              const { id } = ctx.advance;
 | 
	
		
			
				|  |  |              const data = JSON.parse(ctx.request.body.data);
 | 
	
		
			
				|  |  | +            console.log('data', data);
 | 
	
		
			
				|  |  |              try {
 | 
	
		
			
				|  |  |                  const result = await ctx.service.advance.updateAdvance(data, id);
 | 
	
		
			
				|  |  |                  if (result) {
 | 
	
	
		
			
				|  | @@ -251,6 +270,7 @@ module.exports = app => {
 | 
	
		
			
				|  |  |           */
 | 
	
		
			
				|  |  |          async start(ctx) {
 | 
	
		
			
				|  |  |              const data = JSON.parse(ctx.request.body.data);
 | 
	
		
			
				|  |  | +            console.log('data', data);
 | 
	
		
			
				|  |  |              try {
 | 
	
		
			
				|  |  |                  // 检查权限等
 | 
	
		
			
				|  |  |                  if (!ctx.advance) {
 |