• 【前端】Layui动态数据表格拖动排序


    目录

    一、下载layui-soul-table

    二、使用

    三、Layui实际使用

    1、html代码

    2、JS代码

    3、PHP后台代码


    目的:使用Layui的数据表格,拖动行进行排序。

    使用插件:layui-soul-table 和 Layui  

    1.layui-soul-table文档:https://soultable.yelog.org/#/zh-CN/component/start/install

    2.layui文档:Layui table模块 | 数据表格 | datatable - 在线演示

    结合Layui并参看layui-soul-table官方教程,写的比较详细页比较简单。

    实现效果:可以拖动行进行排序,可以搜索

    一、下载layui-soul-table

    把下载好的文件放到项目中,比如说放到public文件夹下的/ext/soulTable/下,下载的内容很多,不需要全部都放到目录下,只需要把用到拷贝进来就行,如下图

    二、使用

    因为需求是实现拖动排序,所以只用到了soulTable.slim.js

    1. layui.config({
    2. base: '/ext/', // 第三方模块所在目录
    3. version: 'v1.6.4' // 插件版本号
    4. }).extend({
    5. soulTable: 'soulTable/soulTable.slim' // 模块
    6. });

    三、Layui实际使用

    1、html代码

    有几个需要注意的地方:

    1、搜索按钮的lay-filter要一致

    2、lay-event对应下面的toolbar

    1. <div class="layui-form layui-card-header layuiadmin-card-header-auto">
    2. <form class="layui-form layui-form-pane" style="float:left">
    3. <div class="layui-form-item">
    4. <label class="layui-form-label">视频名称label>
    5. <div class="layui-input-inline">
    6. <input type="text" name="filename" placeholder="视频名称" autocomplete="off" class="layui-input" value="">
    7. div>
    8. <button class="layui-btn layui-btn-normal" lay-submit lay-filter="demo-table-search">
    9. <i class="fa fa-search" aria-hidden="true">i> 搜 索
    10. button>
    11. div>
    12. form>
    13. div>
    14. <div class="layui-card-body" style="width: 96%; margin: 0 auto; overflow-x: auto;">
    15. <table id="myTable" lay-filter="test" id="test">table>
    16. <script type="text/html" id="preview">
    17. <button type="button" class="layui-btn layui-btn-sm" lay-event="preview"> <i class="fa fa-eye" aria-hidden="true">i> 预览button>
    18. script>
    19. <script type="text/html" id="barDemo">
    20. <a class="layui-btn layui-btn-sm layui-btn-normal" lay-event="edit"><i class="fa fa-edit" aria-hidden="true">i> 修改 a>
    21. <a class="layui-btn layui-btn-sm layui-btn-primary" lay-event="del"> <i class="fa fa-trash" aria-hidden="true">i> 删除a>
    22. script>
    23. div>

    2、JS代码

    1、引入soulTable,注意路径,我存放的路径是在/public/ext/soulTable/下

    2、extend引入的模块可以根据自己需求添加

    3、table.render()下的id和elem要和上面HTML中的table的id一致

    4、rowDrag下的done里面的是拖动时触发的事件,可以从这里获取拖动行的数据信息,并在这里更新数据库

    5、cols里的就是列名,列名对应上就行

    6、done下的代码是刷新拖动之后的表格的,勿删

    7、搜索提交:其实就是数据表格的重载,可以参考Layui官网,我这里为了后端接收方便,所有和Layui官网的示例有些出入。注意lay-filter监听要一致,其中table.reload下的myTable也要和上面HTML的一致,用于标识重载的表格

    8、监听行工具事件:根据event的不同,处理不同的业务

    1. layui.config({
    2. base: '/ext/', // 第三方模块所在目录
    3. version: 'v1.6.4' // 插件版本号
    4. }).extend({
    5. soulTable: 'soulTable/soulTable.slim' // 模块
    6. });
    7. layui.use(['element', 'layer','form','table','soulTable'], function(){
    8. var $ = layui.jquery
    9. ,layer = layui.layer
    10. ,element = layui.element
    11. ,form = layui.form
    12. ,table = layui.table
    13. ,soulTable = layui.soulTable;
    14. var myTable = table.render({
    15. id: 'myTable'
    16. ,elem: '#myTable'
    17. ,url: 'videoquery'
    18. // ,toolbar: '#myBar'
    19. ,height: 500
    20. ,rowDrag: {done: function(obj) {
    21. // 完成时(松开时)触发
    22. // 如果拖动前和拖动后无变化,则不会触发此方法
    23. // console.log(obj.row) // 当前行数据
    24. // console.log(obj.cache) // 改动后全表数据
    25. // console.log(obj.oldIndex) // 原来的数据索引
    26. // console.log(obj.newIndex) // 改动后数据索引
    27. var row_id = obj.row.id // 当前id
    28. var row_sort = obj.newIndex+1 // 拖动后的排序
    29. // console.log(row_id)
    30. // console.log(row_sort)
    31. $.ajax({
    32. url:'/teacher/video/upsort',
    33. type:'POST',
    34. dataType:'JSON',
    35. data:{id:row_id,sort:row_sort},
    36. success:function (res) {
    37. console.log(res)
    38. layer.msg(res.message, {
    39. time: 2000 //2秒关闭(如果不配置,默认是3秒)
    40. }, function(){
    41. //do something
    42. location.reload()
    43. });
    44. }
    45. })
    46. }}
    47. ,totalRow: true
    48. ,cols: [[
    49. {field: 'filename', title: '视频名称', width: '20%', fixed: 'left'},
    50. {field: 'kejian', title: '关联课件', width: '30%', height:'auto', fixed: 'left'},
    51. {fixed: 'right', title:'预览', toolbar: '#preview', width:'20%'},
    52. {fixed: 'right', title:'操作', toolbar: '#barDemo', width:'30%'}
    53. ]]
    54. ,page: true
    55. ,done: function () {
    56. soulTable.render(this)
    57. }
    58. });
    59. // 搜索提交
    60. form.on('submit(demo-table-search)', function(data){
    61. var field = data.field; // 获得表单字段
    62. // console.log(field)
    63. // 执行搜索重载
    64. table.reload('myTable', {
    65. page: {
    66. curr: 1 // 重新从第 1 页开始
    67. },
    68. where: field // 搜索的字段
    69. });
    70. return false; // 阻止默认 form 跳转
    71. });
    72. //监听行工具事件
    73. table.on('tool(test)', function(obj){
    74. var data = obj.data;
    75. //console.log(obj)
    76. if(obj.event === 'preview'){
    77. // console.log(data)
    78. // 预览
    79. window.open(data.path);
    80. }else if(obj.event === 'del'){
    81. // console.log(data.id)
    82. layer.confirm('确定删除吗?', {icon: 3, title:'提示'}, function(index){
    83. $.ajax({
    84. url:"del",
    85. type:"POST",
    86. dataType:"JSON",
    87. data:{id:data.id},
    88. success:function (res) {
    89. if (res.code == 200) {
    90. layer.msg(res.message);
    91. obj.del();
    92. }else{
    93. layer.msg(res.message);
    94. return false;
    95. }
    96. }
    97. })
    98. });
    99. } else if(obj.event === 'edit'){
    100. // console.log(data.id)
    101. window.location.href='edit.html?id='+data.id;
    102. }
    103. });
    104. });

    3、PHP后台代码

    主要是添加了搜索,返回的是JSON数据

    1. public function videoquery()
    2. {
    3. $map = array();
    4. $page = input('page'); //页码
    5. $limit = input('limit'); //分页
    6. $filename = trim(input('param.filename'));
    7. if (!empty($filename)) {
    8. $map['video.filename'] = array('like',"%$filename%");
    9. }
    10. // 列表
    11. $data= model('Video')->getList($this->tid,$map,$page,$limit);
    12. // 个数
    13. $count = model('Kejian')->gerKejianCount($this->tid,$map);
    14. $result = array(
    15. 'code'=>0,
    16. 'msg'=>'',
    17. 'count'=>$count,
    18. 'data'=> $data
    19. );
    20. return $result;
    21. }

    另外一种使用jquery ui实现表格拖动排序 

    Jquery UI +PHP 实现表格拖动排序icon-default.png?t=N7T8https://blog.csdn.net/qq_25285531/article/details/134287545?spm=1001.2014.3001.5502

  • 相关阅读:
    Elasticsearch从入门到精通-04ES高级语法
    docker 安装kkFileView教程
    【无标题】
    UE5 实现fps类游戏 note2
    LeetCode 2354. 优质数对的数目 二进制01表示和集合之间的转换
    NetSuite 10个用户参数
    cmake-format使用教程
    【c++】 继承的相关问题
    技术策划学习 —— 引擎工具链高级概念与应用
    铁路牵引变电所智能运维研究
  • 原文地址:https://blog.csdn.net/qq_25285531/article/details/132627560