From 2dd103814ae0c860fca7b8757fcffb1534fed53e Mon Sep 17 00:00:00 2001 From: 2977094657 <2977094657@qq.com> Date: Sun, 22 Feb 2026 18:59:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(wrapped):=20=E6=96=B0=E5=A2=9E=E5=B9=B4?= =?UTF-8?q?=E5=BA=A6=E5=85=B3=E9=94=AE=E8=AF=8D=E8=AF=8D=E4=BA=91=E5=8D=A1?= =?UTF-8?q?=E7=89=87=EF=BC=88Card=20#6=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增关键词词云后端计算:消息采样、jieba 分词、关键词权重与例句回看数据。 - Wrapped 年度卡片接入 Card #6,并对该卡片改为按请求重算(不走单卡缓存)。 - 前端新增 storm->cloud 词云动效卡片,支持词点击查看例句及动画阶段隐藏 deck 顶部 UI。 - 统一 wrapped 消息表名解码逻辑,兼容 sqlite text_factory=bytes。 - 新增关键词词云测试并加入 jieba 依赖。 --- .../wrapped/cards/Card06KeywordsWordCloud.vue | 968 ++++++++++++++++++ .../wrapped/shared/WrappedCardShell.vue | 12 +- .../visualizations/KeywordWordCloud.vue | 388 +++++++ frontend/pages/wrapped/index.vue | 15 +- pyproject.toml | 1 + .../wrapped/cards/card_00_global_overview.py | 4 +- .../wrapped/cards/card_01_cyber_schedule.py | 5 +- .../wrapped/cards/card_02_message_chars.py | 6 +- .../cards/card_05_keywords_wordcloud.py | 572 +++++++++++ src/wechat_decrypt_tool/wrapped/service.py | 52 +- tests/test_wrapped_keywords_wordcloud.py | 128 +++ uv.lock | 10 +- 12 files changed, 2136 insertions(+), 25 deletions(-) create mode 100644 frontend/components/wrapped/cards/Card06KeywordsWordCloud.vue create mode 100644 frontend/components/wrapped/visualizations/KeywordWordCloud.vue create mode 100644 src/wechat_decrypt_tool/wrapped/cards/card_05_keywords_wordcloud.py create mode 100644 tests/test_wrapped_keywords_wordcloud.py diff --git a/frontend/components/wrapped/cards/Card06KeywordsWordCloud.vue b/frontend/components/wrapped/cards/Card06KeywordsWordCloud.vue new file mode 100644 index 0000000..54b0988 --- /dev/null +++ b/frontend/components/wrapped/cards/Card06KeywordsWordCloud.vue @@ -0,0 +1,968 @@ + + + + + diff --git a/frontend/components/wrapped/shared/WrappedCardShell.vue b/frontend/components/wrapped/shared/WrappedCardShell.vue index e23906e..77274e7 100644 --- a/frontend/components/wrapped/shared/WrappedCardShell.vue +++ b/frontend/components/wrapped/shared/WrappedCardShell.vue @@ -22,11 +22,11 @@
-
+

{{ title }}

@@ -38,7 +38,7 @@
-
+
@@ -55,6 +55,8 @@ defineProps({ variant: { type: String, default: 'panel' }, // 'panel' | 'slide' // Slide 模式下是否取消 max-width 限制(让内容直接铺满页面宽度)。 // 用于需要横向展示的可视化(如年度日历热力图)。 - wide: { type: Boolean, default: false } + wide: { type: Boolean, default: false }, + // 隐藏标题/叙事区域(如关键词卡片 storm 阶段沉浸模式)。 + hideChrome: { type: Boolean, default: false } }) diff --git a/frontend/components/wrapped/visualizations/KeywordWordCloud.vue b/frontend/components/wrapped/visualizations/KeywordWordCloud.vue new file mode 100644 index 0000000..3bdca86 --- /dev/null +++ b/frontend/components/wrapped/visualizations/KeywordWordCloud.vue @@ -0,0 +1,388 @@ + + + + + diff --git a/frontend/pages/wrapped/index.vue b/frontend/pages/wrapped/index.vue index 0223126..f8d72a0 100644 --- a/frontend/pages/wrapped/index.vue +++ b/frontend/pages/wrapped/index.vue @@ -8,7 +8,7 @@ -
+