index.html 14 KB

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