import BaseController from "../../common/base/base_controller"; const facade = require('../facade/index'); const config = require("../../../config/config.js"); const excel = require('node-xlsx'); const fs = require('fs'); const multiparty = require('multiparty'); class PriceInfoClassController extends BaseController { async main(req, res) { const renderData = { title: '材料信息价类别总表', userAccount: req.session.managerData.username, userID: req.session.managerData.userID, LicenseKey: config.getLicenseKey(process.env.NODE_ENV), }; await facade.setIDForData(); res.render("maintain/price_info_class/html/main.html", renderData); } // 获取分页数据 async getPagingData(req, res) { try { const { page, pageSize, searchStr } = JSON.parse(req.body.data); const data = await facade.getPagingData(page, pageSize, searchStr); res.json({ error: 0, message: 'getData success', data }); } catch (err) { console.log(err); } } // 编辑 async editClassData(req, res) { try { const { postData } = JSON.parse(req.body.data); await facade.editClassData(postData); res.json({ error: 0, message: 'editPrice success' }); } catch (err) { console.log(err); res.json({ error: 1, message: err.toString() }); } } async exportClassData(request, response) { try { const excelData = await facade.exportExcelData(); const buffer = excel.build([{ name: "材料信息价类别总表", data: excelData }]); const filePath = './public/exportPriceClass.xlsx'; fs.writeFileSync(filePath, buffer, 'binary'); const stats = fs.statSync(filePath); // 下载相关header response.set({ 'Content-Type': 'application/octet-stream', 'Content-Disposition': 'attachment; filename=infoPriceClass.xlsx', 'Content-Length': stats.size }); fs.createReadStream(filePath).pipe(response); fs.unlink(filePath); } catch (error) { response.end(error); } } async importExcel(req, res) { let responseData = { err: 0, msg: '' }; res.setTimeout(1000 * 60 * 10); const allowHeader = ['application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']; const uploadOption = { uploadDir: './public' }; const form = new multiparty.Form(uploadOption); let uploadFullName; form.parse(req, async function (err, fields, files) { try { const file = files.file !== undefined ? files.file[0] : null; if (err || file === null) { throw '上传失败。'; } // 判断类型 if (file.headers['content-type'] === undefined || allowHeader.indexOf(file.headers['content-type']) < 0) { throw '不支持该类型'; } // 重命名文件名 uploadFullName = uploadOption.uploadDir + '/' + 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没有对应数据。'; } // 提取excel数据并入库 await facade.importExcelData(sheet[0].data); // 删除文件 if (uploadFullName && fs.existsSync(uploadFullName)) { fs.unlink(uploadFullName); } res.json(responseData); } catch (error) { console.log(error); if (uploadFullName && fs.existsSync(uploadFullName)) { fs.unlink(uploadFullName); } responseData.err = 1; responseData.msg = error.toString(); res.json(responseData); } }); } } module.exports = { priceInfoClassController: new PriceInfoClassController() };