|
@@ -26,7 +26,6 @@
|
|
|
|
|
|
<script>
|
|
|
import luckysheet from "luckysheet";
|
|
|
-// import LuckyExcel from "luckyexcel";
|
|
|
import {
|
|
|
getDataFromIndexedDB,
|
|
|
storeSetData,
|
|
@@ -47,26 +46,26 @@ export default {
|
|
|
methods: {
|
|
|
async initSheetData() {
|
|
|
const jsonData = await getDataFromIndexedDB();
|
|
|
- console.log(
|
|
|
- [...jsonData].filter((item) => item.fileId == this.$route.query.id)[0],
|
|
|
- "this.$route.query.id"
|
|
|
- );
|
|
|
- this.sheetName = [...jsonData].filter(
|
|
|
- (item) => item.fileId == this.$route.query.id
|
|
|
- )[0].fileOldName;
|
|
|
- // 1. 动态提取表头
|
|
|
- const headers = Object.keys(
|
|
|
- [...jsonData].filter((item) => item.fileId == this.$route.query.id)[0]
|
|
|
- .fileData[0]
|
|
|
- );
|
|
|
- // 2. 将 JSON 数据转换为二维数组格式
|
|
|
- const formattedData = [...jsonData]
|
|
|
- .filter((item) => item.fileId == this.$route.query.id)[0]
|
|
|
- .fileData.map((item) => headers.map((header) => item[header]));
|
|
|
- // 3. 将表头插入到数据的第一行
|
|
|
- formattedData.unshift(headers);
|
|
|
- //4. 将 JSON 数据转换为 Luckysheet 格式
|
|
|
- this.initLuckySheet(formattedData);
|
|
|
+ console.log(jsonData, "jsonData");
|
|
|
+ if (jsonData && jsonData.length > 0) {
|
|
|
+ this.sheetName = [...jsonData].filter(
|
|
|
+ (item) => item.fileId == this.$route.query.id
|
|
|
+ )[0]?.fileOldName;
|
|
|
+
|
|
|
+ // 1. 动态提取表头
|
|
|
+ const headers = Object.keys(
|
|
|
+ [...jsonData].filter((item) => item.fileId == this.$route.query.id)[0]
|
|
|
+ .fileData[0]
|
|
|
+ );
|
|
|
+ // 2. 将 JSON 数据转换为二维数组格式
|
|
|
+ const formattedData = [...jsonData]
|
|
|
+ .filter((item) => item.fileId == this.$route.query.id)[0]
|
|
|
+ .fileData.map((item) => headers.map((header) => item[header]));
|
|
|
+ // 3. 将表头插入到数据的第一行
|
|
|
+ formattedData.unshift(headers);
|
|
|
+ //4. 将 JSON 数据转换为 Luckysheet 格式
|
|
|
+ this.initLuckySheet(formattedData);
|
|
|
+ }
|
|
|
},
|
|
|
initLuckySheet(formattedData) {
|
|
|
const options = {
|
|
@@ -141,40 +140,93 @@ export default {
|
|
|
};
|
|
|
luckysheet.create(options);
|
|
|
},
|
|
|
+ // async saveData() {
|
|
|
+ // // 获取当前表格的数据
|
|
|
+ // const data = luckysheet.getAllSheets()[0].data; // 目前只需处理第一个工作表的数据
|
|
|
+ // const formattedData = [];
|
|
|
+ // // 获取表头 (假设表头在第一行,行索引为0)
|
|
|
+ // const headers = data[0].map((cell) => (cell && cell.v ? cell.v : "")); // 提取表头内容
|
|
|
+ // // 遍历数据行,从第二行开始 (行索引为1)
|
|
|
+ // for (let i = 1; i < data.length; i++) {
|
|
|
+ // const row = data[i];
|
|
|
+ // const rowData = {};
|
|
|
+ // // 遍历每一列,并根据表头动态生成键值对
|
|
|
+ // for (let j = 0; j < headers.length; j++) {
|
|
|
+ // if (row[j] && (row[j].v || row[j].v == 0)) {
|
|
|
+ // rowData[headers[j]] = row[j].v || 0;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // // 如果行数据不为空,加入到结果数组中
|
|
|
+ // if (Object.keys(rowData).length) {
|
|
|
+ // formattedData.push(rowData);
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+
|
|
|
+ // this.sheetData = JSON.stringify(formattedData, null, 2);
|
|
|
+ // await initDatabase()
|
|
|
+ // .then((database) => {
|
|
|
+ // // 调用 storeSetData 方法
|
|
|
+ // let fileData = {
|
|
|
+ // filename: format(new Date(), "yyyyMMdd-HH:mm:ss") + this.sheetName,
|
|
|
+ // fileData: JSON.parse(this.sheetData),
|
|
|
+ // fileOldName: this.sheetName,
|
|
|
+ // fileId: new Date().getTime(),
|
|
|
+ // };
|
|
|
+ // storeSetData(database, "files", "fileDataArray", fileData, () => {
|
|
|
+ // this.$router.push("/home/performance/customAnalysis");
|
|
|
+ // });
|
|
|
+ // })
|
|
|
+ // .catch((error) => {
|
|
|
+ // console.error("数据库初始化失败,无法继续存储数据。", error);
|
|
|
+ // });
|
|
|
+ // },
|
|
|
async saveData() {
|
|
|
- // 获取当前表格的数据
|
|
|
- const data = luckysheet.getAllSheets()[0].data; // 目前只需处理第一个工作表的数据
|
|
|
- const formattedData = [];
|
|
|
- // 获取表头 (假设表头在第一行,行索引为0)
|
|
|
- const headers = data[0].map((cell) => (cell && cell.v ? cell.v : "")); // 提取表头内容
|
|
|
- // 遍历数据行,从第二行开始 (行索引为1)
|
|
|
- for (let i = 1; i < data.length; i++) {
|
|
|
- const row = data[i];
|
|
|
- const rowData = {};
|
|
|
- // 遍历每一列,并根据表头动态生成键值对
|
|
|
- for (let j = 0; j < headers.length; j++) {
|
|
|
- if (row[j] && (row[j].v || row[j].v == 0)) {
|
|
|
- rowData[headers[j]] = row[j].v || 0;
|
|
|
+ // 获取所有工作表
|
|
|
+ const sheets = luckysheet.getAllSheets();
|
|
|
+ const allFileData = [];
|
|
|
+ sheets.forEach((sheet, ind) => {
|
|
|
+ const data = sheet.data; // 获取当前工作表的数据
|
|
|
+ const formattedData = [];
|
|
|
+ const headers = data[0].map((cell) => (cell && cell.v ? cell.v : "")); // 表头内容
|
|
|
+
|
|
|
+ // 遍历数据行,从第二行开始
|
|
|
+ for (let i = 1; i < data.length; i++) {
|
|
|
+ const row = data[i];
|
|
|
+ const rowData = {};
|
|
|
+ // 遍历每一列,并根据表头动态生成键值对
|
|
|
+ for (let j = 0; j < headers.length; j++) {
|
|
|
+ if (row[j] && (row[j].v || row[j].v === 0)) {
|
|
|
+ rowData[headers[j]] = row[j].v || 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 如果行数据不为空,加入到结果数组中
|
|
|
+ if (Object.keys(rowData).length) {
|
|
|
+ formattedData.push(rowData);
|
|
|
}
|
|
|
}
|
|
|
- // 如果行数据不为空,加入到结果数组中
|
|
|
- if (Object.keys(rowData).length) {
|
|
|
- formattedData.push(rowData);
|
|
|
- }
|
|
|
- }
|
|
|
- this.sheetData = JSON.stringify(formattedData, null, 2);
|
|
|
+
|
|
|
+ // 生成唯一的 fileData
|
|
|
+ const fileData = {
|
|
|
+ filename:
|
|
|
+ format(new Date(), "yyyyMMdd-HH:mm:ss") + "_" + ind + sheet.name,
|
|
|
+ fileData: formattedData,
|
|
|
+ fileOldName: sheet.name + "_" + ind,
|
|
|
+ fileId: new Date().getTime() + "_" + ind,
|
|
|
+ };
|
|
|
+
|
|
|
+ allFileData.push(fileData); // 将当前工作表的文件数据加入到数组中
|
|
|
+ });
|
|
|
+
|
|
|
+ // 批量存储到数据库
|
|
|
await initDatabase()
|
|
|
.then((database) => {
|
|
|
- // 调用 storeSetData 方法
|
|
|
- let fileData = {
|
|
|
- filename: format(new Date(), "yyyyMMdd-HH:mm:ss") + this.sheetName,
|
|
|
- fileData: JSON.parse(this.sheetData),
|
|
|
- fileOldName: this.sheetName,
|
|
|
- fileId: new Date().getTime(),
|
|
|
- };
|
|
|
- storeSetData(database, "files", "fileDataArray", fileData, () => {
|
|
|
- this.$router.push("/home/performance/customAnalysis");
|
|
|
+ allFileData.forEach((fileData) => {
|
|
|
+ storeSetData(database, "files", "fileDataArray", fileData, () => {
|
|
|
+ console.log("数据存储成功:", fileData.filename);
|
|
|
+ });
|
|
|
});
|
|
|
+ // 跳转到分析页面
|
|
|
+ this.$router.push("/home/performance/customAnalysis");
|
|
|
})
|
|
|
.catch((error) => {
|
|
|
console.error("数据库初始化失败,无法继续存储数据。", error);
|