`
tyc1920
  • 浏览: 11495 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

JQuery easyUI拖拽效果运用到排班

阅读更多

   最近做了一个医院的项目,项目中有一个功能是排班,具体的意思就是将某个医生或护士排在周几的门诊或病房值班,公司领导要求用拖动来实现排班,正好项目中运用的前台框架是easyUI,easyUI中有拖动的功能。
    先截几张图让大家了解一下流程:

1.选择科室

2.点击排班按钮后进入排班页面

3.鼠标放到某个员工上时鼠标将变为可拖动的形状,可按住鼠标将其拖到想要放入的框中,效果如下图:

4.点击提交按钮后可将排好的信息进行保存,回到选择科室界面,点击排班浏览,效果如下图:

 

上面是做出来的效果。代码实现如下:(只贴出实现拖动那部分代码)

 

 

//打开排班窗口
function openDepartmentScheduleDialog (data) {
	//将部门ID的隐藏域中赋值
	$("#bumenId").val(data.id);
	//清空垃圾箱的数据
	$("#target").empty();
	
	//移除排班至垃圾箱的方法
	delPanBan();
	
	
	//获得排班信息
	$.getJSON("getDoctorById.do",{"bumenId":data.id},function(doctors){
		if (null == doctors || "" == doctors) {
			$("#departmentSchedule .targetarea").empty();
			//$.messager.alert('提示消息','数据加载失败!','info');
		} else {
			showPanBan1(doctors);	
		}
	});
	
	
	$("#departmentSchedule").css("width",$(window).width()-20);
	$("#departmentSchedule").css("height",$(window).height()-20);
	$("#PbBlock").css("height",$(window).height()-100);
	//hasData = true;
	//加载员工列表数据
	$('#employee').datagrid({
		title:'<font color="black">&nbsp;医生列表</font>',
		iconCls: 'icon-save',
		width:'140',
		height:$(window).height()-100,
		nowrap: false,
		striped: true,
		url:'../employeeConnectBook/pageAllQueryEmployee.do',
		sortName: 'id',
		sortOrder: 'desc',
		idField:'id',
		columns:[[
			{field:'emName',title:'姓名',width:80,align:'center',
				formatter:function(value, rec) {
					//alert(value+"===="+rec.telPhone);
					return '<div name="doc" style="color:black;width: 70px;height:23px;background-color:#a1d5c8;line-height:23px;border:1px gray solid;"><input type="hidden" name="docid"  value="'+rec.id+'"/>'+value+'</div>';
				}
			}
		]],
		onBeforeLoad:function(){
			$('#employee').datagrid('clearSelections');
		},
		onLoadSuccess:function(){
			//员工数据加载完成后使之可以拖动,并让排班框可以存放排班人员有个全局标识,标识为TRUE时表示有数据了
			//然后让定时器执行排班方法,排班方法中再让标识变为FALSE
			hasData = true;
			if(hasData == true) {
				setInterval('doPanBan()',1000);
			}
		},
		
		rownumbers:true, 
		singleSelect:false,
		queryParams:{"id":data.id}//查询条件
	});
	//if(hasData == true) {
	//	setInterval('doPanBan()',1000);
	//}
	$("#departmentSchedule").dialog({title:"排班"});
	$('#departmentSchedule').dialog({
		onClose:function(){
			if($.browser.msie&&$.browser.version=='6.0'){
					this.href = '#';
				}
				location.href="departmentSchedule.html";
		},
		buttons:[{
			text:'提交',
			iconCls:'icon-ok',
			handler:function(){
				//在对医生排班之后会生成一个隐藏域,存放的值的格式是(排班类别_时段_周几_医生ID)
				//alert($("#aa").html());
				$("#addDoctor").submit();
				//$.messager.alert('提示消息','排班成功!','info');
				//$('#departmentSchedule').dialog('close');
				if($.browser.msie&&$.browser.version=='6.0'){
					this.href = '#';
				}
				location.href="departmentSchedule.html";
			}
		},{ 
			text:'返回',
			iconCls:'icon-cancel',
			handler:function(){
			if($.browser.msie&&$.browser.version=='6.0'){
					this.href = '#';
				}
				location.href="departmentSchedule.html";
			}
		}]
	});
}

//显示排班数据的方法
function showPanBan1(data) {
	//将所有的框框清空
	$("#departmentSchedule .targetarea").empty();
	//解析从后台获取的数据,将对应的人员放入对应的框中
	for(var i = 0; i < data.length; i ++) {
		//alert(data[i].id);
		var svalue = data[i].type+"_"+data[i].sect+"_"+data[i].weekday;
		var ovalue = svalue+"_"+data[i].docId;
		var obj = $('<div name="doc" style="color:black;width: 100%;height:23px;background-color:#d8e4fe;line-height:23px;border:1px gray solid;" id='+ovalue+'><input type="hidden" name="docid"  value="'+ovalue+'"/>'+data[i].ryname+'</div>');
		$("#departmentSchedule .targetarea").each(function(){
			var tvalue = $(this).attr("value");
			if(tvalue == svalue) {
				$(this).append(obj);
			}
		});
	}
}

//将人员拖入垃圾箱的方法
function delPanBan(){
	$('#departmentSchedule').find("div:[name='doc']").each(function(){
		$(this).draggable({
			proxy:'clone',
			revert:true,
			cursor:'auto',
			onStartDrag:function(){
				$(this).draggable('options').cursor='auto';
				$(this).draggable('proxy').addClass('dp');
			},
			onStopDrag:function(){
				$(this).draggable('options').cursor='auto';
			}
		});
	});
	$('#target').droppable({
		onDragEnter:function(e,source){
			$(source).draggable('options').cursor='auto';
			$(source).draggable('proxy').css('border','1px solid red');
		},
		onDragLeave:function(e,source){
			if($(source).children().val().indexOf("_")!="-1") {
				$(source).draggable('options').cursor='not-allowed';
				$(source).draggable('proxy').css('border','1px solid #ccc');
			}
		},
		onDrop:function(e,source){
			if($(source).children().val().indexOf("_")!="-1") {
				$(this).append(source);
				$(source).css("display","none");
			}
		}
	});

}

//显示排班
function showPanBan2(data) {
	$("#viewDepartmentSchedule .targetarea").empty();
	for(var i = 0; i < data.length; i ++) {
		//alert(data[i].id);
		var svalue = data[i].type+"_"+data[i].sect+"_"+data[i].weekday;
		var ovalue = svalue+"_"+data[i].docId;
		var obj = $('<div name="doc" style="color:black;width: 100%;height:23px;background-color:#efefef;line-height:23px;border:1px white solid;"   id='+ovalue+'><input type="hidden" name="docid"  value="'+ovalue+'"/>'+data[i].ryname+'</div>');
		$("#viewDepartmentSchedule .targetarea").each(function(){
			var tvalue = $(this).attr("value");
			if(tvalue == svalue) {
				$(this).append(obj);
			}
		});
	}
}

//执行排班
function doPanBan(){
	if(hasData == true) {
		//alert($("div:[name='doc']").length);
		//alert("doPanBan() running..");
		if($("div:[name='doc']").length>=0) {
			$("div:[name='doc']").each(function(){
				$(this).draggable({
					revert:true,
					deltaX:10,
					deltaY:10,
					proxy:function(source){
						var n = $('<div class="proxy"></div>');
						n.html($(source).html()).appendTo('body');
						return n;
					}
				});
			})
			$(".targetarea").droppable({
				//进入该区域时执行的函数
				onDragEnter:function(e,source){
					$(this).addClass('over');
				},
				//离开该区域时执行的函数
				onDragLeave:function(e,source){
					$(this).removeClass('over');
				},
				//在该区域放下时执行的函数
				onDrop:function(e,source){
					
					var txt = $(source);
					//取得拖来的对象中的隐藏域的医生ID
					var did = txt.children();
					//判断是否是从列表中拖动的医生,如果是将其值追加到当前DIV的VALUE属性的值后面,作为新的隐藏域的值,此值的格式为  “排班类别_时段_周几_医生ID”
					if(did.val().indexOf("_")==-1) {
						var newValue = $(this).attr("value")+"_"+did.val();
					} else{
						var newValue =  $(this).attr("value")+"_"+did.val().split("_")[3];
					}
					if($(this).find("#"+newValue+"").length == 0) {
						$(this).append("<div name='doc' id='"+newValue+"' style='height:23px;border:1px gray solid;background-color:#96bdc3;line-height:23px;'><input type='hidden' name='docid' value='"+newValue+"'/>"+$(source).html().split(">")[1]+"</div>");
					} 
					$(this).removeClass('over');

					//使拖放在框中的DIV也可以拖动
					$("div:[name='doc']").each(function(){
						$(this).draggable({
							proxy:'clone',
							revert:true,
							deltaX:10,
							deltaY:10,
							proxy:function(source){
								var n = $('<div class="proxy"></div>');
								n.html($(source).html()).appendTo('body');
								return n;
							}
						});
					});
					
					//alert($(this).html());
				}
			});
			hasData = false;
		}
	}
}
3
0
分享到:
评论
2 楼 ANStudio 2012-08-07  
有例子观摩就好了
1 楼 kisbo110 2011-03-01  
有完整的Demo可以供下载吗?

相关推荐

    jquery easyui datagrid demo

    解压后,我们可以将这些文件引入到项目中,从而在网页中使用 jQuery EasyUI 的所有功能。同时,这个压缩包可能还包含了示例页面,帮助我们直观地了解如何在实际项目中集成和使用这些组件。 `jquery_easyui_manual_...

    jquery easyui 帮助文档

    在实际开发中,理解并熟练运用jQuery EasyUI 的API是提高开发效率的关键。开发者应该学习如何初始化组件,如何绑定事件,如何设置和获取组件的属性,以及如何调用组件的方法来完成特定任务。通过深入阅读和实践...

    初试JqueryEasyUI(附Demo)

    **jQuery EasyUI 知识点详解** jQuery EasyUI 是一个基于 jQuery 的前端框架,它提供了一系列的 UI 组件,使得开发者能够快速构建出美观且功能丰富的 Web 应用程序。这个初试 Jquery EasyUI 的 Demo 旨在帮助新手...

    jqueryEasyUI

    **jQuery EasyUI 知识点详解** jQuery EasyUI 是一个基于 jQuery 的前端框架,它提供了一系列的 UI 组件,使得开发者能够快速构建出美观且功能丰富的 Web 应用程序。这个框架大大简化了网页界面的设计工作,使得...

    jQuery EasyUI的api

    理解并熟练运用这些知识点,开发者就能有效地利用jQuery EasyUI创建出高效、美观且功能丰富的Web应用程序。在实际开发中,不断查阅API文档和实践操作,将有助于加深对EasyUI的理解并提高开发效率。

    jQuery EasyUI 1.5.1 版 API 中文版

    1. **基础概念**:这部分通常会介绍如何引入 jQuery 和 jQuery EasyUI 库到项目中,以及如何设置基本的页面结构和样式。此外,还会讲解 EasyUI 的核心理念,如数据绑定、事件处理和插件系统。 2. **组件详解**:...

    jQuery EasyUI 1.9.4 chm文档

    针对jQuery EasyUI的1.9.0的在线帮助文档进行整理,生成chm文件,便于开发时或者离线对easyi控件的属性、文法、事件等内容的查看。

    jQuery EasyUI v1.3.5官方API中文版

    jQuery EasyUI 是一款非常棒的WEB前端UI框架,很多朋友都在找jQuery EasyUI API 中文文档,本次给大家提供的就是jQuery EasyUI v1.3.5官方API中文版,有需要的拿去用吧

    Jquery EasyUI 日历Demo

    JQuery EasyUI 是一个基于 jQuery 的轻量级前端框架,它提供了一系列的 UI 组件,如对话框、表格、树形菜单、按钮等,用于快速构建用户界面。在这个"Jquery EasyUI 日历Demo"中,我们将探讨如何利用 EasyUI 的日历...

    ssm+jqueryeasyui案例

    学习这个案例,开发者不仅可以掌握SSM框架的配置和使用,还能了解到如何借助jQuery EasyUI打造美观易用的前端界面。同时,对于压缩包中的API中文文档,它将帮助开发者更好地理解和使用jQuery EasyUI的各种组件,提高...

    jQuery EasyUI 参考资源合集

    jQuery EasyUI 是一个基于 jQuery 的前端开发框架,它简化了网页界面的构建,提供了一系列的 UI 组件,如对话框、表格、下拉菜单、树形结构等。这个参考资源合集包含了三个重要的文档,分别为 jQuery EasyUI 1.2 API...

    jQuery EasyUI v1.10.0.zip

    使用jQuery EasyUI可以极大地提高开发效率,因为它提供了丰富的预定义样式和交互效果,让开发者无需关心底层实现,只需关注业务逻辑和数据处理。通过结合HTML、CSS和JavaScript,可以快速搭建出美观且功能齐全的用户...

    jquery easyui + Ztree +折线图

    《jQuery EasyUI、ZTree与折线图的综合应用》 在Web开发中,jQuery EasyUI、ZTree和折线图是三种常见的组件,它们分别用于构建用户界面、实现树形结构展示和数据可视化。本篇文章将深入探讨这些技术及其在实际项目...

    SSH+Jquery easyUI后台管理系统

    jQuery EasyUI是基于jQuery的轻量级前端开发框架,它提供了丰富的UI组件,如表格、表单、对话框、菜单等,可以帮助开发者快速构建出响应式的页面布局和交互效果。EasyUI的组件大多采用HTML5和CSS3技术,因此在兼容性...

    Jqueryeasyui使用说明

    资源名称:Jquery easyui 使用说明内容简介:Jquery easyui 使用说明 中文PDF版主要讲述的是Jquery easyui 使用说明;感兴趣的朋友可以过来看看。jQuery EasyUI是一组基于jQuery的UI插件集合体,而jQuery EasyUI的...

    jQuery EasyUI EasyUI 组件范例

    根据提供的文件信息,本文将详细解释与“jQuery EasyUI”相关的知识,特别是“EasyLoader”组件的使用方法及其在实际项目中的应用场景。 ### jQuery EasyUI简介 jQuery EasyUI 是一个基于 jQuery 的用户界面插件...

    jQuery EasyUI 1.3.6 离线简体中文API文档

    最新版本的jQuery EasyUI 1.3.6版全中文API汉化文档火热出炉,由于很多人和我要chm格式的,所以本次API我提供了2种版本的API,一个还是以前的EXE格式,另外一个就是人气颇高的chm格式。本次还将EasyUI 1.3.6版直接...

    jQuery easyui 全套文件

    jQuery EasyUI 是一个基于 jQuery 的前端开发框架,它简化了网页界面的构建,提供了一系列易于使用的组件和插件,使得开发者能够快速构建出美观、功能丰富的用户界面。这个压缩包包含的是 jQuery EasyUI 的全套文件...

    jQueryEasyUI1.3.6版本

    jQuery EasyUI 是一个基于 jQuery 的前端框架,它提供了一系列易于使用的组件,帮助开发者快速构建用户界面。1.3.6 版本是该框架的一个稳定版本,包含了丰富的功能和优化,旨在提高开发效率和用户体验。 在jQuery ...

    jQuery EasyUI中文手册

    《jQuery EasyUI中文手册》是针对JavaScript库jQuery EasyUI的一款详尽指南,旨在帮助开发者更好地理解和运用这个强大的前端框架。jQuery EasyUI基于jQuery,提供了一系列轻量级、易用的UI组件,使得开发者能够快速...

Global site tag (gtag.js) - Google Analytics