一个基于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.rhkb.cn/news/455328.html

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

相关文章

etl-查询错误log日志和oracle删除数据表空间

查看weblogic日志的目录 建立连接ssh root192.168.30.1xx 密码hygd123 找到下面路径中的文件 cd /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/bapp-logs 查看log日志 tail -f -n 400 Adminservers.log oracle删除表空间&#xff08;切换到dba用户…

家庭宽带的ip地址是固定的吗?宽带ip地址怎么修改‌

在家庭网络环境中&#xff0c;IP地址的分配和管理是用户常关注的问题。本文将探讨家庭宽带IP地址的固定性&#xff0c;并介绍如何修改宽带IP地址&#xff0c;以满足用户的不同需求。 一、家庭宽带的IP地址是否固定? 关于家庭宽带的IP地址是否固定&#xff0c;答案并非一概而论…

【深入学习Redis丨第八篇】详解Redis数据持久化机制

前言 Redis支持两种数据持久化方式&#xff1a;RDB方式和AOF方式。前者会根据配置的规则定时将内存中的数据持久化到硬盘上&#xff0c;后者则是在每次执行写命令之后将命令记录下来。两种持久化方式可以单独使用&#xff0c;但是通常会将两者结合使用。 一、持久化 1.1、什么…

【Android】使用 Compose 自定义 View 实现从 0 ~ 1 仿 EChat 柱状图

目录 前言DrawScopeDrawScope Api 绘制柱状图绘制 X 轴绘制 Y 轴绘制柱状背景绘制柱状前景完整代码最终效果 存在的问题 前言 本文讲的是使用 compose 去自定义 View &#xff0c;如果您未曾通过继承 View 的方式去实现自定义 View&#xff0c;那么&#xff0c;我建议在观看本…

监控-08-skywalking监控告警

文章目录 前言一、准备二、配置skywalking2.1 修改alarm-settings.yml2.2 重启skywalking 三、收到告警邮件总结 前言 skywalking根据监控规则&#xff0c;通过webhook调后端微服务接口&#xff0c;从而发送告警邮件。 一、准备 根据上几章内容&#xff0c;保证skywalking能监…

离散数学实验二c语言(输出关系矩阵,输出矩阵性质,输出自反闭包,对称闭包,传递闭包,判断矩阵是否为等价关系,相容关系,偏序关系)

离散数学实验二 一、算法描述&#xff0c;算法思想 &#xff08;一&#xff09;相关数据结构 typedef struct Set *S; //存放集合 struct Set {int size; //集合的元素个数char *A; //存放该集合的元素 }; Set存放有限集合A&#xff0c;该集合的元素个数为size&#xff0…

Kafka-Windows搭建全流程(环境,安装包,编译,消费案例,远程连接,服务自启,可视化工具)

目录 一. Kafka安装包获取 1. 官网地址 2. 百度网盘链接 二. 环境要求 1. Java 运行环境 (1) 对 java 环境变量进行配置 (2) 下载完毕之后进行解压 三. 启动Zookeeper 四. 启动Kafka (1) 修改Conf下的server.properties文件&#xff0c;修改kafka的日志文件路径 (2)…

海外云手机实现高效的海外社交媒体营销

随着全球化的深入发展&#xff0c;越来越多的中国企业走向国际市场&#xff0c;尤其是B2B外贸企业&#xff0c;海外社交媒体营销已成为其扩大市场的重要手段。在复杂多变的海外市场环境中&#xff0c;如何有效提高营销效率并降低运营风险&#xff0c;成为了众多企业的首要任务。…

无人机悬停精度算法!

一、主要算法类型 PID控制算法&#xff1a; PID控制算法是一种常用的闭环控制算法&#xff0c;通过计算目标值与当前值的误差&#xff0c;并根据比例&#xff08;P&#xff09;、积分&#xff08;I&#xff09;、微分&#xff08;D&#xff09;三个参数来调整控制输出&#x…

SQL高级查询03

