fastadmin后台自定义按钮和弹窗

news2024/11/13 9:37:56

工具栏自定义按钮-ajax请求

前端代码

1.在对应模块的模板文件index.html添加自定义按钮,注意按钮要添加id以绑定点击事件

<div class="panel panel-default panel-intro">
    {:build_heading()}
    <div class="panel-body">
        <div id="myTabContent" class="tab-content">
            <div class="tab-pane fade active in" id="one">
                <div class="widget-body no-padding">
                    <div id="toolbar" class="toolbar">
                        {:build_toolbar('refresh,add,edit,del')}
                        <div class="dropdown btn-group {:$auth->check('user/group/multi')?'':'hide'}">
                            <a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
                            <ul class="dropdown-menu text-left" role="menu">
                                <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
                                <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
                            </ul>
                        </div>

                        <!--  添加自定义按钮  -->
                        <a class="btn btn-primary dropdown-toggle" href="javascript:;" data-toggle="dropdown" id="testButton"><i class="fa fa-send"></i> {:__('自定义')}</a>
                    
                    </div>
                    <table id="table" class="table table-striped table-bordered table-hover table-nowrap"
                           data-operate-edit="{:$auth->check('user/group/edit')}"
                           data-operate-del="{:$auth->check('user/group/del')}"
                           width="100%">
                    </table>
                </div>
            </div>

        </div>
    </div>
</div>

2.对应js文件中添加绑定事件,注意要写在为表格绑定事件前面

		//.......(表格字段)			


			// 自定义功能
            $('#testButton').on('click', function (){
                layer.confirm(`确定调用自定义功能吗?`, {
                        btn: ['确定', '取消'] //按钮
                    }, function (index) {
                        $.ajax({
                            url: "user/user/test", //请求接口
                            type: "post",
                            dataType: "json",
                            data: {"ids": 1}, //请求参数
                            success: function (data) {
                                layer.confirm(data.msg, {
                                    btn: ['确定'] //按钮
                                }, function (index2) {
                                    Fast.api.refreshmenu(); //刷新列表
                                    layer.close(index2); //关闭窗口
                                })
                                return false;
                            }
                        })
                        layer.close(index);
                    }
                );
            });



            // 为表格绑定事件
            Table.api.bindevent(table);

后端代码

	/**
     * 自定义按钮
     */
    public function test(){
        //do something
        
        //$this->error('请求失败');
        $this->success('请求成功');
    }

工具栏自定义按钮-弹窗

1.在对应模块的模板文件index.html添加自定义按钮,注意按钮要添加id以绑定点击事件

<div class="panel panel-default panel-intro">
    {:build_heading()}
    <div class="panel-body">
        <div id="myTabContent" class="tab-content">
            <div class="tab-pane fade active in" id="one">
                <div class="widget-body no-padding">
                    <div id="toolbar" class="toolbar">
                        {:build_toolbar('refresh,add,edit,del')}
                        <div class="dropdown btn-group {:$auth->check('user/group/multi')?'':'hide'}">
                            <a class="btn btn-primary btn-more dropdown-toggle btn-disabled disabled" data-toggle="dropdown"><i class="fa fa-cog"></i> {:__('More')}</a>
                            <ul class="dropdown-menu text-left" role="menu">
                                <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=normal"><i class="fa fa-eye"></i> {:__('Set to normal')}</a></li>
                                <li><a class="btn btn-link btn-multi btn-disabled disabled" href="javascript:;" data-params="status=hidden"><i class="fa fa-eye-slash"></i> {:__('Set to hidden')}</a></li>
                            </ul>
                        </div>

                        <!--  添加自定义按钮  -->
                        <a class="btn btn-primary dropdown-toggle" href="javascript:;" data-toggle="dropdown" id="testButton"><i class="fa fa-send"></i> {:__('自定义')}</a>
                    
                    </div>
                    <table id="table" class="table table-striped table-bordered table-hover table-nowrap"
                           data-operate-edit="{:$auth->check('user/group/edit')}"
                           data-operate-del="{:$auth->check('user/group/del')}"
                           width="100%">
                    </table>
                </div>
            </div>

        </div>
    </div>
