BootStrap框架下使用JS动态加载table并点击相关列弹出二级页面

简介: 在这里记录一下,也是在公司用到的一个例子,刚刚解决,正好趁热打铁。前端页面是采用BootStrap框架搭建的,主要的样式涉及到项目,在这里就不截图了,直接上代码:

在这里记录一下,也是在公司用到的一个例子,刚刚解决,正好趁热打铁。前端页面是采用BootStrap框架搭建的,主要的样式涉及到项目,在这里就不截图了,直接上代码:

一级table动态加载

jsp/html中的table代码:

<table id="data-table" class="table table-striped table-condensed" border="0"
               style="width: 100%; margin-top:21px; background:#163F77">
</table>

根据后台返回的json数据来动态加载出来

    //页面dataTables 表格加载
        xxx.tableControl({
            //日期控件选择器
            dateRange: ".data-range-picker",
            startDay: 15,
            //导出按钮选择器
            exportBtnSelector: ".export-btn",
            tableSelector: "#data-table",
            // 子表点击开关
            childTableClick: true,
            // 启用外部设置时间
            controlDate: true,
            //table opitons
            tableOpitons: {
                childTableRowClick: function (store, fieldName) {
                    console.log("111111");
                    console.log(fieldName);
                    if (fieldName === "") {
                        $(".nav-link.active").removeClass("active show");
                        $("a[href^='#id值']").addClass("active");
                        $("#要显示的二级界面id").modal("show");
                        shinow.jaDataTable("1", "需要打开的二级页面");
                    }
                },
                //主键
                parentIdField: '后台传过来的数据ID',
                //名称
                nameField: '后台传过来的NAME',
                ajaxSuccess: function (data, $table, sum) {
                    //  debugger;
                    if (sum[0] != 0) {
                        sum[2] = xxx.numberUtil.formatLength(sum[2] = sum[1] / parseInt(sum[0]) * 100, 2);
                    } else {
                        sum[2] = 0
                    }
                    return sum;
                },
                columns: [
                    [{
                        //接口中的key
                        field: '后台传过来的ID',
                        //显示名称
                        title: '编号',
                        align: 'left',
                        //是否显示
                        visible: false
                    },
                        {
                            field: '后台传过来的名字',
                            //宽度
                            width: 65,
                            //计算合计
                            // sumable: true,
                            align: "center",
                            highlight: "#ffd800",
                            title: '单位',
                            rowspan: 2
                        },
                        {
                            field: '后台传的其它值',
                            //宽度
                            width: 65,
                            //计算合计
                            sumable: true,
                            align: "center",
                            highlight: "#ffd800",
                            title: 'XXX',
                            rowspan: 2
                        },
                        {
                            //宽度
                            width: 65,
                            //计算合计
                            // sumable: true,
                            align: "center",
                            // highlight: "#ffd800",
                            title: '督促',
                            colspan: 5
                        }
                    ], [{
                        field: '后台传的其它值',
                        //宽度
                        width: 80,
                        //允许弹出明细
                        childClick: true,
                        //计算合计
                        sumable: true,
                        align: "center",
                        highlight: "#ffd800",
                        title: 'XXX'//,
                        // rowspan: 2
                    }, {
                        field: '后台传的其它值',
                        //宽度
                        width: 80,
                        align: "center",
                        highlight: "#ffd800",
                        title: 'XXX'
                    }, {
                        field: '后台传的其它值',
                        //宽度
                        width: 80,
                        align: "center",
                        highlight: "#ffd800",
                        title: 'XXX'
                    }, {
                        field: '后台传的其它值',
                        //宽度
                        width: 65,
                        align: "center",
                        highlight: "#ffd800",
                        title: 'XXX'
                    },
                        {
                            field: '后台传的其它值',
                            //宽度
                            width: 65,
                            align: "center",
                            highlight: "#ffd800",
                            title: '同比'
                        }]
                ],
                fnRowCallback: function (nRow, aData, iDisplayIndex) {
                    $('td:eq(2)', nRow).removeClass("text-center");
                    $('td:eq(2)', nRow).attr('style', 'text-align: left;');
                },
                fnFooterCallback: function (nFoot, aData, iStart, iEnd, aiDisplay) {
                    var total = $("#data-table tbody").data("other");
                    $(nFoot).find('th').eq(3).html("<span style=\"color:#ffd800; font-weight: bold;\">" + total.JQSLtotal +
                        "</span>");
                    $(nFoot).find('th').eq(4).html("<span style=\"color:#ffd800; font-weight: bold;\">" + total.YJSLtotal +
                        "%</span>");
                    $(nFoot).find('th').eq(5).html("<span style=\"color:#ffd800; font-weight: bold;\">" + total.ZGSLtotal +
                        "%</span>");
                    $(nFoot).find('th').eq(6).html("<span style=\"color:#ffd800; font-weight: bold;\">" + total.ZGBLtotal +
                        "</span>");
                    $(nFoot).find('th').eq(7).html("<span style=\"color:#ffd800; font-weight: bold;\">" + total.YJHBtotal +
                        "%</span>");
                    $(nFoot).find('th').eq(8).html("<span style=\"color:#ffd800; font-weight: bold;\">" + total.YJTBtotal +
                        "%</span>");
                    $(nFoot).find('th').eq(9).html("<span style=\"color:#ffd800; font-weight: bold;\">" + total.DCSLtotal +
                        "%</span>");
                    $(nFoot).find('th').eq(10).html("<span style=\"color:#ffd800; font-weight: bold;\">" + total.DCZGSLtotal +
                        "%</span>");
                    $(nFoot).find('th').eq(11).html("<span style=\"color:#ffd800; font-weight: bold;\">" + total.DCZGBLtotal +
                        "%</span>");
                    $(nFoot).find('th').eq(12).html("<span style=\"color:#ffd800; font-weight: bold;\">" + total.DCHBtotal +
                        "%</span>");
                    $(nFoot).find('th').eq(13).html("<span style=\"color:#ffd800; font-weight: bold;\">" + total.DCTBtotal +
                        "%</span>");
                    console.log(total);
                }
            },
            //table url地址
            tableParentUrl: $("#path").val() + "访问后台接口路径"
        });

