MineAdmin 交流群

官方QQ群: 150105478

Skip to content

MaProTable

ma-pro-table 基于 ma-searchma-table 两个组件封装而来,用于快速构建一个完整的 CRUD 功能,增加摸鱼的时间。

提示

系统内自带的 用户、角色管理 都是 ma-pro-table CRUD的最佳实践,文档和实际案例参考,才能快速掌握这个组件。

注意:本组件不再像 2.0 ma-crud 那样直接内置支持 新增编辑 功能,这些需要自己来实现。

使用

cellRenderTo 单元格渲染插件

为什么要存在 cellRenderTo 插件?

首先,单元格渲染不同内容是使用非常非常频繁的场景,很多代码可能都一样,只是参数不一样,字段名不一样。所以在构建 ma-pro-table 时就在考虑如何解决这个问题。

ma-pro-table 虽然可以内置针对不同内容的渲染,比如 url, image, video,再比如 switch 渲染。但问题是需求多变的, 内置的功能也永远满足不了业务需求的增长,但同时为了避免代码冗余,所以有了这个插件机制。

大家可以把自己常用的、或者某些专属业务封装的单元格渲染插件,分享出来,分享到应用市场,来丰富单元格渲染,这样大家都不需要再写同样的东西了。

使用单元格插件

vue
<script setup lang="ts">
import { ref } from 'vue'
import { MaProTableSchema } from "@mineadmin/pro-table";

const schema = ref<MaProTableSchema>({
  tableColumns: [
    {
      title: '单元格渲染示例',
      prop: 'title',
      // 调用单元格渲染插件
      cellRenderTo: {
        // 插件名,此插件将字符串以 el-tag 形式渲染,ma-pro-table 内置这唯一一个。
        name: 'tag', 
        // 可以传入插件所需的参数
        props: {
          // 该插件非必须传入参数,就不传了、
        }
      }
    }
  ]
})
</script>

<template>
  <ma-pro-table :schema="schema"/>
</template>

注册单元格插件

注册插件需要导入 useProTableRenderPlugin() 方法,然后使用此方法注册、移除插件。

ts
import { useProTableRenderPlugin } from '@mineadmin/pro-table'

useProTableRenderPlugin() 返回了以下几个方法:

  • addPlugin(plugin: MaProTableRenderPlugin): void: 注册插件
  • removePlugin(pluginName: string): void: 移除插件
  • getPlugins(): MaProTableRenderPlugin[]: 获取 ma-pro-table 已注册的所有插件
  • getPluginByName(pluginName: string): MaProTableRenderPlugin: 按插件名获取某个插件信息
点击查看 MaProTableRenderPlugin 类型说明
参数说明类型
name单元格渲染插件名称,唯一标识符string
render渲染函数,支持 组件, jsx, tsxFunction

render 函数参数说明:

  • data 类型: TableColumnRenderer 包含 el-tablescope 原生参数,以及 ma-table 扩展参数
  • props,调用插件时通过 props 参数传入的外部参数。
  • proxy 类型: MaProTableExpose 可查看此章节最下面的 Expose 节点说明。

文档就只说明如何注册插件,我们需要用到 addPlugin 函数来注册。

内置 tag 插件原型如下:

ts
import { h } from 'vue'
import { useProTableRenderPlugin } from '@mineadmin/pro-table'
import { ElTag } from 'element-plus'

const { addPlugin } = useProTableRenderPlugin()

// 注册插件
addPlugin({
  // 插件名,唯一标识符,如果需要上传应用市场,请带上专属前缀
  name: 'tag',
  // 插件渲染函数,支持指定其他vue组件或者直接编写 tsx 与 jsx 都可以
  render: (data: TableColumnRenderer, props: any, proxy: MaProTableExpose) => {
    return h(
      ElTag,  // 使用 el-tag 来渲染
      props,  // 透传外部调用插件时传入的 props 参数
      {
        default: () => data.row[props?.prop] // 使用 el-tag 默认插槽
      }
    )
  }
})

ToolbarPlugin 工具栏插件

表格工具栏

说明

ma-pro-table 也有插槽可以扩展这里,如果某些一次性的功能可使用插槽,如果整个系统都有需求,则建议使用 api 来扩展了。

useProTableToolbar() 返回了以下几个方法:

  • get: (name: string) => MaProTableToolbar 获取某个工具信息
  • getAll: () => MaProTableToolbar[] 获取所有工具信息
  • add: (toolbar: MaProTableToolbar) => void 添加新工具
  • remove: (name: string) => void 移除一个工具
  • hide: (name: string) => void 设置一个工具为不渲染状态
  • show: (name: string) => void 设置一个工具为正常渲染状态
