0.1.5 • Published 2 years ago

custom-el-table v0.1.5

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

自定义el表格组件custom-el-table(二次封装elemnetUI表格组件 )

使用

安装

npm install custom-el-table || yarn add custom-el-table

main.js全局注册

import customElTable from 'custom-el-table'

import 'custom-el-table/lib/custom-el-table.css'

Attr(属性)

参数字段参数说明类型可选值默认值
url请求url, 为空不发送请求; 改变url, 则table会重新发送请求String
reqMethod请求方式Stringget,post,put,deleteget
id主键,勾选/修改/删除必用,请求根据定义的属性值获取主键,即rowthis.idStringid
firstPage当前分页值Number1
dataPath渲染组件的分页数据在接口返回的数据中的路径, 嵌套对象使用.表示Stringpayload.content
noPaginationDataPath渲染组件的分页数据在接口返回的数据中的路径, 嵌套对象使用.表示即可Stringpayload
totalPath分页数据的总数在接口返回的数据中的路径, 嵌套对象使用.表示即可Stringpayload.totalElements
pageKey请求的时候如果接口需要的页码的查询 key 不同的时候可以指定Stringpage
pageSizeKey请求的时候如果接口需要的分页数量的查询 key 不同的时候可以指定Stringsize
columns列属性设置,参考Table-columnArray[]
searchForm查询表单字段渲染Array[]
canSearchCollapse是否开启搜索栏折叠Booleanfalse
beforeSearch点击查询按钮, 查询前执行的函数Function{}
persistSelection切换页面时,已勾选项是否保留Booleanfalse
是否有操作列是否显示操作列Booleantrue
isSelectNum是否显示当前选中项数量Booleanfalse
isTablePattern是否显示表格区域内容,不显示时可以使用插槽customTemplateBooleantrue
searchBtnShow头部表单搜索按钮显示Booleantrue
resetBtnShow头部表单筛选重置按钮显示String
searchBtnText头部表单搜索按钮文本String查询
resetBtnText头部表单重置按钮文本String重置
extraButtons操作列的自定义按钮, 渲染的是element-ui的button, 支持包括style在内的部分属性Array[]
headerButtons头部的自定义按钮, 渲染的是element-ui的button, 支持包括style在内的部分属性Array[]
singleElection存在勾选配置时,是否隐藏全选勾选框改为单选Booleanfalse
hasFilterColumn是否显示定制列Booleanfalse
hasPagination是否分页。如果不分页,则请求传参page=-1Booleantrue
hasPaginationBorder分页值是否增加边框Booleanfalse
paginationLayout分页组件的子组件布局,子组件名逗号分隔,对应el-pagination的layout属性Stringtotal/sizes/prev/pager/next/jumpertotal, sizes, prev, pager, next, jumper
paginationSizes分页组件的每页显示个数选择器的选项设置Array10, 20, 30, 40, 50
paginationSize分页组件的每页显示个数选择器默认选项,对应el-pagination的page-size属性Number10
noPaginationSize不分页时的size的大小Number999
tableAttrs参考element table 属性设置Object{}
operationAttrs操作列属性Object{width: '', fixed: 'right'}
customQuery向请求url添加的额外参数。Object{}
extraQuery向请求url添加的额外参数,可用.sync修饰。Objectfalse
saveQuery是否开启使用路由url保存query参数的功能Booleantrue
operationButtonType操作栏按钮类型,text 为文本按钮, button 为普通按钮Stringtext/buttontext
buttonSize按钮 大小Stringmedium/small/minismall
axiosConfig设置axios的config参数Object{}
isSearchCollapse折叠状态Booleanfalse

Method(方法)

方法名方法说明参数
rowClick表格单行被点击时row, column, event
getList获取列表数据{ loading: true }
search表单搜索
resetSearch重置查询,相当于点击「重置」按钮
handleSizeChange分页size发生变化时val
handleCurrentChange分页currentPage 改变时会触发val
toggleRowSelection切换某一行的选中状态,如果使用了第二个参数,则是设置这一行选中与否row, isSelected
clearSelection清空多选项
correctPage判断是否返回上一页
rowClassName行的 className 的回调方法,也可以使用字符串为所有行设置一个固定的 className...args

Events(事件)

事件名事件说明参数
selectionChange勾选项发生变化时val
rowClick单行被点击时row, column, event
update请求返回, 数据更新后触发data, resp
error请求数据失败,返回err对象err
reset按下重置按钮后触发

Slot(插槽)

插槽名插槽说明
search:{prop}自定义内容插入至筛选列某prop字段后
search额外的搜索内容, 当searchForm不满足需求时可以使用
collapse自定义折叠按钮, 默认的样式文案不满足时可以使用,scope 默认返回当前折叠状态 Boolean
header额外的header内容, 当headerButtons不满足需求时可以使用,作用域传入selected
customTemplate自定义表格区域内容,只有当isTablePattern为false时才可使用
noData不显示表格,自定义显示内容

custom-el-table columns Attr(列属性)

