xs-table-view 开发文档

xs-table-view文章目录

一、安装步骤

二、基础使用

1.简单配置

效果预览 :

 表格基础配置:

2.搜索配置

效果预览:

 搜索配置参数: search 对象

3.按钮配置

效果预览:

按钮配置参数:button 数组内配置对象

4、弹窗配置

效果预览:

弹窗参数配置:popup 对象

5、多级表头配置

效果预览:

多级表头配置:

6、分页配置

列属性配置:

7、列隐藏配置

列隐藏配置:

8、自定义渲染函数配置

1、单元格自定义渲染

效果预览:

单元格render自定义渲染配置:

2、表头自定义渲染

 表头headerRender自定义渲染配置:

3、弹窗自定义渲染

三、插槽

1、搜索插槽:

 搜索插槽配置:

四、表格参数配置

1、xs-table-view 组件需要传递的参数

xs-table-view

  request配置

表格对象属性配置:tableOptions 

2、单个对象的属性配置:

3、单个对象的函数渲染配置:

4、辅助函数

总结


前言

提示:xs-table-view是基于element-ui进行二次封装,快速开发后台管理系统的table表格,只需要简单的对象配置参数,就可以得到一个样式丰富,扩展度高的表格。


一、安装步骤

xs-table-view是基于element-ui封装的,所以需要先安装element-ui

1、下载模块包

  • 下载安装 element-ui

几种下载方式

npm install element-ui

cnpm install element-ui

yarn install element-ui

  • 下载安装 xs-table-view

几种下载方式

npm install xs-table-view

cnpm install xs-table-view

yarn install xs-table-view

2、在main.js里引入库

代码如下(示例):

在main.js 里面引入

import ElementUI from 'element-ui'

import 'element-ui/lib/theme-chalk/index.css'

import XsTableView from 'xs-table-view'

// 全局注册就可以了,不用局部引入 

Vue.use(ElementUI)

Vue.use(XsTableView )

3、因为项目模块使用了jsx,如果无法运行,需要在vue.config.js中module.exports里面添加 transpileDependencies: ['xs-table-view']

module.exports = {
  transpileDependencies: ['xs-table-view'],
}

二、基础使用

1.简单配置

获得一个基础表格

<template>
   <xs-table-view :table-list="tableList" :request="requset"></xs-table-view >
</template>
 
<script>
// 这里引入你的接口
import { testApi } from './api'
export default {
  name: 'AppIndex',
  data() {
    return {
      requset: {
        getTableList: params => {
          // params是搜索的参数 接口需要是一个promise对象 不然组件内部可能会有问题
          return testApi({ ...params }).then(res => {
            // 返回一个数组
            return res.data
            // [{id:1,name:'xs',content:'哈哈哈'},{id:2,name:'xx',content:'嘻嘻嘻'}]
          })
        }
      },
      // 填入接口返回的key,name是表格表头名称
      tableList: [
        {
          key: 'id',
          name: '用户id'
        },
        {
          key: 'name',
          name: '用户昵称'
        },
        {
          key: 'text',
          name: '文本'
        },
        {
          key: 'createTime',
          name: '日期'
        }
      ]
    }
  }
}
</script>
 
<style scoped>
 
</style>

效果预览 :

 表格基础配置:

属性参数说明
key

对象中的key 例如const test = {age:18}

key就是age

name表格中表头名称

2.搜索配置

<template>
   <xs-table-view :table-list="tableList" :request="requset"></xs-table-view >
</template>
 
