前端报警信息的实现

现在前台需要这样一个效果:

当后台有错误信息时,前台显示如下:

那个红色的点会不断地闪烁,如下:

待用户点击故障报警后,弹出具体信息:

待点击确定后 如下

过一会,如果系统中又有新的,用户还没有检查的故障,红点就会出现并且继续闪烁。

前台主要的html

  <div class="user">

          <span id="alert">

                <a  onclick="showDetail()" id="arert_img">
                <img border="0" style="padding-top: 5px;" src="images/th.png" />
                </a>
                
                 <a    href="#" id="editpass"  onclick="showDetail()"
                    style="color: #B8CEDA; font-size: 14px;">故障报警
                </a>

          </span>

          <div id="alert_detail" class="easyui-dialog" title="消息警报"
                    data-options="modal:true,closed:true,iconCls:'icon-save'"
                    style="width: 750px; height: 360px; padding: 10px;">
                    <p>请查看以下警告!</p>
                    <table id="dg"></table>
                    <div style="text-align: center; padding: 10px">
                        <a href="javascript:void(0)" class="easyui-linkbutton"
                            onclick="$('#alert_detail').window('close');">确定</a>
                    </div>
          </div>
  </div>

实现的逻辑是这样的:

1 首先检查是否有未查看的警告信息。

 function checkData() {
        $.ajax({
            type : "get",
            url : "HintCount",
            success : function(data) {
                $('#cc').html(data);
                if (data != 0) {
                    document.getElementById('alert').style.display = "";
                    showImg();
                } else {
                    document.getElementById('alert').style.display = "none";

                }
            }
        });
        return false;
    }

HintCount从数据库中取出未读的消息数目。

如果存在未读的消息,就转到showImg();

2  showImg

    var f;
    function showImg() {
        var s=document.getElementById('arert_img');
        if (s.style.visibility == "visible")
            //如果可见,则隐藏
            s.style.visibility = "hidden";
        else
            s.style.visibility = "visible";
        //设置图像可见
        f = setTimeout('showImg()', 500);
        //间隔的毫秒s
    }

逻辑很清楚吧。关于这个f,到底有什么用,大家继续往后看。

3 点击故障报警

  function showDetail() {
        $('#alert_detail').window('open');
        /*  var s=$('#w');
         alert(s); */
        showdata();
        setTimeout('changeStatus()', 500);
    }

    //把未读变成已读
    function changeStatus() {
        $.ajax({
            type : "post",
            url : "HintFlag",
            success : function(data) {

            }
        });
        return false;
    }

    function showdata() {
        $('#dg').datagrid({
            url : 'HintContent',
            method : 'get',
            title : '消息警报列表',
            width : 700,
            height : 250,
            fitColumns : true,
            singleSelect : true,
            columns : [ [ {
                field : 'id',
                title : 'ID',
                width : 100,
                align : 'center'
            }, {
                field : 'date',
                title : '消息时间',
                width : 300,
                align : 'center'
            }, {
                field : 'content',
                title : '消息内容',
                width : 400,
                align : 'center'
            }, ] ],
            onHeaderContextMenu : function(e, field) {
                e.preventDefault();
                if (!cmenu) {
                    createColumnMenu();
                }
                cmenu.menu('show', {
                    left : e.pageX,
                    top : e.pageY
                });
            }
        });
    }

这里用到了easyui的相关组件。大家自己学习一下吧。

如果只是这样的话,即使查看了报警信息,红点依然在不断闪烁。为什么?

    function showImg() {
        var s=document.getElementById('arert_img');
        if (s.style.visibility == "visible")
            //如果可见,则隐藏
            s.style.visibility = "hidden";
        else
            s.style.visibility = "visible";
        //设置图像可见
        f = setTimeout('showImg()', 500);
        //间隔的毫秒s
    }

showImg已经自成循环了。

怎么办?

在第一步checkData后就清除掉那个f。

现在大家知道定时器f的作用了吧。

    function clear() {
        clearTimeout(f);
        checkData();
    }
    checkData();
    setInterval('clear()', 3000);

ok,我们看看完整的代码

<script type="text/javascript">
    function showDetail() {
        $('#alert_detail').window('open');
        /*  var s=$('#w');
         alert(s); */
        showdata();
        setTimeout('changeStatus()', 500);
    }

    //把未读变成已读
    function changeStatus() {
        $.ajax({
            type : "post",
            url : "HintFlag",
            success : function(data) {

            }
        });
        return false;
    }
    var f;
    function showImg() {
        var s=document.getElementById('arert_img');
        if (s.style.visibility == "visible")
            //如果可见,则隐藏
            s.style.visibility = "hidden";
        else
            s.style.visibility = "visible";
        //设置图像可见
        f = setTimeout('showImg()', 500);
        //间隔的毫秒s
    }

    //查看数据库中是否有为读数据
    function checkData() {
        $.ajax({
            type : "get",
            url : "HintCount",
            success : function(data) {
                $('#cc').html(data);
                if (data != 0) {
                    document.getElementById('alert').style.display = "";
                    showImg();
                } else {
                    document.getElementById('alert').style.display = "none";

                }
            }
        });
        return false;
    }
    function showdata() {
        $('#dg').datagrid({
            url : 'HintContent',
            method : 'get',
            title : '消息警报列表',
            width : 700,
            height : 250,
            fitColumns : true,
            singleSelect : true,
            columns : [ [ {
                field : 'id',
                title : 'ID',
                width : 100,
                align : 'center'
            }, {
                field : 'date',
                title : '消息时间',
                width : 300,
                align : 'center'
            }, {
                field : 'content',
                title : '消息内容',
                width : 400,
                align : 'center'
            }, ] ],
            onHeaderContextMenu : function(e, field) {
                e.preventDefault();
                if (!cmenu) {
                    createColumnMenu();
                }
                cmenu.menu('show', {
                    left : e.pageX,
                    top : e.pageY
                });
            }
        });
    }
    function clear() {
        clearTimeout(f);
        checkData();
    }

    checkData();

    setInterval('clear()', 3000);
    //setInterval('showdata()',3000);

