useChatInit.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import ChatType from '@/utils/ChatType'
  2. import GroupApi from '@/api/GroupApi'
  3. import type User from '@/mode/User'
  4. import UserApi from '@/api/UserApi'
  5. import {ref} from 'vue'
  6. import {useChatStore} from '@/store/chatStore'
  7. import {useUserStore} from '@/store/userStore'
  8. import MessageApi from "@/api/MessageApi";
  9. import type Message from "@/mode/Message";
  10. import {imageLoad} from "@/hooks/useMessageImageLoad";
  11. import type Chat from "@/mode/Chat";
  12. import ChatApi from "@/api/ChatApi";
  13. import dbApi from '@/api/DBactApi';
  14. //用户
  15. const users = ref<Array<User>>()
  16. //群人数
  17. const count = ref(0)
  18. const isValidatedUser = ref(true)
  19. //是否是管理员
  20. const isMaster = ref(false)
  21. //是否是有效用户
  22. function loadMessages(chatId: string, user: User, chatType: string, chat: Chat) {
  23. var lastTimestamp=0;
  24. dbApi.selectLocalmsg(chatId).then((res:any)=>{
  25. if(res){
  26. for (var i=0;i<res.length;i++) {
  27. const msg = JSON.parse(res[i].Message);
  28. useChatStore().addToMessageList(msg,chat,false);
  29. if(msg.timestamp&&!msg.mine){
  30. lastTimestamp=msg.timestamp;
  31. }
  32. }
  33. }
  34. loadMessagesNet(chatId, user, chatType,chat,lastTimestamp);
  35. });
  36. // dbApi.selectmsg(chatId).then((res:any)=>{
  37. // if(res){
  38. // for (var i=0;i<res.length;i++) {
  39. // console.log('读取消息',res)
  40. // useChatStore().addToMessageList(res[i],chat,false);
  41. // if(res[i].timestamp&&res[i].mine==0){
  42. // lastTimestamp=res[i].timestamp;
  43. // }
  44. // }
  45. // }
  46. // loadMessagesNet(chatId, user, chatType,chat,lastTimestamp);
  47. // });
  48. // MessageApi.list(chatId, user.id, chatType, 100).then((res) => {
  49. // //读取历史消息
  50. // console.log('读取消息',res)
  51. // res.data.forEach((item: Message) => {
  52. // useChatStore().addToMessageList(item, chat,false)
  53. // })
  54. // const messageList = useChatStore().chatMessage.get(chatId)
  55. // if(messageList){
  56. // imageLoad(messageList)
  57. // }
  58. // })
  59. }
  60. const loadMessagesNet = (chatId: string, user: User, chatType: string,chat: Chat, lastTimestamp:number) => {
  61. console.log('lastTimestamp',lastTimestamp);
  62. MessageApi.list2(chatId, user.id, chatType, 20,lastTimestamp).then((res) => {
  63. //读取历史消息
  64. //console.log('读取消息',res)
  65. res.data.forEach((item: Message) => {
  66. useChatStore().addToMessageList(item, chat,false)
  67. if(!item.mine){
  68. item.chatId=item.fromId
  69. }
  70. dbApi.insertLocalmsg(item);
  71. })
  72. const messageList = useChatStore().chatMessage.get(chatId);
  73. //console.log(messageList);
  74. if(messageList){
  75. imageLoad(messageList)
  76. }
  77. })
  78. }
  79. const loadUserOrGroup = (chat: Chat, user: User) => {
  80. const chatId = chat.id;
  81. const chatType = chat.type;
  82. useUserStore().storeUser(user.id, {
  83. name: user.name,
  84. avatar: user.avatar
  85. })
  86. if (chatId && chatType === ChatType.GROUP) {
  87. GroupApi.users(chatId).then((res) => {
  88. const chatList: Array<Chat> = []
  89. res.data.forEach((item: User) => {
  90. useUserStore().storeUser(item.id, {
  91. name: item.name,
  92. avatar: item.avatar
  93. })
  94. chatList.push({
  95. type: ChatType.FRIEND,
  96. unreadCount: 0,
  97. id: item.id,
  98. name: item.name,
  99. avatar: item.avatar
  100. })
  101. useChatStore().updateChat(item.id, item.name, item.avatar,false,false)
  102. })
  103. ChatApi.batch(chatList)
  104. users.value = res.data
  105. if(users.value){
  106. isValidatedUser.value = users.value.some((item) => item.id === user?.id)
  107. if(isValidatedUser.value){
  108. //第一次加载,从数据库中取100条,有序插入到聊天记录里
  109. loadMessages(chatId, user, chatType, chat);
  110. }
  111. }
  112. count.value = res.data.length
  113. })
  114. GroupApi.get(chatId).then((res) => {
  115. const group = res.data
  116. isMaster.value = group.master === user?.id
  117. useChatStore().updateChat(chatId, group.name, group.avatar)
  118. })
  119. } else {
  120. isValidatedUser.value = true
  121. UserApi.getUser(chatId).then((res) => {
  122. const chatUser = res.data
  123. useChatStore().updateChat(chatUser.id, chatUser.name, chatUser.avatar)
  124. useUserStore().storeUser(chatUser.id, {
  125. name: chatUser.name,
  126. avatar: chatUser.avatar
  127. })
  128. loadMessages(chatId, user, chatType, chat);
  129. })
  130. }
  131. }
  132. export { loadUserOrGroup, users, count, isMaster, isValidatedUser }