<script>
// 这里引入你的接口
import { testApi } from './api'
export default {
  name: 'AppIndex',
  data() {
    return {
      requset: {
        getTableList: params => {
           //params是搜索的参数
          return testApi({ ...params }).then(res => {
            // 返回一个数组
            return res.data
          })
        }
      },
      //填入接口返回的key,name是表格表头名称
      tableList: [ 
        {
          key: 'id',
          name: '用户id',
          search: {
            // 类型,可以定义 select,input,date
            type: 'select',
            value: '',
            options: {
              // options里面可以配置任何select组件内的属性
              multiple: true,
              style: {}
            },
            events: {
              change: (val) => {console.log(val, '-------click')}
            },
            // select 会需要定义一个list key值不能修改,可以动态传入一个数组变量
            // disabled 是否禁止选择
            list: [
              {
                label: '今天',
                value: '1',
                disabled: true
              },
              {
                label: '明天',
                value: '2'
              }
            ]
          }
        },
        {
          key: 'name',
          name: '用户昵称',
          search: {
            type: 'input',
            // options里可以配置任何input组件的属性
            options: {}
          }
        },
        {
          key: 'content',
          name: '文本'
        },
        {
          key: 'createTime',
          name: '日期',
          // searchKey可以将日期分隔为两个参数,不配置为一个字符串 
          // searchKey: {
          //   startDate: '',
          //   endDate: ''
          // },
          search: {
            type: 'date',
            value: ['2022-12-24', '2022-12-30'],
            // options里可以配置任何dateTimePicker组件的属性
            options: {
              // type: 'datetime'
            }
          }
        },
        {
          key: 'phone',
          name: '操作'
        }
      ]
    }
  }
}
</script>
 
<style scoped>
 
</style>

效果预览:

 搜索配置参数: search 对象

属性参数说明默认值说明
type搜索的组件类型可选select、date、inpit

value

组件的默认值

有了默认值

第一次搜索会带上这个参数

showSearchName

是否隐藏搜索的文字falseBoolean

searchName

搜索前面文字对象中的name

options

对象属性配置

对应element-ui组件内的

属性都可以配置 有 - 的时候

需要加引号,不能缩写。

events对象事件配置

对应element-ui组件内的

事件都可以配置,有-的时候

需要打引号'',不能缩写。

例如:'visible-change'

不能写成visibleChange

3.按钮配置

<template>
   <xs-table-view :table-list="tableList" :request="requset"></xs-table-view >
</template>
 
<script>
// 这里引入你的接口
import { testApi } from './api'
export default {
  name: 'AppIndex',
  data() {
    return {
      requset: {
        getTableList: params => {
           //params是搜索的参数
          return testApi({ ...params }).then(res => {
            // 返回一个数组
            return res.data
          })
        }
      },
      //填入接口返回的key,name是表格表头名称
      tableList: [ 
        {
          key: 'id',
          name: '用户id',
          search: {
            // 类型,可以定义 select,input,date
            type: 'select',
            value: '',
            options: {
              // options里面可以配置任何select组件内的属性
              multiple: true,
              style: {}
            },
            events: {
              change: (val) => {console.log(val, '-------click')}
            },
            // select 会需要定义一个list key值不能修改,可以动态传入一个数组变量
            // disabled 是否禁止选择
            list: [
              {
                label: '今天',
                value: '1',
                disabled: true
              },
              {
                label: '明天',
                value: '2'
              }
            ]
          }
        },
        {
          key: 'name',
          name: '用户昵称',
          search: {
            type: 'input',
            // options里可以配置任何input组件的属性
            options: {}
          }
        },
        {
          key: 'phone',
          name: '文本',
        },
        {
          key: 'createTime',
          name: '日期',
          // searchKey可以将日期分隔为两个参数,不配置为一个字符串 
          // searchKey: {
          //   startDate: '',
          //   endDate: ''
          // },
          search: {
            type: 'date',
            value: ['2022-12-24', '2022-12-30'],
            // options里可以配置任何dateTimePicker组件的属性
            options: {
              // type: 'datetime'
            }
          }
        },
        {
          name: '操作',
          button: [
            {
              name: '新增',
              type: 'success',
              events: {
                click: (params) => {
                  console.log(params, '点击按钮数据回调')
                }
              },
              hidden: (params) => {
                // params是表格一行对象参数,可以判断这个按钮是否显示。
                return false
              }
            },
            {
              name: '编辑',
              type: 'primary',
              events: {
                click: (params) => {
                  console.log(params, '点击按钮数据回调')
                }
              },
              hidden: (params) => {
                // params是表格一行对象参数,可以判断这个按钮是否显示。
                return false
              }
            }
          ]
        }
      ]
    }
  }
}
</script>
 
<style scoped>
 
</style>

效果预览:

按钮配置参数:button 数组内配置对象

