fix: 修复首页空白、小红书/游记封面图、定制页二维码

1. 首页大面积空白:useScrollReveal 添加 MutationObserver,
   确保异步子组件的 .reveal 元素也能触发入场动画

2. 小红书/游记封面图不显示:
   - 小红书 CDN 签名链接过期+防盗链,全部下载到本地
   - 新增 download-covers.mjs 脚本批量下载封面
   - 新增 useImageProxy composable 转换外部 URL
   - 页面 img 标签添加 referrerpolicy="no-referrer"
   - 管理端保存时自动下载外部封面图到本地
   - 种子数据更新为本地路径

3. 定制页微信号文字替换为二维码图片

4. prerender 路由添加 /xiaohongshu 和 /youji

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
这个提交包含在:
刘涛
2026-03-25 15:37:58 +08:00
共同撰写人 Claude Opus 4.6
父节点 b82712deed
当前提交 8832762e51
共修改 16 个文件,包含 599 行新增和 106 行删除
+3 -2
查看文件
@@ -14,7 +14,7 @@
<main class="detail-main">
<!-- 封面图 -->
<div class="detail-cover" :class="{ 'detail-cover--wide': note.ratio === 'horizontal' }">
<img :src="note.cover" :alt="note.title" />
<img :src="proxyImage(note.cover)" :alt="note.title" referrerpolicy="no-referrer" />
</div>
<!-- 笔记正文预览 -->
@@ -126,7 +126,7 @@
:class="{ 'sidebar-note--active': n.id === note.id }"
>
<NuxtLink :to="`/xiaohongshu/${n.id}`" class="sidebar-note__link">
<img :src="n.cover" :alt="n.title" class="sidebar-note__thumb" />
<img :src="proxyImage(n.cover)" :alt="n.title" class="sidebar-note__thumb" referrerpolicy="no-referrer" />
<div class="sidebar-note__info">
<span class="sidebar-note__title">{{ n.title }}</span>
<span class="sidebar-note__author">@{{ n.author }}</span>
@@ -163,6 +163,7 @@
<script setup>
import { useBreadcrumbSchema } from '~/composables/useJsonLd'
import { proxyImage } from '~/composables/useImageProxy'
const { data: wallData } = await usePublicApi('xiaohongshu-wall')
+3 -1
查看文件
@@ -102,9 +102,10 @@
>
<div class="note-card__cover" :class="{ 'note-card__cover--wide': note.ratio === 'horizontal' }">
<img
:src="note.cover"
:src="proxyImage(note.cover)"
:alt="note.title"
loading="lazy"
referrerpolicy="no-referrer"
@error="handleImageError"
/>
<div class="note-card__overlay">
@@ -160,6 +161,7 @@
<script setup>
import { useBreadcrumbSchema } from '~/composables/useJsonLd'
import { proxyImage } from '~/composables/useImageProxy'
const { data: wallData } = await usePublicApi('xiaohongshu-wall')