参数说明类型可选值默认值
type对应列的类型。如果设置了 selection 则显示多选框;如果设置了 index 则显示该行的索引(从 1 开始计算);如果设置了 expand 则显示为一个可展开的按钮 stringselection/index/expand
index如果设置了 type=index,可以通过传递 index 属性来自定义索引number, Function(index)--
column-keycolumn 的 key,如果需要使用 filter-change 事件,则需要此属性标识是哪个 column 的筛选条件string
label显示的标题string
prop对应列内容的字段名,也可以使用 property 属性string
width对应列的宽度string
min-width对应列的最小宽度,与 width 的区别是 width 是固定的,min-width 会把剩余宽度按比例分配给设置了 min-width 的列string
fixed列是否固定在左侧或者右侧,true 表示固定在左侧string, booleantrue, left, right
render-header列标题 Label 区域渲染使用的FunctionFunction(h, { column, $index })
sortable对应列是否可以排序,如果设置为 'custom',则代表用户希望远程排序,需要监听 Table 的 sort-change 事件boolean, stringtrue, false,'custom' false
sort-method对数据进行排序的时候使用的方法,仅当 sortable 设置为 true 的时候有效,需返回一个数字,和 Array.sort 表现一致Function(a, b)
sort-by指定数据按照哪个属性进行排序,仅当 sortable 设置为 true 且没有设置 sort-method 的时候有效。如果 sort-by 为数组,则先按照第 1 个属性排序,如果第 1 个相等,再按照第 2 个排序,以此类推String/Array/Function(row, index)
sort-orders数据在排序时所使用排序策略的轮转顺序,仅当 sortable 为 true 时有效。需传入一个数组,随着用户点击表头,该列依次按照数组中元素的顺序进行排序array数组中的元素需为以下三者之一:ascending 表示升序,descending 表示降序,null 表示还原为原始顺序'ascending', 'descending', null
resizable对应列是否可以通过拖动改变宽度(需要在 el-table 上设置 border 属性为真)booleantrue
formatter用来格式化内容Function(row, column, cellValue, index)
show-overflow-tooltip当内容过长被隐藏时显示 tooltipBooleanfalse
align对齐方式Stringleft/center/rightleft
header-align表头对齐方式,若不设置该项,则使用表格的对齐方式Stringleft/center/right
class-name列的 classNamestring

示例

<template>
  <div class="model">
    <basic-container>
      <!-- 自定义el表格 -->
      <custom-el-table ref="dataTable" v-bind="tableConfig"></custom-el-table>
    </basic-container>
  </div>
</template>

<script>
import {pageUrl} from '@/api/business/bccontracttemplate'
export default {
  data() {
    return {
      tableConfig: {
        url: pageUrl,
        reqMethod: 'get',
        pageKey: 'current',
        hasFilterColumn: false,
        dataPath: 'data.records',
        totalPath: 'data.total',
        searchBtnText: '搜索',
        saveQuery: false,
        extraQuery: {},
        columns: [
          {prop: 'index', label: '序号', width: 50, 'show-overflow-tooltip': true, formatter: (a, b, c, index) => index + 1},
          {prop: 'code', label: '编号', minWidth: 120, 'show-overflow-tooltip': true},
          {prop: 'name', label: '名称', minWidth: 100, 'show-overflow-tooltip': true},
          {prop: 'userName', label: '姓名', minWidth: 100, 'show-overflow-tooltip': true},
          {prop: 'gender', label: '性别', minWidth: 50, 'show-overflow-tooltip': true, formatter: ({gender}) => this.mapGender[gender] || '未知'},
          {prop: 'age', label: '年龄', minWidth: 50, 'show-overflow-tooltip': true},
          {prop: 'mobile', label: '手机号码', minWidth: 80, 'show-overflow-tooltip': true},
          {prop: 'address', label: '家庭住址', minWidth: 100, 'show-overflow-tooltip': true},
          {
            prop: 'accessories',
            label: '附件',
            minWidth: 100,
            'show-overflow-tooltip': true,
            formatter: ({accessories}) => {
              if (accessories) {
                return (
                  <div class="contractFile" onClick={() => console.log('点击')}>
                    <a href="javascript:void(0)">扫描件</a>
                  </div>
                )
              } else {
                return ''
              }
            }
          },
          {prop: 'createTime', label: '创建时间', 'show-overflow-tooltip': true}
        ],
        searchForm: [
          {type: 'input', label: '编号', id: 'code', el: {placeholder: '编号', clearable: true}},
          {type: 'input', label: '名称', id: 'name', el: {placeholder: '名称', clearable: true}}
        ],
        headerButtons: [
          {
            type: 'primary',
            text: '新建',
            icon: 'el-icon-plus',
            atClick: () => {
              return Promise.resolve(false) // 页面不刷新请求
            },
            show: () => true // 可做权限显示处理
          }
        ],
        extraButtons: [
          {
            text: '修改',
            atClick: ({id}) => {
              return Promise.resolve(false) // 页面不刷新请求
            },
            show: () => true // 可做权限显示处理
          },
          {
            text: '详情',
            atClick: ({id}) => {
              return Promise.resolve(false) // 页面不刷新请求
            },
            show: () => true // 可做权限显示处理
          },
          {
            text: '删除',
            icon: 'el-icon-delete',
            atClick: ({id, name}) => {
              return Promise.resolve(false) // 页面不刷新请求
            },
            show: () => true // 可做权限显示处理
          }
        ],
        tableAttrs: {border: true},
        operationAttrs: {
          minWidth: '120px'
        }
      }
    }
  },
  components: {},
  created() {},
  computed: {},
  methods: {}
}
</script>
<style lang="scss" scoped></style>