'use strict'; /** * 指标库控制器 * * @author Mai * @data 2018/4/19 * @version */ const fs = require('fs'); const path = require('path'); const awaitWriteStream = require('await-stream-ready').write; const sendToWormhole = require('stream-wormhole'); const libConst = require('../const/lib'); module.exports = app => { class LibController extends app.BaseController { /** * 指标库页面 * * @param {object} ctx - egg全局context * @return {void} */ async index (ctx) { let status = ctx.query.status; const libList = await ctx.service.quotaLib.getList(status); //获取指标源状态数量 const libStatus = await ctx.service.quotaLib.getStatusNum(); const renderData = { status, libList, libConst, libStatus }; await this.layout('lib/index.ejs', renderData, 'lib/modal.ejs'); } /** * 上传指标源 * * @param {object} ctx - egg全局context * @return {void} */ async upload(ctx) { const parts = ctx.multipart({ autoFields: true }); let addData = {}; let stream; while ((stream = await parts()) != null) { const filename = stream.filename.toLowerCase(); if(filename === ''){ throw '请上传文件'; ctx.redirect('/lib'); } const fileInfo = path.parse(filename); let create_time = Date.parse( new Date())/1000; let filepath = libConst.quotaLibDir + create_time + fileInfo.ext; addData = { name: fileInfo.name, path: filepath, create_time: create_time }; const target = path.join(filepath); const writeStream = fs.createWriteStream(target); try { await awaitWriteStream(stream.pipe(writeStream)); } catch (err) { await sendToWormhole(stream); throw err; } } if(addData !== {}){ try { //插入数据到数据库 const result = await ctx.service.quotaLib.add(addData); if (!result) { throw '新增指标源数据失败'; } ctx.redirect('/lib'); } catch (err) { throw err; } }else{ throw '请上传文件'; } } /** * 指标源详细页面 * * @param {object} ctx - egg全局context * @return {void} */ async detail (ctx) { let lid = ctx.params.id; lid = parseInt(lid); try{ if(isNaN(lid) || lid < 0){ throw '参数有误'; } //获取指标源数据 const libInfo = await ctx.service.quotaLib.getLibDataById(lid); // if(libInfo.status === libConst.status.enter){ // throw '指标源已入库'; // } const renderData = { libInfo, libConst }; await this.layout('lib/detail.ejs', renderData, 'lib/detail-modal.ejs'); } catch (error) { console.log(error); ctx.redirect('/lib'); } } /** * 删除指标源 * * @param {Object} ctx -egg全局变量 * @return {void} */ async delete(ctx) { let id = ctx.request.body.del_lib_id; let text = ctx.request.body.del_lib_text; id = parseInt(id); try { if (isNaN(id) || id <= 0) { throw '参数错误'; } if(text === undefined || text !== '确认删除'){ throw '参数错误'; } const result = ctx.service.quotaLib.deleteLibById(id); if (!result) { throw '删除标段失败'; } ctx.redirect('/lib'); } catch (error) { console.log(error); ctx.redirect(ctx.request.headers.referer); } } /** * 指标源入库 * * @param {Object} ctx -egg全局变量 * @return {void} */ async enter(ctx) { let id = ctx.request.body.enter_lib_id; id = parseInt(id); try { if (isNaN(id) || id <= 0) { throw '参数错误'; } const result = ctx.service.quotaLib.enterLibById(id); if (!result) { throw '指标入库失败'; } ctx.redirect('/lib'); } catch (error) { console.log(error); ctx.redirect(ctx.request.headers.referer); } } } return LibController; }