change_controller.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  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. console.log(err);
  82. this.logger.err(err);
  83. ctx.redirect('/dashboard');
  84. }
  85. }
  86. /**
  87. *
  88. * @param ctx
  89. * @returns {Promise<void>}
  90. */
  91. async newCode(ctx) {
  92. const responseData = {
  93. err: 0,
  94. msg: '',
  95. data: '',
  96. };
  97. try {
  98. const tenderId = ctx.params.id;
  99. if (!tenderId) {
  100. throw '当前未打开标段';
  101. }
  102. const tenderData = await ctx.service.tender.getDataById(tenderId);
  103. const cCodeRule = JSON.parse(tenderData.c_rule);
  104. const code = [];
  105. for (const rule of cCodeRule) {
  106. switch (rule.rule_type) {
  107. case codeRuleConst.measure.ruleType.tenderName:
  108. code.push(tenderData.name);
  109. break;
  110. case codeRuleConst.measure.ruleType.text:
  111. code.push(rule.text);
  112. break;
  113. case codeRuleConst.measure.ruleType.inDate:
  114. code.push(moment().format('YYYYMM'));
  115. break;
  116. case codeRuleConst.measure.ruleType.addNo:
  117. let s = '0000000000';
  118. const count = rule.start + await ctx.service.change.count({tid: tenderId});
  119. s = s + count;
  120. code.push(s.substr(s.length - rule.format));
  121. break;
  122. }
  123. }
  124. responseData.data = code.join('');
  125. } catch (err) {
  126. responseData.err = 1;
  127. responseData.msg = err;
  128. }
  129. ctx.body = responseData;
  130. }
  131. /**
  132. * 新增变更 (Post)
  133. *
  134. * @param {Object} ctx - egg全局变量
  135. * @returns {Promise<void>}
  136. */
  137. async add(ctx) {
  138. try {
  139. const tenderId = ctx.params.id;
  140. if (!tenderId) {
  141. throw '当前未打开标段';
  142. }
  143. const data = JSON.parse(ctx.request.body.data);
  144. if (!data.code || data.code === '' || !data.name || data.name === '') {
  145. throw '提交数据错误';
  146. }
  147. const change = await ctx.service.change.add(tenderId, ctx.session.sessionUser.accountId, data.code, data.name);
  148. ctx.body = { err: 0, msg: '', data: change };
  149. } catch (err) {
  150. console.log(err);
  151. ctx.body = { err: 1, msg: err.toString() };
  152. }
  153. }
  154. /**
  155. * 变更管理 状态筛选 页面 (Get)
  156. * @param ctx
  157. * @returns {Promise<void>}
  158. */
  159. async status(ctx) {
  160. try {
  161. const status = parseInt(ctx.params.status);
  162. await this._filterChanges(ctx, status);
  163. } catch (err) {
  164. this.logger.error(err);
  165. ctx.redirect('/change');
  166. }
  167. }
  168. /**
  169. * 变更信息 页面 (Get)
  170. *
  171. * @param {Object} ctx - egg全局变量
  172. * @returns {Promise<void>}
  173. */
  174. async info(ctx) {
  175. try {
  176. const tender = ctx.tenderData;
  177. const tenderList = ctx.tenderList;
  178. const change = await ctx.service.change.getDataByCondition({cid: ctx.params.cid});
  179. const renderData = {
  180. tender,
  181. tenderList,
  182. change,
  183. changeConst,
  184. };
  185. await this.layout('change/info.ejs', renderData);
  186. } catch (err) {
  187. console.log(err);
  188. ctx.redirect('/change');
  189. }
  190. }
  191. /**
  192. * 变更清单 页面 (Get)
  193. *
  194. * @param {Object} ctx - egg全局变量
  195. * @returns {Promise<void>}
  196. */
  197. async bills(ctx) {
  198. try {
  199. const tender = ctx.tenderData;
  200. const tenderList = ctx.tenderList;
  201. const change = await ctx.service.change.getDataByCondition({cid: ctx.params.cid});
  202. const renderData = {
  203. tender,
  204. tenderList,
  205. change,
  206. };
  207. await this.layout('change/bills.ejs', renderData, 'change/bills_modal.ejs');
  208. } catch (err) {
  209. console.log(err);
  210. ctx.redirect('/change');
  211. }
  212. }
  213. /**
  214. * 附件 页面 (Get)
  215. *
  216. * @param {Object} ctx - egg全局变量
  217. * @returns {Promise<void>}
  218. */
  219. async file(ctx) {
  220. try {
  221. const tender = ctx.tenderData;
  222. const tenderList = ctx.tenderList;
  223. const change = await ctx.service.change.getDataByCondition({cid: ctx.params.cid});
  224. const renderData = {
  225. tender,
  226. tenderList,
  227. change,
  228. };
  229. await this.layout('change/file.ejs', renderData, 'change/file_modal.ejs');
  230. } catch (err) {
  231. console.log(err);
  232. ctx.redirect('/change');
  233. }
  234. }
  235. }
  236. return ChangeController;
  237. };