使用vue-easytable实现仿excel表格,支持可编辑、添加删除行、虚拟表格等功能

news2024/11/29 4:41:28

使用npm安装vue-easytable

npm install --save vue-easytable

在 main.js 中写入以下内容:

// 引入样式
import "vue-easytable/libs/theme-default/index.css";
// 引入组件库
import VueEasytable from "vue-easytable";
Vue.use(VueEasytable);
// 引入中文文语言包
import { VeLocale } from "vue-easytable";
import zhCN from "vue-easytable/libs/locale/lang/zh-CN.js";
VeLocale.use(zhCN);

代码实现

<template>
  <div class="spreadsheet">
    <ve-table
      style="word-break: break-word"
      fixed-header
      :scroll-width="0"
      :max-height="500"
      border-y
      :columns="columns"
      :table-data="tableData"
      row-key-field-name="rowKey"
      :virtual-scroll-option="virtualScrollOption"
      :cell-autofill-option="cellAutofillOption"
      :edit-option="editOption"
      :contextmenu-body-option="contextmenuBodyOption"
      :contextmenu-header-option="contextmenuHeaderOption"
      :row-style-option="rowStyleOption"
      :column-width-resize-option="columnWidthResizeOption"
    />
  </div>
</template>

<script>
const COLUMN_KEYS = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];
export default {
  data() {
    return {
      startRowIndex: 0,
      // 是否开启列宽可变
      columnWidthResizeOption: {
        enable: true,
      },
      // 虚拟滚动配置
      virtualScrollOption: {
        enable: true,
        scrolling: this.scrolling,
      },
      // 单元格自动填充配置
      cellAutofillOption: {
        directionX: true,
        directionY: true,
      },
      // 单元格编辑配置
      editOption: {
        afterCellValueChange: ({ row, column, changeValue }) => {
          console.log(row, column, changeValue);
          console.log(this.tableData);
        },
      },
      // header 右键菜单配置
      contextmenuHeaderOption: {
        contextmenus: [
          {
            type: "CUT",
          },
          {
            type: "COPY",
          },
          {
            type: "EMPTY_COLUMN",
          },
        ],
      },
      // body 右键菜单配置
      contextmenuBodyOption: {
        contextmenus: [
          {
            type: "CUT",
          },
          {
            type: "COPY",
          },
          {
            type: "SEPARATOR",
          },
          {
            type: "INSERT_ROW_ABOVE",
          },
          {
            type: "INSERT_ROW_BELOW",
          },
          {
            type: "SEPARATOR",
          },
          {
            type: "REMOVE_ROW",
          },
          {
            type: "EMPTY_ROW",
          },
          {
            type: "EMPTY_CELL",
          },
        ],
      },
      // 行样式配置
      rowStyleOption: {
        clickHighlight: false,
        hoverHighlight: false,
      },
      tableData: [],
    };
  },
  computed: {
    columns() {
      let columns = [
        {
          field: "index",
          key: "index",
          operationColumn: true,
          title: "",
          width: 55,
          fixed: "left",
          renderBodyCell: this.renderRowIndex,
        },
      ];
      columns = columns.concat(
        COLUMN_KEYS.map((keyValue) => {
          return {
            title: keyValue,
            field: keyValue,
            key: keyValue,
            width: 90,
            edit: true,
          };
        })
      );
      return columns;
    },
  },
  methods: {
    renderRowIndex({ row, column, rowIndex }) {
      return <span>{rowIndex + this.startRowIndex + 1}</span>;
    },
    scrolling({
      startRowIndex,
      visibleStartIndex,
      visibleEndIndex,
      visibleAboveCount,
      visibleBelowCount,
    }) {
      this.startRowIndex = startRowIndex;
    },
    // 初始化表格
    initTableData() {
      let tableData = [];
      for (let i = 0; i < 5000; i++) {
        let dataItem = {
          rowKey: i,
        };
        COLUMN_KEYS.forEach((keyValue) => {
          dataItem[keyValue] = "";
        });
        if (i === 1 || i === 3) {
          dataItem["C"] = "YOU";
          dataItem["D"] = "CAN";
          dataItem["E"] = "TRY";
          dataItem["F"] = "ENTER";
          dataItem["G"] = "SOME";
          dataItem["H"] = "WORDS";
          dataItem["I"] = "!!!";
        }
        tableData.push(dataItem);
      }
      this.tableData = tableData;
    },
  },
  created() {
    this.initTableData();
  },
};
</script>
<style lang="scss">
.spreadsheet {
  padding: 0 10px;
  margin: 20px 0;
}
</style>

效果

 表格配置

