基于layUI动态数据表格

迅睿框架 更新 2025-12-25 21:06:48 琉惗

基于layUI动态数据表格。创建后台控制台数据统计。并添加分页以及查询

PS:这种写法就是典型的api接口,不会写接口的看完了就知道怎么去写接口,需要的可以收藏保存哦,制作不易需要的大大们稍微打赏一下,支持一下小弟,后面会放更多干货,您的支持就是我的动力,顺便推广一下我的火车头插件哈哈https://www.xunruicms.com/shop/app/529.html,需要的可以去插件商城下载,有问题随时找我,知无不言。

image

image

image


第一步:创建插件

创建插件必须的几个文件为

/dayrui/App/插件目录/Config/App.php

/dayrui/App/插件目录/Config/Version.php

可以先用开发者工具插件去创建一个应用控制器然后讲这两个文件加入进去,这样插件就创建完成

app.php代码
<?php

return [
    'type' => 'app',
    'name' => '学员信息统计',
    'icon' => 'fa fa-bar-chart-o (alias)',
    'author' => '琉惗', // 作者名字
];

Version.php代码
<?php

return [
    'id' => '399',
    'version' => '2.1.1',
    'license' => '',
    'updatetime' => '2020-02-17',
    'downtime' => '2020-02-17',
];

第二步,创建后台面板文件,具体操作方法请查看手册https://www.xunruicms.com/doc/719.html

第三步,在模版文件中使用layui创建表格,代码如下

<link rel="stylesheet" href="./static/layui/css/layui.css"  media="all">

<div class="col-md-6 column sortable" style="width: 100%;padding: 0 0 0 0" id="6-3">

    <div class="portlet portlet-sortable light bordered">
        <div style="border-bottom: 0px solid #eef1f5;" class="portlet-title tabbable-line">
            <div class="caption">
                <i class="fa fa-bar-chart-o (alias)"></i>
                <span class="caption-subject">学生数据统计</span>
            </div>
        </div>
        <div class="portlet-body">
            <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
                <ul class="layui-tab-title">
                    <li class="layui-this">总数据</li>
                    <li>客户统计</li>
                </ul>
                <div class="layui-tab-content">
                    <div class="layui-tab-item layui-show">
                        <table class="layui-hide" id="test"></table>
                    </div>
                    <div class="layui-tab-item">
                        <div class="demoTable">
                            客户名称:
                            <div class="layui-inline layui-form">
                                <select name="name" id="name">
                                    <option value=""></option>
                                    {linkage code=client}
                                        <option value="{$t.ii}">{$t.name}</option>
                                    {/linkage}
                                </select>
                            </div>
                            <button class="layui-btn" data-type="reload">搜索</button>
                        </div>
                        <table id="client"></table>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="./static/layui/layui.js" charset="utf-8"></script>

