Layui——创建前端模板

前端代码——动态数据加载

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>修改日志查询报表</title>
    <style>
        body, html {
            width: 100%;
            height: 100%;
            padding: 0px;
            margin: 0px;
            background: #eef7fa;
        }

        .report_title {
            height: 45px;
            font-weight: bold;
            font-size: 25px;
            line-height: 45px;
            text-align: center;
        }

        .layui-table thead tr {
            background: #91d3f9;
            color: white;
        }

        .layui-table-cell { 
            padding: 0px 3px;
        }

        .layui-form-select dl {
            max-height: 150px;
        }
    </style>
</head>
<body>
    <div id="app">
        <!--头部标题-->
        <div class="report_title">
            <font color="black">修改日志查询报表</font>
        </div>
        <!--选择框-->
        <form class="layui-form" action="">
            <div class="layui-form-item">
                <label class="layui-form-label">查询类型:</label>
                <div class="layui-input-inline">
                    <select id="queryType" lay-filter="test">
                        <option value="1" selected="selected">常规查询</option>
                        <option value="2">批量导入</option>
                    </select>
                </div>
                <button type="button" id="search" class="layui-btn layui-btn-normal">搜 索</button>
                <button type="button" id="export" class="layui-btn layui-btn-warm">导 出</button>
                <button type="button" id="reset" class="layui-btn layui-btn-danger">清 空</button>
                <span style="color:red;">* 若导出数据超100万,请分时间段导出、合并</span>
            </div>
        </form>
        <hr style="height:10px;border:none;border-top:10px groove skyblue;">
        <!--常规查询输入框-->
        <form class="layui-form" id="mytable">
            <div class="layui-form-item">
                <label class="layui-form-label" style="margin-left:-30px;">模块:</label>
                <div class="layui-input-inline">
                    <select id="model" class="layui-form-select dl" lay-filter="model">
                        <option value="">请选择一个值</option>
                    </select>
                </div>
                <label class="layui-form-label">表名称:</label>
                <div class="layui-input-inline" style="width:150px;">
                    <select id="tableName" class="layui-form-select dl">
                        <option value="">请选择一个值</option>
                    </select>
                </div>
                <label class="layui-form-label" style="margin-left:-20px;">修改人:</label>
                <div class="layui-input-inline" style="width:150px;">
                    <input type="text" id="modifier" placeholder="修改人" class="layui-input">
                </div>
                <label class="layui-form-label">开始时间:</label>
                <div class="layui-input-inline">
                    <input class="layui-input" id="startTime" placeholder="开始时间" onfocus="WdatePicker({lang:'zh-cn', dateFmt:'yyyy/MM/dd HH:mm:ss'})" readonly />
                </div>
                <label class="layui-form-label">结束时间:</label>
                <div class="layui-input-inline">
                    <input class="layui-input" id="endTime" placeholder="结束时间" onfocus="WdatePicker({lang:'zh-cn', dateFmt:'yyyy/MM/dd HH:mm:ss'})" readonly />
                </div>
            </div>
        </form>
        <!--批量导入输入框-->
        <div id="impTable" style="display:none;">
            <div class="layui-upload">
                <label class="layui-form-label" style="width:110px;">批量导入:</label>
                <button type="button" class="layui-btn layui-btn-normal" id="chooseFile">选择文件</button>
                <button type="button" class="layui-btn" id="uploadFile">开始上传</button>
            </div>
        </div>
        <!--表格显示-->
        <table class="layui-hide" id="test"></table>
    </div>

    <script>
        var guid = "undefined";
        //加载表格table
        layui.use(['table', 'form', 'upload'], function () {
            var form = layui.form;
            var table = layui.table;
            var columns0 = [[
                { width: 50, title: '序号', type: "numbers" },
                { field: 'MODIFY_USER', width: 150, title: '修改人' },
                { field: 'MODIFY_DATE', width: 150, title: '修改时间' }
            ]];
            table.render({
                elem: '#test',
                title: '修改日志查询报表',
                data: [],
                cols: columns0,
                page: true
            });
            //添加
            $.get("/Log/getTypes", {},
                function (res) {
                    var response = JSON.parse(res);
                    if (response.code == "0" && response.count != "0") {
                        var resdata = new Array(response.data);

                        console.log(resdata)

                        if ((resdata[0] != null) && (resdata[0].length != 0)) {
                            for (var i = 0; i < resdata[0][0].length; i++) {
                                $("#model").append("<option value='" + i + "'>" + resdata[0][0][i].MODELTYPE + "</option>");
                            }
                            //for (var i = 0; i < resdata[0][1].length; i++) {
                            //    $("#tableName").append("<option value='" + i + "'>" + resdata[0][1][i].TABLENAME + "</option>");
                            //}
                            form.render(); //更新全部
                        }
                    } else {
                        alert("无查询结果");
                        return;
                    }
                }).fail(function (err) {
                    alert("服务器请求失败");
                    return;
                }
            );
            form.on('select(model)',function (data) {

                console.log(data.value);

                $("#tableName").empty();
                form.render("select");
                var index1 = document.getElementById("model").selectedIndex;
                var model1 = document.getElementById("model").options[index1].text == "请选择一个值" ? "" : document.getElementById("model").options[index1].text;
                $.get("/Log/getTableTypes", { model: model1 },
                    function (res) {
                        var response = JSON.parse(res);
                        if (response.code == "0" && response.count != "0") {
                            var resdata = new Array(response.data);

                            console.log(resdata)

                            if ((resdata[0] != null) && (resdata[0][0].length != 0)) {
                                for (var i = 0; i < resdata[0][0].length; i++) {
                                    $("#tableName").append("<option value='" + i + "'>" + resdata[0][0][i].TABLENAME + "</option>");
                                }
                                form.render(); //更新全部
                            }
                        } else {
                            alert("无查询结果");
                            return;
                        }
                    }).fail(function (err) {
                        alert("服务器请求失败");
                        return;
                    }
                );
            });
            //select选择器的change事件
            form.on('select(test)', function (data) {
                if (data.value == 1) {
                    $("#impTable").hide();
                    $("#mytable").show();
                    guid = "undefined";
                } else {
                    $("#impTable").show();
                    $("#mytable").hide();
                }
            });
            //查询按钮点击事件
            $("#search").on("click", searchData)
            //导出按钮点击事件
            $("#export").on("click", function () {
                var index1 = document.getElementById("model").selectedIndex;
                var model = document.getElementById("model").options[index1].text == "请选择一个值" ? "" : document.getElementById("model").options[index1].text;
                var index2 = document.getElementById("tableName").selectedIndex;
                var tableName = document.getElementById("tableName").options[index2].text == "请选择一个值" ? "" : document.getElementById("tableName").options[index2].text;
                //var model = $("#model").val();
                //var tableName = $("#tableName").val();
                var modifier = $("#modifier").val();
                var startTime = $("#startTime").val();
                var endTime = $("#endTime").val();
                if (guid == "undefined") {
                    if (model.length == 0 && tableName.length == 0 && modifier.length == 0 && startTime.length == 0 && endTime.length == 0) {
                        layer.open({
                            type: 1,
                            time: 2000,
                            closeBtn: 0,
                            skin: 'layui-layer-molv',
                            content: "<div style='padding:20px;'>请输入条件!</div>"
                        });
                        return;
                    }
                    if (tableName.length == 0) {
                        layer.open({
                            type: 1,
                            time: 2000,
                            closeBtn: 0,
                            skin: 'layui-layer-molv',
                            content: "<div style='padding:20px;'>表名称必选,不能为空!</div>"
                        });
                        return;
                    }
                    if (startTime.length == 0 && endTime.length != 0) {
                        layer.open({
                            type: 1,
                            time: 2000,
                            closeBtn: 0,
                            skin: 'layui-layer-molv',
                            content: "<div style='padding:20px;'>开始时间不能为空!</div>"
                        });
                        return;
                    }
                    if (startTime.length != 0 && endTime.length == 0) {
                        layer.open({
                            type: 1,
                            time: 2000,
                            closeBtn: 0,
                            skin: 'layui-layer-molv',
                            content: "<div style='padding:20px;'>结束时间不能为空!</div>"
                        });
                        return;
                    }
                }
                layer.load(1);
                $.get("/Log/getLogReport",
                    {
                        "page": "1",
                        "limit": "1000000",
                        "model": model,
                        "tableName": tableName,
                        "modifier": modifier,
                        "startTime": startTime,
                        "endTime": endTime,
                        "guid": guid,
                        "sign": new Date()
                    }, function (res) {
                        var response = JSON.parse(res)
                        if (response.code == "0") {
                            if (response.filePath == "") {
                                JsonToExcel(response.data, '修改日志查询报表', '', response.sheetHeader);
                            } else {
                                window.open("/common/exportFile?filePath=" + response.filePath + "&fileName=修改日志查询报表")
                            }
                            layer.closeAll('loading');
                        } else {
                            layer.open({
                                type: 1,
                                time: 2000,
                                closeBtn: 0,
                                skin: 'layui-layer-molv',
                                content: "<div style='padding:20px;'>数据导出失败</div>"
                            });
                            layer.closeAll('loading');
                            return;
                        }
                    }).fail(function (err) {
                        layer.open({
                            type: 1,
                            time: 2000,
                            closeBtn: 0,
                            skin: 'layui-layer-molv',
                            content: "<div style='padding:20px;'>服务器请求失败</div>"
                        });
                        layer.closeAll('loading');
                        return;
                    });
            })
        });
        //清空按钮点击事件
        $("#reset").on("click", function () {
            //$("#model").val("");
            //$("#tableName").val("");
            var x = document.getElementById("model");
            x.options[0].selected = true;//索引从0开始
            var y = document.getElementById("tableName");
            y.options[0].selected = true;//索引从0开始
            $("#modifier").val("");
            $("#startTime").val("");
            $("#endTime").val("");
            guid = "undefined";
            layui.form.render('select');
        })
        //查询事件
        function searchData() {
            var index1 = document.getElementById("model").selectedIndex;
            var model = document.getElementById("model").options[index1].text == "请选择一个值" ? "" : document.getElementById("model").options[index1].text;
            var index2 = document.getElementById("tableName").selectedIndex;
            var tableName = document.getElementById("tableName").options[index2].text == "请选择一个值" ? "" : document.getElementById("tableName").options[index2].text;
            //var model = $("#model").val();
            //var tableName = $("#tableName").val();
            var modifier = $("#modifier").val();
            var startTime = $("#startTime").val();
            var endTime = $("#endTime").val();
            if (guid == "undefined") {
                if (model.length == 0 && tableName.length == 0 && modifier.length == 0 && startTime.length == 0 && endTime.length == 0) {
                    layer.open({
                        type: 1,
                        time: 2000,
                        closeBtn: 0,
                        skin: 'layui-layer-molv',
                        content: "<div style='padding:20px;'>请输入条件</div>"
                    });
                    return;
                }
                if (tableName.length == 0) {
                    layer.open({
                        type: 1,
                        time: 2000,
                        closeBtn: 0,
                        skin: 'layui-layer-molv',
                        content: "<div style='padding:20px;'>表名称必选,不能为空!</div>"
                    });
                    return;
                }
                if (model.length != 0 && tableName.length == 0) {
                    layer.open({
                        type: 1,
                        time: 2000,
                        closeBtn: 0,
                        skin: 'layui-layer-molv',
                        content: "<div style='padding:20px;'>请选择【模块+表名称】或者单选【表名称】</div>"
                    });
                    return;
                }
                if (startTime.length == 0 && endTime.length != 0) {
                    layer.open({
                        type: 1,
                        time: 2000,
                        closeBtn: 0,
                        skin: 'layui-layer-molv',
                        content: "<div style='padding:20px;'>开始时间不能为空</div>"
                    });
                    return;
                }
                if (startTime.length != 0 && endTime.length == 0) {
                    layer.open({
                        type: 1,
                        time: 2000,
                        closeBtn: 0,
                        skin: 'layui-layer-molv',
                        content: "<div style='padding:20px;'>结束时间不能为空</div>"
                    });
                    return;
                }
            }
            layer.load(1);
            $.get("/Log/getZhColumnName",
                {
                    "model": model,
                    "tableName": tableName,
                },
                function (res) {
                    var response = JSON.parse(res);
                    if (response.code == "0" && response.count != "0") {
                        var resdata = new Array(response.data);
                        if ((resdata[0] != null) && (resdata[0].length != 0)) {
                            var colzharray = resdata[0][0].COLUMNZH.toString().split(",");
                            var colenarray = resdata[0][0].COLUMNEN.toString().split(",");
                            if (colzharray.length == colenarray.length) {
                                //需要表字段名及对应的中文名
                                var columns = [[
                                    { width: 50, title: '序号', type: "numbers" },
                                ]];
                                for (var i = 0; i < colenarray.length; i++) {
                                    //{ field: 'MODELTYPE', width: 150, title: '模块类型' },
                                    var col = { field: colenarray[i].toString().trim().toUpperCase(), width: 150, title: colzharray[i].toString().trim() };
                                    columns[0].push(col);
                                }
                                layui.table.render({
                                    elem: '#test',
                                    title: '修改日志查询报表',
                                    data: [],
                                    cols: columns,
                                    page: true
                                });
                                var searchObj = {};
                                searchObj.model = model;
                                searchObj.tableName = tableName;
                                searchObj.modifier = modifier;
                                searchObj.startTime = startTime;
                                searchObj.endTime = endTime;
                                searchObj.guid = guid;
                                searchObj.sign = new Date();
                                layui.table.reload('test', {
                                    url: '/log/getLogReport',
                                    page: { curr: 1 },
                                    where: searchObj,
                                    done: function (res) {
                                        layer.closeAll('loading');
                                    }
                                });
                            }else {
                                alert("英文字段与中文字段的个数不相等,需维护");
                                return;
                            }
                        }
                    } else {
                        alert("无查询结果");
                        return;
                    }
                }).fail(function (err) {
                    alert("服务器请求失败");
                    return;
                });
        }
    </script>
