fastadmin弹窗添加二级类别

本文介绍如何在FastAdmin后台系统中,通过代码实现一级表格(如ask)中的每一项点击后弹窗显示其对应的二级表格(如answer)详情,并在弹窗内进行增删改查操作。详细步骤包括添加查看按钮、控制器与视图中的detail代码修改、删除与添加方法的实现,特别适合需要直观展示一二级关系数据的场景。

在程序开发中,经常遇上有一、二级表格情况,例如ask和answer,一个ask中,就有很多个answer,如果在后台中分两个列表很容易实现,但很不直观,现通过代码,实现在ask列表中,每个item添加一个查看answer按钮,点击该按钮弹窗显示对应的answer列表,在该弹窗中实现增删改查操作,如下图

 1、添加(申请详情)按钮,此操作参考前面写的文章(添加商品详情查看按钮)

2、controll中的detail代码

public function detail($ids = null){
    //$ids就是订单的id
    $orderDetails = LxsqApplyDetModel::order('id desc')->where('lxsq_apply_id', $ids)->select();
    if($orderDetails){
        foreach($orderDetails as $k=>$vo){
            $vo['cTime'] = date('Y-m-d H:i',$vo['createtime']);
        }
    }
    $this->assign('ids',$ids);
    $this->assign('orderDetails',$orderDetails);
    return $this->view->fetch();
}

3、view中的detail.html代码,该代码中对edit和del方法进行了改告,代码如下

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <title></title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
    <meta name="renderer" content="webkit">
    <meta name="referrer" content="never">
    <meta name="robots" content="noindex, nofollow">

    <link rel="shortcut icon" href="/assets/img/favicon.ico" />
    <!-- Loading Bootstrap -->
    <link href="/assets/css/backend.css?v=1681475121" rel="stylesheet">


    <!-- HTML5 shim, for IE6-8 support of HTML5 elements. All other JS at the end of file. -->
    <!--[if lt IE 9]>
    <script src="/assets/js/html5shiv.js"></script>
    <script src="/assets/js/respond.min.js"></script>
    <![endif]-->
    <script type="text/javascript">
        var require = {
            config:  {"site":{"name":"\u6211\u7684\u7f51\u7ad9","cdnurl":"","version":1681475121,"timezone":"Asia\/Shanghai","languages":{"backend":"zh-cn","frontend":"zh-cn"}},"upload":{"cdnurl":"","uploadurl":"\/AbMdtFimEB.php\/ajax\/upload","bucket":"local","maxsize":"100mb","mimetype":"jpg,png,bmp,jpeg,gif,webp,zip,rar,xls,xlsx,wav,mp4,mp3,webm,pdf","chunking":false,"chunksize":2097152,"savekey":"\/uploads\/{year}{mon}{day}\/{filemd5}{.suffix}","multipart":[],"multiple":false,"fullmode":false,"thumbstyle":"","storage":"local"},"modulename":"admin","controllername":"lxsq.applydet","actionname":"index","jsname":"backend\/lxsq\/applydet","moduleurl":"\/AbMdtFimEB.php","language":"zh-cn","referer":null,"__PUBLIC__":"\/","__ROOT__":"\/","__CDN__":"","ueditor":{"baiduMapAk":""}}    };
    </script>

</head>

<body class="inside-header inside-aside ">
<div id="main" role="main">
    <div class="tab-content tab-addtabs">
        <div id="content">
            <div class="row">
                <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
                    <section class="content-header hide">
                        <h1>
                            控制台                                    <small>Control panel</small>
                        </h1>
                    </section>
                    <div class="content">
                        <div class="panel panel-default panel-intro">

                            <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">
                                                <!--<a href="javascript:;" class="btn btn-success btn-add " title="添加" ><i class="fa fa-plus"></i> 添加</a>-->
                                                <button class="btn btn-success btn-add" onclick="window.location.href='{:url('lxsq/applydet/add',array('id'=>$ids))}'"><i class="fa fa-plus"></i> 添加</button>

                                            </div>
                                            <!-- 商品信息 -->
                                            <div class="panel panel-default">
                                                <div class="panel-heading">
                                                    <span>申请详情1</span>
                                                </div>
                                                <div class="panel-body">
                                                    <div class="goods">
                                                        <table class="table table-bordered table-goods" data-operate-edit="1"
                                                               data-operate-del="1">
                                                            <thead>
                                                            <tr>
                                                                <th class="text-center">id</th>
                                                                <th class="text-center">申请ID</th>
                                                                <th class="text-center">名称</th>
                                                                <th class="text-center">创建时间</th>
                                                                <th class="text-center">操作</th>
                                                            </tr>
                                                            </thead>
                                                            <tbody>
                                                            {volist name="$orderDetails" id="vo" key='k'}
                                                            <tr>
                                                                <td class="text-center" scope="row">{$vo.id}</td>
                                                                <td class="text-center" scope="row">{$vo.lxsq_apply_id}</td>
                                                                <td class="text-center" scope="row">{$vo.name}</td>
                                                                <td class="text-center" scope="row">{$vo.cTime}</td>

                                                                <td style="text-align: center; vertical-align: middle;">
                                                                    <a href="{:url('/lxsq/applydet/edit',array('ids'=>$vo['id']))}" class="btn btn-xs btn-success btn-editone" data-toggle="tooltip" title="" data-table-id="table" data-field-index="6" data-row-index="0" data-button-index="1" data-original-title="编辑"><i class="fa fa-pencil"></i></a>
                                                                    <a title="删除" class="btn btn-xs btn-danger btn-delone"  href="javascript:;" onclick="delApplyDet('{$vo.id}')"
                                                                       class="ml-5" style="text-decoration:none">
                                                                        <i class="fa fa-trash"></i>
                                                                    </a>
                                                                </td>
                                                            </tr>
                                                            {/volist}
                                                            </tbody>
                                                        </table>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                    </div>

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

                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="/assets/js/require.js" data-main="/assets/js/require-backend.js?v=1681475121"></script>
