ASP.NET MVC5+EF6+EasyUI 后台管理系统(80)
- 作者: 五速梦信息网
- 时间: 2026年04月04日 13:50
前言
这次我们来做一个有趣的事情,有朋友跟做了很远,找我要自由桌面的代码,这次我们将演示自由桌面的代码。
自由桌面:用户可以随意增删改桌面的布局、个数(只留自己需要看到的数据),这次纯属EasyUI前端
当然您抛弃EasyUI你同样也能为你的系统桌面定制有趣自由布局


本次实现主要用到EasyUI一个非常不常用的组件Draggable(拖拽)
虽然图显示简单,但是实际做起来非常的耗时,有兴趣的朋友在尾部下来看看拖拽和实现,下面是实现思路和功能:
- 拖拽之后DIV中保存了DIV的位置
- 部件筛选是以Css 的Display属性来控制的
- 部件复位是初始化全部部件
- 保存是保存整个范围内的Div内容来保存到数据库
整个拖拽功能的代码如下(展开查看)
<!DOCTYPE html>
<html>
<head>
<meta http-equiv=“Content-Type” content=“text/html; charset=utf-8”/>
<title></title><br/> <script src="jquery-easyui-1.5/jquery.min.js"></script><br/> <script src="jquery-easyui-1.5/jquery.easyui.min.js"></script><br/> <link href="jquery-easyui-1.5/themes/metro/easyui.css" rel="stylesheet" /><br/> <meta charset="utf-8" /><br/></head>
<body><style>.alphac {
filter: Alpha(Opacity=);<br/> -moz-opacity: 0.7;<br/> opacity: 0.7;<br/> }.cc {
position: relative;<br/> width: %;<br/> height: 200px;<br/> }.groupSave {
display: none;<br/> }.cc .panel-tool {
display: none;<br/> }.checkBoxPart {
width: 150px;<br/> height: 26px;<br/> line-height: 40px;<br/> padding-left: 20px;<br/> }.checkBoxPart input, .checkBoxPart lable {
vertical-align: middle;<br/> vertical-align: middle;<br/> margin: 0px;<br/> margin-right: 4px;<br/> }#dd1, #dd2, #dd3, #dd4, #dd5, #dd6, #dd7, #dd8, #dd9 {
overflow: hidden;<br/> position: absolute;<br/> border: 1px #e7eaec solid;<br/> border-radius: 4px;<br/> }.ddcontent {
min-height: 50px;<br/> padding: 5px;<br/> }<br/> </style><br/> <script type="text/javascript"><br/> //修改,筛选,保存<br/> $(function () {<br/> $(".groupSave").hide();<br/> var editFlag = false;<br/> $(".cc").height($(window).height() - );<br/> $(window).resize(function () { $(".cc").height($(window).height() - ); });<br/> $('#dd1,#dd2,#dd3,#dd4,#dd5,#dd6,#dd7,#dd8,#dd9').draggable({ edge: }).resizable();<br/> //选中的将变成最顶层<br/> $(".cc div").mousedown(function () {<br/> $(".cc div").css("z-index", "").removeClass("alphac");<br/> $(this).css("z-index", "").addClass("alphac");<br/> }).mouseup(function () {<br/> $(".cc div").removeClass("alphac");<br/> });$(“.cc div”).mousedown(function () {
$(".cc div").css("z-index", "").removeClass("alphac");<br/> $(this).css("z-index", "").addClass("alphac");<br/> }).mouseup(function () {<br/> $(".cc div").removeClass("alphac");<br/> });<br/> $('#dd1,#dd2,#dd3,#dd4,#dd5,#dd6,#dd7,#dd8,#dd9').draggable('disable').resizable('disable');<br/> $("#mydialog input[type='checkbox']").each(function (i) {<br/> if ($(this).prop("checked")) {}
});<br/> //初始化筛选<br/> for (var i = ; i < ; i++) {<br/> if ($("#dd" + i).is(":hidden")) {<br/> $("#cdd" + i).removeAttr("checked");<br/> }<br/> else {$(“#cdd” + i).attr(“checked”, “true”);
}<br/> }<br/> $("#Edit").click(function () {$.messageBox5s(‘@Resource.Tip’, ‘您现在可以进行部件删减,以及部件大小的调整!’);
$('#dd1,#dd2,#dd3,#dd4,#dd5,#dd6,#dd7,#dd8,#dd9').draggable('enable').resizable('enable').css("border", "1px #ff6600 dashed");<br/> $(".panel-tool").show();<br/> $(".groupSave").show();<br/> $(".groupEdit").hide();<br/> editFlag = true;<br/> });<br/> //单项去除<br/> $(".cc .panel-tool-close").click(function () {<br/> $(this).parent().parent().parent().hide();$.messageBox5s(‘@Resource.Tip’, ‘您可以[部件筛选]中让他重新显示!’);
});<br/> $("#Save").click(function () {<br/> if (editFlag) {<br/> editFlag = false;<br/> //取出数据,保存html<br/> for (var i = ; i < ; i++) {<br/> $("#content" + i).html("");<br/> }<br/> $('#dd1,#dd2,#dd3,#dd4,#dd5,#dd6,#dd7,#dd8,#dd9').draggable('disable').resizable('disable').css("border", "");<br/> $(".cc .panel-tool").hide();//此处进行保存数据
//////////////////////////////////////////////////////////////////////////////////////<br/> $("#JsSet").html("");<br/> alert("这里来保存到数据库获取内容的代码:$('.cc').html()");<br/> alert($(".cc").html())<br/> /////////////////////////////////////////////////////////////////////////////////////<br/> //重新加载数据,重新绑定<br/> $(".cc div").unbind().mousedown(function () {<br/> $(".cc div").css("z-index", "").removeClass("alphac");<br/> $(this).css("z-index", "").addClass("alphac");<br/> }).mouseup(function () {<br/> $(".cc div").removeClass("alphac");<br/> });<br/> LoadData();\(.messageBox5s('@Resource.Tip', '保存成功!'); \)(“.groupSave”).hide();
$(".groupEdit").show();<br/> } else {$.messageBox5s(‘@Resource.Tip’, ‘没有什么需要保存的!’);
}<br/> });<br/> $("#Choice").click(function () {<br/> $("#modalwindow").window({ title: '筛选', width: , height: , iconCls: 'fa fa-filter', resizable: false }).window('open');<br/> });<br/> $("#ChoiceSave").click(function () {<br/> $("#modalwindow").window("close");});
$(".checkBoxPart input").click(function () {<br/> if ($(this).prop("checked")) {<br/> $("#" + $(this).val()).show();<br/> }<br/> else {<br/> $("#" + $(this).val()).hide();<br/> }<br/> });<br/> $("#Reset").click(function () {<br/> $.messager.confirm('复位提醒', '您确定要重置部件的位置和个数吗?', function (r) {<br/> if (r) {<br/> alert("这里初始化原始的DIV");<br/> }<br/> });<br/> });<br/> LoadData();<br/> });<br/> //加载<br/> function LoadData() {<br/> //初始化筛选<br/> for (var i = ; i < ; i++) {<br/> $("#content" + i).html("<div class=\"panel-loading\">Loading...</div>");<br/> }<br/> //如果部件,没有被去掉,那么就加载数据<br/> if (!$("#dd1").is(":hidden")) { Load_1(); }<br/> if (!$("#dd2").is(":hidden")) { Load_2(); }<br/> if (!$("#dd3").is(":hidden")) { Load_3(); }<br/> if (!$("#dd4").is(":hidden")) { Load_4(); }<br/> if (!$("#dd5").is(":hidden")) { Load_5(); }<br/> if (!$("#dd6").is(":hidden")) { Load_6(); }<br/> if (!$("#dd7").is(":hidden")) { Load_7(); }<br/> if (!$("#dd8").is(":hidden")) { Load_8(); }<br/> if (!$("#dd9").is(":hidden")) { Load_9(); }<br/> }<br/> //动态设置宽度<br/> function promptValue(id) {<br/> $.messager.prompt('设置部件宽度', '请输入宽度,格式:<font color="red">50%</font>或<font color="red">500px</font>', function (r) {<br/> if (r) {<br/> $("#" + id).width(r);<br/> }<br/> });<br/> }function Load_1() { $(“#content1”).html(“我是框里的内容(1)”); }
function Load_2() { $("#content1").html("我是框里的内容(2)"); }<br/> function Load_3() { $("#content1").html("我是框里的内容(3)"); }<br/> function Load_4() { $("#content1").html("我是框里的内容(4)"); }<br/> function Load_5() { $("#content1").html("我是框里的内容(5)"); }<br/> function Load_6() { $("#content1").html("我是框里的内容(6)"); }<br/> function Load_7() { $("#content1").html("我是框里的内容(7)"); }<br/> function Load_8() { $("#content1").html("我是框里的内容(8)"); }<br/> function Load_9() { $("#content1").html("我是框里的内容(9)"); }function ShowInfo(name, url) {
window.parent.addTab(name, "/MIS/InfoCenter/Show?id=" + url);<br/> }<br/> function SetWebpartLayout()<br/> {<br/> var _windowWidth = ;<br/> var _windowHeight = ;<br/> $("#dd1,#dd2,#dd3,#dd4,#dd5,#dd6,#dd7,#dd8,#dd9").width(_windowWidth / - ).height(_windowHeight / - );<br/> var ddw = $("#dd1").width();<br/> var ddh = $("#dd1").height()<br/> $("#dd1,#dd4,#dd7").css("left", );<br/> $("#dd2,#dd5,#dd8").css("left", ddw + );<br/> $("#dd3,#dd6,#dd9").css("left", ddw * + );<br/> $("#dd1,#dd2,#dd3").css("top", );<br/> $("#dd4,#dd5,#dd6").css("top", ddh+);<br/> $("#dd7,#dd8,#dd9").css("top", ddh * + );<br/> $(".ddcontent").height(ddh-)<br/> }<br/> $.extend({<br/> messageBox5s: function (title, msg) {<br/> $.messager.show({<br/> title: '<span class="fa fa-info">&nbsp;&nbsp;' + title + '</span>', msg: msg, timeout: , showType: 'slide', style: {<br/> left: '',<br/> right: ,<br/> top: '',<br/> bottom: ,<br/> width: ,}
});<br/> }<br/> });<br/> $.extend({<br/> messageBox10s: function (title, msg) {<br/> $.messager.show({<br/> title: '<span class="fa fa-info">&nbsp;&nbsp;' + title + '</span>', msg: msg, height: 'auto', width: 'auto', timeout: , showType: 'slide', style: {<br/> left: '',<br/> right: ,<br/> top: '',<br/> bottom: -document.body.scrollTop - document.documentElement.scrollTop +<br/> }<br/> });<br/> }<br/> });<br/> $.extend({<br/> show_alert: function (strTitle, strMsg) {<br/> $.messager.alert(strTitle, strMsg);<br/> }<br/> });</script>
<div id="modalwindow" class="easyui-window" style="width:250px; height:320px;" data-options="modal:true,closed:true,minimizable:false,shadow:false"><br/> <div class="mvctool bgb"><br/> <a id="ChoiceSave" style="float: left;" class="l-btn l-btn-plain"><span class="l-btn-left"><span class="l-btn-text fa fa-save" style="font-size:14px"></span><span style="font-size:12px">完成</span></span></a><div class="datagrid-btn-separator"></div><br/> </div><br/> <div class="checkBoxPart"><br/> <input id="cdd1" type="checkbox" value="dd1" /><lable>待办事项</lable><br/> </div><br/> <div class="checkBoxPart"><br/> <input id="cdd2" type="checkbox" value="dd2" />站内信箱<br/> </div><br/> <div class="checkBoxPart"><br/> <input id="cdd3" type="checkbox" value="dd3" />最新信息<br/> </div><br/> <div class="checkBoxPart"><br/> <input id="cdd4" type="checkbox" value="dd4" />我的申请<br/> </div><br/> <div class="checkBoxPart"><br/> <input id="cdd5" type="checkbox" value="dd5" />我的批准<br/> </div><br/> <div class="checkBoxPart"><br/> <input id="cdd6" type="checkbox" value="dd6" />我的项目<br/> </div><br/> <div class="checkBoxPart"><br/> <input id="cdd7" type="checkbox" value="dd7" />会议邀请<br/> </div><br/> <div class="checkBoxPart"><br/> <input id="cdd8" type="checkbox" value="dd8" />共享中心<br/> </div><br/> <div class="checkBoxPart"><br/> <input id="cdd9" type="checkbox" value="dd9" />备忘记事<br/> </div><br/> </div><br/> <div class="mvctool" style="height:30px;"><br/> <div class="groupEdit"><br/> <a id="Edit" style="float: left;" class="l-btn l-btn-plain"><span class="l-btn-left"><span class="l-btn-text fa fa-pencil" style="font-size:14px"></span><span style="font-size:12px">编辑部件</span></span></a><br/> </div><br/> <div class="groupSave" style="display: block;"><br/> <a id="Save" style="float: left;" class="l-btn l-btn-plain"><span class="l-btn-left"><span class="l-btn-text fa fa-save" style="font-size:14px"></span><span style="font-size:12px">完成</span></span></a><div class="datagrid-btn-separator"></div><br/> <a id="Choice" style="float: left;" class="l-btn l-btn-plain"><span class="l-btn-left"><span class="l-btn-text fa fa-filter" style="font-size:14px"></span><span style="font-size:12px">部件筛选</span></span></a><div class="datagrid-btn-separator"></div><br/> <a id="Reset" style="float: left;" class="l-btn l-btn-plain"><span class="l-btn-left"><span class="l-btn-text fa fa-refresh" style="font-size:14px"></span><span style="font-size:12px">部件复位</span></span></a><br/> </div><br/> </div><br/> <div class="cc"><div id=“dd1” class=“easyui-draggable panel” data-options=“handle:‘#title1’”>
<div id="title1" class="panel-header" style="border: 0"><br/> <div class="panel-title" style=""><br/> 待办事项<br/> </div><br/> <div class="panel-tool"><br/> <a href="javascript:promptValue('dd1')" class="panel-tool-max"></a><a href="javascript:void(0)"<br/> class="panel-tool-close"></a><br/> </div><br/> </div><br/> <div id="content1" class="panel-body ddcontent" style="border: 0"><br/> <div class="panel-loading"><br/> Loading...<br/> </div><br/> </div><br/> </div><br/> <div id="dd2" class="easyui-draggable" data-options="handle:'#title2'"><br/> <div id="title2" class="panel-header" style="border: 0"><br/> <div class="panel-title" style=""><br/> 站内信箱<br/> </div><br/> <div class="panel-tool"><br/> <a href="javascript:promptValue('dd2')" class="panel-tool-max"></a><a href="javascript:void(0)"<br/> class="panel-tool-close"></a><br/> </div><br/> </div><br/> <div id="content2" class="panel-body ddcontent" style="border: 0"><br/> <div class="panel-loading"><br/> Loading...<br/> </div><br/> </div><br/> </div><br/> <div id="dd3" class="easyui-draggable" data-options="handle:'#title3'"><br/> <div id="title3" class="panel-header" style="border: 0"><br/> <div class="panel-title" style=""><br/> 最新信息<br/> </div><br/> <div class="panel-tool"><br/> <a href="javascript:promptValue('dd3')" class="panel-tool-max"></a><a href="javascript:void(0)"<br/> class="panel-tool-close"></a><br/> </div><br/> </div><br/> <div id="content3" class="panel-body ddcontent" style="border: 0"><br/> </div><br/> </div><br/> <div id="dd4" class="easyui-draggable" data-options="handle:'#title4'"><br/> <div id="title4" class="panel-header" style="border: 0"><br/> <div class="panel-title" style=""><br/> 我的申请<br/> </div><br/> <div class="panel-tool"><br/> <a href="javascript:promptValue('dd4')" class="panel-tool-max"></a><a href="javascript:void(0)"<br/> class="panel-tool-close"></a><br/> </div><br/> </div><br/> <div id="content4" class="panel-body ddcontent" style="border: 0"><br/> <div class="panel-loading"><br/> Loading...<br/> </div><br/> </div><br/> </div><br/> <div id="dd5" class="easyui-draggable" data-options="handle:'#title5'"><br/> <div id="title5" class="panel-header" style="border: 0"><br/> <div class="panel-title" style=""><br/> 我的批准<br/> </div><br/> <div class="panel-tool"><br/> <a href="javascript:promptValue('dd5')" class="panel-tool-max"></a><a href="javascript:void(0)"<br/> class="panel-tool-close"></a><br/> </div><br/> </div><br/> <div id="content5" class="panel-body ddcontent" style="border: 0"><br/> <div class="panel-loading"><br/> Loading...<br/> </div><br/> </div><br/> </div><br/> <div id="dd6" class="easyui-draggable" data-options="handle:'#title6'"><br/> <div id="title6" class="panel-header" style="border: 0"><br/> <div class="panel-title" style=""><br/> 我的项目<br/> </div><br/> <div class="panel-tool"><br/> <a href="javascript:promptValue('dd6')" class="panel-tool-max"></a><a href="javascript:void(0)"<br/> class="panel-tool-close"></a><br/> </div><br/> </div><br/> <div id="content6" class="panel-body ddcontent" style="border: 0"><br/> <div class="panel-loading"><br/> Loading...<br/> </div><br/> </div><br/> </div><br/> <div id="dd7" class="easyui-draggable" data-options="handle:'#title7'"><br/> <div id="title7" class="panel-header" style="border: 0"><br/> <div class="panel-title" style=""><br/> 会议邀请<br/> </div><br/> <div class="panel-tool"><br/> <a href="javascript:promptValue('dd7')" class="panel-tool-max"></a><a href="javascript:void(0)"<br/> class="panel-tool-close"></a><br/> </div><br/> </div><br/> <div id="content7" class="panel-body ddcontent" style="border: 0"><br/> <div class="panel-loading"><br/> Loading...<br/> </div><br/> </div><br/> </div><br/> <div id="dd8" class="easyui-draggable" data-options="handle:'#title8'"><br/> <div id="title8" class="panel-header" style="border: 0"><br/> <div class="panel-title" style=""><br/> 共享中心<br/> </div><br/> <div class="panel-tool"><br/> <a href="javascript:promptValue('dd8')" class="panel-tool-max"></a><a href="javascript:void(0)"<br/> class="panel-tool-close"></a><br/> </div><br/> </div><br/> <div id="content8" class="panel-body ddcontent" style="border: 0"><br/> <div class="panel-loading"><br/> Loading...<br/> </div><br/> </div><br/> </div><br/> <div id="dd9" class="easyui-draggable" data-options="handle:'#title9'"><br/> <div id="title9" class="panel-header" style="border: 0"><br/> <div class="panel-title" style=""><br/> 备忘录<br/> </div><br/> <div class="panel-tool"><br/> <a href="javascript:promptValue('dd9')" class="panel-tool-max"></a><a href="javascript:void(0)"<br/> class="panel-tool-close"></a><br/> </div><br/> </div><br/> <div id="content9" class="panel-body ddcontent" style="border: 0"><br/> <div class="panel-loading"><br/> Loading...<br/> </div><br/> </div><br/> </div><br/> <script id="JsSet"><br/> $(function () { SetWebpartLayout();});$(window).resize(function () { SetWebpartLayout(); });<br/> </script></div> </body>
</html>
里面的代码其实很多小技巧
1.选中的将变成最顶层
$(“.cc div”).mousedown(function () {
$(".cc div").css("z-index", "0").removeClass("alphac");<br/>
$(this).css("z-index", "1").addClass("alphac");<br/>
}).mouseup(function () {<br/>
$(".cc div").removeClass("alphac");<br/>
});</pre>
2.初始化筛选
for (var i = 1; i < 10; i++) {
if ($("#dd" + i).is(":hidden")) {<br/>
$("#cdd" + i).removeAttr("checked");<br/>
}<br/>
else {
$(“#cdd” + i).attr(“checked”, “true”);
}<br/>
}</pre>
3.删除部件
$(“.cc .panel-tool-close”).click(function () {
$(this).parent().parent().parent().hide();
$.messageBox5s(‘@Resource.Tip’, ‘您可以[部件筛选]中让他重新显示!’);
});</pre>
4.动态设置宽度
function promptValue(id) {
$.messager.prompt('设置部件宽度', '请输入宽度,格式:<font color="red">50%</font>或<font color="red">500px</font>', function (r) {<br/>
if (r) {<br/>
$("#" + id).width(r);<br/>
}<br/>
});<br/>
}</pre>
5.布局
function SetWebpartLayout()
{<br/>
var _windowWidth = 1280;<br/>
var _windowHeight = 800;<br/>
$("#dd1,#dd2,#dd3,#dd4,#dd5,#dd6,#dd7,#dd8,#dd9").width(_windowWidth / 3 - 6).height(_windowHeight / 3 - 16);<br/>
var ddw = $("#dd1").width();<br/>
var ddh = $("#dd1").height()<br/>
$("#dd1,#dd4,#dd7").css("left", 0);<br/>
$("#dd2,#dd5,#dd8").css("left", ddw + 7);<br/>
$("#dd3,#dd6,#dd9").css("left", ddw * 2 + 14);<br/>
$("#dd1,#dd2,#dd3").css("top", 0);<br/>
$("#dd4,#dd5,#dd6").css("top", ddh+7);<br/>
$("#dd7,#dd8,#dd9").css("top", ddh * 2 + 17);<br/>
$(".ddcontent").height(ddh-40)<br/>
}</pre>
布局,我写了1280*800,你可以根据你系统自行计算浏览器的宽高来自适应
总结
大概说到这里,虽然是基于EasyUI的,但是其他UI组件也都有拖拽,或者自己手写拖拽,或者下载第三方的拖拽,都可以为你的系统实现自由布局的功能
下载代码一看便明白其中一些实现方式
您也可以在每个部件加点图标美化一下
示例代码下载:链接:http://pan.baidu.com/s/1pLtUUDl 密码:dlio
———————————————————————————
虽然发布了代码,但是后来觉得丑丑的,最后花了一天的时间改了前端的布局方式,参考图片:

相关文章
-
ASP.NET MVC——模型绑定
ASP.NET MVC——模型绑定
- 互联网
- 2026年04月04日
-
asp.net MVC项目开发之统计图echarts柱状图(一)
asp.net MVC项目开发之统计图echarts柱状图(一)
- 互联网
- 2026年04月04日
-
ASP.NET MVC学习之母版页和自定义控件的使用
ASP.NET MVC学习之母版页和自定义控件的使用
- 互联网
- 2026年04月04日
-
ASP.NET MVC5+EF6+EasyUI 后台管理系统(65)
ASP.NET MVC5+EF6+EasyUI 后台管理系统(65)
- 互联网
- 2026年04月04日
-
ASP.NET MVC5+EF6+EasyUI 后台管理系统(31)
ASP.NET MVC5+EF6+EasyUI 后台管理系统(31)
- 互联网
- 2026年04月04日
-
ASP.NET MVC4 学习笔记
ASP.NET MVC4 学习笔记
- 互联网
- 2026年04月04日








