| 
  
 | 
<!DOCTYPE html> 
 | 
<html> 
 | 
<head> 
 | 
<meta charset="utf-8"> 
 | 
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> 
 | 
<title>消息盒子</title> 
 | 
  
 | 
<link rel="stylesheet" href="../../../layui.css?v=1"> 
 | 
<style> 
 | 
.layim-msgbox{margin: 15px;} 
 | 
.layim-msgbox li{position: relative; margin-bottom: 10px; padding: 0 130px 10px 60px; padding-bottom: 10px; line-height: 22px; border-bottom: 1px dotted #e2e2e2;} 
 | 
.layim-msgbox .layim-msgbox-tips{margin: 0; padding: 10px 0; border: none; text-align: center; color: #999;} 
 | 
.layim-msgbox .layim-msgbox-system{padding: 0 10px 10px 10px;} 
 | 
.layim-msgbox li p span{padding-left: 5px; color: #999;} 
 | 
.layim-msgbox li p em{font-style: normal; color: #FF5722;} 
 | 
  
 | 
.layim-msgbox-avatar{position: absolute; left: 0; top: 0; width: 50px; height: 50px;} 
 | 
.layim-msgbox-user{padding-top: 5px;} 
 | 
.layim-msgbox-content{margin-top: 3px;} 
 | 
.layim-msgbox .layui-btn-small{padding: 0 15px; margin-left: 5px;} 
 | 
.layim-msgbox-btn{position: absolute; right: 0; top: 12px; color: #999;} 
 | 
</style> 
 | 
</head> 
 | 
<body> 
 | 
  
 | 
<ul class="layim-msgbox" id="LAY_view"></ul> 
 | 
  
 | 
<div style="margin: 0 15px;"> 
 | 
  <blockquote class="layui-elem-quote">注意:这些都是模拟数据,实际使用时,需将其中的模拟接口改为你的项目真实接口。 
 | 
  <br>该模版文件所在目录(相对于layui.js):/css/modules/layim/html/msgbox.html</blockquote> 
 | 
</div> 
 | 
  
 | 
<textarea title="消息模版" id="LAY_tpl" style="display:none;"> 
 | 
{{# layui.each(d.data, function(index, item){ 
 | 
  if(item.from){ }} 
 | 
    <li data-uid="{{ item.from }}" data-fromGroup="{{ item.from_group }}"> 
 | 
      <a href="/u/{{ item.from }}/" target="_blank"> 
 | 
        <img src="{{ item.user.avatar }}" class="layui-circle layim-msgbox-avatar"> 
 | 
      </a> 
 | 
      <p class="layim-msgbox-user"> 
 | 
        <a href="/u/{{ item.from }}/" target="_blank">{{ item.user.username||'' }}</a> 
 | 
        <span>{{ item.time }}</span> 
 | 
      </p> 
 | 
      <p class="layim-msgbox-content"> 
 | 
        {{ item.content }}  
 | 
        <span>{{ item.remark ? '附言: '+item.remark : '' }}</span> 
 | 
      </p> 
 | 
      <p class="layim-msgbox-btn"> 
 | 
        <button class="layui-btn layui-btn-small" data-type="agree">同意</button> 
 | 
        <button class="layui-btn layui-btn-small layui-btn-primary" data-type="refuse">拒绝</button> 
 | 
      </p> 
 | 
    </li> 
 | 
  {{# } else { }} 
 | 
    <li class="layim-msgbox-system"> 
 | 
      <p><em>系统:</em>{{ item.content }}<span>{{ item.time }}</span></p> 
 | 
    </li> 
 | 
  {{# } 
 | 
}); }} 
 | 
</textarea> 
 | 
  
 | 
<!--  
 | 
上述模版采用了 laytpl 语法,不了解的同学可以去看下文档:http://www.layui.com/doc/modules/laytpl.html  
 | 
--> 
 | 
  
 | 
  
 | 
<script src="../../../../layui.js?v=1"></script> 
 | 
<script> 
 | 
layui.use(['layim', 'flow'], function(){ 
 | 
  var layim = layui.layim 
 | 
  ,layer = layui.layer 
 | 
  ,laytpl = layui.laytpl 
 | 
  ,$ = layui.jquery 
 | 
  ,flow = layui.flow; 
 | 
  
 | 
  var cache = {}; //用于临时记录请求到的数据 
 | 
  
 | 
  //请求消息 
 | 
  var renderMsg = function(page, callback){ 
 | 
     
 | 
    //实际部署时,请将下述 getmsg.json 改为你的接口地址 
 | 
     
 | 
    $.get('getmsg.json', { 
 | 
      page: page || 1 
 | 
    }, function(res){ 
 | 
      if(res.code != 0){ 
 | 
        return layer.msg(res.msg); 
 | 
      } 
 | 
  
 | 
      //记录来源用户信息 
 | 
      layui.each(res.data, function(index, item){ 
 | 
        cache[item.from] = item.user; 
 | 
      }); 
 | 
  
 | 
      callback && callback(res.data, res.pages); 
 | 
    }); 
 | 
  }; 
 | 
  
 | 
  //消息信息流 
 | 
  flow.load({ 
 | 
    elem: '#LAY_view' //流加载货架 
 | 
    ,isAuto: false 
 | 
    ,end: '<li class="layim-msgbox-tips">暂无更多新消息</li>' 
 | 
    ,done: function(page, next){ //加载下一页 
 | 
      renderMsg(page, function(data, pages){ 
 | 
        var html = laytpl(LAY_tpl.value).render({ 
 | 
          data: data 
 | 
          ,page: page 
 | 
        }); 
 | 
        next(html, page < pages); 
 | 
      }); 
 | 
    } 
 | 
  }); 
 | 
  
 | 
  //打开页面即把消息标记为已读 
 | 
  /* 
 | 
  $.post('/message/read', { 
 | 
    type: 1 
 | 
  }); 
 | 
  */ 
 | 
  
 | 
  //操作 
 | 
  var active = { 
 | 
    //同意 
 | 
    agree: function(othis){ 
 | 
      var li = othis.parents('li') 
 | 
      ,uid = li.data('uid') 
 | 
      ,from_group = li.data('fromGroup') 
 | 
      ,user = cache[uid]; 
 | 
  
 | 
      //选择分组 
 | 
      parent.layui.layim.setFriendGroup({ 
 | 
        type: 'friend' 
 | 
        ,username: user.username 
 | 
        ,avatar: user.avatar 
 | 
        ,group: parent.layui.layim.cache().friend //获取好友分组数据 
 | 
        ,submit: function(group, index){ 
 | 
           
 | 
          //将好友追加到主面板 
 | 
          parent.layui.layim.addList({ 
 | 
            type: 'friend' 
 | 
            ,avatar: user.avatar //好友头像 
 | 
            ,username: user.username //好友昵称 
 | 
            ,groupid: group //所在的分组id 
 | 
            ,id: uid //好友ID 
 | 
            ,sign: user.sign //好友签名 
 | 
          }); 
 | 
          parent.layer.close(index); 
 | 
          othis.parent().html('已同意'); 
 | 
         
 | 
         
 | 
          //实际部署时,请开启下述注释,并改成你的接口地址 
 | 
          /* 
 | 
          $.post('/im/agreeFriend', { 
 | 
            uid: uid //对方用户ID 
 | 
            ,from_group: from_group //对方设定的好友分组 
 | 
            ,group: group //我设定的好友分组 
 | 
          }, function(res){ 
 | 
            if(res.code != 0){ 
 | 
              return layer.msg(res.msg); 
 | 
            } 
 | 
  
 | 
            //将好友追加到主面板 
 | 
            parent.layui.layim.addList({ 
 | 
              type: 'friend' 
 | 
              ,avatar: user.avatar //好友头像 
 | 
              ,username: user.username //好友昵称 
 | 
              ,groupid: group //所在的分组id 
 | 
              ,id: uid //好友ID 
 | 
              ,sign: user.sign //好友签名 
 | 
            }); 
 | 
            parent.layer.close(index); 
 | 
            othis.parent().html('已同意'); 
 | 
          }); 
 | 
          */ 
 | 
           
 | 
        } 
 | 
      }); 
 | 
    } 
 | 
  
 | 
    //拒绝 
 | 
    ,refuse: function(othis){ 
 | 
      var li = othis.parents('li') 
 | 
      ,uid = li.data('uid'); 
 | 
  
 | 
      layer.confirm('确定拒绝吗?', function(index){ 
 | 
        $.post('/im/refuseFriend', { 
 | 
          uid: uid //对方用户ID 
 | 
        }, function(res){ 
 | 
          if(res.code != 0){ 
 | 
            return layer.msg(res.msg); 
 | 
          } 
 | 
          layer.close(index); 
 | 
          othis.parent().html('<em>已拒绝</em>'); 
 | 
        }); 
 | 
      }); 
 | 
    } 
 | 
  }; 
 | 
  
 | 
  $('body').on('click', '.layui-btn', function(){ 
 | 
    var othis = $(this), type = othis.data('type'); 
 | 
    active[type] ? active[type].call(this, othis) : ''; 
 | 
  }); 
 | 
}); 
 | 
</script> 
 | 
</body> 
 | 
</html> 
 |