0.0.5 • Published 3 years ago

vue-element-easy-search-table v0.0.5

Weekly downloads
-
License
ISC
Repository
-
Last release
3 years ago

vue-element-easy-search-table

  • 基于 element-ui table 二次封装的简单表格

  • 完全支持 element ui table 组件的所有属性

  • 基于 element-ui 二次封装的搜索动态表单

安装

npm i vue-element-easy-search-table

示例

// 在main.js 引入
import EasySearchTable from "vue-element-easy-search-table";
Vue.use(
  EasySearchTable,
  /* 全局配置 */ {
    // 表格属性
    tableAttrs: {
      border: true,
      size: "small",
      "header-row-class-name": "className",
    },
    // 单元格属性
    tableColumnAttrs: {
      align: "center",
      emptyPlaceholder: "--",
      omit: {
        rows: 2,
        direction: "top",
      },
    },
    // 分页属性
    paginationAttrs: {
      align: "right",
    },
    // 搜索属性
    searchAttrs: {
      expandHideCount: 2,
    },
  }
);
<EasySearchTable
  row-id="id"
  :data="list"
  :tableOptions="tableOptions"
  :page.sync="page"
  :page-size.sync="size"
  :total="tableData.length"
  :checkbox-config="{ fetchVal: true, rowClick: true }"
  :radio-config="{ fetchVal: true, rowClick: true }"
  :searchOptions="searchOptions"
  :search="search"
  @checked-change="handleChecked"
  @selected-change="select"
  @pagination="handleChangePage"
>
</EasySearchTable>

<!-- 或者分离使用 -->
<Search :searchOptions="searchOptions" :search="search" />
<EasyTable
  row-id="id"
  :data="list"
  :tableOptions="tableOptions"
  :page.sync="page"
  :page-size.sync="size"
  :total="tableData.length"
  :checkbox-config="{ fetchVal: true, rowClick: true }"
  :radio-config="{ fetchVal: true, rowClick: true }"
  :pageSizes="[2]"
  @checked-change="handleChecked"
  @selected-change="select"
  @pagination="handleChangePage"
/>
export default {
  name: "App",
  components: {},
  data() {
    return {
      page: 1,
      size: 2,
      total: 1000,
      selectedVal: -1,
      list: [],
      tableData: [
        {
          id: 1,
          date: "2016-05-02",
          name: "王小虎",
          address: "上海市普陀区金沙江路 1518 弄",
          type: "1",
          img: require("@/assets/images/avatar.jpg"),
          status: 1,
        },
        {
          id: 2,
          date: "2016-05-04",
          name: "王小虎",
          address:
            "上海市普陀区金沙江路 1517 弄上海市普陀区金沙江路 1517 弄上海市普陀区金沙江路 1517 弄",
          type: 0,
          img: require("@/assets/images/avatar.jpg"),
          status: 1,
        },
        {
          id: 3,
          date: "2016-05-01",
          name: "王小虎",
          address: "上海市普陀区金沙江路 1519 弄弄弄",
          type: "",
          img: require("@/assets/images/avatar.jpg"),
          status: 2,
        },
        {
          id: 4,
          date: "2016-05-03",
          name: "王小虎",
          address: "上海市普陀区金沙江路 1516 弄",
          type: "上海市普陀区金沙江路 1516 上海市普陀区金沙江路 1516",
          img: require("@/assets/images/avatar.jpg"),
          status: 0,
        },
      ],
    };
  },
  computed: {
    tableOptions() {
      return [
        {
          title: "单选",
          type: "selection",
        },
        {
          title: "日期",
          prop: "date",
          merge: [
            {
              title: "名称",
              prop: "name",

              merge: [
                {
                  title: "名称1",
                  prop: "type",

                  check: true,
                  render: (h, data) => {
                    return <span>姓名:{data.type}</span>;
                  },
                },
                {
                  title: "地址",
                  prop: "address",
                  omit: 2,
                  returnVal: (value) => {
                    return `详细地址:${value}`;
                  },
                },
              ],
            },
            {
              title: "地址",
              prop: "address",
            },
          ],
        },
        {
          title: "名称111",
          prop: "type",
          show: false,
          renderHeader: () => {
            return (
              <span>
                <span>自定义表头</span>
                <sup>*</sup>
              </span>
            );
          },
          returnVal: (value) => {
            return `姓名: ${value}`;
          },
        },
        {
          title: "图片",
          render: (h, data) => {
            return (
              <div>
                <img style="width: 50px; height: 50px" src={data.img} />
              </div>
            );
          },
        },
        {
          title: "地址",
          prop: "address",
          omit: {
            effect: "light",
            rows: 1,
            direction: "top",
          },
        },
        {
          title: "地址",
          prop: "date",
          omit: 1,
        },
        {
          title: "状态",
          prop: "status",
          enumType: [
            {
              value: 0,
              label: "未开始",
            },
            {
              value: 1,
              label: "已开始",
            },
            {
              value: 2,
              label: "进行中",
            },
          ],
        },
        {
          title: "状态2",
          prop: "status",
          enumType: {
            // 自定义枚举参数
            params: {
              value: "status",
              label: "text",
            },
            data: [
              {
                status: 0,
                text: "未开始",
              },
              {
                status: 1,
                text: "已开始",
              },
              {
                status: 2,
                text: "进行中",
              },
            ],
          },
        },
      ];
    },
    searchOptions() {
      return [
        {
          label: "名称",
          type: "text",
          prop: "name",
        },
        {
          label: "状态",
          type: "select",
          prop: "status",
          options: [
            {
              value: 0,
              label: "未开始",
            },
            {
              value: 1,
              label: "已开始",
            },
            {
              value: 2,
              label: "进行中",
            },
          ],
        },
      ];
    },
  },
  methods: {
    handleChangePage(page) {
      this.list = this.tableData.filter((v, k) => {
        if (k >= (page - 1) * 2 && k < page * 2) {
          return v;
        }
      });
    },
    handleChecked(data) {
      console.log("radio");
      console.log(data);
    },
    select(data) {
      console.log("selected");
      console.log(data);
    },
    search() {
      console.log("search");
    },
  },
};

