measure_controller.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. 'use strict';
  2. /**
  3. * 计量相关控制器
  4. *
  5. * @author olym
  6. * @date 2018/2/11
  7. * @version
  8. */
  9. const spreadConst = require('../const/spread');
  10. const codeRuleConst = require('../const/code_rule');
  11. const auditConst = require('../const/audit').stage;
  12. const moment = require('moment');
  13. const measureType = require('../const/tender').measureType;
  14. module.exports = app => {
  15. class MeasureController extends app.BaseController {
  16. /**
  17. * 构造函数
  18. *
  19. * @param {Object} ctx - egg全局变量
  20. * @return {void}
  21. */
  22. constructor(ctx) {
  23. super(ctx);
  24. ctx.showProject = true;
  25. ctx.showTender = true;
  26. ctx.showTitle = true;
  27. }
  28. /**
  29. * 期列表(Get)
  30. * @param ctx
  31. * @returns {Promise<void>}
  32. */
  33. async stage(ctx) {
  34. try {
  35. const renderData = {
  36. tender: ctx.tender.data,
  37. tenderMenu: this.menu.tenderMenu,
  38. preUrl: '/tender/' + ctx.tender.id,
  39. auditConst,
  40. };
  41. renderData.stages = await ctx.service.stage.getValidStages(ctx.tender.id);
  42. for (const s of renderData.stages) {
  43. s.curAuditor = null;
  44. }
  45. await this.layout('measure/stage.ejs', renderData, 'measure/stage_modal.ejs');
  46. } catch (err) {
  47. this.log(err);
  48. ctx.redirect(this.menu.menu.dashboard.url);
  49. }
  50. }
  51. /**
  52. * 新增期(Post)
  53. * @param ctx
  54. * @returns {Promise<void>}
  55. */
  56. async add(ctx) {
  57. try {
  58. if (ctx.session.sessionUser.accountId !== ctx.tender.data.user_id) {
  59. throw '您无权创建计量期';
  60. }
  61. const date = ctx.request.body.date;
  62. const period = ctx.request.body.period;
  63. const newStage = await ctx.service.stage.addStage(ctx.tender.id, date, period);
  64. if (!newStage) {
  65. throw '新增计量期失败,请重试';
  66. }
  67. ctx.redirect('/tender/' + ctx.tender.id + '/measure/stage/' + newStage.order);
  68. } catch (err) {
  69. this.log(err);
  70. ctx.redirect(ctx.request.header.referer)
  71. }
  72. }
  73. /**
  74. * 编辑期(Post)
  75. * @param ctx
  76. * @returns {Promise<void>}
  77. */
  78. async save(ctx) {
  79. try {
  80. const data = {
  81. order: ctx.request.body.order,
  82. date: ctx.request.body.date,
  83. period: ctx.request.body.period,
  84. };
  85. const stage = await ctx.service.stage.getDataByCondition({
  86. tid: ctx.tender.id,
  87. order: data.order,
  88. });
  89. if (!stage) {
  90. throw '提交数据错误';
  91. }
  92. if (stage.status !== auditConst.status.uncheck) {
  93. throw '该计量期当前不可编辑';
  94. }
  95. if (ctx.session.sessionUser.accountId !== stage.user_id) {
  96. throw '您无权修改该数据';
  97. }
  98. await this.ctx.service.stage.saveStage(ctx.tender.id, data.order, data.date, data.period);
  99. ctx.redirect('/tender/' + ctx.tender.id + '/measure/stage/');
  100. } catch (err) {
  101. this.log(err);
  102. ctx.redirect('/tender/' + ctx.tender.id + '/measure/stage/');
  103. }
  104. }
  105. /**
  106. * 多期汇总 (Get)
  107. * @param ctx
  108. * @returns {Promise<void>}
  109. */
  110. async gather(ctx) {
  111. try {
  112. const renderData = {
  113. tender: ctx.tender.data,
  114. tenderMenu: this.menu.tenderMenu,
  115. preUrl: '/tender/' + ctx.tender.id,
  116. }
  117. await this.layout('measure/gather.ejs', renderData);
  118. } catch (err) {
  119. this.log(err);
  120. ctx.redirect(this.menu.menu.dashboard.url);
  121. }
  122. }
  123. /**
  124. * 多期比较(Get)
  125. * @param ctx
  126. * @returns {Promise<void>}
  127. */
  128. async compare(ctx) {
  129. try {
  130. const renderData = {
  131. tender: ctx.tender.data,
  132. tenderMenu: this.menu.tenderMenu,
  133. preUrl: '/tender/' + ctx.tender.id,
  134. }
  135. await this.layout('measure/compare.ejs', renderData, 'measure/compare_modal.ejs');
  136. } catch (err) {
  137. this.log(err);
  138. ctx.redirect(this.menu.menu.dashboard.url);
  139. }
  140. }
  141. }
  142. return MeasureController;
  143. };