ledger_controller.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  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. async update(ctx) {
  165. const responseData = {
  166. err: 0,
  167. msg: '',
  168. data: [],
  169. };
  170. try {
  171. const tenderId = ctx.session.sessionUser.tenderId;
  172. if (!tenderId) {
  173. throw '当前未打开标段';
  174. }
  175. const data = JSON.parse(ctx.request.body.data);
  176. responseData.data = await ctx.service.ledger.updateCalc(tenderId, data);
  177. } catch (err) {
  178. responseData.err = 1;
  179. responseData.msg = err;
  180. }
  181. ctx.body = responseData;
  182. }
  183. /**
  184. * 复制粘贴整块
  185. * @param ctx
  186. * @return {Promise<void>}
  187. */
  188. async pasteBlock(ctx) {
  189. const responseData = {
  190. err: 0,
  191. msg: '',
  192. data: [],
  193. };
  194. try {
  195. const tenderId = ctx.session.sessionUser.tenderId;
  196. if (!tenderId) {
  197. throw '当前未打开标段';
  198. }
  199. const data = JSON.parse(ctx.request.body.data);
  200. if ((isNaN(data.id) || data.id <= 0) || (!data.block || data.block.length <= 0)) {
  201. throw '参数错误';
  202. }
  203. responseData.data = await ctx.service.ledger.pasteBlock(tenderId, data.id, data.block);
  204. } catch (err) {
  205. responseData.err = 1;
  206. responseData.msg = err;
  207. }
  208. ctx.body = responseData;
  209. }
  210. /**
  211. * 台账变更页面
  212. *
  213. * @param {object} ctx - egg全局变量
  214. * @return {void}
  215. */
  216. async change(ctx) {
  217. const renderData = {};
  218. await this.layout('ledger/change.ejs', renderData);
  219. }
  220. /**
  221. * 计量台账页面
  222. *
  223. * @param {object} ctx - egg全局变量
  224. * @return {void}
  225. */
  226. async index(ctx) {
  227. const renderData = {};
  228. await this.layout('ledger/index.ejs', renderData);
  229. }
  230. }
  231. return LedgerController;
  232. };