123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- /**标准清单操作相关
- * Created by Zhong on 2017/8/2.
- */
- let billsController = require("./bills_lib_controllers");
- let billsLibDao = require("./../models/bills_lib_interfaces");
- import baseController from "../../common/base/base_controller";
- import fs from 'fs';
- import path from 'path';
- import multiparty from 'multiparty';
- const excel = require("node-xlsx");
- const uuidV1 = require('uuid/v1');
- const shareDir = 'public/share/images';
- const imgTriggers = ['billsRecharge', 'rationExplanation', 'rationRuleText', 'erratumRecord'];
- class billsPermContr extends baseController {
- getCurrentUniqId(req, res) {
- billsController.getCurrentUniqId(req, res);
- }
- getBills(req, res) {
- billsController.getBills(req, res);
- }
- createBills(req, res) {
- billsController.createBills(req, res);
- }
- updatePNId(req, res) {
- billsController.updatePNId(req, res);
- }
- upMove(req, res) {
- billsController.upMove(req, res);
- }
- downMove(req, res) {
- billsController.downMove(req, res);
- }
- upLevel(req, res) {
- billsController.upLevel(req, res);
- }
- downLevel(req, res) {
- billsController.downLevel(req, res);
- }
- updateBills(req, res) {
- billsController.updateBills(req, res);
- }
- updateSectionInfo(req, res) {
- billsController.updateSectionInfo(req, res);
- }
- updateBillsArr(req, res) {
- billsController.updateBillsArr(req, res);
- }
- removeTotal(req, res) {
- billsController.removeTotal(req, res);
- }
- updateSerialNo(req, res) {
- billsController.updateSerialNo(req, res);
- }
- pasteBills(req, res) {
- billsController.pasteBills(req, res);
- }
- updateRecharge(req, res) {
- billsController.updateRecharge(req, res);
- }
- pasteRel(req, res) {
- billsController.pasteRel(req, res);
- }
- deleteBills(req, res) {
- billsController.deleteBills(req, res);
- }
- isUsed(req, res) {
- billsController.isUsed(req, res);
- }
- transferRecharge(req, res) {
- billsController.transferRecharge(req, res);
- }
- /*
- * 导入标准清单(确定节点结构:深度数组)
- * */
- importBills(req, res) {
- let form = new multiparty.Form({ uploadDir: './public' });
- const allowHeader = ['application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
- let uploadFullName;
- form.parse(req, async function (err, fields, files) {
- try {
- const file = typeof files.file !== 'undefined' ? files.file[0] : null;
- if (err || !file) {
- throw '上传失败。';
- }
- if (file.headers['content-type'] === undefined || allowHeader.indexOf(file.headers['content-type']) < 0) {
- throw '不支持该类型';
- }
- const billsLibId = typeof fields.billsLibId !== 'undefined' && fields.billsLibId.length > 0 ? fields.billsLibId[0] : null;
- if (!billsLibId) {
- throw '请选择一个清单库。';
- }
- let hasData = await billsLibDao.hasData(billsLibId);
- if (hasData) {
- throw '请新建一个新的清单库,或删除库中的清单后再导入。';
- }
- // 重命名文件名
- uploadFullName = './public/' + file.originalFilename;
- fs.renameSync(file.path, uploadFullName);
- const sheet = excel.parse(uploadFullName);
- if (sheet[0] === undefined || sheet[0].data === undefined || sheet[0].data.length <= 0) {
- throw 'excel没有对应数据';
- }
- //插入清单
- await billsLibDao.importBills(billsLibId, sheet[0].data);
- // 删除文件
- if (uploadFullName && fs.existsSync(uploadFullName)) {
- fs.unlinkSync(uploadFullName);
- }
- res.json({ error: 0, data: null, msg: '' });
- } catch (err) {
- console.log(err);
- // 删除文件
- if (uploadFullName && fs.existsSync(uploadFullName)) {
- fs.unlinkSync(uploadFullName);
- }
- res.json({ error: 1, data: null, msg: err });
- }
- });
- }
- /*
- *上传图片
- * */
- uploadImg(req, res) {
- let uploadDir = path.join(req.app.locals.rootDir, shareDir);
- let form = new multiparty.Form({ uploadDir: uploadDir });
- form.parse(req, async function (err, fields, files) {
- try {
- const file = typeof files.file !== 'undefined' ? files.file[0] : null;
- if (err || !file) {
- throw '上传失败';
- }
- //触发上传图片的地方
- const trigger = typeof fields.trigger !== 'undefined' && fields.trigger.length > 0 ? fields.trigger[0] : null;
- if (!trigger || !imgTriggers.includes(trigger)) {
- throw '该操作没有上传权限'
- }
- if (!fs.existsSync(uploadDir)) {
- fs.mkdirSync(uploadDir);
- }
- //根据触发源放置文件到相关文件夹
- let triggerPath = path.join(uploadDir, trigger);
- if (!fs.existsSync(triggerPath)) {
- fs.mkdirSync(triggerPath);
- }
- //文件后缀
- let px = file.originalFilename.split('.').pop();
- //时间戳重命名图片并移动文件
- let newFileName = Date.now() + '.' + px;
- if (fs.existsSync(newPath)) {
- newFileName += uuidV1();
- }
- let newPath = path.join(triggerPath, newFileName);
- fs.renameSync(file.path, newPath);
- //返回图片域名后的url
- res.json({ error: 0, data: `${shareDir}/${trigger}/${newFileName}`, message: 'success' });
- } catch (err) {
- console.log(err);
- res.json({ error: 1, data: null, message: err });
- }
- });
- }
- /*
- * 删除图片
- * */
- delImg(req, res) {
- try {
- let data = JSON.parse(req.body.data),
- trigger = data.trigger,
- url = data.url;
- if (!imgTriggers.includes(trigger)) {
- throw '该操作没有权限';
- }
- //拼接完整的删除路径
- let delUrl = path.join(req.app.locals.rootDir, url);
- fs.unlinkSync(delUrl);
- res.json({ error: 0, data: null, message: 'success' });
- } catch (err) {
- res.json({ error: 1, data: null, message: err });
- }
- }
- /*
- * 根据页码加载图片
- * 返回总页码和当前页码的图片信息
- * */
- loadImgs(req, res) {
- try {
- let data = JSON.parse(req.body.data),
- trigger = data.trigger,
- page = data.page;
- if (!imgTriggers.includes(trigger)) {
- throw '该操作没有权限';
- }
- //每页显示的图片数
- const perImgs = 3;
- //总的图片信息
- let triggerPath = path.join(req.app.locals.rootDir, shareDir, trigger);
- if (!fs.existsSync(triggerPath)) {
- fs.mkdirSync(triggerPath);
- }
- let allImgs = fs.readdirSync(triggerPath);
- //将图片按照时间排序,降序
- allImgs.sort(function (a, b) {
- let aV = a.split('.')[0],
- bV = b.split('.')[0];
- if (aV > bV) {
- return -1;
- } else if (aV < bV) {
- return 1;
- }
- return 0;
- });
- let pageCount = Math.ceil(allImgs.length / perImgs) || 1;
- //当前页图片信息
- let startIdx = (page - 1) * perImgs,
- endIdx = startIdx + 3,
- currentPageArr = allImgs.slice(startIdx, endIdx),
- currentImgsUrl = [];
- for (let img of currentPageArr) {
- currentImgsUrl.push(`${shareDir}/${trigger}/${img}`);
- }
- res.json({ error: 0, data: { pageCount: pageCount, currentImgsUrl: currentImgsUrl }, message: 'success' });
- } catch (err) {
- console.log(err);
- res.json({ error: 1, data: { pageCount: 1, currentImgsUrl: [] }, message: err });
- }
- }
- }
- export default billsPermContr;
|