前端合并单元格插件

这篇具有很好参考价值的文章主要介绍了前端合并单元格插件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在后台管理系统中,经常有合并单元格的需求。

所以为了提高后续的开发效率,就开发了一款插件插件:@jinming6/merge-helper

合并 “ 行 ”

前端合并单元格插件,前端,npm,javascript

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="//unpkg.com/element-plus/dist/index.css" />
</head>

<body>
    <div id="app">
        <el-table border :data="tableData" :span-method="spanMethod">
            <el-table-column label="序号" :prop="SORT_NO_KEY"></el-table-column>
            <el-table-column label="姓名" prop="name"></el-table-column>
            <el-table-column label="年龄" prop="age"></el-table-column>
            <el-table-column label="省份" prop="provinces"></el-table-column>
        </el-table>
    </div>

    <script src="//unpkg.com/vue@3"></script>
    <script src="//unpkg.com/element-plus"></script>
    <script src="https://unpkg.com/lodash@4.17.21/lodash.js"></script>
    <script src="https://unpkg.com/@jinming6/merge-helper@1.2.1/dist/mergeHelper.js"></script>
    <script>
        const { createApp, ref, onMounted } = Vue;
        const { getMergedData, Mode, getFieldSpan, constants } = window['@jinming6/mergeHelper']
        const { SORT_NO_KEY } = constants

        const app = createApp({
            setup() {
                const tableData = ref([])

                const getTableData = () => {
                    const data = [
                        {
                            name: '张三',
                            age: 18,
                            provinces: '山东省'
                        },
                        {
                            name: '张三',
                            age: 18,
                            provinces: '山东省'
                        },
                        {
                            name: '李四',
                            age: 18,
                            provinces: '山东省'
                        },
                        {
                            name: '王五',
                            age: 20,
                            provinces: '江苏省'
                        },
                    ]
                    const options = {
                        mode: Mode.Row,
                        dataSource: data,
                        mergeFields: [{
                            field: 'name',
                            callback(curItem, nextItem) {
                                return curItem.name === nextItem.name
                            }
                        }, 'age', 'provinces'],
                        genSort: true,
                    }
                    const mergedData = getMergedData(options)
                    tableData.value = mergedData;
                    console.log(mergedData)
                }

                const spanMethod = ({ row, columnIndex }) => {
                    if (columnIndex <= 1) {
                        return getFieldSpan(row, 'name');
                    }
                    if (columnIndex === 2) {
                        return getFieldSpan(row, 'age');
                    }
                    if (columnIndex === 3) {
                        return getFieldSpan(row, 'provinces');
                    }
                    return {
                        rowspan: 1,
                        colspan: 1,
                    };
                }

                onMounted(() => {
                    getTableData()
                })

                return {
                    tableData,
                    spanMethod,
                    SORT_NO_KEY
                }
            }
        })
        app.use(ElementPlus)
        app.mount('#app')
    </script>
</body>

</html>

合并 “ 列 ”

前端合并单元格插件,前端,npm,javascript文章来源地址https://www.toymoban.com/news/detail-833371.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="//unpkg.com/element-plus/dist/index.css" />
</head>

<body>
    <div id="app">
        <el-table border :data="tableData" :span-method="spanMethod">
            <el-table-column label="序号" type="index" width="80"></el-table-column>
            <el-table-column v-for="item in columns" :key="item.prop" :label="item.label" :prop="item.prop"
                :type="item.type" :width="item.width" align="center"></el-table-column>
        </el-table>
    </div>

    <script src="//unpkg.com/vue@3"></script>
    <script src="//unpkg.com/element-plus"></script>
    <script src="https://unpkg.com/lodash@4.17.21/lodash.js"></script>
    <script src="https://unpkg.com/@jinming6/merge-helper@1.2.1/dist/mergeHelper.js">
    <script>
        const { createApp, ref, onMounted } = Vue;
        const { getMergedData, Mode, getFieldSpan, constants } = window['@jinming6/mergeHelper']
        const { SORT_NO_KEY } = constants

        const app = createApp({
            setup() {
                const tableData = ref([])

                const columns = [
                    {
                        label: '姓名',
                        prop: 'name'
                    },
                    {
                        label: '年龄',
                        prop: 'age'
                    },
                    {
                        label: '省份',
                        prop: 'provinces'
                    },
                    {
                        label: '市',
                        prop: 'city'
                    },
                    {
                        label: '区/县',
                        prop: 'county'
                    },
                ]

                const getTableData = () => {
                    const data = [
                        {
                            name: '张三',
                            age: 18,
                            provinces: '山东省',
                            city: '青岛市',
                            county: '崂山区'
                        },
                        {
                            name: '李四',
                            age: 20,
                            provinces: '北京市',
                            city: '北京市',
                            county: '北京市'
                        },
                        {
                            name: '王五',
                            age: 21,
                            provinces: '江苏省',
                            city: '南京市',
                            county: '雨花台区'
                        },
                        {
                            name: '马六',
                            age: 22,
                            provinces: '上海市',
                            city: '上海市',
                            county: '上海市'
                        },
                    ]
                    const options = {
                        mode: Mode.Col,
                        dataSource: data,
                        mergeFields: columns.map((item) => item.prop),
                        columns
                    }
                    const mergedData = getMergedData(options)
                    tableData.value = mergedData;
                }

                const spanMethod = ({ row, column }) => getFieldSpan(row, column.property)

                onMounted(() => {
                    getTableData()
                })

                return {
                    columns,
                    tableData,
                    spanMethod,
                    SORT_NO_KEY
                }
            }
        })
        app.use(ElementPlus)
        app.mount('#app')
    </script>
