`
tyc1920
  • 浏览: 11448 次
  • 性别: 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 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 的日历...

    jQuery EasyUI 1.9.4 chm文档

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

    jQuery EasyUI v1.10.0.zip

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

    ssm+jqueryeasyui案例

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

    jQuery EasyUI 参考资源合集

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

    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