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

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