Skip to content

详情 SuperDetail

SuperDetail 使用与表单、表格相同的字段 Schema 渲染只读详情。它会复用字段路径、字典映射、关联字段、Tag、范围和自定义展示,因此无需再维护一份“详情专用文案逻辑”。

两种使用方式

声明式

vue
<SuperDetail :schema="detailSchema" :data-source="record" />

适合数据由父组件控制的详情页。

注册模式

vue
<SuperDetail @register="register" />

<script setup lang="ts">
import { SuperDetail, useDetail } from "antdv-superform";

const [register, detail] = useDetail(detailSchema, initialData);
detail.setData(record);
</script>

Schema 可以是对象、函数或 Promise;需要在同一详情实例中切换记录时使用 setData()

根配置

ts
import { defineDetail } from "antdv-superform";

const detailSchema = defineDetail({
  title: "用户信息",
  mode: "table",
  subSpan: 12,
  attrs: {
    bordered: true,
    labelAlign: "right",
  },
  buttons: {
    visibleIn: "detail",
    actions: [{ label: "返回", onClick: () => router.back() }],
  },
  subItems: [],
});
属性类型默认值作用
subItemsarray必填详情字段和嵌套容器
dataSourceobject/Ref{}当前详情对象
titlestring/function页面或分组标题
modestring'default'defaulttableform
attrsobject{}Descriptions 与详情布局属性
subSpannumber/string12详情项默认栅格
gutternumber16栅格间距
rowPropsobject{}Row 属性
buttonsarray/object详情操作按钮
isContainerbooleanfalse页面容器样式

字段可以省略 type,此时直接展示值。使用 exclude: ['description'] 排除详情字段。

三种布局模式

模式特点适合场景
default标准 Descriptions 布局常规键值详情
table分组按表格式结构展示对齐要求高、分组较多
form接近表单 label/control 布局查看态与编辑态需要视觉一致
ts
// 标准两列详情
{ mode: 'default', subSpan: 12, attrs: { bordered: true } }

// 表单式详情
{
  mode: 'form',
  attrs: {
    labelCol: { span: 6 },
    wrapperCol: { span: 18 },
    noInput: false,
  },
}

ExtDescriptionsProps 细节

属性类型默认值说明
modestring'default'当前详情布局模式
wrapperColobject继承布局内容列属性;传空对象可清空继承值
labelColobject继承布局标签列属性;传空对象可清空继承值
labelAlignstringleftcenterright
tableLayoutstring'auto'表格式分组的 fixed / auto
noInputbooleanfalseform 模式不使用输入框风格包裹内容
spannumber当前详情项跨度
subSpannumber/string12内部默认栅格
gutternumber16内部栅格间距
rowPropsobject{}内部 Row 属性
其他属性object组件默认值传给 Ant Design Vue Descriptions

attrs 用于详情根;字段或容器的 descriptionsProps 用于局部覆盖:

ts
{
  type: 'Group',
  title: '审计信息',
  descriptionsProps: {
    mode: 'table',
    tableLayout: 'fixed',
    subSpan: 12,
  },
  subItems: [],
}

字段展示优先级

  1. viewRender 自定义显示。
  2. labelField 关联文本。
  3. endField 范围组合。
  4. options / dictName 值到标签映射和 tagViewer
  5. Upload 或 Ext* 组件的 isView: true 模式。
  6. 默认文本值。
ts
subItems: [
  { field: "departmentId", label: "部门", labelField: "departmentName" },
  { field: "startDate", endField: "endDate", label: "有效期" },
  { field: "status", label: "状态", dictName: "status" },
];

详细映射见渲染与插槽

当前数据更新

ts
const [register, detail] = useDetail(schema, firstRecord);

// 之后切换记录
detail.setData(nextRecord);

声明式模式则直接更新 dataSource。需要注意:详情数据用于读取,不提供表单式 setFieldsValueresetFields 语义。

完整效果见详情示例

基于 MIT 许可发布