Kaynağa Gözat

feat: 修改扫码,和那个单聊的弹起问题还有关注的问题

suwenjiang 1 ay önce
ebeveyn
işleme
0c3bf6852e

+ 1 - 1
src/pages/chat/components/chat-message/index.vue

@@ -15,7 +15,7 @@
 <!--      <template v-if="msg.web_message_status">
 <!--      <template v-if="msg.web_message_status">
         <div class="w-16 h-16 rounded-full bg-amber-950 text-sm grid place-content-center text-white">!</div>
         <div class="w-16 h-16 rounded-full bg-amber-950 text-sm grid place-content-center text-white">!</div>
       </template>-->
       </template>-->
-      <div v-if="msg.web_message_status" class="self-center text-sm mx-5 text-black-9">
+      <div v-if="msg.viewType === 0 && msg.web_message_status" class="self-center text-sm mx-5 text-black-9">
         <van-loading v-if="msg.web_message_status === chatsStore.WEB_MESSAGE_STATUS.loading" size="16" />
         <van-loading v-if="msg.web_message_status === chatsStore.WEB_MESSAGE_STATUS.loading" size="16" />
         <van-icon v-if="msg.web_message_status === chatsStore.WEB_MESSAGE_STATUS.error" name="warning" size="16"  color="#fa9819"/>
         <van-icon v-if="msg.web_message_status === chatsStore.WEB_MESSAGE_STATUS.error" name="warning" size="16"  color="#fa9819"/>
       </div>
       </div>

+ 0 - 7
src/pages/chat/group-add.vue

