Skip to content

9 种页面模板

page-codegen Skill 支持 9 种页面模板,每种模板对应一个独立的 TPL-*.md 文件,AI 会根据 page-spec 中的 pattern 自动选择对应模板生成代码。

模板总览

模板模式说明data.ts 模式
TPL-LISTLIST查询 + 工具栏 + 表格 + 分页AbstractPageQueryHook
TPL-FORM-ROUTEFORM_ROUTE复杂表单(多 Tab、多子表)独立路由useXxx Composable
TPL-MASTER-DETAILMASTER_DETAILjh-drag-row 上下分栏主从表AbstractPageQueryHook + createBottomPage
TPL-TREE-LISTTREE_LISTC_Splitter 左树 + 右列表AbstractPageQueryHook
TPL-DETAIL-TABSDETAIL_TABS上方 Tab 表单 + 下方子表直接导出 reactive + ref
TPL-CHANGE-HISTORYCHANGE_HISTORY左变更时间线 + 右字段比对composable + mock
TPL-RECORD-FORMRECORD_FORM查询 + 表单录入(无分页)直接 ref + 函数
TPL-OPERATION-STATIONOPERATION_STATION待处理 + 已处理联动操作多个 createXxxPage
TPL-DRIVENTEMPLATE_DRIVEN配置驱动模板识别参考仅 config 对象

LIST:标准列表页

最常见的页面模板,适用于标准 CRUD 列表场景。

布局:BaseQuery 查询区 + BaseToolbar 工具栏 + BaseTable 表格 + jh-pagination 分页

data.ts 结构

typescript
class XxxPage extends AbstractPageQueryHook {
  queryDef(): BaseQueryItemDesc[] { /* 查询字段配置 */ }
  toolbarDef(): ActionButtonDesc[] { /* 工具栏按钮配置 */ }
  columnsDef(): TableColumnDesc[] { /* 表格列配置 */ }
}

生成文件

[kebab-name]/
  index.vue     纯模板 + createPage 解构
  data.ts       AbstractPageQueryHook 子类
  index.scss    样式
  api.md        接口约定

FORM_ROUTE:复杂表单独立路由

复杂表单(多 Tab、多子表)使用独立路由而非弹窗。

特点

  • data.ts 不继承 AbstractPageQueryHook,改为导出 useXxx Composable
  • 需在 pages.ts 单独注册路由
  • 支持 add/edit/view 三种模式
  • 内置 router.back() 返回上级列表

MASTER_DETAIL:主从表页

上方主表 + 下方明细表,使用 jh-drag-row 上下分栏拖拽组件。

布局:jh-drag-row 包裹上下两个区域

  • 上区:主表(查询 + 工具栏 + 表格 + 分页)
  • 下区:从表(表格 + 分页)

交互:双击主表行 -> 加载从表数据

data.ts 额外导出createPage + createBottomPage + handleRowDblclick

TREE_LIST:左树右列表

左侧树形面板 + 右侧列表,使用 C_Splitter 左右分割组件。

布局:C_Splitter 包裹左右两个区域

  • 左区:C_Tree(含搜索 + Tab 切换)
  • 右区:标准列表(查询 + 工具栏 + 表格 + 分页)

交互:点击树节点 -> 过滤右侧列表数据

DETAIL_TABS:详情 Tab + 子表页

上半区为多 Tab 表单(基本信息/客户信息/其他信息),下半区为子项表格。

布局C_Splitter direction="vertical" 垂直分割

  • 上区:el-card 包裹页头工具栏 + el-tabs 表单区
  • 下区:子表表格

data.ts:直接导出 reactive + ref(不用 AbstractPageQueryHook)

CHANGE_HISTORY:变更历史查询

左侧为变更历史时间线列表,右侧为变更详情(复用业务域组件,view 模式只读)。

识别规则

  • 左窄右宽双栏布局
  • 左侧为时间线/历史记录列表(含彩色圆点 + 类型 + 时间 + 人员)
  • 右侧为详情区域(只读 view 模式)
  • 页面为隐藏菜单,由表单页跳转而来

data.tsuseChangeHistory composable + mock 数据

RECORD_FORM:录入型实绩页

通过 BaseQuery 选定主记录(如炉号、生产计划号),展示可编辑的 BaseForm 字段区 + BaseTable 明细行,无分页

典型场景:生产域实绩录入(转炉实绩、精炼实绩、连铸实绩等)

识别规则

  • 顶部 BaseQuery 仅用于"选择主记录"(1-3 个字段)
  • 中部 BaseForm(editable),随查询结果填充
  • 底部 BaseTable(明细行),无分页
  • c_spliterTitle 将表单字段按业务分区

data.ts:直接导出 ref + 函数(Composable 风格,不用 AbstractPageQueryHook)

OPERATION_STATION:工序操作站

生产域工序操作页,有"待处理清单"与"已完成清单"两个联动表格,选中行后填写操作表单执行动作。

识别特征

  • 双清单联动:待处理/已处理两个列表,共享同一套查询条件
  • 操作表单内联:表单字段直接展示在页面操作区域(非弹窗)
  • 条件按钮:主操作按钮的 disabled 状态取决于选中行 + 表单字段
  • 状态切换:执行操作后两个清单同时刷新

data.ts:导出多个 createXxxPage(),不使用 c_formModal

此模板 index.vue 包含大量业务逻辑(computed、watch、多列表协调),不同于标准模板的薄 index.vue 风格。

TEMPLATE_DRIVEN:配置驱动模板

识别参考

本模板为识别参考,不是代码生成模板。配置驱动页面已由现有业务模板组件封装,AI 只需生成 config 配置对象

页面的 index.vue 极为简单(1-3 行),所有业务逻辑由模板组件内部处理:

vue
<template>
  <div class="app-container app-page-container">
    <XxxTemplate :config="xxxConfig" />
  </div>
</template>

data.ts 只需导出一个 config 对象。

领域样例

wl-skills-kit 内置 13 个真实领域样例页面,供 AI 学习和开发参考:

生产域(8 页)

  • mmwr-customer-archive — LIST + Tabs + c_formModal
  • mmwr-temp-customer-archive — LIST
  • mmwr-customer-apply-add — LIST
  • mmwr-customer-apply-add-form — FORM_ROUTE
  • mmwr-customer-apply-change — LIST
  • mmwr-customer-apply-change-form — FORM_ROUTE
  • mmwr-customer-apply-change-history — CHANGE_HISTORY
  • mmwr-customer-detail — DETAIL_TABS

销售域(5 页)

  • domestic-trade-order — LIST 标准列表
  • metallurgical-spec — MASTER_DETAIL 上下分栏
  • add-demo — FORM_ROUTE 表单页
  • billet-flame-cut-plan — LIST 变体
  • heat-batch-return — LIST + 自定义弹窗

You may not distribute, modify, or sell this software without permission.