1.0.1 • Published 8 months ago

admin-table-page v1.0.1

Weekly downloads
-
License
-
Repository
github
Last release
8 months ago

Admin Table Page

English

基于Vue3和element-plus二次封装的一个表格页面组件

  • 通过简单配置,能快速完成一个带字段搜索、工具栏按钮、分页功能以及刷新功能的后台管理页面
  • 只需要配置一个从服务端获取数据的promise函数,就可以自动完成表格数据的获取和渲染
  • 远程获取数据时,支持自动刷新和手动刷新表格数据
  • 自动分页控制
  • 即使在远程获取数据时,也可以跨页进行多选
  • 当搜索框内容变化或者分页状态变化时,自动触发表格数据的筛选和更新
  • 通过不同name的slot来自定义组件的各部分
  • 支持中/英文切换
  • 自适应布局

Issue Reporting

如果在使用过程中发现bug,请来这里反馈,非常感谢!

本地Demo

npm install / yarn install
npm run dev / yarn run dev

浏览器打开http://localhost:8173 查看Demo

安装

NPM

npm install admin-table-page

Yarn

yarn add admin-table-page

用法

全局引入

import AdminTablePage from "admin-table-page";

// 以下两种样式文件,只需引入其中一种即可

// 如果项目不需要更改element-plus组件的主题,或者没有使用element-plus,可引入下面的css文件
import "admin-table-page/lib/style.css";
// 如果项目使用element-plus,并需要自定义主题色,可引入下面的scss文件
import "admin-table-page/style/index.scss";

import { createApp } from "vue";

const app = createApp(...);
app.use(ConfigTable);

局部引入

<template> 
  <admin-table-page
    :columns="columns"
    :fetch-method="getDataApi"
    :tool-buttons="toolButtons"
    :refresh="5000"
    :action-column="actionColumn"
    selectable="multiple"
    row-key="id"
  />
</template>

<script setup>
import { AdminTablePage } from "admin-table-page";
// 以下两种样式文件,只需引入其中一种即可
// 如果项目不需要更改element-plus组件的主题,或者没有使用element-plus,可引入下面的css文件
import "admin-table-page/lib/style.css";
// 如果项目使用element-plus,并需要自定义主题色,可引入下面的scss文件
import "admin-table-page/style/index.scss";
import { getDataApi } from "@/api/data";

const columns = [{
  prop: "name",
  label: "Name",
}, {
  prop: "age",
  label: "Age"
}];

const toolButtons = [{
  text: "New Record",
  icon: "Plus",
  onClick: handleAdd
}]

const actionColumn = [{
  text: "Edit",
  onClick: row => handleEdit(row)
}, {
  text: "Delete",
  onClick: row => handleDelete(row)
}]

const getDataApi = () => {
  return new Promise((resolve, reject) => {
    resolve({
      total: 2,
      list: [{
        name: "name1",
        age: 1
      }, {
        name: "name2",
        age: 2
      }]
    })
  })
}
</script>

然后,你可以得到下面这样一个页面:

Demo

属性

