U.F.FM.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. Namespace.register("U.F.FM"); //好友聊天和群聊天消息命名空间
  2. //#region 好友和群聊天记录
  3. //#region 聊天记录
  4. /**
  5. * 好友或者群消息
  6. * @param {element} 聊天框
  7. * @param {object} 好友或者群信息
  8. * @param {int} 第几页
  9. * @param {string} 变化的样式
  10. */
  11. U.F.FM.ViewFriendsChatRecords = function (el, friendandgroupinfo, page, isgroup) {
  12. //如果聊天记录在显示,那么隐藏聊天记录
  13. if (el.style.display == "block") {
  14. el.style.display = "none";
  15. }
  16. //如果聊天记录没有打开,那么打开聊天记录
  17. else {
  18. $(el).Child()[1].innerHTML = ""; //清空聊天记录
  19. U.F.FM.ChatRecord(el[0], friendandgroupinfo, page, isgroup);
  20. el.style.display = "block"; //显示聊天记录框
  21. }
  22. U.F.W.ChatBoxSize(el.Parent(3), el.Parent()); //调整大小
  23. }
  24. //
  25. /**
  26. * 聊天记录分页
  27. * @param {element} 聊天框
  28. * @param {object} 好友或者群信息
  29. * @param {int} 第几页
  30. * @param {string} 变化的样式
  31. */
  32. U.F.FM.ChatRecord = function (el, friendandgroupinfo, page, isgroup) {
  33. var _end = page * 50, //分页的结束位置
  34. _start = _end - 50; //分页的开始位置
  35. //群的获取聊天记录
  36. if (isgroup) {
  37. U.A.Request(US.CD, [US.DB, "UseStudio_Friends", "GetGroupChatHistory",
  38. friendandgroupinfo.GroupManageID, _start, _end], U.F.FM.AsynChatRecord, ["", el, friendandgroupinfo, page, isgroup]);
  39. }
  40. //好友的获取聊天记录
  41. else {
  42. U.A.Request(US.CD, [US.DB, "UseStudio_Friends", "GetFriendChatHistory",
  43. US.userInfo.userid, friendandgroupinfo.UserId, _start, _end], U.F.FM.AsynChatRecord, ["", el, friendandgroupinfo, page, isgroup]);
  44. }
  45. }
  46. //获取聊天记录异步
  47. U.F.FM.AsynChatRecord = function (r) {
  48. var context = r.context,
  49. _recentcontactsel = context[1], //聊天记录元素
  50. _friendandgroupinfo = context[2], //好友或者群的信息
  51. _page = context[3], //页数
  52. _isgroup = context[4], //是否群聊天记录
  53. _childs = $(_recentcontactsel).Child(); //0 聊天记录查看区域 1 分页区域
  54. r = r.value;
  55. _childs[0].innerText = ""; //清空聊天记录
  56. if (r.length) {
  57. //打印聊天记录
  58. U.F.FM.PrintChatRecord(_childs[0], r, _friendandgroupinfo);
  59. //聊天记录到底部
  60. _childs[0].scrollTop = _childs[0].scrollHeight;
  61. //如果没有加载分页控件,则加载
  62. if (!$("div", _childs[1]).length) {
  63. //调用分页接口打印分页
  64. U.PG.PPage(_childs[1], r[0].AllC, _page, 50,
  65. { "fun": [[U.F.FM.ChatRecord, [_recentcontactsel, _friendandgroupinfo, _page, _isgroup]]], "page": [2]
  66. });
  67. }
  68. }
  69. else { }
  70. }
  71. /**
  72. * 聊天记录分页
  73. * @param {element} 聊天框
  74. * @param {object} 聊天信息
  75. * @param {object} 好友信息
  76. */
  77. U.F.FM.PrintChatRecord = function (el, recordinfo, friendandgroupinfo) {
  78. var _tempel,
  79. _temponeel,
  80. _temptwoel,
  81. i = recordinfo.length,
  82. _frag = $$("frag");
  83. //循环打印群聊天记录
  84. while (i--) {
  85. _tempel = $$("div", { "className": "UD_SYFLO" }, _frag);
  86. _temponeel = $$("div", { "className": "UD_SYFLOT" }, _tempel);
  87. $$("div", { "className": "UD_SYFLOTN", "innerHTML": recordinfo[i].MessageDescript || recordinfo[i].GroupMessageSendUsername || friendandgroupinfo.FriendsDescript || friendandgroupinfo.GroupManageName }, _temponeel);
  88. $$("div", { "className": "UD_SYFLOTT", "innerHTML": U.MT.getDateInterval(recordinfo[i].MessageSendTime || recordinfo[i].GroupMessageSendTime) }, _temponeel);
  89. $$("div", { "className": "UD_SYFLOD", "innerHTML": recordinfo[i].MessageContent || recordinfo[i].GroupMessageContent }, _tempel);
  90. }
  91. el.appendChild(_frag);
  92. }
  93. //#endregion
  94. /**
  95. * 发送消息统一调用函数
  96. * @param {object} 统一发送好友信息id
  97. ----------好友id
  98. ----------群id
  99. ----------群发id
  100. * @param {element} 发送信息原
  101. * @param {element} 打印区域函数
  102. * @param {boolean} 判断消息
  103. ---------- true 获取群消息 或者发送 群消息
  104. ---------- flase 获取好友消息或者 获取好友消息
  105. * @param {boolean} 是否清空发送
  106. */
  107. U.F.FM.SendFriendOrGroupChatMessage = function (friendandgroupinfo, chateditel, chatcontentnewsel, isgroup, isupload) {
  108. var _newsinfo, //发送消息的打印的变量
  109. _chatcontent = chateditel.innerHTML, //发送的内容
  110. _friendid = friendandgroupinfo.UserId || friendandgroupinfo.GroupManageID; //发送给好友或者群的id
  111. //不为空允许发送内容
  112. if (_chatcontent.isHtmlNull()) {
  113. U.F.FM.SendChatMessageToDb(_friendid, _chatcontent, null, isgroup); //调用发送数据库的函数
  114. //发送消息的信息
  115. _newsinfo = [
  116. { "UserId": US.userInfo.userid,
  117. "Time": null,
  118. "Content": _chatcontent,
  119. "IMG": US.userInfo.UserThumbnailImageHead,
  120. "Name": US.userInfo.UserNickName
  121. }
  122. ]
  123. //内容显示在聊天区域
  124. if (isgroup) {
  125. U.F.W.PrintFriendChatMessage(chatcontentnewsel, _newsinfo, true); //打印在好友聊天
  126. }
  127. else {
  128. U.F.W.PrintGroupChatMessage(chatcontentnewsel, _newsinfo, true); //打印在群聊天
  129. }
  130. //判断是否是上传文件,如果是上传文件,那么不清空输入区域的内容直接显示到聊天区域。
  131. if (!isupload) {
  132. chateditel.innerText = ""
  133. }
  134. }
  135. }
  136. /**
  137. * 查看聊天 好友或者群
  138. * @param {element} 发送好友的id
  139. * @param {string} 发送的内容
  140. ----------如果这里为空 那么就是获取好友信息
  141. * @param {function} 发送成功回调函数
  142. * @param {boolean} 判断消息
  143. ---------- true 获取群消息 或者发送 群消息
  144. ---------- flase 获取好友消息或者 获取好友消息
  145. */
  146. U.F.FM.SendChatMessageToDb = function (friendid, message, cb, isgroup) {
  147. var _friendorgroupinfo, //好友或者群信息
  148. _userinfo = US.userInfo; //用户的信息
  149. //发送群消息到数据库
  150. if (isgroup) {
  151. U.A.Request(US.CD, [US.DB, "UseStudio_Friends", "SendMessageToGroup", friendid, Guid.newGuid(),
  152. _userinfo.UserId, message, _userinfo.UserNickNme]), U.M.apply(), [""];
  153. }
  154. //发送好友消息到数据库
  155. else {
  156. U.A.Request(US.CD, [US.DB, "UseStudio_Friends", "SentMessageToFriend", _userinfo.UserId, friendid,
  157. _userinfo.UserNickName, message, 0], U.M.apply(), [""]);
  158. }
  159. //发送消息后根据id得到发送的消息的群或者用户id得到详细信息,然后把这个群或者用户的信息变成第一个最近联系人的第一个
  160. for (i = 1; i < US.Friend.length; i++) {
  161. //如果是群,则获取群用户信息
  162. if (isgroup) {
  163. _friendorgroupinfo = _$(US.Friend[i]).Select({ "GroupManageID": friendid })[0];
  164. }
  165. //如果是聊天好友,则获取群用户信息
  166. else {
  167. _friendorgroupinfo = _$(US.Friend[i]).Select({ "UserId": friendid })[0];
  168. }
  169. //如果判断发送的好友或者是群确实在用户好友里,则把该用户设置为最近联系人
  170. if (_friendorgroupinfo) {
  171. U.F.FM.RecentContacts(_friendorgroupinfo); //设置最近联系人
  172. break;
  173. }
  174. }
  175. }
  176. /**
  177. * 查看聊天 好友或者群
  178. * @param {element} 发送好友的id
  179. * @param {string} 发送的内容
  180. ----------如果这里为空 那么就是获取好友信息
  181. * @param {function} 发送成功回调函数
  182. * @param {boolean} 判断消息
  183. ---------- true 获取群消息 或者发送 群消息
  184. ---------- flase 获取好友消息或者 获取好友消息
  185. */
  186. U.F.FM.GetFriendOrGroupNews = function (friendid, cb, isgroup) {
  187. var _userinfo = US.userInfo; //获取用户的资料
  188. //如果是群信息获取
  189. if (isgroup) {
  190. U.A.Request(US.CD, [US.DB, "UseStudio_Friends", "GetGroupUnreadMessage", _userinfo.UserId, friendid],
  191. cb, ["", friendid, isgroup]);
  192. }
  193. //如果是好友信息的获取
  194. else {
  195. U.A.Request(US.CD, [US.DB, "UseStudio_Friends", "GetFriendUnreadMessage", _userinfo.UserId, friendid],
  196. cb, ["", friendid, isgroup]);
  197. }
  198. }
  199. /**
  200. * 生成最近联系人
  201. * @param {object} 用户信息
  202. */
  203. U.F.FM.RecentContacts = function (userinfo) {
  204. var _recentcontactsel,
  205. _num,
  206. _recentcontactsinfo,
  207. _contentel = $("#UD_SYHZLZ")[0];
  208. if (US.Friend[4]) {
  209. //判断联系人是否已经在最近联系人中
  210. _num = US.Friend[4].objIndexOf({ "UserId": userInfo.userid || userinfo.GroupManageID });
  211. //如果存在最近联系人,那么直接从最近联系人中找到
  212. if (_num > -1) {
  213. _recentcontactsinfo = US.Friend[4].splice(_num, 1)[0];
  214. }
  215. //否则生成一个新的最近联系人
  216. else {
  217. //生成一个新的最近联系人
  218. _recentcontactsinfo = new U.F.T.RecentContactsEntity(userinfo.GroupManageID || userInfo.userid,
  219. userinfo.GroupManageName || userinfo.UserName, userinfo.UserImageHead || "", userinfo.UserNickName || "",
  220. userinfo.UserThumbnailImageHead || "", userinfo.maxMessageSendTime || new Date(),
  221. userinfo.GroupManageDescript || userinfo.FriendsDescript, userinfo.GroupManageRemark || userinfo.UserIndividualitysignature || "",
  222. userinfo.IsLogin || 3, userinfo.GroupManageID ? 1 : 0);
  223. }
  224. //如果存在就直接置顶 不存在添加新的
  225. US.Friend[4].unshift(_recentcontactsinfo);
  226. //找到最近联系人按钮
  227. _recentcontactsel = $("#UD_SYHZLTA").childg()[2];
  228. _recentcontactsel = $(_recentcontactsel).Child()[0];
  229. //如果当前显示的不是好友、群而是最近联系人,那么则重新打印
  230. if (_recentcontactsel.className.indexOf("UD_SYHZLTSO") > -1) {
  231. _recentcontactsel = $("div@TID=" + (userinfo.GroupManageID || userInfo.userid), $("#UD_SYHZLZ")[0])[0]; //获取最近联系人
  232. //如果最近联系人原本就存在,则直接追加到最前面
  233. if (_recentcontactsel) {
  234. ($(_recentcontactsel).appendTo(_contentel, 0, _contentel.firstChild)); //追加到第一个
  235. }
  236. //否则打印最近联系人
  237. else {
  238. U.F.PrintFriendOrGroup(_contentel, US.Friend[4][0], true); //插入最新联系人在最前面
  239. }
  240. }
  241. }
  242. }
  243. //#endregion