演示地址
下载地址

为偷懒而开发:

  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

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

注意

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

columnItem

属性类型可选说明
textstring列表头名称
valuestring列单元格键名
widthstring单元格宽度
fixedstringleft/right固定位置,多选和序号固定在左侧,只针对一级表头,该项设置时列宽度默认100px
hideInTableboolean在表格中不显示,仅一级表头生效
mustShowboolean该列在表中必须展示,不能被用户隐藏,仅一级表头生效
alignstringleft/center/right表头对齐方式
filter-typestringsearch/select/range/date筛选类型,仅一级表头生效,search关键字搜索,select类别选择
filter-dataarray筛选数据,仅一级表头生效
sortableboolean是否启用排序,仅一级表头生效
searchOrdernumber在搜索区的排列权重,越大越靠前
searchboolean/searchConfig是否可搜索,默认false,为true会根据是否包含enum字段选择显示input还是select
enumenumItem[]枚举数组,若列表数据字段为enum的value,则会自动替换展示enum的text
childrencolumnItem[]子表头

rowOperation

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

tableProps

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

toolbarString

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

paginationConfig

属性类型默认说明
prevTextstring上一页左侧按钮文字
nextTextstring下一页右侧按钮文字
pageSizenumber10每页数据量
showIconbooleanfalse是否以icon形式展示按钮,即‘上一页’‘下一页’变为图标形式

searchConfig

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

enumItem

属性类型说明
textstring文案
valuestring|number

exportSelectConfigObject

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

emits

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

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