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 🙏

© 2024 – Pkg Stats / Ryan Hefner

ready-table

v0.5.9

Published

完备表组件,封装一些常见的逻辑,开箱即用。具有如下功能: * 树结构; * 自定义样式; * 双击单元格直接编辑; * 大数据量导出,[见常见问题解决方案](https://github.com/jingyuLin1999/ready-table#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88); * 增、删、改、查、导入、导出、全屏放大、字段显示或隐藏设置、分页的逻辑。

Downloads

86

Readme

Ready Table

说明

完备表组件,封装一些常见的逻辑,开箱即用。具有如下功能:

  • 树结构;
  • 自定义样式;
  • 双击单元格直接编辑;
  • 大数据量导出,见常见问题解决方案;
  • 增、删、改、查、导入、导出、全屏放大、字段显示或隐藏设置、分页的逻辑。

预览

npm install

npm run serve


http://localhost:8080/#/

用法

若无数据显示,请检查传入正确的增删改查路径,defaultProp响应的数据字段映射关系是否正确

npm i ready-table -S
<template>
  <div class="ready-table-demo-page">
    <ready-table
      :showToolBtns="{
        import: true,
        export: true,
        update: true,
        delete: true,
        search: false,
        add: true,
        refresh: true,
        exportable: {
          filter: false,
        },
      }"
      :colors="colors"
      :addConfig="addConfig"
      :deleteConfig="deleteConfig"
      :updateConfig="updateConfig"
      :selectConfig="selectConfig"
      :importConfig="importConfig"
      :token="{
        // url请求基本配置
        key: 'Authorization',
        value: 'token',
        baseUrl: 'http://localhost:8080/',
      }"
      :defaultProp="{
        // 后端返回的字段映射关系
        data: 'payload.tableData',
        total: 'payload.tablePage.total',
      }"
      :formRules="formRules"
      :hooks="tableHooks"
      :fields="fields"
    >
    </ready-table>
  </div>
</template>
import { ReadyTable } from "ready-table";
export default {
  components: { ReadyTable },
  data() {
    return {
      colors: { // 表的颜色配置
        theme: "#0D194B",
        fontColor: "#37D0FA",
        btnColor: "#F8F4F4",
        btnBgColor: "#232B60",
        activeColor: "#4F9FFE",
        dateRangeBgColor: "#999",
        multiOptionBgColor: "#ddd",
        tableBorderColor: "#4780BA",
        scrollbarThumbColor: "#262F65",
        nthChildEvenColor: "",
      },
      tableHooks: {}, // 将一些常用的函数或参数挂载到钩子,可以打印出来看看
      addConfig: { method: "post", url: "manage/machine/insertMacInfo.do" },
      selectConfig: { method: "get", url: "table/select" },
      updateConfig: { method: "post", url: "manage/machine/updateMacInfo.do" },
      deleteConfig: { method: "post", url: "manage/machine/deleteMacInfo.do" },
      importConfig: { method: "post", url: "manage/machine/uploadMacInfo.do" },
      downloadConfig: { method: "get",url: "manage/detectInfo/downloadToExcel.do"},
      fields: [
        {
          title: "区域编号",
          field: "code",
          isSlot: false,
          sortable: false,
          searchable: true,
          importRequired: true,
        },
        {
          title: "区域名称",
          field: "name",
          isSlot: false,
          sortable: false,
          searchable: true,
          importRequired: true,
        },
        {
          title: "采集周期(毫秒)",
          field: "periodCollect",
          isSlot: false,
          sortable: false,
          widget: "inputnumber",
          importRequired: true,
          formLayout: {
            min: 0,
            max: 1000000000,
          },
        },
        {
          title: "重连间隔(秒)",
          field: "periodReconn",
          isSlot: false,
          sortable: false,
          widget: "inputnumber",
          importRequired: true,
          formLayout: {
            min: 0,
            max: 1000000000,
          },
        },
        {
          title: "排序",
          field: "sort",
          isSlot: false,
          sortable: false,
          widget: "inputnumber",
          isShow: false,
        },
        {
          title: "创建日期",
          field: "createtime",
          isSlot: false,
          sortable: false,
          showFormItem: false,
        },
      ],
      formRules: {
        $schema: "http://json-schema.org/draft-07/schema#",
        title: "table form",
        description: "A zone from Acme's catalog",
        type: "object",
        properties: {
          name: {
            type: "string",
            minLength: 1,
            require: true,
          },
          code: {
            type: "string",
            minLength: 1,
            require: true,
          },
          factoryid: {
            type: "string",
            minLength: 1,
            require: true,
          },
          workshopid: {
            type: "string",
            minLength: 1,
            require: true,
          },
          periodCollect: {
            type: "number",
            require: true,
            minimum: 1,
            require: true,
          },
          periodReconn: {
            type: "number",
            require: true,
            minimum: 1,
            require: true,
          },
        },
      },
    };
  },
};

文档

