Skip to content

BizFormDialog 弹窗表单 ​

fields 配置驱动的新增 / 编辑二合一表单弹窗:8 类控件声明式渲染、24 栅格布局、required 自动规则、show / disabled 联动、提交 loading 契约(done())。与 BizSearchForm / BizTable 组成完整 CRUD 闭环。

mode="drawer" 可切换为右侧抽屉形态——不遮挡列表上下文、适合长表单,表单配置与校验完全一致。

表单渲染内核 BizFormBody 已下沉为公开包 BizForm(页面级 Schema 表单,字段方言为本组件的超集:BizFormField / BizFormFieldType 由其统一导出,旧字段配置完全兼容,另支持 datetime / time / cascader / checkbox / rate / slider)。

基础用法 ​

新增传空对象(走 defaultValue),编辑传行数据(自动回填);提交经 @submit(values, done),保存成功后由业务侧关闭弹窗。

抽屉形态 ​

mode="drawer" 从右侧滑出,fields / 校验 / 提交契约与弹窗完全一致;抽屉宽度用 size 透传(沿用 dialog 的 width 会被自动映射),其余 el-drawer 属性同样经 attrs 透传。

其他用法 ​

打开后试试:切换「是否加急」看联动显隐;切换「锁定级别」后紧急程度变为禁用。
附加校验规则(pattern / min)、show 联动显隐(加急字段)、函数式 disabled(锁定后禁选)、attrs 透传控件属性(maxlength / show-word-limit / precision)。

新增 / 编辑复用与字段联动 ​

切换「客户类型」观察统一信用代码显隐;打开「无需跟单」后跟单人禁用(值保留)。
客户录入场景:同一份 fields 弹新增 / 编辑;「客户类型」切企业时 show 联动出统一信用代码(必填),「无需跟单」开关经 disabled 函数联动禁用跟单人(值保留)。

实名认证正则校验 ​

实名场景:身份证 18 位正则、邮箱格式 rules、错误文案就地提示。

进销存多列布局 ​

建档场景:24 栅格混排——span 8 三列(类目 / 单位 / 规格)、span 12 两列(进价 / 售价)、textarea 整行。

默认值与编辑回填 ​

优先级场景:新增走 defaultValue(草稿 / 中 / 开通知),编辑以 :model 为准覆盖默认值——一次打开即可验证。

Props ​

属性名类型默认值说明
model-value / v-modelbooleanfalse弹窗显隐
titlestring''弹窗标题(新增 / 编辑由业务侧拼接)
fieldsBizFormField[][]表单字段配置
modelRecord<string, unknown>{}打开时的初始数据(内部浅拷贝,不污染外部)
confirm-textstring'确 定'确认按钮文案
cancel-textstring'取 消'取消按钮文案
label-widthstring | number'100px'表单标签宽度
mode'dialog' | 'drawer''dialog'弹层形态:dialog 居中弹窗 / drawer 右侧抽屉;抽屉宽度经 size 透传(width 自动映射)

BizFormField:

属性名类型必填说明
propstring是字段名(提交数据 key)
labelstring是标签
type'input' | 'textarea' | 'number' | 'select' | 'date' | 'datetime' | 'time' | 'daterange' | 'cascader' | 'switch' | 'radio' | 'checkbox' | 'rate' | 'slider' | 'slot'否控件类型,默认 'input'
spannumber否栅格占位(24 制,默认 12 两列)
default-valueunknown否默认值(新增时字段缺省回填)
options{ label, value, disabled?, children? }[]否选项(select / radio / cascader,cascader 子级经 children 嵌套)
requiredboolean否自动追加 required 规则(输入类 blur / 选择类 change)
rulesFormItemRule[]否附加校验规则(与 required 叠加)
placeholderstring否占位文案(默认按类型生成"请输入/请选择")
attrsRecord<string, unknown>否透传内部 el 控件属性(clearable / maxlength / rows / precision...),优先级高于预设
show(model) => boolean否联动显隐(返回 false 隐藏该字段)
disabledboolean | ((model) => boolean)否是否禁用(支持按当前表单值联动)

弹窗 / 抽屉属性经 v-bind="$attrs" 全量透传:dialog 形态透传 el-dialog(width / top / destroy-on-close / append-to-body...),drawer 形态透传 el-drawer(size / direction / with-header...),事件与插槽同理。

Events ​

事件名参数说明
submit(values: Record<string, unknown>, done: () => void)校验通过后触发;done() 结束确认按钮 loading,是否关弹窗由业务侧决定
update:model-value(value: boolean)v-model 显隐更新

Slots ​

插槽名说明
default追加在表单末尾的自定义内容(如提示条、协议勾选)

Expose ​

属性/方法说明
validate() => Promise<boolean> 主动校验
resetFields() => void 清除校验状态
formModel当前内部表单数据(只读快照用途)