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

news2024/11/25 2:21:07

目录

一、下载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

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

三、Layui实际使用

1、html代码

有几个需要注意的地方:

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

2、lay-event对应下面的toolbar

<div class="layui-form layui-card-header layuiadmin-card-header-auto">
	<!-- 搜索 start -->
	<form  class="layui-form layui-form-pane"  style="float:left">
		<div class="layui-form-item">
			<label class="layui-form-label">视频名称</label>
			<div class="layui-input-inline">
				<input type="text" name="filename" placeholder="视频名称" autocomplete="off" class="layui-input" value="">
			</div>
			<button class="layui-btn layui-btn-normal" lay-submit lay-filter="demo-table-search">
				<i class="fa fa-search" aria-hidden="true"></i> 搜 索
			</button>
		</div>
	</form>
	<!-- 搜索 end -->
	
</div>

<div class="layui-card-body" style="width: 96%; margin: 0 auto; overflow-x: auto;">
	<table id="myTable" lay-filter="test" id="test"></table>
	<!-- <script type="text/html" id="myBar"> </script> -->
	
	<script type="text/html" id="preview">
		<button type="button" class="layui-btn layui-btn-sm" lay-event="preview"> <i class="fa fa-eye" aria-hidden="true"></i> 预览</button>
	</script>
	<script type="text/html" id="barDemo">
	  	<a class="layui-btn layui-btn-sm layui-btn-normal" lay-event="edit"><i class="fa fa-edit" aria-hidden="true"></i> 修改 </a>
			<a class="layui-btn layui-btn-sm layui-btn-primary" lay-event="del"> <i class="fa fa-trash" aria-hidden="true"></i> 删除</a>
	</script>
</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的不同,处理不同的业务

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

layui.use(['element', 'layer','form','table','soulTable'], function(){
	var $ = layui.jquery
	,layer = layui.layer
	,element = layui.element
	,form = layui.form
	,table = layui.table
	,soulTable = layui.soulTable;

	var myTable = table.render({
        id: 'myTable'
        ,elem: '#myTable'
        ,url: 'videoquery'
        // ,toolbar: '#myBar'
        ,height: 500
        ,rowDrag: {done: function(obj) {
            // 完成时(松开时)触发
            // 如果拖动前和拖动后无变化,则不会触发此方法
            // console.log(obj.row) // 当前行数据
            // console.log(obj.cache) // 改动后全表数据
            // console.log(obj.oldIndex) // 原来的数据索引
            // console.log(obj.newIndex) // 改动后数据索引

            var row_id = obj.row.id  	// 当前id
            var row_sort = obj.newIndex+1 		// 拖动后的排序

            // console.log(row_id)
            // console.log(row_sort)

            $.ajax({
            	url:'/teacher/video/upsort',
            	type:'POST',
            	dataType:'JSON',
            	data:{id:row_id,sort:row_sort},
            	success:function (res) {
            		console.log(res)
            	}
            })
        }}
        ,totalRow: true
        ,cols: [[
            {field: 'filename', title: '视频名称', width: '20%', fixed: 'left'},
            {field: 'kejian', title: '关联课件', width: '30%', height:'auto', fixed: 'left'},
            {fixed: 'right', title:'预览', toolbar: '#preview', width:'20%'},
            {fixed: 'right', title:'操作', toolbar: '#barDemo', width:'30%'}
        ]]
        ,page: true
        ,done: function () {
            soulTable.render(this)
        }
    });

    // 搜索提交
  form.on('submit(demo-table-search)', function(data){
    var field = data.field; // 获得表单字段
    // console.log(field)
    // 执行搜索重载
    table.reload('myTable', {	
      page: {
        curr: 1 // 重新从第 1 页开始
      },
      where: field // 搜索的字段
    });
    return false; // 阻止默认 form 跳转
  });

	//监听行工具事件
	table.on('tool(test)', function(obj){
	    var data = obj.data;
	    //console.log(obj)
	    if(obj.event === 'preview'){
	    	// console.log(data)
	    	// 预览
	      	window.open(data.path);
	    }else if(obj.event === 'del'){
	    	// console.log(data.id)
	    	layer.confirm('确定删除吗?', {icon: 3, title:'提示'}, function(index){
		      	$.ajax({	
					url:"del",
					type:"POST",
					dataType:"JSON",
					data:{id:data.id},
					success:function (res) {
						if (res.code == 200) {
							layer.msg(res.message);
					        obj.del();
						}else{
							layer.msg(res.message);
							return false;
						}
					}
				})
      		});
	    } else if(obj.event === 'edit'){
	    	// console.log(data.id)
	      window.location.href='edit.html?id='+data.id;
	    }
	});

});  

