新增功能

This commit is contained in:
2026-06-05 17:38:10 +08:00
parent 51b979c182
commit 2997f49dd7
46 changed files with 4321 additions and 1103 deletions

View File

@@ -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;