在主table页面中点击数据后展开,当点击展开后的某一列的话,会弹出二级table页面,相当于table主页的二级弹框,js代码如下:

二级table动态产生

//二级table内容
    jaDataTable: function (caseType, tableName) {
        var that = this;
        var orgId = $('#button_org_id').val();
        var startTime = $('#startTime').val();//参数
        var endTime = $('#endTime').val();//参数
        //$("#" + tableName + "_table").dataTable().fnClearTable();//还原初始化了datatable
        //alert(typeof($("#" + tableName + "_table").DataTable()));
        //$("#" + tableName + "_table").DataTable().destroy();//还原初始化了datatable
         var table4 = $('#' + tableName + '_table').DataTable({
            "ordering": false,//去掉排序小图标
            // "processing": true,
            // "serverSide": true,
            "destroy": true,
            searching: false, 'paging': false,
            // "bLengthChange": true, //开关,是否显示每页显示多少条数据的下拉框
            // data: data,
            "ajax": function (data, callback, settings) {//ajax配置为function,手动调用异步查询
                $.ajax({
                    type: "get",
                    url: $("#path").val() + "/xx/xx/xx/xx?startDate=" + startTime.replace(/-/g, "")
                        + "&endDate=" + endTime.replace(/-/g, "") + "&orgId=" + orgId + "&caseType=" + caseType,
                    cache: false,  //禁用缓存
                    // data: param,    //传入已封装的参数
                    dataType: "json",
                    success: function (result) {
                        //setTimeout仅为测试延迟效果
                        setTimeout(function () {
                            //异常判断与处理
                            if (result.errorCode) {
                                swal("", "查询失败", "warning");
                                //$.dialog.alert("查询失败。错误码:" + result.errorCode);
                                return;
                            }
                            //封装返回数据,这里仅演示了修改属性名
                            var returnData = {};
                            returnData.data = result.data;
                            //调用DataTables提供的callback方法,代表数据已封装完成并传回DataTables进行渲染
                            //此时的数据需确保正确无误,异常判断应在执行此回调前自行处理完毕
                            callback(returnData);
                        }, 200);
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        swal("", "查询失败", "warning");
                        //$.dialog.alert("查询失败");
                    }
                });
            },
            "columns": [
                {
                    "data": '后台调用接口返回的json相关字段',
                    title: '对应名称',
                    "width": "20%",
                    searchable: 'false'
                },
                {
                    "data": '后台调用接口返回的json相关字段',
                    title: '对应名称',
                    "width": "20%",
                    searchable: 'false'
                },
                {"data": '后台调用接口返回的json相关字段', title: '对应名称', searchable: 'false', "width": "180px"},
                {"data": '后台调用接口返回的json相关字段', title: '对应名称', searchable: 'false', "width": "180px"},
                {"data": '后台调用接口返回的json相关字段', title: '对应名称', searchable: 'false', "width": "180px"},
                {"data": '后台调用接口返回的json相关字段', title: '对应名称', searchable: 'false', "width": "180px"},
                {"data": '后台调用接口返回的json相关字段', title: '对应名称', searchable: 'false', "width": "180px"}
            ]
        });
    }

