update pay function
This commit is contained in:
@@ -11,24 +11,50 @@ import * as echarts from 'echarts';
|
|||||||
const isValidOption = (option) => {
|
const isValidOption = (option) => {
|
||||||
if (!option || typeof option !== 'object') return false;
|
if (!option || typeof option !== 'object') return false;
|
||||||
|
|
||||||
// 检查 xAxis 配置
|
// 检查 xAxis 配置(柱状图/折线图必须)
|
||||||
if (option.xAxis) {
|
if (option.xAxis !== undefined) {
|
||||||
const xAxis = Array.isArray(option.xAxis) ? option.xAxis[0] : option.xAxis;
|
const xAxis = Array.isArray(option.xAxis) ? option.xAxis[0] : option.xAxis;
|
||||||
if (xAxis && xAxis.type === 'category' && (!xAxis.data || xAxis.data.length === 0)) {
|
// xAxis 必须存在且有效
|
||||||
// category 类型的 xAxis 必须有数据
|
if (!xAxis || typeof xAxis !== 'object') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// category 类型必须有 data
|
||||||
|
if (xAxis.type === 'category' && (!xAxis.data || !Array.isArray(xAxis.data) || xAxis.data.length === 0)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查 series 配置
|
// 检查 yAxis 配置
|
||||||
if (option.series) {
|
if (option.yAxis !== undefined) {
|
||||||
const series = Array.isArray(option.series) ? option.series : [option.series];
|
const yAxis = Array.isArray(option.yAxis) ? option.yAxis[0] : option.yAxis;
|
||||||
const hasValidSeries = series.some(s => s && s.data && s.data.length > 0);
|
if (!yAxis || typeof yAxis !== 'object') {
|
||||||
if (!hasValidSeries) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 检查 series 配置(必须有且有效)
|
||||||
|
if (!option.series) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const series = Array.isArray(option.series) ? option.series : [option.series];
|
||||||
|
if (series.length === 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 至少有一个 series 有有效数据
|
||||||
|
const hasValidSeries = series.some(s => {
|
||||||
|
if (!s || typeof s !== 'object') return false;
|
||||||
|
// 检查 data 是否存在且为数组
|
||||||
|
if (!s.data || !Array.isArray(s.data)) return false;
|
||||||
|
// 检查 data 是否有内容
|
||||||
|
return s.data.length > 0;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!hasValidSeries) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -88,8 +114,16 @@ export const EChartsRenderer = ({ option, height = 400, variant = 'auto' }) => {
|
|||||||
...darkModeTextStyle,
|
...darkModeTextStyle,
|
||||||
};
|
};
|
||||||
|
|
||||||
// 设置图表配置
|
// 设置图表配置(使用 try-catch 防止 ECharts 内部错误)
|
||||||
|
try {
|
||||||
chartInstance.current.setOption(defaultOption, true);
|
chartInstance.current.setOption(defaultOption, true);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('EChartsRenderer: Failed to render chart', error);
|
||||||
|
// 销毁出错的图表实例
|
||||||
|
chartInstance.current?.dispose();
|
||||||
|
chartInstance.current = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 响应式调整大小
|
// 响应式调整大小
|
||||||
const handleResize = () => {
|
const handleResize = () => {
|
||||||
|
|||||||
@@ -216,6 +216,24 @@ export const MarkdownWithCharts = ({ content, variant = 'auto' }) => {
|
|||||||
throw new Error('Invalid chart configuration: not an object');
|
throw new Error('Invalid chart configuration: not an object');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 验证 series 是否存在且有效
|
||||||
|
if (!chartOption.series) {
|
||||||
|
throw new Error('Invalid chart configuration: missing series');
|
||||||
|
}
|
||||||
|
const series = Array.isArray(chartOption.series) ? chartOption.series : [chartOption.series];
|
||||||
|
const hasValidSeries = series.some(s => s && s.data && Array.isArray(s.data) && s.data.length > 0);
|
||||||
|
if (!hasValidSeries) {
|
||||||
|
throw new Error('Invalid chart configuration: series has no valid data');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 验证 xAxis(如果存在)
|
||||||
|
if (chartOption.xAxis) {
|
||||||
|
const xAxis = Array.isArray(chartOption.xAxis) ? chartOption.xAxis[0] : chartOption.xAxis;
|
||||||
|
if (xAxis && xAxis.type === 'category' && (!xAxis.data || !Array.isArray(xAxis.data) || xAxis.data.length === 0)) {
|
||||||
|
throw new Error('Invalid chart configuration: xAxis category type requires data');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box key={index}>
|
<Box key={index}>
|
||||||
<EChartsRenderer option={chartOption} height={350} variant={variant} />
|
<EChartsRenderer option={chartOption} height={350} variant={variant} />
|
||||||
|
|||||||
Reference in New Issue
Block a user