Skip to content

ElPlusPowerfulTableTs

TIP

element-plus 二次开发表格组件。此插件已 el-plus-powerful-table 作为基础,进行重构。部分功能将领先 el-plus-powerful-table 基础版本。 el-plus-powerful-tablets 版本。DEMO

标签
表示功能废弃
表示功能新增
语言

对于语言方面组件是默认使用 英语 因为 element-plus 默认是使用英语,不引用中文包的主要原因是避免增大体积。 组件内部语言跟随 element-plus。 部分 提示文字 语言,组件内部也支持 中、英 文,如果你需要支持更多语言或者更改组件内部 的语言,可以在 use(PowerfulTable, { local: 您的语言变量 }) 替换。也可以参考我们提供的 demo 实现。

使用方法

sh
npm i el-plus-powerful-table-ts
npm i el-plus-powerful-table-ts
sh
yarn add el-plus-powerful-table-ts
yarn add el-plus-powerful-table-ts
sh
pnpm add el-plus-powerful-table-ts
pnpm add el-plus-powerful-table-ts
ts
import powerfulTable from "el-plus-powerful-table-ts/es";
import { LangKey } from "el-plus-powerful-table-ts/es/locale/packages";

const app = createApp(App);
app.use(powerfulTable, {
  // 更改组件默认语言
  locale: {
    en: {
      [LangKey.NoData]: '空',
      [LangKey.PackUp]: '收起',
      [LangKey.ReadFullText]: '展开阅读全文',
      // ...
    },
    'zh-cn': {
      [LangKey.NoData]: '空',
      [LangKey.PackUp]: '收起',
      [LangKey.ReadFullText]: '展开阅读全文',
      // ...
    },
  },
});
app.mount("#app");
import powerfulTable from "el-plus-powerful-table-ts/es";
import { LangKey } from "el-plus-powerful-table-ts/es/locale/packages";

const app = createApp(App);
app.use(powerfulTable, {
  // 更改组件默认语言
  locale: {
    en: {
      [LangKey.NoData]: '空',
      [LangKey.PackUp]: '收起',
      [LangKey.ReadFullText]: '展开阅读全文',
      // ...
    },
    'zh-cn': {
      [LangKey.NoData]: '空',
      [LangKey.PackUp]: '收起',
      [LangKey.ReadFullText]: '展开阅读全文',
      // ...
    },
  },
});
app.mount("#app");
vue
<powerful-table :list="list" :header="header" />
<powerful-table :list="list" :header="header" />

Config Attributes

通过 app.use 注入 (优先级小于局部配置)

属性名说明TS类型默认值
locale内部部分文字语言 查看可选值LangPackages-
listRequest列表请求,具体属性查看下方详情object-
emptyElement列表数据为空时渲染的组件Component-

Attributes

