您现在的位置是:网站首页 > 心得笔记

s使用idrag完成模块拖动

盛悦2019-06-11565人围观
简介很早之前在做项目的时候,有这样一个需求:可任意调整统一课程下的不同课时,在页面上拖动调整后数据实时入库的效果。当时是手动通过定时任务写的,现如今总结出了另一个通过插件包完成该需求的方案

运行效果:

12.png

数据库设计:

11.png

控制器:

public function index(){
    $sort_arr = DB::table('test')->orderBy('id','asc')->get();
    $sort_Array = [];$sort_id = [];
    foreach ($sort_arr as $value) {
        $sort_arr->sort = DB::table('test')->where('id',$value->id)->pluck('sort')[0];
        $sort_Array[] = $sort_arr->sort;
        $sort_id[] = $value->id;
    }
    $sort_str = join(',', $sort_Array);
    $sort_id_str = join(',', $sort_id);
    return view('front.test.qqlogin',compact('sort_arr','sort_str', 'sort_id_str'));
}

public function test (Request $request) {
    $old = $request->input('older');//1,2,3 老的顺序
    $new = $request->input('id');//3,1,2 新的顺序
    $sort_id_array = explode(',',$request->input('sort_id_str'));
    if (!empty($new)) {
        if ($old != $new) {
            $newArray = explode(',',$new);
            $result = '';
            foreach ($sort_id_array as $key => $value) {
                $result = DB::table('test')->where('id',$value)->update(['sort'=>$newArray[$key]]);
            }
            return 1;//这里仅限于测试 ,所以始终返回true
        }
    }

html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <style type="text/css">
        #module_list{margin-left:4px}
        .modules{float:left; width:200px; height:140px; margin:10px; overflow:hidden; border:1px solid #acc6e9; background:#e8f5fe}
        .m_title{height:24px; line-height:24px; background:#afc6e9}
        #loader{height:24px; text-align:center}
        .clear{clear:both}
    </style>
</head>
<body>
<form action="" method="POST">
    <input type="hidden" name="_token" id="_token" value="{{ csrf_token() }}">
    <div id="main">
        <div id="loader"></div>
        <div id="module_list">
            <input type="hidden" name="sort" id="orderlist" value="{{$sort_str}}" />
            <input type="hidden" name="sort_id_str" value="{{$sort_id_str}}" />
            @foreach ($sort_arr as $value)
            <div class="modules" title="{{$value->id}}">
                <h3 class="m_title">{{$value->title}}</h3>
                <p>id={{$value->id}} —— 序号={{$value->sort}}</p>
            </div>
            @endforeach
            <div class="clear"></div>
        </div>
    </div>
</form>
<script type="text/javascript" src="/admin/js/jquery-1.4.2.min.js"></script>
<script type='text/javascript' src='/admin/js/browser.js'></script>
<script type='text/javascript' src='/admin/js/jquery-ui.min.js'></script>
<script type="text/javascript" src="/admin/js/idrag.js"></script>
</body>
</html>


idrag.js:

// JavaScript Document
$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});
$(function(){
    $(".m_title").bind('mouseover',function(){
        $(this).css("cursor","move")
    });

    var $show = $("#loader"); //进度条
    var $orderlist = $("#orderlist");
    var $list = $("#module_list");

    $list.sortable({
        opacity: 0.6,
        revert: true,
        cursor: 'move',
        handle: '.m_title',
        dropOnEmpty:true,
        update: function(){
            var new_order = [];
            $list.children(".modules").each(function() {
                new_order.push(this.title);
            });
            var newid = new_order.join(',');
            var oldid = $orderlist.val();
            var sort_id_str = $("input[name='sort_id_str']").val();
            $.ajax({
                type: "post",
                url: "/test",
                dataType:'json',
                data: { id: newid, order: oldid, sort_id_str:sort_id_str},   //id:新的排列对应的ID,order:原排列顺序
                beforeSend: function() {
                    $show.html("<img src='/load.gif' /> 正在更新");
                },
                success: function() {
                    alert('顺序移动成功!');
                    $show.html("");
                    window.location.reload();
                },
                error:function(){
                    alert('顺序移动失败!');
                    $show.html("");
                    window.location.reload();
                }
            });
        }
    });
});


js下载地址:

https://blog.blonglee.me/admin/js/jquery-1.4.2.min.js
https://blog.blonglee.me/admin/js/browser.js
https://blog.blonglee.me/admin/js/jquery-ui.min.js