</body>

</html>

到了这里,关于前端合并单元格插件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端实战:基于Verdaccio搭建私有npm仓库,轻松上传与下载自定义npm插件包

    搭建团队的私有仓库,保证团队组件的安全维护和私密性,是进阶前端开发主管路上,必不可少的一项技能。 一、原理 我们平时使用npm publish进行发布时,上传的仓库默认地址是npm,通过Verdaccio工具在本地新建一个仓库地址,再把本地的默认上传仓库地址切换到本地仓库地址

    2024年04月17日
    浏览(38)
  • 前端vue+elementui导出复杂(单元格合并,多级表头)表格el-table转为excel导出

    需求 :前端对el-table表格导出 插件 : npm install xlsx -S npm install file-saver --save 原理 :直接导出el-table的表格里面的数据,这样就会存在缺点,只会导出当前页面的数据,如果需要导出全部数据,可以自己重新渲染一个全部数据不可见的el-table表格,来导出就可以了 扩展 :经过

    2024年02月04日
    浏览(59)
  • 构建前端之光:JavaScript插件的研发艺术

    在前端开发的宇宙中,星星是网页,而照亮这个宇宙的,是我们前端开发者手中的JavaScript插件。插件就像乐高积木,可以将我们的代码块组装成复杂而精美的页面。本文将引导你走进JavaScript插件的世界,探讨如何开发、测试和发布你的插件。 让我们从一个简单的例子开始。

    2024年02月10日
    浏览(34)
  • 只会用插件可不行,这些前端动画技术同样值得收藏-JavaScript篇(下)

    目录 前言 介绍 基本使用 关键帧 KeyframeEffect的三种类的声明 keyframes options 动画对象 全局Animation类 标签中的animate函数 总结 相关代码: 接着上文往下介绍,上篇文章我们对JS原生动画和贝塞尔曲线有了一个详细的认识,基于定时器或动画帧,我们可以实现元素的动画缓动,本

    2024年02月12日
    浏览(37)
  • 只会用插件可不行,这些前端动画技术同样值得收藏-JavaScript篇(上)

    目录 前言 settimeout/setinterval requestAnimationFrame 基本用法 时间戳参数 帧数与时间戳计算 自动暂停 JS中的贝塞尔曲线 概念 公式 二次贝塞尔 三次贝塞尔 N次贝塞尔 贝塞尔曲线+动画 动画类 在动画中使用贝塞尔 总结 相关代码: 贝塞尔曲线相关网站: 参考文章: 上篇文章我们详

    2024年02月16日
    浏览(42)
  • JS-27 前端数据请求方式;HTTP协议的解析;JavaScript XHR、Fetch的数据请求与响应函数;前端文件上传XHR、Fetch;安装浏览器插件FeHelper

    早期的网页都是通过后端渲染来完成的,即服务器端渲染(SSR,server side render): 客户端发出请求 - 服务端接收请求并返回相应HTML文档 - 页面刷新,客户端加载新的HTML文档; 服务器端渲染的缺点: 当用户点击页面中的某个按钮向服务器发送请求时,页面本质上只是一些数

    2024年02月16日
    浏览(54)
  • apache poi合并单元格 横向竖向合并单元格

    合并单元格是常见的需求,apache POI的合并单元格的原理很简单,它就是从左上到右下的单元格会被左上合并,无论是横向合适纵向合并单元格合并,都是这个原理,关键的api方法 rowFrom,起始行 colFrom,起始列 rowTo,终止行 colTo,终止列 (rowFrom,colFrom)组成了起始节点,(rowT

    2024年02月14日
    浏览(31)
  • EasyExcel合并单元格(同列相同数据合并)

    合并后效果如下: 合并策略代码: 使用: 主体代码来自网络,按自己业务修改,支持多列相同数据合并。

    2024年02月12日
    浏览(32)
  • Pandas读取excel合并单元格的正确姿势(openpyxl合并单元格拆分并填充内容)

    在pandas读取excel经常会遇到合并单元格的问题。例如: 此时使用pandas读取到的内容为: 如果去百度,几乎所有人会说应该用如下代码: 这样看起来没问题,但是,该解决方案并不能适用于所有场景,甚至会造成数据错误。 例如: 对班级和备注填充后: 孙武空本来是数据缺

    2024年02月03日
    浏览(36)
  • el-table 合并单元格(合并行)

    1.  添加 :span-method=\\\"objectSpanMethod\\\"  2.  写objectSpanMethod 方法 其中,switch中 0和1 是根据下面这张图中的顺序来的,  完整代码如下:

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包