HistroyMessage.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. Namespace.register("U.MD.F.H"); //好友聊天和群聊天消息命名空间
  2. //#region 好友和群聊天记录
  3. //#region 聊天记录
  4. /**
  5. * 好友或者群消息
  6. * @param {element} 聊天框
  7. * @param {object} 好友或者群信息
  8. * @param {int} 第几页
  9. * @param {string} 变化的样式
  10. */
  11. U.MD.F.H.viewFriendsChatRecords = function (el, friendandgroupinfo, page, isgroup) {
  12. //如果聊天记录在显示,那么隐藏聊天记录
  13. if (el.style.display == "block") {
  14. el.style.display = "none";
  15. U.MD.F.W.chatBoxSize($(el).Parent(3), $(el).Parent()); //调整大小
  16. }
  17. //如果聊天记录没有打开,那么打开聊天记录
  18. else {
  19. $(el).Child()[1].innerHTML = ""; //清空聊天记录
  20. U.MD.F.H.chatRecord(el, friendandgroupinfo, page, isgroup);
  21. el.style.display = "block"; //显示聊天记录框
  22. }
  23. U.MD.F.W.chatBoxSize($(el).Parent(8), $(el).Parent()); //调整大小
  24. }
  25. //
  26. /**
  27. * 聊天记录分页
  28. * @param {element} 聊天框
  29. * @param {object} 好友或者群信息
  30. * @param {int} 第几页
  31. * @param {string} 变化的样式
  32. */
  33. U.MD.F.H.chatRecord = function (el, friendandgroupinfo, page, isgroup) {
  34. var _end = page * 20, //分页的结束位置
  35. _start = _end - 20; //分页的开始位置
  36. //群的获取聊天记录
  37. if (isgroup) {
  38. U.A.Request(US.CD, [US.DB, "UseStudio_Friends", "GetGroupChatHistory",
  39. friendandgroupinfo.GroupManageID, _start, _end], U.MD.F.H.asynChatRecord, ["", el, friendandgroupinfo, page, isgroup]);
  40. }
  41. //好友的获取聊天记录
  42. else {
  43. U.A.Request(US.CD, [US.DB, "UseStudio_Friends", "GetFriendChatHistory",
  44. US.userInfo.userid, friendandgroupinfo.UserId, _start, _end], U.MD.F.H.asynChatRecord, ["", el, friendandgroupinfo, page, isgroup]);
  45. }
  46. }
  47. //获取聊天记录异步
  48. U.MD.F.H.asynChatRecord = function (r) {
  49. var _context = r.context,
  50. _recentcontactsel = _context[1], //聊天记录元素
  51. _friendandgroupinfo = _context[2], //好友或者群的信息
  52. _page = _context[3], //页数
  53. _isgroup = _context[4], //是否群聊天记录
  54. _childs = $(_recentcontactsel).Child(); //0 聊天记录查看区域 1 分页区域
  55. r = r.value;
  56. _childs[0].innerText = ""; //清空聊天记录
  57. if (r.length) {
  58. //打印聊天记录
  59. U.MD.F.H.printChatRecord(_childs[0], r, _friendandgroupinfo);
  60. //聊天记录到底部
  61. _childs[0].scrollTop = _childs[0].scrollHeight;
  62. //如果没有加载分页控件,则加载
  63. // if (!$("div", _childs[1]).length) {
  64. // //调用分页接口打印分页
  65. // new U.UF.P.page(_childs[1], r[0].AllC, 50, _page,
  66. // function (_page) { U.MD.F.H.chatRecord(_recentcontactsel, _friendandgroupinfo, _page, _isgroup); }, 1);
  67. // }
  68. //如果没有加载日历控件,则加载
  69. if (!$("div", _childs[1]).length) {
  70. var _calendar = $$("div", { "id": "U_MD_F_H_calendar", "style": { "width": "16px", "height": "17px", "background-image": "url('/img/YS2017.png')", "display": "inline-block", "background-repeat": "no-repeat", "background-position": "-855px -481px", "margin": "5px 0 5px 13px"} }, _childs[1]),
  71. _firstPage = $$("div", { "id": "U_MD_F_H_firstPage", "style": { "width": "13px", "height": "18px", "background-image": "url('/img/YS2017.png')", "display": "inline-block", "background-repeat": "no-repeat", "background-position": "-891px -481px", "margin": "5px 20px 4px 127px"} }, _childs[1]),
  72. _previousPage = $$("div", { "id": "U_MD_F_H_previousPage", "style": { "width": "11px", "height": "18px", "background-image": "url('/img/YS2017.png')", "display": "inline-block", "background-repeat": "no-repeat", "background-position": "-924px -481px", "margin": "5px 20px 4px 0px"} }, _childs[1]),
  73. _nextPage = $$("div", { "id": "U_MD_F_H_nextPage", "style": { "width": "10px", "height": "17px", "background-image": "url('/img/YS2017.png')", "display": "inline-block", "background-repeat": "no-repeat", "background-position": "-957px -481px", "margin": "5px 20px 4px 0px"} }, _childs[1]),
  74. _lastPage = $$("div", { "id": "U_MD_F_H_lastPage", "style": { "width": "13px", "height": "18px", "background-image": "url('/img/YS2017.png')", "display": "inline-block", "background-repeat": "no-repeat", "background-position": "-987px -481px", "margin": "5px 13px 4px 0px"} }, _childs[1]),
  75. _calendarPlace = $$('div', { "style": { cssText: "position:absolute; margin-bottom: 297px;"} }, _calendar)
  76. $("#U_MD_F_H_firstPage")[0].onclick = function () {
  77. _page = 1;
  78. U.MD.F.H.chatRecord(_recentcontactsel, _friendandgroupinfo, _page, _isgroup);
  79. }
  80. $("#U_MD_F_H_previousPage")[0].onclick = function () {
  81. _page--;
  82. U.MD.F.H.chatRecord(_recentcontactsel, _friendandgroupinfo, _page, _isgroup);
  83. }
  84. $("#U_MD_F_H_nextPage")[0].onclick = function () {
  85. _page++;
  86. U.MD.F.H.chatRecord(_recentcontactsel, _friendandgroupinfo, _page, _isgroup);
  87. }
  88. $("#U_MD_F_H_lastPage")[0].onclick = function () {
  89. _page = Math.ceil(r[0].AllC / 20);
  90. U.MD.F.H.chatRecord(_recentcontactsel, _friendandgroupinfo, _page, _isgroup);
  91. }
  92. // $("#U_MD_F_H_calendar")[0].onclick = function () { U.MD.UI.calendar(this, _calendarPlace); }
  93. }
  94. }
  95. else {
  96. U.alert("服务器繁忙,请稍后获取聊天记录");
  97. }
  98. }
  99. /**
  100. * 聊天记录分页
  101. * @param {element} 聊天框
  102. * @param {object} 聊天信息
  103. * @param {object} 好友信息
  104. */
  105. U.MD.F.H.printChatRecord = function (el, recordinfo, friendandgroupinfo) {
  106. var _tempel,
  107. _temponeel,
  108. _temptwoel,
  109. i = recordinfo.length,
  110. _frag = $$("frag");
  111. //循环打印群聊天记录
  112. while (i--) {
  113. //U.MD.F.W.printFileContent
  114. if (recordinfo[i].MessageContent? recordinfo[i].MessageContent.indexOf("fileName") != -1 : recordinfo[i].GroupMessageContent.indexOf("fileName") != -1) {
  115. _tempel = $$("div", { "className": "U_MD_F_LO" }, _frag);
  116. _temponeel = $$("div", { "className": "U_MD_F_LOT" }, _tempel);
  117. $$("div", { "className": "U_MD_F_LOTN", "innerHTML": recordinfo[i].MessageDescript || recordinfo[i].GroupMessageSendUsername || friendandgroupinfo.FriendsDescript || friendandgroupinfo.GroupManageName }, _temponeel);
  118. $$("div", { "className": "U_MD_F_LOTT", "innerHTML": U.UF.D.getDateInterval(recordinfo[i].MessageSendTime || recordinfo[i].GroupMessageSendTime) }, _temponeel);
  119. var _data = JSON.parse(recordinfo[i].MessageContent);
  120. if (_data.fileType == "jpg" || _data.fileType == "png" || _data.fileType == "mp4") { //判断文件格式是否为图片或者视频 , 不是的话加边框
  121. var _content = $$("div", { "style": { "cssText": "padding:8px 8px 8px 8px;background:#fff;border-radius:2px;margin-top:12px;position:relative"} }, _tempel);
  122. }else{
  123. var _content = $$("div", { "style": { "cssText": "padding:8px 8px 8px 8px;background:#fff;border-radius:2px;margin-top:12px;border:1px #d3d3d3 solid;background:#f9f9f9;"} }, _tempel);
  124. }
  125. U.MD.F.W.printFileContent(_data, _content);
  126. } else {
  127. _tempel = $$("div", { "className": "U_MD_F_LO" }, _frag);
  128. _temponeel = $$("div", { "className": "U_MD_F_LOT" }, _tempel);
  129. $$("div", { "className": "U_MD_F_LOTN", "innerHTML": recordinfo[i].MessageDescript || recordinfo[i].GroupMessageSendUsername || friendandgroupinfo.FriendsDescript || friendandgroupinfo.GroupManageName }, _temponeel);
  130. $$("div", { "className": "U_MD_F_LOTT", "innerHTML": U.UF.D.getDateInterval(recordinfo[i].MessageSendTime || recordinfo[i].GroupMessageSendTime) }, _temponeel);
  131. $$("div", { "className": "U_MD_F_LOD", "innerHTML": recordinfo[i].MessageContent || recordinfo[i].GroupMessageContent }, _tempel);
  132. }
  133. }
  134. el.appendChild(_frag);
  135. }
  136. //#endregion
  137. /**
  138. * 发送消息统一调用函数
  139. * @param {object} 统一发送好友信息id
  140. ----------好友id
  141. ----------群id
  142. ----------群发id
  143. * @param {element} 发送信息原
  144. * @param {element} 打印区域函数
  145. * @param {boolean} 判断消息
  146. ---------- true 获取群消息 或者发送 群消息
  147. ---------- false 获取好友消息或者 获取好友消息
  148. * @param {boolean} 是否清空发送
  149. */
  150. U.MD.F.H.sendFriendOrGroupChatMessage = function (friendandgroupinfo, chateditel, chatcontentnewsel, isgroup, isupload) {
  151. var _newsinfo, //发送消息的打印的变量
  152. _chatcontent = chateditel.innerHTML, //发送的内容
  153. _friendid = friendandgroupinfo.UserId || friendandgroupinfo.GroupManageID; //发送给好友或者群的id
  154. //不为空允许发送内容
  155. if (_chatcontent.isHtmlNull()) {
  156. U.MD.F.H.sendChatMessageToDb(_friendid, _chatcontent, null, isgroup); //调用发送数据库的函数
  157. //发送消息的信息
  158. _newsinfo = [{
  159. "UserId": US.userInfo.userid,
  160. "Time": new Date().getHours() + ":" + new Date().getMinutes() + ":" + new Date().getSeconds(),
  161. "Content": _chatcontent,
  162. "IMG": US.userInfo.UserThumbnailImageHead,
  163. "Name": US.userInfo.UserNickName
  164. }]
  165. //内容显示在聊天区域
  166. if (isgroup) {
  167. U.MD.F.W.printGroupChatMessage(chatcontentnewsel, _newsinfo, true); //打印在群聊天
  168. }
  169. else {
  170. U.MD.F.W.printFriendChatMessage(chatcontentnewsel, _newsinfo, true); //打印在好友聊天
  171. }
  172. //判断是否是上传文件,如果是上传文件,那么不清空输入区域的内容直接显示到聊天区域。
  173. if (!isupload) {
  174. chateditel.innerText = ""
  175. }
  176. }
  177. }
  178. /**
  179. * 查看聊天 好友或者群
  180. * @param {element} 发送好友的id
  181. * @param {string} 发送的内容
  182. ----------如果这里为空 那么就是获取好友信息
  183. * @param {function} 发送成功回调函数
  184. * @param {boolean} 判断消息
  185. ---------- true 获取群消息 或者发送 群消息
  186. ---------- flase 获取好友消息或者 获取好友消息
  187. */
  188. U.MD.F.H.sendChatMessageToDb = function (friendid, message, cb, isgroup) {
  189. var _friendorgroupinfo, //好友或者群信息
  190. _userinfo = US.userInfo; //用户的信息
  191. //发送群消息到数据库
  192. if (isgroup) {
  193. U.A.Request(US.CD, [US.DB, "UseStudio_Friends", "SendMessageToGroup", friendid, Guid.newGuid(), _userinfo.UserId, message, _userinfo.UserNickName], function () { }, [""]);
  194. }
  195. //发送好友消息到数据库
  196. else {
  197. U.A.Request(US.CD, [US.DB, "UseStudio_Friends", "SentMessageToFriend", _userinfo.UserId, friendid, _userinfo.UserNickName, message, 0, false], function () { }, [""]);
  198. }
  199. //发送消息后根据id得到发送的消息的群或者用户id得到详细信息,然后把这个群或者用户的信息变成第一个最近联系人的第一个
  200. //如果是群,则获取群用户信息
  201. if (isgroup) {
  202. _friendorgroupinfo = U.Json.select(US.friend.group, { "GroupManageID": friendid })[0];
  203. }
  204. //如果是聊天好友,则获取群用户信息
  205. else {
  206. //从最近聊天里面获取信息
  207. _friendorgroupinfo = U.Json.select(US.friend.recentcontacts, { "UserId": friendid })[0];
  208. //如果最近聊天里面没有获取用户的信息,那么就从好友里面获取
  209. if (_friendorgroupinfo) {
  210. //获取好友群消息
  211. _friendorgroupinfo = U.Json.select(US.friend.friends, { "UserId": friendid })[0];
  212. }
  213. }
  214. //如果判断发送的好友或者是群确实在用户好友里,则把该用户设置为最近联系人
  215. if (_friendorgroupinfo) {
  216. U.MD.F.H.recentContacts(_friendorgroupinfo); //设置最近联系人
  217. }
  218. }
  219. /**
  220. * 查看聊天 好友或者群
  221. * @param {element} 发送好友的id
  222. * @param {string} 发送的内容
  223. ----------如果这里为空 那么就是获取好友信息
  224. * @param {function} 发送成功回调函数
  225. * @param {boolean} 判断消息
  226. ---------- true 获取群消息 或者发送 群消息
  227. ---------- flase 获取好友消息或者 获取好友消息
  228. */
  229. U.MD.F.H.getFriendOrGroupNews = function (friendid, cb, isgroup) {
  230. var _userinfo = US.userInfo; //获取用户的资料
  231. //如果是群信息获取
  232. if (isgroup) {
  233. U.A.Request(US.CD, [US.DB, "UseStudio_Friends", "GetGroupUnreadMessage", _userinfo.UserId, friendid], cb, ["", friendid, isgroup]);
  234. }
  235. //如果是好友信息的获取
  236. else {
  237. U.A.Request(US.CD, [US.DB, "UseStudio_Friends", "GetFriendUnreadMessage", _userinfo.UserId, friendid], cb, ["", friendid, isgroup]);
  238. }
  239. }
  240. /**
  241. * 生成最近联系人
  242. * @param {object} 用户信息
  243. */
  244. U.MD.F.H.recentContacts = function (userinfo) {
  245. var _recentcontactsel,
  246. _num,
  247. _recentcontactsinfo,
  248. _contentel = $("#U_MD_F_H_ZLZ")[0];
  249. if (US.friend.recentcontacts) {
  250. //判断联系人是否已经在最近联系人中
  251. _num = US.friend.recentcontacts.objIndexOf({ "UserId": userInfo.userid || userinfo.GroupManageID });
  252. //如果存在最近联系人,那么直接从最近联系人中找到
  253. if (_num > -1) {
  254. _recentcontactsinfo = US.friend.recentcontacts.splice(_num, 1)[0];
  255. }
  256. //否则生成一个新的最近联系人
  257. else {
  258. //生成一个新的最近联系人
  259. _recentcontactsinfo = new U.MD.F.T.recentContactsEntity(userinfo.GroupManageID || userInfo.userid,
  260. userinfo.GroupManageName || userinfo.UserName, userinfo.UserImageHead || "", userinfo.UserNickName || "",
  261. userinfo.UserThumbnailImageHead || "", userinfo.maxMessageSendTime || new Date(),
  262. userinfo.GroupManageDescript || userinfo.FriendsDescript, userinfo.GroupManageRemark || userinfo.UserIndividualitysignature || "",
  263. userinfo.IsLogin || 3, userinfo.GroupManageID ? 1 : 0);
  264. }
  265. //如果存在就直接置顶 不存在添加新的
  266. US.friend.recentcontacts.unshift(_recentcontactsinfo);
  267. //找到最近联系人按钮
  268. _recentcontactsel = $("#U_MD_F_H_ZLTA").childs()[2];
  269. _recentcontactsel = $(_recentcontactsel).Child()[0];
  270. //如果当前显示的不是好友、群而是最近联系人,那么则重新打印
  271. if (_recentcontactsel.className.indexOf("U_MD_F_H_ZLTSO") > -1) {
  272. _recentcontactsel = $("div@TID=" + (userinfo.GroupManageID || userInfo.userid), $("#U_MD_F_H_ZLZ")[0])[0]; //获取最近联系人
  273. //如果最近联系人原本就存在,则直接追加到最前面
  274. if (_recentcontactsel) {
  275. ($(_recentcontactsel).appendTo(_contentel, 0, _contentel.firstChild)); //追加到第一个
  276. }
  277. //否则打印最近联系人
  278. else {
  279. U.MD.F.printFriendOrGroup(_contentel, US.friend.recentcontacts[0], true); //插入最新联系人在最前面
  280. }
  281. }
  282. }
  283. }
  284. //#endregion