</body>
</html>

后端代码

using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using ReportSystem.Util;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;

namespace ReportSystem.Controllers
{
    public class LogController : Controller
    {
        OraHelper oracle = new OraHelper();
        OraHelper oraSecondary = new OraHelper("secondary"); //创建备库的链接对象(用于查询数据)
        // GET: Log
        public ActionResult QueryLogReport()
        {
            return View();
        }

        //查询日志报表
        public string getLogReport()
        {
            try
            {
                int page = (Convert.ToInt32(Request.QueryString["page"].ToString()) - 1) * Convert.ToInt32(Request.QueryString["limit"].ToString());
                string limit = Request.QueryString["limit"].ToString();
                string model = Request.QueryString["model"].ToString();
                string tableName = Request.QueryString["tableName"].ToString();
                string modifier = Request.QueryString["modifier"].ToString();
                string startTime = Request.QueryString["startTime"].ToString();
                string endTime = Request.QueryString["endTime"].ToString();
                string guid = Request.QueryString["guid"].ToString();
                StringBuilder condition0 = new StringBuilder();
                condition0.Append(MyStringBuilder.toString(model, $@" and MODELTYPE='{model}' "));
                condition0.Append(MyStringBuilder.toString(tableName, $@" and TABLENAME='{tableName}' "));
                StringBuilder condition = new StringBuilder();
                //condition.Append(MyStringBuilder.toString(model, $@" and MODELTYPE='{model}' "));
                //condition.Append(MyStringBuilder.toString(tableName, $@" and TABLENAME='{tableName}' "));
                condition.Append(MyStringBuilder.toString(modifier, $@" and MODIFY_USER='{modifier}' "));
                condition.Append(MyStringBuilder.toString(startTime, $@" and MODIFY_DATE between to_date('{startTime}','yyyy-mm-dd hh24:mi:ss') and to_date('{endTime}','yyyy-mm-dd hh24:mi:ss') "));

                //表头
                string[] sheetHeader = new string[] { };
                List<string> sheetHeader_list = new List<string>(sheetHeader);

                //常规查询
                if (guid.Equals("undefined"))
                {
                    //查询表明和列明
                    string tableSql = $@"select logtable,columnzh from log_table_detail where 1 = 1 {condition0.ToString()}";
                    DataSet ds0 = oracle.GetDataSet(tableSql);
                    foreach (string col in ds0.Tables[0].Rows[0]["COLUMNZH"].ToString().Split(','))
                    {
                        sheetHeader_list.Add(col);
                    }
                    sheetHeader = sheetHeader_list.ToArray();

                    string rawSql = $@"select * from {ds0.Tables[0].Rows[0]["LOGTABLE"].ToString()} where 1 = 1 {condition.ToString()}";
                    //获取总数
                    string count = oracle.GetDataScalar<string>($@"SELECT COUNT(*) NUMS  FROM ({rawSql})");
                    //获取需要的数据
                    DataSet ds = oracle.GetDataSet($@"SELECT * FROM ({rawSql} ORDER BY MODIFY_DATE) OFFSET {page} ROWS FETCH FIRST {limit} ROWS WITH TIES");
                    JObject json = new JObject();
                    json.Add("code", "0");
                    json.Add("msg", "");
                    json.Add("count", count);
                    //如果导出的数量超过3万,则使用服务器导出,否则使用浏览器导出
                    string filePath = string.Empty;
                    JArray jArray = new JArray();
                    if (ds.Tables[0].Rows.Count > 30000)
                    {
                        filePath = myNpoi.DataTableToExcel(ds.Tables[0], sheetHeader);
                    }
                    else
                    {
                        IsoDateTimeConverter timeFormat = new IsoDateTimeConverter();
                        timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
                        jArray = (JArray)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(ds.Tables[0], Formatting.Indented, timeFormat));
                    }
                    json.Add("filePath", filePath);
                    json.Add("data", jArray);
                    json.Add(new JProperty("sheetHeader", sheetHeader));
                    return json.ToString();
                }
                else
                {
                    JObject json = new JObject();
                    json.Add("code", "1");
                    json.Add("count", "0");
                    return json.ToString();
                }
            }
            catch (Exception ex)
            {
                JObject json = new JObject();
                json.Add("code", "1");
                json.Add("count", "0");
                return json.ToString();
            }
        }