SQL查询语句的下载脚本链接&#xff01;&#xff01;&#xff01; 【免费】SQL练习资源-具体练习操作可以查看我发布的文章资源-CSDN文库​编辑https://download.csdn.net/download/Z0412_J0103/89908378https://download.csdn.net/download/Z0412_J0103/89908378 1 查询employ…

聚链成网,趣链科技参与 “跨链创新联合体”建设

近日&#xff0c;2024全球数商大会在上海举办。大会由上海数据集团和上海市数商协会联合主办&#xff0c;上海市数据局和浦东新区人民政府支持&#xff0c;以“数联全球&#xff0c;商通未来——‘链’接数字经济新未来”为主题&#xff0c;聚焦区块链技术和应用场景展开。 会上…

PostGis空间(下):空间连接与空间索引

目录 1、简介2、空间连接3、空间索引3.1 索引操作3.2 空间索引的工作原理3.2.1 R-Tree 3.3 空间索引函数3.4 仅索引查询3.5 ANALYZE3.6 VACUUMing3.7 函数列表 PS 1024到啦&#xff01;&#xff01;&#xff01; 先祝各位程序员或者想成为程序员正在奋斗中的伙伴1024程序员节快…

JavaScript进阶:手写代码挑战(二)

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;JavaScript篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript手写代码篇 在现代Web开发中&#xff0c;JavaScript 是不可或缺的编程语言…

Linux系统基础-进程间通信(5)_模拟实现命名管道和共享内存

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Linux系统基础-进程间通信(5)_模拟实现命名管道和共享内存 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记&#xff0c;欢迎大家在评论区交流讨…

Mac 使用 zsh 终端提示 zsh: killed 的问题

我的脚本的内容为&#xff1a; #!/bin/bashset -epids$(ps -ef | grep consul | grep -v grep | awk {print $2})for pid in $pids; doecho "kill process: $pid"kill -9 $pid donecd $(dirname $0)nohup ./consul agent -dev > nohup.log &可以看到这是一个…

阿里云项目启动OOM问题解决

问题描述 随着项目业务的增长&#xff0c;系统启动时内存紧张&#xff0c;每次第一次启动的时候就会出现oom第二次或者第n的时候&#xff0c;就启动成功了。 带着这个疑问&#xff0c;我就在阿里云上提交了工单&#xff0c;咨询为什么第一次提交失败但是后面却能提交成功尼&a…

Matlab学习01-矩阵

目录 一&#xff0c;矩阵的创建 1&#xff0c;直接输入法创建矩阵 2&#xff0c;利用M文件创建矩阵 3&#xff0c;利用其它文本编辑器创建矩阵 二&#xff0c;矩阵的拼接 1&#xff0c;基本拼接 1&#xff09; 水平方向的拼接 2&#xff09;垂直方向的拼接 3&#xf…

shell脚本-函数

文章目录 一、函数介绍什么是函数、为什么使用函数、如何使用函数 二、shell脚本中如何定义函数Way1Way2Way3 三、shell脚本中如何调用函数四、shell脚本中使用内置变量(1、#、?、2等等)五、函数的返回值、shell脚本中函数的返回值函数的返回值概念shell脚本中函数的返回值ret…

梦金园三闯港交所上市:年营收200亿元,靠加盟模式取胜

近日&#xff0c;梦金园黄金珠宝集团股份有限公司&#xff08;以下简称“梦金园”&#xff09;向港交所递交IPO申请&#xff0c;中信证券为其独家保荐人。贝多财经了解到&#xff0c;这已经是梦金园第三次向港股发起冲击&#xff0c;此前曾于2023年9月、2024年4月两度递表。 继…

刷题 - 图论

1 | bfs/dfs | 网格染色 200. 岛屿数量 访问到马上就染色&#xff08;将visited标为 true)auto [cur_x, cur_y] que.front(); 结构化绑定&#xff08;C17&#xff09;也可以不使用 visited数组&#xff0c;直接修改原始数组时间复杂度: O(n * m)&#xff0c;最多将 visited 数…