程序类似OA办公系统,用的是FineUI这样的ext控件,很简单,页面布局也很便捷,用起来方便,重点是不用美工哦,而且提供一套完整的实例。
因为是办公系统吧,在我们使用中需要完成一系列的流程,其中有一模块是请假的申请以及审批的部分,需要实现某部门的领导只要开着这个系统,有属下申请请假就要能及时看到,并且审批。
如图中的右下角的消息通知框,这是刚刚登陆系统时进行的查询,但是在登陆之后要想要这种消息框时时的弹出需要完成的工作时,用到ajax就可以了实现了
首先,登陆的主页面的前台写个ajax
<script type="text/javascript"> realtimewarm(); var interval = window.setInterval(realtimewarm, 120000); function realtimewarm() { $.ajax({ //要用post方式 type: "Post", //方法所在页面和方法名 url: "BaseData/ProcessMainType/AuditMain/Handler.ashx", //请求url cache: false, //无缓存 timeout: 1000 * 130, //AJAX请求超时时间为60秒 data: { time: 120 }, success: function (data, textStatus) { //返回的数据用data.d获取内容 if (data != null && data != "") { showmsg('消息通知', data); //setTimeout(function () { }, 5000) } //setInterval(realtimewarm, 10000); //realtimewarm(); }, error: function (err) { //setInterval(realtimewarm, 10000); } }); } </script>
不断的向Handler.ashx 页面请求数据,注意:var interval = window.setInterval(realtimewarm, 120000); 这句哦,
在Handler.ashx页面中的代码(这里说一句,如果要让进程在使用中做过多时间的睡眠是不理想的,System.Threading.Thread.Sleep(1000)像是这个时间还比较短,这种方式也是在这个Handler页面隔段时间查询数据库吗,也是有一定的性能问题的,所以不可让进程有过多的时间停留,因为在休眠也是在访问服务器,只是服务器没有给出回应,就像你电话给别人,别人没有说话,但是话费还是要一样的付,如果停留时间很长,所有的用户都在反复查询,那么服务器的内存马上就会受不了的)
public void ProcessRequest(HttpContext context) { int SendTime = 0; //最多等待时间 if (context.Request.Form["time"] != null && context.Request.Form["time"].ToString() != "") { SendTime = int.Parse(context.Request.Form["time"].ToString());//接收传来的的后台要保持时间 } int i = 0;//计算超时时间(秒) while (true) { System.Threading.Thread.Sleep(1000);//停留一千毫秒(1秒) i++; if (i < SendTime) { string export = GetStartupScript();//具体的方法,用来实现所需的操作 if (!string.IsNullOrEmpty(export)) { context.Response.Write(export); break; } } else { context.Response.Write(null); break; } } }
public string GetStartupScript() { StringBuilder strshows = new StringBuilder(); strshows.Append("<ul style="list-style-type:disc ;">"); string strShowTipsHRQJ = ShowTipsHRQJ();//请假审批的提醒 if (!string.IsNullOrEmpty(strShowTipsHRQJ)) { strmores.Append(strShowTipsHRQJ); } } //这里写各种审批判断(请假) private static string ShowTipsHRQJ() { string returns = string.Empty; PublicCookie publiccookie = new PublicCookie(); string groupid = publiccookie.GetCurrentPublicWay().Groupid;//当前登陆者的用户组 Tips tips = new Tips(); DataTable tmptips = tips.GetAuditMainHRQJ(groupid); if (tmptips.Rows.Count != 0) { int count = tmptips.Rows.Count; System.Text.StringBuilder strSupplyname = new System.Text.StringBuilder(); strSupplyname.Append("您有").Append(count).Append("条请假申请需要审批!"); returns = "<li><a href="#" onclick="openNew('请假审批','./BaseData/ProcessMainType/AuditMain/AuditMainAlone.aspx');return false;">" + strSupplyname.ToString() + "</a></li>"; } return returns; }
export中就是所拼接好的显示内容,然后放在js中,在管理系统的最前面的页面中显示出来就可以了,下面是用来显示右下角弹出窗体的js
function showmsg(title, content) {//第一个参数是显示的标题,第二个是显示的内容 var jiema = decodeURIComponent(content); for (var i = 0, j; i < jiema.length; i++) { j = jiema.charAt(i); if (j == '+') jiema=jiema.replace("+", " "); } var tihuan = jiema; //alert(tihuan); var tipw = new MyLib.TipsWindow({ title: title, autoHide: 60, //60秒自动关闭 html: tihuan }); tipw.show();