新增功能
This commit is contained in:
@@ -4,6 +4,10 @@ const sha256 = require("crypto-js/sha256");
|
||||
|
||||
const CryptoJS = require("crypto-js");
|
||||
|
||||
const XLSX = require('xlsx');
|
||||
|
||||
const fs = require('fs');
|
||||
|
||||
const KEY = CryptoJS.enc.Utf8.parse('BDQH');
|
||||
|
||||
class BaseController extends Controller {
|
||||
@@ -128,6 +132,42 @@ class BaseController extends Controller {
|
||||
}
|
||||
ctx.body = modelType[model];
|
||||
}
|
||||
|
||||
downloadData = (form, data, dataHeaders) => {
|
||||
let extensionName = ['.xlsx', '.xls', '.csv'], buf;
|
||||
const { sheetName, fileName, extensionType } = form;
|
||||
if (extensionName[extensionType] == '.xlsx' || extensionName[extensionType] == '.xls') {
|
||||
// 使用xlsx库将数据转换为工作表和工作簿
|
||||
const ws = XLSX.utils.json_to_sheet(data);
|
||||
// 动态设置表头
|
||||
dataHeaders.forEach((header, index) => {
|
||||
const cellRef = XLSX.utils.encode_cell({ r: 0, c: index }); // 生成单元格引用,如A1, B1等
|
||||
ws[cellRef] = { v: header, t: "s" }; // 设置单元格的值和类型
|
||||
});
|
||||
// 创建一个新的工作簿并添加工作表
|
||||
const wb = XLSX.utils.book_new();
|
||||
// 将工作表添加到工作簿中,并指定其名称
|
||||
XLSX.utils.book_append_sheet(wb, ws, sheetName);
|
||||
if (extensionName[extensionType] == '.xlsx') {
|
||||
// 将工作簿写入字符串(二进制)
|
||||
buf = XLSX.write(wb, { bookType: 'xlsx', type: 'array' });
|
||||
} else if (extensionName[extensionType] == '.xls') {
|
||||
// 将工作簿写入字符串(二进制)
|
||||
buf = XLSX.write(wb, { bookType: 'xls', type: 'array' });
|
||||
}
|
||||
} else if (extensionName[extensionType] == '.csv') {
|
||||
// 将数据转换为CSV格式的字符串
|
||||
buf = data.map(row => row.join(',')).join('\n') + '\n';
|
||||
}
|
||||
// 将文件的内容返回给控制器作为响应体发送给客户端
|
||||
if (buf) {
|
||||
const completeName = fileName + extensionName[extensionType];
|
||||
const filePath = 'app/public/' + completeName;
|
||||
// const filePath = '/disk/a/Download/' + completeName;
|
||||
return { filePath, completeName, buf };
|
||||
};
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = BaseController;
|
||||
Reference in New Issue
Block a user