因为二级弹出页面是分为多个类别的,每个类别都对应着相关的table页,所以在这里需要定义不同的caseType来进行传参,以及对应的table的id值。具体的js代码如下:

$(".nav-link").on("click", function () {
            var href = $(this).attr("href");
            switch (href) {
                case "#yjjqInfo":
                    shinow.jaDataTable("自定义编号,用于传到后台", "table1的id名");
                    break;
                case "#jsspjqInfo":
                    shinow.jaDataTable("自定义编号,用于传到后台", "table2的id名");
                    break;
                case "#scjcjspInfo":
                    shinow.jaDataTable("自定义编号,用于传到后台", "table3的id名");
                    break;
                case "#sahzyclInfo":
                    shinow.jaDataTable("自定义编号,用于传到后台", "table4的id名");
                    break;
                default:
                    break;
            }
        });

最后就是在jsp/html中的二级table的定义,代码如下:

<!--二级页面-->
<div class="modal fade" id="ajja_details_modal">
    <div class="modal-dialog modal-dialog-centered" style="min-width:1490px;color: #fff">
        <div class="modal-content">
            <div class="modal-header">
                问题分类
                <button type="button" class="close" data-dismiss="modal" style="margin-top:-10px;">&times;</button>
            </div>
            <div class="modal-body">
                <div class="panel blank-panel">
                    <div class="panel-heading  m-t-md">
                        <div class="panel-options">
                            <div class="tabbable">
                                <ul class="nav nav-tabs" role="tablist">
                                    <li><a class="nav-link active" href="#yjjqInfo" data-toggle="tab">分类1</a></li>
                                    <li><a class="nav-link" href="#jsspjqInfo" data-toggle="tab"
                                           id="nav-link">分类2</a>
                                    </li>
                                    <li><a class="nav-link" href="#scjcjspInfo" data-toggle="tab"
                                           id="nav-link">分类3</a>
                                    </li>
                                    <li><a class="nav-link" href="#sahzyclInfo" data-toggle="tab" id="nav-link">分类4</a>
                                    </li>
                                </ul>
                            </div>
                        </div>
                    </div>
                    <div class="panel-body">
                        <div class="tab-content">
                            <div class="tab-pane active" id="yjjqInfo">
                                <div class="p-sm border no-top-border">
                                 <button type="submit" class="btn btn-warning start export-btn_yjjq lbox-btn">
                                                                                                         <i class="glyphicon glyphicon-export" aria-hidden="true"></i>
                                                                                                         <span>导出Excel</span>
                                                                                                     </button>
                                    <div class="row">
                                        <div class="col-md-12">
                                            <table class="table table-bordered text-center table_ellipsis"
                                                   id="yjjqInfo_table" style="width: 100%">
                                            </table>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <div class="tab-pane" id="jsspjqInfo">
                                <div class="p-sm border no-top-border">
                                 <button type="submit" class="btn btn-warning start export-btn_jsspjq lbox-btn">
                                                                                                         <i class="glyphicon glyphicon-export" aria-hidden="true"></i>
                                                                                                         <span>导出Excel</span>
                                                                                                     </button>
                                    <div class="row">
                                        <div class="col-md-12">
                                            <table class="table table-bordered text-center table_ellipsis  table_jsspjq"
                                                   id="jsspjqInfo_table" style="width: 100%">
                                            </table>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <div class="tab-pane" id="scjcjspInfo">
                                <div class="p-sm border no-top-border">
                                  <button type="submit" class="btn btn-warning start export-btn_scjcjsp lbox-btn">
                                                                                                         <i class="glyphicon glyphicon-export" aria-hidden="true"></i>
                                                                                                         <span>导出Excel</span>
                                                                                                     </button>
                                    <div class="row">
                                        <div class="col-md-12">
                                            <table class="table table-bordered text-center table_ellipsis table_scjcjsp"
                                                   id="scjcjspInfo_table" style="width: 100%">
                                            </table>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            <div class="tab-pane" id="sahzyclInfo">
                                <div class="p-sm border no-top-border">
                                <button type="submit" class="btn btn-warning start export-btn_sahzycl lbox-btn">
                                                                                                         <i class="glyphicon glyphicon-export" aria-hidden="true"></i>
                                                                                                         <span>导出Excel</span>
                                                                                                     </button>
                                    <div class="row">
                                        <div class="col-md-12">
                                            <table class="table table-bordered text-center table_ellipsis table_sahzycl"
                                                   id="sahzyclInfo_table" style="width: 100%">
                                            </table>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