属性参数说明默认值说明

name

按钮名字
type按钮颜色

primary

可选primary,success

info,warning,danger

options

属性配置Objec {}

element-uiz中按钮的所有

属性都可以进行配置

events事件配置Objec {}

click 点击事件

click:(params)=>{}

hidden是否隐藏按钮false

params回调参数,可以

根据数据判断是否展示

返回一个布尔值 Boolean

4、弹窗配置

<template>
  //需要加上ref,列表刷新的时候需要遇到。不刷新表格可以不定义
  <xs-table-view ref="xsTableView" :table-list="tableList" :request="requset"></xs-table-view>
</template>

<script>
// 这里引入你的接口
import { testApi } from '../utils/request'
export default {
  name: 'AppIndex',
  data() {
    return {
      requset: {
        getTableList: params => {
          // params是搜索的参数
          return testApi({ ...params }).then(res => {
            // 返回一个数组
            return res.data
          })
        }
      },
      // 填入接口返回的key,name是表格表头名称
      tableList: [
        {
          key: 'id',
          name: '用户id',
          search: {
            // 类型,可以定义 select,input,date
            type: 'select',
            value: '',
            options: {
              // options里面可以配置任何select组件内的属性
              multiple: true,
              style: {}
            },
            events: {
              change: (val) => {console.log(val, '-------click')}
            },
            // select 会需要定义一个list key值不能修改,可以动态传入一个数组变量
            // disabled 是否禁止选择
            list: [
              {
                label: '今天',
                value: '1',
                disabled: true
              },
              {
                label: '明天',
                value: '2'
              }
            ]
          }
        },
        {
          key: 'name',
          name: '用户昵称',
          search: {
            type: 'input',
            // options里可以配置任何input组件的属性
            options: {}
          }
        },
        {
          key: 'phone',
          name: '文本'
        },
        {
          key: 'createTime',
          name: '日期',
          search: {
            type: 'date',
            value: ['2022-12-24', '2022-12-30'],
            // options里可以配置任何dateTimePicker组件的属性
            options: {
              // type: 'datetime'
            }
          },
          // 多配置了popup
          popup: {
            type: 'date',
            value: ['2022-12-24', '2022-12-30']
          }
        },
        {
          name: '操作',
          width: 200,
          button: [
            {
              name: '新增',
              type: 'success',
              events: {
                click: (params) => {
                  this.$Dialog({
                    tableList: this.tableList,
                    type: 'add',
                    callback: (params, type) => {
                      console.log(params, type + '--' + '弹窗回调----------')
                      this.$Dialog.close()
                      if (type === 'close') {
                        console.log('取消弹窗')
                      }
                    }
                  })
                }
              },
              hidden: (params) => {
                return false
              }
            },
            {
              name: '编辑',
              type: 'primary',
              events: {
                click: (params) => {
                  this.$Dialog({
                    tableList: this.tableList,
                    data: params,
                    type: 'edit',
                    title: '测试title',
                    width: '50%',
                    cancelText: '禁止',
                    confirmText: '启用',
                    callback: (params, type) => {
                      console.log(params, type + '--' + '弹窗回调----------')
                      this.$Dialog.close()
                      if (type === 'confirm') {
                        this.$refs.xsTableView.tableRefresh(() => {
                          console.log('表格刷新回调')
                        })
                      }
                    }
                  })
                }
              },
              hidden: (params) => {
                return false
              }
            }
          ]
        }
      ]
    }
  }
}
</script>

效果预览:

弹窗参数配置:popup 对象

属性参数说明默认值说明

type

弹窗样式

默认取search的配置,

没有search默认是input

可选select,date,input
value组件默认值默认取对象key的value

popupShow

是否在弹窗中隐藏falseBoolean

5、多级表头配置

<template>
  <xs-table-view ref="xsTableView" :table-list="tableList" :request="requset"></xs-table-view>
</template>

