project_screen_controller.js 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. 'use strict';
  2. const projectScreenConst = require('../const/project_screen');
  3. module.exports = app => {
  4. class ProjectScreenController extends app.BaseController {
  5. constructor(ctx) {
  6. super(ctx);
  7. ctx.showProject = true;
  8. ctx.showTitle = true;
  9. }
  10. async index(ctx) {
  11. try {
  12. if (!ctx.showProjectScreen) throw '项目大屏未开启或没有访问权限';
  13. const pid = ctx.session.sessionProject.id;
  14. const screens = await ctx.service.projectScreen.getList(pid);
  15. const screen = await ctx.service.projectScreen.getViewScreen(pid, ctx.params.sid || '');
  16. if (!screen) throw '项目尚未添加大屏';
  17. const template = projectScreenConst.getTemplate(screen.template_code);
  18. if (!template) throw '大屏模板不存在';
  19. const screenList = screens.map(item => {
  20. return Object.assign(item, {
  21. template: projectScreenConst.getTemplate(item.template_code),
  22. });
  23. });
  24. const summaries = template.code === 'guangyuan' ? await ctx.service.projectScreen.getStatusProjects(null, { summary: true }) : [];
  25. const finishedProjects = summaries.filter(project => project.status === '已建');
  26. const plannedProjects = summaries.filter(project => project.status === '拟建');
  27. const buildingProjects = summaries.filter(project => project.status === '在建');
  28. const listOnly = projects => projects.map(project => ({ id: project.id, name: project.name, group: project.group }));
  29. const renderData = {
  30. screens: screenList,
  31. screen,
  32. template,
  33. };
  34. renderData.finishedProjects = listOnly(finishedProjects);
  35. renderData.plannedProjects = listOnly(plannedProjects);
  36. renderData.buildingProjects = listOnly(buildingProjects);
  37. renderData.overview = template.code === 'guangyuan' ? await ctx.service.projectScreen.getOverview(plannedProjects, buildingProjects, finishedProjects) : null;
  38. await this.layout('project_screen/index.ejs', renderData, template.code === 'guangyuan' ? 'project_screen/guangyuan_modal.ejs' : '');
  39. } catch (error) {
  40. this.log(error);
  41. ctx.session.postError = error.toString();
  42. ctx.redirect('/dashboard');
  43. }
  44. }
  45. async detail(ctx) {
  46. try {
  47. if (!ctx.showProjectScreen) throw '项目大屏未开启或没有访问权限';
  48. const screens = await ctx.service.projectScreen.getList(ctx.session.sessionProject.id);
  49. if (!screens.some(screen => screen.template_code === 'guangyuan')) throw '项目尚未添加广元大屏';
  50. const data = JSON.parse(ctx.request.body.data);
  51. const status = { planned: '拟建', building: '在建', finished: '已建' }[data.module];
  52. if (!status || typeof data.id !== 'string' || !data.id) throw '项目参数错误';
  53. const projects = await ctx.service.projectScreen.getStatusProjects(status, { id: data.id });
  54. if (!projects.length) throw '项目不存在或没有访问权限';
  55. ctx.body = { err: 0, msg: '', data: projects[0] };
  56. } catch (error) {
  57. this.log(error);
  58. ctx.body = { err: 1, msg: error.toString(), data: null };
  59. }
  60. }
  61. }
  62. return ProjectScreenController;
  63. };