Skip to content

Commit 3a77423

Browse files
committed
feat: Enhance CrosstabChat and CrosstabTable components to process AI-generated data formats and improve value dimension handling, including debugging information for better traceability
1 parent 9f44214 commit 3a77423

3 files changed

Lines changed: 85 additions & 9 deletions

File tree

src/renderer/src/components/pages/crosstab/CrosstabChat.tsx

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,49 @@ export default function CrosstabChat({ chatId }: CrosstabChatProps) {
196196
const jsonContent = extractJsonContent(response)
197197
const cellValues = JSON.parse(jsonContent)
198198

199+
// 处理AI生成的数据格式,确保键是实际的值维度ID
200+
const processedCellValues: { [key: string]: string } = {}
201+
202+
// 如果AI生成的数据使用的是通用键(如value1, value2),需要映射到实际的值维度ID
203+
if (chat.crosstabData.metadata.valueDimensions.length > 0) {
204+
const valueDimensions = chat.crosstabData.metadata.valueDimensions
205+
206+
// 检查是否使用了通用键格式
207+
const keys = Object.keys(cellValues)
208+
const hasGenericKeys = keys.some(key => key.match(/^value\d+$/))
209+
210+
if (hasGenericKeys) {
211+
// 映射通用键到实际的值维度ID
212+
valueDimensions.forEach((dimension, index) => {
213+
const genericKey = `value${index + 1}`
214+
if (cellValues[genericKey]) {
215+
processedCellValues[dimension.id] = cellValues[genericKey]
216+
}
217+
})
218+
} else {
219+
// 检查是否直接使用了值维度ID
220+
valueDimensions.forEach(dimension => {
221+
if (cellValues[dimension.id]) {
222+
processedCellValues[dimension.id] = cellValues[dimension.id]
223+
}
224+
})
225+
}
226+
227+
// 如果没有找到匹配的键,尝试使用第一个可用的值作为第一个维度的值
228+
if (Object.keys(processedCellValues).length === 0 && Object.keys(cellValues).length > 0) {
229+
const firstDimension = valueDimensions[0]
230+
const firstValue = Object.values(cellValues)[0]
231+
processedCellValues[firstDimension.id] = firstValue as string
232+
}
233+
}
234+
235+
console.log('Original cell values:', cellValues)
236+
console.log('Processed cell values:', processedCellValues)
237+
console.log('Value dimensions:', chat.crosstabData.metadata.valueDimensions)
238+
199239
// 更新表格数据
200240
const updatedTableData = { ...chat.crosstabData.tableData }
201-
updatedTableData[cellKey] = cellValues
241+
updatedTableData[cellKey] = processedCellValues
202242

203243
dispatch({
204244
type: 'UPDATE_CROSSTAB_DATA',

src/renderer/src/components/pages/crosstab/CrosstabTable.tsx

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,21 @@ export default function CrosstabTable({
5656

5757
// 初始化选中的值维度
5858
useEffect(() => {
59-
if (metadata && metadata.valueDimensions.length > 0 && !selectedValueDimension) {
60-
setSelectedValueDimension(metadata.valueDimensions[0].id)
59+
if (metadata && metadata.valueDimensions.length > 0) {
60+
// 如果没有选中的值维度,或者当前选中的值维度已经不存在,则设置为第一个
61+
if (!selectedValueDimension || !metadata.valueDimensions.find(d => d.id === selectedValueDimension)) {
62+
setSelectedValueDimension(metadata.valueDimensions[0].id)
63+
}
6164
}
6265
}, [metadata, selectedValueDimension])
6366

67+
// 添加调试信息
68+
useEffect(() => {
69+
console.log('Current selectedValueDimension:', selectedValueDimension)
70+
console.log('Available value dimensions:', metadata?.valueDimensions?.map(d => d.id))
71+
console.log('Table data keys:', Object.keys(tableData))
72+
}, [selectedValueDimension, metadata, tableData])
73+
6474
// 生成多维度表格数据
6575
const { dataSource, columns } = useMemo(() => {
6676
if (!metadata || !metadata.horizontalDimensions.length || !metadata.verticalDimensions.length) {
@@ -86,11 +96,32 @@ export default function CrosstabTable({
8696
const cellKey = `${hPath}|${vPath}`
8797
const cellData = tableData[cellKey]
8898

99+
// 添加调试信息
100+
if (cellData) {
101+
console.log(`Cell data for ${cellKey}:`, cellData)
102+
console.log(`Selected value dimension: ${selectedValueDimension}`)
103+
console.log(`Available dimensions in cell:`, Object.keys(cellData))
104+
}
105+
89106
if (cellData && selectedValueDimension) {
90107
row[hPath] = cellData[selectedValueDimension] || ''
91108
} else {
92109
row[hPath] = ''
93110
}
111+
112+
// 如果没有选中的值维度但是有数据,尝试使用第一个可用的值维度
113+
if (cellData && !selectedValueDimension && metadata.valueDimensions.length > 0) {
114+
const firstValueDimension = metadata.valueDimensions[0].id
115+
row[hPath] = cellData[firstValueDimension] || ''
116+
console.log(`Using first value dimension ${firstValueDimension} for cell ${cellKey}`)
117+
}
118+
119+
// 如果仍然没有数据,但是cellData中有任何值,使用第一个值
120+
if (!row[hPath] && cellData && Object.keys(cellData).length > 0) {
121+
const firstAvailableKey = Object.keys(cellData)[0]
122+
row[hPath] = cellData[firstAvailableKey] || ''
123+
console.log(`Using first available key ${firstAvailableKey} for cell ${cellKey}`)
124+
}
94125
})
95126

96127
return row

src/renderer/src/store/reducers/chatReducer.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,18 +69,23 @@ export const handleChatActions = (state: AppState, action: AppAction): AppState
6969
const { folderId, horizontalItem, verticalItem, cellContent, metadata, sourcePageId } =
7070
action.payload
7171

72+
// 从metadata中提取维度信息
73+
const horizontalDimensionNames = metadata?.horizontalDimensions?.map(d => d.name).join(' > ') || '未知'
74+
const verticalDimensionNames = metadata?.verticalDimensions?.map(d => d.name).join(' > ') || '未知'
75+
const valueDimensionNames = metadata?.valueDimensions?.map(d => d.name).join(', ') || '未知'
76+
7277
// 构建用户提示词
7378
const prompt = `# 基于交叉分析表单元格的深度分析
7479
7580
## 背景信息
76-
- **主题**: ${metadata.Topic}
77-
- **横轴**: ${metadata.HorizontalAxis}
78-
- **纵轴**: ${metadata.VerticalAxis}
79-
- **值的含义**: ${metadata.Value}
81+
- **主题**: ${metadata?.topic || '未知'}
82+
- **横轴维度**: ${horizontalDimensionNames}
83+
- **纵轴维度**: ${verticalDimensionNames}
84+
- **值维度**: ${valueDimensionNames}
8085
8186
## 单元格位置
82-
- **横轴项目**: ${horizontalItem}
83-
- **纵轴项目**: ${verticalItem}
87+
- **横轴路径**: ${horizontalItem}
88+
- **纵轴路径**: ${verticalItem}
8489
8590
## 单元格内容
8691
${cellContent}

0 commit comments

Comments
 (0)