'use strict'; /** * * * @author Mai * @date * @version */ const auditConst = require('../const/audit').flow; module.exports = options => { /** * 标段校验 中间件 * 1. 读取标段数据(包括属性) * 2. 检验用户是否可见标段(不校验具体权限) * * @param {function} next - 中间件继续执行的方法 * @return {void} */ return function* tenderCheck(next) { try { // 读取标段数据 const tender = { id: parseInt(this.params.id), }; if (!tender.id) { throw '当前未打开标段'; } tender.data = yield this.service.tender.getTender(tender.id); if (!tender.data) { throw '标段数据错误'; } if (!tender.data.measure_type) { throw '请先选择计量模式'; } tender.info = yield this.service.tenderInfo.getTenderInfo(tender.id); if (!tender.data.ledger_status) { tender.data.ledger_status = auditConst.status.uncheck; } if (!tender.data.ledger_times) { tender.data.ledger_times = 1; } // todo 校验权限 (标段参与人、分享) if (tender.data.project_id !== this.session.sessionProject.id) { throw '您无权查看该项目'; } this.tender = tender; yield next; } catch (err) { // 输出错误到日志 if (err.stack) { this.logger.error(err); } else { this.setMessage(err, measureType.ERROR); this.getLogger('fail').info(JSON.stringify({ error: err, project: this.session.sessionProject, user: this.session.sessionUser, body: this.session.body, })); } // 重定向值标段管理 this.redirect('/list'); } }; };