属性名说明TS类型默认值
size组件大小(默认跟随 element-plusstringsmall
list数据array-
header表格头部配置array-
selectData选中的数据array-
selectCompare选中数据和列表数据相比较的参数[0]选中数据属性名,[1]列表数据属性名array['id', 'id']
isSelect是否显示多选booleanfalse
listRequest列表请求object-
selectable当前行是否可以选中function-
isPagination是否显示分页器booleanfalse
operateData批量操作object-
btnConfig表格顶部按钮配置object-
tree树形表格配置object-
paginationProperty分页器组件扩展字段object-
property表格组件扩展字段object-

ListRequest

属性名说明TS类型默认值
pageNoKey页数 keystring'pageNo'
pageSizeKey条数 keystring'pageSize'
responseKey返回值 key,多层数据结构使用 . 连接string'data.result'
totalKey总条数 keystring'total'
listsKey数据 keystring'rows'

当使用组件传递 ListRequest 时(非全局注入),格外新增 2 个属性

属性名说明TS类型默认值
listQuery请求格外参数object{}
listApi请求接口function-

OperateData

TIP

如果表格有 header.props.typeinput 的则需要先填写该行数据,在选中该行,否则会出现获取不到 input 的值

属性名说明TS类型默认值
value下拉选中值string-
style按钮样式CSSProperties-
prop批量操作后 batchOperate 返回的 ids 中的数据是根据指定 prop 返回数组stringid
btnPropertyel-button 组件扩展字段 (支持 el-button 组件所有属性名)object-
selectPropertyel-select 组件扩展字段 (支持 el-select 组件所有属性名)object-
operates批量操作下拉框数据array-
OperateData Operates
属性名说明TS类型默认值
label批量操作下拉框显示文字string-
value批量操作下拉框值string-

BtnConfig

属性名说明TS类型默认值
btnRightList右侧按钮配置array-
btnList左侧按钮配置array-
BtnConfig BtnList
属性名说明TS类型默认值
style样式CSSProperties-
disabled是否禁用 如果为 true 那么 operateType 的属性名将会失效boolean-
operateType操作类型:none 默认 (不需要选择数据),single (只能操作一条数据),batch (批量操作数据(至少选择一条数据以上))object-
text按钮文字string-
effect自定义数据将会在自定义事件 btn-plus-change 抛出string-
showBtn控制按钮显示隐藏function / boolean-
属性名说明TS类型默认值
overflowTooltip当内容过长被隐藏时显示booleanfalse
label显示的标题string-
minWidth对应列的最小宽度string / number140
width对应列的宽度string / number-
sortable排序string / booleanfalse
fixed固定列string / booleanfalse
headerAlign表头对齐方式enum'center'
headerSlotName列头插槽string-
defaultShow当前列默认显示或隐藏booleantrue
defaultFilter当前列默认是否过滤 (isShowOrFilterColumn == 'filter' 时默认 true)booleanfalse
isShowOrFilterColumn右侧按钮选择列时是否显示(隐藏和筛选开关组件)string / boolean-
props单元格数据object-
propertyel-table-column 组件扩展字段 (支持 el-table-column 组件所有属性名)object-

Props

属性名说 明TS类型默认值
prop数据 keystring-
type数据类型enum'text'
data每个类型不一样 data 里值也不一样_TYPE['xxx']-
filters过滤,只支持 typetext、tagarray / functionnumber
filtersType过滤类型用于表格顶部右侧列按钮点击时,是否过滤,如果是则自定义表头将根据类型所弹出相应的操作元素(如果指定了 headerSlotNameisShowOrFilterColumnshow 或者 false 将会无效。如果是 filtersType: select 需要指定 filters 为数组类型)string'input'
filterItem指定过滤项 (当 props 是数组且长度大于 1 时有用) 如果多个 prop 的情况下没有指定 filterItem 过滤项 那么将使用第一个作进行过滤boolean-
customFilter自定义过滤数据 v(参数为值),column(参数为header配置项),resolve(回调函数传递数组)function-
text数据左侧显示的文字string-
reserveprop 值渲染数据为空时可用 reserve 代替空数据 可传 HTML 标签HTMLElement / string'no Data'
render渲染函数function-
style样式CSSProperties-
slotName插槽名称string'default'
Filters
属性名说明TS类型默认值
key单元格里的数据string-
value需要替换的值string-
Data
js
// ...
data: setData<'image', any>({
  style: {
    borderRadius: '10px',
  },
  property: ({ row, index, props }) => {
    // console.log(row, index, props)
    return {
      // src: 'https://t7.baidu.com/it/u=1819248061,230866778&fm=193&f=GIF',
    }
  },
})
// ...
// ...
data: setData<'image', any>({
  style: {
    borderRadius: '10px',
  },
  property: ({ row, index, props }) => {
    // console.log(row, index, props)
    return {
      // src: 'https://t7.baidu.com/it/u=1819248061,230866778&fm=193&f=GIF',
    }
  },
})
// ...

TIP

内部组件中的 Emit 事件将会抛出在 component-emit 上。具体内部组件中有哪些事件返回什么参数,将会在下面文档详细介绍。

Type is Text(default)
属性名说明TS类型默认值
line超出多少的行数使用 ... 代替number3
develop是否显示 “展开 / 收起” 操作按钮booleanfalse
formatting自定义当前单元格数据文本。propsheader 配置的当前 propsfunction-
on事件对象,接收下面 Emit 相应方法名称object-
Text Emit/Event
方法名说明类型
click点击触发function
Type is Image
属性名说明TS类型默认值
style图片自定义样式CSSProperties-
property属性扩展字段 (支持 el-image 组件所有属性名)object / function-
on事件对象,接收下面 Emit 相应方法名称object-
ts
// ...
{
    label: '图片', //显示的标题
    props: [
      {
        type: 'image',
        prop: 'imageUrl',
        data: setData<'image', Lists>({
          on: {
            load: ({row, index, props}, evt) => {},
            error: ({row, index, props}, evt) => {}
          }
        }),
      },
    ],
  },
// ...
// ...
{
    label: '图片', //显示的标题
    props: [
      {
        type: 'image',
        prop: 'imageUrl',
        data: setData<'image', Lists>({
          on: {
            load: ({row, index, props}, evt) => {},
            error: ({row, index, props}, evt) => {}
          }
        }),
      },
    ],
  },
// ...
Image Emit/Event
方法名说明类型
load图片加载成功触发e: Event
error图片加载成功触发e: Error
switch图片加载成功触发index: number
close图片加载成功触发-
Type is Btn
属性名说明TS类型默认值
tip提示文字string-
text按钮文字string-
style按钮样式CSSProperties-
showBtn控制按钮显示隐藏function-
beforeClick点击前事件, props(当前配置的props) btnIndex(按钮下标) resolve(回调函数,传递boolean)function-
click点击事件, 传入 clickbeforeClick 失效function-
params自定义数据any-
isMore是否更多 当 data 是二维数组时有效booleanfalse
property属性扩展字段 (支持 el-button 组件所有属性名)object / function-
tipProperty属性扩展字段object-
Type is Switch
属性名说明TS类型默认值
style开关自定义样式CSSProperties-
property属性扩展字段 (支持 el-switch 组件所有属性名)object / function-
on事件对象,接收下面 Emit 相应方法名称object-
Switch Emit/Event
方法名说明类型
changeswitch 状态发生变化时的回调函数val 新状态的值
Type is Input or Textarea
属性名说明TS类型默认值
style输入框样式CSSProperties-
slot输入框前置或后置enum-
symbol文字或者符号在插槽中显示string-
property属性扩展字段 (支持 el-input 组件所有属性名)object / function-
on事件对象,接收下面 Emit 相应方法名称object-
Input Emit/Event
方法名说明类型
blur输入框失去焦点时触发event: FocusEvent
focus输入框获得焦点时触发event: FocusEvent
change数据改变时,当输入框失去焦点或用户按 Enter 时触发value: string | number
inputInput 值改变时触发value: string | number
clear点击由 clearable 属性生成的清空按钮时触发-
Type is Video
属性名说明TS类型默认值
style样式CSSProperties-
property属性扩展字段 (支持 video 标签所有属性名)object / function-
on事件对象,接收下面 Emit 相应方法名称object-
Video Emit/Event
方法名说明类型
play点击触发object
pause点击触发object
Type is Iconfont
属性名说明TS类型默认值
class样式类string | string[]-
style图标自定义样式CSSProperties-
on事件对象,接收下面 Emit 相应方法名称object-
Iconfont Emit/Event
方法名说明类型
click点击触发object
Type is Rate
属性名说明TS类型默认值
style样式CSSProperties-
property属性扩展字段 (支持 el-rate 组件所有属性名)object / function-
on事件对象,接收下面 Emit 相应方法名称object-
Rate Emit/Event
方法名说明类型
change值改变触发val 改变后的值
Type is Href
属性名说明TS类型默认值
style自定义样式CSSProperties-
target跳转类型enum'\_blank'
text所显示的文本string / function-
property属性扩展字段 (支持 el-link 组件所有属性名)object / function-
Type is Slot
ts
import type { PowerfulTableHeader } from 'el-powerful-table-ts/es/typings'

interface Lists {
  id: 1
}
export const header: PowerfulTableHeader<Lists>[] = [
  {
    label: "slot(插槽)", //显示的标题
    props: [
      {
        type: "slot",
        slotName: "A",
      },
    ],
  }
]
import type { PowerfulTableHeader } from 'el-powerful-table-ts/es/typings'

interface Lists {
  id: 1
}
export const header: PowerfulTableHeader<Lists>[] = [
  {
    label: "slot(插槽)", //显示的标题
    props: [
      {
        type: "slot",
        slotName: "A",
      },
    ],
  }
]
vue
<powerful-table>
  <template #A="{ row,index }">
    <div>
      <el-image
        style="width: 100px; border-radius: 10px"
        :src="row.imageUrl"
      ></el-image>
    </div>
  </template>
</powerful-table>
<powerful-table>
  <template #A="{ row,index }">
    <div>
      <el-image
        style="width: 100px; border-radius: 10px"
        :src="row.imageUrl"
      ></el-image>
    </div>
  </template>
</powerful-table>
Type is Tag
属性名说明TS类型默认值
color背景颜色,返回颜色值function-
number需要显示前多少个number3
property属性扩展字段 (支持 el-tag 组件所有属性名)object / function-
Tag Emit/Event
方法名说明类型
click点击触发object
close关闭 Tag 时触发的事件-

Emits

事件名说明类型
size-change分页器切换, select 所有页中选中的数据function
sort-custom远程排序function
batch-operate批量操作function
btn-click表格操作按钮function
btn-plus-change表格顶部左侧操作按钮,rows 返回所有选中的行function
btn-plus-refresh表格顶部刷新按钮-
row-click行点击事件function
component-event内部组件事件function

Slots

插槽名说明
btn-left表格顶部左侧按钮
btn-right表格顶部右侧按钮
empty表格内数据为空时内容
refresh刷新
[slotName]表格内自定义的插槽名称
[headerSlotName]表格列头内自定义的插槽名称

Utils

函数名说明TS类型
getType获取变量类型function
deepClone深度克隆function
isTypeProtect类型保护 搜索 "用户自定义的类型保护"function
setData设置 PowerfulTableHeaderProps 类型下 data 数据,可以获得更好的类型提示function
ts
import { getType, deepClone,isTypeProtect, setData } from 'el-plus-powerful-table/es'
import { log } from 'console'

log(getType('1')) // 'String'
log(getType(1)) // 'Number'
log(getType({})) // 'Object'
// ...

const a = {a: 1, b: {a: 2, c: {a: 3}}}
const b = deepClone(a)
log(a === b) // false

let c: number | []
c += 1 // ts 报错
if (isTypeProtect<typeof c, number>(c, (data) => typeof data === 'number')) {
  c += 1 // 正常
}

const headers: PowerfulTableHeader<Lists>[] = [{
  label: '图片',
  props: [
    {
      type: 'image',
      prop: 'imageUrl',
      data: setData<'image', Lists>({
        // 在这里输入的时候 idea 会提示有哪些属性
      }),
    },
  ],
}]
import { getType, deepClone,isTypeProtect, setData } from 'el-plus-powerful-table/es'
import { log } from 'console'

log(getType('1')) // 'String'
log(getType(1)) // 'Number'
log(getType({})) // 'Object'
// ...

const a = {a: 1, b: {a: 2, c: {a: 3}}}
const b = deepClone(a)
log(a === b) // false

let c: number | []
c += 1 // ts 报错
if (isTypeProtect<typeof c, number>(c, (data) => typeof data === 'number')) {
  c += 1 // 正常
}

const headers: PowerfulTableHeader<Lists>[] = [{
  label: '图片',
  props: [
    {
      type: 'image',
      prop: 'imageUrl',
      data: setData<'image', Lists>({
        // 在这里输入的时候 idea 会提示有哪些属性
      }),
    },
  ],
}]

Expose

属性名说明类型
$slots所传递的插槽名称object
$attrs所传递的属性并且非 props 定义的属性名. 文档object
$refs表格 Ref 实例object
props表格 props 属性object
injectProps使用 app.use 时注入的数据object
headerLists过滤隐藏后的列array
powerfulTableData内置数据也就是 vue2 中的 dataobject
stateData状态数据object
resetList重置数据发送请求function
getListData重新发送请求function
handleSelectionChange添加选中行function
anewRender重新计算表格布局位置function

Released under the MIT License.