@@ -208,8 +208,6 @@ const getList = async () => {
     })
     })
 
 
     if (Array.isArray(data) && data?.length) {
     if (Array.isArray(data) && data?.length) {
-      // const { sortListMap } = sortStringToAZ.sort(data, 'showName')
-
       addDataList.value = data
       addDataList.value = data
       filterDataList.value = data
       filterDataList.value = data
     } else {
     } else {
@@ -247,11 +245,6 @@ async function handleCreateGroup() {
     if (data) {
     if (data) {
       getList()
       getList()
       router.back()
       router.back()
-      // navigateTo({
-      //   path: '/chat/group-chat',
-      //   query: data,
-      //   replace: true
-      // })
     }
     }
   } catch (error) {
   } catch (error) {
   } finally {
   } finally {

+ 18 - 11
src/pages/chat/group-chat.vue

@@ -70,12 +70,12 @@
           <ChatMessage :show-name="true" :message="message"></ChatMessage>
           <ChatMessage :show-name="true" :message="message"></ChatMessage>
         </template>
         </template>
         <div v-if="chatErrorText" class="text-[#979797] text-sm text-center mt-auto mb-10">
         <div v-if="chatErrorText" class="text-[#979797] text-sm text-center mt-auto mb-10">
-          {{chatErrorText}}
+          {{ chatErrorText }}
         </div>
         </div>
         <!-- </div> -->
         <!-- </div> -->
       </van-list>
       </van-list>
       <!-- </van-pull-refresh> -->
       <!-- </van-pull-refresh> -->
-      <div class="h-70 w-full bg-[#fff] border"></div>
+      <div class="h-70 w-full bg-[#fff]"></div>
       <div class="fixed bottom-0 left-0 right-0 w-full bg-[#fff]">
       <div class="fixed bottom-0 left-0 right-0 w-full bg-[#fff]">
         <ChatInput
         <ChatInput
           :operates="['image', 'share-group']"
           :operates="['image', 'share-group']"
@@ -104,6 +104,7 @@ import ChatInput from './components/chat-input'
 import { findHyperlinks } from '~/pages/chat/components/chat-message/link-message/handle'
 import { findHyperlinks } from '~/pages/chat/components/chat-message/link-message/handle'
 import { XYWebSocket } from '~/utils/XYWebSocket'
 import { XYWebSocket } from '~/utils/XYWebSocket'
 import { isValidJson } from '~/utils'
 import { isValidJson } from '~/utils'
+import defaultAvatar from '@/assets/img/default_avatar.png'
 
 
 const finished = ref(false)
 const finished = ref(false)
 const loading = ref(false)
 const loading = ref(false)
@@ -204,7 +205,7 @@ const sendTextMessage = async (text) => {
       object: {
       object: {
         id: getLocalId(),
         id: getLocalId(),
         // TODO 聊天时候改了头像昵称 会出现找不到的情况
         // TODO 聊天时候改了头像昵称 会出现找不到的情况
-        headImageUrl: userInfo?.value.headImageUrl,
+        headImageUrl: userInfo.value.headImageUrl ? userInfo.value?.headImageUrl : defaultAvatar,
         showName: userInfo?.value.showName,
         showName: userInfo?.value.showName,
         web_message_status: chatsStore.WEB_MESSAGE_STATUS.loading
         web_message_status: chatsStore.WEB_MESSAGE_STATUS.loading
       }
       }
@@ -213,8 +214,11 @@ const sendTextMessage = async (text) => {
     if (isLink) msg.messageType = 4
     if (isLink) msg.messageType = 4
     currConversationChatList.value.push(msg)
     currConversationChatList.value.push(msg)
     await scrollToBottom()
     await scrollToBottom()
-    const backMessage = await chatsStore.sendSocketMessage(msg);
-    const {index, message} = chatsStore.updateBackMessage(currConversationChatList.value, backMessage);
+    const backMessage = await chatsStore.sendSocketMessage(msg)
+    const { index, message } = chatsStore.updateBackMessage(
+      currConversationChatList.value,
+      backMessage
+    )
     currConversationChatList.value[index] = message
     currConversationChatList.value[index] = message
   } catch (e) {
   } catch (e) {
     // console.log(e, '2')
     // console.log(e, '2')
@@ -249,7 +253,7 @@ const sendImageMessage = async (file) => {
       object: {
       object: {
         id: getLocalId(),
         id: getLocalId(),
         // TODO 聊天时候改了头像昵称 会出现找不到的情况
         // TODO 聊天时候改了头像昵称 会出现找不到的情况
-        headImageUrl: userInfo?.value.headImageUrl,
+        headImageUrl: userInfo.value.headImageUrl ? userInfo.value?.headImageUrl : defaultAvatar,
         showName: userInfo?.value.showName,
         showName: userInfo?.value.showName,
         web_message_status: chatsStore.WEB_MESSAGE_STATUS.loading
         web_message_status: chatsStore.WEB_MESSAGE_STATUS.loading
       }
       }
@@ -258,8 +262,11 @@ const sendImageMessage = async (file) => {
     closeToast()
     closeToast()
     currConversationChatList.value.push(msg)
     currConversationChatList.value.push(msg)
     await scrollToBottom()
     await scrollToBottom()
-    const backMessage = await chatsStore.sendSocketMessage(msg);
-    const {index, message} = chatsStore.updateBackMessage(currConversationChatList.value, backMessage);
+    const backMessage = await chatsStore.sendSocketMessage(msg)
+    const { index, message } = chatsStore.updateBackMessage(
+      currConversationChatList.value,
+      backMessage
+    )
     currConversationChatList.value[index] = message
     currConversationChatList.value[index] = message
   } catch (e) {
   } catch (e) {
     console.error(e, '??')
     console.error(e, '??')
@@ -349,18 +356,18 @@ onMounted(() => {
       const isOtherUserMessage = chat.sendUserId && chatsStore.isRealMessage(chat.sendUserId)
       const isOtherUserMessage = chat.sendUserId && chatsStore.isRealMessage(chat.sendUserId)
       if (isCurrGroupId) {
       if (isCurrGroupId) {
         if (isOtherUserMessage) {
         if (isOtherUserMessage) {
-          currConversationChatList.value.push(chat)
+          const { message } = chatsStore.updateBackMessage([chat], chat)
+          currConversationChatList.value.push(message)
           await scrollToBottom()
           await scrollToBottom()
         }
         }
         if (!isOtherUserMessage) {
         if (!isOtherUserMessage) {
-          await getChatList('init')
+          // 这里就不做处理,因为本地发送后就立马更新了currConversationChatList
         }
         }
       }
       }
     })
     })
   } catch (error) {}
   } catch (error) {}
 })
 })
 
 