formRules校验规则请见richform
表属性
| 字段名 | 含义 | 类型 | 默认值 | 备注 | | ----------------------- | ------------------ | ------- | ------------------------ | ---------------------------------------------------------------------------------------- | | tableId | 表ID | String | "" | 用于本地保存数据key的区分 | | size | 尺寸大小 | String | medium | 可选medium / small / mini | | fields | 栏位字段 | Array | [] | | | tableData | 表数据 | Array | [] | | | border | 是否显示边界 | Boolean | true | | | highlightHoverRow | | Boolean | true | | | highlightCurrentRow | | Boolean | true | | | showSeq | 显示序号 | Boolean | true | | | rowId | 显示序号 | String | id | 当showSeq为true时,必须设置 | | checkRowKeys | 默认勾选的行id集合 | Array | [] | | | showHeader | 显示表头 | Boolean | true | | | colors | 显示序号 | Object | {} | | | autoPager | 是否自动分页 | Boolean | true | 当为false时表示后端一次性把所有数据都返回,这种情况会手动分页 | | scrollbarWidth | 滚动条宽度 | String | 12px | | | showToolBar | 显示工具栏 | Boolean | true | | | showToolBtns | 工具栏按钮控制 | Object | 具体参数见defaultData | | | showPageBar | 显示分页 | Boolean | true | | | showCheckbox | 显示checkbox | Boolean | true | | | isLoading | 正在加载中 | Boolean | | true | | resizable | 列宽是否允许拖动 | Boolean | true | | | align | 对其方式 | String | | center | | tableToolbar | 配置文件 | Object | {} | 表配置文件 | | simpleSearch | 查询过滤条件 | Boolean | | 简单查询可以传一些自定义的数据给richform | | filterCondition | 过滤条件 | Object | {} | 初始化的时就要过滤掉 | | modalTitle | 模态框标题 | String | 编辑&保存 | | | hooks | 钩子 | Object | {} | 挂内部一些数据,供外部使用 | | formData | 弹出数据 | Object | {} | 与formvalue合并 | | formLayout | 弹窗布局 | Object | {} | 具体见Richform,不传入自动生成 | | formRules | 弹窗布局是几列 | Object | {} | 具体见Richform, | | formColumns | 模态框标题 | Number | 2 | | | formAction | 内部动作 | Boolean | true | this.$emit("action") | | formTips | 弹窗提示语句 | String | "" | | | deleteTips | 删除提示语句 | String | 此操作将删除所有勾选的行 | | | token | 服务器交互权限认证 | Object | | | | editConfig | 配置文件 | Object | | {url:'',method: ""} | | fieldConfig | 配置文件 | Object | | {url:'',method: ""} | | addConfig | 配置文件 | Object | | {url:'',method: ""} | | deleteConfig | 配置文件 | Object | | {url:'',method: ""} | | updateConfig | 配置文件 | Object | | {url:'',method: ""} | | selectConfig | 配置文件 | Object | | {url:'',method: ""} | | searchConfig | 配置文件 | Object | | {url:'',method: ""} | | importConfig | 配置文件 | Object | | {url:'',method: ""} | | downloadConfig | 配置文件 | Object | | {url:'',method: ""} | | deleteByConditionConfig | 配置文件 | Object | | 删除符合过滤条件的 | | defaultProp | 响应请求映射关系 | Object | | { data: 'tableData', total: 'tablePage.total', pageNum: "pageNum",pageSize: "pageSize" } | | treeConfig | 配置文件 | Object | | 树配置 | | isTree | 是否为树 | Boolean | false | |

字段属性
| 字段名 | 含义 | 默认值 | 备注 | | -------------- | ---------------------- | ------ | ---------------------------------------------------------------- | | title | 显示的字段名 | "" | | | field | 数据库字段名称<英文> | "" | | | width | 字段的宽度 | "" | | | sortable | 字段是否可排序 | true | | | isSlot | 是否开启插槽 | false | | | slotName | 动态插槽名 | "" | 当isSlot为true时有效 <template #WorkStatus="{row }"> | | isShow | 字段是否显示 | true | | | searchable | 是否可搜索 | false | | | treeNode | 是否为树节点 | false | 树结构必须且只能有一个为true | | clickEdit | 启动点击编辑模式 | false | | | noEdit | 不允许编辑 | false | 针对某一列 | | showFormItem | 弹窗中是否显示该字段 | true | | | exportable | 是否可导出 | true | | | importRequired | 导入是否必填 | false | | | aline | 独占一行 | false | | | showOverflow | 是否显示溢出内容 | true | | | formSort | 弹窗字段顺序 | 1 | | | fieldSort | 列表字段顺序 | 1 | | | widget | 弹窗时是用何种组件渲染 | input | 具体字段见Richform | | formLayout | Richform字段属性 | {} | 具体字段见Richform |

常见问题解决方案

  • 大数据导出,可让后端先成excel文件,再返回文件流。此时需要配置downloadConfig,默认是用selectConfig请求回数据后在前端生成excel。java采用easyexcel库生成文件,返回文件数据流样例:
  public static void downloadExcel(File file, HttpServletResponse response) {
      try{
          String fileName = file.getName();
          // 返回数据
          response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
          response.setCharacterEncoding("utf-8");
          response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName);
          response.setHeader("X-Accel-Buffering", "no");
          response.setHeader("Content-Length",file.length()+ ""); // 整个文件的大小,前端根据这个计算进度
          // 发送给客户端的数据
          OutputStream outputStream = response.getOutputStream();
          byte[] buff = new byte[1024];
          BufferedInputStream bis = null;
          // 读取filename
          bis = new BufferedInputStream(new FileInputStream(file));
          int i = bis.read(buff);
          while (i != -1) {
              outputStream.write(buff, 0, buff.length);
              outputStream.flush();
              i = bis.read(buff);
          }
          bis.close();
      }catch (Exception e) {
          System.out.println("下载excel出错了"+e.getMessage());
      }
  }