# el-crud-table
**Repository Path**: lai_yingang/el-crud-table
## Basic Information
- **Project Name**: el-crud-table
- **Description**: 基于 vue3 + element-plus 构建的业务表格组件
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: https://www.npmjs.com/package/el-crud-table
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 1
- **Created**: 2022-10-10
- **Last Updated**: 2025-02-03
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# el-crud-table
基于 vue3 + element-plus 构建的业务表格组件
## 特性介绍
- 零件化,精细化控制,免去难以理解的配置化。内置 12 个功能组件(零件)!
- 只对 [element-plus](https://element-plus.gitee.io/zh-CN/guide/design.html) 做增强,没有任何侵入代码。
- 仅仅提供几个后端接口,就可以完成增删改查(接口返回需要有一些约定);加载、分页、搜索、新增、编辑就可以自动完成!
- 支持所有表单元素
## 使用
### 安装与引入
安装
- vue 版本必须 3.2+
- 安装 [element-plus](https://element-plus.gitee.io/zh-CN/guide/design.html)
```shell
// pnpm
pnpm add el-crud-table
// yarn
yarn add el-crud-table
```
全部引入
```js
// 引入element-plus
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/lib/theme-chalk/index.css'
import zhCn from 'element-plus/lib/locale/lang/zh-cn'
import ElementCrudTable from 'el-crud-table'
import 'el-crud-table/dist/style.css'
createApp(App).use(ElementPlus, { locale: zhCn }).use(ElementCrudTable).mount('#app')
```
按需引入
```js
// 引入element-plus
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/lib/theme-chalk/index.css'
import zhCn from 'element-plus/lib/locale/lang/zh-cn'
import { CrudTable, CrudTableData, CrudTablePagination } from 'el-crud-table'
import 'el-crud-table/dist/style.css'
createApp(App)
.use(ElementPlus, { locale: zhCn })
.use(CrudTable)
.use(CrudTableData)
.use(CrudTablePagination)
.mount('#app')
```
### 全局配置
在引入 CrudTable 时,可以传入一个全局配置对象。该对象目前支持 `requestMethod` 与 `requestKeys` 字段。`requestMethod` 用于改变组件的默认请求方法,`requestKeys` 设置请求结果的`key`(默认值:`{ dataKey: 'result', totalKey: 'total', pageKey: 'pageNo', sizeKey: 'pageSize' }`)。具体操作如下:
> requestKeys 可按需配置键名
**完整引入**
```js
// 引入element-plus
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/lib/theme-chalk/index.css'
import zhCn from 'element-plus/lib/locale/lang/zh-cn'
import ElementCrudTable from 'el-crud-table'
import 'el-crud-table/dist/style.css'
// 自定义请求方法
import request from './request'
createApp(App)
.use(ElementPlus, { locale: zhCn })
.use(ElementCrudTable, {
requestMethod: request,
requestKeys: {
dataKey: 'result',
totalKey: 'total',
pageKey: 'pageNo',
sizeKey: 'pageSize',
},
})
.mount('#app')
```
**按需引入**
```js
// 引入element-plus
import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import 'element-plus/lib/theme-chalk/index.css'
import zhCn from 'element-plus/lib/locale/lang/zh-cn'
import { CrudTable, CrudTableData, CrudTablePagination } from 'el-crud-table'
import 'el-crud-table/dist/style.css'
// 自定义请求方法
import request from './request'
createApp(App)
.use(ElementPlus, { locale: zhCn })
.use(CrudTable, {
requestMethod: request,
requestKeys: {
dataKey: 'result',
totalKey: 'total',
pageKey: 'pageNo',
sizeKey: 'pageSize',
},
})
.use(CrudTableData)
.use(CrudTablePagination)
.mount('#app')
```
### 基本使用
#### 1、简单的展示数据(不分页数据)。
- 接口返回数据需如下:
```json
{
"data": []
}
```
- 页面示例代码
```vue
```
#### 2、添加分页,只需要使用 **crud-table-pagination** 包裹数据组件即可 。
- 此时接口返回的数据必须如下所示:
```json
{
"data": {
"result": [],
"total": 156
}
}
```
- 页面示例代码
```vue
```
#### 3、添加头部与搜索栏
- 页面示例代码
```vue
```
#### 4、完整示例:数据操作:新增、预览、编辑与删除
- 代码
```vue
```
## 参考
```text
可以在注册的时候,提供请求自定义请求方法,默认组件内部使用 fetch 进行网路请求
//你自定义的请求方法
import request from '/path'
app.use(ElementTablePlus,{requestMethod:request})
//按需引入时
import request from '/path'
import {CrudTable,CrudTableData} from 'el-crud-table'
app.use(CrudTable,{requestMethod:request})
.use(CrudTableData)
```
### 1、CrudTable 【**required**】
```text
描述:顶层容器
```
#### attributes
| 参数 | 说明 | 类型 | 默认值 |
| ---- | ----------------------------- | ------ | ------ |
| gap | header、data、main 之间的间隙 | number | 0 |
#### events
| 方法 | 说明 | 回调 |
| ------------ | ------------ | ---- |
| getTableData | 获取数据方法 | |
### 2、CrudTableData 【**required**】
```text
描述:数据引擎容器
内部使用 el-table-column 显示列
```
| 参数 | 说明 | 类型 | 默认值 |
| -------- | ------------------------ | ------- | ------------ |
| url | 数据列表 接口地址 | string | **required** |
| autoLoad | 在组件挂载时自动加载数据 | boolean | true |
### 3、CrudTablePagination
```text
描述:包裹CrudTableData,提供分页功能
```
| 参数 | 说明 | 类型 | 默认值 |
| -------- | ------------ | ------ | ------ |
| pageSize | 每页数据大小 | number | 15 |
### 4、CrudTableHeader
```text
描述:头部容器,有头部需求时可以使用
```
| 参数 | 说明 | 类型 | 默认值 |
| ------ | ------------------------- | ------- | ------ |
| inline | 是否使用 inline-flex 布局 | boolean | false |
### 5、CrudTableSearch
```text
描述:搜索表单容器,含有一个默认插槽,用于渲染表单
内部使用 el-form-item 包裹表单元素且要提供prop属性,提供的prop属性就是发送到后端的字段;
表单元素会自动绑定v-model,无需手动绑定
```
| 参数 | 说明 | 类型 | 默认值 |
| ------------- | --------------------------------------------------------------------------------------------------------- | ------------------ | ------ |
| defaultFields | 表单项默认值 | object | |
| formatter | 字段格式器,[使用参考](https://gitee.com/lai_yingang/el-crud-table/blob/master/examples/UserFormatter.vue) | function 或 object | |
### 6、CrudTableDialog
```text
描述:弹窗表单容器,含有一个默认插槽,用于渲染新增、编辑的表单
内部使用 el-form-item 包裹表单元素且要提供prop属性,提供的prop属性就是发送到后端的字段;
表单元素会自动绑定v-model,无需手动绑定
```
内部使用 el-form-item 包裹表单元素,并且必须提供 prop 属性
| 参数 | 说明 | 类型 | 默认值 |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ------ |
| defaultFields | 表单项默认值 | object | |
| formProps | el-form props | | |
| inFormatter | 字段格式器,用于弹窗打开前,[使用方式同 formatter,参考](https://gitee.com/lai_yingang/el-crud-table/blob/master/examples/UserFormatter.vue) | function 或 object | |
| outFormatter | 字段格式器,用于发送表单前,[使用方式同 formatter,参考](https://gitee.com/lai_yingang/el-crud-table/blob/master/examples/UserFormatter.vue) | function 或 object | |
| ...rest | 支持 el-dialog 的其他所有属性 | | |
### 7、CrudTableAction
```text
描述:语义化标签、无特殊功能。头部按钮区:自定义的功能按钮将合理的布局在头部
```
### 8、CrudTableHandler
```text
描述:行操作按钮容器,语义化、实际渲染的是一个 el-table-column
默认插槽可以拿到行数据
```
| 参数 | 说明 | 类型 | 默认值 |
| ------- | ----------------------------------- | ---- | ------ |
| ...rest | 支持 el-table-column 的其他所有属性 | | |
### 9、CrudTableBtnAdd
```text
描述:新增按钮,内部绑定对应的功能
```
| 参数 | 说明 | 类型 | 默认值 |
| ----------- | ----------------------------- | ------ | ------------ |
| text | 按钮文字 | string | 新增 |
| dialogTitle | 打开弹窗时的弹窗标题 | string | 新增 |
| url | 提交新增网络请求的 api 路径 | string | **required** |
| reqEntity | 提交新增网络请求的 对象 | object | {} |
| ...rest | 支持 el-button 的其他所有属性 | | |
**_注意协商后端接口_:**
```text
假设 url 为 '/api/user' ,在提交请求时,内部不会做转换,请求方式为 'post',并携带表单请求体
```
### 10、CrudTableBtnEdit
```text
描述:编辑按钮,内部绑定对应的功能
```
| 参数 | 说明 | 类型 | 默认值 |
| ----------- | ---------------------------------------------------------------------------------------------------- | ------ | ------------ |
| text | 按钮文字 | string | 编辑 |
| dialogTitle | 打开弹窗时的弹窗标题 | string | 编辑 |
| url | 提交 编辑 请求的 api 路径 | string | **required** |
| reqEntity | 提交网络请求的 对象 | object | {} |
| echoUrl | 回显 api 路径; 可选,在打开编辑的时候,默认是从表格行中获取数据,若设置了此字段,则从此接口获取数据 | string | |
| ...rest | 支持 el-button 的其他所有属性 | | |
**_注意协商后端接口_:**
```text
假设 url 为 '/api/user' ,在提交请求时,内部会自动转换为 '/api/user/[id]',请求方式为 'put',并携带表单请求体
假设 echoUrl 为 '/api/user' ,内部会转换为 '/api/user/[id]',请求方式为 'get'
```
### 11、CrudTableBtnDel
```text
描述:删除按钮,内部绑定对应的功能
```
| 参数 | 说明 | 类型 | 默认值 |
| --------- | ----------------------------- | ------ | ------------ |
| text | 按钮文字 | string | 删除 |
| url | 提交 删除 请求的 api 路径 | string | **required** |
| reqEntity | 提交网络请求的 对象 | object | {} |
| ...rest | 支持 el-button 的其他所有属性 | | |
**_注意协商后端接口_:**
```text
假设 url 为 '/api/user' ,在提交请求时,内部会自动转换为 '/api/user/[id]',请求方式为 'delete'
```
### 12、CrudTableBtnPreview
```text
描述:预览按钮,显示的表单无法编辑
```
| 参数 | 说明 | 类型 | 默认值 |
| ----------- | ---------------------------------------------------------------------------------------------------- | ------ | ------ |
| text | 按钮文字 | string | 查看 |
| dialogTitle | 打开弹窗时的弹窗标题 | string | 预览 |
| echoUrl | 回显 api 路径; 可选,在打开预览的时候,默认是从表格行中获取数据,若设置了此字段,则从此接口获取数据 | string | |
| ...rest | 支持 el-button 的其他所有属性 | | |
**_注意协商后端接口_:**
```text
假设 echoUrl 为 '/api/user' ,内部会转换为 '/api/user/[id]',请求方式为 'get'
```