--- name: prototype-scan description: 'Use when: analyzing Axure exported HTML prototype files or detailed design documents to extract page inventory, classify interaction patterns, and produce a structured page-spec JSON for Vue 3 + Naive UI development. Triggers on: prototype analysis, axure scan, page inventory, 原型解析, 页面清单, axure转vue, 详设文档, design doc.' --- # Skill: 原型解析(prototype-scan) 将 **Axure 导出的 HTML 原型包** 或 **详细设计文档(MD/Word/表格)** 解析为结构化的 **page-spec JSON 页面清单**,作为后续接口约定和代码生成的输入。 > **两种输入,同一输出**:输出格式完全相同(page-spec JSON),消费方(page-codegen)无需感知来源。 --- ## 触发 - **模式 A(Axure)**:提供 Axure HTML 文件包目录,AI 全量扫描 HTML - **模式 B(详设文档)**:提供 MD/Word/表格格式的详细设计文档,AI 解析结构化字段 --- ## 步骤 ### 1. 全量扫描 HTML(模式 A) 遍历所有 `.html` 文件,提取: | 区域 | 提取内容 | | ---- | ------------------------------------------------------ | | 标题 | `` / 标题文本 → 页面名称 | | 表格 | `<table>` / 网格布局 → 表格列定义 | | 表单 | `<input>` / `<select>` / 标签文本 → 查询条件和表单字段 | | 按钮 | `<button>` / 链接文本 → 操作按钮列表 | | 弹窗 | 遮罩层 / 弹出层 → 弹窗组件 | | 树形 | 侧边栏 / 树形导航 → 树形结构 | | 注释 | Axure 注解 → 业务说明 | ### 2. 解析详设文档(模式 B) 从 MD/Word/表格中提取: - 每个页面的功能描述 - 字段列表(中文名 + 类型 + 必填 + 校验规则) - 接口 URL 约定 - 按钮/操作定义 - 业务流程说明 ### 3. 交互模式分类 | 模式 | 特征 | Robot Admin 组件 | | --------------- | ---------------------------- | -------------------------------------- | | `LIST` | 查询区 + 表格 + 分页 | C_Form(search) + C_Table + C_ActionBar | | `MASTER_DETAIL` | 上方主表 + 下方明细表 | C_SplitPane + 两个 C_Table | | `TREE_LIST` | 左侧树 + 右侧表格 | C_SplitPane + C_Tree + C_Table | | `FORM_PAGE` | 独立表单页面(多Tab/多字段) | C_Form(tabs/steps) + 独立路由 | | `FORM_MODAL` | 弹窗中的表单 | NModal + C_Form | | `DETAIL_TABS` | 详情页 + 子表Tab | NTabs + 多个 C_Table | | `DASHBOARD` | 数据大屏/统计面板 | ECharts + NGrid + NStatistic | | `COMPOSITE` | 多种组合 | 组合使用 | ### 4. 字段提取 对每个页面提取 3 类字段(字段名建议 camelCase): **查询字段:** ``` 中文名 | 建议字段名(camelCase) | 组件类型 | 备注 ``` 组件类型对照(C_Form options 中使用): | 原型表现 | type 值 | 备注 | | ---------- | ------------- | ------------------- | | 普通输入框 | `input` | 默认类型 | | 下拉选择 | `select` | 配 options 选项数据 | | 单日期 | `date` | — | | 日期范围 | `daterange` | — | | 月份选择 | `month` | — | | 数字输入 | `inputNumber` | — | | 开关 | `switch` | — | | 级联选择 | `cascader` | — | | 树选择 | `treeSelect` | — | **表格列:** ``` 列名(中文) | 字段名(camelCase) | 宽度建议 | 是否可排序 | 渲染方式(tag/text/custom) ``` **表单字段(弹窗/独立页面):** ``` 中文名 | 字段名(camelCase) | 类型 | 是否必填 | 校验规则 | 组件类型 ``` ### 5. 按钮提取 **工具栏按钮(C_ActionBar):** ``` 按钮标签 | 类型(primary/default/error/warning) | 图标 | 权限码(可选) ``` **操作列按钮:** ``` 按钮标签 | 类型 | 条件显示(show函数描述) | 权限码(可选) ``` > ⚠️ **注意事项**: > > - Axure HTML DOM 顺序 ≠ 视觉顺序(绝对定位),以截图/实际渲染为准 > - 按钮颜色必须看原型实际颜色:primary=蓝, error=红, warning=橙 > - "新增"类按钮永远排 toolbarActions 第一个 > - 操作列按钮严格与原型一一对应,不可自编 ### 6. 组件匹配 对照 Robot Admin 已有组件: | 功能区 | 组件 | 来源 | | ---------- | ---------------------- | -------------------------------- | | 查询表单 | C_Form | @robot-admin/naive-ui-components | | 操作工具栏 | C_ActionBar | @robot-admin/naive-ui-components | | 数据表格 | C_Table | @robot-admin/naive-ui-components | | 图标 | C_Icon | @robot-admin/naive-ui-components | | 分割面板 | C_SplitPane | @robot-admin/naive-ui-components | | 树形面板 | C_Tree | @robot-admin/naive-ui-components | | 折叠面板 | C_CollapsePanel | @robot-admin/naive-ui-components | | 步骤表单 | C_Form(steps layout) | @robot-admin/naive-ui-components | | Tab 表单 | C_Form(tabs layout) | @robot-admin/naive-ui-components | | 文件上传 | C_Upload | @robot-admin/naive-ui-components | | 签名 | C_Signature | @robot-admin/naive-ui-components | | 弹窗 | NModal / NDrawer | naive-ui | | 分页 | 内置于 C_Table | — | | 消息通知 | useMessage / useDialog | naive-ui | --- ## 输出格式:page-spec JSON ```json { "module": "模块中文名", "pages": [ { "name": "kebab-case-页面名", "title": "页面中文标题", "path": "src/views/[domain]/[module]/[kebab-case-name]/", "mode": "LIST | MASTER_DETAIL | TREE_LIST | FORM_PAGE | FORM_MODAL | DETAIL_TABS | DASHBOARD | COMPOSITE", "routeMeta": { "title": "菜单中文名", "icon": "mdi:icon-name", "keepAlive": true }, "query": [ { "label": "字段中文名", "prop": "fieldName", "type": "input | select | date | daterange | ...", "options": "选项数据说明(如有)", "rules": "校验规则说明(如有)" } ], "columns": [ { "title": "列标题", "key": "fieldName", "width": 120, "sortable": true, "render": "tag | text | custom", "tagMap": { "值": "success | warning | error | info" } } ], "toolbar": [ { "label": "新增", "type": "primary", "icon": "mdi:plus", "permission": "sys:xxx:add" } ], "operations": [ { "label": "编辑", "type": "primary", "show": "条件描述", "permission": "sys:xxx:edit" } ], "form": [ { "label": "字段中文名", "prop": "fieldName", "type": "input | select | ...", "required": true, "rules": "PRESET_RULES.xxx" } ], "subTables": [ { "title": "子表名称", "apiSuffix": "queryXxxList", "columns": [] } ], "notes": "业务备注/特殊逻辑说明" } ] } ``` --- ## 输出后流转 ``` page-spec JSON ├─→ api-contract SKILL → 生成 TypeScript 请求/响应契约与 API 函数 ├─→ page-codegen SKILL → 生成 index.vue + data.ts + index.scss └─→ route-sync SKILL → 注册到 dynamicRouter.json ``` > **注意**:page-spec 是后续所有 Skill 的唯一输入源,确保数据准确完整。