'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'); const tenderMenu = require('../../config/menu').tenderMenu; 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 = 0) { const tenderId = ctx.params.id; ctx.session.sessionUser.tenderId = tenderId; const tender = await this.service.tender.getDataById(tenderId); const tenderList = await this.service.tender.getList(); const page = ctx.page; const changes = await ctx.service.change.getListByStatus(tender.id, status); const total = await ctx.service.change.getCountByStatus(tender.id, status); if (changes !== null) { let i = 0; for(let c of changes) { const changeAudit = await ctx.service.changeAudit.getLastUser(c.cid, c.times); changes[i].changeAudit = changeAudit; i++; } } // 分页相关 const pageInfo = { page, total: parseInt(total / app.config.pageSize), queryData: JSON.stringify(ctx.urlInfo.query), }; const filter = JSON.parse(JSON.stringify(audit.filter)); filter.count = []; filter.count[filter.status.pending] = await ctx.service.change.getCountByStatus(tender.id, filter.status.pending);// await ctx.service.change.pendingDatas(tender.id, ctx.session.sessionUser.accountId); filter.count[filter.status.uncheck] = await ctx.service.change.getCountByStatus(tender.id, filter.status.uncheck);// await ctx.service.change.checkingDatas(tender.id, ctx.session.sessionUser.accountId); filter.count[filter.status.checking] = await ctx.service.change.getCountByStatus(tender.id, filter.status.checking);// await ctx.service.change.checkedDatas(tender.id, ctx.session.sessionUser.accountId); filter.count[filter.status.checked] = await ctx.service.change.getCountByStatus(tender.id, filter.status.checked);// await ctx.service.change.pendingDatas(tender.id, ctx.session.sessionUser.accountId); filter.count[filter.status.checkNo] = await ctx.service.change.getCountByStatus(tender.id, filter.status.checkNo);//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 = { uid: ctx.session.sessionUser.accountId, moment, tender, tenderList, pageInfo, changes, filter, status: status, codeRule, auditConst: audit.flow, ruleType: codeRuleConst.ruleType.change, ruleConst: codeRuleConst.measure, tenderMenu: this.menu.tenderMenu, preUrl: '/tender/' + tenderId, }; 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); } catch (err) { this.log(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) { this.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('/tender/'+ ctx.params.id +'/change'); } } /** * 变更信息 页面 (Get) * * @param {Object} ctx - egg全局变量 * @returns {Promise} */ async info(ctx) { try { const tid = ctx.session.sessionUser.tenderId !== undefined ? ctx.session.sessionUser.tenderId : ctx.params.id; const tender = await this.service.tender.getDataById(tid); const change = await ctx.service.change.getDataByCondition({cid: ctx.params.cid}); // 后台判断当前人查看info状态 const auditStatus = await ctx.service.changeAudit.getStatusByChange(change); // 获取公司列表 const companyList = await ctx.service.changeCompany.getAllDataByCondition({ tid: tid }); const renderData = { uid: ctx.session.sessionUser.accountId, tender, change, changeConst, auditStatus, auditConst: audit.flow, companyList, }; await this.layout('change/info.ejs', renderData, 'change/info_modal.ejs'); } catch (err) { this.log(err); ctx.redirect('/tender/'+ ctx.params.id +'/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/info_modal.ejs'); } catch (err) { this.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) { this.log(err); ctx.redirect('/change'); } } /** * 变更公司管理 * @param ctx * @return {Promise.} */ async updateCompany(ctx) { const responseData = { err: 0, msg: '', data: '', }; try { const data = JSON.parse(ctx.request.body.data); if (data.tid === undefined || data.uci === undefined || data.uc === undefined || data.ac === undefined) { throw '参数有误'; } const [addCompany, selectCompany] = await ctx.service.changeCompany.setCompanyList(data); responseData.data = { add: addCompany, select: selectCompany }; } catch (err) { responseData.err = 1; responseData.msg = err; } ctx.body = responseData; } } return ChangeController; };