<script>
// 这里引入你的接口
import { testApi } from './api'
export default {
  name: 'XsTableViewTest',
  data() {
    return {
      requset: {
        getTableList: params => {
          // params是搜索的参数 接口需要是一个promise对象 不然组件内部可能会有问题
          return testApi({ ...params }).then(res => {
            // 返回一个数组
            return res.data
            // [{id:1,name:'xs',content:'哈哈哈'},{id:2,name:'xx',content:'嘻嘻嘻'}]
          })
        }
      },
      // 填入接口返回的key,name是表格表头名称
      tableList: [
        {
          name: '用户',
          children: [
            {
              key: 'id',
              name: '用户id'
            },
            {
              key: 'name',
              name: '用户昵称'
            }
          ]
        },
        {
          key: 'name',
          name: '用户昵称'
        },
        {
          name: '文本',
          children: [
            {
              name: '二级表头',
              children: [
                {
                  key: 'text',
                  name: '三级表头'
                }
              ]
            }
          ]
        },
        {
          key: 'createTime',
          name: '日期'
        }
      ]
    }
  }
}
</script>

效果预览:

多级表头配置:

属性说明
children对象内嵌套children可以实现多级表头

6、分页配置

<template>
   //新增一个属性 tableOptions 配置组件内属性
  <xs-table-view ref="xsTableView" :table-list="tableList" :request="requset" :table-options="tableOptions"></xs-table-view>
</template>

<script>
// 这里引入你的接口
import { testApi } from './api'
export default {
  name: 'XsTableViewTest',
  data() {
    return {
      requset: {
        getTableList: params => {
          // params是搜索的参数 接口需要是一个promise对象 不然组件内部可能会有问题
          return testApi({ ...params }).then(res => {
            // 此处需要手动赋值total总条数
            this.tableOptions.pagination.total = res.total
            // 返回一个数组
            return res.data
            // [{id:1,name:'xs',content:'哈哈哈'},{id:2,name:'xx',content:'嘻嘻嘻'}]
          })
        }
      },
     //新增一个属性 tableOptions 配置组件内属性
      tableOptions: {
        pagination: {
          currentPage: 1, //组件内默认是1 页码
          pageSize: 10, //组件内默认是10 条数
          total: 10, //这个total需要手动赋值,不然page条数默认会是10
          show: true, //是否显示分页组件
          pageSizes: [10, 20, 30, 40, 50], // 可以设置一页展示多少条 有默认值
          style:{} //样式修改
        }
      },
      // 填入接口返回的key,name是表格表头名称
      tableList: [
        {
          name: '用户',
          children: [
            {
              key: 'id',
              name: '用户id'
            },
            {
              key: 'name',
              name: '用户昵称'
            }
          ]
        },
        {
          key: 'name',
          name: '用户昵称'
        },
        {
          name: '文本',
          children: [
            {
              name: '二级表头',
              children: [
                {
                  key: 'text',
                  name: '三级表头'
                }
              ]
            }
          ]
        },
        {
          key: 'createTime',
          name: '日期'
        }
      ]
    }
  }
}
</script>

分页属性配置:

属性参数说明默认值类型
pagination需要配置在tableOptions里object
currentPage页面,可以设置默认起始位置1string、number
pageSize请求数据条数10string、number
total

总条数,默认10条,需要手动赋值。

每个接口的值或者放的位置不同,

需要手动赋值总条数,不然只有10条

10string、number
show是否隐藏分页组件falseBoolean
pageSizes设置分页控件需要的条数Array
layout需要展示哪些属性,逗号分隔sizes, prev, pager, next, jumperstring

style

修改分页组件样式object
events组件事件,可以自定义事件

size-change,current-change

object
......对外支持element分页控件的所有属性和事件

7、列隐藏配置

<template>
   <xs-table-view :table-list="tableList" :request="requset" :table-options="tableOptions"></xs-table-view >
</template>
 