导出的功能是采用js来进行的,具体的js代码在下一篇文章进行介绍,也是在工作中遇到的一种前端布局类型,记录一下,方便以后使用。如有不对的地方,还望多多指正!!!

相关文章
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
1149 1
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
1350 4
|
前端开发 安全 API
Qwen-coder实现本地 RAG 框架能力Bootstrap
本文介绍了如何利用Qwen-coder在本地实现RAG框架能力提升,解决了企业知识库管理中的数据安全和半结构化文档处理问题。通过Qwen2.5-72b模型和多轮对话推理,成功实现了对包含图表内容的文档的高效预处理,提升了知识库检索的准确性和安全性。
|
数据采集 存储 监控
实现自动化数据抓取:使用Node.js操控鼠标点击与位置坐标
本文介绍了如何使用Node.js和Puppeteer实现自动化数据抓取,特别是针对新闻网站“澎湃新闻”。通过设置代理IP、User-Agent和Cookie,提高爬虫的效率和隐蔽性,避免被网站封锁。代码示例展示了如何模拟鼠标点击、键盘输入等操作,抓取并整理新闻数据,适用于需要规避IP限制和突破频率限制的场景。
938 10
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
1383 7
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
|
设计模式 JavaScript 前端开发
Vue.js 与第三方库的奇妙融合,Bootstrap 和 Vuex 究竟能带来何种意想不到的变革?
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和可维护性,还使得Vue应用更加模块化和灵活。
159 1
|
JavaScript 前端开发 Java
JavaScript内存泄露大揭秘!你的应用为何频频“爆内存”?点击解锁救星秘籍!
【8月更文挑战第23天】在Web前端开发中,JavaScript是构建动态网页的关键技术。然而,随着应用复杂度增加,内存管理变得至关重要。本文探讨了JavaScript中常见的内存泄露原因,包括意外的全局变量、不当使用的闭包、未清除的定时器、未清理的DOM元素引用及第三方库引发的内存泄露。通过了解这些问题并采取相应措施,开发者可以有效避免内存泄露,提高应用性能。
341 1
|
JavaScript Java
点击按钮,向下添加目录。Java script+jQuery写法
点击按钮,向下添加目录。Java script+jQuery写法
295 1
|
JavaScript Java
分别使用js与jquery写 单击按钮时出现内容 点击删除按钮不会再向下出现
分别使用js与jquery写 单击按钮时出现内容 点击删除按钮不会再向下出现
230 1
|
JavaScript 前端开发
js点击抽奖符合条件触发点击次数
js点击抽奖符合条件触发点击次数
227 1