import puppeteer from "puppeteer";
import fs from "fs-extra";
import path from "path";
import FormData from "form-data";
import { colorSchemes } from "../colors.js";
import axios from "axios";
// 获取 plotly.js 的绝对路径
const plotlyPath = path.join(
process.cwd(),
"src",
"public",
"js",
"echarts.min.js"
);
const plotlyContent = await fs.readFile(plotlyPath, "utf-8");
// HTML 模板
const getHtmlContent = () => `
Radar Chart
`;
export const getRadarCharts = async (
chartData,
itemCsvData,
bucketName,
objectName
) => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// 创建临时目录
const tempDir = path.join(process.cwd(), "images");
await fs.ensureDir(tempDir);
const tempFilePath = path.join(
tempDir,
`temp_scatter_chart_${Date.now()}.png`
);
await page.setContent(getHtmlContent(), { waitUntil: "load" });
// 等待 renderChart 被定义
await page.waitForFunction(() => typeof window.renderChart === "function");
// 调用渲染函数
await page.evaluate(
(chartData, itemCsvData) => {
window.renderChart(chartData, itemCsvData);
},
chartData,
itemCsvData
);
// 再等待图表渲染完成(给 ECharts 时间)
(await page.waitForTimeout)
? page.waitForTimeout(1000)
: new Promise((res) => setTimeout(res, 1000));
// 上传逻辑
// 截图并保存到临时文件
const chartElement = await page.$("#chart");
await chartElement.screenshot({
path: tempFilePath,
type: "png",
});
try {
const newUrl = objectName.substring(0, objectName.lastIndexOf("/"));
// 上传图片到服务器
const formData = new FormData();
formData.append("file", fs.createReadStream(tempFilePath));
// 发送上传请求
const response = await axios.post(
`${process.env.API_BASE_URL}/examples/upload`,
{
filePath: tempFilePath,
bucketName,
objectName: newUrl + "/" + chartData.wind_turbine_name + ".jpg",
}
);
return response?.data?.url;
} catch (error) {
console.error("❌ 上传失败:", error.message);
}
};