<script>
// 这里引入你的接口
import { testApi } from './api'
export default {
  name: 'AppIndex',
  data() {
    return {
      requset: {
        getTableList: params => {
           //params是搜索的参数
          return testApi({ ...params }).then(res => {
            // 返回一个数组
            return res.data
          })
        }
      },
     //新增一个属性 tableOptions 配置组件内属性
      tableOptions: {
        //筛选按钮对象
        tree: {
          name: '列表筛选', //按钮名称
          show: true, // 是否展示按钮
          options: { // 支持element按钮的所有属性
            type: 'primary',
            style:{}
          }
        }
      },
      //填入接口返回的key,name是表格表头名称
      tableList: [ 
        {
          key: 'id',
          name: '用户id',
          search: {
            // 类型,可以定义 select,input,date
            type: 'select',
            value: '',
            options: {
              // options里面可以配置任何select组件内的属性
              multiple: true,
              style: {}
            },
            events: {
              change: (val) => {console.log(val, '-------click')}
            },
            // select 会需要定义一个list key值不能修改,可以动态传入一个数组变量
            // disabled 是否禁止选择
            list: [
              {
                label: '今天',
                value: '1',
                disabled: true
              },
              {
                label: '明天',
                value: '2'
              }
            ]
          }
        },
        {
          key: 'name',
          name: '用户昵称',
          search: {
            type: 'input',
            // options里可以配置任何input组件的属性
            options: {}
          }
        },
        {
          key: 'content',
          name: '文本'
        },
        {
          key: 'createTime',
          name: '日期',
          // searchKey可以将日期分隔为两个参数,不配置为一个字符串 
          // searchKey: {
          //   startDate: '',
          //   endDate: ''
          // },
          search: {
            type: 'date',
            value: ['2022-12-24', '2022-12-30'],
            // options里可以配置任何dateTimePicker组件的属性
            options: {
              // type: 'datetime'
            }
          }
        },
        {
          key: 'phone',
          name: '操作'
        }
      ]
    }
  }
}
</script>
 
<style scoped>
 
</style>

效果预览:

列隐藏配置:

属性参数说明默认值类型
tree配置在tableOptionsobject
show是否展示列筛选按钮falseBoolean
name按钮名称列表筛选string
options可以配置element按钮的任意属性object

列表隐藏会保存当前路由的key进行缓存,每次会比较新列表和老列表有无新增和缩减,不会比较tableShow是否有变化,有新增或缩减会采用新列表。tableShow会联动搜索组件和table组件一起刷新

8、自定义渲染函数配置

1、单元格自定义渲染

<template>
  <xs-table-view ref="xsTableView" :table-list="tableList" :request="requset">
  </xs-table-view>
</template>

<script>
// 这里引入你的接口
import { testApi } from '../utils/request'
export default {
  name: 'XsTableViewTest',
  data() {
    return {
      requset: {
        getTableList: params => {
          // params是搜索的参数 接口需要是一个promise对象 不然组件内部可能会有问题
          return testApi({ ...params }).then(res => {
            // 返回一个数组
            return res.data
            // [{id:1,name:'xs',content:'哈哈哈'},{id:2,name:'xx',content:'嘻嘻嘻'}]
          })
        }
      },
      // 填入接口返回的key,name是表格表头名称
      tableList: [
        {
          key: 'id',
          name: '用户id',
          tableShow: true
        },
        {
          key: 'name',
          name: '用户昵称'
        },
        {
          key: 'avatar',
          name: '图片1',
          // image组件内置了,type设置为image就可以了
          type: 'image'
        },
        {
          name: '图片2',
          // render渲染函数 h为vue内置函数createElement的简写,组件内暴露出来的函数
          // 如果type不满足需求,需要加入文字或者别的自定义功能,就可以使用到render渲染函数
          // row,column,cellValue,index为当前行的对象数据
          render(h, { row, column, cellValue, index }) {
            return h('div', {
              style: {
                display: 'flex',
                alignItems: 'center',
                justifyContent: 'center'
              }
            }, [
              h('img', {
                style: {
                  width: '40px',
                  height: '40px'
                },
                attrs: {
                  src: require('../assets/logo.png')
                }
              }),
              h('span', column.label)
            ])
          }
        },
        {
          key: 'text',
          name: '文本'
        },
        {
          key: 'createTime',
          name: '日期'
        },
        {
          key: 'phone',
          name: '密文'
        }
      ]
    }
  }
}
</script>

效果预览:

单元格render自定义渲染配置:

属性参数说明
render

渲染函数,render(h,{row, column, cellValue, index})

h为vue内置函数createElement的简写 ,row,column...为当前行的数据

return返回一个h函数,会代替当前单元格内容,可以理解为插槽