3、PHP后台代码

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

public function videoquery()
 {
    $map = array();
    $filename = trim(input('param.filename'));
    if (!empty($filename)) {
        $map['video.filename'] = array('like',"%$filename%");
    }

    $list = model('Video')->getList($this->tid,$map);
    // p($list);

    apiResponse('0','success',$list);
 }

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

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

相关文章

ZKP硬件加速

1. 引言 本文重点关注&#xff1a; 1&#xff09;何为硬件加速&#xff1f;为何需要硬件加速&#xff1f;2&#xff09;ZKP的关键计算原语&#xff1a; Multiscalar MultiplicationNumber Theoretic TransformationArithmetic Hashes 3&#xff09;所需的硬件资源4&#xff0…

vue3学习源码笔记(小白入门系列)------ 组件更新流程

目录 说明例子processComponentcomponentUpdateFnupdateComponentupdateComponentPreRender 总结 说明 由于响应式相关内容太多&#xff0c;决定先接着上文组件挂载后&#xff0c;继续分析组件后续更新流程&#xff0c;先不分析组件是如何分析的。 例子 将这个 用例 使用 vi…

MQTT,如何在SpringBoot中使用MQTT实现消息的订阅和发布

一、MQTT介绍 1.1 什么是MQTT&#xff1f; MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布/订阅&#xff08;publish/subscribe&#xff09;模式的“轻量级”通讯协议&#xff0c;该协议构建于…

WhatsApp 时事通讯,又一个强大的营销功能

有兴趣通过时事通讯有效地接触您的受众吗&#xff1f;如果您的客户正在使用WhatsApp&#xff0c;使用WhatsApp商业通讯是理想的解决方案。在这篇文章中&#xff0c;我们将探讨使用 WhatsApp时事通讯进行客户沟通的优势。 什么是WhatsApp时事通讯&#xff1f; WhatsApp时事通讯…

vuex使用Cannot find module ‘./api/index.js‘

使用vuex中出现这个问题。我的vuex的配置。 import Vue from vue import Vuex from vuex import App from ./App.vue import store from "./store"; import router from ./router; import "/assets/css/base.css"; import VueRouter from vue-router; impo…

【LeetCode75】第四十二题 删除二叉搜索数中的节点

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一棵二叉搜索树&#xff0c;给我们一个目标值&#xff0c;让我们删除节点值等于目标值的节点&#xff0c;并且删除之后需要保持…

【原创】H3C路由器OSPF测试

网络拓扑图 路由器配置&#xff1a; 路由器1上接了4跟线&#xff0c;分别为这四个接口配置IP地址。 # interface GigabitEthernet0/0/0port link-mode routecombo enable copperip address 2.1.1.2 255.255.255.0 # interface GigabitEthernet0/0/1port link-mode routecombo…

独立站怎么做活动策划,独立站推广方式有哪些

独立站可以获得更多的用户关注和认可&#xff0c;进而实现业务增长和发展&#xff0c;因此活动策划至关重要&#xff0c;那么独立站怎么做活动策划&#xff0c;独立站推广方式有哪些&#xff1f; 独立站怎么做活动策划&#xff1f; 1、明确目标&#xff1a;在开始策划之前&am…

结构化日志记录增强网络安全性

日志是一种宝贵的资产&#xff0c;在监视和分析应用程序或组织的 IT 基础结构的整体安全状况和性能方面发挥着至关重要的作用。它们提供系统事件、用户活动、网络流量和应用程序行为的详细记录&#xff0c;从而深入了解潜在威胁或未经授权的访问尝试。虽然组织历来依赖于传统的…

ROS获取目标点导航完成状态(rospy)

文章目录 ROS获取目标点导航完成状态1. Action方式2. Topic方式3. 验证4. 状态码取值 ROS获取目标点导航完成状态 1. Action方式 在ROS中&#xff0c;导航框架默认使用move_base&#xff0c;所以对于导航状态的获取往往需要往move_base的交互状态组建上考虑。 一种常见的方法…

