diff --git a/src/pages/ReportPage.vue b/src/pages/ReportPage.vue index b11bd7b..0f52aa7 100644 --- a/src/pages/ReportPage.vue +++ b/src/pages/ReportPage.vue @@ -34,6 +34,48 @@ const reportCards = computed( })); }, ); +const reportData = computed(() => { + const cards = reportCards.value; + const unique = (items: T[], key: (item: T) => string) => { + const seen = new Set(); + return items.filter((item) => { + const value = key(item); + if (seen.has(value)) return false; + seen.add(value); + return true; + }); + }; + const standards = unique( + [ + ...(report.value?.standardJudgment ?? []), + ...cards.flatMap((card) => card.standards ?? []), + ], + (item) => `${item.category}|${item.riskPoint}|${item.rule}|${item.status}`, + ); + const similarCases = unique( + [ + ...(report.value?.similarCases ?? []), + ...cards.flatMap((card) => card.similarCases ?? []), + ], + (item) => `${item.caseId}|${item.date}|${item.product}|${item.problem ?? item.description}|${item.solution}`, + ); + const suggestions = unique( + [ + ...(report.value?.aiSuggestions ?? []), + ...cards.flatMap((card) => card.suggestions ?? []), + ], + (item) => item, + ); + return { + cards, + supplierCards: cards.filter((card) => card.type === "supplier"), + materialCards: cards.filter((card) => card.type === "material"), + solutionCards: cards.filter((card) => card.type === "solution"), + standards, + similarCases, + suggestions, + }; +}); const dimensionRows = computed(() => { if (!report.value) return []; if (report.value.dimensionScores?.length) { @@ -208,7 +250,7 @@ function dimensionConclusion(item: { -