Table Global Attribute

参数说明类型
tableAttrs表格属性object
tableColumnAttrs单元格属性object
paginationAttrs分页属性object
searchAttrs搜索属性object

Table Attribute

参数说明类型可选
loading加载boolean
page当前页number
pageSize每页数量number
total数据总条数number
row-id行数据的取值参数string
tableOptions表格参数array
checkbox-configtype=selection 配置参数:“fetchVal 直接取值,row-id 必须填写取值属性,rowClick 点击行”object{fetchVal: boolean, rowClick: boolean}
radio-configtype=radio 配置参数:“selectedVal 默认选中,fetchVal 直接取值,row-id 必须填写取值属性,rowClick 点击行”object{selectedVal: selectedVal, fetchVal: boolean, rowClick: boolean}
paginationAttrs绑定分页属性,可参考 element-ui Pagination 属性object

Table Options

参数说明类型可选默认值
title显示的标题string
prop对应列内容的字段名string
width单元格宽度number
show是否显示booleantrue
align文本对齐方式stringleft/right/center
typeradio 显示单选框,其他参数对应 element-ui table 的 type 属性stringselection/index/expand/radio
attrs绑定属性,可参考 element-ui table Table-column Attributes 属性object
merge表头合并,递归合并表头,可多层合并array
render等同于 element-ui table “slot-scope”,“h:生成虚拟 dom 组件,data:当前行数据”Function(h, data)
checkcheck 为 false,使用 render 渲染,则不会验证 prop 字段数据值是否为空booleantrue
omit文字多行省略,可直接填写数字,或{ rows: 1, direction: 'top'},默认显示方向:“top”,如需改变方向修改 direction 参数即可(参数值参考 el-tooltip 的 placement 参数值),其他属性根据 element-ui el-tooltip 属性即可number/object
sortable列排序boolean
returnVal可对数据做相应处理返回。“val:prop 的对应值,rows:当前行数据”Function(val, rows)
enumType数据枚举,参数 prop 属性值进行过滤显示,如果枚举数据不是 lable 和 value 则使用自定义参数{ params: {label: '对应 label', value: '对应 value'}, data: enumData }array{lable: string, value: any}/object
renderHeader自定义表头Function
emptyPlaceholder空占位符。当数据值为:undefined/null/empty,则会用占位符显示string

Table Events

事件名说明类型
checked-change单选框选中回调,如果填写 row-id 属性并且"fetchVal: true",则取值返回,否则返回当前行数据Function(data)
selected-change多选框选中回调,如果填写 row-id 属性并且"fetchVal: true",则取值返回,否则返回当前行数据Function(data)
pagination切换分页或者 size 改变触发Function(page, size)

Search Attribute

参数说明类型可选默认值
searchOptions搜索配置array
search搜索方法,params 返回搜索表单值(params: any) => void
repeatRequest重复触发,默认可重复booleantrue
searchText搜索按钮文字string搜索
searchBtnType搜索按钮类型stringprimary / success / warning / danger / info / textprimary
resetText重置按钮文字string重置
resetBtnType重置按钮类型stringprimary / success / warning / danger / info / textinfo
expandHideCount搜索框数量超出就显示展开切换number
searchSize搜索组件的 sizestringmedium / small / mini

Search Options

参数说明类型可选默认值
label标题string
type组件类型stringtext / number / date / dateRange / select
prop字段名string
value默认值any
placeholder占位符string
optionstype="select" 选项数据:{label: 'label', value: 'value'}array
handler组件事件,例如键盘事件 keyup.13 或者 keyup.enter, onblur、oninput...array
attrs额外的属性,根据 element— ui 表单组件属性object

更新日志

2021 年 09 月 01 日

  • 首次提交

2021 年 9 月 7 日

  • 修复单选框选择数据报错

2021 年 9 月 15 日

  • 修复单选框设置默认值报错