属性描述数据类型可选值默认值
columns表格列定义。数组中的每个Object代表一列,每列的定义除了原有el-table-column的属性,增加了filterable和filterOptions来定义列的筛选,参考筛选array-[]
local-data表格所有数据,会自动分页显示,同el-table的data属性array-[]
total-key远程获取数据时,如果服务端返回的数据总行数的key不是”total“,则需要设置该属性来指明服务端返回的key。string-"total"
list-key远程获取数据时,如果服务端返回的当前页数据列表的key不是”list“,则需要设置该属性来指明服务端返回的key。string-"list"
fetch-method远程获取数据的方法,该方法返回Promise。由于需要分页展示,因此服务端必须返回数据总行数(total),和当前页数据列表(list)。(query: object) => Promise<{totalKey: number, listKey: array}>--
refresh如何刷新表格数据string/numberstring value:"" - 不显示刷新功能 "manual" - 显示刷新按钮,点击后手动刷新一次 number value: 自动刷新频率,单位ms. 例如, 设置:refresh="5000",即每5秒自动刷新一次数据""
tool-buttons工具栏按钮列表。 每一个工具栏对象参考工具栏按钮对象array--
show-index显示行序号booleanfalse truefalse
row-key同el-table的row-key属性。如果需要对表格数据进行多选或单选,必须设置该属性。string--
selectable如何选择表格数据boolean/stringstring value: "single" - 单选某一行数据 "multiple" - 选择多行数据 boolean value: false: 不可选择表格数据false
localei18n国际化设置,目前仅支持中/英文切换string"zhCn", "en""zhCn"
action-column每一行的操作列里显示的操作按钮列表。每一个操作按钮对象仅需传入{text, onClick}。onClick函数的参数是当前行对象。如果需要其他样式,可通过name为“actions”的slot自定义array--
action-column-label操作列的列名string-en - "Actions" zhCn - "操作"
extra-query远程获取数据时,除字段搜索和分页信息,额外需要传给服务端的参数。注意:不会监听这个对象的变化,如果需要,可以在项目中自行监听变化并调用组件提供的reload方法object--
el-pagination-props其他el-pagination属性object--
tips提示信息string--

除此之外,其他原el-table组件的属性也可以以透传attributes的方式配置。

方法

FunctionDescriptionType
reload重新加载表格数据。支持传入一个除搜索字段、分页以及extra-query属性以外的参数对象。(params) => void
getSelections返回选择的行。单选返回对象,多选返回列表。 如果是多选模式,该方法会返回在不同页面上的选择行。() => array or object

除此之外,还支持原el-table组件的所有方法调用。

事件

EventDescriptionParameters
select-change当选择的表格数据变化时触发。 如果是单选,则返回当前选择行对象。 如果是多选,返回已选行列表row/rows

自定义Slot

NameDescription
search搜索域。此时组件不会响应自定义搜索域的变化。需要自行监听搜索域变化,并调用reloada方法做筛选
tools工具栏
actions操作列
actions_header操作列的列头
tips提示信息
extra_columns除columns定义的列、操作列以外,其他需要自定义的列
column.prop除操作列和额外列,每一列都可通过一个与该列prop属性同名的具名slot进行自定义
column.prop_header除操作列和额外列, 每列的列头

工具栏按钮对象

AttributesRequiredDescriptionTypeDefault Value
texttrue按钮文案String-
onClicktrueclick事件的回调函数Function-
showfalse是否显示按钮Booleantrue

除此之外,还支持el-button的所有属性。例如,

const toolButtons = [{
  text: "test button",
  onClick: () => { console.log("it's toolbar button")},
  icon: "Plus",
  type: "danger",
  link
}]

筛选

目前仅支持el-input、el-select以及el-date-picker(type="date")这三种类型的筛选组件 可以对columns数组中的每个元素设置filterable或者filterOptions属性,来定义列的筛选行为

  • filterable 类型为boolean。如果设置为true,则为该列开启一个默认的el-input筛选组件
  • filterOptions 类型为object。可以设置该列对应筛选组件的其他属性,或者选择el-input以外的其他筛选组件
AttributesTypeRequiredDescriptionAccepted ValueDefault
typestringfalse筛选组件类型"input" "select" "date""input"
defaultHiddenbooleanfalse筛选组件是否默认隐藏true falsefalse
optionsarrayfalse下拉选择框选项列表。搜索框类型为下拉选择框时,必填。选项列表的每一项可以是一个包含label、value两个key的对象,也可以是value列表。--

除此之外,el-input/el-select/el-date-picker(type="date")的其他属性也支持配置。例如,

const columns = [{
  prop: "username",
  label: "Username",
  filterable: true
}, {
  prop: "age",
  label: "Age",
  filterOptions:{
    type: "select",
    options: ["18", "19"],
    defaultHidden: true
  }
}]
1.0.1

8 months ago

1.0.0

8 months ago

0.2.1

1 year ago

0.2.0

1 year ago

0.1.0

1 year ago

0.0.7

1 year ago

0.0.6

1 year ago

0.0.5

1 year ago

0.0.4

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago

0.0.0

1 year ago