fix monitoring manual mark attribution
Frontend CI / Frontend (push) Successful in 2m56s
Backend CI / Backend (push) Successful in 14m47s

This commit is contained in:
2026-06-25 09:31:18 +08:00
parent bdfe79c921
commit cbbec8da85
10 changed files with 436 additions and 66 deletions
@@ -2,6 +2,7 @@
import { ArrowLeftOutlined, BookOutlined, CopyOutlined } from '@ant-design/icons-vue'
import type {
MonitoringQuestionCitationAnalysisItem,
MonitoringQuestionContentCitation,
MonitoringQuestionDetailCitation,
MonitoringQuestionDetailPlatform,
MonitoringSourceItem,
@@ -198,7 +199,10 @@ const activeDeepSeekCitationReferenceLabels = computed<string[][]>(() => {
})
const activeInlineContentCitations = computed<TrackingAnalyzedContentCitation[]>(() => {
return analyzeInlineContentCitations(activePlatform.value)
return analyzeContentCitations(
activePlatform.value,
detailQuery.data.value?.content_citations ?? [],
)
})
const shouldShowInlineContentCitations = computed(() => {
@@ -266,7 +270,7 @@ function openImitationCreate(
}
function markCitationAsExternal(citation: MonitoringQuestionDetailCitation): void {
if (!canMarkCitationAsExternal(citation, activePlatform.value?.ai_platform_id)) {
if (!canMarkCitationAsExternal(citation)) {
return
}
markCitationMutation.mutate(citation)
@@ -351,9 +355,8 @@ function isManualMarkedCitation(
function canMarkCitationAsExternal(
citation: MonitoringQuestionDetailCitation | null | undefined,
platformId: string | null | undefined,
): boolean {
if (!citation || !supportsContentCitationDisplay(platformId)) {
if (!citation) {
return false
}
if (!String(citation.cited_url ?? '').trim()) {
@@ -367,7 +370,7 @@ function canMarkCitationAsExternal(
}
function isLinkedInlineCitationPlatform(platformId: string | null | undefined): boolean {
return platformId === 'yuanbao'
return platformId === 'yuanbao' || platformId === 'qwen'
}
function isKimiInlineCitationPlatform(platformId: string | null | undefined): boolean {
@@ -378,10 +381,6 @@ function isDeepSeekInlineCitationPlatform(platformId: string | null | undefined)
return platformId === 'deepseek'
}
function supportsContentCitationDisplay(platformId: string | null | undefined): boolean {
return platformId !== 'qwen'
}
function createQwenSourceGroupPattern(): RegExp {
return /\[\[source_group_web_(\d+)\]\]/g
}
@@ -1140,6 +1139,36 @@ function collectDeepSeekInlineCitationOccurrences(
}))
}
function analyzeContentCitations(
platform: MonitoringQuestionDetailPlatform | null,
contentCitations: MonitoringQuestionContentCitation[],
): TrackingAnalyzedContentCitation[] {
const platformId = normalizeMonitoringPlatformId(platform?.ai_platform_id)
const serverItems = contentCitations
.filter((item) => normalizeMonitoringPlatformId(item.ai_platform_id) === platformId)
.sort((left, right) => {
if (right.citation_count !== left.citation_count) {
return right.citation_count - left.citation_count
}
return left.article_title.localeCompare(right.article_title, 'zh-CN')
})
.map((item) => ({
key: `server-${item.ai_platform_id}-${item.source_type}-${item.source_id}`,
contentName: item.article_title || item.source_url || '--',
channelName: item.publish_platform || deriveCitationChannelName(item.source_url),
citationCount: item.citation_count,
citationRate: item.citation_rate,
citedURL: item.source_url || null,
sourceType: item.source_type,
}))
if (serverItems.length > 0) {
return serverItems
}
return analyzeInlineContentCitations(platform)
}
function analyzeInlineContentCitations(
platform: MonitoringQuestionDetailPlatform | null,
): TrackingAnalyzedContentCitation[] {
@@ -1563,7 +1592,7 @@ const contentCitationColumns = computed(() => [
</span>
<div class="tracking-question-source-card__actions">
<a-tooltip
v-if="canMarkCitationAsExternal(citation, activePlatform?.ai_platform_id)"
v-if="canMarkCitationAsExternal(citation)"
:title="t('tracking.markAsExternalArticle')"
>
<button
@@ -1592,20 +1621,14 @@ const contentCitationColumns = computed(() => [
</a-tooltip>
</div>
<a-tag
v-if="
citation.article_id &&
supportsContentCitationDisplay(activePlatform?.ai_platform_id)
"
v-if="citation.article_id"
color="blue"
class="tracking-question-source-card__badge"
>
{{ t('tracking.contentCitationBadge') }}
</a-tag>
<a-tag
v-else-if="
isManualMarkedCitation(citation) &&
supportsContentCitationDisplay(activePlatform?.ai_platform_id)
"
v-else-if="isManualMarkedCitation(citation)"
color="green"
class="tracking-question-source-card__badge"
>
@@ -1654,10 +1677,7 @@ const contentCitationColumns = computed(() => [
{{ record.site_name }}
</strong>
<small
v-if="
record.content_citation_count > 0 &&
supportsContentCitationDisplay(record.ai_platform_id)
"
v-if="record.content_citation_count > 0"
class="meta-subtext"
>
{{