- schema:siteAbout 增 layout{showIdCard} + blocks(z.discriminatedUnion
九类:prose/tracks/cards/timeline/quote/figure/linklist/cta/divider,
图片字段走 Astro image());对未知块型用 z.union([knownUnion,
z.looseObject({type})]) 复合——已知块严格校验,未知块落宽松分支再由
访问器 WARN+丢弃(容错与严格校验的张力取舍)
- page-blocks.ts:enabled:false 过滤、未知 type WARN+skip、pickBi 回落
zh 并 WARN、上限(块≤24/单块文本≤4000,超限截断并 WARN)
- BlockRenderer 统一外壳 `<section class="blk" data-block={type}>`(E2E
抓手)+ 九个块组件(样式自 AboutPage 原 <style> 搬迁,只吃既有 token)
- AboutPage 三级回落:blocks → intro markdown → 内置默认;legacy
tracks/build 段整体挪入回退分支(文案逐字一致,零回归)
- 图标白名单 src/lib/icons.ts(12 键,未登记回退首字占位)
- 后台 about 单例四段结构(blocks/layout/intro/typography),块为
list+types+typeKey,每块带「显示」开关与中文标签
协调报备:车道修了一处跨车道插入事故(T3 把 typography 插进了 intro
的 widget 内导致字段错位),重写为四段正确结构;并发构建擦 dist 的
假失败改用「build→快照 dist→快照起服务跑 E2E」规避(37/37 稳定)
验证: 构建 48 页 exit 0;E2E 37/37(快照口径);九类块顺序与配置一致、
figure 走 /_astro/*.webp 管线、未知块与外链图被拦并 WARN、
终版 3 块零回归、en 同构、admin about 四段字段齐全
Spec: 2026-11-02_blog-5g-pages (T1/T2)
Co-authored-by: GLM-5.3
39 lines
839 B
Plaintext
39 lines
839 B
Plaintext
---
|
|
// figure 块:图片(Astro 图片管线,宽度自适应;caption 图注)
|
|
import { Image } from 'astro:assets';
|
|
import type { ResolvedBlock } from '../../lib/page-blocks';
|
|
|
|
interface Props {
|
|
block: Extract<ResolvedBlock, { type: 'figure' }>;
|
|
}
|
|
const { block } = Astro.props;
|
|
---
|
|
|
|
<figure class="fig">
|
|
<Image
|
|
src={block.image}
|
|
alt={block.alt}
|
|
widths={[480, 960]}
|
|
sizes="(min-width: 820px) 640px, 92vw"
|
|
loading="lazy"
|
|
class="fig-img"
|
|
/>
|
|
{block.caption && <figcaption>{block.caption}</figcaption>}
|
|
</figure>
|
|
|
|
<style>
|
|
.fig { margin: var(--space-4) 0; }
|
|
.fig-img {
|
|
width: 100%;
|
|
height: auto;
|
|
border-radius: 10px;
|
|
border: 1px solid var(--line);
|
|
}
|
|
figcaption {
|
|
margin-top: var(--space-1);
|
|
font-size: 12.5px;
|
|
color: var(--ink-4);
|
|
text-align: center;
|
|
}
|
|
</style>
|