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