Skip to content

表单模式与 Props 透传

表单显示模式

CrudForm 支持两种显示模式,通过 displayMode 属性控制:

模式说明适用场景
modal(默认)弹出模态框字段较少的表单
drawer从右侧滑出抽屉字段较多、需要更大空间

在 AutoCrud 中使用

AutoCrud 通过 formMode prop 控制(仅支持 modaldrawer):

vue
<!-- 默认 modal -->
<AutoCrud :adapter="adapter" :fields="fields" :columns="columns" />

<!-- 使用 drawer -->
<AutoCrud :adapter="adapter" :fields="fields" :columns="columns" form-mode="drawer" />

单独使用 CrudForm

直接使用 CrudForm 时可以使用 modal / drawer 两种模式:

vue
<CrudForm
  v-model:visible="formVisible"
  :form="form"
  :fields="fields"
  display-mode="drawer"
/>

禁用默认操作

AutoCrud 会根据 adapter 的方法自动生成操作按钮。你可以通过 disable* props 关闭特定操作:

vue
<AutoCrud
  :adapter="adapter"
  :fields="fields"
  :columns="columns"
  disable-create
  disable-export
/>
Prop默认值说明
disableCreatefalse隐藏"新增"按钮
disableEditfalse隐藏行"编辑"按钮
disableDeletefalse隐藏行"删除"按钮
disableExportfalse隐藏"导出"按钮

TIP

这些 props 只控制 AutoCrud 自动生成的默认操作。如果你通过 actions prop 传入了自定义操作,它们不受这些开关影响。

Props 透传

@uozi/vito-naive-ui 的组件支持将 props 透传给底层 Naive UI 组件,让你在不脱离 AutoCrud 的前提下精细控制 UI 行为。

tableProps

透传给 NDataTable

vue
<AutoCrud
  :adapter="adapter"
  :fields="fields"
  :columns="columns"
/>

单独使用 CrudTable 时:

vue
<CrudTable
  :list="list"
  :columns="columns"
  :table-props="{ bordered: true, striped: true, size: 'small' }"
/>

paginationProps

透传给 NPagination,可在 AutoCrudCrudTable 上使用:

vue
<AutoCrud
  :adapter="adapter"
  :fields="fields"
  :columns="columns"
  :pagination-props="{ pageSizes: [20, 50, 100, 200] }"
/>

formProps

透传给 NForm,可在 CrudFormCrudSearch 上使用:

vue
<CrudForm
  :form="form"
  :fields="fields"
  :form-props="{ labelPlacement: 'top', labelWidth: 'auto' }"
/>

modalProps / drawerProps

透传给 NModalNDrawer,仅在 CrudForm 上使用:

vue
<!-- Modal 模式 -->
<CrudForm
  :form="form"
  :fields="fields"
  :modal-props="{ maskClosable: false, style: { width: '600px' } }"
/>

<!-- Drawer 模式 -->
<CrudForm
  :form="form"
  :fields="fields"
  display-mode="drawer"
  :drawer-props="{ width: 500 }"
  :drawer-content-props="{ closable: true }"
/>

AutoCrud 中的 Props 透传

AutoCrud 直接支持 paginationProps。对于 formPropsmodalPropstableProps 等更细粒度的透传,你可以通过 slot 接管对应区域后自行传递:

vue
<AutoCrud :adapter="adapter" :fields="fields" :columns="columns">
  <template #table="{ list, columns: cols, selection, rowKey }">
    <CrudTable
      :list="list"
      :columns="cols"
      :selection="selection"
      :row-key="rowKey"
      :table-props="{ bordered: true }"
    />
  </template>
</AutoCrud>

或者采用 Hooks 组合模式,获得完全的控制权。

标题自定义

CrudFormtitle 支持字符串或函数:

vue
<!-- 固定标题 -->
<CrudForm :form="form" :fields="fields" title="用户信息" />

<!-- 根据模式动态标题 -->
<CrudForm
  :form="form"
  :fields="fields"
  :title="(mode) => mode === 'create' ? '新建用户' : '编辑用户'"
/>

不传 title 时,默认根据模式显示"新增"或"编辑"。

Made with VitePress