tablePage是一个可以帮助快速开发后台管理系统表格的组件

tablePage是一个可以帮助快速开发后台管理系统表格的组件

首先先来看看怎么使用

tablePage的使用非常简单高效,只要把tablePage组件和tablePageJs引入,对tablepage进行组件注册,然后混入tablePageJs。

import TablePage from "../../TablePage/TablePage.vue";
import TablePageJs from "../../TablePage/TablePage.js";
components: { TablePage },
mixins: [TablePageJs],
      :data="tableListData"
      :filter="filter"
      @tableSelectionChange="tableSelectionChange"
      @search="search"
      @resetSearch="resetSearch"
      @sizeChange="sizeChange"
      @currentChange="currentChange"
      @sortChange="sortChange"
      ref="table"
      id="taskTable"
      @setTableKeys="setTableKeys"
      @selectAll="tableSelectAllStatus"
      :searchForm="searchForm"
    />```

    ```tableListData: {
        selection: true, 
        columnFunctionsWidth: 120,
        tableData: [
          {
            deviceUid: 1,
            deviceName: "deviceName",
            commandId: 2,
          },
        ],
        tableKeys: [
          {
            id: "deviceUid",
            label: "设备UID",
            width: "200",
            allways: true,
          },
        ],
        tableFunctions: [
          {
            label: "按钮",
            method: (scope) => {
              alert("按钮");
            },
            disabled: (scope) => {
              return true;
            },
          },
          },
        ],
      },
    ```

    主要的一些props
    data:主要是传入表格的一些功能和数据的控制
    tableListData中:
        selection控制表格前面的选择按钮
        columnFunctionsWidth控制列宽
        tableData控制展示的数据,将后端获取到的数据放入
        tableKeys表格对应字段的值 id为字段名 label为表头名  
        tableFunctions表格操作栏
    filter:主要是控制表格的模糊查询以及分页查询

    tableSelectionChange:存储选中项数组
    search:根据filter中的条件进行查询
    resetSearch:将filter中的条件置为初始定义的值并且重新发送请求
    sizeChange:改变fitler中的pageSize并且pageNum置为1并且重新发送请求
    currentChange:改变fitler中的pageNum并且重新发送请求
    sortChange:根据filter中sortOrder排序条件重新发送请求
    setTableKeys:表头改变时,记录用户操作
    selectAll:选中所有数据
    以上的自定义事件在tablePageJs中定义了
    searchForm中:
      formDesc:用于描述表单输入的字段
        type:输入框类型 如 input select ...
        label:输入框的label
        attrs:元素上的属性

TablePage.js做了什么

1 data中定义
``` data () {
    return {
      multiData: [],
      tableSelectAll: false,
      filter: {
        pageSize: 10, // 每页条数
        pageNum: 1, // 当前页
        rowTotal: null, // 总条数
        sortName: '',
        sortOrder: '',
        pageSizes: [10, 20, 50, 100]
      },
      cacheInit: false
    }
  },

multiData:选中的数据
tableSelectAll:是否全选
filtert:condiction是模糊的条件,其他字段为分页查询条件
cacheInit:是否是第一次缓存

2 watch中定义

      async handler (val, oldval) {
        // 限制只获取一次缓存
        if (this.cacheInit) {
          return
        }
      },
      immediate: true,
      deep: true
    }

监听tbaleListData中的tableKeys,如果已经不是第一次了就直接return

3 methods中定义,大部分都是使用组件的时候监听的事件
tableSelectionChange:存储选中项数组
search:根据filter中的条件进行查询
resetSearch:将filter中的条件置为初始定义的值并且重新发送请求
sizeChange:改变fitler中的pageSize并且pageNum置为1并且重新发送请求
currentChange:改变fitler中的pageNum并且重新发送请求
sortChange:根据filter中sortOrder排序条件重新发送请求
setTableKeys:表头改变时,记录用户操作
selectAll:选中所有数据

接下来就看看tablePage组件中的代码 我觉得比较重要的一些
搜索栏模块 让用户自定义传入搜索模块
额外的搜索控制栏 让用户自定义传入额外的搜索控制栏
控制栏 主要是选中 全选 等方法

列表模块 使用el-table然后再data中绑定tableData
1 使用data中selection属性判断是否要表格前面的选择框
2 循环tableKeys数组实现数据列
3 中也提供了插槽name为column_${item.id},判断tableKeys数组对象中是否又formatter,如果有调用formatter传入scope.row,无则直接rowValue函数,可以为表格中空的字段做一些处理
4 tableFunctions对操作列进行显示控制,如果tableFunctions.length大于4给他更多的按钮并隐藏大于4的其他操作,对于操作就是循环tableFunctions数组click时触发对象中的method方法并且渲染对象的label

最后底部模块就是一个分页器通过pagination来控制显示隐藏,同时使用了传入的filter对象中的属性进行控制

tablePage中script的实现
props模块

props: {
    // 布局显示隐藏
    layout: {
      type: Array,
      default: layoutList,
    },
    // 表格数据
    data: {
      type: Object,
      require: true,
    },
    // 页码和数据条数
    filter: {
      type: Object,
    },
    // 表格名称
    pageName: {
      type: String,
    },
    //  表格ID,用于记录表格操作的唯一标识
    id: {
      type: String,
      default: "tablepage",
    },
    // 表格自定义样式
    customClass: {
      type: String,
      default: "",
    },
    // 是否显示加载中
    loading: {
      type: Boolean,
      default: false,
    },
    // 表格高度
    height: {
      type: String,
    },
  },

data中的数据

  data() {
    return {
      tableKeys: [], // 表格列是否显示
      tableData: [], // 表格数据
      tableIndex: null, // 表格自定义排序
      multiData: [], // 多选数据
      selectAll: false, // 是否全选
      maxHeight: 1000, // 表格最大高度,不超过页面高度
    };
  },

watch中的实现
selectAll data.tableData data.tableKeys对着三个变量进行watch

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容