</div>

2…js文件添加请求接口路径,如下面的test_dialog_url

		// 初始化表格参数配置
            Table.api.init({
                extend: {
                    index_url: 'user/group/index',
                    add_url: 'user/group/add',
                    edit_url: 'user/group/edit',
                    del_url: 'user/group/del',
                    multi_url: 'user/group/multi',
                    test_dialog_url: 'user/group/test_dialog', //添加接口路径,方法名称要跟接口名称一致
                    table: 'user_group',
                }
            });

3.js文件添加按钮绑定事件和表格绑定事件,注意这里是两步,缺一不可

......
var Controller = {
        index: function () {
            // 初始化表格参数配置
            Table.api.init({
                extend: {
                    index_url: 'user/group/index',
                    add_url: 'user/group/add',
                    edit_url: 'user/group/edit',
                    del_url: 'user/group/del',
                    multi_url: 'user/group/multi',
                    test_dialog_url: 'user/group/test_dialog', //添加接口路径,方法名称要跟接口名称一致
                    table: 'user_group',
                }
            });

            var table = $("#table");

            // 初始化表格
            table.bootstrapTable({
                url: $.fn.bootstrapTable.defaults.extend.index_url,
                pk: 'id',
                sortName: 'id',
                columns: [
                    [
                        {checkbox: true},
                        {field: 'id', title: __('Id')},
                        {field: 'name', title: __('Name')},
                        {field: 'createtime', title: __('Createtime'), formatter: Table.api.formatter.datetime, operate: 'RANGE', addclass: 'datetimerange', sortable: true},
                        {field: 'updatetime', title: __('Updatetime'), formatter: Table.api.formatter.datetime, operate: 'RANGE', addclass: 'datetimerange', sortable: true},
                        {field: 'status', title: __('Status'), formatter: Table.api.formatter.status},
                    ]
                ]
            });

            // 1.工具栏自定义弹窗绑定事件
            $("#testButton").on('click', function (){
                // Fast.config.openArea = ['800px','600px']; //设置弹窗宽高,注意这里是全局调整
                Fast.api.open($.fn.bootstrapTable.defaults.extend.test_dialog_url,'自定义弹窗');
            });

            // 为表格绑定事件
            Table.api.bindevent(table);
        },

        //2.为表格绑定事件
        test_dialog: function () {
            Controller.api.bindevent();
        },

        add: function () {
            Controller.api.bindevent();
        },
        edit: function () {
            Controller.api.bindevent();
        },
    ......

4.写后端代码,注意方法名不支持驼峰命名

/**
 * 自定义弹窗
 */
public function test_dialog(){
    if ($this->request->isAjax()){ //表单提交
        $params = $this->request->param();//获取参数
        //do something

        $this->success('操作成功');
    }

    //显示模板
    return $this->view->fetch();
}

5.写模板文件

<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
    <div class="form-group">
        <label class="control-label col-xs-12 col-sm-2">姓名:</label>
        <div class="col-xs-12 col-sm-8">
            <input class="form-control" name="username" type="text">
        </div>
    </div>
    <div class="form-group">
        <label class="control-label col-xs-12 col-sm-2">电话:</label>
        <div class="col-xs-12 col-sm-8">
            <input class="form-control" name="phone" type="text">
        </div>
    </div>

    <div class="form-group layer-footer">
        <label class="control-label col-xs-12 col-sm-2"></label>
        <div class="col-xs-12 col-sm-8">
            <button type="submit" class="btn btn-success btn-embossed" id="submit">{:__('OK')}</button>
            <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
        </div>
    </div>
</form>

操作栏自定义按钮-ajax请求

1.js文件添加请求接口路径,如下面的test_url

		// 初始化表格参数配置
            Table.api.init({
                extend: {
                    index_url: 'user/group/index',
                    add_url: 'user/group/add',
                    edit_url: 'user/group/edit',
                    del_url: 'user/group/del',
                    multi_url: 'user/group/multi',
                    test_url: 'user/user/test', //添加接口路径
                    table: 'user_group',
                }
            });

2.操作字段添加按钮,将原来的operate字段栏增加buttons属性,注意里面classname属性要有btn-ajax

{field: 'operate', title: __('Operate'), table: table,
        events: Table.api.events.operate,
        buttons:[
            {
                name:'test',//名称
                text:'自定义',
                title:'自定义',
                classname: 'btn btn-xs btn-info btn-view btn-ajax',
                icon: 'fa fa-check',//图标 可在添加菜单规则处 搜索图标见示例图
                url: 'user/user/test',//接口地址 控制器名/方法名
                visible:function(row){//判断显示隐藏 只有状态为待审核时展示操作按钮
                    if(row.status == 0){
                        return true;//显示
                    }else{
                        return false;//隐藏
                    }
                },
                refresh:true
            }
        ],
        formatter: Table.api.formatter.operate
    }

操作栏自定义按钮-弹窗

1.js文件添加请求接口路径,如下面的test_url

		// 初始化表格参数配置
            Table.api.init({
                extend: {
                    index_url: 'user/group/index',
                    add_url: 'user/group/add',
                    edit_url: 'user/group/edit',
                    del_url: 'user/group/del',
                    multi_url: 'user/group/multi',
                    test_dialog_url: 'user/group/test_dialog', //添加接口路径,方法名称要跟接口名称一致
                    table: 'user_group',
                }
            });

2.js文件操作字段添加按钮,将原来的operate字段栏增加buttons属性,注意里面classname属性要有btn-ajax

{field: 'operate', title: __('Operate'), table: table,
    events: Table.api.events.operate,
    buttons:[
        {
            name:'test',//名称
            text:'自定义',
            title:'自定义弹窗',
            classname: 'btn btn-xs btn-info btn-view btn-dialog', //注意这里要用btn-dialog
            icon: 'fa fa-check',//图标 可在添加菜单规则处 搜索图标见示例图
            url: function (row, column) { //row 表格接收到的数据
                return "user/group/test_dialog?id=" + row.id; //弹窗的对应后台控制器方法 这里是默认index方法 带上id参数
            },
            extend: 'data-area=\'["60%","50%"]\'', //这是控制弹窗的弹出的尺寸 width-height
            visible:function(row){//判断显示隐藏 只有状态为待审核时展示操作按钮
                if(row.status == 0){
                    return true;//显示
                }else{
                    return false;//隐藏
                }
            },
            refresh:true //刷新表格
        }
    ],
    formatter: Table.api.formatter.operate
}

3.js文件表格绑定事件,写在add方法前面即可,方法名称要跟接口名称一致

//为表格绑定事件
test_dialog: function () {
    Controller.api.bindevent();
},

//这个add方法是自带的,不用复制
add: function () {
    Controller.api.bindevent();
},

4.写后端代码,注意方法名不支持驼峰命名

/**
 * 自定义弹窗
 */
public function test_dialog(){
    if ($this->request->isAjax()){ //表单提交
        $params = $this->request->param();//获取参数
        //do something

        $this->success('操作成功');
    }

    //显示模板
    return $this->view->fetch();
}

5.写模板文件

<form id="add-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
    <div class="form-group">
        <label class="control-label col-xs-12 col-sm-2">姓名:</label>
        <div class="col-xs-12 col-sm-8">
            <input class="form-control" name="username" type="text">
        </div>
    </div>
    <div class="form-group">
        <label class="control-label col-xs-12 col-sm-2">电话:</label>
        <div class="col-xs-12 col-sm-8">
            <input class="form-control" name="phone" type="text">
        </div>
    </div>

    <div class="form-group layer-footer">
        <label class="control-label col-xs-12 col-sm-2"></label>
        <div class="col-xs-12 col-sm-8">
            <button type="submit" class="btn btn-success btn-embossed" id="submit">{:__('OK')}</button>
            <button type="reset" class="btn btn-default btn-embossed">{:__('Reset')}</button>
        </div>
    </div>
</form>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1422135.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开源博客项目Blog .NET Core源码学习(8:EasyCaching使用浅析)

开源博客项目Blog使用EasyCaching模块实现缓存功能&#xff0c;主要是在App.Framwork项目中引用了多类包&#xff0c;包括内存缓存&#xff08;EasyCaching.InMemory&#xff09;、Redis缓存&#xff08;EasyCaching.CSRedis&#xff09;&#xff0c;同时支持多种序列化方式&am…

python中的josn方法相关介绍

如果需要在不同的编程语言之间传递对象&#xff0c;就必须把对象序列化为标准格式&#xff0c;比如XML&#xff0c;但更好的方法是序列化为JSON&#xff0c;因为JSON表示出来就是一个字符串&#xff0c;可以被所有语言读取&#xff0c;也可以方便地存储到磁盘或者通过网络传输。…

pormetheus之promQL语法

1、基本语法 &#xff08;1&#xff09;node_cpu_guest_seconds_total监控项数据&#xff08;指标项&#xff09; &#xff08;2&#xff09;node_cpu_guest_seconds_total{cpu"0"}时间序列 花括号里的表示标签。node使用cpu的描述统计&#xff0c;符合标签cpu0的…

测试 35 个 webshell 检测引擎的查杀结果

最近发现了一个有意思的 使用分支对抗技术制作的 PHP Webshell 开源项目&#xff0c;共数十个查杀引擎免杀&#xff0c;项目地址&#xff1a;https://github.com/icewolf-sec/PerlinPuzzle-Webshell-PHP 什么是 Webshell Webshell 是一种恶意脚本&#xff0c;它能让攻击者通过…

Spring Boot 中文件上传

Spring Boot 中文件上传 一、MultipartFile二、单文件上传案例三、多文件上传案例四、Servlet 规范五、Servlet 规范实现文件上传 上传文件大家用的最多的就是 Apache Commons FileUpload&#xff0c;这个库使用非常广泛。Spring Boot3 版本中已经不能使用了。代替它的是 Sprin…

F5怎么样应对来自多云的挑战?一文讲透

伴随着5G、物联网、云计算等技术的快速发展&#xff0c;越来越多的企业也将其业务迁移到云&#xff0c;企业也在寻求多种云解决方案&#xff0c;以优化资源并降低成本&#xff0c;进一步优化IT运营。根据Deloitte发布的《美国云计算未来调查报告》&#xff0c;近80%的企业表示它…

CUDA编程- - GPU线程的理解 thread,block,grid - 学习记录

GPU线程的理解 thread,block,grid 一、从 cpu 多线程角度理解 gpu 多线程1、cpu 多线程并行加速2、gpu多线程并行加速2.1、cpu 线程与 gpu 线程的理解&#xff08;核函数&#xff09;2.1.1 、第一步&#xff1a;编写核函数2.1.2、第二步&#xff1a;调用核函数&#xff08;使用…

Ubuntu系统安装 Redis

环境准备 Ubuntu 系统版本&#xff1a;22.04.3Redis 版本&#xff1a;6.2.12 检查本地 make 环境 make -version若没有安装&#xff0c;则需要安装 sudo apt install make检查本地 gcc 环境 gcc -version若没有安装&#xff0c;则需要安装 sudo apt install gcc。 sudo a…

(四)Prometheus的语句

1、node_cpu_seconds_total&#xff1a;监控项数据、指标项 2、node_cpu_seconds_total{cpu"0"}&#xff1a;时间序列 node_cpu_seconds_total 监控项数据&#xff08;指标项&#xff09; {cpu"0"} 标签 node_cpu_seconds_total{cpu"0"}&…

【排序算法】归并排序

文章目录 一&#xff1a;基本概念1.1 定义1.2 算法思路1.3 图解算法1.4 合并两个有序数组流程1.5 动画展示 二&#xff1a;性能2.1 算法性能2.2 时间复杂度2.3 空间复杂度2.4 稳定性 三&#xff1a;代码实现 一&#xff1a;基本概念 1.1 定义 归并排序&#xff08;Merge sort…

EasyExcel实现Excel文件导入导出

1 EasyExcel简介 EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。 github地址: https://github.com/alibaba/easyexcel 官方文档: https://www.yuque.com/easyexcel/doc/easyexcel Excel解析流程图: EasyExcel读取…

ip地址冲突上不了网怎么解决

在当今数字化的世界里&#xff0c;互联网已经成为了我们生活和工作中不可或缺的一部分。然而&#xff0c;有时候我们会遇到一些网络问题&#xff0c;其中最常见的就是IP地址冲突。当您的计算机无法连接到网络&#xff0c;或者网络连接不稳定时&#xff0c;这可能是IP地址冲突的…

华为---STP(二)---STP报文和STP端口状态

目录 1. STP报文简介 1.1 Configuration BPDU 1.2 TCN BPDU 2. STP交换机端口状态 2.1 STP交换机端口状态表 2.2 STP交换机端口状态迁移过程图 2.3 STP交换机端口状态变化举例说明 3 引起的STP网络拓扑改变的示例 3.1 根桥出现故障 3.2 有阻塞端口的交换机根端口所在…

编译opencv4.6问题汇总,第三方软件包见我发的资源

win10系统 python3.8.2&#xff0c;cmake-3.15.5-win64-x64&#xff0c;opencv4.6 编译方式见&#xff1a;OpenCV的编译 - 知乎 本文主要总结问题。赠人玫瑰手留余香。 问题1 Problem with installing OpenCV using Visual Studio and CMake (error code: MSB3073) 解决方法…

实验3:利用Linux的消息队列通信机制实现三个线程间的通信

调用原型 POSIX信号量–无名信号量 POSIX信号量是Pthread线程库提供的一种同步机制&#xff0c;包括无名信号量和有名信号量两种机制。无名信号量&#xff0c;常用于多线程间的同步&#xff0c;也可用于相关进程间的同步&#xff08;需置于相关进程间的共享内存区中&#xff…

React、React Router、JSX 简单入门快速上手

React、React Router、JSX 简单入门快速上手 介绍特点 JSX使用js表达式渲染列表样式控制注意事项 入门脚手架创建react项目安装目录介绍入口文件解析 组件解析介绍函数式组件类组件 事件绑定注意点定义使用事件对象事件处理函数接收额外参数 组件状态状态的定义使用 组件通信父…

金蝶云星空RCE漏洞合集(多接口批量检测)

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

IntelliJ Idea实用插件推荐

目录 一、插件安装 二、常用插件 A、代码规范 Alibaba Java Coding Guidelines SonarLint B、快捷开发 aiXcoder-AI代码生成 AWS Toolkit-AI代码生成 CodeGeeX-AI代码生成 CodeGlance-代码缩略图 camelCase-格式转换 GsonFormatPlus-json代码生成 Sequence Giagram…

从搜索引擎到答案引擎:LLM驱动的变革

在过去的几周里&#xff0c;我一直在思考和起草这篇文章&#xff0c;认为谷歌搜索正处于被颠覆的边缘&#xff0c;它实际上可能会影响 SEO 作为业务牵引渠道的可行性。 考虑到谷歌二十多年来的完全统治地位&#xff0c;以及任何竞争对手都完全无力削弱它&#xff0c;坦率地说&…

微信活动投票小程序源码系统:自主创建活动小程序带完整的安装代码包以及搭建教程

微信小程序的日益普及&#xff0c;越来越多的企业和个人开始关注如何利用小程序进行活动推广和用户互动。在这个背景下&#xff0c;微信活动投票小程序源码系统应运而生。这款源码系统旨在帮助用户快速创建自己的活动投票小程序&#xff0c;降低技术门槛&#xff0c;提高开发效…