bootstrap-table-单元格动态合并(直接用就行)

最近在开发项目的同时,出现的RuoYi 框架,需求是动态单元格合成,但是RuoYi虽然是基于bootstrap的,但是没有提供单元格合并的方法.

开篇

所以我采用的方法是动态获取RuoYi框架的table的页面的数据,因为是bootstarp-table,所以可以找的对应的表单,通过下面方法获取

let data=$("#bootstrap-table").bootstrapTable("getData");

同时

你想要获取到需要setTimeout让原有表单渲染完后才能获取

精华

直接上我已经封装好的代码

    /**
     *
     * @param target 目标表单,用若依框架的可以直接这样用
     * 或者表单已经渲染上去的可以,把目标表单放上来(个人封装,不推荐)
     */
    function autoCombineAll(target){
        let data=target.bootstrapTable("getData");
        let params=Object.keys(data[0]);
        for (const paramsKey in params) {
            combineRowByName(data,target,params[paramsKey]);
        }
    }

    /**
     *
     * @param data 目标数据源,也就是表单数据,要数组类型
     * @param target 需要修改的表单
     * @param fieldName 需要合并的列名
     */
    function combineRowByName(data,target,fieldName){
        //初始位置集合
        let firstIndexs=[];
        //对应合并的长度
        let publicRowNumbers=[];
        //开始位置
        let firstIndex=0;
        //共有值,对照数组
        let publicRow=data[0][fieldName];
        //当前共有值数量
        let publicRowNumber=0;
        for (let i = 0; i < data.length; i++) {
            if(publicRow===data[i][fieldName]){//如果同行相等,则长度增加
                publicRowNumber++;
            }else{//不相等
                if(publicRowNumber>1){//超过一个则合并到一起,保存
                    firstIndexs.push(firstIndex);
                    publicRowNumbers.push(publicRowNumber);
                }
                //重置数量,共有值,初始值
                publicRowNumber=1;
                publicRow=data[i][fieldName];
                firstIndex=i;
            }
            if(i===data.length-1){//结束时在进行一次判断
                if(publicRowNumber>1){
                    firstIndexs.push(firstIndex);
                    publicRowNumbers.push(publicRowNumber);
                }
                //重置数量,共有值,初始值
                publicRowNumber=1;
                publicRow=data[i][fieldName];
                firstIndex=i;
            }
        }
        for (let i = 0; i < firstIndexs.length; i++) {//循环修改表单
            target.bootstrapTable('mergeCells',{index:firstIndexs[i], field:fieldName, colspan: 1, rowspan: publicRowNumbers[i]});
        }
    }

使用

autoCombineAll($("#bootstrap-table"));
//或者下面这样
combineRowByName(data(自己的数据源),$("#bootstrap-table")(自己的对应table的Id),"combineName(自己的对应列的名字)");

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您,${username}!</h1> <p><a href="UserServlet?action=logout">退出登录</a></p要动态合并单元,需要在渲染表之前对表数据进处理,合并需要合并> </body> </html> ``` 6. 配置web.xml文件 在`web.xml`文件中配置Servlet和JSP的或列,并将处理后的数据传递给 `react-bootstrap-table-next` 组件进渲染。 下面是一个例页面的映射关系: ```xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="子,演示如何在渲染表之前动态合并单元: ```javascript import BootstrapTable from 'http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" react-bootstrap-table-next'; import 'react-bootstrap-table-next/dist/react-bootstrap-table2.min.css'; function mergeCells(data, mergeColumns) { xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web // 处理需要合并的列 const merged = []; let i = 0; while (i < data.length)-app_4_0.xsd" version="4.0"> <servlet> <servlet-name>UserServlet</s { const row = data[i]; let j = i + 1; while (j < data.length && mergeColumns.every((ervlet-name> <servlet-class>com.example.servlet.UserServlet</servlet-class> </servlet> <servlet-mcol) => data[j][col] === row[col])) { j++; } if (j - i > 1) { apping> <servlet-name>UserServlet</servlet-name> <url-pattern>/UserServlet</url-pattern> </servlet // 合并需要合并或列 const mergedRow = { ...row }; mergeColumns.forEach((col) =>-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web mergedRow[col] = { value: row[col], rowSpan: j - i }); merged.push(mergedRow); } else { -app> ``` 7. 运项目 将项目部署到Tomcat服务器上,启动服务器后在浏览器中 // 不需要合并或列 merged.push(row); } i = j; } return merged; 访问`http://localhost:8080/`即可进入主页,点击“立即开始”按钮进入登录页面} const data = [ { id: 1, name: 'John', age: 30, gender: ',输入正确的用户名和密码后,进入欢迎页面,点击“退出登录”按钮即可注销用户。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Black Jun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值