Vue createElement的官方文档 渲染函数 & JSX — Vue.js

2、表头自定义渲染

<template>
  <xs-table-view ref="xsTableView" :table-list="tableList" :request="requset">
  </xs-table-view>
</template>

<script>
// 这里引入你的接口
import { testApi } from '../utils/request'
export default {
  name: 'XsTableViewTest',
  data() {
    return {
      requset: {
        getTableList: params => {
          // params是搜索的参数 接口需要是一个promise对象 不然组件内部可能会有问题
          return testApi({ ...params }).then(res => {
            // 返回一个数组
            return res.data
            // [{id:1,name:'xs',content:'哈哈哈'},{id:2,name:'xx',content:'嘻嘻嘻'}]
          })
        }
      },
      // 填入接口返回的key,name是表格表头名称
      tableList: [
        {
          key: 'id',
          name: '用户id'
        },
        {
          key: 'name',
          name: '用户昵称',
          // headerRender 和上方render单元格渲染是一样的。详细可以看上方render的使用
          // 写法和render函数一样,你可以理解为一个是单元格的插槽,一个是表头的插槽
          // 下方实现了一个icon 鼠标悬停,有个悬浮窗的功能
          headerRender: (h, { row, column, cellValue, index }) => {
            return h('div', [
              h('span', '自定义表头'),
              h('el-tooltip', {
                props: { content: 'xs-table-view,自定义表头' }
              }, [
                [
                  h('i', {
                    class: 'el-icon-question',
                    style: 'color:#409eff;margin-left:5px;font-size: 16px;line-height:23px'
                  })
                ]
              ])
            ])
          }
        },
        {
          key: 'text',
          name: '文本'
        },
        {
          key: 'createTime',
          name: '日期'
        },
        {
          key: 'phone',
          name: '密文'
        }
      ]
    }
  }
}
</script>

 表头headerRender自定义渲染配置:

属性参数说明
headerRender

渲染函数,render(h,{row, column, cellValue, index})

h为vue内置函数createElement的简写 ,row,column...为当前行的数据

return返回一个h函数,会代替当前表头的内容,可以理解为插槽

3、弹窗自定义渲染

和render、headerRender使用方法一样

属性参数说明
puopupRender