<script>
    layui.use(['element','table'], function(){
        var $ = layui.jquery
            ,element = layui.element
            ,table = layui.table; //Tab的切换功能,切换事件监听等,需要依赖element模块

        table.render({
            elem: '#test'
            ,url:'{dr_url("Statistics/home/statistic")}'
            ,cols: [[
                {field:'total', title: '总报名人数', align:'center', sort: true}
                ,{field:'day', title: '每日人数', align:'center', sort: true}
                ,{field:'enroll', title: '已录取人数', align:'center', sort: true}
                ,{field:'enroll_no', title: '未录取人数', align:'center', sort: true}
            ]]
        });

        table.render({
            elem: '#client'
            ,url: '{dr_url('Statistics/home/client')}' //数据接口
            ,page: true //开启分页
            ,cols: [
                [ //表头
                    {field: 'name', title: '客户姓名', rowspan: 2, align: 'center', fixed: 'center'}
                    ,{field: 'day', title: '每日人数', rowspan: 2, align: 'center', fixed: 'center'}
                    ,{field: 'enter', title: '总报名人数', rowspan: 2, align: 'center', fixed: 'center'}
                    ,{ title: '学校信息', colspan: 3, align: 'center', fixed: 'center'}
                    ,{ title: '录取状态', colspan: 2, align: 'center', fixed: 'center'}
                    ,{ title: '学籍状态', colspan: 3, align: 'center', fixed: 'center'}
                ]
                ,[

                    {field: 'school', title: '学校名称', align: 'center', fixed: 'center'}
                    ,{field: 'undergraduate', title: '专科', align: 'center', fixed: 'center'}
                    ,{field: 'specialist', title: '本科', align: 'center', fixed: 'center'}
                    ,{field: 'enroll', title: '已录取', align: 'center', fixed: 'center'}
                    ,{field: 'noenroll', title: '未录取', align: 'center', fixed: 'center'}
                    ,{field: 'inschool', title: '在校人数', align: 'center', fixed: 'center'}
                    ,{field: 'graduate', title: '毕业人数', align: 'center', fixed: 'center'}
                    ,{field: 'outschool', title: '退学人数', align: 'center', fixed: 'center'}
                ]
            ]
            ,id: 'clientReload'
        });

        var $ = layui.$, active = {
            reload: function(){
                var demoReload = $('#name');

                //执行重载
                table.reload('clientReload', {
                    page: {
                        curr: 1 //重新从第 1 页开始
                    }
                    ,where: {
                        key: {
                            name: demoReload.val()
                        }
                    }
                }, 'data');
            }
        };

        $('.demoTable .layui-btn').on('click', function(){
            var type = $(this).data('type');
            active[type] ? active[type].call(this) : '';
        });
    });
</script>

第四步,写后台逻辑代码,并将数据进行返回

