'use strict'; const projectScreenConst = require('../const/project_screen'); module.exports = app => { class ProjectScreenController extends app.BaseController { constructor(ctx) { super(ctx); ctx.showProject = true; ctx.showTitle = true; } async index(ctx) { try { if (!ctx.showProjectScreen) throw '项目大屏未开启或没有访问权限'; const pid = ctx.session.sessionProject.id; const screens = await ctx.service.projectScreen.getList(pid); const screen = await ctx.service.projectScreen.getViewScreen(pid, ctx.params.sid || ''); if (!screen) throw '项目尚未添加大屏'; const template = projectScreenConst.getTemplate(screen.template_code); if (!template) throw '大屏模板不存在'; const screenList = screens.map(item => { return Object.assign(item, { template: projectScreenConst.getTemplate(item.template_code), }); }); const summaries = template.code === 'guangyuan' ? await ctx.service.projectScreen.getStatusProjects(null, { summary: true }) : []; const finishedProjects = summaries.filter(project => project.status === '已建'); const plannedProjects = summaries.filter(project => project.status === '拟建'); const buildingProjects = summaries.filter(project => project.status === '在建'); const listOnly = projects => projects.map(project => ({ id: project.id, name: project.name, group: project.group })); const renderData = { screens: screenList, screen, template, }; renderData.finishedProjects = listOnly(finishedProjects); renderData.plannedProjects = listOnly(plannedProjects); renderData.buildingProjects = listOnly(buildingProjects); renderData.overview = template.code === 'guangyuan' ? await ctx.service.projectScreen.getOverview(plannedProjects, buildingProjects, finishedProjects) : null; await this.layout('project_screen/index.ejs', renderData, template.code === 'guangyuan' ? 'project_screen/guangyuan_modal.ejs' : ''); } catch (error) { this.log(error); ctx.session.postError = error.toString(); ctx.redirect('/dashboard'); } } async detail(ctx) { try { if (!ctx.showProjectScreen) throw '项目大屏未开启或没有访问权限'; const screens = await ctx.service.projectScreen.getList(ctx.session.sessionProject.id); if (!screens.some(screen => screen.template_code === 'guangyuan')) throw '项目尚未添加广元大屏'; const data = JSON.parse(ctx.request.body.data); const status = { planned: '拟建', building: '在建', finished: '已建' }[data.module]; if (!status || typeof data.id !== 'string' || !data.id) throw '项目参数错误'; const projects = await ctx.service.projectScreen.getStatusProjects(status, { id: data.id }); if (!projects.length) throw '项目不存在或没有访问权限'; ctx.body = { err: 0, msg: '', data: projects[0] }; } catch (error) { this.log(error); ctx.body = { err: 1, msg: error.toString(), data: null }; } } } return ProjectScreenController; };