_onSocket.js 13 KB

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