_onSocket.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
  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. // #ifdef APP-PLUS
  123. _page.pushLocalMsg(data);
  124. if (brate == 0 || brate == undefined || brate == null) {
  125. uni.vibrateLong();
  126. }
  127. // #endif
  128. //在列表则更新未读状态
  129. if (_data.localData('message_list_id') == data.list_id) {
  130. _action.updataNoReader(data.list_id);
  131. } else {
  132. //否则声音提示
  133. if (brate == 0 || brate == undefined || brate == null) {
  134. _action.playVoice('/static/voice/chat.mp3');
  135. }
  136. msg_reader_num = 1;
  137. }
  138. }
  139. /** 更新对话列表数据 */
  140. let action_list_data = {};
  141. for (let i = 0, local_chat_list = _data.localData('chat_list'), j = local_chat_list.length; i < j; i++) {
  142. if (local_chat_list[i].list_id == data.list_id) {
  143. switch (data.data.msg.type * 1) {
  144. case 0:
  145. local_chat_list[i].last_msg = data.data.msg.content.text;
  146. break;
  147. case 1:
  148. /** 语音 */
  149. local_chat_list[i].last_msg = '[语音]';
  150. break;
  151. case 2:
  152. /** 图片 */
  153. local_chat_list[i].last_msg = '[图片]';
  154. break;
  155. case 3:
  156. /** 视频 */
  157. local_chat_list[i].last_msg = '[视频]';
  158. break;
  159. case 4:
  160. /** 文件 */
  161. local_chat_list[i].last_msg = '[文件]';
  162. break;
  163. case 5:
  164. /** 红包 */
  165. local_chat_list[i].last_msg = '[红包]';
  166. break;
  167. case 6:
  168. /** 在线视频 */
  169. local_chat_list[i].last_msg = '[在线视频]';
  170. break;
  171. case 7:
  172. /** 在线语音 */
  173. local_chat_list[i].last_msg = '[在线语音]';
  174. break;
  175. case 8:
  176. /** 名片 */
  177. local_chat_list[i].last_msg = '[名片]';
  178. break;
  179. case 9:
  180. /** 名片 */
  181. local_chat_list[i].last_msg = '[戳一戳]';
  182. uni.vibrateLong();
  183. break;
  184. default:
  185. /** 未知消息类型 */
  186. local_chat_list[i].last_msg = '[未知]';
  187. break;
  188. }
  189. // todo屏蔽 @群朋友 如果屏蔽消息,则不提示
  190. // if(local_chat_list[i].is_disturb == 1){
  191. // // 如果屏蔽,但是@本人和所有人all,则提示消息
  192. // if (data.data.msg.content && data.data.msg.content.user_id){
  193. // if(data.data.msg.content.user_id.indexOf(_data.data('user_info').id)>-1 || data.data.msg.content.user_id.indexOf('all')>-1){
  194. // local_chat_list[i].no_reader_num += msg_reader_num;
  195. // }
  196. // }
  197. // }else{
  198. // local_chat_list[i].no_reader_num += msg_reader_num;
  199. // }
  200. local_chat_list[i].no_reader_num += msg_reader_num;
  201. local_chat_list[i].time = data.data.msg.time;
  202. local_chat_list.sort((x, y) => {
  203. if (x.top > y.top) {
  204. return -1;
  205. }
  206. if (x.time > y.time) {
  207. return -1;
  208. }
  209. })
  210. _data.localData('chat_list', local_chat_list);
  211. uni.$emit('data_chat_list', local_chat_list);
  212. action_list_data = local_chat_list[i];
  213. break;
  214. }
  215. }
  216. if (!Object.keys(action_list_data).length) {
  217. //如果没有则新增
  218. action_list_data.list_id = data.list_id;
  219. action_list_data.chat_id = data.data.msg.id;
  220. action_list_data.no_reader_num = 1;
  221. action_list_data.photo_path = data.data.msg.user_info.face;
  222. action_list_data.show_name = data.data.msg.user_info.name;
  223. action_list_data.time = data.data.msg.time;
  224. action_list_data.last_msg = data.data.msg.content.text;
  225. action_list_data.top = 0;
  226. action_list_data.top_time = 0;
  227. action_list_data.type = data.data.type;
  228. let chat_list = _data.localData('chat_list');
  229. chat_list.splice(0, 0, action_list_data);
  230. //排序首选根据top排序,然后根据time排序
  231. chat_list = chat_list.slice(0, 30);
  232. chat_list.sort((x, y) => {
  233. if (x.top == y.top) {
  234. y.time - x.time;
  235. } else {
  236. return y.top - x.top;
  237. }
  238. })
  239. _data.localData('chat_list', chat_list);
  240. uni.$emit('data_chat_list', chat_list);
  241. }
  242. /** 在有这条对话的缓存数据情况下 */
  243. if (chat_data) {
  244. chat_data.list.push(data.data);
  245. chat_data.list = chat_data.list.slice(-15);
  246. _data.localData(data.list_id, chat_data);
  247. /** 如果在与对方的对话界面,发送数据到页面显示 */
  248. if (_data.localData('message_list_id') == data.list_id) {
  249. /** 保持页面15条数据,提升性能 */
  250. uni.$emit('data_chat_data_push', chat_data.list);
  251. }
  252. }
  253. _action.setStatusTips();
  254. },
  255. /** 接收好友朋友圈动态提示 */
  256. circleTips(data) {
  257. _action.playVoice('/static/voice/circle.mp3');
  258. _data.data('no_reader_circle', 1);
  259. _action.setStatusTips();
  260. },
  261. /** 接收朋友圈好友回复/赞通知 */
  262. cricleChatTips(data) {
  263. _action.playVoice('/static/voice/circle.mp3');
  264. let num = _data.data('no_reader_circle_chat_num');
  265. num++;
  266. _data.data('no_reader_circle_chat_num', num);
  267. _action.setStatusTips();
  268. },
  269. /** 撤回消息 */
  270. deleteChat(data) {
  271. let chat_data = _data.localData(data.list_id);
  272. for (let i = 0, j = chat_data.list.length; i < j; i++) {
  273. if (chat_data.list[i].msg.id == data.data.msg.id) {
  274. chat_data.list[i] = data.data;
  275. _data.localData(data.list_id, chat_data);
  276. uni.$emit('data_chat_data_delete', chat_data.list);
  277. break;
  278. }
  279. }
  280. },
  281. // 系统删除一条会话
  282. adminDeleteChat(data) {
  283. let chat_data = _data.localData(data.list_id);
  284. for (let i = 0, j = chat_data.list.length; i < j; i++) {
  285. if (chat_data.list[i].msg.id == data.data.msg.id) {
  286. // chat_data.list[i] = data.data;
  287. chat_data.list.splice(i, 1);
  288. _data.localData(data.list_id, chat_data);
  289. uni.$emit('data_chat_data_delete', chat_data.list);
  290. break;
  291. }
  292. }
  293. },
  294. /** 加群申请 */
  295. chatGroupApply(data) {
  296. let local_data = _data.localData('group_apply_list');
  297. if (!local_data) {
  298. local_data = [];
  299. }
  300. local_data.push(data);
  301. _data.localData('group_apply_list', local_data);
  302. uni.$emit('data_group_apply_data', local_data);
  303. let num = _data.data('new_group_tips_num');
  304. num++;
  305. _data.data('new_group_tips_num', num);
  306. _action.playVoice('/static/voice/friend.mp3');
  307. _action.setStatusTips();
  308. },
  309. /** 通知群管理已处理 */
  310. groupChatApplyAllow(id) {
  311. let local_data = _data.localData('group_apply_list');
  312. for (let value of local_data) {
  313. if (value.id == id) {
  314. value.status = 1;
  315. value.text = '已接受';
  316. let num = _data.data('new_group_tips_num');
  317. num--;
  318. if (num < 0) {
  319. num = 0;
  320. }
  321. _data.data('new_group_tips_num', num);
  322. }
  323. break;
  324. }
  325. _data.localData('group_apply_list', local_data);
  326. uni.$emit('data_group_apply_data', local_data);
  327. _action.setStatusTips();
  328. },
  329. // 清空双方聊天记录(对话)
  330. chat_del(data) {
  331. _data.localData(data.list_id, null);
  332. uni.$emit('chat_del', data.list_id);
  333. },
  334. // 删除群聊
  335. group_del(data) {
  336. /** 删除对话列表缓存数据 */
  337. let show_name = '';
  338. for (let i = 0, local_chat_list = _data.localData('chat_list'), j = local_chat_list.length; i < j; i++) {
  339. if (local_chat_list[i].list_id == data.list_id) {
  340. let del_group = local_chat_list.splice(i, 1);
  341. // console.log("删除群的属性", del_group);
  342. show_name = del_group[0].show_name;
  343. _data.localData('chat_list', local_chat_list);
  344. uni.$emit('data_chat_list', local_chat_list);
  345. break;
  346. }
  347. }
  348. /** 删除对话缓存数据 */
  349. _data.localData(data.list_id, null);
  350. uni.showModal({
  351. title: show_name + ' 群聊已经被解散了!',
  352. showCancel: false,
  353. success: function(res) {
  354. uni.switchTab({
  355. url: '/pages/chat/index'
  356. })
  357. }
  358. });
  359. },
  360. //清除群聊某些消息
  361. groupDeleteChat(data) {
  362. console.log("清空群聊消息", data);
  363. uni.$emit('group_delete_chat', data.list_id);
  364. },
  365. // todo清除移除会员的记录
  366. removeMember(data) {
  367. console.log("清空成员消息", data);
  368. uni.$emit('remove_member', data.list_id);
  369. },
  370. /** 解散群 */
  371. removeGroup(data) {
  372. /** 删除对话列表缓存数据 */
  373. for (let i = 0, local_chat_list = _data.localData('chat_list'), j = local_chat_list.length; i < j; i++) {
  374. if (local_chat_list[i].list_id == data.list_id) {
  375. local_chat_list.splice(i, 1);
  376. _data.localData('chat_list', local_chat_list);
  377. uni.$emit('data_chat_list', local_chat_list);
  378. break;
  379. }
  380. }
  381. /** 删除对话缓存数据 */
  382. _data.localData(data.list_id, null);
  383. uni.showModal({
  384. title: data.group_name + ' 群聊已经被群主解散了!',
  385. });
  386. },
  387. //付款消息
  388. payAmount(data) {
  389. _action.playVoice('/static/voice/chat.mp3');
  390. let local_data = _data.data('data_pay_tips');
  391. local_data = parseInt(local_data);
  392. if (local_data <= 0) {
  393. local_data = 0
  394. }
  395. local_data++;
  396. _data.data('data_pay_tips', local_data);
  397. uni.$emit('pay_amount_after', data)
  398. uni.$emit('data_user_info', data);
  399. _data.data('user_info', data);
  400. _action.setStatusTips();
  401. },
  402. collectAmount(data) {
  403. _action.playVoice('/static/voice/chat.mp3');
  404. let user_info = data.user_info;
  405. user_info.amount = data.amount;
  406. uni.navigateTo({
  407. url: '/pages/pay/collect_money?' + _page.pageParam(user_info)
  408. })
  409. },
  410. //在线支付成功通知
  411. onlinePaySuccess(data) {
  412. uni.$emit('data_user_info', data);
  413. _data.data('user_info', data);
  414. },
  415. cricleComment(data) {
  416. let comment = data.comment;
  417. let circle = _data.localData('circle_data');
  418. for (let i = 0, j = circle.length; i < j; i++) {
  419. if (circle[i].post_id == data.circle_id) {
  420. circle[i].comments.push(data.comment)
  421. _data.localData('circle_data', circle);
  422. uni.$emit('data_circle_data', circle);
  423. break;
  424. }
  425. }
  426. let circle_user = _data.localData('circle_data_user');
  427. for (let i = 0, j = circle_user.length; i < j; i++) {
  428. console.log('circle_user[i]:', circle_user[i])
  429. if (circle_user[i].post_id == data.circle_id) {
  430. circle_user[i].comments.push(data.comment)
  431. _data.localData('circle_data_user', circle_user);
  432. uni.$emit('data_circle_data_user', circle_user);
  433. break;
  434. }
  435. }
  436. },
  437. //购买成功通知
  438. payCircleOrder(data) {
  439. console.log('payCircleOrder....')
  440. _action.playVoice('/static/voice/circle.mp3');
  441. //通知朋友圈
  442. let circle_data = _data.localData('circle_data');
  443. for (let i = 0, j = circle_data.length; i < j; i++) {
  444. if (circle_data[i].post_id == data.circle_id) {
  445. console.log('circle_data11[i]', circle_data[i])
  446. circle_data[i].can_pay_times = data.can_pay_times;
  447. _data.localData('circle_data', circle_data);
  448. uni.$emit('data_circle_data', circle_data);
  449. break;
  450. }
  451. }
  452. let circle_data_user = _data.localData('circle_data_user');
  453. for (let i = 0, j = circle_data_user.length; i < j; i++) {
  454. if (circle_data_user[i].post_id == data.circle_id) {
  455. circle_data_user[i].can_pay_times = data.can_pay_times;
  456. _data.localData('circle_data_user', circle_data_user);
  457. uni.$emit('data_circle_data_user', circle_data_user);
  458. break;
  459. }
  460. }
  461. },
  462. memberIsOnline() { //消息提醒
  463. _action.playVoice('/static/voice/chat.mp3');
  464. },
  465. setMessagePageTitle(data) { //设置聊天页面的title
  466. console.log("设置标题:", data)
  467. let chat_data = _data.localData(data.list_id);
  468. chat_data.show_name = data.show_name;
  469. _data.localData(data.list_id, chat_data);
  470. },
  471. zhenDong(data) {
  472. let user_id = _data.data('user_info').id;
  473. console.log("USER_ID", user_id);
  474. if (user_id != data['user_id']) {
  475. // #ifdef APP-PLUS
  476. uni.vibrateLong();
  477. // #endif
  478. }
  479. }
  480. }