template_controller.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. 'use strict';
  2. /**
  3. * 指标模板控制器
  4. *
  5. * @author Mai
  6. * @data 2018/4/19
  7. * @version
  8. */
  9. // excel解析
  10. const excel = require('node-xlsx');
  11. const sendToWormhole = require('stream-wormhole');
  12. module.exports = app => {
  13. class TemplateController extends app.BaseController {
  14. /**
  15. * 指标模板页面
  16. *
  17. * @param {object} ctx - egg全局context
  18. * @return {void}
  19. */
  20. async index (ctx) {
  21. const id = ctx.queries.id ? ctx.queries.id[0] : 1;
  22. const node = await ctx.service.templateNode.getAllDataByCondition({template_id: 1});
  23. for (const n of node) {
  24. n.url = '/template?id=' + n.node_id;
  25. n.target = '_self';
  26. }
  27. const treeNode = ctx.helper.convertData(node, true, 'node_id', 'node_pid');
  28. const condition = {template_id: 1, node_id: id};
  29. const selectNode = await ctx.service.templateNode.getDataByCondition(condition);
  30. const selectIndex = await ctx.service.templateIndex.getAllDataByCondition({ where: condition });
  31. const globalParams = await ctx.service.templateParam.getAllDataByCondition({ where: {template_id: 1, node_id: 0}});
  32. const nodeParams = await ctx.service.templateParam.getAllDataByCondition({ where: condition});
  33. const renderData = {
  34. nodes: JSON.stringify(treeNode),
  35. selectNode: selectNode,
  36. selectIndex: selectIndex,
  37. globalParams: globalParams,
  38. nodeParams: nodeParams,
  39. }
  40. await this.layout('template/index.ejs', renderData, 'template/modal.ejs');
  41. }
  42. async uploadExcel(ctx) {
  43. let stream;
  44. try {
  45. stream = await ctx.getFileStream();
  46. const fileName = this.app.baseDir + '/app/public/template/uploads/' + stream.filename;
  47. // 保存文件
  48. await ctx.helper.saveStreamFile(stream, fileName);
  49. // 读取文件
  50. const sheet = excel.parse(fileName);
  51. if (!sheet || sheet.length === 0 || sheet[0] === undefined || sheet[0].data === undefined) {
  52. throw 'excel没有对应数据';
  53. }
  54. const result = await ctx.service.templateNode.importData(sheet);
  55. if (!result) {
  56. throw '导入数据失败';
  57. }
  58. ctx.redirect('/template');
  59. } catch (err) {
  60. console.log(err);
  61. // 失败需要消耗掉stream 以防卡死
  62. if (stream) {
  63. await sendToWormhole(stream);
  64. }
  65. //this.setMessage(err.toString(), this.messageType.ERROR);
  66. ctx.redirect('/template');
  67. }
  68. }
  69. async setIndexRule(ctx) {
  70. const result = await ctx.service.templateIndex.setRule(JSON.parse(ctx.request.body.data));
  71. const responseData = result ? { err: 0, msg: '', data: [], } : { err: 1, msg: '提交数据失败', data: [], };
  72. ctx.body = responseData;
  73. }
  74. }
  75. return TemplateController;
  76. }