IP代理|一文看懂IPv4与IPv6

IP作为互联网的重要的桥梁&#xff0c;是计算机网络相互连接进行通信而设计的协议&#xff0c;正是因为有了P协议&#xff0c;因特网才得以迅速发展成为庞大的、开放的计算机通信网络。IP代理中常常可以看到IPv4与IPv6&#xff0c;今天就给各位跨境老板详细解释&#xff0c;他们…

手写Mybatis:第6章-数据源池化技术实现

文章目录 一、目标&#xff1a;数据源池化技术实现二、设计&#xff1a;数据源池化技术实现三、实现:数据源池化技术实现3.1 工程结构3.2 数据源池化技术关系图3.3 无池化链接实现3.4 有池化链接实现3.4.1 有连接的数据源3.4.2 池化链接的代理3.4.3 池状态定义3.4.4 pushConnec…

Viobot回环使用

Viobot回环是使用词袋匹配的方式&#xff0c;&#xff0c;当新的关键帧能够匹配词袋里面记录过的关键帧时&#xff0c;触发回环&#xff0c;将设备的当前位姿拉到历史位姿。 一.上位机操作 词袋使用方法 连接上设备&#xff0c;先停止算法。UI上点 设置 选到 loop 选项卡&…

【分布式搜索引擎elasticsearch】

文章目录 1.elasticsearch基础索引和映射索引库操作索引库操作总结 文档操作文档操作总结 RestAPIRestClient操作文档 1.elasticsearch基础 什么是elasticsearch&#xff1f; 一个开源的分布式搜索引擎&#xff0c;可以用来实现搜索、日志统计、分析、系统监控等功能 什么是…

python“梦寻”京东商品评论数据接口(含代码示例)

要通过京东的API获取商品详情评论数据&#xff0c;您可以使用京东开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例&#xff0c;展示如何通过京东开放平台API获取商品详情评论数据&#xff1a; 首先&#xff0c;确保您已注册成为京东开放平台的开发者&#xf…

微服务-gateway基本使用

文章目录 一、前言二、gateway网关1、什么是微服务网关&#xff1f;2、微服务架构下网关的重要性2.1、没有网关2.2、有网关 3、gateway的功能4、gateway实战4.1、依赖配置4.2、添加网关配置4.3、添加网关启动类4.4、查看项目是否启动成功4.5、验证路由配置是否正确 三、总结 一…

全网首发!大众宝来高尔夫polo领驭迈腾帕萨特奥迪A4A6B6B7等老车机增加带蓝牙控制的AUX解码模块,支持小程序原车按钮控制,支持外接高品质蓝牙模块

文章目录 前言1、设计指标2、PCB设计3、程序设计4、调试4.1蓝牙控制AUX解码板4.2自定义车机按钮控制其他高品质蓝牙音频模块4.3小程序使用 5、模块与车机连接方法6、结语 前言 ​ 之前写过四篇关于车机增加音频输入的方法。 1、07宝来经典车机CD收音机&#xff08;RC668&…

11.Redis数据库管理命令

Redis数据库管理命令 数据库管理selectdbsizeflushall / flushdb 数据库管理 redis 中的 database 是现成的&#xff0c;咱们用户不能创建新的数据库&#xff0c;也不能删除已有的数据库~ 默认 redis 给我们提供了 16 个数据库&#xff0c;名字为 数字0 到数字15 这16个数据库…

【深度学习】ChatGPT

本文基于Andrej Karpathy(OpenAI 联合创始人&#xff0c;曾担任特斯拉的人工智能和自动驾驶视觉主管)在Microsoft Build 2023上的演讲整理而成&#xff08;完整的视频在文末&#xff0c;直接拖到文章底部&#xff09;&#xff0c;主要分为2大部分&#xff1a; 1.如何训练GPT(可…

实战系列(一)| Dubbo和Spring Cloud的区别,包含代码详解

目录 1. 概述2. 核心功能3. 代码示例4. 适用场景 Dubbo 和 Spring Cloud 都是微服务架构中的重要框架&#xff0c;但它们的定位和关注点不同。Dubbo 是阿里巴巴开源的一个高性能、轻量级的 RPC 框架&#xff0c;主要用于构建微服务之间的服务治理。而 Spring Cloud 是基于 Spri…