ledger_controller.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  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. let tenderId = ctx.session.sessionUser.tenderId;
  31. if (!tenderId) {
  32. // 根据标段列表获取默认tenderId
  33. const tenderList = await ctx.service.tender.getList();
  34. if (tenderList && tenderList.length > 0) {
  35. tenderId = tenderList[0].id;
  36. ctx.session.sessionUser.tenderId = tenderId;
  37. } else {
  38. throw '项目无标段数据';
  39. }
  40. }
  41. const ledgerData = await ctx.service.ledger.getDataByTenderId(tenderId);
  42. const renderData = {
  43. ledger: JSON.stringify(ledgerData)
  44. };
  45. await this.layout('ledger/explode.ejs', renderData);
  46. }
  47. /**
  48. * 获取子节点
  49. * @param ctx
  50. * @returns {Promise<void>}
  51. */
  52. async getChildren(ctx) {
  53. const responseData = {
  54. err: 0,
  55. msg: '',
  56. data: []
  57. };
  58. try {
  59. const tenderId = ctx.session.sessionUser.tenderId;
  60. if (!tenderId) {
  61. throw '当前未打开标段';
  62. }
  63. const data = JSON.parse(ctx.request.body.data);
  64. const id = data.id;
  65. if (isNaN(id) || id <= 0) {
  66. throw '参数错误';
  67. }
  68. responseData.data = await ctx.service.ledger.getChildrenByParentId(tenderId, id);
  69. } catch (err) {
  70. responseData.err = 1;
  71. responseData.msg = err;
  72. }
  73. ctx.body = responseData;
  74. };
  75. /**
  76. * 树结构基本操作(增、删、上下移、升降级)
  77. * @param {Object} ctx - egg全局变量
  78. * @returns {Promise<void>}
  79. */
  80. async baseOperation(ctx) {
  81. const responseData = {
  82. err: 0,
  83. msg: '',
  84. data: []
  85. };
  86. try {
  87. const tenderId = ctx.session.sessionUser.tenderId;
  88. if (!tenderId) {
  89. throw '当前未打开标段';
  90. }
  91. const data = JSON.parse(ctx.request.body.data);
  92. if ((isNaN(data.id) || data.id <= 0) || (!data.postType)) {
  93. throw '参数错误';
  94. }
  95. switch (data.postType) {
  96. case 'add':
  97. responseData.data = await ctx.service.ledger.addNode(tenderId, data.id);
  98. break;
  99. case 'delete':
  100. responseData.data = await ctx.service.ledger.deleteNode(tenderId, data.id);
  101. break;
  102. case 'up-move':
  103. responseData.data = await ctx.service.ledger.upMoveNode(tenderId, data.id);
  104. break;
  105. case 'down-move':
  106. responseData.data = await ctx.service.ledger.downMoveNode(tenderId, data.id);
  107. break;
  108. case 'up-level':
  109. responseData.data = await ctx.service.ledger.upLevelNode(tenderId, data.id);
  110. break;
  111. case 'down-level':
  112. responseData.data = await ctx.service.ledger.downLevelNode(tenderId, data.id);
  113. break;
  114. default:
  115. throw '未知操作';
  116. }
  117. } catch (err) {
  118. responseData.err = 1;
  119. responseData.msg = err;
  120. }
  121. ctx.body = responseData;
  122. };
  123. /**
  124. * 台账变更页面
  125. *
  126. * @param {object} ctx - egg全局变量
  127. * @return {void}
  128. */
  129. async change(ctx) {
  130. const renderData = {};
  131. await this.layout('ledger/change.ejs', renderData);
  132. }
  133. /**
  134. * 计量台账页面
  135. *
  136. * @param {object} ctx - egg全局变量
  137. * @return {void}
  138. */
  139. async index(ctx) {
  140. const renderData = {};
  141. await this.layout('ledger/index.ejs', renderData);
  142. }
  143. }
  144. return LedgerController;
  145. };