        //得到报表的表头
        public string getZhColumnName()
        {
            string model = Request.QueryString["model"].ToString();
            string tableName = Request.QueryString["tableName"].ToString();
            StringBuilder condition = new StringBuilder();
            condition.Append(MyStringBuilder.toString(model, $@" and MODELTYPE='{model}' "));
            condition.Append(MyStringBuilder.toString(tableName, $@" and TABLENAME='{tableName}' "));

            string colSql = $@"select columnzh,columnen from log_table_detail where 1 = 1 {condition.ToString()}";
            string count = oraSecondary.GetDataScalar<string>($@"SELECT COUNT(*) NUMS  FROM ({colSql})");
            DataSet ds = oraSecondary.GetDataSet($@"SELECT * FROM ({colSql})");
            JObject json = new JObject();
            json.Add("code", "0");
            json.Add("count", count);
            JArray jArray = new JArray();
            jArray = (JArray)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(ds.Tables[0]));
            json.Add("data", jArray);
            return json.ToString();
        }

        //得到模块和表类型
        public string getTypes()
        {
            string typeSql = $@"select distinct modeltype from log_table_detail";
            string count = oracle.GetDataScalar<string>($@"SELECT COUNT(*) NUMS  FROM ({typeSql})");
            DataSet ds = oracle.GetDataSet($@"SELECT * FROM ({typeSql})");
            string typeSql2 = $@"select distinct tablename from log_table_detail";
            string count2 = oracle.GetDataScalar<string>($@"SELECT COUNT(*) NUMS  FROM ({typeSql2})");
            DataSet ds2 = oracle.GetDataSet($@"SELECT * FROM ({typeSql2})");
            JObject json = new JObject();
            json.Add("code", "0");
            json.Add("count", count);
            JArray jArray = new JArray();
            jArray.Add((JArray)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(ds.Tables[0])));
            jArray.Add((JArray)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(ds2.Tables[0])));
            json.Add("data", jArray);
            return json.ToString();
        }

        public string getTableTypes(string model = "")
        {
            string typeSql = $@"select distinct tablename from log_table_detail where modeltype = '{model}'";
            string count = oracle.GetDataScalar<string>($@"SELECT COUNT(*) NUMS  FROM ({typeSql})");
            DataSet ds = oracle.GetDataSet($@"SELECT * FROM ({typeSql})");
            JObject json = new JObject();
            json.Add("code", "0");
            json.Add("count", count);
            JArray jArray = new JArray();
            jArray.Add((JArray)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(ds.Tables[0])));
            json.Add("data", jArray);
            return json.ToString();
        }
    }
}

 _ViewStart.cshtml

