Message.js 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671
  1. Namespace.register("U.MD.F.N"); //好友消息命名空间
  2. U.MD.F.N.news = []; //用户所有的消息数组
  3. /**
  4. * 好友消息服务
  5. *
  6. * @param {string} 用户id
  7. */
  8. U.MD.F.N.messageService = function (userid) {
  9. if (US.friend.allclass && userid && userid.length == 36) {
  10. //获取好友未读消息
  11. U.A.Request(US.USER, ["GetAllUnreadMessage", userid], U.MD.F.N.asynMessageService);
  12. }
  13. }
  14. /**
  15. * 这个是消息的异步处理
  16. *
  17. * @param {object} 后台返回数据的ajax对象
  18. * 0 好友未读消息 1 用户在服务器的状态
  19. */
  20. U.MD.F.N.asynMessageService = function (r) {
  21. r = r.value;
  22. if (r) { //如果后台有返回数据的处理
  23. var i,
  24. _userinfo = US.userInfo, //登录用户的信息
  25. _statenew = r[1];
  26. //如果状态服务器里返回的数据在前端最终生成是字符串,那么就是用户的登录状态的变化
  27. if (typeof _statenew == "string") {
  28. U.MD.F.N.inlineNotice(_statenew);
  29. }
  30. //否则就是用户获取到自己的好友和其他的信息
  31. else {
  32. U.MD.F.N.friendOnlineAndOffline(_statenew); //用户上下线设置
  33. U.MD.F.N.messageHandle(r); //聊天消息的处理
  34. }
  35. }
  36. }
  37. /**
  38. * 好友的上下线处理
  39. *
  40. * @param {object} 后台返回数据的ajax对象
  41. * 0 好友未读消息 1 用户在服务器的状态
  42. */
  43. U.MD.F.N.friendOnlineAndOffline = function (statenew) {
  44. var i,
  45. j,
  46. k,
  47. _num,
  48. _el,
  49. _idarr,
  50. _friendform = $("#U_MD_F_H_ZLZ")[0], //好友窗体
  51. _userid = US.userInfo.userid, //登录用户id
  52. _friendinfo = US.friend; //好友信息数组
  53. //循环上下线通知 0是下线的用户,1是上线的用户
  54. for (i = 0; i < statenew.length; i++) {
  55. //如果有上线或者下线的用户
  56. if (statenew[i].length) {
  57. //获取所有上下线的数组
  58. _idarr = statenew[i].join(",");
  59. //循环好友的数组 0 好友分组 1 所有的好友 2 好友群 3 群好友 4 在线用户 中的 1 、 3 、4
  60. for (j = 0; j < 3; j++) {
  61. _num = j = 0 ? 1 : j + 2; //1、3、4的规律算法
  62. for (k = 0; k < _friendinfo[_num].length; k++) {
  63. //如果用户在上下线操作里面
  64. if (_idarr.indexOf(_friendinfo[_num][k].UserId) > -1) {
  65. _friendinfo[_num][k].IsLogin = i; //设置是否登录的处理
  66. }
  67. }
  68. U.Json.sort(US.friend[_num], "IsLogin", 1); //上下线后重新排序
  69. }
  70. //把上线的用户置顶,下线的用户放在下面
  71. for (j = 0; j < statenew[i].length; j++) {
  72. _el = $("@TID='" + statenew[i][j] + "'", _friendform); //找到指定的元素
  73. if (_el[0]) {
  74. $(_el[0].Parent()).append(_el, null, i ? _el[0].Parent().firstChild : null);
  75. }
  76. }
  77. }
  78. }
  79. }
  80. /**
  81. * 下线通知区域
  82. *
  83. * @param {object} 后台返回数据的ajax对象
  84. * 0 好友未读消息 1 用户在服务器的状态
  85. */
  86. U.MD.F.N.inlineNotice = function (userstate) {
  87. //其它地方登录
  88. if (userstate == "upline") {
  89. return; //前期允许多点登录
  90. //其他地方登录弹出提示框
  91. U.UF.UI.confirm($$("div", {
  92. "style": {
  93. "textAlign": "center",
  94. "marginTop": "25px",
  95. "padding": "10px 0",
  96. "fontSize": "14px",
  97. "color": "red"
  98. },
  99. "innerHTML": "您好, 您的账号在别处有登录!"
  100. }));
  101. U.MD.U.LO.logout(); //注销账号信息
  102. }
  103. //超时重新连接
  104. else {
  105. U.A.Request(US.FRIEND, ["UserStateLogin", US.userInfo.username, US.userInfo.UserPassword], function () { });
  106. }
  107. }
  108. /**
  109. * 消息查看
  110. *
  111. * @param {object} 0 好友和群消息 1 交互消息
  112. */
  113. U.MD.F.N.messageHandle = function (arr) {
  114. //好友消息和群消息的处理
  115. if (arr[0]) {
  116. U.MD.F.N.friendMessageHandle(arr[0]);
  117. }
  118. if (arr[1]) {
  119. U.MD.F.N.otherNews(arr[1]);
  120. }
  121. }
  122. //点击查看消息
  123. /**
  124. * 消息查看
  125. *
  126. * @param {object} 0 好友和群消息 1 交互消息
  127. */
  128. U.MD.F.N.friendMessageHandle = function (newsarr) {
  129. U.MD.F.N.MarkUnreadMessage(newsarr);
  130. var i, j, k,
  131. _isnews,
  132. _obj,
  133. _form,
  134. _news,
  135. _isgroup, //是否是群消息
  136. _verify, //消息类型
  137. _allnews = U.MD.F.N.news, //还有消息数组
  138. _friendel = $("#U_MD_D_MG_AFT")[0];
  139. //循环消息数组 0 好友消息, 1群消息
  140. for (j = 0; j < newsarr.length; j++) {
  141. _news = newsarr[j]; //得到好友或者群消息
  142. //判断是否存在
  143. if (_news) {
  144. //好友消息或者群消息循环处理 由于好友或者群消息有多种消息 如添加还有消息、好友聊天消息,进入群消息,群聊天消息等,
  145. for (i = 0; i < _news.length; i++) {
  146. _obj = null; //清空obj
  147. _isgroup = _news[i].UserId == null; //判断消息是什么消息
  148. _verify = _news[i].MessageIsVerify || 0; //如果没有消息的类型,暂时只有群消息的时候才会触发
  149. _allnews[_verify] = _allnews[_verify] || []; //设置功能
  150. switch (_verify) {
  151. //好友或者群聊天消息
  152. case 0: case 6:
  153. _news[i].MessageSendTime = U.UF.D.getYearMonthDay(_news[i].MessageSendTime) || U.UF.D.getYearMonthDay(_news[i].GroupMessageSendTime); //发送消息的时间
  154. _form = U.MD.F.W.isCreateForm(_news[i].UserId || _news[i].GroupManageID); //判断好友消息窗口是否打开
  155. //如果窗体存在的处理
  156. if (_form && _form[1]) {
  157. //文件消息分享处理
  158. if (_verify == 6) {
  159. U.MD.F.W.printFriendChatMessage($('.U_MD_F_CA')[0], newsarr[0]); //打印好友分享文件消息
  160. } else {
  161. //获取消息打印
  162. U.MD.F.H.getFriendOrGroupNews(_news[i].UserId || _news[i].GroupManageID,
  163. function (r) {
  164. //打印消息
  165. console.log(r);
  166. U.MD.F.N.asynReceiveMessages(_isgroup, _form[1], r.value);
  167. }, _isgroup);
  168. }
  169. continue;
  170. }
  171. U.MD.F.H.recentContacts(_news[i]); //生成最近联系人
  172. break;
  173. //1、对方添加我为好友的请求, 2、对方请求加入群, 3、用户给拉入群处理 这里不做处理下面统一处理, 4、请求对方进入群处理, 5、确认对方进入群处理
  174. case 1: case 2: case 3: case 4: case 5:
  175. //_allnews[_verify].push(_news[i]);
  176. break;
  177. }
  178. //判断消息是否存在过
  179. for (k = 0; k < _allnews[_verify].length; k++) {
  180. //判断两个用户之间或者用户和群之间是否存在消息
  181. if ((_allnews[_verify][k].GroupManageID != null && _allnews[_verify][k].GroupManageID == _news[i].GroupManageID) ||
  182. (_allnews[_verify][k].UserId != null && _allnews[_verify][k].UserId == _news[i].UserId)) {
  183. _obj = _allnews[_verify][k];
  184. break;
  185. }
  186. }
  187. //如果是聊天消息,存在的情况下,那么就直接添加消息总数
  188. if (_verify == 0 && _obj) {
  189. //由于群的信息获取的时候都是有总数,所以不需要用叠加的方法
  190. if (_news[i].GroupManageID) {
  191. _obj.count = _news[i].count;
  192. }
  193. //消息的数量叠加
  194. else {
  195. _obj.count += _news[i].count;
  196. }
  197. }
  198. //添加好友消息等直接添加 if (!_obj || _verify != 2)
  199. else {
  200. _allnews[_verify].push(_news[i]);
  201. }
  202. _isnews = true; //设置有消息提醒
  203. }
  204. }
  205. }
  206. //如果有消息的处理
  207. if (_isnews) {
  208. _friendel.innerText = "";
  209. if (!$("#U_MD_F_N_Message")[0]) {
  210. //弹出消息的处理
  211. new U.UF.UI.form("系统消息", _friendel,
  212. {
  213. "id": "U_MD_F_N_Message",
  214. "style": { "width": "300px", "height": "209px", "right": "50px", "bottom": "5px", "background": "#ffffff", "padding": "0", "border": "0", "maxWidth": "300px" }
  215. },
  216. {
  217. "istop": true,
  218. "isdrag": false,
  219. "isstretching": false,
  220. "isenlarge": false,
  221. "isnarrow": false,
  222. "closecallback": function () {
  223. U.MD.F.N.clearAllNews();
  224. }
  225. });
  226. }
  227. else {
  228. $("#U_MD_F_N_Message")[0].style.display = "block";
  229. }
  230. //上面处理好信息后,重新的打印显示消息
  231. for (i = 0; i <= 6; i++) { //消息处理
  232. if (_allnews[i] && _allnews[i].length) { //消息存在的处理
  233. U.MD.F.N.displayFriendMessage(_allnews[i], i); //弹出消息框
  234. }
  235. }
  236. }
  237. }
  238. /**
  239. * 消息提示打印处理
  240. *
  241. * @param {array} 需要打印的消息数组
  242. */
  243. U.MD.F.N.displayFriendMessage = function (news, verify) {
  244. var i,
  245. _username,
  246. _descript,
  247. _newel,
  248. _newael,
  249. _cb,
  250. _frag = $$("frag");
  251. //循环消息的处理
  252. for (i = 0; i < news.length; i++) {
  253. //创建消息元素
  254. _newel = $$("div", { "className": "U_MD_D_MG_OO", "title": "消息" }, _frag);
  255. _username = news[i].FriendsDescript || news[i].GroupManageName || news[i].UserNickName;
  256. //消息类型的处理,设置消息的内容显示
  257. switch (verify) {
  258. //聊天消息处理
  259. case 0:
  260. _descript = "您有" + news[i].count + "消息未读";
  261. //添加好友点击的回调
  262. _cb = U.UF.P.apply(function (news, newsinfo, el) {
  263. U.MD.F.N.chatMessage(newsinfo, news, el); //聊天消息设置
  264. }, [news, news[i], _newel]);
  265. break;
  266. //添加好友消息的处理
  267. case 1:
  268. _username = news[i].MessageDescript + "添加您为好友"; //消息名字
  269. _descript = "添加您为好友"; //消息描述
  270. //添加好友点击的回调
  271. _cb = U.UF.P.apply(function (news, newsinfo, el) {
  272. U.MD.F.N.addFriendNewsHandle(newsinfo, news, el);
  273. }, [news, news[i], _newel]);
  274. break;
  275. //请求加入群消息处理
  276. case 2:
  277. _username = news[i].MessageDescript + "请求加入该群"; //消息名字
  278. _descript = "请求加入该群"; //消息描述
  279. //添加好友点击的回调
  280. _cb = U.UF.P.apply(function (news, newsinfo, el) {
  281. U.MD.F.N.entryGroup(newsinfo, news, el);
  282. }, [news, news[i], _newel]);
  283. break;
  284. //邀请加入群处理
  285. case 3:
  286. _username = news[i].UserNickName + "邀请您加入讨论组"; //消息名字
  287. _descript = "邀请您加入讨论组"; //消息描述
  288. //添加好友点击的回调
  289. _cb = U.UF.P.apply(function (news, newsinfo, el) {
  290. U.MD.F.N.pulledIntoGroups(newsinfo, news, el);
  291. }, [news, news[i], _newel])
  292. break;
  293. //对方同意添加好友
  294. case 4:
  295. _username = news[i].UserNickName + "同意添加你为好友"; //消息名字
  296. _descript = "同意添加你为好友"; //消息描述
  297. //添加好友点击的回调
  298. _cb = U.UF.P.apply(function (news, newsinfo, el) {
  299. U.MD.F.N.confirmAddFriend(newsinfo, news, el);
  300. }, [news, news[i], _newel]);
  301. break;
  302. //对方确认我加入群的处理
  303. case 5:
  304. _username = news[i].UserNickName + "同意您加入讨论组"; //消息名字
  305. _descript = "加入讨论组"; //消息描述
  306. //添加好友点击的回调
  307. _cb = U.UF.P.apply(function (news, newsinfo, el) {
  308. U.MD.F.N.pulledIntoGroups(newsinfo, news, el);
  309. }, [news, news[i], _newel]);
  310. break;
  311. case 6:
  312. _descript = "你的文件到了!!!"; //发送文件描述
  313. _cb = U.UF.P.apply(function (news, newsinfo, el) {
  314. U.MD.F.N.chatMessage(newsinfo, news, el); //聊天消息设置
  315. }, [news, news[i], _newel]);
  316. break;
  317. }
  318. //点击处理
  319. _newel.onclick = _cb;
  320. _newael = $$("div", { "className": "U_MD_D_MG_OOI" }, _newel);
  321. $$("img", {
  322. "onerror": U.MD.C.imgError,
  323. "onerror": U.MD.C.imgError, "alt": news[i].FriendsDescript || news[i].UserNickName || news[i].GroupManageName,
  324. "src": U.MD.C.getHeadImage(news[i].UserThumbnailImageHead || "/img/chatgroup.png")
  325. }, _newael);
  326. $$("div", { "className": "U_MD_D_MG_OON U_MD_D_Text_Abbreviation", "innerHTML": _username }, _newel);
  327. $$("div", { "className": "U_MD_D_MG_OONT U_MD_D_Text_Abbreviation", "innerHTML": _descript }, _newel);
  328. $$("div", {
  329. "className": "U_MD_D_MG_OOC", "style": { "cssText": "float:right" }, "innerHTML": "查看"
  330. }, _newel); //查看消息
  331. }
  332. $("#U_MD_D_MG_AFT")[0].appendChild(_frag);
  333. }
  334. /**
  335. * 提供好友和群统一接口实现信息回调
  336. *
  337. *
  338. * @param {object} 当前的消息
  339. * @param {array} 所有的消息
  340. * @param {element} 消息元素
  341. */
  342. U.MD.F.N.chatMessage = function (newsinfo, news, el) {
  343. var _chatinfo;
  344. //如果是群聊天的处理
  345. if (newsinfo.GroupManageID) {
  346. _chatinfo = U.Json.select(US.friend.group, { "GroupManageID": newsinfo.GroupManageID })[0];
  347. }
  348. //如果是好友聊天的处理
  349. else {
  350. _chatinfo = U.Json.select(US.friend.friends, { "UserId": newsinfo.UserId })[0]
  351. }
  352. U.MD.F.W.viewFriend(_chatinfo); //查看消息
  353. U.MD.F.N.clearNews(newsinfo, news, el); //清除
  354. }
  355. /**
  356. * 提供好友和群统一接口实现信息回调
  357. *
  358. * @param {bool} 接收的消息类型
  359. * true 群消息
  360. * false 好友消息
  361. * @param {string} 好友或者群消息
  362. * @param {object} 获取查看的好友消息
  363. */
  364. U.MD.F.N.asynReceiveMessages = function (isgroup, chatform, r) {
  365. //如果是群消息查看
  366. if (isgroup) {
  367. U.MD.F.W.printGroupChatMessage($("div.U_MD_F_C", chatform)[0], r); //打印群消息
  368. }
  369. //好友消息的查看
  370. else {
  371. U.MD.F.W.printFriendChatMessage($("div.U_MD_F_C", chatform)[0], r); //打印好友消息
  372. }
  373. }
  374. /**
  375. * 添加好友的处理
  376. *
  377. * @param {object} 当前的消息
  378. * @param {array} 所有的消息
  379. * @param {element} 消息元素
  380. */
  381. U.MD.F.N.addFriendNewsHandle = function (newsinfo, news, el) {
  382. var _friendinfo = U.Json.select(US.friend.friends, { "UserId": newsinfo.UserId }, null, 1)[0]; //判断用户是否在好友分组里
  383. //好友不存在自己的列表
  384. if (!_friendinfo) {
  385. U.MD.F.M.addFriend(newsinfo, null, "0"); //添加他人进入群
  386. }
  387. //用户已经是自己的好友,那么直接弹出聊天
  388. else {
  389. U.MD.F.W.popupFriendsForm(_friendinfo);
  390. }
  391. U.MD.F.N.clearNews(newsinfo, news, el); //清除
  392. }
  393. /**
  394. * 添加好友的处理
  395. *
  396. * @param {object} 当前的消息
  397. * @param {array} 所有的消息
  398. * @param {element} 消息元素
  399. */
  400. U.MD.F.N.entryGroup = function (newsinfo, news, el) {
  401. var _groupuserid = Guid.newGuid(), //群用户id
  402. _friendinfo = U.Json.select(US.friend.groupusers, { "GroupManageID": news.MessageContent, "UserId": news.UserId }, null, 1)[0]; //查找群
  403. //如果群已经加载处理的处理
  404. if (_friendinfo) {
  405. U.alert("添加成功");
  406. }
  407. //添加用户进入群主
  408. else {
  409. U.A.Request(US.FRIEND, ["AddUsrsToGroup", US.userInfo.userid, news.MessageID, news.UserId, news.MessageContent.toUpperCase(), _groupuserid, news.MessageDescript], U.MD.F.N.asynEntryGroup, ["", news, _groupuserid]);
  410. }
  411. U.MD.F.N.clearNews(newsinfo, news, el); //清除
  412. }
  413. /**
  414. * 添加群进入
  415. *
  416. * @param {object} 服务器返回的信息
  417. */
  418. U.MD.F.N.asynEntryGroup = function (r) {
  419. var _groupuserinfo,
  420. _context = r.context,
  421. _news = _context[1],
  422. _groupuserid = _context[2];
  423. //实例化用户
  424. _groupuserinfo = U.MD.F.T.groupUserEntity(_news.UserId, _news.UserImageHead, _news.UserNickName, _news.UserNickName, _news.UserThumbnailImageHead, _news.MessageContent.toUpperCase(), _news.MessageID, 1)
  425. //添加用户进入群
  426. US.friend.groupusers.push(_groupuserinfo);
  427. }
  428. /**
  429. * 被用户进入群处理
  430. *
  431. * @param {object} 消息信息
  432. */
  433. U.MD.F.N.pulledIntoGroups = function (newsinfo, news, el) {
  434. var _groupinfo = U.Json.select(US.friend.group, { "GroupManageID": newsinfo.MessageContent.toLowerCase() })[0];
  435. //判断群是否已经加载过,如果加载过那么就不重新加载
  436. if (!_groupinfo) {
  437. U.A.Request(US.FRIEND, ["GetJoinGroupNews", US.userInfo.userid, newsinfo.MessageID, newsinfo.MessageContent], U.MD.F.N.asynPulledIntoGroups, ["", newsinfo]); //拉用户进入群组
  438. }
  439. else {
  440. U.MD.F.W.viewFriend(_groupinfo); //查看消息
  441. //如果是群的文件消息的处理
  442. if (newsinfo.MessageContent.length == 36) {
  443. }
  444. }
  445. U.MD.F.N.clearNews(newsinfo, news, el); //清除用户消息
  446. }
  447. /**
  448. * 拉用户进入群组异步
  449. *
  450. * @param {object} 小新信息
  451. */
  452. U.MD.F.N.asynPulledIntoGroups = function (r) {
  453. //服务器返回成功
  454. if (r.value) {
  455. var _groupfriend,
  456. _groupfriends,
  457. _groupdiskarr,
  458. _context = r.context,
  459. _newinfo = _context[1],
  460. _userid = US.userInfo.userid, //用户id
  461. _diskinfo = US.disk.Disks[_userid], //用户群信息
  462. _groupinfo = new U.MD.F.T.groupEntity(_newinfo.MessageContent.toLocaleLowerCase(), _newinfo.MessageDescript, U.UF.D.toTimeStamp(new Date()), _newinfo.UserId, "", null) //群信息
  463. ;
  464. r = r.value; //服务器响应后返回的值
  465. _groupfriends = r[0];
  466. US.friend.group.unshift(_groupinfo); //插入新群
  467. //添加群友
  468. for (i = 0; i < _groupfriends.length; i++) {
  469. //判断用户是否在群里,不重复添加
  470. if (!U.Json.select(US.friend.groupusers, { "GroupManageID": _groupfriends[i].GroupManageID, "UserId": _groupfriends[i].UserId })[0]) {
  471. //初始化生成群用户
  472. _groupfriend = new U.MD.F.T.groupUserEntity(_groupfriends[i].UserId, U.MD.C.getHeadImage(_groupfriends[i].UserImageHead), _groupfriends[i].UserNickName || _groupfriends[i].UserName, _groupfriends[i].UserName, U.MD.C.getHeadImage(_groupfriends[i].UserThumbnailImageHead), _groupfriends[i].GroupUsersDescript || _groupfriends[i].UserNickName, _groupfriends[i].GroupManageID, 1);
  473. //添加群用户到群里
  474. US.friend.groupusers.push(_groupfriend);
  475. }
  476. }
  477. _groupdiskarr = [new U.MD.DK.M.entity(_groupinfo.GroupManageID, 0, US.EMPTYGUID, _groupinfo.GroupManageName,
  478. _groupinfo.GroupManageName, "folder", null, U.UF.D.toTimeStamp(new Date()), U.MD.DK.C.getIcon("folder")[1],
  479. 1, null, null, 0, "", _groupinfo.GroupManageID)];
  480. _diskinfo && U.MD.DK.RE.addFileOrFolder(_groupdiskarr, _diskinfo, _diskinfo.directoryOrFiles[2]) //添加文件或者文件夹
  481. // _diskinfo && U.MD.DK.RE.addFileOrFolder(r[1], _diskinfo, _groupinfo) //群里的文件或者文件夹
  482. //直接显示到群里
  483. U.MD.F.W.viewFriend(_groupinfo); //查看消息
  484. //返回添加的群
  485. return US.friend.group[0];
  486. }
  487. }
  488. /**
  489. * 确认添加对方为好友
  490. *
  491. * @param {object} 确定添加对方为好友
  492. */
  493. U.MD.F.N.confirmAddFriend = function (newsinfo, news, el) {
  494. var _friendid = Guid.newGuid(), //好友id
  495. _friendinfo = U.Json.select(US.friend.friends, { "UserId": news.UserId })[0] //用户是否已经在好友列表
  496. ;
  497. //如果好友没有添加处理
  498. if (!_friendinfo) {
  499. U.A.Request(US.FRIEND, ["AddFriend", US.userInfo.userid, news.UserId, _friendid, news.MessageContent, news.MessageDescript], U.MD.F.N.asynAddFriend, [null, news, news.MessageContent, _friendid]); //添加好友到默认分组
  500. }
  501. //如果用户在好友列表,那么直接弹出
  502. else {
  503. U.MD.F.W.popupFriendsForm(_friendinfo);
  504. }
  505. U.MD.F.N.clearNews(newsinfo, news, el); //清除消息
  506. }
  507. /**
  508. * 异步处理确定添加好友
  509. *
  510. * @param {object} 确定添加对方为好友
  511. */
  512. U.MD.F.N.asynAddFriend = function (r) {
  513. var _context = r.context,
  514. _new = _context[1],
  515. _groupid = _context[2],
  516. _friendid = _context[3];
  517. r = r.value;
  518. U.MD.F.M.displayAddFriend(r[0][0], _friendid, _groupid, r); //确定添加好友到好友分组里
  519. }
  520. /**
  521. * 清除所有的消息
  522. *
  523. * @param {array} 所有的消息
  524. */
  525. U.MD.F.N.clearAllNews = function () {
  526. var i, j,
  527. _allids = "",
  528. _allnews = U.MD.F.N.news
  529. ;
  530. //循环获取消息的id
  531. for (i = 0; i < _allnews.length; i++) {
  532. if (_allnews[i]) {
  533. for (j = 0; j < _allnews[i].length; j++) {
  534. _allids += (_allnews[i][j].GroupManageID || _allnews[i][j].MessageID) + ",";
  535. }
  536. _allnews[i].splice(0);
  537. }
  538. }
  539. _allids = _allids.substring(0, _allids.length - 1); //去除最后一位的,
  540. //数据库删除消息处理
  541. U.A.Request(US.CD, [US.DB, "UseStudio_Friends", "DeleteMessageById", _allids, US.userInfo.userid], function () { }, []);
  542. $("#U_MD_D_MG_AFT")[0].innerText = "";
  543. }
  544. /**
  545. * 清除所有的的添加好友信息
  546. *
  547. * @param {array} 所有的消息
  548. * @param {object} 当前的消息
  549. * @param {element} 消息元素
  550. * @param {number} 消息类型
  551. */
  552. U.MD.F.N.clearNews = function (newsinfo, news, el) {
  553. var _messageid = newsinfo.MessageID,
  554. _parentel = $(el).Parent(); //元素的上级元素
  555. //移除单挑消息
  556. U.Json.del(news, { "MessageID": newsinfo.MessageID });
  557. //移除元素
  558. if (_parentel) { $(el).remove(); }
  559. //如果消息已经全部点击完毕的处理
  560. if ($("#U_MD_D_MG_AFT").Child().length == 0) {
  561. $("#U_MD_F_N_Message")[0].close(); //关闭的处理
  562. }
  563. //数据库删除消息处理
  564. U.A.Request(US.CD, [US.DB, "UseStudio_Friends", "DeleteMessageById", _messageid, US.userInfo.userid], function () { }, []);
  565. }
  566. /**
  567. * 学习系统消息处理
  568. *
  569. * @param {array} 除了好友聊天消息,其他消息的处理
  570. */
  571. U.MD.F.N.otherNews = function (news) {
  572. }
  573. /*
  574. 标记未读信息
  575. @param {array} newsarr消息信息数组
  576. */
  577. U.MD.F.N.MarkUnreadMessage = function (newsarr) {
  578. if (newsarr[0].length == 0 && newsarr[1].length == 0) return; //如果两个数组都为空就退出
  579. console.log(newsarr);
  580. var _arr; //申明群变量 和 完成数组
  581. if (newsarr[0].length == 0 || newsarr[1].length == 0) { //如果两个数组有一个为空
  582. if (newsarr[0].length == 0) { //拷贝不为空的数组
  583. _arr = newsarr[1].deepCopy();
  584. } else {
  585. _arr = newsarr[0].deepCopy();
  586. }
  587. } else {
  588. /* for (var _friend = 0; _friend < newsarr[0].length; _friend++) { //遍历好友信息数组
  589. for (var _group = 0; _group < newsarr[1].length; _group++) {
  590. if (U.UF.D.sizeComparison(newsarr[1][_group], newsarr[0][_friend])) {//比较两个时间,哪个时间早,就把哪个信息添加进
  591. _arr.push()
  592. } else {
  593. }
  594. }
  595. }*/
  596. }
  597. //处理好数组,现在进行标注
  598. var _right, _name;
  599. if ($("#U_MD_F_H_M")[0]) { //判断右边div是否存在
  600. _right = $("#U_MD_F_H_M")[0];
  601. } else {
  602. _right = $$("div", { id: "U_MD_F_H_M", style: { top: "18px", left: "38px", position: "absolute" } }, $("#U_MD_F_H_R")[0]);
  603. }
  604. for (var i = 0; i < _arr.length; i++) { //循环消息数组
  605. for (_name in _arr[i]) { //查看消息内容
  606. if (_name.indexOf("Group") == -1) {//判断是否为个人消息
  607. if ($("[tid='M" + _arr[i].UserId + "']", _right)[0]) { //判断红点是否存在 个人消息
  608. $("[tid='M" + _arr[i].UserId + "']", _right)[0].innerHTML = parseInt($("[tid='M" + _arr[i].UserId + "']", _right)[0].innerHTML) + _arr[i].count;
  609. } else {
  610. var _mark = $$("div", { className: "U_Mark", innerHTML: _arr[i].count, tid: "M" + _arr[i].UserId }); //生成红点
  611. _right.appendChild(_mark.cloneNode(true)); //生成右边
  612. _mark.style.margin = 0;
  613. _mark.style.position = "absolute";
  614. _mark.style.left = "48px";
  615. $('#U_MD_F_H_ZLZ')[0].querySelectorAll("[tid='" + _arr[i].UserId + "']")[0].appendChild(_mark); //生成左边
  616. }
  617. } else { //群消息
  618. if ($("[tid='M" + _arr[i].GroupManageID + "']", _right)[0]) { //判断红点是否存在 个人消息
  619. $("[tid='M" + _arr[i].GroupManageID + "']", _right)[0].innerHTML = parseInt($("[tid='M" + _arr[i].GroupManageID + "']", _right)[0].innerHTML) + _arr[i].count;
  620. } else {
  621. var _mark = $$("div", { className: "U_Mark", innerHTML: _arr[i].count, tid: "M" + _arr[i].GroupManageID }); //生成红点
  622. _right.appendChild(_mark.cloneNode(true)); //生成右边
  623. _mark.style.margin = 0;
  624. _mark.style.position = "absolute";
  625. _mark.style.left = "48px";
  626. }
  627. }
  628. return;
  629. }
  630. }
  631. }
  632. /*
  633. 消除标记信息
  634. @param {String} Id 好友信息
  635. */
  636. U.MD.F.N.CanelMarkMessage = function (Id) {
  637. $("[tid='M" + Id + "']").remove(0); //删除左边标记
  638. $("[tid='M" + Id + "']").remove(0); //删除右边标记
  639. }
  640. //#endregion