npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

vue-element-easy-search-table

v0.0.5

Published

基于element-ui 二次封装的搜索&表格

Downloads

26

Readme

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-config | type=selection 配置参数:“fetchVal 直接取值,row-id 必须填写取值属性,rowClick 点击行” | object | {fetchVal: boolean, rowClick: boolean} | | radio-config | type=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 | 是否显示 | boolean | — | true | | align | 文本对齐方式 | string | left/right/center | — | | type | radio 显示单选框,其他参数对应 element-ui table 的 type 属性 | string | selection/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) | — | — | | check | check 为 false,使用 render 渲染,则不会验证 prop 字段数据值是否为空 | boolean | — | true | | 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 | 重复触发,默认可重复 | boolean | — | true | | searchText | 搜索按钮文字 | string | — | 搜索 | | searchBtnType | 搜索按钮类型 | string | primary / success / warning / danger / info / text | primary | | resetText | 重置按钮文字 | string | — | 重置 | | resetBtnType | 重置按钮类型 | string | primary / success / warning / danger / info / text | info | | expandHideCount | 搜索框数量超出就显示展开切换 | number | — | — | | searchSize | 搜索组件的 size | string | medium / small / mini | — |

Search Options

| 参数 | 说明 | 类型 | 可选 | 默认值 | | ----------- | ------------------------------------------------------------------- | ------ | ----------------------------------------- | ------ | | label | 标题 | string | — | — | | type | 组件类型 | string | text / number / date / dateRange / select | — | | prop | 字段名 | string | — | — | | value | 默认值 | any | — | — | | placeholder | 占位符 | string | — | — | | options | type="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 日

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