点击查看 MaProTableToolbar 类型说明
参数说明类型
name工具名称,唯一标识符string
render渲染函数,支持 组件, jsx, tsxFunction
show默认是否显示boolean
order工具渲染顺序,数字越小,越靠前number

扩展工具栏

ts
import { useProTableToolbar } from '@mineadmin/pro-table'
import CustomerTool from './CustomerTool.vue'

const { add } = useProTableToolbar()

add({
  // 工具名称
  name: 'heihei',
  // 指定渲染组件,会向组件传入一个 proxy 参数,组件内部需要定义 props 来接收
  render: CustomerTool,
  show: true,
  order: 99,
})
vue

<script setup lang="ts">
  // 定义 props 来接收 `ma-pro-table` 传入的 proxy 参数
  import { MaProTableExpose } from "@mineadmin/pro-table"
  import { ElMessage } from 'element-plus'

  const { proxy } = defineProps<{ proxy: MaProTableExpose }>()
  
  const execute = async () => {
    // 执行刷新表格
    await proxy?.refresh?.()
    ElMessage.success('表格刷新成功')
  }
</script>

<template>
  <!-- 加入 circle 属性成为圆按钮,与系统的保持统一 -->
  <el-button circle @click="execute">😀</el-button>
</template>

Props

参数说明类型版本
optionsma-pro-table 参数设置MaProTableOptions1.0.0
schemama-pro-table 架构配置MaProTableSchema1.0.0

MaProTableOptions

参数说明类型默认值版本
tableOptionsma-table 参数MaTableOptions-1.0.0
searchOptionsma-search 参数MaSearchOptions-1.0.0
searchFormOptionsma-form 参数MaFormOptions-1.0.0
-----
id当前id,全局唯一,不指定则随机生成一个string-1.0.0
adaptionOffsetBottom距离底部偏移量number01.0.0
actionBtnPosition动作按钮放置位置,自动模式下,如果开启标题栏,则显示在标题栏,否则显示在表格左上方auto, header, tableauto1.0.0
header头部配置查看 参数配置-1.0.0
toolbar工具栏是否显示boolean, (() => boolean)true1.0.0
rowContextMenu右键配置查看 参数配置-1.0.0
requestOptions列表网络请求配置查看 参数配置-1.0.0
onSearchSubmit搜索提交事件(form: Record<string, any>) => void-1.0.0
onSearchReset搜索重置事件(form: Record<string, any>) => void-1.0.0

HeaderConfig

参数说明类型默认值版本
show是否显示头部boolean, (() => boolean)true1.0.0
mainTitle主标题string, (() => string)表格主标题1.0.0
subTitle子标题string, (() => string)-1.0.0

rowContextMenu

参数说明类型默认值版本
enabled是否开启行右键菜单booleanfalse1.0.0
items右键菜单列表ContextMenuItem[]-1.0.0
-----
ContextMenuItem说明菜单列表配置说明--
label菜单显示文案string, (() => string)-1.0.0
icon菜单显示图标string, (() => string)-1.0.0
disabled是否禁用boolean-1.0.0
divided是否显示分割线boolean-1.0.0
onMenuClick菜单项点击事件(data: { row: any, column: any, proxy: MaProTableExpose }, event: Event) => void-1.0.0

requestOptions

参数说明类型默认值版本
api请求 api 方法(...args: any[]) => any-1.0.0
autoRequest是否自动请求booleantrue1.0.0
response响应返回结构配置{ totalKey?: string, dataKey?: string }{ totalKey: 'total', dataKey: 'list'}1.0.0
requestPage请求分页配置{ pageName?: string, sizeName?: string, size?: number }{ pageName: 'page', sizeName: 'pageSize', size: 10 }1.0.0
requestParams默认请求参数Object-1.0.0
responseDataHandler响应后数据处理,注意:要把表格数据返回回去(response: Record<string, any>) => any[]-1.0.0
on事件列表Record<string, (...args: any[]) => any>-1.0.0

MaProTableSchema

参数说明类型默认值版本
searchItems搜索项列表配置MaSearchItem[] 配置项-1.0.0
tableColumns表格列表配置MaProTableColumns[]-1.0.0

MaProTableColumns

TIP

继承于 el-table-columnsma-table扩展columns配置 ,以下是扩展参数

