From 103c8aa059c0ba3af74715f66ae9c1fb1db2bdfa Mon Sep 17 00:00:00 2001 From: iven Date: Mon, 11 May 2026 09:36:43 +0800 Subject: [PATCH] =?UTF-8?q?refactor(web):=20=E6=96=87=E7=AB=A0=E9=A2=84?= =?UTF-8?q?=E8=A7=88=E5=8E=BB=E5=A3=B3=E5=8C=96=20=E2=80=94=20375px=20?= =?UTF-8?q?=E7=BA=AF=E5=86=85=E5=AE=B9=E9=9D=A2=E6=9D=BF=E6=9B=BF=E4=BB=A3?= =?UTF-8?q?=20iPhone=20=E4=BB=BF=E7=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除全部 iPhone 外壳代码(Dynamic Island / 状态栏 / 侧边按钮 / 相机条 / Home Indicator) - 从 620 行精简到 200 行 - 改为 375px 固定宽度纯内容面板,CSS 与小程序 article/detail 完全一致 - 内容区自然流动高度 + 滚动,不再被外壳约束 - 顶部简洁标签栏「小程序端效果预览 · 375px」 - 新增头脑风暴讨论记录 docs/discussions/2026-05-11 --- .../articleEditor/ArticlePhonePreview.tsx | 573 ++++++------------ ...-05-11-article-phone-preview-brainstorm.md | 31 + 2 files changed, 216 insertions(+), 388 deletions(-) create mode 100644 docs/discussions/2026-05-11-article-phone-preview-brainstorm.md diff --git a/apps/web/src/pages/health/articleEditor/ArticlePhonePreview.tsx b/apps/web/src/pages/health/articleEditor/ArticlePhonePreview.tsx index c85c79c..f8f2c67 100644 --- a/apps/web/src/pages/health/articleEditor/ArticlePhonePreview.tsx +++ b/apps/web/src/pages/health/articleEditor/ArticlePhonePreview.tsx @@ -10,18 +10,10 @@ interface ArticlePhonePreviewProps { } /** - * iPhone 17 Pro Max 高保真仿真预览 + * 文章内容在小程序端的实时渲染预览 * - * 屏幕宽度 375px(接近 iPhone CSS 逻辑像素 430pt 的 87%), - * 内容区文字大小和间距与小程序 article/detail 完全一致, - * 保证预览效果 = 实际手机阅读效果。 - * - * iPhone 17 Pro Max 参数: - * 物理尺寸 163.4mm × 78.0mm (aspect 2.095) - * 铝合金一体化机身 (7000-series aerospace aluminum) - * 横向相机条 — 3 镜头 - * Dynamic Island: 药丸形 - * Home Indicator: 底部圆角横条 + * 375px 宽度匹配 iPhone CSS 逻辑像素,CSS 与小程序 article/detail 完全一致。 + * 去掉手机外壳装饰,聚焦内容排版效果验证。 */ export default function ArticlePhonePreview({ title, @@ -45,413 +37,218 @@ export default function ArticlePhonePreview({ const today = useMemo(() => new Date().toLocaleDateString('zh-CN'), []); - // ── iPhone 17 Pro Max 缩放参数 ── - // 屏幕 375px 宽 → 接近真机 CSS 像素,内容可读性保证 - const BEZEL = 4; - const PHONE_W = 375; - const PHONE_R = 58; - const SCREEN_R = PHONE_R - BEZEL; // 54 - - // Dynamic Island - const ISLAND_W = 120; - const ISLAND_H = 32; - const ISLAND_R = 16; - const ISLAND_TOP = 14; - - // 前置摄像头 - const CAM_SIZE = 10; - const CAM_RIGHT = 22; - const SENSOR_SIZE = 4; - const SENSOR_LEFT = 22; - - // 状态栏 - const STATUS_H = 56; - - // Home Indicator - const HOME_W = 120; - const HOME_H = 4; - const HOME_BOTTOM = 10; - - // 侧边按钮 - const BTN_OUT = 3; - - // 铝合金 - const AL_BODY = '#B0B2B8'; - const AL_DARK = '#9A9CA2'; - const AL_LIGHT = '#C4C6CC'; - - // 外框总宽度(手机 + 左右 padding) - const OUTER_W = PHONE_W + BEZEL * 2 + 32; // ~415 - return (
+ {/* 顶部标签 */}
- 实时预览 · iPhone 17 Pro Max + + + + + 小程序端效果预览 · 375px
- {/* ══════ iPhone 17 Pro Max 外壳 ══════ */} + {/* 内容区域 — 自然流动高度,内部可滚动 */}
- {/* ── 侧边按钮 ── */} -
-
-
-
+ - {/* ── 屏幕容器 ── */} -
- {/* ── Dynamic Island ── */} -
-
-
-
- - {/* ── 状态栏 ── */} -
- 9:41 -
- - - - - - - - - - - - - - - - -
-
- - {/* ── 内容区域 — 与小程序 article/detail 完全一致的样式 ── */} -
- - -
-
- {coverImage && ( - 封面 { - (e.target as HTMLImageElement).style.display = 'none'; - }} - /> - )} - - {title || '文章标题'} - -
- {category && ( - {category} - )} - 健康管理中心 - {today} -
-
- - {summary && ( -
-
{summary}
-
+
+
+ {coverImage && ( + 封面 { + (e.target as HTMLImageElement).style.display = 'none'; + }} + /> + )} + + {title || '文章标题'} + +
+ {category && ( + {category} )} - -
- {content && content !== '


' ? ( -
- ) : ( -
- 在左侧编辑器中输入内容 -
- 此处将实时显示预览效果 -
- )} -
+ 健康管理中心 + {today}
- {/* ── Home Indicator ── */} -
-
+ {summary && ( +
+
{summary}
+
+ )} - {/* ── 背面横向相机条 ── */} -
-
-
-
-
+
+ {content && content !== '


' ? ( +
+ ) : ( +
+ 在左侧编辑器中输入内容 +
+ 此处将实时显示预览效果 +
+ )} +
diff --git a/docs/discussions/2026-05-11-article-phone-preview-brainstorm.md b/docs/discussions/2026-05-11-article-phone-preview-brainstorm.md new file mode 100644 index 0000000..dce6dbe --- /dev/null +++ b/docs/discussions/2026-05-11-article-phone-preview-brainstorm.md @@ -0,0 +1,31 @@ +# 文章编辑器手机预览方案头脑风暴 + +> 日期: 2026-05-11 | 参与者: 用户 + Claude + +## 背景 + +文章编辑器右栏的手机预览(iPhone 17 Pro Max 仿真)效果差: +1. 手机外壳占据大量像素,内容区被压缩 +2. 手机高度不可控,内容多了无限拉长 +3. styled-block 模板在窄屏下渲染错乱 +4. 用户目标是看「小程序上文章长什么样」,不是看一台手机 + +## 5 个候选方案 + +| 方案 | 用户体验 | 实现复杂度 | 维护成本 | 推荐度 | +|------|---------|-----------|---------|--------| +| A: 去壳化纯内容预览 | 内容完整可读 | 极低(删代码) | 最低 | ⭐⭐⭐⭐⭐ | +| B: 等比缩放 scale | 比例正确但文字小 | 中等 | 中高 | ⭐⭐ | +| C: iframe 独立页面 | 理论最接近实际 | 高 | 高 | ⭐ | +| D: 迷你手机+点击放大 | 工作流被割裂 | 中高 | 高 | ⭐⭐ | +| E: 标签切换多设备 | 当前无桌面端需求 | 低 | 低 | ⭐⭐⭐(渐进扩展) | + +## 结论 + +**推荐方案 A(去壳化)**:去掉 iPhone 外壳,保留 375px 窄屏内容面板,CSS 与小程序 article/detail 完全一致。渐进可扩展方案 E(标签切换多设备宽度)。 + +核心论据: +- 编辑器预览的目标是验证内容排版,不是仿真设备 +- 去掉外壳后内容区从 ~285px 扩展到 375px,可读性直接提升 +- 公众号后台、飞书文档、Notion 的移动端预览全部采用去壳化方案 +- 实现成本 = 删除 200 行外壳代码 + 微调布局