feat(wrapped-ui): 年度总结页支持懒加载与复古模式,新增概览/字数卡片

- wrapped 页面改为:先拉 meta/年份列表,再按页请求单张卡片,首屏更快
- 新增 Card#0 全局概览页(含图表)
- 新增 Card#2 消息字数页(含键盘敲击统计与图表)
- 新增复古模式:像素字体资源 + CRT Overlay,支持一键开关
- 调整 shared 组件、types/useApi,更新前端依赖与 lock
This commit is contained in:
2977094657
2026-01-31 14:54:43 +08:00
parent 77a60bde70
commit 645dc1cff1
42 changed files with 2901 additions and 172 deletions

View File

@@ -321,6 +321,28 @@ export const useApi = () => {
const url = '/wrapped/annual' + (query.toString() ? `?${query.toString()}` : '')
return await request(url)
}
// WeChat Wrapped年度总结- 目录/元信息(轻量,用于按页懒加载)
const getWrappedAnnualMeta = async (params = {}) => {
const query = new URLSearchParams()
if (params && params.year != null) query.set('year', String(params.year))
if (params && params.account) query.set('account', String(params.account))
if (params && params.refresh != null) query.set('refresh', String(!!params.refresh))
const url = '/wrapped/annual/meta' + (query.toString() ? `?${query.toString()}` : '')
return await request(url)
}
// WeChat Wrapped年度总结- 单张卡片(按页加载)
const getWrappedAnnualCard = async (cardId, params = {}) => {
if (cardId == null) throw new Error('Missing cardId')
const query = new URLSearchParams()
if (params && params.year != null) query.set('year', String(params.year))
if (params && params.account) query.set('account', String(params.account))
if (params && params.refresh != null) query.set('refresh', String(!!params.refresh))
const safeId = encodeURIComponent(String(cardId))
const url = `/wrapped/annual/cards/${safeId}` + (query.toString() ? `?${query.toString()}` : '')
return await request(url)
}
return {
detectWechat,
@@ -350,6 +372,8 @@ export const useApi = () => {
getChatExport,
listChatExports,
cancelChatExport,
getWrappedAnnual
getWrappedAnnual,
getWrappedAnnualMeta,
getWrappedAnnualCard
}
}