You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

351 lines
14 KiB

  1. /*
  2. * 版 本 Learun-ADMS-Ultimate V7.0.0 数字化智慧校园(http://www.learun.cn)
  3. * Copyright (c) 2013-2018 北京泉江科技有限公司
  4. * 创建人:陈彬彬
  5. * 日 期:2017.03.22
  6. * 描 述:即时聊天-》系统内部通讯
  7. */
  8. /*连接服务端操作*/
  9. (function ($, learun) {
  10. "use strict";
  11. var userinfo;
  12. var imChat;
  13. var isLoaded = 0;
  14. $.imServer = {
  15. init: function () {
  16. /* 首先需要获取用户的登录信息 */
  17. $.imServer.getUserInfo(function () {
  18. // 注册服务端方法
  19. //$.imServer.registerServer();
  20. // 初始化客户端界面代码
  21. //$.lrIM.init();
  22. // 连接服务端
  23. //$.imServer.connect();
  24. });
  25. }
  26. // 连接服务端
  27. , connect: function () {
  28. $.ajax({
  29. url: userinfo.imUrl + "/hubs",
  30. type: "get",
  31. dataType: "text",
  32. success: function (data) {
  33. eval(data);
  34. console.log(userinfo);
  35. //Set the hubs URL for the connection
  36. $.connection.hub.url = userinfo.imUrl;
  37. $.connection.hub.qs = { "userId": userinfo.userId };
  38. // Declare a proxy to reference the hub.
  39. imChat = $.connection.ChatsHub;
  40. $.imServer.registerClient();
  41. // 连接成功后注册服务器方法
  42. $.connection.hub.start().done(function () {
  43. $.imServer.afterSuccess();
  44. });
  45. //断开连接后
  46. $.connection.hub.disconnected(function () {
  47. $.imServer.disconnected();
  48. });
  49. },
  50. error: function (XMLHttpRequest, textStatus, errorThrown) {
  51. isLoaded = -1;
  52. },
  53. });
  54. }
  55. // 连接成功后执行方法
  56. , afterSuccess: function () {
  57. isLoaded = 1;
  58. }
  59. // 断开连接后执行
  60. , disconnected: function () {
  61. }
  62. // 注册客户端方法
  63. , registerClient: function () {
  64. if (imChat) {
  65. //接收消息
  66. imChat.client.revMsg = function (formUser, msg, dateTime) {
  67. }
  68. }
  69. }
  70. // 注册服务端方法
  71. , registerServer: function () {
  72. // 获取
  73. $.imServer.getUserList = function (departmentId, callback) {
  74. console.log(isLoaded);
  75. if (isLoaded == 1) {
  76. imChat.server.getUserList(departmentId).done(function (list) {
  77. if (!!callback) {
  78. callback(list);
  79. }
  80. });
  81. }
  82. else if (isLoaded == 0) {
  83. setTimeout(function () {
  84. $.imServer.getUserList(departmentId, callback);
  85. }, 500);
  86. }
  87. };
  88. }
  89. // 获取用户登录信息
  90. , getUserInfo: function (callback) {
  91. userinfo = learun.clientdata.get(['userinfo']);
  92. if (!!userinfo) {
  93. callback();
  94. }
  95. else {
  96. setTimeout(function () {
  97. $.imServer.getUserInfo(callback);
  98. }, 100);
  99. }
  100. }
  101. };
  102. })(jQuery, top.learun);
  103. /*网页端操作*/
  104. (function ($, learun) {
  105. "use strict";
  106. var userinfo;
  107. var isWindowOpen = false;
  108. $.lrIM = {
  109. init: function () {
  110. $._lrIM.render();
  111. },
  112. // 添加一条信息
  113. // id:消息主键;name:消息名称;msg:消息内容;img:消息头像
  114. addMsgTolist: function (id, name, msg, img) {
  115. var $list = $('#learun_im_last_list');
  116. var $item = $list.find('[data-value="' + id + '"]');
  117. if ($item.length > 0) {
  118. }
  119. else {
  120. var _html = '<li data-value="' + id + '">';
  121. _html += '<img src="' + top.$.rootUrl + '/Content/images/learunim/' + img + '">';
  122. _html += '';
  123. _html += '<div class="lr-im-onemsg">';
  124. _html += '<p class="lr-im-onemsg-title">' + name + '</p>';
  125. _html += '<p class="lr-im-onemsg-content">' + msg + '</p>';
  126. _html += '</div></li>';
  127. }
  128. }
  129. // 更新某一个聊天对象消息数量
  130. , updateMsgNum: function (id, num) {
  131. }
  132. };
  133. $._lrIM = {
  134. render: function () {
  135. var _html = '<div class="lr-im-icon" ><a href="javascript:;" id="lr_imicon_btn" title="企业内部通讯"><i class="fa fa-commenting"></i><span class="label label-success"></span></a></div>';
  136. _html += '<div class="lr-im-wrap" >';
  137. /*联系人列表*/
  138. _html += '<div class="lr-im-user-list" style="display:none;" id="learun_im_list" >';
  139. _html += '<div class="lr-im-header">企业内部通讯<div class="lr-im-close"><a id="learun_im_close" href="javascript:;">×</a></div></div>';
  140. _html += '<div class="lr-im-search"><input type="text" placeholder="搜索:同事名称、讨论组名称"><i class="fa fa-search"></i></div>';
  141. _html += '<div class="lr-im-body">';
  142. _html += '<div class="lr-im-body-nav" id="learun_im_list_nav" ><ul>';
  143. _html += '<li class="active nav_tab" data-value="last"><a title="最近回话"><i class="fa fa-comment"></i></a></li>';
  144. _html += '<li class="nav_tab" data-value="user"><a title="联系人"><i class="fa fa-user"></i></a></li>';
  145. _html += '<li class="nav_tab" data-value="group"><a title="讨论组"><i class="fa fa-users" style="font-size: 20px;"></i></a></li>';
  146. _html += '</ul></div>';
  147. _html += '<div class="lr-im-body-list" id="learun_im_body_list">';
  148. _html += '<div id="learun_im_last_list" class="learun_im_body_ul active" ></div>';
  149. _html += '<div id="learun_im_user_list" class="learun_im_body_user" style="display:none;" ><div class="lr-top-department" > <div id="im_department"></div> </div><div class="lr-userlist-content" id="lr_userlist_content" > <ul id="lr_userlist" class="lr-im-chatlist"></ul></div></div>';
  150. _html += '<div id="learun_im_group_list" class="learun_im_body_ul" style="display:none;" ></div>';
  151. _html += '</div>';
  152. _html += '</div>';//<div class="lr-im-body">
  153. _html += '</div>';//<div class="lr-im-user-list">
  154. /*聊天窗口*/
  155. _html += '<div class="lr-im-window" style="display:none;" id="learun_im_window">';
  156. _html += '<div class="lr-im-window-header"><span class="text"></span><div class="close"><a href="javascript:;">×</a></div></div>';
  157. _html += '<div class="lr-im-window-chat">';
  158. _html += '<div class="lr-im-window-content">';
  159. _html += '</div></div>';
  160. _html += '<div class="lr-im-window-tool"><a class="lr-im-window-tool-chatlogbtn "><i class="fa fa-clock-o"></i>沟通记录</a></div>';//<a class="lr-im-window-tool-face " title="选择表情"><i class="fa fa-meh-o"></i></a>
  161. _html += '<div class="lr-im-window-send"><textarea autofocus placeholder="按回车发送消息,shift+回车换行"></textarea></div>'
  162. _html += '</div>';
  163. _html += '</div>';
  164. $('body').append(_html);
  165. /*注册事件*/
  166. // 外部触发按钮
  167. $('#lr_imicon_btn').on('click', function () {
  168. var $im = $('#learun_im_list');
  169. if ($im.is(':hidden')) {
  170. $im.show();
  171. }
  172. });
  173. // 关闭按钮
  174. $('#learun_im_close').on('click', function () {
  175. var $im = $('#learun_im_list');
  176. var $im_message_window = $('#learun_im_window');
  177. $im.hide();
  178. $im_message_window.hide();
  179. });
  180. // 联系人列表切换
  181. $('#learun_im_list_nav li').on('click', function () {
  182. var $this = $(this);
  183. if (!$this.hasClass('active')) {
  184. var $parent = $this.parent();
  185. $parent.find('.active').removeClass('active');
  186. $this.addClass('active');
  187. var id = '#learun_im_' + $this.attr('data-value') + '_list';
  188. var $list = $(id);
  189. $('#learun_im_body_list>div.active').removeClass('active').hide();
  190. $list.addClass('active').show();
  191. }
  192. });
  193. // 打开聊天窗口
  194. $('#learun_im_body_list').delegate(".lr-user-item", "click", function (e) {
  195. var $this = $(this);
  196. var userId = $this.attr('data-value');
  197. var userName = $this.find('a').text();
  198. console.log(userId);
  199. $._lrIM.openWindow(userId, userName);
  200. });
  201. // 发送消息
  202. var $textarea = $('#learun_im_window .lr-im-window-send');
  203. $textarea.delegate("textarea", 'keypress', function (e) {
  204. var keyCode = e.keyCode || e.which || e.charCode;
  205. var shiftKey = e.shiftKey || e.metaKey;
  206. if (shiftKey && keyCode == "13") {
  207. }
  208. else if (keyCode == "13" && isWindowOpen) {
  209. var sendText = $(this).val();
  210. if (sendText) {
  211. $._lrIM.addRightMsg(userinfo.realName, learun.getDate('yyyy-MM-dd hh:mm'), $._lrIM.getUserImg(), sendText);
  212. }
  213. $('#learun_im_window .lr-im-window-send').html('<textarea autofocus placeholder="按回车发送消息,shift+回车换行"></textarea>');
  214. setTimeout(function () {
  215. $('#learun_im_window .lr-im-window-send>textarea').focus();
  216. }, 100);
  217. e.preventDefault();
  218. return false;
  219. }
  220. });
  221. // 加载部门
  222. $('#im_department').lrselect({
  223. type: 'tree',
  224. // 展开最大高度
  225. maxHeight: 343,
  226. // 是否允许搜索
  227. allowSearch: true,
  228. // 访问数据接口地址
  229. url: top.$.rootUrl + '/LR_OrganizationModule/Department/GetTree',
  230. // 访问数据接口参数
  231. param: { companyId: '', parentId: '' },
  232. placeholder: '请选择部门',
  233. select: function (department) {
  234. var $list = $('#lr_userlist');
  235. $list.html("");
  236. // 获取本部门员工信息列表,如果为空就隐藏
  237. $.imServer.getUserList(department.value, function (list) {
  238. $.each(list, function (id, item) {
  239. $list.append($._lrIM.getUserHtml(item));
  240. });
  241. });
  242. }
  243. });
  244. userinfo = learun.clientdata.get(['userinfo']);
  245. $('#im_department').lrselectSet(userinfo.departmentId);
  246. // 优化滚动条
  247. $('#lr_userlist_content').mCustomScrollbar({ // 优化滚动条
  248. theme: "minimal-dark"
  249. });
  250. $('#learun_im_window .lr-im-window-chat').mCustomScrollbar({ // 优化滚动条
  251. theme: "minimal-dark"
  252. });
  253. //$('#learun_im_body_list').mCustomScrollbar({ // 优化滚动条
  254. // theme: "minimal-dark"
  255. //});
  256. }
  257. , initData: function () { // 初始化数据
  258. }
  259. , getUserHtml: function (userItem) {
  260. if (userItem.F_UserId != userinfo.userId) {
  261. var _li = '';
  262. if (learun.isExistImg(top.$.rootUrl + userItem.F_HeadIcon)) {
  263. headimg = top.$.rootUrl + userItem.F_HeadIcon;
  264. }
  265. else if (userItem.F_Gender != 0) {
  266. headimg = top.$.rootUrl + '/Content/images/head/on-boy.jpg';
  267. }
  268. else {
  269. headimg = top.$.rootUrl + '/Content/images/head/on-girl.jpg';
  270. }
  271. _li = '<li class="lr-user-item" data-value="' + userItem.F_UserId + '" ><img class="headimg" src="' + headimg + '"><a>' + userItem.F_RealName + '</a></li>';
  272. return _li;
  273. }
  274. },
  275. getUserImg: function () {
  276. var headimg = '';
  277. if (learun.isExistImg(top.$.rootUrl + userinfo.headIcon)) {
  278. headimg = top.$.rootUrl + userinfo.headIcon;
  279. }
  280. else if (userinfo.gender != 0) {
  281. headimg = top.$.rootUrl + '/Content/images/head/on-boy.jpg';
  282. }
  283. else {
  284. headimg = top.$.rootUrl + '/Content/images/head/on-girl.jpg';
  285. }
  286. return headimg;
  287. },
  288. openWindow: function (userId, userName) {
  289. var $window = $('#learun_im_window');
  290. $window.attr('data-value', userId);
  291. $window.find('.lr-im-window-header>.text').text(userName);
  292. $('#learun_im_window .lr-im-window-content').html("");
  293. $window.show();
  294. isWindowOpen = true;
  295. },
  296. addRightMsg: function (userName, datatime, img, msg) {
  297. var html = '<div class="right"><div class="author-name">';
  298. html += '<small class="chat-date">' + datatime + '</small>';
  299. html += '<small class="chat-text">' + userName + '</small>';
  300. html += '<img src="' + img + '" />';
  301. html += '</div>';
  302. html += '<div class="chat-message"><em></em>' + msg + '</div></div>';
  303. $('#learun_im_window .lr-im-window-content').append(html);
  304. $("#learun_im_window .lr-im-window-chat").mCustomScrollbar("scrollTo", 'bottom');
  305. }
  306. }
  307. })(jQuery, top.learun);