change_controller.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date 2018/8/14
  7. * @version
  8. */
  9. const moment = require('moment');
  10. const audit = require('../const/audit');
  11. const codeRuleConst = require('../const/code_rule');
  12. const changeConst = require('../const/change');
  13. module.exports = app => {
  14. class ChangeController extends app.BaseController {
  15. /**
  16. * 构造函数
  17. *
  18. * @param {Object} ctx - egg全局变量
  19. * @return {void}
  20. */
  21. constructor(ctx) {
  22. super(ctx);
  23. ctx.showProject = true;
  24. ctx.showTender = true;
  25. ctx.showTitle = true;
  26. }
  27. async _filterChanges(ctx, status) {
  28. const tenderId = ctx.params.id;
  29. const tender = await this.service.tender.getDataById(tenderId);
  30. const tenderList = await this.service.tender.getList();
  31. const changes = await ctx.service.change.checkingDatas(tender.id, ctx.session.sessionUser.accountId);
  32. const filter = JSON.parse(JSON.stringify(audit.filter));
  33. filter.count = [];
  34. filter.count[filter.status.pending] = 4;// await ctx.service.change.pendingDatas(tender.id, ctx.session.sessionUser.accountId);
  35. filter.count[filter.status.uncheck] = 4;// await ctx.service.change.checkingDatas(tender.id, ctx.session.sessionUser.accountId);
  36. filter.count[filter.status.checking] = 4;// await ctx.service.change.checkedDatas(tender.id, ctx.session.sessionUser.accountId);
  37. filter.count[filter.status.checked] = 4;// await ctx.service.change.pendingDatas(tender.id, ctx.session.sessionUser.accountId);
  38. filter.count[filter.status.checkNo] = 4;//await ctx.service.change.pendingDatas(tender.id, ctx.session.sessionUser.accountId);
  39. const codeRule = tender.c_rule ? JSON.parse(tender.c_rule) : [];
  40. for (const rule of codeRule) {
  41. switch (rule.rule_type) {
  42. case codeRuleConst.measure.ruleType.tenderName:
  43. rule.preview = tender.name;
  44. break;
  45. case codeRuleConst.measure.ruleType.inDate:
  46. rule.preview = moment().format('YYYYMM');
  47. break;
  48. case codeRuleConst.measure.ruleType.text:
  49. rule.preview = rule.text;
  50. break;
  51. case codeRuleConst.measure.ruleType.addNo:
  52. const s = '0000000000';
  53. rule.preview = s.substr(s.length - rule.format);
  54. break;
  55. }
  56. }
  57. const renderData = {
  58. moment,
  59. tender,
  60. tenderList,
  61. changes,
  62. filter,
  63. status: status,
  64. codeRule,
  65. auditConst: audit.flow,
  66. ruleType: codeRuleConst.ruleType.change,
  67. ruleConst: codeRuleConst.measure,
  68. };
  69. await this.layout('change/index.ejs', renderData, 'change/modal.ejs');
  70. }
  71. /**
  72. * 变更管理 页面 (Get)
  73. *
  74. * @param {Object} ctx - egg全局变量
  75. * @returns {Promise<void>}
  76. */
  77. async index(ctx) {
  78. try {
  79. await this._filterChanges(ctx, audit.filter.status.uncheck);
  80. } catch (err) {
  81. this.log(err);
  82. ctx.redirect('/dashboard');
  83. }
  84. }
  85. /**
  86. *
  87. * @param ctx
  88. * @returns {Promise<void>}
  89. */
  90. async newCode(ctx) {
  91. const responseData = {
  92. err: 0,
  93. msg: '',
  94. data: '',
  95. };
  96. try {
  97. const tenderId = ctx.params.id;
  98. if (!tenderId) {
  99. throw '当前未打开标段';
  100. }
  101. const tenderData = await ctx.service.tender.getDataById(tenderId);
  102. const cCodeRule = JSON.parse(tenderData.c_rule);
  103. const code = [];
  104. for (const rule of cCodeRule) {
  105. switch (rule.rule_type) {
  106. case codeRuleConst.measure.ruleType.tenderName:
  107. code.push(tenderData.name);
  108. break;
  109. case codeRuleConst.measure.ruleType.text:
  110. code.push(rule.text);
  111. break;
  112. case codeRuleConst.measure.ruleType.inDate:
  113. code.push(moment().format('YYYYMM'));
  114. break;
  115. case codeRuleConst.measure.ruleType.addNo:
  116. let s = '0000000000';
  117. const count = rule.start + await ctx.service.change.count({tid: tenderId});
  118. s = s + count;
  119. code.push(s.substr(s.length - rule.format));
  120. break;
  121. }
  122. }
  123. responseData.data = code.join('');
  124. } catch (err) {
  125. responseData.err = 1;
  126. responseData.msg = err;
  127. }
  128. ctx.body = responseData;
  129. }
  130. /**
  131. * 新增变更 (Post)
  132. *
  133. * @param {Object} ctx - egg全局变量
  134. * @returns {Promise<void>}
  135. */
  136. async add(ctx) {
  137. try {
  138. const tenderId = ctx.params.id;
  139. if (!tenderId) {
  140. throw '当前未打开标段';
  141. }
  142. const data = JSON.parse(ctx.request.body.data);
  143. if (!data.code || data.code === '' || !data.name || data.name === '') {
  144. throw '提交数据错误';
  145. }
  146. const change = await ctx.service.change.add(tenderId, ctx.session.sessionUser.accountId, data.code, data.name);
  147. ctx.body = { err: 0, msg: '', data: change };
  148. } catch (err) {
  149. this.log(err);
  150. ctx.body = { err: 1, msg: err.toString() };
  151. }
  152. }
  153. /**
  154. * 变更管理 状态筛选 页面 (Get)
  155. * @param ctx
  156. * @returns {Promise<void>}
  157. */
  158. async status(ctx) {
  159. try {
  160. const status = parseInt(ctx.params.status);
  161. await this._filterChanges(ctx, status);
  162. } catch (err) {
  163. this.logger.error(err);
  164. ctx.redirect('/change');
  165. }
  166. }
  167. /**
  168. * 变更信息 页面 (Get)
  169. *
  170. * @param {Object} ctx - egg全局变量
  171. * @returns {Promise<void>}
  172. */
  173. async info(ctx) {
  174. try {
  175. const tender = ctx.tenderData;
  176. const tenderList = ctx.tenderList;
  177. const change = await ctx.service.change.getDataByCondition({cid: ctx.params.cid});
  178. const renderData = {
  179. tender,
  180. tenderList,
  181. change,
  182. changeConst,
  183. };
  184. await this.layout('change/info.ejs', renderData);
  185. } catch (err) {
  186. this.log(err);
  187. ctx.redirect('/change');
  188. }
  189. }
  190. /**
  191. * 变更清单 页面 (Get)
  192. *
  193. * @param {Object} ctx - egg全局变量
  194. * @returns {Promise<void>}
  195. */
  196. async bills(ctx) {
  197. try {
  198. const tender = ctx.tenderData;
  199. const tenderList = ctx.tenderList;
  200. const change = await ctx.service.change.getDataByCondition({cid: ctx.params.cid});
  201. const renderData = {
  202. tender,
  203. tenderList,
  204. change,
  205. };
  206. await this.layout('change/bills.ejs', renderData, 'change/bills_modal.ejs');
  207. } catch (err) {
  208. this.log(err);
  209. ctx.redirect('/change');
  210. }
  211. }
  212. /**
  213. * 附件 页面 (Get)
  214. *
  215. * @param {Object} ctx - egg全局变量
  216. * @returns {Promise<void>}
  217. */
  218. async file(ctx) {
  219. try {
  220. const tender = ctx.tenderData;
  221. const tenderList = ctx.tenderList;
  222. const change = await ctx.service.change.getDataByCondition({cid: ctx.params.cid});
  223. const renderData = {
  224. tender,
  225. tenderList,
  226. change,
  227. };
  228. await this.layout('change/file.ejs', renderData, 'change/file_modal.ejs');
  229. } catch (err) {
  230. this.log(err);
  231. ctx.redirect('/change');
  232. }
  233. }
  234. }
  235. return ChangeController;
  236. };