@{
    //Layout = "~/Views/Shared/_Layout.cshtml";
}
<link href="~/Resources/layui/css/layui.css" rel="stylesheet" />
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Resources/layui/layui.js"></script>
<script src="~/Resources/My97DatePicker/WdatePicker.js"></script>
<script src="~/Resources/js/JsonExportExcel.min.js"></script>
<script>
    //导出数据
    function JsonToExcel(jsonData, fileName, sheetName, sheetHeader) {
        var option = {};
        option.fileName = fileName;
        option.datas = [
            {
                sheetData: jsonData,
                sheetName: sheetName,
                sheetHeader: sheetHeader,
            }
        ];
        var toExcel = new ExportJsonExcel(option);
        toExcel.saveExcel();
    }
    function JsonToExcelNew(fileName, jsonDataOne, sheetNameOne, sheetHeaderOne, jsonDataTwo, sheetNameTwo, sheetHeaderTwo) {
        var option = {};
        option.fileName = fileName;
        option.datas = [
            {
                sheetData: jsonDataOne,
                sheetName: sheetNameOne,
                sheetHeader: sheetHeaderOne,
            },
            {
                sheetData: jsonDataTwo,
                sheetName: sheetNameTwo,
                sheetHeader: sheetHeaderTwo,
            }
        ];
        var toExcel = new ExportJsonExcel(option);
        toExcel.saveExcel();
    }
