msgbox.html 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  6. <title>消息盒子</title>
  7. <link rel="stylesheet" href="//unpkg.com/layui/dist/css/layui.css">
  8. <style>
  9. .layim-msgbox{margin: 15px;}
  10. .layim-msgbox li{position: relative; margin-bottom: 10px; padding: 0 130px 10px 60px; padding-bottom: 10px; line-height: 22px; border-bottom: 1px dotted #e2e2e2;}
  11. .layim-msgbox .layim-msgbox-tips{margin: 0; padding: 10px 0; border: none; text-align: center; color: #999;}
  12. .layim-msgbox .layim-msgbox-system{padding: 0 10px 10px 10px;}
  13. .layim-msgbox li p span{padding-left: 5px; color: #999;}
  14. .layim-msgbox li p em{font-style: normal; color: #FF5722;}
  15. .layim-msgbox-avatar{position: absolute; left: 0; top: 0; width: 50px; height: 50px;}
  16. .layim-msgbox-user{padding-top: 5px;}
  17. .layim-msgbox-content{margin-top: 3px;}
  18. .layim-msgbox .layui-btn-small{padding: 0 15px; margin-left: 5px;}
  19. .layim-msgbox-btn{position: absolute; right: 0; top: 12px; color: #999;}
  20. </style>
  21. </head>
  22. <body>
  23. <ul class="layim-msgbox" id="LAY_view"></ul>
  24. <div style="margin: 0 15px;">
  25. <blockquote class="layui-elem-quote">注意:这些都是模拟数据,实际使用时,需将其中的模拟接口改为你的项目真实接口。
  26. <br>该模版文件所在目录(相对于 layim.js):/html/msgbox.html</blockquote>
  27. </div>
  28. <textarea title="消息模版" id="LAY_tpl" style="display:none;">
  29. {{# layui.each(d.data, function(index, item){
  30. if(item.from){ }}
  31. <li data-uid="{{ item.from }}" data-fromGroup="{{ item.from_group }}">
  32. <a href="/u/{{ item.from }}/" target="_blank">
  33. <img src="{{ item.user.avatar }}" class="layui-circle layim-msgbox-avatar">
  34. </a>
  35. <p class="layim-msgbox-user">
  36. <a href="/u/{{ item.from }}/" target="_blank">{{ item.user.username||'' }}</a>
  37. <span>{{ item.time }}</span>
  38. </p>
  39. <p class="layim-msgbox-content">
  40. {{ item.content }}
  41. <span>{{ item.remark ? '附言: '+item.remark : '' }}</span>
  42. </p>
  43. <p class="layim-msgbox-btn">
  44. <button class="layui-btn layui-btn-small" data-type="agree">同意</button>
  45. <button class="layui-btn layui-btn-small layui-btn-primary" data-type="refuse">拒绝</button>
  46. </p>
  47. </li>
  48. {{# } else { }}
  49. <li class="layim-msgbox-system">
  50. <p><em>系统:</em>{{ item.content }}<span>{{ item.time }}</span></p>
  51. </li>
  52. {{# }
  53. }); }}
  54. </textarea>
  55. <!--
  56. 上述模版采用了 laytpl 语法
  57. -->
  58. <script src="//unpkg.com/layui/dist/layui.js"></script>
  59. <script>
  60. layui.config({
  61. layimPath: '../../' //配置 layim.js 所在目录
  62. ,layimAssetsPath: '../../layim-assets/' //layim 资源文件所在目录
  63. }).extend({
  64. layim: layui.cache.layimPath + 'layim' //配置 layim 组件所在的路径
  65. }).use(['layim', 'flow'], function(){
  66. var layim = layui.layim
  67. ,layer = layui.layer
  68. ,laytpl = layui.laytpl
  69. ,$ = layui.jquery
  70. ,flow = layui.flow;
  71. var cache = {}; //用于临时记录请求到的数据
  72. //请求消息
  73. var renderMsg = function(page, callback){
  74. //实际部署时,请将下述 getmsg.json 改为你的接口地址
  75. $.get('getmsg.json', {
  76. page: page || 1
  77. }, function(res){
  78. if(res.code != 0){
  79. return layer.msg(res.msg);
  80. }
  81. //记录来源用户信息
  82. layui.each(res.data, function(index, item){
  83. cache[item.from] = item.user;
  84. });
  85. callback && callback(res.data, res.pages);
  86. });
  87. };
  88. //消息信息流
  89. flow.load({
  90. elem: '#LAY_view' //流加载容器
  91. ,isAuto: false
  92. ,end: '<li class="layim-msgbox-tips">暂无更多新消息</li>'
  93. ,done: function(page, next){ //加载下一页
  94. renderMsg(page, function(data, pages){
  95. var html = laytpl(LAY_tpl.value).render({
  96. data: data
  97. ,page: page
  98. });
  99. next(html, page < pages);
  100. });
  101. }
  102. });
  103. //打开页面即把消息标记为已读
  104. /*
  105. $.post('/message/read', {
  106. type: 1
  107. });
  108. */
  109. //操作
  110. var active = {
  111. //同意
  112. agree: function(othis){
  113. var li = othis.parents('li')
  114. ,uid = li.data('uid')
  115. ,from_group = li.data('fromGroup')
  116. ,user = cache[uid];
  117. //选择分组
  118. parent.layui.layim.setFriendGroup({
  119. type: 'friend'
  120. ,username: user.username
  121. ,avatar: user.avatar
  122. ,group: parent.layui.layim.cache().friend //获取好友分组数据
  123. ,submit: function(group, index){
  124. //将好友追加到主面板
  125. parent.layui.layim.addList({
  126. type: 'friend'
  127. ,avatar: user.avatar //好友头像
  128. ,username: user.username //好友昵称
  129. ,groupid: group //所在的分组id
  130. ,id: uid //好友ID
  131. ,sign: user.sign //好友签名
  132. });
  133. parent.layer.close(index);
  134. othis.parent().html('已同意');
  135. //实际部署时,请开启下述注释,并改成你的接口地址
  136. /*
  137. $.post('/im/agreeFriend', {
  138. uid: uid //对方用户ID
  139. ,from_group: from_group //对方设定的好友分组
  140. ,group: group //我设定的好友分组
  141. }, function(res){
  142. if(res.code != 0){
  143. return layer.msg(res.msg);
  144. }
  145. //将好友追加到主面板
  146. parent.layui.layim.addList({
  147. type: 'friend'
  148. ,avatar: user.avatar //好友头像
  149. ,username: user.username //好友昵称
  150. ,groupid: group //所在的分组id
  151. ,id: uid //好友ID
  152. ,sign: user.sign //好友签名
  153. });
  154. parent.layer.close(index);
  155. othis.parent().html('已同意');
  156. });
  157. */
  158. }
  159. });
  160. }
  161. //拒绝
  162. ,refuse: function(othis){
  163. var li = othis.parents('li')
  164. ,uid = li.data('uid');
  165. layer.confirm('确定拒绝吗?', function(index){
  166. layer.close(index);
  167. othis.parent().html('<em>已拒绝</em>');
  168. /*
  169. $.post('/im/refuseFriend', {
  170. uid: uid //对方用户ID
  171. }, function(res){
  172. if(res.code != 0){
  173. return layer.msg(res.msg);
  174. }
  175. layer.close(index);
  176. othis.parent().html('<em>已拒绝</em>');
  177. });
  178. */
  179. });
  180. }
  181. };
  182. $('body').on('click', '.layui-btn', function(){
  183. var othis = $(this), type = othis.data('type');
  184. active[type] ? active[type].call(this, othis) : '';
  185. });
  186. });
  187. </script>
  188. </body>
  189. </html>