public function statistic() {
        $data = \Phpcmf\Service::M()->db->table(SITE_ID.'_student')
            ->select('inputtime,enroll')
            ->get()->getResultArray();

        $total = count($data);

        $day = count(\Phpcmf\Service::M()->db->table(SITE_ID.'_student')
            ->select('inputtime,enroll')
            ->where('DATEDIFF(from_unixtime(inputtime),now())=0')
            ->get()->getResultArray());

        $enroll = count(\Phpcmf\Service::M()->db->table(SITE_ID.'_student')
            ->select('enroll')
            ->where('enroll', 1)
            ->get()->getResultArray());

        $enroll_no = count(\Phpcmf\Service::M()->db->table(SITE_ID.'_student')
            ->select('enroll')
            ->where('enroll', 0)
            ->get()->getResultArray());

        return json_encode([
            'code' => 0,
            'msg' => '',
            'count' => $total,
            'data' => [
                    [
                    'total' => $total,
                    'day' => $day,
                    'enroll' => $enroll,
                    'enroll_no' => $enroll_no
                ]
            ]
        ]);
    }

    public function client() {
	    $page = $this->request->getGet('page');
	    $size = $this->request->getGet('limit');
	    $keyword = $this->request->getGet('key');
	    if(empty($keyword['name'])) {
           $where = '';
            $total = count(\Phpcmf\Service::M()->db->query('SELECT a.id as clientid, a.name as clientname, b.id as schoolid, b.name as schoolname, b.childids as schoolchildids, b.class as schoolclass FROM info_linkage_data_5 a INNER JOIN info_linkage_data_3 b ON b.pid = 0')->getResultArray());
        }else{
            $where = ' AND a.id = '.$keyword['name'];
            $total = count(\Phpcmf\Service::M()->db->query('SELECT a.id as clientid, a.name as clientname, b.id as schoolid, b.name as schoolname, b.childids as schoolchildids, b.class as schoolclass FROM info_linkage_data_5 a INNER JOIN info_linkage_data_3 b ON b.pid = 0'.$where)->getResultArray());
        }

	    $up = ($page-1)*$size;

        $array_info = \Phpcmf\Service::M()->db->query('SELECT a.id as clientid, a.name as clientname, b.id as schoolid, b.name as schoolname, b.childids as schoolchildids, b.class as schoolclass FROM info_linkage_data_5 a INNER JOIN info_linkage_data_3 b ON b.pid = 0'.$where.' ORDER BY clientid asc,b.displayorder ASC limit '.$up.','.$size.'')->getResultArray();

        foreach($array_info as $key => $arr_in) {
            $data[$key]['school'] = $arr_in['schoolname'];
            $data[$key]['name'] = $arr_in['clientname'];

            $data[$key]['enter'] = count(\Phpcmf\Service::M()->db->table(SITE_ID . '_student')
                ->select('client')
                ->where('client', $arr_in['clientid'])
                ->where('school in ('.$arr_in['schoolchildids'].')')
                ->get()->getResultArray());

            $data[$key]['day'] = count(\Phpcmf\Service::M()->db->table(SITE_ID.'_student')
                ->select('inputtime')
                ->where('client', $arr_in['clientid'])
                ->where('school in ('.$arr_in['schoolchildids'].')')
                ->where('DATEDIFF(from_unixtime(inputtime),now())=0')
                ->get()->getResultArray());

            $data[$key]['inschool'] = count(\Phpcmf\Service::M()->db->table(SITE_ID . '_student')
                ->select('client')
                ->where('client', $arr_in['clientid'])
                ->where('school in ('.$arr_in['schoolchildids'].')')
                ->where('inschool', 0)
                ->get()->getResultArray());

            $data[$key]['outschool'] = count(\Phpcmf\Service::M()->db->table(SITE_ID . '_student')
                ->select('client')
                ->where('client', $arr_in['clientid'])
                ->where('school in ('.$arr_in['schoolchildids'].')')
                ->where('inschool', 2)
                ->get()->getResultArray());

            $data[$key]['graduate'] = count(\Phpcmf\Service::M()->db->table(SITE_ID . '_student')
                ->select('client')
                ->where('client', $arr_in['clientid'])
                ->where('school in ('.$arr_in['schoolchildids'].')')
                ->where('inschool', 1)
                ->get()->getResultArray());

            $data[$key]['specialist'] = count(\Phpcmf\Service::M()->db->query('SELECT a.id,b.name,b.class FROM info_'.SITE_ID.'_student a INNER JOIN info_linkage_data_3 b ON a.client = '.$arr_in['clientid'].' AND a.school = b.id AND a.school IN ('.$arr_in['schoolchildids'].') AND b.class = 2')->getResultArray());

            $data[$key]['undergraduate'] = count(\Phpcmf\Service::M()->db->query('SELECT a.id,b.name,b.class FROM info_'.SITE_ID.'_student a INNER JOIN info_linkage_data_3 b ON a.client = '.$arr_in['clientid'].' AND a.school = b.id AND a.school IN ('.$arr_in['schoolchildids'].') AND b.class = 1')->getResultArray());

            $data[$key]['enroll'] = count(\Phpcmf\Service::M()->db->table(SITE_ID . '_student')
                ->select('client')
                ->where('client', $arr_in['clientid'])
                ->where('school in ('.$arr_in['schoolchildids'].')')
                ->where('enroll', 1)
                ->get()->getResultArray());

            $data[$key]['noenroll'] = count(\Phpcmf\Service::M()->db->table(SITE_ID . '_student')
                ->select('client')
                ->where('client', $arr_in['clientid'])
                ->where('school in ('.$arr_in['schoolchildids'].')')
                ->where('enroll', 0)
                ->get()->getResultArray());
        }


        return json_encode([
            'code' => 0,
            'msg' => '',
            'count' => $total,
            'data' => $data
        ]);
    }

PS:具体接口数据格式如下图所示,是一个二维数组转化成的json数据

image

image

