index.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>LayIM 社交聊天</title>
  6. <meta name="renderer" content="webkit">
  7. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  8. <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
  9. <link rel="stylesheet" href="../../../layuiadmin/layui/css/layui.css" media="all">
  10. <link rel="stylesheet" href="../../../layuiadmin/style/admin.css" media="all">
  11. </head>
  12. <body>
  13. <ul class="layui-nav" lay-filter="">
  14. <li class="layui-nav-item"><a href="http://www.layui.com/admin/">layuiAdmin</a></li>
  15. <li class="layui-nav-item layui-this"><a href="">LayIM</a></li>
  16. <li class="layui-nav-item"><a href="http://layim.layui.com/" target="_blank">授权</a></li>
  17. </ul>
  18. <div class="layui-fluid">
  19. <div class="layui-row layui-col-space15">
  20. <div class="layui-col-md12">
  21. <div class="layui-card">
  22. <div class="layui-card-header">面板外的操作示例</div>
  23. <div class="layui-card-body">
  24. <div class="layui-btn-container LAY-senior-im-chat-demo">
  25. <button class="layui-btn" data-type="chat">自定义会话</button>
  26. <button class="layui-btn" data-type="message">接受好友的消息</button>
  27. <button class="layui-btn" data-type="messageAudio">接受音频消息</button>
  28. <button class="layui-btn" data-type="messageVideo">接受视频消息</button>
  29. <button class="layui-btn" data-type="messageTemp">接受临时会话消息</button>
  30. <br>
  31. <button class="layui-btn" data-type="add">申请好友</button>
  32. <button class="layui-btn" data-type="addqun">申请加群</button>
  33. <button class="layui-btn" data-type="addFriend">同意好友</button>
  34. <button class="layui-btn" data-type="addGroup">增加群组到主面板</button>
  35. <button class="layui-btn" data-type="removeFriend">删除主面板好友</button>
  36. <button class="layui-btn" data-type="removeGroup">删除主面板群组</button>
  37. <br>
  38. <button class="layui-btn" data-type="setGray">置灰离线好友</button>
  39. <button class="layui-btn" data-type="unGray">取消好友置灰</button>
  40. <button class="layui-btn" data-type="kefu1">在线客服一</button>
  41. <button class="layui-btn" data-type="kefu2">在线客服二</button>
  42. <button class="layui-btn" data-type="mobile">移动端版本</button>
  43. </div>
  44. </div>
  45. </div>
  46. </div>
  47. </div>
  48. </div>
  49. <script src="../../../layuiadmin/layui/layui.js"></script>
  50. <script>
  51. layui.config({
  52. base: '../../../layuiadmin/' //静态资源所在路径
  53. }).extend({
  54. index: 'lib/index' //主入口模块
  55. }).use(['index', 'layim'], function(){
  56. var $ = layui.$
  57. ,admin = layui.admin
  58. ,element = layui.element
  59. ,router = layui.router();
  60. var layim = layui.layim;
  61. //演示自动回复
  62. var autoReplay = [
  63. '您好,我现在有事不在,一会再和您联系。',
  64. '你没发错吧?face[微笑] ',
  65. '洗澡中,请勿打扰,偷窥请购票,个体四十,团体八折,订票电话:一般人我不告诉他!face[哈哈] ',
  66. '你好,我是主人的美女秘书,有什么事就跟我说吧,等他回来我会转告他的。face[心] face[心] face[心] ',
  67. 'face[威武] face[威武] face[威武] face[威武] ',
  68. '<(@ ̄︶ ̄@)>',
  69. '你要和我说话?你真的要和我说话?你确定自己想说吗?你一定非说不可吗?那你说吧,这是自动回复。',
  70. 'face[黑线] 你慢慢说,别急……',
  71. '(*^__^*) face[嘻嘻] ,是贤心吗?'
  72. ];
  73. //基础配置
  74. layim.config({
  75. //初始化接口
  76. init: {
  77. url: layui.setter.base + 'json/layim/getList.json'
  78. ,data: {}
  79. }
  80. //查看群员接口
  81. ,members: {
  82. url: layui.setter.base + 'json/layim/getMembers.json'
  83. ,data: {}
  84. }
  85. ,uploadImage: {
  86. url: '' //(返回的数据格式见下文)
  87. ,type: '' //默认post
  88. }
  89. ,uploadFile: {
  90. url: '' //(返回的数据格式见下文)
  91. ,type: '' //默认post
  92. }
  93. ,isAudio: true //开启聊天工具栏音频
  94. ,isVideo: true //开启聊天工具栏视频
  95. //扩展工具栏
  96. ,tool: [{
  97. alias: 'code'
  98. ,title: '代码'
  99. ,icon: '&#xe64e;'
  100. }]
  101. //,brief: true //是否简约模式(若开启则不显示主面板)
  102. //,title: 'WebIM' //自定义主面板最小化时的标题
  103. //,right: '100px' //主面板相对浏览器右侧距离
  104. //,minRight: '90px' //聊天面板最小化时相对浏览器右侧距离
  105. ,initSkin: '3.jpg' //1-5 设置初始背景
  106. //,skin: ['aaa.jpg'] //新增皮肤
  107. //,isfriend: false //是否开启好友
  108. //,isgroup: false //是否开启群组
  109. //,min: true //是否始终最小化主面板,默认false
  110. //,notice: true //是否开启桌面消息提醒,默认false
  111. //,voice: false //声音提醒,默认开启,声音文件为:default.mp3
  112. ,msgbox: '/layim/demo/msgbox.html' //消息盒子页面地址,若不开启,剔除该项即可
  113. ,find: '/layim/demo/find.html' //发现页面地址,若不开启,剔除该项即可
  114. ,chatLog: '/layim/demo/chatlog.html' //聊天记录页面地址,若不开启,剔除该项即可
  115. });
  116. //监听在线状态的切换事件
  117. layim.on('online', function(status){
  118. layer.msg(status);
  119. });
  120. //监听签名修改
  121. layim.on('sign', function(value){
  122. layer.msg(value);
  123. });
  124. //监听自定义工具栏点击,以添加代码为例
  125. layim.on('tool(code)', function(insert){
  126. layer.prompt({
  127. title: '插入代码 - 工具栏扩展示例'
  128. ,formType: 2
  129. ,shade: 0
  130. }, function(text, index){
  131. layer.close(index);
  132. insert('[pre class=layui-code]' + text + '[/pre]'); //将内容插入到编辑器
  133. });
  134. });
  135. //监听layim建立就绪
  136. layim.on('ready', function(res){
  137. //console.log(res.mine);
  138. layim.msgbox(5); //模拟消息盒子有新消息,实际使用时,一般是动态获得
  139. });
  140. //监听发送消息
  141. layim.on('sendMessage', function(data){
  142. var To = data.to;
  143. //console.log(data);
  144. if(To.type === 'friend'){
  145. layim.setChatStatus('<span style="color:#FF5722;">对方正在输入。。。</span>');
  146. }
  147. //演示自动回复
  148. setTimeout(function(){
  149. var obj = {};
  150. if(To.type === 'group'){
  151. obj = {
  152. username: '模拟群员'+(Math.random()*100|0)
  153. ,avatar: layui.cache.dir + 'images/face/'+ (Math.random()*72|0) + '.gif'
  154. ,id: To.id
  155. ,type: To.type
  156. ,content: autoReplay[Math.random()*9|0]
  157. }
  158. } else {
  159. obj = {
  160. username: To.name
  161. ,avatar: To.avatar
  162. ,id: To.id
  163. ,type: To.type
  164. ,content: autoReplay[Math.random()*9|0]
  165. }
  166. layim.setChatStatus('<span style="color:#FF5722;">在线</span>');
  167. }
  168. layim.getMessage(obj);
  169. }, 1000);
  170. });
  171. //监听查看群员
  172. layim.on('members', function(data){
  173. //console.log(data);
  174. });
  175. //监听聊天窗口的切换
  176. layim.on('chatChange', function(res){
  177. var type = res.data.type;
  178. console.log(res.data.id)
  179. if(type === 'friend'){
  180. //模拟标注好友状态
  181. //layim.setChatStatus('<span style="color:#FF5722;">在线</span>');
  182. } else if(type === 'group'){
  183. //模拟系统消息
  184. layim.getMessage({
  185. system: true
  186. ,id: res.data.id
  187. ,type: "group"
  188. ,content: '模拟群员'+(Math.random()*100|0) + '加入群聊'
  189. });
  190. }
  191. });
  192. //面板外的操作
  193. var $ = layui.jquery, active = {
  194. chat: function(){
  195. //自定义会话
  196. layim.chat({
  197. name: '小闲'
  198. ,type: 'friend'
  199. ,avatar: '//tva3.sinaimg.cn/crop.0.0.180.180.180/7f5f6861jw1e8qgp5bmzyj2050050aa8.jpg'
  200. ,id: 1008612
  201. });
  202. layer.msg('也就是说,此人可以不在好友面板里');
  203. }
  204. ,message: function(){
  205. //制造好友消息
  206. layim.getMessage({
  207. username: "贤心"
  208. ,avatar: "//tp1.sinaimg.cn/1571889140/180/40030060651/1"
  209. ,id: "100001"
  210. ,type: "friend"
  211. ,content: "嗨,你好!欢迎体验LayIM。演示标记:"+ new Date().getTime()
  212. ,timestamp: new Date().getTime()
  213. });
  214. }
  215. ,messageAudio: function(){
  216. //接受音频消息
  217. layim.getMessage({
  218. username: "林心如"
  219. ,avatar: "//tp3.sinaimg.cn/1223762662/180/5741707953/0"
  220. ,id: "76543"
  221. ,type: "friend"
  222. ,content: "audio[http://gddx.sc.chinaz.com/Files/DownLoad/sound1/201510/6473.mp3]"
  223. ,timestamp: new Date().getTime()
  224. });
  225. }
  226. ,messageVideo: function(){
  227. //接受视频消息
  228. layim.getMessage({
  229. username: "林心如"
  230. ,avatar: "//tp3.sinaimg.cn/1223762662/180/5741707953/0"
  231. ,id: "76543"
  232. ,type: "friend"
  233. ,content: "video[http://www.w3school.com.cn//i/movie.ogg]"
  234. ,timestamp: new Date().getTime()
  235. });
  236. }
  237. ,messageTemp: function(){
  238. //接受临时会话消息
  239. layim.getMessage({
  240. username: "小酱"
  241. ,avatar: "//tva1.sinaimg.cn/crop.7.0.736.736.50/bd986d61jw8f5x8bqtp00j20ku0kgabx.jpg"
  242. ,id: "198909151014"
  243. ,type: "friend"
  244. ,content: "临时:"+ new Date().getTime()
  245. });
  246. }
  247. ,add: function(){
  248. //实际使用时数据由动态获得
  249. layim.add({
  250. type: 'friend'
  251. ,username: '麻花疼'
  252. ,avatar: '//tva1.sinaimg.cn/crop.0.0.720.720.180/005JKVuPjw8ers4osyzhaj30k00k075e.jpg'
  253. ,submit: function(group, remark, index){
  254. layer.msg('好友申请已发送,请等待对方确认', {
  255. icon: 1
  256. ,shade: 0.5
  257. }, function(){
  258. layer.close(index);
  259. });
  260. //通知对方
  261. /*
  262. $.post('/im-applyFriend/', {
  263. uid: info.uid
  264. ,from_group: group
  265. ,remark: remark
  266. }, function(res){
  267. if(res.status != 0){
  268. return layer.msg(res.msg);
  269. }
  270. layer.msg('好友申请已发送,请等待对方确认', {
  271. icon: 1
  272. ,shade: 0.5
  273. }, function(){
  274. layer.close(index);
  275. });
  276. });
  277. */
  278. }
  279. });
  280. }
  281. ,addqun: function(){
  282. layim.add({
  283. type: 'group'
  284. ,username: 'LayIM会员群'
  285. ,avatar: '//tva2.sinaimg.cn/crop.0.0.180.180.50/6ddfa27bjw1e8qgp5bmzyj2050050aa8.jpg'
  286. ,submit: function(group, remark, index){
  287. layer.msg('申请已发送,请等待管理员确认', {
  288. icon: 1
  289. ,shade: 0.5
  290. }, function(){
  291. layer.close(index);
  292. });
  293. //通知对方
  294. /*
  295. $.post('/im-applyGroup/', {
  296. uid: info.uid
  297. ,from_group: group
  298. ,remark: remark
  299. }, function(res){
  300. });
  301. */
  302. }
  303. });
  304. }
  305. ,addFriend: function(){
  306. var user = {
  307. type: 'friend'
  308. ,id: 1234560
  309. ,username: '李彦宏' //好友昵称,若申请加群,参数为:groupname
  310. ,avatar: '//tva4.sinaimg.cn/crop.0.0.996.996.180/8b2b4e23jw8f14vkwwrmjj20ro0rpjsq.jpg' //头像
  311. ,sign: '全球最大的中文搜索引擎'
  312. }
  313. layim.setFriendGroup({
  314. type: user.type
  315. ,username: user.username
  316. ,avatar: user.avatar
  317. ,group: layim.cache().friend //获取好友列表数据
  318. ,submit: function(group, index){
  319. //一般在此执行Ajax和WS,以通知对方已经同意申请
  320. //……
  321. //同意后,将好友追加到主面板
  322. layim.addList({
  323. type: user.type
  324. ,username: user.username
  325. ,avatar: user.avatar
  326. ,groupid: group //所在的分组id
  327. ,id: user.id //好友ID
  328. ,sign: user.sign //好友签名
  329. });
  330. layer.close(index);
  331. }
  332. });
  333. }
  334. ,addGroup: function(){
  335. layer.msg('已成功把[Angular开发]添加到群组里', {
  336. icon: 1
  337. });
  338. //增加一个群组
  339. layim.addList({
  340. type: 'group'
  341. ,avatar: "//tva3.sinaimg.cn/crop.64.106.361.361.50/7181dbb3jw8evfbtem8edj20ci0dpq3a.jpg"
  342. ,groupname: 'Angular开发'
  343. ,id: "12333333"
  344. ,members: 0
  345. });
  346. }
  347. ,removeFriend: function(){
  348. layer.msg('已成功删除[凤姐]', {
  349. icon: 1
  350. });
  351. //删除一个好友
  352. layim.removeList({
  353. id: 121286
  354. ,type: 'friend'
  355. });
  356. }
  357. ,removeGroup: function(){
  358. layer.msg('已成功删除[前端群]', {
  359. icon: 1
  360. });
  361. //删除一个群组
  362. layim.removeList({
  363. id: 101
  364. ,type: 'group'
  365. });
  366. }
  367. //置灰离线好友
  368. ,setGray: function(){
  369. layim.setFriendStatus(168168, 'offline');
  370. layer.msg('已成功将好友[马小云]置灰', {
  371. icon: 1
  372. });
  373. }
  374. //取消好友置灰
  375. ,unGray: function(){
  376. layim.setFriendStatus(168168, 'online');
  377. layer.msg('成功取消好友[马小云]置灰状态', {
  378. icon: 1
  379. });
  380. }
  381. ,kefu1: function(){
  382. layim.chat({
  383. name: '在线客服一' //名称
  384. ,type: 'kefu' //聊天类型
  385. ,avatar: '//tp1.sinaimg.cn/5619439268/180/40030060651/1' //头像
  386. ,id: 1111111 //定义唯一的id方便你处理信息
  387. })
  388. }
  389. ,kefu2: function(){
  390. layim.chat({
  391. name: '在线客服二' //名称
  392. ,type: 'kefu' //聊天类型
  393. ,avatar: '//tp1.sinaimg.cn/5619439268/180/40030060651/1' //头像
  394. ,id: 2222222 //定义唯一的id方便你处理信息
  395. });
  396. }
  397. //移动端版本
  398. ,mobile: function(){
  399. var device = layui.device();
  400. var mobileHome = '/layim/demo/mobile.html';
  401. if(device.android || device.ios){
  402. return location.href = mobileHome;
  403. }
  404. var index = layer.open({
  405. type: 2
  406. ,title: '移动版演示 (或手机扫右侧二维码预览)'
  407. ,content: mobileHome
  408. ,area: ['375px', '667px']
  409. ,shadeClose: true
  410. ,shade: 0.8
  411. ,end: function(){
  412. layer.close(index + 2);
  413. }
  414. });
  415. layer.photos({
  416. photos: {
  417. "data": [{
  418. "src": "http://cdn.layui.com/upload/2016_12/168_1481056358469_50288.png",
  419. }]
  420. }
  421. ,anim: 0
  422. ,shade: false
  423. ,success: function(layero){
  424. layero.css('margin-left', '350px');
  425. }
  426. });
  427. }
  428. };
  429. $('.LAY-senior-im-chat-demo .layui-btn').on('click', function(){
  430. var type = $(this).data('type');
  431. active[type] ? active[type].call(this) : '';
  432. });
  433. });
  434. </script>