一个基于vue功能强大的表格组件--vxe-table的二次封装

基础使用

一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟滚动、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、虚拟列表、模态窗口、自定义模板、渲染器、贼灵活的配置项、扩展接口等…

<vxe-grid v-bind="gridOptions1"><template #toolbar_buttons><vxe-button @click="gridOptions1.align = 'left'">居左</vxe-button><vxe-button @click="gridOptions1.align = 'center'">居中</vxe-button><vxe-button @click="gridOptions1.align = 'right'">居右</vxe-button></template></vxe-grid>

 

export default {data () {return {gridOptions1: {border: true,resizable: true,showOverflow: true,height: 300,align: 'left',toolbarConfig: {slots: {// 自定义工具栏模板buttons: 'toolbar_buttons'}},columns: [{ type: 'seq', width: 50 },{ field: 'name', title: 'Name' },{ field: 'sex', title: 'Sex', showHeaderOverflow: true },{ field: 'address', title: 'Address', showOverflow: true }],data: [{ id: 10001, name: 'Test1', nickname: 'T1', role: 'Develop', sex: 'Man', age: 0, address: 'Shenzhen' },{ id: 10002, name: 'Test2', nickname: 'T2', role: 'Test', sex: 'Women', age: 22, address: 'Guangzhou' },{ id: 10003, name: 'Test3', nickname: 'T3', role: 'PM', sex: 'Man', age: 100, address: 'Shanghai' },{ id: 10004, name: 'Test4', nickname: 'T4', role: 'Designer', sex: 'Women', age: 70, address: 'Shenzhen' },{ id: 10005, name: 'Test5', nickname: 'T5', role: 'Develop', sex: 'Women', age: 10, address: 'Shanghai' },{ id: 10006, name: 'Test6', nickname: 'T6', role: 'Designer', sex: 'Women', age: 90, address: 'Shenzhen' },{ id: 10007, name: 'Test7', nickname: 'T7', role: 'Test', sex: 'Man', age: 5, address: 'Shenzhen' },{ id: 10008, name: 'Test8', nickname: 'T8', role: 'Develop', sex: 'Man', age: 80, address: 'Shenzhen' }]}}}}
<vxe-grid ref="xTable"highlight-hover-rowhighlight-current-row:align="align":round="true":border="border":stripe="stripe":loading="loading":show-overflow="showOverflow":show-header="showHeader":show-footer="showFooter":toolbarConfig="toolbarConfig":export-config="exportConfig":edit-config="editConfig":filter-config="filterConfig":print-config="printConfig":footer-method="footerMethod":size="size":height="height":treeConfig="treeConfig":seq-config="{startIndex: (tablePage.pageIndex - 1) * tablePage.pageSize}":columns="columns":data="data":radio-config="radioConfig":checkbox-config="checkboxConfig":menu-config="tableMenu"@edit-closed="editClosed"@cell-click="rowClick"@cell-dblclick="rowdblClick"@menu-click="menuClick"><!-- 自定义工具栏 --><template #toolbar_buttons><slot></slot></template><!-- 分页组件 --><template #pager><vxe-pager v-if="tablePage.showPage"background:layouts="['Sizes', 'PrevJump', 'PrevPage', 'Number', 'NextPage', 'NextJump', 'FullJump', 'Total']":current-page.sync="tablePage.pageIndex":page-size.sync="tablePage.pageSize":page-sizes="[10,20,50,100,200]":total="tablePage.total"@page-change="handlePageChange"></vxe-pager></template></vxe-grid>
</template>
<script>import '@/components/vxeTable/renderer.js'
export default {name: 'Table',props: {loading: {type: Boolean,default: false},height: {type: String || Number,default: () => {return 'auto'}},stripe: {type: Boolean,default: true},border: {type: String,default: 'full'},align: {type: String,default: 'center'},showOverflow: {type: String,default: () => { }},showHeader: {type: Boolean,default: true},showFooter: {type: Boolean,default: false},toolbarConfig: {type: Object,default: () => { }},size: {type: String,default: () => { }},tablePage: {type: Object,default: () => {return {showPage: false,pageIndex: 1,pageSize: 10,total: 0}}},columns: {type: Array,default: () => {return []}},data: {type: Array,default: () => {return []}},treeConfig: {type: Object,default: undefined},// 可编辑配置项editConfig: {type: Object,default: () => {return {enabled: false,trigger: 'click',mode: 'row',beforeEditMethod: true}}},// 复选框配置项checkboxConfig: {type: Object,default: () => {return { highlight: true, range: true, trigger: 'default' }}},// 右键快捷菜单配置tableMenu: {type: Object,default: () => {return {}}},// 表尾方法footerMethod: {type: Function,default: () => {return []}}},data() {return {// 导出配置项exportConfig: {// 默认选中类型type: 'xlsx',// 局部自定义类型types: ['xlsx', 'csv'],// 自定义数据量列表modes: ['current', 'selected', 'all'],filename: '',sheetName: '',isFooter: true,isHeader: true,isMerge: true,isColgroup: true},filterConfig: {remote: false},// 打印配置项printConfig: {mode: 'current',modes: ['current'],sheetName: '',isHeader: true,isColgroup: true,isFooter: true},// 单选框配置项radioConfig: {highlight: true,strict: false,trigger: 'row'}}},methods: {// 分页改变触发事件handlePageChange({ currentPage, pageSize }) {this.tablePage.pageIndex = currentPagethis.tablePage.pageSize = pageSizethis.$emit('pageChange', { pageIndex: currentPage, pageSize })},// 单元格点击事件rowClick({ row, rowIndex, columnIndex, column }) {Object.defineProperty(row, 'rowIndex', { // 给每一行添加不可枚举属性rowIndex来标识当前行value: rowIndex,writable: true,enumerable: false})// 筛除多选时单击触发操作if (!column.property) {return}this.$emit('rowClick', { row, rowIndex, columnIndex })},// 单元格双击事件rowdblClick({ row, rowIndex, column }) {// 筛除多选时单击触发操作if (!column.property) {return}this.$emit('rowdblClick', { row, rowIndex })},// 右键点击单元格菜单menuClick({ menu, row, column }) {this.$emit('menuClick', { menu, row, column })},// 获取表格数据集(包括插入的临时数据)getRecordset() {return this.$refs.xTable.getRecordset()},// 获取当前选中的行数据(用于单选框)getRadioRecord() {return this.$refs.xTable.getRadioRecord()},// 删除复选框选中的行数据removeCheckboxRow() {return this.$refs.xTable.removeCheckboxRow()},// 获取当前已选中的行数据(用于复选框)getCheckboxRecords() {return this.$refs.xTable.getCheckboxRecords()},// 只对 edit-config 配置时有效,单元格编辑状态下被关闭时会触发该事件editClosed(row, rowIndex, column) {this.$emit('editClosed', row, rowIndex, column)}// 多选操作勾选某行// setCheckboxRow(rows, checked) {//   if (rows.length === 0) { // 清除全部多选选择//     this.$refs.xTable.clearCheckboxRow()//   } else {//     this.$refs.xTable.setCheckboxRow(rows, checked)//   }// }// // 表格尾部// sumNum(list, field) {//   let count = 0//   let num = 0//   list.forEach(item => {//     count += Number(item[field])//     num = count.toFixed(0)//   })//   return num// },// meanNum(list, field) {//   let count = 0//   list.forEach(item => {//     count += Number(item[field])//   })//   return (count / list.length).toFixed(2)// },// // 表格尾部总计// footerMethod({ columns, data }) {//   // return this.footerData//   const sums = []//   columns.forEach((column, columnIndex) => {//     if (columnIndex === 0) {//       sums.push('总')//     } else {//       let sumCell = null//       switch (column.property) {//         case 'stCount'://         case 'Sales'://         case 'Trans'://         case 'lstCount'://         case 'lSales'://         case 'lTrans'://           sumCell = this.sumNum(data, column.property)//           break//         case 'AC'://         case 'lAC'://           sumCell = this.meanNum(data, column.property)//           break//       }//       sums.push(sumCell)//     }//   })//   // 返回一个二维数组的表尾合计//   return [sums]// }}
}
</script>
<style lang="less" scoped>
.my-menus {background-color: #ffffff;
}
.my-menus .vxe-ctxmenu--link {width: 300px;
}
.my-copy-item {font-weight: 700;font-style: oblique;
}
/deep/ .vxe-table--render-default .vxe-body--row.row--current {background: #fff3e0;
}
/deep/ .vxe-toolbar {padding: 0 15px;.vxe-buttons--wrapper {.vxe-button:not(.is--disabled):hover {color: #82bdf8;}}
}
</style>

rederer.js


import SelcetFilter from './component/selcetFilter.vue'import SelectContent from './component/selectContent.vue'import DataFilter from './component/dataFilter.vue'import Vue from 'vue'Vue.component('SelcetFilter', SelcetFilter)Vue.component('SelectContent', SelectContent)Vue.component('DataFilter', DataFilter)// 创建支持列内容的筛选渲染器VXETable.renderer.add('SelcetFilter', {// 不显示底部按钮,使用自定义的按钮isFooter: false,// 筛选模板renderFilter(h, renderOpts, params) {return [<selcet-filter params={ params }></selcet-filter>]},// 重置数据方法filterResetMethod({ options }) {options.forEach(option => {option.data = { vals: [], sVal: '' }})},// 筛选数据方法filterMethod({ option, row, column }) {const { vals } = option.dataconst cellValue = row[column.field]return vals.includes(cellValue)}})// 创建支持列内容的筛选渲染器VXETable.renderer.add('DataFilter', {// 不显示底部按钮,使用自定义的按钮isFooter: false,// 筛选模板renderFilter(h, renderOpts, params) {return [<data-filter params={ params }></data-filter>]},// 重置数据方法filterResetMethod({ options }) {options.forEach(option => {option.data = { vals: [], sVal: '' }})},// 筛选数据方法filterMethod({ option, row, column }) {const { vals } = option.dataconst cellValue = row[column.field]return vals.includes(cellValue)}})// 创建element-select下拉框的可编辑渲染器VXETable.renderer.add('SelectContent', {// 可编辑模板renderEdit(h, renderOpts, params) {return [<select-content params={ params } ></select-content>]}// 可编辑显示模板// renderCell(h, renderOpts, params) {//   const {row, column} = params//   return [//     <span>{ row[column.field] }</span>//   ]// }})

dataFilter.vue

<div class="data-filter"><el-date-picker clearablev-model="value1"type="daterange"range-separator="至"start-placeholder="开始日期"end-placeholder="结束日期"@change="dataChage"></el-date-picker></div></template><script>export default {name: 'DataFilter',props: {params: Object},inject: {getTableData: { value: ' getTableData', default: null }},data() {return {value1: ''}},methods: {dataChage(val) {console.log('%c [ val ]-31', 'font-size:13px; background:pink; color:#bf2c9f;', val)}}}</script><style scoped></style>

 

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

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

相关文章

Vue3——模板引用

绑定dom组件 defineExpose 可以用来暴露子组件的变量&#xff08;例如 ref 或 reactive&#xff09;和方法。这让父组件可以直接访问子组件的某些状态。 defineExpose 示例 以下是如何通过 defineExpose 暴露变量的示例&#xff1a; <template> <div> <bu…

空间数据分析实验04:空间统计分析

实验概况 实验目的 了解空间统计分析的基本原理掌握空间统计分析的常用方法 实验内容 根据某村的土地利用数据和DEM数据&#xff0c;提取各村组耕地面积比例&#xff0c;并将其与村组平均坡度进行相关性分析&#xff0c;最后计算各村组单元的景观多样性指数。 实验原理与方…

鸿蒙网络编程系列30-断点续传下载文件示例

1. 断点续传简介 在文件的下载中&#xff0c;特别是大文件的下载中&#xff0c;可能会出现各种原因导致的下载暂停情况&#xff0c;如果不做特殊处理&#xff0c;下次还需要从头开始下载&#xff0c;既浪费了时间&#xff0c;又浪费了流量。不过&#xff0c;HTTP协议通过Range…

基于web的酒店客房管理系统【附源码】

基于web的酒店客房管理系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 系统概述 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 用户信息管理 5.2 会员信息管理 5.3 客房信息管理 5.…

k8s系列-Rancher 上操作的k8s容器网络配置总结

Rancher 上操作的k8s容器网络配置总结 要在 Rancher 中配置Spring Boot 应用 ykhd-zhjgyw-xpwfxfjfl 服务&#xff0c;正确的配置方式如下&#xff1a; 1. 应用程序监听端口 在 application.yaml 文件中&#xff0c;配置的应用监听端口是 10001&#xff0c;并且应用的上下文…

【Linux】Shell概念、命令、操作(重定向、管道、变量)

文章目录 一、概念篇1、shell的概念2、shell的分类 二、命令篇1、cat2、echo3、ps4、grep4.1、匹配行首4.2、大小写 5、sed 三、操作篇1、自动补全2、查看历史命令3、命令替换4、重定向4.1、输入重定向4.2、输出重定向4.3、错误重定向 5、管道6、shell中的变量6.1、本地变量6.2…

依赖标签分类任务Smin值计算(蛋白质功能预测,GO标签)

前言 Smin是在蛋白质功能预测中比较流行的一个指标&#xff0c;具体由来我也不甚清楚&#xff0c;只是在最近复现的几篇论文中反复出现了&#xff0c;所以记录一下。 计算方法 &#xff08;图来自于PSPGO论文&#xff09; 其中&#x1d70f;表示阈值&#xff0c;t表示GO标签…

Maven入门到进阶:构建、依赖与插件管理详解

文章目录 一、Maven介绍1、什么是Maven2、Maven的核心功能 二、Maven核心概念1、坐标GAVP1.1、GroupId1.2、ArtifactId1.3、Version1.3.1、版本号的组成 1.4、Packaging 2、POM、父POM和超级POM2.1、POM (Project Object Model)2.1、父POM&#xff08;Parent POM&#xff09;2.…

django连接mysql数据库

存在问题&#xff1a; django如何连接mysql数据库 解决方案&#xff1a; 创建工程和项目APP&#xff1b;修改Django的settings.py文件&#xff08;根据自己的数据库配置信息修改&#xff09;&#xff1b; 并在setting.py文件中添加app DATABASES {default: {# ENGINE: djang…

python 爬虫 入门 二、数据解析(正则、bs4、xpath)

目录 一、待匹配数据获取 二、正则 三、bs4 &#xff08;一&#xff09;、访问属性 &#xff08;二&#xff09;、获取标签的值 &#xff08;三&#xff09;、查询方法 四、xpath 后续&#xff1a;登录和代理 上一节我们已经知道了如何向服务器发送请求以获得数据&#x…

关于SSD1306的OLED的显示的研究

文章目录 函数作用参数解释嵌套函数分析主代码分析逻辑流程总结 难点的解析&#xff1a;生成器的主要逻辑分解&#xff1a;每次生成的元组 (pixel_x, pixel_y, pixel_mask)&#xff1a;生成器的整体流程举例总结 反转后的文本绘制竖直布局有问题的旋转180度旋转坐标轴绘制矩形绘…

SVM(支持向量机)

SVM&#xff08;支持向量机&#xff09; 引言 支持向量机(Support Vector Machine,SVM)&#xff0c;可以用来解答二分类问题。支持向量(Support Vector)&#xff1a;把划分数据的决策边界叫做超平面&#xff0c;点到超平面的距离叫做间隔。在SVM中&#xff0c;距离超平面最近…

【配色网站分享】

个人比较喜欢收藏一些好看的插画、UI设计图和配色&#xff0c;于是有了此篇&#xff0c;推荐一些配色网站&#xff0c;希望能对自己和大家有些帮助。 1.uiGradients 一个主打渐变风网站&#xff0c;还可以直接复制颜色。 左上角的“show all gradients”可以查看一些预设的渐…

upload-labs靶场Pass-02

upload-labs靶场Pass-02 分析源码 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {if (($_FILES[upload_file][type] image/jpeg) || ($_FILES[upload_file][type] image/png) || ($_FILES[upload_file][type] image/gif)) …

搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程

参考文章&#xff1a; 安装protoc、protoc-gen-go、protoc-gen-go-grpc-CSDN博客 一、简单介绍 本文开发环境&#xff0c;均为 windows 环境&#xff0c;mac 环境其实也类似 ~ ① 编译proto文件&#xff0c;相关插件 简单介绍&#xff1a; protoc 是编译器&#xff0c;用于将…

excel 表格中url转图片

待处理的单元格通过如下公式获取目标格式&#xff1a; "<table><img src"&A4&" height20></table>" 然后下拉后获取多列的单元格转换结果&#xff0c; 然后将这些转换后的结果拷贝到纯文本文档中&#xff0c; 然后再将纯文本…

音乐播放器-0.专栏介绍​

1.简介 本专栏使用Qt QWidget作为显示界面&#xff0c;你将会学习到以下内容&#xff1a; 1.大量ui美化的实例。 2.各种复杂ui布局。 3.常见显示效果实现。 4.大量QSS实例。 5.Qt音频播放&#xff0c;音乐歌词文件加载&#xff0c;展示。 6.播放器界面换肤。 相信学习了本专栏…

【Qt】Qt的介绍——Qt的概念、使用Qt Creator新建项目、运行Qt项目、纯代码方式、可视化操作、认识对象模型(对象树)

文章目录 Qt1. Qt的概念2. 使用Qt Creator新建项目3. 运行Qt项目3.1 纯代码方式实现3.2 可视化操作实现 4. 认识对象模型&#xff08;对象树&#xff09; Qt 1. Qt的概念 Qt 是一个跨平台的 C 图形用户界面应用程序开发框架。它是软件开发者提供的用于界面开发的程序框架&#…

Mysql(5)—函数

一、关于函数 1.1 简介 MySQL提供了许多内置的函数以帮助用户进行数据操作和分析。这些函数可以分为几类&#xff0c;包括聚合函数、字符串函数、数值函数、日期和时间函数、控制流函数等。 ​ ‍ 1.2 发展 早期版本&#xff08;MySQL 3.x 和 4.x&#xff09; : MySQL 最初…

无人机之三维航迹规划篇

一、基本原理 飞行环境建模&#xff1a;在三维航迹规划中&#xff0c;首先需要对飞行环境进行建模。这包括对地形、障碍物、气象等因素进行准确的测量和分析&#xff0c;以获得可行的飞行路径。 飞行任务需求分析&#xff1a;根据无人机的任务需求&#xff0c;确定航迹规划的…