feat(markdown-ai): 添加可视化图表生成功能
- 新增 charts 分析类型,支持从文档中提取数据并生成可视化图表 - 集成 visualization_service 服务进行数据分析和图表生成 - 扩展 MarkdownAIService 支持 JSON 解析和图表数据处理 - 添加 _parse_chart_json 方法处理 LLM 返回的 JSON 数据 - 更新 API 接口定义支持 chart_data 返回字段 - 在前端界面添加图表分析选项和对应图标显示 - 修复 ExcelStorageService 中 id 列名为 MySQL 保留字的问题
This commit is contained in:
@@ -182,6 +182,29 @@ export interface AIMarkdownAnalyzeResult {
|
||||
};
|
||||
sections?: MarkdownSection[];
|
||||
analysis?: string;
|
||||
chart_data?: {
|
||||
tables?: Array<{
|
||||
description?: string;
|
||||
columns?: string[];
|
||||
rows?: string[][];
|
||||
visualization?: {
|
||||
statistics?: any;
|
||||
charts?: any;
|
||||
distributions?: any;
|
||||
};
|
||||
}>;
|
||||
key_statistics?: Array<{
|
||||
name?: string;
|
||||
value?: string;
|
||||
trend?: string;
|
||||
description?: string;
|
||||
}>;
|
||||
chart_suggestions?: Array<{
|
||||
chart_type?: string;
|
||||
title?: string;
|
||||
data_source?: string;
|
||||
}>;
|
||||
};
|
||||
error?: string;
|
||||
}
|
||||
|
||||
@@ -201,7 +224,7 @@ export interface MarkdownOutlineResult {
|
||||
error?: string;
|
||||
}
|
||||
|
||||
export type MarkdownAnalysisType = 'summary' | 'outline' | 'key_points' | 'questions' | 'tags' | 'qa' | 'statistics' | 'section';
|
||||
export type MarkdownAnalysisType = 'summary' | 'outline' | 'key_points' | 'questions' | 'tags' | 'qa' | 'statistics' | 'section' | 'charts';
|
||||
|
||||
export interface AIExcelAnalyzeResult {
|
||||
success: boolean;
|
||||
|
||||
@@ -84,7 +84,7 @@ const Documents: React.FC = () => {
|
||||
|
||||
// Markdown AI 分析相关状态
|
||||
const [mdAnalysis, setMdAnalysis] = useState<AIMarkdownAnalyzeResult | null>(null);
|
||||
const [mdAnalysisType, setMdAnalysisType] = useState<'summary' | 'outline' | 'key_points' | 'questions' | 'tags' | 'qa' | 'statistics' | 'section'>('summary');
|
||||
const [mdAnalysisType, setMdAnalysisType] = useState<'summary' | 'outline' | 'key_points' | 'questions' | 'tags' | 'qa' | 'statistics' | 'section' | 'charts'>('summary');
|
||||
const [mdUserPrompt, setMdUserPrompt] = useState('');
|
||||
const [mdSections, setMdSections] = useState<MarkdownSection[]>([]);
|
||||
const [mdSelectedSection, setMdSelectedSection] = useState<string>('');
|
||||
@@ -517,6 +517,7 @@ const Documents: React.FC = () => {
|
||||
case 'questions': return <MessageSquareCode size={20} />;
|
||||
case 'tags': return <Tag size={20} />;
|
||||
case 'qa': return <HelpCircle size={20} />;
|
||||
case 'charts': return <TrendingUp size={20} />;
|
||||
default: return <Sparkles size={20} />;
|
||||
}
|
||||
};
|
||||
@@ -762,7 +763,8 @@ const Documents: React.FC = () => {
|
||||
{ value: 'section', label: '章节分析', desc: '分章节详细分析' },
|
||||
{ value: 'questions', label: '生成问题', desc: '生成理解性问题' },
|
||||
{ value: 'tags', label: '生成标签', desc: '提取主题标签' },
|
||||
{ value: 'qa', label: '问答对', desc: '生成问答内容' }
|
||||
{ value: 'qa', label: '问答对', desc: '生成问答内容' },
|
||||
{ value: 'charts', label: '数据图表', desc: '生成可视化数据' }
|
||||
].map(type => (
|
||||
<SelectItem key={type.value} value={type.value}>
|
||||
<div className="flex items-center gap-2">
|
||||
|
||||
Reference in New Issue
Block a user