> 文章列表 > uniapp:mosowe-table高级表格组件

uniapp:mosowe-table高级表格组件

uniapp:mosowe-table高级表格组件

演示地址
下载地址

为偷懒而开发:

  1. 多级表头,默认子集占父级宽度50%,flex布局
  2. 根据设置自动生成搜索区
  3. 搜索区可设置默认展开/收起
  4. 可以设置左右固定列,多选框及索引列默认左侧固定
  5. 用户可自主设置展示列
  6. 组件内部翻页、刷新及搜索事件处理
  7. 组件内flex垂直布局模式
  8. 透传uni-table的props,events
  9. 内置常用表单按钮,emits返回相关数据
  10. 丰富的slots
  11. 可单选,多选

依赖

uni-table
uni-pagination
mosowe-form
mosowe-dropdown

props

属性 类型 默认 说明
column columnItem[] - 列配置,排列顺序即为表格顺序
localData array 本地数据列表,与requestMethod不能同时为空,优先级最高
requestMethod function 数据获取的方法,接受一个promise返回的方法,其then方法的回调参数res={code,data,msg}格式,data包含了dataListKeydataTotalKey,若不满足可以使用initBefore处理
autoRequest boolean true 是否自动请求数据,即页面加载完就请求
rowOperation rowOperation[] 表格行末尾的操作选项列表,即操作列
rowOperationWidth string 100 操作列宽度
tableProps object 表格uni-table的props配置,loading属性无效,已被组件内部处理了,如需请使用ref调用
title string 左上角表格名称
initBefore function 表格通过requestMethod获取数据后渲染页面前数据处理,参数为接口返回数据res,return值为{list,total}结构,list、total为固定字段
dataListKey string list requestMethod时数据列表的键名
dataTotalKey string total requestMethod时数据总数的键名
toolbar boolean/toolbarString true 表格常用工具展示,默认true展示全部,false不展示,值为toolbarString时展示相关按钮,多个英文逗号分隔
pagination boolean/paginationConfig true 分页器配置,默认true显示,组件默认配置为{current:1,pageSize:10},false不展示,翻页功能添加了节流处理,点击翻页300ms后请求数据
defaultOpenSearch boolean/number false 是否默认展开搜索区,或者默认展开多少项,配置为number的时候,默认显示‘收起’按钮,点击收起的时候,只展示一行
autoHeight boolean false 不限制高度,自动增加
maxHeight string - 最大高度,低于最大高度的时候,高度自适应,优先级高于autoHeight
showIndex boolean false 显示序号
exportSelectConfig exportSelectConfigObject 导出已选配置
radio boolean false tableProps.type === 'selection'时单选,单选时只能在当前页选中,跨页清空

注意

  1. 组件内部使用flex垂直布局,最外层元素宽高设置为100%,所以建议组件的父级元素应该设置固定高度,且y轴可滚动。
  2. 可通过ref操作uni-table等组件methods

columnItem

属性 类型 可选 说明
text string 列表头名称
value string 列单元格键名
width string 单元格宽度
fixed string left/right 固定位置,多选和序号固定在左侧,只针对一级表头,该项设置时列宽度默认100px
hideInTable boolean 在表格中不显示,仅一级表头生效
mustShow boolean 该列在表中必须展示,不能被用户隐藏,仅一级表头生效
align string left/center/right 表头对齐方式
filter-type string search/select/range/date 筛选类型,仅一级表头生效,search关键字搜索,select类别选择
filter-data array 筛选数据,仅一级表头生效
sortable boolean 是否启用排序,仅一级表头生效
searchOrder number 在搜索区的排列权重,越大越靠前
search boolean/searchConfig 是否可搜索,默认false,为true会根据是否包含enum字段选择显示input还是select
enum enumItem[] 枚举数组,若列表数据字段为enum的value,则会自动替换展示enum的text
children columnItem[] 子表头

rowOperation

属性 类型 可选 说明
text string 按钮文案
click function 按钮点击事件,回调参数为行数据
isShow boolean 是否显示,用于权限配置
type string text/button 按钮类型
config object type=button的props配置,或type=text时文字颜色等样式设置

tableProps

属性 类型 默认 说明
border boolean false 是否带有纵向边框
stripe boolean true 是否显示斑马线样式
type string 值为type=“selection” 时开启多选
emptyText string 没有更多数据 空数据时显示的文本内容

toolbarString

说明
export 导出按钮,默认文案:导出
exportChoose 导出已选按钮,默认文案:导出已选,组件内置导出功能,导出原始表格列表数据,与右上角列显隐无关,多级表头只导出子集表头,有配置enum的会转文案后输出
add 新增按钮,默认文案:新增
download 下载模板按钮,默认文案:下载模板
upload 导入按钮,默认文案:导入数据
delete 删除按钮,表格可选择时生效,默认文案:删除已选
column 列布局展示按钮
refresh 刷新按钮

