/*
* 发电机温度图(终极稳定版)
*/
import { renderChart } from "../chartService/index.js";
export const generateGeneratorTemperature = async (
data,
bucketName,
objectName,
) => {
if (!data || !Array.isArray(data.data)) {
throw new Error("generator temperature data invalid");
}
const typeLine = ["solid", "solid", "dot", "dot", "dash", "solid"];
const colorDefault = [
"#0000F5",
"#377E21",
"#0000F5",
"#377E21",
"#000000",
"#F2A93B",
];
const chartDataset = data.data;
// ✅ traces 构建
const traces = chartDataset.map((turbine, index) => {
const color =
data.color1 && data.color1.length > 0
? data.color1[index % data.color1.length]
: colorDefault[index % colorDefault.length];
const base = {
x: turbine.xData || [],
y: turbine.yData || [],
name: turbine.Name || `series-${index}`,
hovertemplate: `${data.xaixs || "X"}: %{x}
${
data.yaixs || "Y"
}: %{y}
`,
marker: { color },
};
if (data.chartType === "bar") {
return {
...base,
type: "bar",
};
}
// 默认 line
return {
...base,
type: "scatter",
mode: "lines",
line: {
dash: typeLine[index % typeLine.length],
color,
},
};
});
// ✅ layout
const layout = {
title: {
text: `发电机-轴承温度偏差: ${data.turbineName || ""}`,
font: { size: 16 },
},
xaxis: {
title: data.xaixs || "X轴",
gridcolor: "rgb(255,255,255)",
tickcolor: "rgb(255,255,255)",
backgroundcolor: "#e5ecf6",
showbackground: true,
showline: true, // ✅ 显示 X 轴轴线
linecolor: "#ffffff", // ✅ X 轴轴线颜色设为白色
zeroline: false,
},
yaxis: {
title: data.yaixs || "Y轴",
gridcolor: "rgb(255,255,255)",
tickcolor: "rgb(255,255,255)",
backgroundcolor: "#e5ecf6",
showbackground: true,
showline: true, // ✅ 显示 X 轴轴线
linecolor: "#ffffff", // ✅ X 轴轴线颜色设为白色
zeroline: false,
},
plot_bgcolor: "#e5ecf6",
paper_bgcolor: "#e5ecf6",
margin: {
l: 50,
r: 50,
t: 60,
b: 50,
},
barmode: data.chartType === "bar" ? "stack" : "group",
// ✅ 阈值线(核心保留)
shapes: [
createThresholdLine(15, "red"),
createThresholdLine(-15, "red"),
createThresholdLine(5, "#F9DD70"),
createThresholdLine(-5, "#F9DD70"),
createThresholdLine(0, "#fff"),
],
};
// ✅ 统一出口
return await renderChart({
traces,
layout,
bucketName,
objectName,
});
};
// ✅ 抽离:阈值线生成器(非常推荐)
function createThresholdLine(y, color) {
return {
type: "line",
xref: "paper",
x0: 0,
x1: 1,
yref: "y",
y0: y,
y1: y,
line: {
color,
width: 2,
dash: y === 0 ? "solid" : "dash",
},
};
}