参数说明类型可选值默认值
tableData表格数据Array--
footerData表格footer 汇总数据,数据结构和 tableData 一致Array--
columns列配置,具体项见下表 columns 配置Array--
showHeader是否展示表头Boolean-true
fixedHeader是否固定表头,默认启用。需要和 `maxHeight`结合使用Boolean-true
fixedFooter是否固定footer 汇总,默认启用。需要和 `maxHeight`结合使用Boolean-true
scrollWidth表格滚动区域的宽(开始出滚动条的宽度)。Number指定像素;String指定百分比NumberString--
maxHeight表格的最大高度。Number指定像素;String指定百分比。用于“固定头”或“虚拟滚动”功能NumberString--
rowKeyFieldName指定 row key 的字段名称。用于行展开、行单选、行多选、行点击高亮、虚拟滚动String--
borderAround是否展示表格外边框Boolean-true
borderX是否展示列横向边框Boolean-true
borderY是否展示列纵向边框Boolean-false
cellSpanOption单元格合并配置,具体见下表 cellSpanOption 配置Object--
columnHiddenOption列隐藏配置,具体见下表 columnHiddenOption 配置Object--
cellStyleOption单元格样式配置,具体见下表 cellStyleOption 配置Object--
rowStyleOption行样式配置,具体见下表 rowStyleOption 配置Object--
expandOption行展开配置,具体见下表 expandOption 配置Object--
checkboxOption行多选配置,具体见下表 checkboxOption 配置Object--
radioOption行单选配置,具体见下表 radioOption 配置Object--
virtualScrollOption虚拟滚动配置,建议需要一次性展示1000条以上使用。具体见下表 virtualScrollOption 配置。Object--
sortOption排序配置,具体见下表 sortOption 配置Object--
cellSelectionOption单元格选择配置,具体见下表 cellSelectionOption 配置Object--
editOption单元格编辑配置,具体见下表 editOption 配置Object--
contextmenuHeaderOption表格 header 右键菜单配置,具体见下表 contextmenuHeaderOption 配置Object--
contextmenuBodyOption表格 body 右键菜单配置,具体见下表 contextmenuBodyOption 配置Object--
eventCustomOption自定义事件配置,具体见下表 eventCustomOption 配置Object--
cellAutofillOption单元格自动填充配置,具体见下表 cellAutofillOption 配置Object--
clipboardOption单元格剪贴板配置,具体见下表 clipboardOption 配置Object--

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/85293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ADI Blackfin DSP处理器-BF533的开发详解49:图像处理专题-Bright (图像亮暗处理)(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 代码实现了图像亮暗处理&#xff0c;代码运行时&#xff0c;会通过文件系统打开工程文件根目下" …/ImageView"路径中的 tes…

[附源码]Node.js计算机毕业设计电子市场计算机配件报价系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

聚焦人机交互智能应用领域,APISIX 在希沃网关的应用与实践

分享嘉宾简海清&#xff0c;视源股份运维负责人。 视源股份&#xff08;CVTE&#xff09;自成立以来&#xff0c;依托在音视频技术、人机交互、应用开发、系统集成等电子产品领域的软硬件技术积累&#xff0c;建立了教育数字化工具及服务提供商希沃&#xff08;seewo&#xff0…

三、JavaScript——编写位置

1.在script标签内编写 JS的代码一般可以写到script标签中&#xff0c;script标签的完整写法是要加type"text/javascript",但这个一般可以省略&#xff0c;所以只用<script>即可 <!DOCTYPE html> <html lang"en"> <head><meta …

【架构师李肯】带你走进架构师的一天

作者简介 *架构师李肯&#xff08;全网同名&#xff09;**&#xff0c;一个专注于嵌入式IoT领域的架构师。有着近10年的嵌入式一线开发经验&#xff0c;深耕IoT领域多年&#xff0c;熟知IoT领域的业务发展&#xff0c;深度掌握IoT领域的相关技术栈&#xff0c;包括但不限于主流…

js逆向之加密方法远程调用

js逆向之加密方法远程调用 加密方法的远程调用主要是使用了RPC协议,RPC(Remote Procedure Call)是远程调用的意思。RPC的应用十分广泛,比如在分布式中的进程间通信、微服务中的节点通信。 我们这里使用的rpc其实是实现两个不同进程通信的一种方式,比如在浏览器执行一些方…

SystemUI 调整Recents中全部清除按钮位置

Recents 即多任务界面&#xff0c;显示最近使用过的APP List的。下面内容都是基于Android 11平台修改的。Android 11上&#xff0c;Recents 这一部分代码其实都已经被挪到Launcher3中。由于个人习惯&#xff0c;所以将内容分类作为SystemUI部分记录。 多任务界面主要几个文件&…

工欲善其事,必先利其器,推荐5款效率神器

有句老话这样讲&#xff0c;工欲善其事&#xff0c;必先利其器&#xff0c;好的工具可以让你工作起来事半功倍。 1.全能翻译神器——智能翻译官 这是一款超级强大的翻译软件&#xff0c;什么文本、图片、文档&#xff0c;视频、音频&#xff0c;统统都可以翻&#xff0c;像我…

JAVA毕业设计——基于Springboot+vue的音乐网站系统(源代码+数据库)

github代码地址 https://github.com/ynwynw/music-server-public 毕业设计所有选题地址 https://github.com/ynwynw/allProject 基于Springbootvue的音乐网站系统(源代码数据库)046 一、系统介绍 本项目分为管理员与普通用户两种角色 管理员角色包含以下功能&#xff1a; …

绿色固体ICG-DBCO,凯新生物聚甲基菁染料,仅用于科学研究或者工业应用等非医疗目的,不可用于人类或动物的临床或诊断,非药用,非食用

【外观以及性质】&#xff1a; ICG-DBCO绿色固体&#xff0c;ICG是一种带负电荷的聚甲基菁染料&#xff08;三碳菁染料&#xff09;具有良好的水溶性&#xff0c;其次花菁染料毒性&#xff0c;安全性更好及更的光稳定性。 【试剂物理数据】&#xff1a; 货号&#xff1a;Y-R…

Java面试题(六)腾讯Spring夺命7连问(灵魂拷问)

腾讯面试题&#xff1a;Spring1.谈一谈spring IOC的理解&#xff0c;原理与实现&#xff1f;2.谈一谈Spring IOC的底层实现&#xff1f;3.描述下Bean的生命周期4.Spring如何解决循环依赖问题&#xff1f;5.BeanFactory 和FactoryBean有什么区别&#xff1f;6.Spring 中用到哪些…

ELK日志系统搭建

文章目录ES安装ES启动ES错误处理验证Kibana安装Kibana启动 KibanaLogstash安装Logstash启动Logstash项目整合引入依赖logback-spring.xml启动项目在Kibana中查看链接&#xff1a;点击 提取码&#xff1a;yyds ES 安装ES cat >> /etc/sysctl.conf<<- EOF net.ipv…

基于微信小程序的小区疫情防控系统-计算机毕业设计

随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受业主的喜爱&#xff0c;小区疫情防控小程序被业主普遍使用&#xff0c;为方便业主能够可…

G1D33-BTG复现重跑实验

一、复现BTG 复现很简单&#xff0c;所以就记录一些乱七八糟的叭 &#xff08;一&#xff09;传参 传是否使用cuda的参数的时候&#xff0c;发现传True会报错&#xff0c;后来查到链接 https://stackoverflow.com/questions/43381710/unrecognized-arguments-true 如果什么都…

web前端课程设计 基于HTML+CSS+JavaScript汽车自驾游(10个页面)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

web前端网页设计期末课程大作业:中华传统文化题材网页源码——基于HTML实现中国水墨风书画艺术网站(12个页面)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

关于自动化测试的误区——希望能帮助新手正确的了解自动化一些概念。

自动化测试作为软件测试的一种技术手段&#xff0c;时常被大家讨论。本人在自动化技术方面有过略有小成&#xff0c;今天聊一聊关于自动化的一些误区&#xff0c;以帮助新手能正确的了解和认识自动化一些概念。 测试的行为本质是什么&#xff1f; 为什么先从这个概念开始谈起…

React 入门:实战案例 TodoList 删除一条 Item

文章目录目标实现效果实现思路实现步骤第一步&#xff1a;App 组件中定义删除 Todo 的组件方法第二步&#xff1a;App 组件通过 props 传递删除 Todo 的方法到子组件 List第三步&#xff1a;List 组件接收删除 Todo 的方法&#xff0c;并传递给 Item 子组件第四步&#xff1a;I…

JAVA毕业设计——基于Springboot+vue的图书管理系统(源代码+数据库)

github代码地址 https://github.com/ynwynw/bookmanage2-public 毕业设计所有选题地址 https://github.com/ynwynw/allProject 基于Springbootvue的图书管理系统(源代码数据库) 一、系统介绍 本项目分为管理员与普通用户两种角色 体实现功能如下: 用户系统权限控制管理:主要…

热插拔技术--以ADM1177为例说明

综述 ADM1177是一款热插拔控制器&#xff0c;并且还支持电压电流采集&#xff08;12bitADC&#xff09;和传输(IIC).本文着重说明热插拔技术&#xff0c;所以仅说明ADM热插拔处理过程&#xff0c;对于ADC和IIC部分不予说明&#xff0c;请读者自行研究。 热插拔的应用背景 服务…