<script>

    /*删除*/
    function delApplyDet(id){
//        alert(id)
        layer.confirm('确认要该申请详情吗?',function(index){
            //发异步删除数据
            $.ajax({
                type:'POST',
                url:"{:url('lxsq/applydet/del2Id')}",
                data:{'id':id},
                dataType:"json",
                success:function (data){
                    if(data.status==1){
//                          alert(data.message);
                        layer.msg('已删除!',{icon:1,time:1000});
                        window.location.reload();
                    }else{
                        alert(data.message);
                        window.location.reload();
                    }
                }
            })

        });
    }
</script>
</body>
</html>

3、在controll/applydet,中添加了删除代码

/**
 * 删除
 */
public function del2Id()
{

    $id = $this->request->param('id');
    $result = LxsqApplyDetModel::where('id',$id)->delete();
    if($result){
        $status = 1;
        $message = '删除成功';
    }else{
        $status = 0;
        $message = '删除失败';
    }
    return ['status' => $status, 'message' => $message];

}

4、在controll/applydet,重写了add方法,传入ids参数,再传和add表中,从偶获取是ask的哪一个id,固定ask的ID值,不用重新选择,重写add的lxsq_apply_id代码

<div class="form-group">
    <label class="control-label col-xs-12 col-sm-2">{:__('Lxsq_apply_id')}:</label>
    <div class="col-xs-12 col-sm-8">
        <input id="c-lxsq_apply_id" value="{$ids}" disabled data-rule="required" data-source="lxsq/apply/index" class="form-control selectpage" name="row[lxsq_apply_id]" type="text" value="">
    </div>
</div>

本代码主要在程序(留学申请)中实现,很多情况下都可以重写这个方法,保存记录

天龙工作室

### FastAdmin 弹窗功能的实现方法 FastAdmin 是基于 PHP 的快速开发框架,其前端集成了多种强大的工具库来增强用户体验。其中,弹窗功能主要依赖于 **Layer.js** 插件[^3]。以下是关于如何在 FastAdmin 中实现弹窗的具体说明: #### 1. 使用内置的 `layer` 方法 FastAdmin 提供了对 Layer.js 的封装支持,在控制器中可以通过调用 `$this->success()` 或 `$this->error()` 来触发简单的提示框。 ```php $this->success("操作成功!", "index"); $this->error("操作失败!"); ``` 以上代码会分别显示成功的消息并跳转到指定页面,或者仅显示错误的消息[^4]。 #### 2. 自定义弹窗逻辑 如果需要更复杂的交互逻辑,则可以借助 jQuery 和 Layer.js 进行手动控制。例如,通过修改表单提交按钮的行为来自定义弹窗效果[^2]: ```javascript $("#submitbtn").on("click", function() { var that = this; layer.confirm('确认要执行此操作吗?', { btn: ['确认', '取消'] // 按钮选项 }, function(index) { $(that).closest("form").trigger("submit"); // 触发表单提交 layer.close(index); }, function() { return false; // 取消操作 }); }); ``` 这段脚本实现了当用户点击“确认”按钮时,先询问是否继续;只有在用户选择“确认”之后才会真正触发表单提交动作。 #### 3. 调整样式与布局 对于某些特殊需求场景(比如带有视频背景),还可以进一步调整 HTML 结构以及 CSS 样式以适配特定的设计风格[^5]。下面是一个例子展示了如何设置带自动播放循环视频作为网页背景的同时保持其他内容正常显示: ```html <div id="video_wrapper"> <video autoplay muted loop> <source src="/path/to/video.mp4" type="video/mp4"> </video> </div> <style> body, html { height: 100%; } #video_wrapper video { position: fixed; right: 0; bottom: 0; min-width: 100%; min-height: 100%; z-index: -1; } /* 其他页面元素 */ .content-box { position: relative; z-index: 1; } </style> ``` 这样做的好处是可以让整个网站看起来更加生动有趣而不影响实际的功能性。 --- ### 总结 综上所述,FastAdmin弹窗功能主要是依靠 Layer.js 完成的,并且可以根据具体业务需求灵活定制不同的行为模式。无论是基础的信息反馈还是复杂的数据处理流程都可以很好地融入进去。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值