Skip to content

DrawerFormPage 抽屉表单 ​

把 SchemaForm 放进抽屉,用于新增、编辑和查看。推荐通过 useDrawerFormPage 打开。

抽屉里可以放下所有表单控件:输入、选择、上传、富文本、多语言翻译、插槽和自定义组件。顶部全屏、分区锚点和底部操作栏都是抽屉自己的能力。

基础用法 ​

useDrawerFormPage 返回 [Drawer, api]。把 Drawer 放进模板,用 api.open() / api.close() 控制。

全量控件 ​

一份 schema 覆盖当前所有字段类型,并带上分组锚点、组合控件、字段显隐、上传、富文本翻译、评分插槽、主题色自定义组件,以及自定义底部按钮。

完整字段定义在 docs/components/demos/drawer-form-schema.ts。

分区用到的能力
基本信息text、number、switch、字典 radio / select、async-select、hideOnCreate
售卖单位非锚点 group,一个 label 下并排两个 select
展示与选项checkbox、date、datetime、注册的 component(颜色)、slot(评分)
链接与联动hidden / required / disabled 随类型变化
媒体与附件picture 单图和多图、file、upload
详情textarea、rich-text + translateConfig

新增、编辑与查看 ​

同一份 schema,打开时传入不同 mode。查看模式自动只读,提交按钮隐藏,列数固定为两列。

ts
api.open({ mode: 'create', title: '新增商品', values: {} });
api.open({ mode: 'edit', title: '编辑商品', values: row });
api.open({ mode: 'view', title: '商品详情', values: row });

字段联动 ​

hidden、disabled、required、options、props 都可以是函数,读取当前 mode 和全量表单值。

控件类型 ​

type渲染说明
textElInput带 clearable
textareaElInput多行
numberElInputNumber数字
selectAsyncSelect静态 options 或 dictCode
radioElRadioGroup同上
checkboxElCheckboxGroup值为数组
switchElSwitch开关
date / datetimeElDatePickerYYYY-MM-DD / 带时分秒
picturePictureUpload单图或多图,配置走 props
file / uploadFileUpload附件
async-selectAsyncSelectapiOptions.entityKey 对应 registerEntity
rich-textRichTextEditor可叠加 translateConfig
slot自定义插槽名等于 prop
component注册组件先 registerSchemaFormComponents
group容器anchor: true 时成为抽屉分区

抽屉自身能力 ​

能力怎么用
打开 / 关闭api.open(options)、api.close()
全屏默认显示按钮,或 api.toggleFullscreen()
分区导航分组设置 anchor: true
校验 / 取值api.validate()、api.getValues()、api.setValues()
自定义底部#footer="{ cancel, submit, submitting }"
自定义字段#字段prop,参数为 { field, value, disabled, updateValue }
提交中锁操作submitting: true 时禁用关闭和按钮

open 时传入的 title、mode、schema、values 会覆盖 hook 的默认值。

Props ​

名称类型默认值说明
titlestring''抽屉标题
modelValuebooleanfalse抽屉显隐,支持 v-model
breadcrumbstring—标题上方路径文字
mode'create' | 'edit' | 'view''create'表单模式
schemaSchemaFormItem[][]字段元数据
formValuesRecord{}表单值
sizenumber | string'560px'非全屏宽度
direction'rtl' | 'ltr' | 'ttb' | 'btt''rtl'打开方向
fullscreenButtonbooleantrue是否显示全屏按钮
fullscreenbooleanfalse初始是否全屏
normalColumnsnumber跟随 schemaFormProps.columns常规列数
fullscreenColumnsnumber至少 3 列全屏列数
showFooterbooleantrue底部操作栏
showCancelButtonbooleantrue取消按钮
showSubmitButtonbooleantrue查看模式默认仍会隐藏
cancelText / submitTextstring'取消' / '确定'按钮文案
statusTextstring按 mode 生成标题右侧状态
loadingbooleanfalse内容加载
submittingbooleanfalse提交中
disabledbooleanfalse整表禁用
schemaFormProps布局属性{}透传给 SchemaForm
destroyOnClosebooleanfalse关闭后是否销毁内容
closeOnClickModalbooleantrue点击遮罩是否关闭
closeOnPressEscapebooleantrueEsc 是否关闭
appendToBodybooleantrue是否挂载到 body
lockScrollbooleantrue是否锁定页面滚动
drawerPropsRecord<string, any>{}透传给 ElDrawer

Events ​

名称参数说明
update:modelValuevisible抽屉显隐变化
update:formValuesvalues表单值变化
update:fullscreenfullscreen全屏状态变化
submitvalues校验通过后提交
cancel / open / closed—取消、打开、关闭完成

Slots ​

名称插槽参数说明
header{ fullscreen, title, toggleFullscreen }自定义头部
footer{ cancel, submit, submitting }自定义底部
default—追加到表单后的正文
{fieldProp}{ field, value, disabled, updateValue }自定义字段

暴露方法 ​

ts
api.open({ mode: 'edit', title: '编辑', values: row });
api.close();
api.toggleFullscreen();
await api.validate();
api.getValues();
api.setValues({ name: '新名称' });
await api.submit();