-
 // 查寻群公告
 // 查寻群公告
 async function getAnnouncement() {
 async function getAnnouncement() {
   let { data } = await request('/website/tourGroup/getGroupInfoAndMemberByGroupId', {
   let { data } = await request('/website/tourGroup/getGroupInfoAndMemberByGroupId', {

+ 14 - 2
src/pages/chat/single-add.vue

@@ -122,6 +122,7 @@
 </template>
 </template>
 <script setup>
 <script setup>
 const route = useRoute()
 const route = useRoute()
+const router = useRouter()
 
 
 definePageMeta({
 definePageMeta({
   layout: false
   layout: false
@@ -131,7 +132,7 @@ onMounted(() => {
   getList()
   getList()
 })
 })
 // 对方的那个id
 // 对方的那个id
-const toUserId = computed(() => route.query.toUserId ?? '')
+const toUserId = computed(() => route.query?.toUserId ?? '')
 const refreshing = ref(false)
 const refreshing = ref(false)
 const loading = ref(false)
 const loading = ref(false)
 const finished = ref(false)
 const finished = ref(false)
@@ -166,6 +167,7 @@ const toggle = (item) => {
   } else {
   } else {
     checkedList.value.push(item)
     checkedList.value.push(item)
   }
   }
+
   checkboxRefs.value[item?.attentionIdDictMap?.userId].toggle()
   checkboxRefs.value[item?.attentionIdDictMap?.userId].toggle()
 }
 }
 
 
@@ -204,6 +206,16 @@ const getList = async () => {
 
 
     if (Array.isArray(dataList) && dataList?.length) {
     if (Array.isArray(dataList) && dataList?.length) {
       addDataList.value = dataList
       addDataList.value = dataList
+
+      nextTick(() => {
+        checkboxRefs.value[toUserId.value].toggle()
+        let item = dataList.find((el) => el?.attentionIdDictMap?.userId == toUserId.value)
+        if (item) {
+          checkedList.value.push(item)
+        } else {
+          router.back()
+        }
+      })
     } else {
     } else {
       addDataList.value = []
       addDataList.value = []
     }
     }
@@ -247,7 +259,7 @@ async function handleCreateGroup() {
         method: 'post',
         method: 'post',
         body: {
         body: {
           createType: 2,
           createType: 2,
-          ids: [...checked.value, toUserId.value]
+          ids: [...checked.value]
         }
         }
       })
       })
 
 

+ 31 - 40
src/pages/chat/single-chat.vue

@@ -40,7 +40,7 @@
             <ChatMessage :message="message"></ChatMessage>
             <ChatMessage :message="message"></ChatMessage>
           </template>
           </template>
           <div v-if="chatErrorText" class="text-[#979797] text-sm text-center mt-auto mb-10">
           <div v-if="chatErrorText" class="text-[#979797] text-sm text-center mt-auto mb-10">
-           {{chatErrorText}}
+            {{ chatErrorText }}
           </div>
           </div>
         </van-list>
         </van-list>
       </van-pull-refresh>
       </van-pull-refresh>
@@ -72,7 +72,7 @@ import ChatMessage from './components/chat-message'
 import ChatInput from './components/chat-input'
 import ChatInput from './components/chat-input'
 import { findHyperlinks } from '~/pages/chat/components/chat-message/link-message/handle'
 import { findHyperlinks } from '~/pages/chat/components/chat-message/link-message/handle'
 import { XYWebSocket } from '~/utils/XYWebSocket'
 import { XYWebSocket } from '~/utils/XYWebSocket'
-
+import defaultAvatar from '@/assets/img/default_avatar.png'
 const route = useRoute()
 const route = useRoute()
 const router = useRouter()
 const router = useRouter()
 
 
@@ -176,7 +176,7 @@ const sendTextMessage = async (text) => {
       object: {
       object: {
         id: getLocalId(),
         id: getLocalId(),
         // TODO 聊天时候改了头像昵称 会出现找不到的情况
         // TODO 聊天时候改了头像昵称 会出现找不到的情况
-        headImageUrl: userInfo?.value.headImageUrl,
+        headImageUrl: userInfo.value.headImageUrl ? userInfo.value?.headImageUrl : defaultAvatar,
         showName: userInfo?.value.showName,
         showName: userInfo?.value.showName,
         web_message_status: chatsStore.WEB_MESSAGE_STATUS.loading
         web_message_status: chatsStore.WEB_MESSAGE_STATUS.loading
       }
       }
@@ -186,8 +186,11 @@ const sendTextMessage = async (text) => {
     // console.log(currConversationChatList.value, '1122')
     // console.log(currConversationChatList.value, '1122')
     currConversationChatList.value.push(msg)
     currConversationChatList.value.push(msg)
     await scrollToBottom()
     await scrollToBottom()
-    const backMessage = await chatsStore.sendSocketMessage(msg);
-    const {index, message} = chatsStore.updateBackMessage(currConversationChatList.value, backMessage);
+    const backMessage = await chatsStore.sendSocketMessage(msg)
+    const { index, message } = chatsStore.updateBackMessage(
+      currConversationChatList.value,
+      backMessage
+    )
     currConversationChatList.value[index] = message
     currConversationChatList.value[index] = message
   } catch (e) {
   } catch (e) {
     console.log(e, '2')
     console.log(e, '2')
@@ -222,7 +225,7 @@ const sendImageMessage = async (file) => {
       object: {
       object: {
         id: getLocalId(),
         id: getLocalId(),
         // TODO 聊天时候改了头像昵称 会出现找不到的情况
         // TODO 聊天时候改了头像昵称 会出现找不到的情况
-        headImageUrl: userInfo?.value.headImageUrl,
+        headImageUrl: userInfo.value.headImageUrl ? userInfo.value?.headImageUrl : defaultAvatar,
         showName: userInfo?.value.showName,
         showName: userInfo?.value.showName,
         web_message_status: chatsStore.WEB_MESSAGE_STATUS.loading
         web_message_status: chatsStore.WEB_MESSAGE_STATUS.loading
       }
       }
@@ -231,8 +234,11 @@ const sendImageMessage = async (file) => {
     currConversationChatList.value.push(msg)
     currConversationChatList.value.push(msg)
     await scrollToBottom()
     await scrollToBottom()
     await chatsStore.sendSocketMessage(msg)
     await chatsStore.sendSocketMessage(msg)
-    const backMessage = await chatsStore.sendSocketMessage(msg);
-    const {index, message} = chatsStore.updateBackMessage(currConversationChatList.value, backMessage);
+    const backMessage = await chatsStore.sendSocketMessage(msg)
+    const { index, message } = chatsStore.updateBackMessage(
+      currConversationChatList.value,
+      backMessage
+    )
     currConversationChatList.value[index] = message
     currConversationChatList.value[index] = message
   } catch (e) {
   } catch (e) {
     console.error(e, '??')
     console.error(e, '??')
@@ -296,17 +302,17 @@ const onClickRight = () => {
   })
   })
 }
 }
 // async
 // async
-const scrollToBottom = async () => {
+const scrollToBottom = () => {
   // 操作向上加载不滚动 TODO 判断用户是否有向上滑的操作更准确
   // 操作向上加载不滚动 TODO 判断用户是否有向上滑的操作更准确
   if (moreLoading.value) return
   if (moreLoading.value) return
-  setTimeout(async () => {
-    await nextTick() // 确保DOM已经更新
-    const listElement = chatListRef.value?.$el
-    if (listElement) {
-      const scrollContainer = listElement
-      scrollContainer.scrollTop = scrollContainer.scrollHeight + 100
-    }
-  }, 200)
+  // setTimeout(async () => {
+  //   await nextTick() // 确保DOM已经更新
+  //   const listElement = chatListRef.value?.$el
+  //   if (listElement) {
+  //     const scrollContainer = listElement
+  //     scrollContainer.scrollTop = scrollContainer.scrollHeight + 100
+  //   }
+  // }, 200)
 
 
   // await nextTick() // 确保DOM已经更新
   // await nextTick() // 确保DOM已经更新
   // const listElement = chatListRef.value?.$el
   // const listElement = chatListRef.value?.$el
@@ -314,12 +320,12 @@ const scrollToBottom = async () => {
   //   const scrollContainer = listElement
   //   const scrollContainer = listElement
   //   scrollContainer.scrollTop = scrollContainer.scrollHeight
   //   scrollContainer.scrollTop = scrollContainer.scrollHeight
   // }
   // }
-  // await nextTick(() => {
-  //   const listElement = chatListRef.value?.$el
-  //   setTimeout(() => {
-  //     listElement && (listElement.scrollTop = listElement.scrollHeight + 100)
-  //   }, 200)
-  // })
+  nextTick(() => {
+    const listElement = chatListRef.value?.$el
+    setTimeout(() => {
+      listElement && (listElement.scrollTop = listElement.scrollHeight + 100)
+    }, 200)
+  })
 }
 }
 
 
 // 获取我与对方的关注情况
 // 获取我与对方的关注情况
@@ -349,7 +355,8 @@ onMounted(() => {
     const isOtherUserMessage = chat.sendUserId && chatsStore.isRealMessage(chat.sendUserId)
     const isOtherUserMessage = chat.sendUserId && chatsStore.isRealMessage(chat.sendUserId)
     if (isCurrGroupId) {
     if (isCurrGroupId) {
       if (isOtherUserMessage) {
       if (isOtherUserMessage) {
-        currConversationChatList.value.push(chat)
+        const { message } = chatsStore.updateBackMessage([chat], chat)
+        currConversationChatList.value.push(message)
         await scrollToBottom()
         await scrollToBottom()
       }
       }
       if (!isOtherUserMessage) {
       if (!isOtherUserMessage) {
@@ -370,22 +377,6 @@ const getAnnouncement = () => {
   })
   })
 }
 }
 
 
-// async function getAnnouncement() {
-//   let { data } = await request('/website/tourMember/getGroupUserListVo', {
-//     query: { groupId: groupId.value }
-//   })
-
-//   if (data) {
-//     if (Array.isArray(data.memberList) && data?.memberList?.length) {
-//       data.memberList.map((el) => {
-//         if (el.userId == userInfo.value.userId) {
-//           memberInfo.value = el
-//         }
-//       })
-//     }
-//   }
-// }
-
 // 用户删除消息
 // 用户删除消息
 const delMessage = (messageId) => {
 const delMessage = (messageId) => {
   showConfirmDialog({
   showConfirmDialog({

+ 4 - 1
src/pages/chat/user-add.vue

@@ -153,15 +153,18 @@ const search = () => {
   getList()
   getList()
 }
 }
 
 
+const concernLoading = ref(false)
+
 // 关注
 // 关注
 const handleFollow = async (item, i) => {
 const handleFollow = async (item, i) => {
+  if (concernLoading.value) return
   try {
   try {
     const { data } = await request('/website/tourism/fans/saveConcern', {
     const { data } = await request('/website/tourism/fans/saveConcern', {
       method: 'post',
       method: 'post',
       body: {
       body: {
         attentionId: item.tourUserVo.userId
         attentionId: item.tourUserVo.userId
       }
       }
-    })
+    }).finally(() => (concernLoading.value = false))
 
 
     list.value[i].fansStatus = data.fansStatus
     list.value[i].fansStatus = data.fansStatus
 
 

+ 3 - 7
src/pages/scan/index.vue

@@ -36,16 +36,12 @@ const openQrcode = async () => {
           width: 250,
           width: 250,
           height: 250
           height: 250
         },
         },
-        videoConstraints: {
-          width: window.visualViewport.height, // 框宽的
-          height: window.visualViewport.width, // 框高的
-          aspectRatio: 5 / 5
-        },
-        aspectRatio: window.visualViewport.width / window.visualViewport.height // 视频的宽高
-        }
+        aspectRatio: window.visualViewport.height / window.visualViewport.width
+      }
       if (devices && devices.length) {
       if (devices && devices.length) {
         // 当前环境下能识别出摄像头,并且摄像头的数据可能不止一个
         // 当前环境下能识别出摄像头,并且摄像头的数据可能不止一个
         let cameraId = devices[devices.length - 1].id //后置摄像头,一般最后一个是后置摄像头
         let cameraId = devices[devices.length - 1].id //后置摄像头,一般最后一个是后置摄像头
+        cameraIds.value = cameraId
         scanInstance
         scanInstance
           .start({ deviceId: { exact: cameraId } }, config, handleSuccess)
           .start({ deviceId: { exact: cameraId } }, config, handleSuccess)
           .catch((errorMessage) => {
           .catch((errorMessage) => {

+ 19 - 9
src/stores/useChats.js

@@ -92,12 +92,12 @@ export const useChatsStore = defineStore('chats', () => {
         messageContent.sendUserId = o.sendUserId
         messageContent.sendUserId = o.sendUserId
         messageContent.messageId = o.id
         messageContent.messageId = o.id
         messageContent.headImageUrl = o.headImageUrl
         messageContent.headImageUrl = o.headImageUrl
+        messageContent.object.web_message_status = WEB_MESSAGE_STATUS.success // 后端接口过来的消息都标记成功
         // console.log(messageContent, 'messageContent')
         // console.log(messageContent, 'messageContent')
         return messageContent
         return messageContent
       })
       })
   }
   }
 
 
-
   const WEB_MESSAGE_STATUS = {
   const WEB_MESSAGE_STATUS = {
     loading: 'loading',
     loading: 'loading',
     success: 'success',
     success: 'success',
@@ -110,9 +110,12 @@ export const useChatsStore = defineStore('chats', () => {
    * @returns {{index: number, message}}
    * @returns {{index: number, message}}
    */
    */
   const updateBackMessage = (list = [], message) => {
   const updateBackMessage = (list = [], message) => {
-    const index = list.findIndex(o => o.object?.id === message?.object?.id);
-    if(index < 0) throw Error('')
-    const status = message.messageLimit > 0 && message.messageLimit < 5 ? WEB_MESSAGE_STATUS.error : WEB_MESSAGE_STATUS.success;
+    const index = list.findIndex((o) => o.object?.id === message?.object?.id)
+    if (index < 0) throw Error('')
+    const status =
+      message.messageLimit > 0 && message.messageLimit < 5
+        ? WEB_MESSAGE_STATUS.error
+        : WEB_MESSAGE_STATUS.success
     message.object.web_message_status = status
     message.object.web_message_status = status
 
 
     return {
     return {
@@ -122,9 +125,18 @@ export const useChatsStore = defineStore('chats', () => {
   }
   }
 
 
   const getChatErrorText = (list = []) => {
   const getChatErrorText = (list = []) => {
-    const errorTextArr = ['','在对方关注或回复前,最多只能发送1条信息', '踢出群聊发消息限制', '群解散发消息限制', '封禁群聊发消息限制']
-    const errorIndex = list.findIndex(o => o.object?.web_message_status === WEB_MESSAGE_STATUS.error)
-    if(errorIndex < 0) return ''
+    // const errorTextArr = ['','在对方关注或回复前,最多只能发送1条信息', '您已被踢出群', '该已被群解散', '该群已被封禁']
+    const errorTextArr = [
+      '',
+      '在对方关注或回复前,最多只能发送1条信息',
+      '您已被移除该群聊,或该群已解散',
+      '您已被移除该群聊,或该群已解散',
+      '该群已被封禁'
+    ]
+    const errorIndex = list.findIndex(
+      (o) => o.object?.web_message_status === WEB_MESSAGE_STATUS.error
+    )
+    if (errorIndex < 0) return ''
     const errorMessage = list[errorIndex]
     const errorMessage = list[errorIndex]
     return errorTextArr[errorMessage.messageLimit] ?? ''
     return errorTextArr[errorMessage.messageLimit] ?? ''
   }
   }
@@ -151,11 +163,9 @@ export const useChatsStore = defineStore('chats', () => {
     isRealMessage,
     isRealMessage,
     handleMessageList,
     handleMessageList,
 
 
-
     WEB_MESSAGE_STATUS,
     WEB_MESSAGE_STATUS,
     updateBackMessage,
     updateBackMessage,
 
 
-
     getChatErrorText
     getChatErrorText
   }
   }
 })
 })