[关闭]
@yumewang 2021-01-21T10:44:28.000000Z 字数 3977 阅读 389

通用组件-Table组件

Table组件是一个后台前端表格组件的解决方案,它基于vue-element-admin,及vueelement-ui实现,虽是在vue-element-admin上封装实现,但也可以应用与vueelement-ui的其他前端实现。

这里主要是完成基本表格的数据渲染处理,排序,自定义操作的植入。

引用范例

  1. <template>
  2. <div>
  3. // 这里是写入Table组件
  4. <table-list
  5. ref="table"
  6. :page-info="pageInfo"
  7. :list-obj="listObj"
  8. :table-obj="tableObj"
  9. :list-query="listQuery"
  10. />
  11. </div
  12. </template>
  13. <script>
  14. // 这里import 引入组件
  15. import DataForm from '@/views/1a-sanyangma/pp-web-template/form'
  16. export default {
  17. name: 'ComplexTable',
  18. components: { TableList }, // 这里需要注册该组件
  19. data: {
  20. return {
  21. pageInfo: {
  22. isPageUrl: false, // 这里是定义当前请求路径是否是全路径
  23. url: '/twms/manager/api/basedata/accountitem', // 请求路径
  24. id: 'taiId' // 该id是用于数据处理的关键id
  25. },
  26. tableObj: {
  27. sord: 'desc',
  28. border: true,
  29. btnsGroup: [ // 这里是表格种的行操作项
  30. {
  31. title: '详情',
  32. icon: 'el-icon-view',
  33. disabled: (row) => { return false },
  34. clickMethod: (row) => { vm.handleDealData(row, 'detail') } },
  35. {
  36. title: '编辑',
  37. icon: 'el-icon-edit',
  38. disabled: false,
  39. clickMethod: (row) => { vm.handleDealData(row, 'update') } },
  40. { title: '删除', icon: 'el-icon-delete', disabled: false }
  41. ]
  42. },
  43. listObj: [ // 这里是定义行中每一列的展示对象是谁
  44. { field: 'taiId', type: 'TEXT', name: '序号', width: 80, sortable: 'true', fixed: true },
  45. { field: 'taiCode', type: 'TEXT', name: '费目编码', width: 110, sortable: 'true' },
  46. { field: 'taiName', type: 'TEXT', name: '费目名称', width: 110, sortable: 'true' },
  47. { field: 'taiType', type: 'SLOT_VALUE', name: '费目类型', width: 110, sortable: 'true', data: 'costType' },
  48. { field: 'taiStatus', type: 'SLOT_VALUE', name: '状态', width: 80, sortable: 'true', data: 'dataState' },
  49. { field: 'remark', type: 'TEXT', name: '备注', width: 150, sortable: 'true' },
  50. { field: 'createuser', type: 'TEXT', name: '创建者', width: 150, sortable: 'true' },
  51. { field: 'createtime', type: 'TEXT', name: '创建时间', width: 150, sortable: 'true' },
  52. { field: 'updateuser', type: 'TEXT', name: '更新者', width: 150, sortable: 'true' },
  53. { field: 'updatetime', type: 'TEXT', name: '更新时间', width: 150, sortable: 'true' },
  54. { field: 'actions', type: 'BTNS', name: '操作', width: 180, fixed: 'right' }
  55. ],
  56. listQuery: {} // 这里是表格相关的查询条件
  57. },
  58. created() {
  59. // 这里是初始化查询条件
  60. this.initFilterParams()
  61. // 触发第一次获取table数据
  62. this.getList()
  63. },
  64. methods: {
  65. // 调用Table组件中的控制table的高度,来适应窗口大小,并且达到分页控件底部固定
  66. resizeTable() {
  67. this.$nextTick(function() {
  68. this.$refs.table.changeTableMaxHeight()
  69. })
  70. },
  71. initFilterParams() {
  72. this.listQuery = {
  73. page: 1,
  74. sidx: this.pageInfo.id,
  75. sord: this.tableObj.sord
  76. }
  77. },
  78. // 这里是当查询时要调度用的获取数据列表的方法
  79. getList() {
  80. this.$nextTick(() => {
  81. // 获取table组件里的按多少笔数据来分页
  82. this.listQuery['rows'] = this.$refs.table.pageSizes[0]
  83. this.$refs.table.getList(this.listQuery, data => {
  84. // 开发提示:这里是返回的data,是列表上当前获取的分页数据,如果你要使用,可在这里扩展功能
  85. // console.log(data)
  86. })
  87. })
  88. }
  89. }

Table组件的属性

1. pageInfo

参数 说明 类型 可选值 默认值
isPageUrl 数据请求地址是否是完整地址,为true,则直接发起请求,为false,则拼接'/page',为‘/twms/manager/api/basedata/accountitem/page’ string - -
url 表格数据远程访问地址 string - -
id 用于识别表格每一行的关键属性,每行数据操作的关键值,及初始化排序字段 string - -

2. tableObj

参数 说明 类型 可选值 默认值
sord 排序方式 string desc, asc -
border 表格是否有边框 boolean true,false true
selectable 表头是否有选择框 int 1标识可选,2标识隐藏,3标识警用 1
handleSelect 获取当前表格的选择数据,范例:handleSelect: (selection, row) => { this.handleSelectOrder(selection, row) },
function 1标识可选,2标识隐藏,3标识警用 1
btnsGroup 用于扩展每一行的操作,详见操作的定义 array - -
btnsGroup的定义
参数 说明 类型 可选值 默认值
name 按钮的名称 string - -
title 按钮的hover显示数据 string - -
type 按钮类型 string primary / success / warning / danger / info / text / dropdown -
icon 图标类名,使用Element的icon。例外:当icon="el-icon-delete",且没有定义clickMethod时,会直接调用Table组件的通用删除方法handleDelete(row)来删除某一行数据 string - -
disabled 是否禁用状态 boolean true,false false
clickMethod 按钮的操作方法 (row) => { vm.handleDealData(row, 'detail') } } 调度本地定义的方法 boolean true,false false

3. listObj里的每一行

{ field: 'createuser', type: 'TEXT', name: '创建者', width: 150, sortable: true },

参数 说明 类型 可选值 默认值
field 表格每一列的数据对象属性 string - -
type 表格该列的数据类型 string TEXT, TEXT_SUB, TEXT_FUNCTION, SLOT_FIELDS, SLOT_VALUE, SLOT_IMG, BTNS -
name 表格该列的表头名称 string - -
width 表格该列的宽度,合法的值为数字或者单位为 px 的高度。 string/number - -
sortable 对应列是否可以排序 true, false - false

关于type的定义说明:

  1. let userInfo = {
  2. name: '孙悟空', ------------>例①:用TXET
  3. gender: 0, // 0男,1女 ------>例②:用SLOT_VALUE,并在rawData中注册:[男,女]
  4. avatar: 'http://img.cm/a', -->例③:用SLOT_IMG
  5. // 家庭地址
  6. province: '重庆市', --------->例④:用SLOT_FIELDS,并定义scope: ['province', 'city', 'zone']
  7. city: '重庆市',
  8. zone: '江北',
  9. // 身份证
  10. card: {
  11. no: '999999999', ----->例⑤:用TEXT_SUBfield'card.no'会,直接取到userInfo.card.no的值
  12. date: '2020-10-10'
  13. },
  14. // 有2个小孩
  15. children: [
  16. { name: '悟饭' },
  17. { name: '悟天' }
  18. ]------------------------>例⑥:用TEXT_FUNCTION,还是自己来告诉这个组件要取什么吧,传一个getData:方法吧。
  19. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注