ledger_controller.js 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  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,
  56. };
  57. await this.layout('ledger/explode.ejs', renderData);
  58. }
  59. }
  60. /**
  61. * 获取子节点
  62. * @param ctx
  63. * @return {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. * @return {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. /**
  137. * 提交更新数据
  138. * @param ctx
  139. * @return {Promise<void>}
  140. */
  141. async updateInfo(ctx) {
  142. const responseData = {
  143. err: 0,
  144. msg: '',
  145. data: [],
  146. };
  147. try {
  148. const tenderId = ctx.session.sessionUser.tenderId;
  149. if (!tenderId) {
  150. throw '当前未打开标段';
  151. }
  152. const data = JSON.parse(ctx.request.body.data);
  153. if (data instanceof Array) {
  154. responseData.data = await ctx.service.ledger.updateInfos(tenderId, data);
  155. } else {
  156. responseData.data = await ctx.service.ledger.updateInfo(tenderId, data);
  157. }
  158. } catch (err) {
  159. responseData.err = 1;
  160. responseData.msg = err;
  161. }
  162. ctx.body = responseData;
  163. }
  164. /**
  165. * 复制粘贴整块
  166. * @param ctx
  167. * @return {Promise<void>}
  168. */
  169. async pasteBlock(ctx) {
  170. const responseData = {
  171. err: 0,
  172. msg: '',
  173. data: [],
  174. };
  175. try {
  176. const tenderId = ctx.session.sessionUser.tenderId;
  177. if (!tenderId) {
  178. throw '当前未打开标段';
  179. }
  180. const data = JSON.parse(ctx.request.body.data);
  181. if ((isNaN(data.id) || data.id <= 0) || (!data.block || data.block.length <= 0)) {
  182. throw '参数错误';
  183. }
  184. responseData.data = await ctx.service.ledger.pasteBlock(tenderId, data.id, data.block);
  185. } catch (err) {
  186. responseData.err = 1;
  187. responseData.msg = err;
  188. }
  189. ctx.body = responseData;
  190. }
  191. /**
  192. * 台账变更页面
  193. *
  194. * @param {object} ctx - egg全局变量
  195. * @return {void}
  196. */
  197. async change(ctx) {
  198. const renderData = {};
  199. await this.layout('ledger/change.ejs', renderData);
  200. }
  201. /**
  202. * 计量台账页面
  203. *
  204. * @param {object} ctx - egg全局变量
  205. * @return {void}
  206. */
  207. async index(ctx) {
  208. const renderData = {};
  209. await this.layout('ledger/index.ejs', renderData);
  210. }
  211. }
  212. return LedgerController;
  213. };