项目中简单封装vue3+element-plus表单

本文介绍了作者模仿avue开发的自定义前端组件vep-crud,该组件支持动态渲染表格和表单,提供CRUD功能,包括数据展示、增删改查,以及详细的属性配置和事件处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

  对于前端来说,在项目中,怎么简单怎么来,所以大佬们封装了一系列的插件与组件,avue就是一个很好的例子,但avue毕竟是别人公司封装的组件框架,自己不能改动加功能逻辑啊,头疼的很,所以我自己初步模仿avue编写代码的方式搭了一个围绕表格的框架组件。
  封装后的表单组件可以便捷地在项目中复用和扩展;实现动态渲染表单组件,包括输入框、选择器、开关、日期等;

在这里插入图片描述

自定义表单框架【vep-crud

  由于框架整体比较大,现在处于搭建初期,只粗略编写常用的功能及属性;其它后期持续完善
  vep:vite+ts项目:vue3 + element-plus

crud属性文档

  组件具体属性,见element-plus文档,我只编写项目中的一小部分

crud
参数说明类型可选值默认值
data显示的数据array--
option表单配置项object--
before-open打开前的回调,用于区别弹窗的异处或发送详情请求获取数据function-(type, row)=>{}
v-model:page分页变量object--
option
参数说明类型可选值默认值
height表格的高度,默认为自动高度string-100%
size表格大小string‘’ 、‘large’ 、‘default’ 、‘small’-
border是否带有纵向边框boolean-false
stripe是否有斑马纹boolean-false
index是否有序号boolean-false
indexWidth序号列宽度number-60
indexFixed序号列是否冻结列 ,true 表示固定在左侧boolean/stringtrue/left/righttrue
menu是否有操作栏boolean-false
menuWidth操作栏宽度number-280
menuLabel操作栏标题string-操作
menuFixed操作栏列冻结列 ,true 表示固定在左侧boolean/stringtrue/left/rightright
menuAlign操作栏按钮的对齐方式stringleft/center/rightcenter
selection是否有选择框boolean-false
emptyText空数据时显示文案string-暂无数据
defaultExpandAll是否默认展开全部boolean-false
highlightCurrentRow是否要高亮当前行boolean-false
rowKey行数据的 Key,用来优化 Table 的渲染string-id
reserveSelection在数据更新之后保留之前选中的数据(需指定 rowKey)boolean-false
flexible是否自适应boolean-true
search是否显示搜索boolean-false
drawerTitle弹窗标题后缀(如创建用户弹窗,drawerTitle:“用户”)string--
column表单列配置array--
page
参数说明类型可选值默认值
current显示的数据number-1
size每页显示条目个数number-10
total总条目数number-0
layout组件布局,子组件名用逗号分隔stringsizes, prev, pager, next, jumper, ->, total, slot-
pageSizes每页显示个数选择器的选项设置array-[10, 20, 30, 40]
background是否为分页按钮添加背景色boolean-true
Column - 共用属性
参数说明类型可选值默认值
label列标题string--
prop列标题的内容属性名称string--
width对应列的宽度string--
align对齐方式stringleft/center/rightleft
hide是否显示在表格中boolean-true
slot该列表格显示内容是否可自定义boolean-true
search该列是否可搜索boolean-true
formSlot该列对应的弹窗表单是否可自定义boolean-true
rules该列对应的弹窗表单校验规则array--
type对应列的类型string--
display对应列在所有弹窗表单是否显示boolean-true
addPlay对应列在新增弹窗表单是否显示boolean-false
editPlay对应列在编辑弹窗表单是否显示boolean-false
viewPlay对应列在查看弹窗表单是否显示boolean-false
span对应列在弹窗表单宽度number-24
disabled对应列弹窗表单是否是否禁用boolean-false
size对应列表单输入框尺寸string‘large’ 、‘default’ 、‘small’default
placeholder对应列输入框占位文本string--
clearable对应列输入框是否可清空boolean-false
Column - input
参数说明类型可选值默认值
maxlength该列对应的弹窗表单限制长度number--
minlength该列对应的弹窗表单限制长度number--
showWordLimit该列对应的弹窗表单是否显示统计字数,boolean-fasle
showPassword对应列是否显示切换密码图标,仅对type=“password”生效boolean-false
rows对应列文本域高度number--
Column - number
参数说明类型可选值默认值
controls对应列是否使用控制按钮,仅对type=“number”生效,下同boolean-true
min对应列设置计数器允许的最小值number--Infinity
max对应列设置计数器允许的最大值number-Infinity
precision对应列计数器精度number--
position对应列控制按钮位置string‘’/right-
step对应列计数器步长number-1
Column - selete/ridao/tree
参数说明类型可选值默认值
filterable对应列选择器是否可过滤boolean-false
value对应列在弹窗表单默认值string--
dicData对应列的字典数据array--
dicUrl对应列的字典请求string--
props对应列的属性配置object-{ label:“label”,value:“value”}
Column - date
参数说明类型可选值默认值
disabledDate对应列是否禁用某天function--
format对应列显示值时间格式string--
valueFormat对应列真实值的时间格式string--
startPlaceholder对应列日期/时间范围开始占位符string--
endPlaceholder对应列日期/时间范围结束占位符string-
defaultTime对应列范围选择时选中日期所使用的当日内具体时刻string[]数组,长度为 2,每项值为字符串,形如12:00:00,第一项指定开始日期的时刻,第二项指定结束日期的时刻,不指定会使用时刻 00:00:00-
defaultValue选择器打开时默认显示的时间Date--
editable选择器是否可编辑boolean-false

