_onSocket.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491
  1. import _data from './_data';
  2. import _get from './_get';
  3. import _mixins from './_mixins';
  4. import _action from './_action';
  5. import _page from "./common";
  6. import SDK from "./tendenceImSdk";
  7. // #ifdef APP-PLUS
  8. const call = uni.requireNativePlugin('TencentCloud-TUICallKit');
  9. // let call = uni.requireNativePlugin('TUICallingUniPlugin-TUICallingModule')
  10. // #endif
  11. export default {
  12. closeVoiceRoom() {
  13. uni.$emit('closeVoiceRoom', {})
  14. },
  15. getVoiceRoom(params) {
  16. let route = _page.getRoute();
  17. if (route.indexOf('chat/message') > -1) {
  18. _get.checkVoiceRoomState(params, function(ret) {
  19. //加入
  20. uni.$emit('memberJoinRoom', ret)
  21. })
  22. }
  23. },
  24. clientLink(data) {
  25. _data.localData('client_id', data.client_id);
  26. },
  27. cancleVedio(data) {
  28. // #ifdef APP-PLUS
  29. call.logout();
  30. // #endif
  31. uni.$emit('close_call', data);
  32. },
  33. vedioData(data) {
  34. //判断是否在线发送视频邀请
  35. if (!_data.data('isOnlie')) {
  36. _page.pushVedioLocalMsg(data);
  37. } else {
  38. console.log(data);
  39. // uni.navigateTo({
  40. // url: '/pages/chat/videoCall?'+_page.pageParam(data)
  41. // });
  42. }
  43. return true;
  44. },
  45. /** 验证token */
  46. checkToken(res) {
  47. if (res.err) {
  48. _action.checkFail();
  49. } else {
  50. /** 获取基础数据 */
  51. _get.base();
  52. }
  53. },
  54. /** 下线 */
  55. offline(res) {
  56. uni.showModal({
  57. content: '你的账号在另一客户端登陆,如果不是你本人操作,请修改你的密码',
  58. success() {
  59. _action.checkFail();
  60. },
  61. });
  62. },
  63. /** 获得会话列表 */
  64. getChatList() {
  65. _get.getChatList();
  66. },
  67. /** 获得好友列表 */
  68. getFriendList() {
  69. _get.getFriendList({
  70. up: 1
  71. });
  72. },
  73. /** 新好友提醒 */
  74. newFriend(data) {
  75. _action.playVoice('/static/voice/friend.mp3');
  76. let num = _data.data('new_friend_tips_num') + (data.num * 1);
  77. _data.data('new_friend_tips_num', num);
  78. _action.setStatusTips();
  79. },
  80. /** 点赞提醒 */
  81. circleLike(data) {
  82. _action.playVoice('/static/voice/circle.mp3');
  83. //通知朋友圈
  84. let circle_data = _data.localData('circle_data');
  85. for (let i = 0, j = circle_data.length; i < j; i++) {
  86. if (circle_data[i].post_id == data.id) {
  87. console.log('circleLike1...')
  88. circle_data[i].like = data.likes;
  89. circle_data[i].islike = data.action;
  90. _data.localData('circle_data', circle_data);
  91. uni.$emit('data_circle_data', circle_data);
  92. break;
  93. }
  94. }
  95. let circle_data_user = _data.localData('circle_data_user');
  96. for (let i = 0, j = circle_data_user.length; i < j; i++) {
  97. if (circle_data_user[i].post_id == data.id) {
  98. console.log('circleLike2...')
  99. circle_data_user[i].like = data.likes;
  100. circle_data_user[i].islike = data.action;
  101. _data.localData('circle_data_user', circle_data_user);
  102. uni.$emit('data_circle_data_user', circle_data_user);
  103. break;
  104. }
  105. }
  106. },
  107. addChatList() { //田百合花
  108. },
  109. timeData(data) { //田百合花
  110. uni.$emit('newReadTime', data.data.msg.time)
  111. // uni.setStorageSync(data.list_id+'_time',data.data.msg.time);
  112. },
  113. /** 接收新消息 */
  114. chatData(data) {
  115. console.log("删除成员", data);
  116. if (!_data.localData('token')) return false;
  117. let chat_data = _data.localData(data.list_id),
  118. brate = _data.localData('DISTURB:' + data.list_id),
  119. msg_reader_num = 0;
  120. /** 如果不是自己的消息,在这条会话界面,震动提示,没有在这条会话界面,震动加声音提示 */
  121. if (_data.data('user_info').id != data.data.msg.user_info.uid) {
  122. console.log('到这里');
  123. // #ifdef APP-PLUS
  124. _page.pushLocalMsg(data);
  125. if (brate == 0 || brate == undefined || brate == null) {
  126. uni.vibrateLong();
  127. }
  128. // #endif
  129. //在列表则更新未读状态
  130. if (_data.localData('message_list_id') == data.list_id) {
  131. _action.updataNoReader(data.list_id);
  132. } else {
  133. //否则声音提示
  134. if (brate == 0 || brate == undefined || brate == null) {
  135. _action.playVoice('/static/voice/chat.mp3');
  136. }
  137. msg_reader_num = 1;
  138. }
  139. }
  140. /** 更新对话列表数据 */
  141. let action_list_data = {};
  142. for (let i = 0, local_chat_list = _data.localData('chat_list'), j = local_chat_list.length; i < j; i++) {
  143. if (local_chat_list[i].list_id == data.list_id) {
  144. switch (data.data.msg.type * 1) {
  145. case 0:
  146. local_chat_list[i].last_msg = data.data.msg.content.text;
  147. break;
  148. case 1:
  149. /** 语音 */
  150. local_chat_list[i].last_msg = '[语音]';
  151. break;
  152. case 2:
  153. /** 图片 */
  154. local_chat_list[i].last_msg = '[图片]';
  155. break;
  156. case 3:
  157. /** 视频 */
  158. local_chat_list[i].last_msg = '[视频]';
  159. break;
  160. case 4:
  161. /** 文件 */
  162. local_chat_list[i].last_msg = '[文件]';
  163. break;
  164. case 5:
  165. /** 红包 */
  166. local_chat_list[i].last_msg = '[红包]';
  167. break;
  168. case 6:
  169. /** 在线视频 */
  170. local_chat_list[i].last_msg = '[在线视频]';
  171. break;
  172. case 7:
  173. /** 在线语音 */
  174. local_chat_list[i].last_msg = '[在线语音]';
  175. break;
  176. case 8:
  177. /** 名片 */
  178. local_chat_list[i].last_msg = '[名片]';
  179. break;
  180. case 9:
  181. /** 名片 */
  182. local_chat_list[i].last_msg = '[戳一戳]';
  183. uni.vibrateLong();
  184. break;
  185. default:
  186. /** 未知消息类型 */
  187. local_chat_list[i].last_msg = '[未知]';
  188. break;
  189. }
  190. // todo屏蔽 @群朋友 如果屏蔽消息,则不提示
  191. // if(local_chat_list[i].is_disturb == 1){
  192. // // 如果屏蔽,但是@本人和所有人all,则提示消息
  193. // if (data.data.msg.content && data.data.msg.content.user_id){
  194. // if(data.data.msg.content.user_id.indexOf(_data.data('user_info').id)>-1 || data.data.msg.content.user_id.indexOf('all')>-1){
  195. // local_chat_list[i].no_reader_num += msg_reader_num;
  196. // }
  197. // }
  198. // }else{
  199. // local_chat_list[i].no_reader_num += msg_reader_num;
  200. // }
  201. local_chat_list[i].no_reader_num += msg_reader_num;
  202. local_chat_list[i].time = data.data.msg.time;
  203. local_chat_list.sort((x, y) => {
  204. if (x.top > y.top) {
  205. return -1;
  206. }
  207. if (x.time > y.time) {
  208. return -1;
  209. }
  210. })
  211. _data.localData('chat_list', local_chat_list);
  212. uni.$emit('data_chat_list', local_chat_list);
  213. action_list_data = local_chat_list[i];
  214. break;
  215. }
  216. }
  217. if (!Object.keys(action_list_data).length) {
  218. //如果没有则新增
  219. action_list_data.list_id = data.list_id;
  220. action_list_data.chat_id = data.data.msg.id;
  221. action_list_data.no_reader_num = 1;
  222. action_list_data.photo_path = data.data.msg.user_info.face;
  223. action_list_data.show_name = data.data.msg.user_info.name;
  224. action_list_data.time = data.data.msg.time;
  225. action_list_data.last_msg = data.data.msg.content.text;
  226. action_list_data.top = 0;
  227. action_list_data.top_time = 0;
  228. action_list_data.type = data.data.type;
  229. let chat_list = _data.localData('chat_list');
  230. chat_list.splice(0, 0, action_list_data);
  231. //排序首选根据top排序,然后根据time排序
  232. chat_list = chat_list.slice(0, 30);
  233. chat_list.sort((x, y) => {
  234. if (x.top == y.top) {
  235. y.time - x.time;
  236. } else {
  237. return y.top - x.top;
  238. }
  239. })
  240. _data.localData('chat_list', chat_list);
  241. uni.$emit('data_chat_list', chat_list);
  242. }
  243. /** 在有这条对话的缓存数据情况下 */
  244. if (chat_data) {
  245. chat_data.list.push(data.data);
  246. chat_data.list = chat_data.list.slice(-15);
  247. _data.localData(data.list_id, chat_data);
  248. /** 如果在与对方的对话界面,发送数据到页面显示 */
  249. if (_data.localData('message_list_id') == data.list_id) {
  250. /** 保持页面15条数据,提升性能 */
  251. uni.$emit('data_chat_data_push', chat_data.list);
  252. }
  253. }
  254. _action.setStatusTips();
  255. },
  256. /** 接收好友朋友圈动态提示 */
  257. circleTips(data) {
  258. _action.playVoice('/static/voice/circle.mp3');
  259. _data.data('no_reader_circle', 1);
  260. _action.setStatusTips();
  261. },
  262. /** 接收朋友圈好友回复/赞通知 */
  263. cricleChatTips(data) {
  264. _action.playVoice('/static/voice/circle.mp3');
  265. let num = _data.data('no_reader_circle_chat_num');
  266. num++;
  267. _data.data('no_reader_circle_chat_num', num);
  268. _action.setStatusTips();
  269. },
  270. /** 撤回消息 */
  271. deleteChat(data) {
  272. let chat_data = _data.localData(data.list_id);
  273. for (let i = 0, j = chat_data.list.length; i < j; i++) {
  274. if (chat_data.list[i].msg.id == data.data.msg.id) {
  275. chat_data.list[i] = data.data;
  276. _data.localData(data.list_id, chat_data);
  277. uni.$emit('data_chat_data_delete', chat_data.list);
  278. break;
  279. }
  280. }
  281. },
  282. // 系统删除一条会话
  283. adminDeleteChat(data) {
  284. let chat_data = _data.localData(data.list_id);
  285. for (let i = 0, j = chat_data.list.length; i < j; i++) {
  286. if (chat_data.list[i].msg.id == data.data.msg.id) {
  287. // chat_data.list[i] = data.data;
  288. chat_data.list.splice(i, 1);
  289. _data.localData(data.list_id, chat_data);
  290. uni.$emit('data_chat_data_delete', chat_data.list);
  291. break;
  292. }
  293. }
  294. },
  295. /** 加群申请 */
  296. chatGroupApply(data) {
  297. let local_data = _data.localData('group_apply_list');
  298. if (!local_data) {
  299. local_data = [];
  300. }
  301. local_data.push(data);
  302. _data.localData('group_apply_list', local_data);
  303. uni.$emit('data_group_apply_data', local_data);
  304. let num = _data.data('new_group_tips_num');
  305. num++;
  306. _data.data('new_group_tips_num', num);
  307. _action.playVoice('/static/voice/friend.mp3');
  308. _action.setStatusTips();
  309. },
  310. /** 通知群管理已处理 */
  311. groupChatApplyAllow(id) {
  312. let local_data = _data.localData('group_apply_list');
  313. for (let value of local_data) {
  314. if (value.id == id) {
  315. value.status = 1;
  316. value.text = '已接受';
  317. let num = _data.data('new_group_tips_num');
  318. num--;
  319. if (num < 0) {
  320. num = 0;
  321. }
  322. _data.data('new_group_tips_num', num);
  323. }
  324. break;
  325. }
  326. _data.localData('group_apply_list', local_data);
  327. uni.$emit('data_group_apply_data', local_data);
  328. _action.setStatusTips();
  329. },
  330. // 清空双方聊天记录(对话)
  331. chat_del(data) {
  332. _data.localData(data.list_id, null);
  333. uni.$emit('chat_del', data.list_id);
  334. },
  335. // 删除群聊
  336. group_del(data) {
  337. /** 删除对话列表缓存数据 */
  338. let show_name = '';
  339. for (let i = 0, local_chat_list = _data.localData('chat_list'), j = local_chat_list.length; i < j; i++) {
  340. if (local_chat_list[i].list_id == data.list_id) {
  341. let del_group = local_chat_list.splice(i, 1);
  342. // console.log("删除群的属性", del_group);
  343. show_name = del_group[0].show_name;
  344. _data.localData('chat_list', local_chat_list);
  345. uni.$emit('data_chat_list', local_chat_list);
  346. break;
  347. }
  348. }
  349. /** 删除对话缓存数据 */
  350. _data.localData(data.list_id, null);
  351. uni.showModal({
  352. title: show_name + ' 群聊已经被解散了!',
  353. showCancel: false,
  354. success: function(res) {
  355. uni.switchTab({
  356. url: '/pages/chat/index'
  357. })
  358. }
  359. });
  360. },
  361. //清除群聊某些消息
  362. groupDeleteChat(data) {
  363. console.log("清空群聊消息", data);
  364. uni.$emit('group_delete_chat', data.list_id);
  365. },
  366. // todo清除移除会员的记录
  367. removeMember(data) {
  368. console.log("清空成员消息", data);
  369. uni.$emit('remove_member', data.list_id);
  370. },
  371. /** 解散群 */
  372. removeGroup(data) {
  373. /** 删除对话列表缓存数据 */
  374. for (let i = 0, local_chat_list = _data.localData('chat_list'), j = local_chat_list.length; i < j; i++) {
  375. if (local_chat_list[i].list_id == data.list_id) {
  376. local_chat_list.splice(i, 1);
  377. _data.localData('chat_list', local_chat_list);
  378. uni.$emit('data_chat_list', local_chat_list);
  379. break;
  380. }
  381. }
  382. /** 删除对话缓存数据 */
  383. _data.localData(data.list_id, null);
  384. uni.showModal({
  385. title: data.group_name + ' 群聊已经被群主解散了!',
  386. });
  387. },
  388. //付款消息
  389. payAmount(data) {
  390. _action.playVoice('/static/voice/chat.mp3');
  391. let local_data = _data.data('data_pay_tips');
  392. local_data = parseInt(local_data);
  393. if (local_data <= 0) {
  394. local_data = 0
  395. }
  396. local_data++;
  397. _data.data('data_pay_tips', local_data);
  398. uni.$emit('pay_amount_after', data)
  399. uni.$emit('data_user_info', data);
  400. _data.data('user_info', data);
  401. _action.setStatusTips();
  402. },
  403. collectAmount(data) {
  404. _action.playVoice('/static/voice/chat.mp3');
  405. let user_info = data.user_info;
  406. user_info.amount = data.amount;
  407. uni.navigateTo({
  408. url: '/pages/pay/collect_money?' + _page.pageParam(user_info)
  409. })
  410. },
  411. //在线支付成功通知
  412. onlinePaySuccess(data) {
  413. uni.$emit('data_user_info', data);
  414. _data.data('user_info', data);
  415. },
  416. cricleComment(data) {
  417. let comment = data.comment;
  418. let circle = _data.localData('circle_data');
  419. for (let i = 0, j = circle.length; i < j; i++) {
  420. if (circle[i].post_id == data.circle_id) {
  421. circle[i].comments.push(data.comment)
  422. _data.localData('circle_data', circle);
  423. uni.$emit('data_circle_data', circle);
  424. break;
  425. }
  426. }
  427. let circle_user = _data.localData('circle_data_user');
  428. for (let i = 0, j = circle_user.length; i < j; i++) {
  429. console.log('circle_user[i]:', circle_user[i])
  430. if (circle_user[i].post_id == data.circle_id) {
  431. circle_user[i].comments.push(data.comment)
  432. _data.localData('circle_data_user', circle_user);
  433. uni.$emit('data_circle_data_user', circle_user);
  434. break;
  435. }
  436. }
  437. },
  438. //购买成功通知
  439. payCircleOrder(data) {
  440. console.log('payCircleOrder....')
  441. _action.playVoice('/static/voice/circle.mp3');
  442. //通知朋友圈
  443. let circle_data = _data.localData('circle_data');
  444. for (let i = 0, j = circle_data.length; i < j; i++) {
  445. if (circle_data[i].post_id == data.circle_id) {
  446. console.log('circle_data11[i]', circle_data[i])
  447. circle_data[i].can_pay_times = data.can_pay_times;
  448. _data.localData('circle_data', circle_data);
  449. uni.$emit('data_circle_data', circle_data);
  450. break;
  451. }
  452. }
  453. let circle_data_user = _data.localData('circle_data_user');
  454. for (let i = 0, j = circle_data_user.length; i < j; i++) {
  455. if (circle_data_user[i].post_id == data.circle_id) {
  456. circle_data_user[i].can_pay_times = data.can_pay_times;
  457. _data.localData('circle_data_user', circle_data_user);
  458. uni.$emit('data_circle_data_user', circle_data_user);
  459. break;
  460. }
  461. }
  462. },
  463. memberIsOnline() { //消息提醒
  464. _action.playVoice('/static/voice/chat.mp3');
  465. },
  466. setMessagePageTitle(data) { //设置聊天页面的title
  467. console.log("设置标题:", data)
  468. let chat_data = _data.localData(data.list_id);
  469. chat_data.show_name = data.show_name;
  470. _data.localData(data.list_id, chat_data);
  471. },
  472. zhenDong(data) {
  473. let user_id = _data.data('user_info').id;
  474. console.log("USER_ID", user_id);
  475. if (user_id != data['user_id']) {
  476. // #ifdef APP-PLUS
  477. uni.vibrateLong();
  478. // #endif
  479. }
  480. }
  481. }