参数说明类型默认值版本
typeel-table 原生基础上,增加 operation, sort,第一个为操作栏,可通过 API 扩展,第二个为行拖动排序string-1.0.0
cellRenderTo渲染单元格为表格注册的插件查看下方类型-1.0.0
isRender是否渲染列,跟 hide 不同的是,不会在表格设置里显示此列boolean & () => boolean-1.0.55
cellRenderProcellRender 加强型,增加了第二个参数 proxy: MaProTableExpose(data, proxy) => VNode & string-1.0.55
headerRenderProheaderRender 加强型,增加了第二个参数 proxy: MaProTableExpose(data, proxy) => VNode & string-1.0.55
operationConfigure操作栏配置,只有 typeoperation 生效查看下方类型-1.0.0
cellRenderTo 使用渲染插件

INFO

ma-pro-table 单元格渲染插件,得先必须注册了插件后才可使用。

参数说明类型默认值版本
name单元格渲染插件名string-1.0.0
props插件所需的额外参数any, any[]-1.0.0
operationConfigure 操作栏

INFO

操作栏 只能通过 api 来设置操作项,如果觉着麻烦,可自己在 columns 增加一个普通列,自己使用插槽来实现。

参数说明类型默认值版本
type显示方式,下拉菜单:dropdown, 平铺:tilestringdropdown1.0.0
actions操作栏配置列表OperationAction[]-1.0.0
OperationAction 操作栏列表配置
参数说明类型默认值版本
name操作标识string-1.0.0
text文本配置string, ((data: TableColumnRenderer) => string)-1.0.0
icon图标配置,内部用 ma-svg-icon 渲染string, ((data: TableColumnRenderer) => string)-1.0.0
order排序,越小越靠前number-1.0.0
disabled是否禁用((data: TableColumnRenderer) => boolean)-1.0.0
show是否显示((data: TableColumnRenderer) => boolean)-1.0.0
onClick点击事件(data: TableColumnRenderer, proxy: MaProTableExpose) => void-1.0.0
linkPropsel-linkprops 参数LinkProps 文档-1.0.0

Event

名称说明参数
row-drag-sort拖动行排序事件(tableData: any[]) => void
search-submit搜索提交事件(form: Record<string, any>) => Record<string, any>, void
search-reset搜索重置事件(form: Record<string, any>) => Record<string, any>, void

Slot

名称说明参数
default默认插槽及 el-table 原生插槽-
empty原生插槽,空数据时显示-
append原生插槽,表格最后一行-
pageLeft分页那行左边区域插槽
column-[prop]表格列插槽,prop 为字段名scope
header-[prop]表格头插槽,prop 为字段名scope
middle表格与搜索栏中间区域插槽-
tableHeaderheader 整个区域插槽-
headerTitleheader 标题区域插槽-
headerRightheader 右侧区域插槽-
toolbarLefttoolbar 左侧区域插槽-
toolbartoolbar 工具栏列表插槽,不建议使用,推荐API扩展-
beforeToolbartoolbar 工具栏列表前置插槽-
afterToolbartoolbar 工具栏列表后置插槽-
tableToptable 容器内顶部插槽,位于工具栏上方-
tableCrannytable 容器内表格与工具栏中间缝隙插槽-
search搜索组件插槽,使用后,搜索项配置失效-
searchActions搜索 操作按钮 内容插槽-
searchBeforeActions搜索 操作按钮 前置内容插槽-
searchAfterActions搜索 操作按钮 后置内容插槽-
searchAfterActions搜索 操作按钮 后置内容插槽-

Expose

名称说明参数返回值
getSearchRef()获取 ma-search 的Ref-MaSearchExpose
getTableRef()获取 ma-table 的Ref-MaTableExpose
getElTableStates()获取 el-table 的暴露的states属性列表-any
setTableColumns()设置表格列(cols: MaProTableColumns[]) => voidvoid
getTableColumns()获取表格列() => MaProTableColumns[]MaProTableColumns[]
refresh()刷新表格数据() => Promise<void>Promise<void>
requestData()请求表格数据() => Promise<void>Promise<void>
changeApi()变更请求api( api: () => any, isRequestNow: boolean ) => voidvoid
setRequestParams()设置请求参数( params: Record<string, any>, isRequestNow: boolean) => voidvoid
setSearchForm()设置搜索表单默认值(form: Record<string, any>) => voidvoid
getSearchForm()获取搜索表单数据() => Record<string, any>Record<string, any>
setProTableOptions()设置 ma-pro-table 的参数(opts: MaProTableOptions) => voidvoid
getProTableOptions()获取 ma-pro-table 的参数() => MaProTableOptionsMaProTableOptions
resizeHeight()重置表格高度() => Promise<void>Promise<void>
getCurrentId()获取当前组件ID-string

致力于为品牌和企业创造价值