№ · UI 规范
CH.06.22
mobile-portrait-rulebook
# 竖屏重构规则
目标
- 竖屏首页只保留一屏以内的核心操作与反馈。
- 取消首页级上下滚动,单手可完成高频动作。
- 让大堂、日志、动作栏形成固定闭环:看见状态 -> 看见告警 -> 立即操作 -> 结果回流。
- 竖屏标准基线以
360x780为准,对齐 Huawei P30 这类常见竖屏尺寸。 - 所有竖屏适配优先按 360 宽度验收,再向 375、390、412 等更宽机型扩展。
适用范围
src/App.tsxsrc/components/InnCourt.tsxsrc/components/RandomEventPopup.tsxsrc/components/LedgerSummaryTab.tsxsrc/components/FacilitiesTab.tsxsrc/components/RecipeTab.tsxsrc/components/AdventureTab.tsxsrc/components/BackyardTab.tsxsrc/components/KitchenTab.tsxsrc/components/BaggageTab.tsxsrc/components/StaffTabs.tsxsrc/components/PeerLobby.tsx
竖屏首页结构
- 顶部 15%: 店名、铜钱、声望、清洁、安防。
- 中部 40%: 大堂沙盘。
- 中下部 20%: 江湖消息摘要。
- 底部 25%: 主动作 + 固定锚点轮盘 + 轻量功能切换。
设备高度不足时,优先压缩日志与底部栏,禁止压缩主动作文字或把主要信息挤成窄列。
窄屏降级
- 当竖屏宽度低于 360px 时,顶部徽章、日志筛选和底部按钮全部进入 compact 模式。
- compact 模式只允许缩间距、缩图标、缩边距,不允许再缩主动作主文案。
InnCourt的场景头和桌位卡在 compact 模式下必须进一步压缩高度,优先保住 8 桌完整可见。- 353px 这类极窄设备上,轮盘浮窗与底部 dock 仍然可以共存,但轮盘必须固定锚点,允许拖拽后回弹到安全区内,不允许占用主页中心空间。
核心硬规则
- 首页不允许页面级滚动。
- 竖屏首屏不能依赖头图或大面积装饰卡。
- 8 桌必须在首屏完整可见。
- 日志必须常驻,默认显示 3 到 4 行。
- 日志默认只显示摘要,点击后展开全文。
- 底部主操作必须始终可见。
- 任何长模块只允许在独立页、抽屉或弹层内滚动。
- 任何固定入口都必须先吃掉
env(safe-area-inset-*),再谈视觉偏移。
文本规则
- 主标题不低于 16px。
- 正文不低于 13px。
- 次级说明不低于 12px。
- 11px 只允许用于徽章、角标和极短状态。
- 不得用更小字号去挤布局。
- 中文长文本优先换行到第二行,或改成 icon + 短名。
- 禁止把关键中文文案压成单字竖列或极窄列。
- 按钮文字优先两到四字短词,必要时加图标。
- 任何按钮和卡片的最小触达高度为 44px。
大堂沙盘规则
InnCourt是首页核心,不做装饰性大图。同福开张合影只允许背景化、水印化,或下沉到二级页面。- 清洁 / 安防只做轻量 HUD 或叠层条,不单独占大卡。
- 8 桌必须用轻网格展示,默认采用 4 x 2。
- 桌位卡只显示桌号、状态、进度、异常角标。
- 选中桌位后才展开更多信息。
- 飞贼、垃圾、待客、催菜等状态优先以桌位高亮和角标呈现。
- 大堂中央不再放大段说明文。
日志规则
江湖消息固定在首页中下部。- 默认只展示最近 3 到 4 行高优先级消息。
- 日志分类至少分为
全部 / 警报 / 系统 / 经营。 - 筛选必须是单击芯片,不得依赖下拉长菜单。
- 完整日志放入抽屉,不得挤占首屏高度。
- 新日志进入时只做轻提示,不抢焦点,不盖住主操作。
动作规则
- 底部动作区只保留 1 个主动作 + 2 个次动作。
- 主动作必须由当前状态自动决策。
- 主动作示例:
thiefList.length > 0->点穴- 否则
cleanliness过低 ->洒扫 - 否则存在空桌 ->
叫客入座 - 否则有待处理客人 ->
催菜 / 翻台 - 否则 ->
对账
- 主动作的高亮、闪烁、置顶只用于当前最紧急事件。
- 次动作固定为低频但常用入口,如
对账、更多。 更多应打开固定锚点轮盘浮窗,承接后院、后厨、闯荡、行囊、说明、路线、静音等二级入口。- 轮盘默认固定在右下安全区锚点,可拖动重定位,但拖动后必须被 clamp 回屏内,不能离屏或压住底栏。
- 减少同时出现的大按钮数量,避免手机底部拥挤。
- 功能切换栏优先图标化,文字只保留极短标签。
模块归属
| 模块 | 手机首页 | 承载方式 |
| --- | --- | --- |
| 账本总览 (LedgerSummaryTab) | 否 | 全屏页或抽屉 |
| 招贤 / 员工 (StaffTabs) | 否 | 全屏页或抽屉 |
| 菜谱 (RecipeTab) | 否 | 全屏页或抽屉 |
| 后院 (BackyardTab) | 否 | 全屏页或抽屉 |
| 后厨 (KitchenTab) | 否 | 全屏页或抽屉 |
| 闯荡 (AdventureTab) | 否 | 全屏页或抽屉 |
| 设施 (FacilitiesTab) | 否 | 全屏页或抽屉 |
| 行囊 (BaggageTab) | 否 | 全屏页或抽屉 |
| 联机同盟 (PeerLobby) | 否 | 全屏页或抽屉 |
| 随机事件 (RandomEventPopup) | 否 | 底部 sheet 或全屏弹层 |
模块页规则
- 模块页允许内部滚动,首页不允许。
- 模块页可以提高信息密度,但必须保持 375px 到 412px 宽度可读。
RandomEventPopup的手机版必须改成 sheet 化布局,选项纵向堆叠。- 二级页面返回入口必须稳定可见。
- 模块页的关闭按钮或返回按钮必须高优先级,触达区足够大。
竖屏接线规则
- 首页主动作由当前状态自动决策,优先级固定为:飞贼 -> 洒扫 -> 叫客入座 -> 催菜/翻台 -> 对账。
- 次动作只保留两个入口:对账、更多。
- 浮窗轮盘优先承接二级功能,固定锚点放在右下角安全区内侧,允许拖拽但必须受安全区 clamp 约束,不允许离屏摆放。
InnCourt竖屏只输出沙盘,不再把大说明卡塞进首页。- 任何大段说明、长列表、细粒度管理内容都必须进入 sheet、抽屉或二级页。
禁止事项
- 首页级多层纵向堆叠。
- 依赖
text-[10px]或更小字号作为主要信息。 - 把按钮、日志、卡片一起塞进单列长页面。
- 用缩小字体代替删减内容。
- 用桌面式侧边栏原样搬到手机。
- 用滚动条解决布局失控。
- 让卡片内部再嵌套大卡片。
- 让浮动入口固定在错误的位置,或拖出安全区。
实施顺序
- App shell: 顶栏 / 底栏 / 模式切换。
- InnCourt: 沙盘 + 桌位网格 + 轻 HUD。
- Log: 固定行高 + 筛选芯片。
- Action dock: context primary action。
- RandomEventPopup: mobile sheet。
- 其余模块: drawer / page 化。
- 最后做细节收口与多机型验证。
验收标准
- 375x812、390x844、412x915 竖屏首页无页面滚动。
- 360x780 作为首要验收基线,其他分辨率以不破坏该基线为前提。
- 首屏内可同时看到 HUD / 大堂 / 日志 / 底栏。
- 8 桌完整可见。
- 主动作在拇指可达区。
- 日志默认显示 3 到 4 行。
- 随机事件选项可完整阅读。
- 无横向滚动,无文本重叠。
- 首页不出现页面级纵向滚动条。
npm run lint和npm run build通过。
约束说明
这份规则是后续竖屏开发的唯一约束来源。若与现有桌面布局冲突,竖屏首页规则优先。