'use strict'; /** * * * @author Mai * @date 2018/8/14 * @version */ const moment = require('moment'); const audit = require('../const/audit'); const codeRuleConst = require('../const/code_rule'); const changeConst = require('../const/change'); module.exports = app => { class ChangeController extends app.BaseController { /** * 构造函数 * * @param {Object} ctx - egg全局变量 * @return {void} */ constructor(ctx) { super(ctx); ctx.showProject = true; ctx.showTender = true; ctx.showTitle = true; } async _filterChanges(ctx, status) { const tenderId = ctx.params.id; const tender = await this.service.tender.getDataById(tenderId); const tenderList = await this.service.tender.getList(); const changes = await ctx.service.change.checkingDatas(tender.id, ctx.session.sessionUser.accountId); const filter = JSON.parse(JSON.stringify(audit.filter)); filter.count = []; filter.count[filter.status.pending] = 4;// await ctx.service.change.pendingDatas(tender.id, ctx.session.sessionUser.accountId); filter.count[filter.status.uncheck] = 4;// await ctx.service.change.checkingDatas(tender.id, ctx.session.sessionUser.accountId); filter.count[filter.status.checking] = 4;// await ctx.service.change.checkedDatas(tender.id, ctx.session.sessionUser.accountId); filter.count[filter.status.checked] = 4;// await ctx.service.change.pendingDatas(tender.id, ctx.session.sessionUser.accountId); filter.count[filter.status.checkNo] = 4;//await ctx.service.change.pendingDatas(tender.id, ctx.session.sessionUser.accountId); const codeRule = tender.c_rule ? JSON.parse(tender.c_rule) : []; for (const rule of codeRule) { switch (rule.rule_type) { case codeRuleConst.measure.ruleType.tenderName: rule.preview = tender.name; break; case codeRuleConst.measure.ruleType.inDate: rule.preview = moment().format('YYYYMM'); break; case codeRuleConst.measure.ruleType.text: rule.preview = rule.text; break; case codeRuleConst.measure.ruleType.addNo: const s = '0000000000'; rule.preview = s.substr(s.length - rule.format); break; } } const renderData = { moment, tender, tenderList, changes, filter, status: status, codeRule, auditConst: audit.flow, ruleType: codeRuleConst.ruleType.change, ruleConst: codeRuleConst.measure, }; await this.layout('change/index.ejs', renderData, 'change/modal.ejs'); } /** * 变更管理 页面 (Get) * * @param {Object} ctx - egg全局变量 * @returns {Promise} */ async index(ctx) { try { await this._filterChanges(ctx, audit.filter.status.uncheck); } catch (err) { console.log(err); this.logger.err(err); ctx.redirect('/dashboard'); } } /** * * @param ctx * @returns {Promise} */ async newCode(ctx) { const responseData = { err: 0, msg: '', data: '', }; try { const tenderId = ctx.params.id; if (!tenderId) { throw '当前未打开标段'; } const tenderData = await ctx.service.tender.getDataById(tenderId); const cCodeRule = JSON.parse(tenderData.c_rule); const code = []; for (const rule of cCodeRule) { switch (rule.rule_type) { case codeRuleConst.measure.ruleType.tenderName: code.push(tenderData.name); break; case codeRuleConst.measure.ruleType.text: code.push(rule.text); break; case codeRuleConst.measure.ruleType.inDate: code.push(moment().format('YYYYMM')); break; case codeRuleConst.measure.ruleType.addNo: let s = '0000000000'; const count = rule.start + await ctx.service.change.count({tid: tenderId}); s = s + count; code.push(s.substr(s.length - rule.format)); break; } } responseData.data = code.join(''); } catch (err) { responseData.err = 1; responseData.msg = err; } ctx.body = responseData; } /** * 新增变更 (Post) * * @param {Object} ctx - egg全局变量 * @returns {Promise} */ async add(ctx) { try { const tenderId = ctx.params.id; if (!tenderId) { throw '当前未打开标段'; } const data = JSON.parse(ctx.request.body.data); if (!data.code || data.code === '' || !data.name || data.name === '') { throw '提交数据错误'; } const change = await ctx.service.change.add(tenderId, ctx.session.sessionUser.accountId, data.code, data.name); ctx.body = { err: 0, msg: '', data: change }; } catch (err) { console.log(err); ctx.body = { err: 1, msg: err.toString() }; } } /** * 变更管理 状态筛选 页面 (Get) * @param ctx * @returns {Promise} */ async status(ctx) { try { const status = parseInt(ctx.params.status); await this._filterChanges(ctx, status); } catch (err) { this.logger.error(err); ctx.redirect('/change'); } } /** * 变更信息 页面 (Get) * * @param {Object} ctx - egg全局变量 * @returns {Promise} */ async info(ctx) { try { const tender = ctx.tenderData; const tenderList = ctx.tenderList; const change = await ctx.service.change.getDataByCondition({cid: ctx.params.cid}); const renderData = { tender, tenderList, change, changeConst, }; await this.layout('change/info.ejs', renderData); } catch (err) { console.log(err); ctx.redirect('/change'); } } /** * 变更清单 页面 (Get) * * @param {Object} ctx - egg全局变量 * @returns {Promise} */ async bills(ctx) { try { const tender = ctx.tenderData; const tenderList = ctx.tenderList; const change = await ctx.service.change.getDataByCondition({cid: ctx.params.cid}); const renderData = { tender, tenderList, change, }; await this.layout('change/bills.ejs', renderData, 'change/bills_modal.ejs'); } catch (err) { console.log(err); ctx.redirect('/change'); } } /** * 附件 页面 (Get) * * @param {Object} ctx - egg全局变量 * @returns {Promise} */ async file(ctx) { try { const tender = ctx.tenderData; const tenderList = ctx.tenderList; const change = await ctx.service.change.getDataByCondition({cid: ctx.params.cid}); const renderData = { tender, tenderList, change, }; await this.layout('change/file.ejs', renderData, 'change/file_modal.ejs'); } catch (err) { console.log(err); ctx.redirect('/change'); } } } return ChangeController; };