需要写在popup对象内, 渲染函数,render(h,{row, column, cellValue, index)

h为vue内置函数createElement的简写 ,params为当前行的数据

return返回一个h函数,会代替当前表头的内容,可以理解为插槽

自定义渲染函数,组件内部暴露出了h函数和当前行数据

h函数是vue内置的函数createElement, Vue的官方文档 渲染函数 & JSX — Vue.js

定义了函数之后,会替换掉对应位置的渲染

三、插槽

1、搜索插槽:

<template>
  <xs-table-view ref="xsTableView" :table-list="tableList" :request="requset" :table-options="tableOptions">
    <template #searchHeader>
      <el-button style="margin-right: 10px;">头部插槽</el-button>
    </template>
    <template #searchMiddle>
      <el-button style="margin-right: 10px;" @click="userAdd">中部插槽-按钮插槽-新增弹窗</el-button>
    </template>
    <!-- <template #searchButton>
      <el-button style="margin-right: 10px;">搜索插槽</el-button>
    </template> -->
    <template #searchFooter>
      <el-button style="margin-right: 10px;">尾部插槽</el-button>
    </template>
    <template #search>
      <div style="margin-bottom:20px;display:flex;justify-content:start;">
        <el-button type="primary">换行-自定义搜索</el-button>
      </div>
    </template>
  </xs-table-view>
</template>

<script>
// 这里引入你的接口
import { testApi } from '../utils/request'
export default {
  name: 'XsTableViewTest',
  data() {
    return {
      requset: {
        getTableList: params => {
          // params是搜索的参数 接口需要是一个promise对象 不然组件内部可能会有问题
          return testApi({ ...params }).then(res => {
            // 返回一个数组
            return res.data
            // [{id:1,name:'xs',content:'哈哈哈'},{id:2,name:'xx',content:'嘻嘻嘻'}]
          })
        }
      },
      tableOptions: {
        // 筛选按钮对象
        tree: {
          name: '列表筛选', // 按钮名称
          show: true, // 是否展示按钮
          options: { // 支持element按钮的所有属性
            type: 'primary',
            style: {}
          }
        }
      },
      // 填入接口返回的key,name是表格表头名称
      tableList: [
        {
          key: 'id',
          name: '用户id',
          tableShow: true,
          search: {
            // 类型,可以定义 select,input,date
            type: 'select',
            value: '',
            options: {
              // options里面可以配置任何select组件内的属性
              multiple: true,
              style: {}
            },
            events: {
              change: (val) => {console.log(val, '-------click')}
            },
            // select 会需要定义一个list key值不能修改,可以动态传入一个数组变量
            // disabled 是否禁止选择
            list: [
              {
                label: '今天',
                value: '1',
                disabled: true
              },
              {
                label: '明天',
                value: '2'
              }
            ]
          }
        },
        {
          key: 'name',
          name: '用户昵称',
          search: {
            type: 'input',
            // options里可以配置任何input组件的属性
            options: {}
          }
        },
        {
          key: 'text',
          name: '文本'
        },
        {
          key: 'createTime',
          name: '日期',
          // searchKey可以将日期分隔为两个参数,不配置为一个字符串
          // searchKey: {
          //   startDate: '',
          //   endDate: ''
          // },
          search: {
            type: 'date',
            value: ['2022-12-24', '2022-12-30'],
            // options里可以配置任何dateTimePicker组件的属性
            options: {
              // type: 'datetime'
            }
          }
        },
        {
          key: 'phone',
          name: '操作'
        }
      ]
    }
  },
  methods: {
    userAdd() {
      this.$Dialog({
        tableList: this.tableList,
        type: 'add',
        title: '测试title',
        width: '50%',
        cancelText: '取消',
        confirmText: '确定',
        callback: (params, type) => {
          console.log('弹窗参数' + params + '按钮回调类型' + type + '弹窗回调----------')
          this.$Dialog.close()
          if (type === 'confirm') {
            this.$refs.xsTableView.tableRefresh(() => {
              console.log('表格刷新回调')
            })
          }
        }
      })
    }
  }
}
</script>

效果预览:

 搜索插槽配置:

插槽名称参数说明

searchHeader

插槽头部,在搜索组件前位置

searchMiddle

插槽中部,位于表格搜索组件中间位置

searchButton

插槽搜索,默认是搜索按钮

searchFooter

插槽尾部,在搜索后面位置

search

插槽换行,位置搜索组件下方位置

四、表格参数配置

1、xs-table-view 组件需要传递的参数

属性参数说明类型说明

table-list

组件内需要的参数Array

request

网络请求Object
tableOptions表格内定义的参数Object见下方tableOptions说明
  • xs-table-view

<template>
  <div class="content">
    <tableView ref="xsTableView" :table-list="tableList" :request="requset" :table-options="tableOptions">
      <!-- <template #searchHeader>
        <div>
          <span style="color:red;margin-right: 10px;">头部插槽</span>
        </div>
      </template>
      <template #searchMiddle>
        <div>
          <span style="color:red;margin-right: 10px;">中间插槽</span>
        </div>
      </template>
      <template #searchButton>
        <div @click="userAdd">
          <span style="color:red;margin-right: 10px;">新增-按钮插槽</span>
        </div>
      </template>
      <template #searchFooter>
        <div>
          <span style="color:red;margin-right: 10px;">尾部插槽</span>
        </div>
      </template>
      <template #search>
        <div style="display:flex;justify-content:start">
          <el-button type="primary">自定义搜索</el-button>
        </div>
      </template> -->
    </tableView>
  </div>
</template>
  •   request配置

 request可以配置多个对象,table表格需要的数据,函数key必须为getTableList ,返回一个数组

import { testApi } from './api'
requset: {
    /*
        返回的数据 函数key必须为getTableList
        params是搜索参数,你可以在函数里面操作返回的数据
        每次搜索,翻页,刷新都会触发此函数
    **/
    getTableList: params => {
       console.log(params,'搜索的参数')
       return testApi({ ...params }).then(res => {
         console.log(res, '成功')
         this.tableOptions.pagination.total = res.total
         return res.data
       })
    }
    //下面也可以在继续定义在created里面执行的请求 只会执行一次
    demo:testApi
},

  • 表格对象属性配置:tableOptions 

组件内将属性透传了下去,所有element - table中的属性和事件都可以配置

column的需要在column中配置,这里是配置table表格的属性和事件

详细的属性和事件,有需要的对着element中做配置

属性参数说明默认项说明
searchShow是否隐藏顶部搜索组件false
searchStyle顶部搜索组件的样式配置
searchButtonName顶部默认搜索按钮名字配置
pagination

对象配置,pagination:{}里面的

属性和element中的pagination属性一样

参数有透传,作为第一次参数的默认参数

pagination:{

  currentPage:1,

  pageSize:10

}

中间有-不能缩写
需要加上''引号做

为key。例如:

'show-header':true

events函数事件配置

中间有-不能缩写
需要加上''引号做

为key。例如:

'row-click':()=>{}

表格配置例子:

tableOptions: {

        searchShow: false,

        searchButtonName: '查询',

        pagination: {

          currentPage: 2,

          pageSize: 30,

          total: 100,

          pageSizes: [10, 20, 30, 40, 50]

        }

        // 扩展参数 所有element-ui中table的属性,都可以配置进来

        'show-header':true, //不能写成 showHeader

        // 事件配置参数 所有element-ui中table的函数,都可以配置进来

        events:{

            //不能写成 rowClick

           'row-click': (params) => {

                  console.log(params)

            }

        }

      },

}