paginationConfig

属性 类型 默认 说明
prevText string 上一页 左侧按钮文字
nextText string 下一页 右侧按钮文字
pageSize number 10 每页数据量
showIcon boolean false 是否以icon形式展示按钮,即‘上一页’‘下一页’变为图标形式

searchConfig

参考mosowe-formnameConfig配置,其中col,hide,visible配置无效

enumItem

属性 类型 说明
text string 文案
value string|number

exportSelectConfigObject

属性 类型 说明
type string 导出类型,支持:xls,html,csv,默认xls
filename string 导出文件名称,优先级 > title,都没有就默认时间戳

emits

事件 说明
onSearchChange 搜索区表单项值改变时,回调参数为name及值
onExport 导出按钮点击事件,回调参数为查询参数,导出功能的传参需要搜索区点击查询后方能生效
onAdd 新增按钮点击事件
onDownload 下载按钮点击事件,回调参数为查询参数
onUpload 导入数据按钮点击事件
onDelete 删除已选按钮点击事件,回调参数为表格已选数据列表
onSelectionChange 多选时选项改变事件,回调参数为已选数据列表
onSortChange th点击排序,回调参数obj
onFilterChange th点击筛选,回调参数obj

slots

slot 说明
search 搜索区插槽
toolbar 工具栏区插槽,作用域参数为{selectData,searchQuery}
toolbarLeft 工具栏左侧区插槽,作用域参数为{selectData,searchQuery},包含了title,export,add,download,delete按钮
toolbarRight 工具栏右侧区插槽,作用域参数为{selectData,searchQuery},包含了column,refresh按钮
rowOperation 表格行操作栏插槽,作用域参数为{index,rowData}
more 工具栏上方,搜索区下方插槽
under 分页下方底部区插槽
paginationLeft 分页区左侧插槽
[columnItem.value]Header 表格头部插槽,一级表头有效,作用域参数为{index,colnum}
[columnItem.value]Default 表格单元插槽,一级表头有效,作用域参数为{index,rowData,colnum}

示例代码

<template><mosowe-table:column="column":requestMethod="requestMethod"dataListKey="content"dataTotalKey="totalCount"rowOperationWidth="100"showIndex:tableProps="{type: 'selection'}":rowOperation="rowOperation"@onAdd="onAdd"@onDelete="onDelete"@onSelectionChange="selectionChange"@onSortChange="onSortChange"@onSearchChange="onSearchChange"></mosowe-table>
</template><script setup lang="ts">
import { ref } from 'vue';
const app = getApp().globalData;
app?.checkLogin();const requestMethod = (query: any) => {return new Promise((resolve) => {console.log('query', query);setTimeout(() => {resolve({code: 0,data: {content: Array.from({ length: query.pageSize }).map((_, index) => {return {name: '测试' + Date.now().toString().substring(9) + '-' + index,name2: '测试2',sex: index % 3,age: 20,date: Date.now()};}),totalCount: 100},msg: ''});}, 1000);});
};const initBefore = (data: any) => {return {list: data.data.list.map((item: any) => ({ ...item, name: '我改了' })),total: data.data.total};
};
const onSortChange = (obj: any) =>{console.log('onSortChange',obj)
}const selectionChange = (data: any) => {console.log('selectionChange',data)
}const localData = Array.from({ length: 50 }).map((_, index) => {return {name: '测试',name2: '测试2',sex: index % 3,age: 20,date: Date.now()};
});
const rowOperation = [{text: '编辑',type: 'text',isShow: true,config: {color: '#409eff'},click: (row: any) => {console.log('编辑', row);}},{text: '删除',type: 'text',isShow: true,config: {sizi: 'mini',type: 'primary',style: {height: '20px',lineHeight: '20px',fontSize: '12px'}},click: (row: any) => {console.log('删除', row);}}
];const onSearchChange = (name: any,value: any) => {console.log(name,value)if (name ==='name') {column.value[2].enum = [{text: '男',value: 0},{text: '女',value: 1}]}
}const column = ref([{text: '姓名',value: 'name',fixed: 'right',sortable: true,search: {type:'input',unionName: 'date=2023-02-01'}},{text: '姓名2',value: 'name2',width:'150',fixed: 'right'},{text: '性别',value: 'sex',width: '300',search: true,enum: [{text: '男',value: 0},{text: '女',value: 1},{text: '未知',value: 2}]},{text: '年龄',value: 'age',search: true,},{text: '创建时间',value: 'date',searchOrder:12,search: {type: 'date',defaultValue: '2021-02-1',transform:(value: any)=>{return {time: value}}}}
]);const onAdd = () => {console.log('onAdd');
};
const onDelete = (data: any) => {console.log('onDelete', data);
};
</script><style lang="scss" scoped></style>