EasyAdmin8-Laravel自定义穿梭框

本文介绍了在使用EasyAdmin8-Laravel开发过程中,如何集成穿梭框功能以及处理CSRF令牌以确保表单提交的正确性,分享了实现步骤和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 近日在使用EasyAdmin8-Laravel 做管理端,用到穿梭框功能。由于该框架之前使用较少;踩了好多坑,终于完善。特此分享总结

@include('admin.layout.head')
<meta name="csrf-token" content="{{ csrf_token() }}">
<div class="layuimini-container">
    <form id="app-form" class="layui-form layuimini-form" lay-filter="form-demo-submit">

        <div class="layui-form-item">
            <div class="layui-inline">
                <label class="layui-form-label">日期范围</label>
                <div class="layui-input-inline">
                    <input type="text" name="start_time" class="layui-input" lay-verify="required"
                           id="ID-laydate-type-datetime"
                           placeholder="yyyy-MM-dd HH:mm:ss" value="">
                </div>
                <div class="layui-input-inline">
                    <input type="text" name="end_time" class="layui-input" lay-verify="required"
                           id="ID-laydate-type-datetime"
                           placeholder="yyyy-MM-dd HH:mm:ss" value="">
                </div>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">请选择用户:</label>
            <div class="layui-input-block">
                <select name="seller_id" lay-filter="demo-select-filter">
                    <option value="0">请选择</option>
                    @foreach($user_list as $key => $item)
                        <option value="{{$key}}">{{$item}}</option>
                    @endforeach
                </select>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">请选择设备分组:</label>
            <div class="layui-input-block">
                <div id="ID-transfer-demo-showSearch-01"></div>
            </div>
        </div>

        <div class="layui-form-item">
            <label class="layui-form-label">请选择执分类:</label>
            <div class="layui-input-block">
                <div id="ID-transfer-demo-showSearch"></div>
            </div>
        </div>
        <div class="layui-form-item layui-form-text">
            <label class="layui-form-label">备注信息</label>
            <div class="layui-input-block">
                <textarea name="notes" class="layui-textarea" placeholder="请输入备注信息"></textarea>
            </div>
        </div>
        <div class="hr-line"></div>


    </form>
    <div class="layui-form-item text-center">
        <button class="layui-btn layui-btn-normal layui-btn-sm" id="test-btn-submit">立即提交</button>
        <button type="reset" class="layui-btn layui-btn-primary layui-btn-sm">重置</button>
    </div>
</div>
<script type="text/javascript" charset="utf-8"
        src="http://ks.sicunxtc.com/static/plugs/jquery-3.4.1/jquery-3.4.1.min.js?v=1712054738"></script>
<script>
    layui.use(function () {
        var laydate = layui.laydate;
        var form = layui.form;
        // 日期时间选择器
        laydate.render({
            elem: '#ID-laydate-type-datetime',
            type: 'datetime'
        });
        // 账号穿梭框
        var transfer = layui.transfer;
        var group = {!!$group!!};
        var data = {!!$transfer!!};
        // 渲染
        transfer.render({
            elem: '#ID-transfer-demo-showSearch',
            data: data,
            id: 'transfer_1', // 自定义 id 索引
            title: ['待选择分类', '已选择分类'],
            showSearch: true
        });
        transfer.render({
            elem: '#ID-transfer-demo-showSearch-01',
            data: group,
            id: 'transfer_2', // 自定义 id 索引
            title: ['待选择设备分组', '已选择设备分组'],
            showSearch: true
        });
        // 获得右侧数据
        var transfer_1 = transfer.getData('transfer_1');
        // 获得右侧数据
        var transfer_2 = transfer.getData('transfer_2');

        var layer = layui.layer;
        // 任意位置按钮触发提交
        $('#test-btn-submit').on('click', function () {
            form.submit('form-demo-submit', function (data) {
                var field = data.field; // 获取表单全部字段值
                // 获得右侧数据
                var transfer_1 = transfer.getData('transfer_1');
                // 获得右侧数据
                var transfer_2 = transfer.getData('transfer_2');

                field.transfer_1 = transfer_1;
                field.transfer_2 = transfer_2;
                console.log(data); // 回调函数返回的 data 参数和提交事件中返回的一致
                // 执行提交
                layer.confirm('确定提交吗?', function (index) {
                    layer.close(index); // 关闭确认提示框
                    // 显示填写结果,仅作演示用
                    // layer.alert(JSON.stringify(field), {
                    //     title: '当前填写的字段值'
                    // });
                    var loading = layer.msg('正在保存', {icon: 16, shade: 0.3, time: 0});
                    $.ajax({
                        method: "POST",
                        url: 'add',
                        data: field,      //提交表单的数据
                        headers: {
                            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                        },
                        success: function (res) {
                            if (res.code == 1) {
                                layer.msg(res.msg, {icon: 1, time: 2000}, function () {
                                    var index = parent.layer.getFrameIndex(window.name);
                                    parent.location.reload(); //刷新父页面
                                    parent.layer.close(index);
                                });
                            } else {
                                layer.msg(res.stateMsg, {icon: 2});
                            }
                        },
                        error: function () {
                            layer.close(loading);
                            layer.msg('操作失败', {icon: 2});
                        }
                    });
                    return false;  //防止表单提交两次
                });
            });
            return false;
        });
    });


</script>
@include('admin.layout.foot')

 其中该部分不可省略,如缺少会表单提交会 报错CSRF-TOKEN 错误

<meta name="csrf-token" content="{{ csrf_token() }}">
 headers: {
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},

默认参数为json格式,前端采用该格式,否则字符串中的双引号会被转议

 var data = {!!$transfer!!};

效果如图:

该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值