type
Post
status
Published
date
Jan 16, 2026
slug
summary
tags
Vue
category
技术分享
password
说在前面:
前端业务开发离不开的一个业务场景:自定义表单、表格,目的是为了将“数据逻辑”与“视图表现”解耦,实现高效率的复用。本组件基于Vue3框架 + Ant Design Vue进行深度封装。
🖼️ 样式案例

🔑 核心代码
Type类型
DataForm表单封装
核心代码作用深度解析
A. 配置驱动 (Schema-Driven)
核心点: 模板中使用了大量的
v-if="item.type === 'xxx'"。
作用: 将表单的“样子”转化为“数据”。开发人员不再需要写繁琐的 HTML 标签,只需要维护一个 JSON 数组。这极大地提高了开发 CRUD 页面(增删改查)的速度。B. 联动逻辑处理 (isHide)
核心点:
hide 属性可以是一个函数:hide: (model) => model.role !== 'admin'。
作用: 实现了声明式联动。当用户修改表单某个值时,Vue 的响应式系统会触发 isHide 重新计算,从而自动显示或隐藏相关字段,无需手动编写复杂的监听逻辑。C. 自动取值与数据绑定 (dicData)
核心点: 内部封装了
item.request 逻辑。
作用: 解决了表单下拉框数据源获取的痛点。它实现了“高内聚”,即:关于“性别”字段的所有逻辑(标签、字段名、数据来源、校验规则)都写在一个对象里,而不是散落在页面的 onMounted 和各个变量中。D. 插槽 (Slot) 的灵活性
核心点:
item.type === 'slot' 或 'formSlot'。
作用: 解决封装组件的“黑盒”问题。如果某个表单项非常特殊(例如需要嵌入一个复杂的图形验证码或地图选择器),通过插槽可以直接在父组件编写 HTML,兼顾了封装的高效性和自定义的灵活性。E. 嵌套字段支持
核心点:
model[item.field[0]][item.field[1]]。
作用: 处理了复杂的数据结构。例如后端需要 contact: { phone: '...' } 这种嵌套格式,该组件通过判断 field 是否为数组,实现了深层绑定,避免了手动在提交前组装数据的麻烦。DataTable表单封装
搜索条件持久化
深拷贝重置
结合前面提供的
DataTable 代码,deepClone 主要发挥了以下作用:- 搜索重置 (
onReset): 当你重置表单时,代码通过深拷贝恢复了searchForm的初始状态。如果没有深拷贝,你修改搜索框的内容时,可能会无意中修改了定义的“初始配置对象”,导致下次重置时无法回到最初的状态。这在 Vue 中经常会导致 bug(例如:表单修改了数据,但还没点保存,列表里的数据就跟着变了)。
- 配置隔离:
在
DataTable中,将父组件传入的extraButtons进行深拷贝后存入tableOper.extraButtons。这样,组件内部对按钮状态的逻辑处理(如动态显示/隐藏)不会污染到父组件传入的原始配置文件。
🏃 使用模板
- Author:Ashland
- URL:http://preview.tangly1024.com/article/2eacccc0-3782-80fb-a8d9-c8e4fc41d199
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!




