'use strict'; /** * 签名相关控制器 * * @author EllisRan * @date 2019/8/14 * @version */ const moment = require('moment'); const path = require('path'); const sendToWormhole = require('stream-wormhole'); const fs = require('fs'); module.exports = app => { class SignController extends app.BaseController { /** * 电子签名页面 * * @param {Object} ctx - egg全局变量 * @return {void} */ async index(ctx) { const renderData = { error: false, }; try { const userinfo = await ctx.service.projectAccount.getDataById(ctx.query.user_id); if (userinfo && userinfo.session_token && userinfo.session_token === ctx.query.app_token) { renderData.id = userinfo.id; renderData.name = userinfo.name; renderData.from = ctx.query.from ? ctx.query.from : ''; // renderData.role = userinfo.role; } else { // throw '参数有误, 无法访问本页'; throw 'token已更新,请重新登录并再次扫码。'; } } catch (error) { console.log(error); renderData.error = true; } await ctx.render('sign/info.ejs', renderData); } /** * 保存签名 * * @param {Object} ctx - egg全局变量 * @return {void} */ async save(ctx) { try { if (ctx.request.body && ctx.request.body.id) { const signData = await ctx.service.netcasign.getDataByCondition({ uid: ctx.request.body.id }); if (!signData) { throw '当前用户不存在绑定证书'; } const result = await ctx.service.netcasign.save({ sign_base64: ctx.request.body.sign_base64 }, signData.id); if (result) { ctx.body = { err: 0, msg: '' }; } else { throw '添加数据库失败'; } } else { const stream = await ctx.getFileStream({ requireFile: false }); const create_time = Date.parse(new Date()) / 1000; const dirName = 'app/public/upload/sign/'; const fileName = moment().format('YYYYMMDD') + '_sign_' + create_time + '.png'; await ctx.helper.saveStreamFile(stream, path.join(this.app.baseDir, dirName, fileName)); await sendToWormhole(stream); const result = await ctx.service.projectAccount.update({ sign_path: fileName }, { id: stream.fields.id }); if (result) { ctx.body = { err: 0, msg: '' }; } else { throw '添加数据库失败'; } } } catch (err) { this.log(err); ctx.body = { err: 1, msg: err.toString() }; } } } return SignController; };