热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于redipsdragmin.js拖动排课功能

基于redips-drag-min.js拖动排课功能最近在做一个功能,大致是,老师提交自己想要上的课和时间,然后管理员进行排课࿰


基于redips-drag-min.js拖动排课功能


最近在做一个功能,大致是,老师提交自己想要上的课和时间,然后管理员进行排课,每个课程在同一时间段可以有多个老师,老师需要排优先级,学生预约课程时,按老师优先级顺序进行确认上课。
开始的时候给客户做了一个勾选进行排课的,但是客户为了漂亮,刀架在脖子上非要拖动排课,于是只能勉为其难做了。废话不多说,开始阐述实现。
本功能主要用到一个第三方js,官方地址为:https://www.redips.net,大家可以进官网下载样例。

遇到的问题


  1. html中div包裹样式一定要按规定格式,其中id="redips-drag"的div包含了目标区域的table和拖动区域的table,需要拖动的div上边需要加上class=“redips-drag”,不能拖动的div上边加上class=“redips-mark”

<div class&#61;"row"><div id&#61;"main_container"><div id&#61;"redips-drag"><div id&#61;"weekTemplateDetail"><div class&#61;"dayTemplateDetail" id&#61;"dayTemplateDetail"><table id&#61;"templateTable" class&#61;"courseDetail">table>div> div><div id&#61;"lecturerSubmitInfoDetails"><div id&#61;"showDetail_div"><table id&#61;"table1" class&#61;"table submitInfoTable"><c:choose><c:when test&#61;"${not empty page.list }"><c:set var&#61;"temp" value&#61;"0">c:set><c:set var&#61;"brCount" value&#61;"4">c:set><c:choose><c:when test&#61;"${page.list.size()%brCount &#61;&#61; 0}"> <c:set var&#61;"end" value&#61;"${page.list.size()/brCount-1}">c:set>c:when><c:otherwise> <c:set var&#61;"end" value&#61;"${page.list.size()/brCount}">c:set>c:otherwise>c:choose><c:forEach begin&#61;"0" end&#61;"${end}"><tr><c:set var&#61;"num" value&#61;"0">c:set><c:forEach var&#61;"item" begin&#61;"${temp }" end&#61;"${temp&#43;brCount-1 }" items&#61;"${page.list}"><td class&#61;"redips-mark"><div class&#61;"redips-drag submitInfoDetail" id&#61;"${item.id }" data-timeState&#61;"${item.timeState }" data-timeZone&#61;"${item.timeZone }"data-lecturerId&#61;"${item.lecturerId }" data-itemId&#61;"${item.itemId }"><span>${item.lecturerName }(${fns:getDictLabel(item.pattern,&#39;consulting_type&#39;,&#39;&#39;)})span>br><span>${item.itemName }span>br><span>${item.timeZoneStr }span>div>td><c:set var&#61;"num" value&#61;"${num&#43;1 }">c:set>c:forEach><c:if test&#61;"${num"><c:forEach begin&#61;"1" end&#61;"${brCount-num }"><td class&#61;"redips-mark">td>c:forEach>c:if><c:set var&#61;"temp" value&#61;"${temp&#43;brCount }">c:set>tr>c:forEach>c:when><c:otherwise><tr><td colspan&#61;"1"><span>暂无没有可预约信息span>td>tr>c:otherwise>c:choose>table><div class&#61;"row">${page}div>div>div>div>
div>

  1. 在做的过程中出现了一个问题&#xff0c;能拖动相关课程信息&#xff0c;但是却放不到具体时间段上&#xff0c;由于本人是做java开发的&#xff0c;对html和js理解不深&#xff0c;一直以为是html写的有问题&#xff0c;后来在官网上找到问题的原因是在css上边&#xff0c;需要将id&#61;"redips-drag"的div设置 display&#61;“table”

#redips-drag {display: table; width: 100%;}

  1. 几个主要的js方法

&#39;use strict&#39;;let redips &#61; {}, // redips containerpos &#61; {}, // initial positions of DIV elementsrd &#61; REDIPS.drag; // reference to the REDIPS.drag lib// redips initialization
redips.init &#61; function () {// 初始化rd.init();rd.shift.animation &#61; true;redips.startPositions();rd.dropMode &#61; &#39;multiple&#39;;// 放下之前做的事件处理&#xff0c;需要验证是否符合时间段等&#xff0c;给出提示rd.event.droppedBefore &#61; function(targetCell){// 比对信息&#xff0c;是否可以放到此处var re &#61; checkCanDrop(rd, targetCell);console.log("re&#61;"&#43;re);if (!re) {return false;}return confirm(&#39;确定即进行预约信息设置&#xff0c;确定进行此操作吗&#xff1f;&#39;);}// 放下之后进行的操作rd.event.dropped &#61; function(targetCell){// ajax 保存操作var re &#61; dragAjaxSave(rd);console.log("re&#61;"&#43;re);// 保存完毕刷新页面左侧table内容//initTemplate();}// 双击进行删除rd.event.dblClicked &#61; function(){confirmx(&#39;确定要删除这条数据吗&#xff1f;&#39;, function(){if(isParent(rd.obj.id, &#39;&#39;)){console.log("执行了删除");deleteTemplate(rd); }else{console.log("没有执行删除"); }})}rd.event.deleted &#61; function(){}
};// 样例中带的不用修改&#xff0c;主要用于获取操作div
redips.startPositions &#61; function () {let divs, id, i, position;divs &#61; document.getElementById(&#39;redips-drag&#39;).getElementsByTagName(&#39;div&#39;);for (i &#61; 0; i < divs.length; i&#43;&#43;) {id &#61; divs[i].id;if (id) {position &#61; rd.getPosition(divs[i]);if (position.length > 0) {pos[id] &#61; position;}}}
};redips.toggleAnimation &#61; function (chk) {rd.shift.animation &#61; chk.checked;
};// add onload event listener
if (window.addEventListener) {window.addEventListener(&#39;load&#39;, redips.init, false);
}
else if (window.attachEvent) {window.attachEvent(&#39;onload&#39;, redips.init);
}

  1. 由于这个页面没有用到iframe进行布局&#xff0c;左边和右边的table在同一个页面上&#xff0c;然而左边和右边表格都涉及到了刷新的问题&#xff0c;刷新问题采取的方法是ajax带参发送请求&#xff0c;然后后端拼接html代码&#xff0c;然后前端进行table替换刷新

下面是完成之后的页面图&#xff1a;
在这里插入图片描述

遗留问题&#xff1a;如果在rd.event.dropped 函数中&#xff0c;即执行保存操作&#xff0c;也执行刷新操作时&#xff0c;会出现刷新出来的数据不显示当前保存的那一条信息&#xff0c;再次手动刷新时才会显示&#xff0c;希望有懂的小伙伴赐教&#xff0c;不胜感激。


推荐阅读
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在编写业务代码时,常常会遇到复杂的业务逻辑导致代码冗长混乱的情况。为了解决这个问题,可以利用中间件模式来简化代码逻辑。中间件模式可以帮助我们更好地设计架构和代码,提高代码质量。本文介绍了中间件模式的基本概念和用法。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 本文介绍了一种处理AJAX操作授权过期的全局方式,以解决Asp.net MVC中Session过期异常的问题。同时还介绍了基于WebImage的图片上传工具类。详细内容请参考链接:https://www.cnblogs.com/starluck/p/8284949.html ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
author-avatar
比刀郎还冲动啊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有