/login | 登录按钮 | 成功进 /home;错误凭证单次明确提示 | JWT 会话 | ✅ | smoke「错误凭证」「登录→新建」 |
/login | 注册链接 | 导航 /register | 转化漏斗 | ✅ | session.spec「去注册」 |
/login AuthBrandShell | Skip + Tab 序 + Enter | 首项 Skip「跳到登录表单」→ form;用户名→密码→登录→footer;Enter 提交;focus-visible;无 trap | ADR-0016 键盘门面 | ✅ | session「登录壳键盘」 |
/login AuthBrandShell | 次密距 | 品牌/表单 pad ≤20×16;gap ∈[8,12];门头 mb ∈[8,12];表单 Title mt≤8;项 mb∈[8,16];控件 ∈[24,32];标题 ≥24;hero ≤180;~40% 面板 | ADR-0016 密度 | ✅ | smoke「登录页渲染」 |
/register AuthBrandShell | Skip + Tab 序 + Enter | 首项 Skip「跳到注册表单」→ form;字段链(tip 出序)→注册→footer;Enter 校验;focus-visible;无 trap | ADR-0016 键盘门面 | ✅ | session「注册壳键盘」 |
/register AuthBrandShell | 次密距 | 与登录同源 pad 20×16 + gap12 + 门头 mb12 + 表单 body 12/28;「去注册」+ 注册键盘 densify | ADR-0016 密度 | ✅ | session「去注册」+「注册壳键盘」 |
/s/* 失效门 | 次密距 | 品牌/表单 pad 同上;门头 mb ≤20;键盘用例不改 | ADR-0016 密度 | ✅ | share「无效 token」 |
/ LandingChrome | Skip + Tab 序 | 首项 Skip「跳到主操作」→ #landing-main-cta;试用→注册→登录;focus-visible surface;无 trap | ADR-0016 键盘门面 | ✅ | landing「落地页键盘」 |
/ LandingChrome | 次密距 | 次屏 section pad ≤52;对照行 ≤12;nav ≤20;footer ≤36;hero 品牌字 ≥36 + 全幅 | ADR-0016 密度 | ✅ | landing「加载可见品牌」 |
/compare LandingChrome | Skip + Tab 序 | 同壳 Skip→ #landing-main-cta;打开演示→自部署→返回首页;surface focus-visible;无 trap | ADR-0016 键盘门面 | ✅ | compare「竞品对照页键盘」 |
/compare LandingChrome | 次密距 | compare hero ≤36;section ≤52;对照行 ≤12;eyebrow ≥22;nav ≤20 | ADR-0016 密度 | ✅ | compare「加载对照表」 |
/s/* 成功态 meta/表清单 | 次密距 | meta ≤60 / gap≤2 / stage≤6;表清单 pad≤6·标题≤12·行∈20–26;折叠默认 | ADR-0016 密度 | ✅ | demo「免登录 /demo」 |
| 只读分享 Modal | 次密距 | .erd-io-modal body≤8;hint mb≤8;链接行 mb≤10;输入 ~28;键盘不回归 | ADR-0016 密度 | ✅ | share-project-keyboard |
HomeLayout /home | Skip + Tab 序 | 首项 Skip「跳到主内容」→ #home-main-content;继续建模→新建→示例→二级入口→项目卡;brand focus-visible;无 trap | ADR-0016 键盘门面 | ✅ | home-keyboard「Home 键盘」 |
/home hero CTA | 次密距 | actions gap ≤8;secondary 钮 pad ≤4×10;hero gap ≤24 / mb·pb ≤16;主 CTA ≥40;问候字 ≥28 | ADR-0016 密度 | ✅ | home-keyboard densify |
/home 空态/公告 | 次密距 | 空态 pad ≤24×12;二级入口 mb ≤16;项目区 mb ≤20;公告 pt ≤4 / 行 pad ≤4·gap ≤10 / 标题 ≤13;CTA 保留 | ADR-0016 密度 | ✅ | home-keyboard empty/announce densify |
| HomeLayout / GroupLayout 外井 | 次密距 | shell/content pad ≤12×16;body ≤12×16;列表空态 ≤12×8;禁 24/20;Skip/顶栏不弱化 | ADR-0016 密度 | ✅ | layout-outlet shell densify |
/account/settings BaseView | 次密距 | 表单/头像列 gap ≤16(窄屏 ≤12);禁 24;表单项/控件 28 不动;Skip/保存不弱化 | ADR-0016 密度 | ✅ | account-settings densify |
三壳顶栏 erd-chrome-actions | 次密距 | Home/Group/分享 gap ≤12;Design ≤8;禁 16;顶栏 64 / Skip·用户菜单不弱化 | ADR-0016 密度 | ✅ | layout-outlet densify |
三壳顶栏 erd-chrome-header | 次密距 | padX ≤16;brand–nav gap ≤12(Design ≤8);禁 20/16;顶栏 64 / Skip 不弱化 | ADR-0016 密度 | ✅ | layout-outlet densify |
| Home 水平导航 Menu | 次密距 | 项 padX ∈[8,12];项高 64;命中宽 ≥44;禁 padX16;Skip/键盘不弱化 | ADR-0016 密度 | ✅ | layout-outlet + home-keyboard |
| Group 侧栏 nav Menu | 次密距 | 项高 ∈[28,32];padX ∈[8,12];marginY ≤4;禁高40/pad24;Skip/键盘不弱化 | ADR-0016 密度 | ✅ | layout-outlet + group-keyboard |
| DesignLayout 侧栏 nav Menu | 次密距 | 项高 ∈[28,32];padX ∈[8,12];marginY ≤4;禁高40/pad24;版本/导入/导出/设置同源;menuitem 键盘不弱化 | ADR-0016 密度 | ✅ | layout-outlet densify + 侧栏键盘 |
| 项目列表工具条 | 碎密度 | Space gap ∈[8,12];搜索/钮高 ≤28;工具条高 ≤32;禁 Search 默认 32;键盘不弱化 | ADR-0016 密度 | ✅ | project-surface densify + project-list-keyboard |
/project/notice 公告行 | 碎密度 | .project-list-page__notice-row gap ∈[8,12](目标 8);行 pad ≤4×8;禁 gap12;工具条不弱化 | ADR-0016 密度 | ✅ | project-notice densify |
画布空态 CTA .erd-empty-cta | 碎密度 | pad ∈[8,12](目标 10×12);主 CTA hit ∈[26,28];禁 14×18;Auth logo / 欢迎 pad 不弱化 | ADR-0016 密度 | ✅ | relation「空态构图」 |
画布空态剪影 ErdEmptyDiagram compact | 碎密度 | 宽 112(原 132);∈[96,120];禁 ≥132;hero 176 / Auth logo / 欢迎 pad 不弱化 | ADR-0016 密度 | ✅ | relation「空态构图」 |
画布空态 panel .erd-empty-panel | 碎密度 | mt ≈ min(8vh,64) 且 ∈[32,64];禁 min(10vh,88);CTA pad / Auth logo / 欢迎 pad 不弱化 | ADR-0016 密度 | ✅ | relation「空态构图」 |
| 画布空态纵节奏 title/desc | 碎密度 | title mt ≈8∈[6,10];desc mb ≈12∈[8,12];desc mt≤8;禁历史 16/18;Auth logo / 欢迎 pad / CTA pad / panel 顶距不弱化 | ADR-0016 密度 | ✅ | relation「空态构图」 |
画布空态次链 .erd-empty-links | 碎密度 | mt ≈10∈[8,12];Controls 22/pad0 已密不改;禁 links mt>12;Auth logo / 欢迎 / CTA / panel / title·desc 不弱化 | ADR-0016 密度 | ✅ | relation「空态构图」+「Controls」 |
| 团队成员工具条 | 碎密度 | mb≤8;Space gap ∈[8,12];搜索/钮高 ≤28;工具条高 ≤32;钮 padX∈[8,12];禁 Search 默认 32 / mb16 | ADR-0016 密度 | ✅ | group-layout-nav densify + group-keyboard / add-user-keyboard |
| Group 用户组页头/左角色签 | 碎密度 | 标题 ≤14·lh≤24·mb≤8·mt≤4;标题→签 ≤12;左签 padX∈[8,12]·高∈[28,32]·字≤13;禁 Title level4 / Space large / padX24 | ADR-0016 密度 | ✅ | group-layout-nav densify + group-keyboard / add-user-keyboard |
| Group 基本设置页头 | 碎密度 | 标题 ≤14·lh≤24·mb≤8·mt≤4;标题→表单 ≤12;禁 Title level4 | ADR-0016 密度 | ✅ | group-basic-setting densify + group-layout-nav / group-keyboard |
| Group 基本设置 Form | 碎密度 | 项 mb∈[8,16](目标12);Input/Select/钮高∈[24,32](目标28);label≤13;禁 antd 默认 24/32 | ADR-0016 密度 | ✅ | group-basic-setting densify + group-layout-nav / group-keyboard |
| Group 基本设置删区 | 碎密度 | Divider mt/mb∈[8,16](目标12);body gap∈[4,12](目标8);次文≤13/lh≤20;标题 mb≤2;禁 Divider24 + Space 叠 mb | ADR-0016 密度 | ✅ | group-basic-setting densify + group-project-delete-keyboard |
| DesignLayout 次屏 | 碎密度 | .erd-secondary-pane pad ≤8×12;Steps mt/mb ≤10/12;设置 hint mb ≤8;SyncConfig→.erd-io-modal;禁 16/24 Steps | ADR-0016 密度 | ✅ | designer-secondary-pane densify |
| 导入/导出 Modal Steps | 次密距对齐 | .erd-io-modal__steps mt/mb ≤10/12;标题 ≤13;与次屏同阶;键盘不回归 | ADR-0016 密度 | ✅ | reverse-database-keyboard + export-ddl-keyboard densify |
| 导入/导出 Modal 头身脚 | 碎密度 | .erd-io-modal header/body/footer pad ≤8×12(禁头 10×14×8 / 脚 8×14 / body 12×14);标题 ≤14·lh≥20;footer 钮 ≥28;键盘不回归 | ADR-0016 密度 | ✅ | dbml-import + dbml-export densify |
| EntityModal 头身脚 | 碎密度 | .erd-entity-modal header/body/footer pad ≤8×12;宽≤420;标题 ≤14·lh≥20;输入/OK ≥28;键盘不回归 | ADR-0016 密度 | ✅ | relation「实体新建弹层密度」 |
GroupLayout /project/group/setting/* | Skip + Tab 序 | 首项 Skip「跳到主内容」→ #group-main-content;绕开顶栏+侧栏;基本设置字段进序;brand focus-visible;无 trap | ADR-0016 键盘门面 | ✅ | group-keyboard「Group 键盘」 |
项目列表 /project/{person,recent,group} | 行 Enter / Tab 动作 | stretched link 消死卡;Enter 开设计器;Tab 行内动作可逆;行 :has inset brand focus-visible;无 trap | ADR-0016 键盘列表 | ✅ | project-list-keyboard |
| 项目动作弹窗 新建/修改/删除 | 打开首焦 / Esc / Tab trap | 新增→类型;修改→项目名;删除→「是」;Esc 归还触发器;焦点不逃出 dialog | ADR-0016 键盘弹层 | ✅ | project-action-modals-keyboard |
| 导入/导出弹层 DBML | 打开首焦 / Esc / Tab trap | 导入→DBML文本;导出→导出模型;Esc 归还空态 CTA / 项目菜单;焦点不逃出 dialog | ADR-0016 键盘弹层 | ✅ | import-export-keyboard |
| 导入跳过校验 Modal.warning | 打开首焦 / Esc·OK / Tab trap | 二次导入全跳过→首焦「知道了」;Esc/OK 归还「解析并导入」 | ADR-0016 键盘弹层 | ✅ | import-skip-warning-keyboard |
| 版本动作弹窗 新增/编辑/删除/回滚 | 打开首焦 / Esc / Tab trap | 新增/编辑最新→版本号;编辑非最新→描述;删除/回滚→「是」;Esc 归还触发器;焦点不逃出 dialog | ADR-0016 键盘弹层 | ✅ | version-action-modals-keyboard |
| 版本对比/详情 diff Modal | 打开首焦 / Esc / Tab trap | 比对→「初始版本」;详情→「导出变更清单」;Esc 归还触发器;焦点不逃出 dialog | ADR-0016 键盘弹层 | ✅ | version-diff-keyboard |
| 同步配置/重建版本 Modal | 打开首焦 / Esc / Tab trap | 同步配置→「字段增量」;重建版本→「版本号」;Esc 归还触发器;焦点不逃出 dialog | ADR-0016 键盘弹层 | ✅ | version-sync-rebuild-keyboard |
| 重建基线二次确认 | 打开首焦 / Esc / Tab trap | 首焦「重建」;Esc 归还不落盘、归还「重建版本」钮;焦点不逃出 dialog | ADR-0016 键盘弹层 | ✅ | version-rebuild-confirm-keyboard |
| 初始化基线 Modal | 打开首焦 / Esc / Tab trap | 首焦「版本号」;Esc 归还触发器;焦点不逃出 dialog | ADR-0016 键盘弹层 | ✅ | version-init-keyboard |
| 复刻 Modal | 打开首焦 / Esc / Tab trap | 首焦「项目名」;Esc 归还触发器;焦点不逃出 dialog | ADR-0016 键盘弹层 | ✅ | project-copy-keyboard |
| 数据源设置 Modal | 打开首焦 / Esc / Tab trap | 首焦「新增数据源」;Esc 归还「项目菜单」;焦点不逃出 dialog | ADR-0016 键盘弹层 | ✅ | database-setup-keyboard |
| 默认项设置 Modal | 打开首焦 / Esc / Tab trap | 首焦「默认字段」Tab;Esc 归还「项目菜单」;焦点不逃出 dialog | ADR-0016 键盘弹层 | ✅ | default-setup-keyboard |
| 数据源逆向解析 Modal | 打开首焦 / Esc / Tab trap | 首焦「数据源」Select ;Esc 归还「项目菜单」;焦点不逃出 dialog | ADR-0016 键盘弹层 | ✅ | reverse-database-keyboard |
| 导出DDL Modal | 打开首焦 / Esc / Tab trap | 首焦「数据源」Select;Esc 归还「项目菜单」;焦点不逃出 dialog | ADR-0016 键盘弹层 | ✅ | export-ddl-keyboard |
| 解析ERD文件 Modal | 打开首焦 / Esc / Tab trap | 首焦上传区「选择ERD文件」;Esc 归还「项目菜单」;焦点不逃出 dialog | ADR-0016 键盘弹层 | ✅ | reverse-erd-keyboard |
| 解析PdMan文件 Modal | 打开首焦 / Esc / Tab trap | 首焦上传区「选择PdMan文件」;Esc 归还「项目菜单」;焦点不逃出 dialog | ADR-0016 键盘弹层 | ✅ | reverse-pdman-keyboard |
| 修改密码 Modal | 打开首焦 / Esc / Tab trap | 首焦「密码」;Esc 归还触发器;焦点不逃出 dialog | ADR-0016 键盘弹层 | ✅ | reset-password-keyboard |
| 修改密码失败 | 业务码失败 / 重试 | toast 可读;失败不关窗;重试成功关窗;不叠弹 | 零静默失败 | ✅ | reset-password-failure |
| 同步配置失败 | 业务码失败 / 重试 | 仅 code===200 写 store+「设置成功」关窗;失败 toast 可读;不关窗可重试 | 零静默失败 | ✅ | sync-config-failure |
| 默认项设置失败 | 业务码失败 / 重试 | 仅 code===200 写 store+「设置成功」关窗;失败 toast 可读;不关窗可重试 | 零静默失败 | ✅ | default-setup-failure |
| 数据源设置确定失败 | 业务码失败 / 重试 | 仅 PUT 成功「保存成功!」关窗;失败 toast 可读;不关窗可重试 | 零静默失败 | ✅ | database-setup-failure |
| EntityModal 落盘失败 | 业务码失败 / 重试 | 仅 save code===200 写 store+toast+关窗;失败 toast 可读;不关窗可重试 | 零静默失败 | ✅ | entity-modal-failure |
| 画布关系图弹层落盘失败 | 业务码失败 / 重试 | 仅 save code===200 写 store+toast+关窗;失败 toast 可读;不关窗可重试 | 零静默失败 | ✅ | diagram-modal-failure |
| 画布表头改名落盘失败 | 业务码失败 / 重试 | 仅 save code===200 写 store+退出编辑;失败 toast 可读;草稿/节点 id 保留可重试 | 零静默失败 | ✅ | table-rename-failure |
| 画布建表/行内加字段落盘失败 | 业务码失败 / 重试 | 仅 save code===200 上图/关新建编辑;失败 toast;无节点或草稿可重试;空名 toast/空字段 CTA 保留 | 零静默失败 | ✅ | canvas-create-field-failure |
| 画布字段改名/删字段落盘失败 | 业务码失败 / 重试 | 仅 save code===200 退出编辑/移出行;失败 toast;改名草稿保留;删确认窗 keep(reject)可再删 | 零静默失败 | ✅ | canvas-field-rename-delete-failure |
| 画布删表落盘失败 | 业务码失败 / 重试 | 仅 save code===200 移出+「表删除成功」;失败 toast;节点保留;删确认窗 keep(reject)可再删 | 零静默失败 | ✅ | canvas-delete-table-failure |
| 左树删模型/关系图落盘失败 | 业务码失败 / 重试 | 仅 save code===200 移出+成功 toast;失败 toast;树/表保留;删确认窗 keep(reject)可再删 | 零静默失败 | ✅ | tree-delete-module-diagram-failure |
| 左树剪切/粘贴表落盘失败 | 业务码失败 / 重试 | 仅 save code===200 写剪贴板与移出/写入+成功 toast;失败 toast;无副本或表保留;可重试;复制不落盘 | 零静默失败 | ✅ | tree-cut-paste-failure |
| 画布拖表坐标落盘失败 | 业务码失败 / 重试 | commitDiagramGeometry 仅 save code===200 写 layout;失败 toast;RF transform 回滚可再拖 | 零静默失败 | ✅ | canvas-drag-reposition-failure |
| 画布对齐/自动布局落盘失败 | 业务码失败 / 重试 | alignSelected/autoLayout→commitDiagramGeometry;失败 toast;RF 回滚可再点 | 零静默失败 | ✅ | canvas-align-layout-failure |
| Frame 改名/适应成员落盘失败 | 业务码失败 / 重试 | renameFrame/commitDiagramGeometry persist;失败 toast;改名草稿保留;适应成员 RF+store 回滚;可重试 | 零静默失败 | ✅ | canvas-frame-rename-bounds-failure |
| Frame 新建/成员加减落盘失败 | 业务码失败 / 重试 | createFrame/addFrameMembers/removeFrameMembers persist;失败 toast;不上图/成员不变;加入拒关窗;可重试 | 零静默失败 | ✅ | canvas-frame-members-failure |
| 画布连线建关联落盘失败 | 业务码失败 / 重试 | addAssociation persist;失败 toast;不上边;可再拖重试 | 零静默失败 | ✅ | canvas-connect-edge-failure |
| 画布改边基数落盘失败 | 业务码失败 / 重试 | updateAssociationRelation persist;失败 toast;chip 保持原基数;可再选重试 | |