Events

事件名称说明参数
size-change改变每页大小(size)=> {}
current-change改变当前页数(current)=> {}
selection-change当选择项发生变化时会触发该事件(selection)=> {}
search-change点击搜索后触发该事件(param)=> {}
search-reset清空搜索回调方法-
before-open打开前的回调(type,form)=> {}
row-save新增数据后点击确定触发该事件(form)=> {}
row-update更新数据后确定触发该事件(form)=> {}
on-load表格初始化获取数据-

Methods

事件名称说明参数
rowAdd打开表单新增窗口-
rowEdit打开表单编辑窗口(row)=> {}
rowView打开表单编辑窗口(row)=> {}
saveOrUpdate新增或编辑请求方式(api,row)=> {}
toggleRowSelection改变表格选框状态(row,status)=> {}
clearSelection清空用户的选择-

案例配置:(万物皆可自定义)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
封装组件中:
在这里插入图片描述

组件持续更新中…
🍭相关项目:https://gitee.com/csg4188/vvtep.git

### 创建基于 Vue 3Element Plus 的 CRUD 组件 创建一个功能齐全的 CRUD (Create, Read, Update, Delete) 组件涉及多个方面,包括数据获取、表单处理以及状态管理。下面是一个详细的指南来构建这样的组件。 #### 使用组合 API 构建响应式逻辑 Vue 3 推出了 Composition API 来替代 Options API,在编写复杂业务逻辑时提供了更好的灵活性和可读性[^1]: ```javascript import { ref } from &#39;vue&#39; // 定义初始数据结构 const items = ref([]) async function fetchItems() { const response = await fetch(&#39;/api/items&#39;) items.value = await response.json() } fetchItems() function addItem(item) { // 假设有一个 POST 请求用于新增项目 } function updateItem(id, updates) { // 更新特定 ID 对应的数据项 } function deleteItem(id) { // 删除指定 ID 的记录 } ``` #### 表格展示与分页支持 Element Plus 提供了丰富的 UI 组件库,其中 `el-table` 是用来显示表格化数据的理想选择。为了实现高效的页面加载体验,通常还需要加入分页控件: ```html <template> <div class="crud-container"> <!-- 数据列表 --> <el-table :data="items" style="width: 100%"> <el-table-column prop="name" label="Name"></el-table-column> <el-table-column fixed="right" width="200px"> <template slot-scope="scope"> <el-button @click="editRow(scope.row)">Edit</el-button> <el-popconfirm title="Are you sure?" @onConfirm="deleteRow(scope.$index)"> <el-button type="danger">Delete</el-button> </el-popconfirm> </template> </el-table-column> </el-table> <!-- 分页器 --> <el-pagination layout="prev, pager, next" :total="totalCount"></el-pagination> <!-- 新增/编辑对话框 --> <el-dialog v-model="dialogVisible" title="Form Title"> <el-form :model="formModel"> <el-form-item label="Name"> <el-input v-model="formModel.name"></el-input> </el-form-item> </el-form> <span slot="footer" class="dialog-footer"> <el-button @click="closeDialog()">Cancel</el-button> <el-button type="primary" @click="submitForm()">Submit</el-button> </span> </el-dialog> </div> </template> ``` #### 将操作封装成独立函数并优化用户体验 对于每一个基本的操作(增加、修改、删除),都应该定义相应的事件处理器,并考虑如何提升用户的交互感受。比如当执行成功后给出提示信息;失败情况下则捕获错误并向用户反馈具体原因。 通过上述方法可以有效地利用 Vue 3 及其生态系统中的工具和技术来开发高质量且易于维护的应用程序界面。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值