ledger_controller.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. 'use strict';
  2. /**
  3. * 台账相关控制器
  4. *
  5. * @author CaiAoLin
  6. * @date 2017/11/30
  7. * @version
  8. */
  9. module.exports = app => {
  10. class LedgerController extends app.BaseController {
  11. /**
  12. * 构造函数
  13. *
  14. * @param {Object} ctx - egg全局变量
  15. * @return {void}
  16. */
  17. constructor(ctx) {
  18. super(ctx);
  19. ctx.showProject = true;
  20. ctx.showTitle = true;
  21. ctx.showTender = true;
  22. }
  23. /**
  24. * 台账分解页面
  25. *
  26. * @param {Object} ctx - egg全局变量
  27. * @return {void}
  28. */
  29. async explode(ctx) {
  30. if (ctx.request.query.tenderId) {
  31. const tenderId = parseInt(ctx.request.query.tenderId);
  32. const tender = await ctx.service.tender.getDataById(tenderId);
  33. ctx.session.sessionUser.tenderId = tender.id;
  34. ctx.session.sessionUser.tenderName = tender.name;
  35. ctx.redirect('/ledger/explode');
  36. } else {
  37. let tenderId = ctx.session.sessionUser.tenderId;
  38. const tenderList = await ctx.service.tender.getList();
  39. for (const tender of tenderList) {
  40. tender.url = ctx.menuList.ledger.children.explode.url + '?tenderId=' + tender.id;
  41. }
  42. if (!tenderId) {
  43. // 根据标段列表获取默认tenderId
  44. if (tenderList && tenderList.length > 0) {
  45. tenderId = tenderList[0].id;
  46. ctx.session.sessionUser.tenderId = tenderId;
  47. ctx.session.sessionUser.tenderName = tenderList[0].name;
  48. } else {
  49. throw '项目无标段数据';
  50. }
  51. }
  52. const ledgerData = await ctx.service.ledger.getDataByTenderId(tenderId);
  53. const renderData = {
  54. ledger: JSON.stringify(ledgerData),
  55. tenderList: tenderList
  56. };
  57. await this.layout('ledger/explode.ejs', renderData);
  58. }
  59. }
  60. /**
  61. * 获取子节点
  62. * @param ctx
  63. * @returns {Promise<void>}
  64. */
  65. async getChildren(ctx) {
  66. const responseData = {
  67. err: 0,
  68. msg: '',
  69. data: []
  70. };
  71. try {
  72. const tenderId = ctx.session.sessionUser.tenderId;
  73. if (!tenderId) {
  74. throw '当前未打开标段';
  75. }
  76. const data = JSON.parse(ctx.request.body.data);
  77. const id = data.id;
  78. if (isNaN(id) || id <= 0) {
  79. throw '参数错误';
  80. }
  81. responseData.data = await ctx.service.ledger.getChildrenByParentId(tenderId, id);
  82. } catch (err) {
  83. responseData.err = 1;
  84. responseData.msg = err;
  85. }
  86. ctx.body = responseData;
  87. };
  88. /**
  89. * 树结构基本操作(增、删、上下移、升降级)
  90. * @param {Object} ctx - egg全局变量
  91. * @returns {Promise<void>}
  92. */
  93. async baseOperation(ctx) {
  94. const responseData = {
  95. err: 0,
  96. msg: '',
  97. data: []
  98. };
  99. try {
  100. const tenderId = ctx.session.sessionUser.tenderId;
  101. if (!tenderId) {
  102. throw '当前未打开标段';
  103. }
  104. const data = JSON.parse(ctx.request.body.data);
  105. if ((isNaN(data.id) || data.id <= 0) || (!data.postType)) {
  106. throw '参数错误';
  107. }
  108. switch (data.postType) {
  109. case 'add':
  110. responseData.data = await ctx.service.ledger.addNode(tenderId, data.id);
  111. break;
  112. case 'delete':
  113. responseData.data = await ctx.service.ledger.deleteNode(tenderId, data.id);
  114. break;
  115. case 'up-move':
  116. responseData.data = await ctx.service.ledger.upMoveNode(tenderId, data.id);
  117. break;
  118. case 'down-move':
  119. responseData.data = await ctx.service.ledger.downMoveNode(tenderId, data.id);
  120. break;
  121. case 'up-level':
  122. responseData.data = await ctx.service.ledger.upLevelNode(tenderId, data.id);
  123. break;
  124. case 'down-level':
  125. responseData.data = await ctx.service.ledger.downLevelNode(tenderId, data.id);
  126. break;
  127. default:
  128. throw '未知操作';
  129. }
  130. } catch (err) {
  131. responseData.err = 1;
  132. responseData.msg = err;
  133. }
  134. ctx.body = responseData;
  135. };
  136. async updateInfo(ctx) {
  137. const responseData = {
  138. err: 0,
  139. msg: '',
  140. data: []
  141. };
  142. try {
  143. const tenderId = ctx.session.sessionUser.tenderId;
  144. if (!tenderId) {
  145. throw '当前未打开标段';
  146. }
  147. const data = JSON.parse(ctx.request.body.data);
  148. if (data instanceof Array) {
  149. responseData.data = await ctx.service.ledger.updateInfos(tenderId, data);
  150. } else {
  151. responseData.data = await ctx.service.ledger.updateInfo(tenderId, data);
  152. }
  153. } catch (err) {
  154. responseData.err = 1;
  155. responseData.msg = err;
  156. }
  157. ctx.body = responseData;
  158. };
  159. /**
  160. * 台账变更页面
  161. *
  162. * @param {object} ctx - egg全局变量
  163. * @return {void}
  164. */
  165. async change(ctx) {
  166. const renderData = {};
  167. await this.layout('ledger/change.ejs', renderData);
  168. }
  169. /**
  170. * 计量台账页面
  171. *
  172. * @param {object} ctx - egg全局变量
  173. * @return {void}
  174. */
  175. async index(ctx) {
  176. const renderData = {};
  177. await this.layout('ledger/index.ejs', renderData);
  178. }
  179. }
  180. return LedgerController;
  181. };