2、单个对象的属性配置:

属性参数说明默认项说明
key对象的键值对key,填入参数即可
表格会自动回显
name表格顶部title的名称

children 

定义多级表头,需要是个数组,内部对象格式一样详细看上文配置

tableShow

当前对象不在table中显示falseture为不显示

popupShow

当前对象不在弹窗中显示falseture为不显示

button

数组,内部配置对象。可以在table中渲染按钮组件详细看上文配置

search

搜索组件,可以配置当前对象是否展示搜索,和类型定义详细看上文配置

type

显示组件类型可选 image

searchKey

搜索的key值。例如 key是'name'需要修改key

searchKey:'userName'。也可以配置为对象,

search的value是数组的时候,对应的可以设置对象

searchKey: { startDate: '', endDate: ''}

String

如果搜索需要的值和

对象中的key不一样,

可以使用searchKey

3、单个对象的函数渲染配置:

属性参数说明默认项说明
render

渲染函数,可以自定义表格中单元格内的展示。

函数参数有render(h,{ row, column,cellValue, index})

h为vue的渲染函数,后面有当前对象的所有属性值

详细看上文配置
headerRender

渲染函数,可以自定义表格中表头的展示。

函数参数有headerRender(h,{ row, column,cellValue, index})

h为vue的渲染函数,后面有当前对象的所有属性值

详细看上文配置

popupRender

渲染函数,可以自定义弹窗中组件的展示形式。

函数参数有popupRender(h,{ row, column,cellValue, index})

h为vue的渲染函数,后面有当前对象的所有属性值

详细看上文配置

4、辅助函数

事件名事件说明说明
this.$Dialog新增和编辑弹窗

this.$refs.xsTableView.tableRefresh

表格刷新需要在组件内加上ref="xsTableView"

this.$Dialog 和 this.$refs.xsTableView.tableRefresh配合使用

this.$Dialog({
  tableList: this.tableList,
  type: 'add',
  title: '测试title',
  width: '50%',
  cancelText: '禁止',
  confirmText: '启用',
  callback: (params, type) => {
    console.log(params, type + '弹窗回调----------')
    //关闭弹窗
    this.$Dialog.close()
    //刷新列表
    this.$refs.xsTableView.tableRefresh((params) => {
      console.log('表格刷新成功回调')
  })
}


 

总结

xs-table-view 可以快速开发传统的table表格,以低代码的方法快速完成开发。

后续还有更多的功能和迭代

大家点赞和收藏一下,不迷路

为大家提供了一个github上的开源demo,大家可以体验一下

项目地址:https://github.com/xs-super-man/xs-table-view.git


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值