From cbcb7229b665f77f43c572807a91b9c95e00f1eb Mon Sep 17 00:00:00 2001 From: matevip Date: Sun, 19 Apr 2026 19:36:57 +0800 Subject: [PATCH] fix(wiki): citation drawer shows real data instead of empty fallbacks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Root cause: PageCitationWithRaw record only had id/pageId/chunkId/rawId/ paragraphIdx/anchorText/confidence — missing rawTitle, chunkOrdinal, startOffset, endOffset, snippet. Frontend displayed Source + Chunk ? for every card. Backend: - Extend PageCitationWithRaw with rawTitle, chunkOrdinal, startOffset, endOffset, snippet fields - Expand listWithRawByPageId SQL to LEFT JOIN mate_wiki_raw_material for title, JOIN mate_wiki_chunk for ordinal/offsets/content snippet (first 200 chars via SUBSTRING) Frontend: - CitationDrawer: replace hardcoded Source / Chunk ? / offset with i18n keys - Add 4 new i18n keys: citationUnknownSource, citationChunkN, citationChunkUnknown, citationOffset (zh-CN + en-US) --- .../main/java/vip/mate/wiki/dto/PageCitationWithRaw.java | 5 ++++- .../vip/mate/wiki/repository/WikiPageCitationMapper.java | 8 +++++++- mateclaw-ui/src/i18n/locales/en-US.ts | 4 ++++ mateclaw-ui/src/i18n/locales/zh-CN.ts | 4 ++++ mateclaw-ui/src/views/Wiki/components/CitationDrawer.vue | 6 +++--- 5 files changed, 22 insertions(+), 5 deletions(-) diff --git a/mateclaw-server/src/main/java/vip/mate/wiki/dto/PageCitationWithRaw.java b/mateclaw-server/src/main/java/vip/mate/wiki/dto/PageCitationWithRaw.java index 5158b8d5..261ef752 100644 --- a/mateclaw-server/src/main/java/vip/mate/wiki/dto/PageCitationWithRaw.java +++ b/mateclaw-server/src/main/java/vip/mate/wiki/dto/PageCitationWithRaw.java @@ -6,4 +6,7 @@ import java.math.BigDecimal; * RFC-029: Citation record joined with the chunk's raw material ID. */ public record PageCitationWithRaw(Long id, Long pageId, Long chunkId, Long rawId, - Integer paragraphIdx, String anchorText, BigDecimal confidence) {} + Integer paragraphIdx, String anchorText, BigDecimal confidence, + String rawTitle, Integer chunkOrdinal, + Integer startOffset, Integer endOffset, + String snippet) {} diff --git a/mateclaw-server/src/main/java/vip/mate/wiki/repository/WikiPageCitationMapper.java b/mateclaw-server/src/main/java/vip/mate/wiki/repository/WikiPageCitationMapper.java index 20cf293c..686eb6ff 100644 --- a/mateclaw-server/src/main/java/vip/mate/wiki/repository/WikiPageCitationMapper.java +++ b/mateclaw-server/src/main/java/vip/mate/wiki/repository/WikiPageCitationMapper.java @@ -15,9 +15,15 @@ import java.util.List; @Mapper public interface WikiPageCitationMapper extends BaseMapper { - @Select("SELECT c.id, c.page_id, c.chunk_id, wc.raw_id, c.paragraph_idx, c.anchor_text, c.confidence " + + @Select("SELECT c.id, c.page_id, c.chunk_id, wc.raw_id, " + + "c.paragraph_idx, c.anchor_text, c.confidence, " + + "rm.title AS raw_title, " + + "wc.ordinal AS chunk_ordinal, " + + "wc.start_offset, wc.end_offset, " + + "SUBSTRING(wc.content, 1, 200) AS snippet " + "FROM mate_wiki_page_citation c " + "JOIN mate_wiki_chunk wc ON c.chunk_id = wc.id " + + "LEFT JOIN mate_wiki_raw_material rm ON wc.raw_id = rm.id " + "WHERE c.page_id = #{pageId} AND c.deleted = 0") List listWithRawByPageId(@Param("pageId") Long pageId); diff --git a/mateclaw-ui/src/i18n/locales/en-US.ts b/mateclaw-ui/src/i18n/locales/en-US.ts index d08101c3..06c18fb7 100644 --- a/mateclaw-ui/src/i18n/locales/en-US.ts +++ b/mateclaw-ui/src/i18n/locales/en-US.ts @@ -1284,6 +1284,10 @@ export default { repair: 'Repair page', citations: '{count} source chunks', noCitations: 'No source citations found', + citationUnknownSource: 'Unknown source', + citationChunkN: 'Chunk {n}', + citationChunkUnknown: 'Chunk unknown', + citationOffset: 'offset {start}–{end}', }, relation: { shared_chunk: 'Shared chunk', diff --git a/mateclaw-ui/src/i18n/locales/zh-CN.ts b/mateclaw-ui/src/i18n/locales/zh-CN.ts index f674ba62..cb858cd0 100644 --- a/mateclaw-ui/src/i18n/locales/zh-CN.ts +++ b/mateclaw-ui/src/i18n/locales/zh-CN.ts @@ -1294,6 +1294,10 @@ export default { repair: '修复页面', citations: '来源 {count} 个 chunk', noCitations: '未找到来源引用', + citationUnknownSource: '未知来源', + citationChunkN: '第 {n} 段', + citationChunkUnknown: '段落未知', + citationOffset: '偏移 {start}–{end}', }, relation: { shared_chunk: '共享片段', diff --git a/mateclaw-ui/src/views/Wiki/components/CitationDrawer.vue b/mateclaw-ui/src/views/Wiki/components/CitationDrawer.vue index 8ad6c35f..4841dbd5 100644 --- a/mateclaw-ui/src/views/Wiki/components/CitationDrawer.vue +++ b/mateclaw-ui/src/views/Wiki/components/CitationDrawer.vue @@ -12,11 +12,11 @@
-
{{ cit.rawTitle || 'Source' }}
+
{{ cit.rawTitle || t('wiki.page.citationUnknownSource') }}
- Chunk {{ cit.chunkOrdinal ?? '?' }} + {{ cit.chunkOrdinal != null ? t('wiki.page.citationChunkN', { n: cit.chunkOrdinal }) : t('wiki.page.citationChunkUnknown') }} - (offset {{ cit.startOffset }}–{{ cit.endOffset }}) + ({{ t('wiki.page.citationOffset', { start: cit.startOffset, end: cit.endOffset }) }})
"{{ cit.snippet }}"