</script>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
layui是一个非常受欢迎的前端模板,它提供了丰富的UI组件和常用的前端功能,方便开发者快速构建出漂亮的网页界面。 首先,layui拥有大量的UI组件,包括按钮、表单、表格、导航、面包屑等常见的界面元素。这些组件都经过精心设计,样式美观,交互友好,能够满足大多数网页的需求。同时,layui还提供了丰富的配色方案,可以根据项目需要进行自定义,使得网页在视觉上更加统一和专业。 其次,layui还提供了丰富的前端功能,例如表单验证、异步加载、图片预览等。表单验证功能方便开发者对用户输入进行校验,确保数据的合法性。异步加载功能可以提高网页的加载速度和用户体验,使得页面不需要重新加载就能够动态更新内容。图片预览功能可以方便地实现图片的放大、缩小和切换,提供更好的用户交互效果。 除此之外,layui还支持响应式布局,适应不同屏幕尺寸的设备。这意味着网页在不同的终端上都能够呈现出较好的效果,无论是在PC端还是移动端都能够提供良好的用户体验。这对于当前移动互联网的发展趋势来说,是非常重要的。 总的来说,layui是一个功能强大、易于使用的前端模板,它能够帮助开发者快速构建出漂亮、功能完善的网页界面。无论是初学者还是有一定经验的开发者,都可以通过layui来提高开发效率和网页质量。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值