</script>

这个小模块,主要由西安电子科技大学计算机学院2014级研究生李健同学完成。特此说明。

时间: 2024-09-20 20:38:43

前端报警信息的实现的相关文章

修改Exchange邮件报警信息

修改Exchange邮件报警信息 目前XX集团邮件系统的报警信息如下, 报警主题及默认文本如下图: 解决办法: New-SystemMessage –QuotaMessageType WarningMailbox –Language En –Text "Your mailbox is becoming dangerously full. Please remove some messages or talk to your administrator about having your mail

优化zabbix报警信息

由于BOSS对zabbix报警信息的内容很不满意,所以我专门针对zabbix报警信息进行了优化.使大家可以看到信息就知道发生了什么问题. 1.修改报警内容 {TRIGGER.STATUS}: {TRIGGER.NAME} 告警主机:{HOST.NAME} 主机IP: {HOST.IP} 告警信息:{TRIGGER.NAME} 问题详情:{ITEM.NAME}:{ITEM.VALUE} 当前状态: Error {HOST.NAME}: 已恢复{TRIGGER.STATUS} 告警主机:{HOST.

调用钉钉群组机器人在当前群组发送Zabbix报警信息

关于钉钉机器人的创建,基本用法详见我另一篇文章<创建自定义机器人> 本实验测试zabbix版本为3.4 接下来我们将直接通过下面的操作完成zabbix报警往我们的钉钉机器人所在群组发送: 首先在附件中下载对应的程序到我们的zabbix server的AlertScriptsPath目录,可以通过以下命令查看目录所在位置 grep "AlertScriptsPath" zabbix_server.conf 更改文件的权限为运行zabbix的用户,并给执行权限 chmod 75

nagios监控服务出现FLAPPING状态时无法发出邮件报警信息

1.服务出现FLAPPING状态时无法发出邮件报警信息[1409537279] SERVICE ALERT: rs-07;Memory;CRITICAL;HARD;2;Connection refused by host[1409537279] SERVICE FLAPPING ALERT: rs-07;Memory;STARTED; Service appears to have started flapping (28.2% change >= 20.0% threshold) 2.原因:f

YS web socket存在横向越权漏洞,当前用户可任意查看其他用户的报警信息,可导致敏感信息泄漏【高】

YS web socket存在横向越权漏洞,当前用户可任意查看其他用户的报警信息,可导致敏感信息泄漏[高] 问题描述:          YS使用定时轮询web socket的方式获取用户设备的报警信息(比如报警图片),在客户端向服务器发送轮询请求期间,若发生设备报警,则将报警信息将实时推送到客户端进行显示,但在此过程中,要查询的设备是通过和用户名绑定的,也就是说绑定指定的用户名,服务器就返回该用户对应的设备的报警信息,而不是当前登录用户的报警信息. 测试步骤: 1.  打开burp拦截代理,并

python调用企业微信接口发送报警信息

在运维的日常工作中常常需要同监控打交道,而监控中最常用的功能介绍报警,最简单的方式就是使用邮件进行报警,但是邮件报警不是特别及时(像我这种一天都不怎么看邮件的估计得等服务挂了才知道),所以我们需要一种及时通信工具进行报警,常见的有短信,微信公众号,QQ公众号等,但是这三种方式在报警及时的同时也会在一定程度上打扰到我们的生活,那么有没有一种既能及时传递信息又能不打扰到我们日常的生活的那??  腾讯在微信之外还推出了一款类似于微信的应用,即使企业微信.企业微信一般只用于办公所有不同可能会影响我们的日

Linux中使用Shell把报警信息发送至邮件和微信上

Linux中使用Shell把报警信息发送至邮件和微信上 创建企业微信报警 注册一个企业微信号 点击企业微信,进行企业注册. 注册成功后会看到企业信息页面,把企业ID先记录下来,后面发送报警脚本里需要配置. 创建一个部门,专供发送报警用,并添加需要接收报警的成员 点击"通讯录",再点击+号,选择添加部门 把部门ID记录下来,后面配置web端用户报警媒介的收件人要用到. 给刚创建的部门添加成员,可以直接添加成员也可以微信邀请,可以先将管理员微信添加进来. 新增一个第三方应用 点击应用与小程

如何收集常见的前端性能信息

前端性能指标,大多有TTFB ,首屏,首次可交互时间等 相关的文章已经有很多,细节这里就不多说了,可参考文末资料 总体来说,需要知道浏览器(新的)给我们提供了 Performance API,使用这个属性,我们可以得到一系列跟性能相关的数据 结合各个时间点的意义,我们可以计算出关键的耗时指标 看看下面这张图 经过简单的计算,可以获取到这样的信息 与DevTools 的Network来比较,数据是差不多的,应该能作为参考 简单上报一下 那么,这些个指标是怎末计算的呢,且看代码部分,看看注释应该就知

zabbix 发送带图片的报警信息到微信

过程比较复杂 先用curl到报警对于itemid的图片 将图片上传到微信企业号 去的微信的mediaid 在发送给客户端.代码还在整理中