Skip to content

jingyuLin1999/ready-table

Repository files navigation

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());
      }
  }

Releases

No releases published

Packages

No packages published

Languages