方案

  • 琉惗 #1 · 2020-02-26 02:28:29
    • 火车头采集器

      火车头采集器,即装即用,支持所有模块,多文件采集,默认news模块,可以发布独立模块以及...

    推广一下个人火车头采集插件,多模块,多文件,随机用户发布,支持本地以及七牛云等远程附件上传,开箱即用,需要的可以关注一下
  • 繁星 #2 · 2020-02-26 23:17:23
    牛逼!!!
  • 昱宇 #3 · 2020-02-27 09:28:08
    好东东
  • 黄老邪 #4 · 2020-02-28 12:55:32
    学习下下
  • yunshui2011 #5 · 2020-03-04 11:38:53
    可以先用开发者工具插件去创建一个应用控制器然后讲这两个文件加入进去,这样插件就创建完成
  • 清萌网络科技 #6 · 2020-03-12 00:12:28
    本部分内容设定了隐藏,需要回复后才能看到,立即回复
  • 过把瘾 #7 · 2020-03-12 10:04:17
    学习下下
  • perweb #8 · 2020-10-13 19:47:49
    学习下
  • 猴子哥哥 #9 · 2020-12-13 10:11:19
    学习学习
  • 飞鱼 #10 · 2020-12-15 15:42:03
    正需要,学习下!
  • phyge #11 · 2020-12-19 13:55:24
    本部分内容设定了隐藏,需要回复后才能看到,立即回复
  • 越王 #12 · 2020-12-22 19:32:19
    牛逼111
  • 吃不痴 #13 · 2021-03-11 23:14:38
    学习一下
  • 18716408881 #14 · 2021-03-14 21:26:01
    学习一下
  • demo1452 #15 · 2021-03-15 09:24:35
    yunshui2011 施舍
  • 早熟的土豆 #16 · 2021-06-23 10:25:36
    学习学习
  • wz19901213 #17 · 2021-08-30 16:38:21
    学习下
  • whyanhuang #18 · 2021-08-30 16:46:47
    看看
  • whyanhuang #19 · 2021-08-30 16:49:02
    打赏按钮点开还是帖子链接 无法打赏查看内容是什么原因?
  • wz19901213 #20 · 2021-08-31 15:04:55
    打赏了 怎么看不到内容 是有金额要求?
  • wz19901213 #21 · 2021-08-31 15:05:37
    wz19901213 重新回复了 可以了 之前刷新了 几次都不行
  • 萧歌 #22 · 2021-09-23 19:48:09
    学习下
  • 没熟的土豆 #23 · 2021-10-24 21:30:13
    重新回复了 可以了 之前刷新了 几次都不行
  • 贰壹网络 #24 · 2021-10-24 21:46:56
    学习了
  • 没熟的土豆 #25 · 2021-10-25 16:11:16
    请问后台逻辑代码 放在哪个文件中呢
  • Rambo #26 · 2021-10-29 10:09:13
    学习一下
  • tuijiangua #27 · 2021-12-12 18:08:51
    学习学习
  • 云南昆明贰壹网络 #28 · 2021-12-14 10:39:34
    学习学习
  • thspan #29 · 2022-02-16 16:44:17
    学习一下学习一下
  • 芝麻通 #30 · 2022-04-13 07:30:26
    • 学习一下

  • 芝麻通 #31 · 2022-04-13 07:31:01
    琉惗
    • 学习一下

  • karas #32 · 2022-04-15 11:09:47
    学习一下学习一下
  • 1239 #33 · 2022-06-18 23:40:45
    学习一下
  • 1239 #34 · 2022-06-29 02:47:20
    学习
  • 1239 #35 · 2022-06-29 02:48:35
    学习一下
  • 白帽优化网 #36 · 2022-07-12 15:48:50
    学习一下
  • 1002054290 #37 · 2022-07-17 11:07:49
    学习学习下
  • 1002054290 #38 · 2022-07-17 11:08:25
    好东西好东西
  • 陈德显 #39 · 2022-10-26 14:09:35
    学习学习学习
  • IT-老男孩 #40 · 2022-10-27 18:53:18
    向大神学习
  • zealens #41 · 2023-01-12 12:13:20
    不错,牛啊,学习了
  • 东莞誉百网站建设 #42 · 2023-01-12 15:24:28
    在模版文件中使用layui创建表格,代码如下
  • q125449096 #43 · 2023-02-01 10:45:36
    学习一下学习一下
  • 血剑弑神 #44 · 2023-02-16 13:09:22
    学习一下学习一下
  • 胡银萍 #45 · 2023-02-16 14:49:50
    学习一下学习一下
  • 蓝色悠郁 #46 · 2023-02-18 08:43:18
    向大神学习 😆
  • slq17 #47 · 2023-02-18 10:33:16
    向大神学习~向大神学习
  • #48 · 2023-03-27 16:31:30
    学习一下学习一下
  • PHP学生 #49 · 2023-03-27 21:51:46
    好东西学习一下
  • criminalist #50 · 2023-04-06 02:47:50
    好东西学习一下
  • 半城烟沙 #51 · 2023-04-09 23:19:01
    学习下后台自定义模块怎么写 😁
  • 张先生 #52 · 2023-10-09 16:06:20
    学习一下 学习一下
  • henna #53 · 2023-10-14 18:01:20
    学习一下,希望有用
  • 123968838 #54 · 2023-11-01 18:22:47
    好东西学习一下
  • henna #55 · 2023-11-15 14:58:38
    分页代码怎么写的
  • 易模板 #56 · 2023-11-23 02:58:40
    学习学习一下
  • 小昕 #57 · 2023-11-23 17:19:39
    11111fOK学习地要无可奈何
  • 张百胜 #58 · 2024-02-27 10:45:27
    好东西学习一下
  • 微信20329916 #59 · 2024-03-01 16:35:06
    好东西学习一下
  • 学习狂人 #60 · 2024-04-05 23:25:46
    学习一下学习一下
  • 学习狂人 #61 · 2024-06-27 09:44:24
    学习,感谢分享
  • 自牧 #62 · 2024-12-13 13:15:05

    创建插件必须的几个文件为

  • hiker #63 · 2024-12-16 10:16:41
    学习一下学习一下
  • miniidea #64 · 2025-01-07 15:59:18
    好东西学习一下
  • 兔子姑娘 #65 · 2025-01-08 15:46:00
    好东西学习一下
  • a42024456 #66 · 2025-04-23 23:11:49
    感谢楼主的分享~~~
  • 不再犹豫 #67 · 2025-09-15 15:26:15
    好东西学习一下
  • 风云 #68 · 2025-09-24 17:09:26
    看起来貌似还不错,学习学习!
  • 呼嗬哈嗤 #69 · 2025-10-10 15:24:10
    好东西学习一下
  • 你好CMS #70 · 2025-12-25 21:06:48
    回复查看一下隐藏内容

迅睿系统漏洞

GeoSeo收录宝
GeoSeo收录宝(2026-09-01)
升级 ai智能发布功能 升级 支持8国语言后端设置和前端输出功能 ...
Word发布批量上传
Word发布批量上传(2026-08-31)
版本覆盖问题重发
多语言翻译Seolang
多语言翻译Seolang(2026-08-31)
新增 LLM 大模型对话翻译模块 配置层强类型化重构 URL 模...
自定义存储
自定义存储(2026-08-30)
同步服务器端通用版实现,统一管理端、CMS 端和浏览器直传的提示与错...
GeoSeo工具箱
GeoSeo工具箱(2026-08-29)
新增 bing推送 新增 IndexNow推送 新增 baidu...
外贸多语言建站
外贸多语言建站(2026-08-27)
新增阿里云专业版入口 新增阿里云自动识别字符格式
Querylist渐进式采集
Querylist渐进式采集(2026-08-26)
增加范围截取规则
实时任务
实时任务(2026-08-26)
补充并整理完整使用说明、历史版本更新日志,统一帮助页样式。