Browse Source

feat:1.互动消息的对接
2.我的消息页面的下滑列表添加
3.音频文件的添加

suwenjiang 2 months ago
parent
commit
d50c6639b0

BIN
src/assets/audio/message.mp3


+ 104 - 0
src/assets/img/chat/no-conment.svg

@@ -0,0 +1,104 @@
+<svg width="160" height="160" viewBox="0 0 160 160" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g id="&#230;&#154;&#130;&#230;&#151;&#160;&#232;&#175;&#132;&#232;&#174;&#186;">
+<mask id="mask0_366_3616" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="160" height="160">
+<rect id="Rectangle 1" width="160" height="160" fill="#D9D9D9"/>
+</mask>
+<g mask="url(#mask0_366_3616)">
+<g id="img">
+<path id="&#232;&#183;&#175;&#229;&#190;&#132; 78" fill-rule="evenodd" clip-rule="evenodd" d="M109.223 52.7596C90.0359 37.9707 92.3252 23.608 85.2995 18.225C78.2738 12.8421 34.8448 27.0372 16.7589 74.3968C-0.614342 119.89 42.7834 147.656 80.4762 145.255C114.974 143.057 160.251 113.173 149.393 75.5256C145.142 60.7885 128.411 67.5484 109.223 52.7596Z" fill="url(#paint0_linear_366_3616)"/>
+<g id="&#230;&#164;&#173;&#229;&#156;&#134;&#229;&#189;&#162;" opacity="0.97998" filter="url(#filter0_i_366_3616)">
+<circle cx="60" cy="139" r="11" fill="url(#paint1_radial_366_3616)"/>
+</g>
+<g id="&#230;&#164;&#173;&#229;&#156;&#134;&#229;&#189;&#162;&#229;&#164;&#135;&#228;&#187;&#189; 3" opacity="0.5" filter="url(#filter1_i_366_3616)">
+<circle cx="58.5" cy="34.5" r="6.5" fill="url(#paint2_radial_366_3616)"/>
+</g>
+<g id="&#230;&#164;&#173;&#229;&#156;&#134;&#229;&#189;&#162;&#229;&#164;&#135;&#228;&#187;&#189; 4" opacity="0.2" filter="url(#filter2_i_366_3616)">
+<circle cx="77.5" cy="38.5" r="3.5" fill="url(#paint3_radial_366_3616)"/>
+</g>
+<path id="&#232;&#183;&#175;&#229;&#190;&#132; 112" opacity="0.395601" fill-rule="evenodd" clip-rule="evenodd" d="M70.0008 123.617L19.2578 117.27C19.2578 117.27 5.76725 92.9653 20.9999 65.714L54.4773 96.328L70.0008 123.617Z" fill="url(#paint4_linear_366_3616)"/>
+<g id="&#232;&#175;&#132;&#232;&#174;&#186;" opacity="0.5">
+<path id="&#232;&#183;&#175;&#229;&#190;&#132; 111" fill-rule="evenodd" clip-rule="evenodd" d="M61.0308 53.7561C62.1117 53.2857 63.3587 53.4053 64.3305 54.0725L72.3287 59.5638L31.1996 78.676V104.352L23.9244 100.151C22.5502 99.3572 21.6875 97.9062 21.6467 96.3199L21.1975 78.8547C21.0781 74.2131 23.7863 69.9631 28.0437 68.1104L61.0308 53.7561Z" fill="url(#paint5_linear_366_3616)"/>
+<path id="&#232;&#183;&#175;&#229;&#190;&#132; 111_2" fill-rule="evenodd" clip-rule="evenodd" d="M68.7998 59.1C71.0597 58.1056 73.5964 59.7607 73.5964 62.2298V81.5488C73.5964 85.0944 71.5964 88.3366 68.4279 89.9277V94.4628C68.4279 94.8035 68.1308 95.0681 67.7924 95.0289L58.8588 93.9938L35.3948 104.589C32.419 105.933 29.0367 103.804 28.9606 100.54L28.5865 84.5002C28.4789 79.8854 31.1654 75.6614 35.3904 73.8021L68.7998 59.1Z" fill="#FEECD1"/>
+<path id="&#230;&#164;&#173;&#229;&#156;&#134;&#229;&#189;&#162;_2" fill-rule="evenodd" clip-rule="evenodd" d="M42.3837 88.1626C43.7999 86.4749 44.0684 84.3686 42.9834 83.4582C41.8984 82.5478 39.8708 83.178 38.4546 84.8657C37.0384 86.5535 36.7699 88.6597 37.8549 89.5701C38.9399 90.4805 40.9675 89.8504 42.3837 88.1626Z" fill="#FDC166"/>
+<path id="&#232;&#183;&#175;&#229;&#190;&#132;" fill-rule="evenodd" clip-rule="evenodd" d="M41.7165 83.0415C42.2005 83.0358 42.6393 83.1696 42.9833 83.4582C44.0683 84.3686 43.7998 86.4749 42.3836 88.1626C40.9674 89.8504 38.9398 90.4805 37.8548 89.5701C37.6313 89.3825 37.4652 89.1442 37.3547 88.8692C38.3104 88.7952 39.4146 88.2608 40.3375 87.3379C41.7356 85.9398 42.2423 84.1255 41.6077 83.0441L41.7165 83.0415Z" fill="#FDA422"/>
+<path id="&#230;&#164;&#173;&#229;&#156;&#134;&#229;&#189;&#162;_3" fill-rule="evenodd" clip-rule="evenodd" d="M53.2116 83.6035C54.6278 81.9157 54.8963 79.8095 53.8113 78.8991C52.7263 77.9887 50.6987 78.6188 49.2825 80.3066C47.8663 81.9943 47.5978 84.1006 48.6828 85.011C49.7678 85.9214 51.7954 85.2912 53.2116 83.6035Z" fill="#FDC166"/>
+<path id="&#232;&#183;&#175;&#229;&#190;&#132;_2" fill-rule="evenodd" clip-rule="evenodd" d="M52.5444 78.4823C53.0284 78.4766 53.4672 78.6104 53.8112 78.8991C54.8962 79.8095 54.6277 81.9157 53.2115 83.6035C51.7953 85.2912 49.7677 85.9214 48.6827 85.011C48.4591 84.8234 48.293 84.585 48.1826 84.31C49.1382 84.2361 50.2425 83.7016 51.1654 82.7788C52.5635 81.3807 53.0701 79.5663 52.4356 78.485L52.5444 78.4823Z" fill="#FDA422"/>
+<path id="&#230;&#164;&#173;&#229;&#156;&#134;&#229;&#189;&#162;_4" fill-rule="evenodd" clip-rule="evenodd" d="M64.6095 78.4744C66.0257 76.7867 66.2942 74.6805 65.2092 73.7701C64.1243 72.8596 62.0967 73.4898 60.6805 75.1776C59.2643 76.8653 58.9958 78.9715 60.0808 79.8819C61.1657 80.7923 63.1933 80.1622 64.6095 78.4744Z" fill="#FDC166"/>
+<path id="&#232;&#183;&#175;&#229;&#190;&#132;_3" fill-rule="evenodd" clip-rule="evenodd" d="M63.9423 73.3533C64.4263 73.3476 64.8651 73.4814 65.2091 73.7701C66.2941 74.6805 66.0256 76.7867 64.6094 78.4744C63.1932 80.1622 61.1656 80.7923 60.0806 79.8819C59.8571 79.6944 59.691 79.456 59.5806 79.181C60.5362 79.1071 61.6405 78.5726 62.5633 77.6497C63.9614 76.2517 64.4681 74.4373 63.8335 73.3559L63.9423 73.3533Z" fill="#FDA422"/>
+</g>
+<g id="&#232;&#175;&#132;&#232;&#174;&#186;_2">
+<path id="&#232;&#183;&#175;&#229;&#190;&#132; 111_3" fill-rule="evenodd" clip-rule="evenodd" d="M122.346 34.8353C124.243 34.0099 126.431 34.2198 128.136 35.3905L142.171 45.0262L70.0009 78.5626V123.617L57.2351 116.245C54.8238 114.852 53.31 112.306 53.2384 109.523L52.4501 78.8762C52.2406 70.7316 56.9926 63.2739 64.4633 60.0231L122.346 34.8353Z" fill="url(#paint6_linear_366_3616)"/>
+<path id="&#232;&#183;&#175;&#229;&#190;&#132; 111_4" fill-rule="evenodd" clip-rule="evenodd" d="M135.978 44.2124C139.944 42.4673 144.395 45.3717 144.395 49.7041V83.6036C144.395 89.825 140.886 95.5143 135.326 98.3062V106.264C135.326 106.862 134.805 107.326 134.211 107.257L118.535 105.441L77.3621 124.032C72.1404 126.39 66.2056 122.656 66.072 116.928L65.4156 88.7825C65.2267 80.6848 69.9407 73.2728 77.3545 70.0103L135.978 44.2124Z" fill="#FEECD1"/>
+<path id="&#230;&#164;&#173;&#229;&#156;&#134;&#229;&#189;&#162;_5" fill-rule="evenodd" clip-rule="evenodd" d="M89.6257 95.2089C92.1107 92.2474 92.5819 88.5516 90.678 86.9541C88.7742 85.3566 85.2163 86.4623 82.7313 89.4239C80.2463 92.3854 79.7752 96.0812 81.679 97.6787C83.5829 99.2762 87.1407 98.1705 89.6257 95.2089Z" fill="#FDC166"/>
+<path id="&#232;&#183;&#175;&#229;&#190;&#132;_4" fill-rule="evenodd" clip-rule="evenodd" d="M88.4551 86.2228C89.3044 86.2128 90.0744 86.4476 90.678 86.9541C92.5819 88.5516 92.1107 92.2474 89.6257 95.2089C87.1407 98.1705 83.5828 99.2762 81.679 97.6787C81.2867 97.3496 80.9953 96.9313 80.8015 96.4488C82.4784 96.319 84.4161 95.3812 86.0354 93.7618C88.4886 91.3086 89.3777 88.1249 88.2643 86.2274L88.4551 86.2228Z" fill="#FDA422"/>
+<path id="&#230;&#164;&#173;&#229;&#156;&#134;&#229;&#189;&#162;_6" fill-rule="evenodd" clip-rule="evenodd" d="M108.626 87.2089C111.111 84.2474 111.582 80.5516 109.678 78.9541C107.774 77.3566 104.216 78.4623 101.731 81.4239C99.2463 84.3854 98.7752 88.0812 100.679 89.6787C102.583 91.2762 106.141 90.1705 108.626 87.2089Z" fill="#FDC166"/>
+<path id="&#232;&#183;&#175;&#229;&#190;&#132;_5" fill-rule="evenodd" clip-rule="evenodd" d="M107.455 78.2228C108.304 78.2128 109.074 78.4476 109.678 78.9541C111.582 80.5516 111.111 84.2474 108.626 87.2089C106.141 90.1705 102.583 91.2762 100.679 89.6787C100.287 89.3496 99.9953 88.9313 99.8015 88.4488C101.478 88.319 103.416 87.3812 105.035 85.7618C107.489 83.3086 108.378 80.1249 107.264 78.2274L107.455 78.2228Z" fill="#FDA422"/>
+<path id="&#230;&#164;&#173;&#229;&#156;&#134;&#229;&#189;&#162;_7" fill-rule="evenodd" clip-rule="evenodd" d="M128.626 78.2089C131.111 75.2474 131.582 71.5516 129.678 69.9541C127.774 68.3566 124.216 69.4623 121.731 72.4239C119.246 75.3854 118.775 79.0812 120.679 80.6787C122.583 82.2762 126.141 81.1705 128.626 78.2089Z" fill="#FDC166"/>
+<path id="&#232;&#183;&#175;&#229;&#190;&#132;_6" fill-rule="evenodd" clip-rule="evenodd" d="M127.455 69.2228C128.304 69.2128 129.074 69.4476 129.678 69.9541C131.582 71.5516 131.111 75.2474 128.626 78.2089C126.141 81.1705 122.583 82.2762 120.679 80.6787C120.287 80.3496 119.995 79.9313 119.802 79.4488C121.478 79.319 123.416 78.3812 125.035 76.7618C127.489 74.3086 128.378 71.1249 127.264 69.2274L127.455 69.2228Z" fill="#FDA422"/>
+</g>
+</g>
+</g>
+</g>
+<defs>
+<filter id="filter0_i_366_3616" x="49" y="128" width="22" height="22" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset/>
+<feGaussianBlur stdDeviation="4"/>
+<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
+<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.4 0"/>
+<feBlend mode="normal" in2="shape" result="effect1_innerShadow_366_3616"/>
+</filter>
+<filter id="filter1_i_366_3616" x="52" y="28" width="13" height="13" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset/>
+<feGaussianBlur stdDeviation="2.5"/>
+<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
+<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.4 0"/>
+<feBlend mode="normal" in2="shape" result="effect1_innerShadow_366_3616"/>
+</filter>
+<filter id="filter2_i_366_3616" x="74" y="35" width="7" height="7" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
+<feFlood flood-opacity="0" result="BackgroundImageFix"/>
+<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
+<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
+<feOffset/>
+<feGaussianBlur stdDeviation="1.5"/>
+<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
+<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.4 0"/>
+<feBlend mode="normal" in2="shape" result="effect1_innerShadow_366_3616"/>
+</filter>
+<linearGradient id="paint0_linear_366_3616" x1="-8.2605" y1="50.8347" x2="38.4885" y2="166.542" gradientUnits="userSpaceOnUse">
+<stop stop-color="#FEA82E"/>
+<stop offset="1" stop-color="#FEB243"/>
+</linearGradient>
+<radialGradient id="paint1_radial_366_3616" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(54.2893 139) rotate(-90) scale(14.5573)">
+<stop stop-color="white"/>
+<stop offset="1" stop-color="#FEC575"/>
+</radialGradient>
+<radialGradient id="paint2_radial_366_3616" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(55.1255 34.5) rotate(-90) scale(8.60203)">
+<stop stop-color="white"/>
+<stop offset="1" stop-color="#FEC575"/>
+</radialGradient>
+<radialGradient id="paint3_radial_366_3616" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(75.683 38.5) rotate(-90) scale(4.63186)">
+<stop stop-color="white"/>
+<stop offset="1" stop-color="#FEC575"/>
+</radialGradient>
+<linearGradient id="paint4_linear_366_3616" x1="70.0028" y1="111.325" x2="54.1673" y2="62.3723" gradientUnits="userSpaceOnUse">
+<stop stop-color="#FA8817"/>
+<stop offset="1" stop-color="#FEAE39"/>
+</linearGradient>
+<linearGradient id="paint5_linear_366_3616" x1="42.7245" y1="49.3774" x2="14.3769" y2="67.5451" gradientUnits="userSpaceOnUse">
+<stop stop-color="#FDCB83"/>
+<stop offset="0.749149" stop-color="#FEAF4C"/>
+<stop offset="1" stop-color="#FD9217"/>
+</linearGradient>
+<linearGradient id="paint6_linear_366_3616" x1="90.1443" y1="28.62" x2="43.3365" y2="60.6591" gradientUnits="userSpaceOnUse">
+<stop stop-color="#FDCB83"/>
+<stop offset="0.749149" stop-color="#FEAF4C"/>
+<stop offset="1" stop-color="#FD9217"/>
+</linearGradient>
+</defs>
+</svg>

+ 5 - 0
src/components/Chat/Empty.vue

@@ -11,10 +11,15 @@
 
 <script setup>
 import search from '~/assets/img/chat/search.svg'
+import conment from '~/assets/img/chat/no-conment.svg'
 const imageList = [
   {
     name: 'search',
     img: search
+  },
+  {
+    name: 'conment',
+    img: conment
   }
 ]
 

+ 3 - 3
src/components/NavigationBar/index.client.vue

@@ -10,7 +10,7 @@
           <van-image :src="userInfo.headImageUrl || defaultAvatar" round height="26" width="26" />
         </NuxtLink>
         <NuxtLink to="/profile/my-news" class="max-w-70 truncate text-black-6">
-          <van-badge :dot="true" :offset="[-4, 5]">消息</van-badge>
+          <van-badge :dot="showDot" :offset="[-4, 5]">消息</van-badge>
         </NuxtLink>
         <NuxtLink to="/profile" class="max-w-70 truncate text-black-6">订单</NuxtLink>
       </div>
@@ -76,9 +76,9 @@ const showDot = computed(() => {
   console.log(newTatol, 'newTatol')
 
   if (newTatol) {
-    return false
-  } else {
     return true
+  } else {
+    return false
   }
 })
 </script>

+ 23 - 24
src/components/Profile/InteractionMessage/Eit.vue

@@ -3,9 +3,9 @@
     <div class="w-265 shrink-0 box-border flex justify-start itmes-start">
       <div class="w-32 h-32 shrink-0 rounded-full mr-8 overflow-hidden">
         <img
-          v-if="itemData?.headImageUrl"
+          v-if="itemData?.headImage"
           class="w-full h-full object-cover"
-          :src="itemData?.headImageUrl"
+          :src="itemData?.headImage"
           alt=""
         />
         <img
@@ -18,10 +18,20 @@
 
       <div class="w-223">
         <div class="-mt-5">
-          <span class="text-sm text-black-6 pr-4">{{ itemData.name }} 暖阳</span>
-          <div :class="`inline-block box-border px-6 text-sm text-[#3369E7] bg-[#3369E7]/[0.08]`">
+          <span class="text-sm text-black-6 pr-4">{{ itemData?.showName }}</span>
+
+          <div
+            v-if="itemData?.state == 2"
+            :class="`inline-block box-border px-6 text-sm text-[#3369E7] bg-[#3369E7]/[0.08]`"
+          >
             互关
           </div>
+          <div
+            v-if="itemData?.state == 4"
+            :class="`inline-block box-border px-6 text-sm text-[#FF9300] bg-[#FF9300]/[0.08]`"
+          >
+            粉丝
+          </div>
         </div>
         <h1 class="w-full font-semibold line-clamp-2 text-black-3 text-base">
           {{
@@ -30,15 +40,19 @@
               : '提到了你: 赞了你的游记'
           }}
         </h1>
-        <p class="text-black-9 text-sm">2024-12-24 15:47</p>
+        <p class="text-black-9 text-sm">{{ itemData.creatTime }}</p>
       </div>
     </div>
 
-    <div class="w-71 h-47 shrink-0 rounded-[4px] overflow-hidden">
+    <NuxtLink
+      itemData
+      :to="itemData.businessType == 1 ? `/yj/${itemData.businessId}` : '/'"
+      class="block w-71 ml-17 h-47 shrink-0 rounded-[4px] overflow-hidden"
+    >
       <img
-        v-if="itemData?.travelNoteUrl"
+        v-if="itemData?.imageUrl"
         class="w-full h-full object-cover"
-        :src="itemData?.travelNoteUrl"
+        :src="itemData?.imageUrl"
         alt=""
       />
       <img
@@ -47,31 +61,16 @@
         src="~/assets/img/comment/H5_default.png"
         alt=""
       />
-    </div>
+    </NuxtLink>
   </div>
 </template>
 <script setup>
-const listColor = [
-  {
-    text: '粉丝',
-    color: '#FF9300'
-  },
-  {
-    text: '互关',
-    color: '#3369E7'
-  }
-]
-
 defineProps({
   itemData: {
     type: Object,
     default: () => ({})
   }
 })
-
-const state = (parmas) => {
-  return listColor[parmas]
-}
 </script>
 
 <style lang="scss" scoped></style>

+ 24 - 24
src/components/Profile/InteractionMessage/LikesandFavorites.vue

@@ -18,21 +18,36 @@
 
       <div>
         <div class="-mt-5">
-          <span class="text-sm text-black-6 pr-4">{{ itemData.name }} 暖阳</span>
-          <div :class="`inline-block box-border px-6 text-sm text-[#FF9300] bg-[#FF9300]/[0.08]`">
-            {{ state(itemData?.fansState)?.text ? '' : '粉丝' }}
+          <span class="text-sm text-black-6 pr-4">{{ itemData.showName }}</span>
+          <div
+            v-if="itemData.state == 4"
+            :class="`inline-block box-border px-6 text-sm text-[#FF9300] bg-[#FF9300]/[0.08]`"
+          >
+            粉丝
+          </div>
+          <div
+            v-if="itemData.state == 2"
+            :class="`inline-block box-border px-6 text-sm text-[#3369E7] bg-[#3369E7]/[0.08]`"
+          >
+            互关
           </div>
         </div>
-        <h1 class="font-semibold text-black-3 text-base">赞了你的游记</h1>
-        <p class="text-black-9 text-sm">2024-12-24 15:47</p>
+        <h1 class="font-semibold text-black-3 text-base">
+          {{ itemData.noticeType == 5 }}
+        </h1>
+        <p class="text-black-9 text-sm">{{ itemData.creatTime }}</p>
       </div>
     </div>
 
-    <div class="w-71 h-47 shrink-0 rounded-[4px] overflow-hidden">
+    <NuxtLink
+      itemData
+      :to="itemData.businessType == 1 ? `/yj/${itemData.businessId}` : '/'"
+      class="block w-71 ml-17 h-47 shrink-0 rounded-[4px] overflow-hidden"
+    >
       <img
-        v-if="itemData?.travelNoteUrl"
+        v-if="itemData?.imageUrl"
         class="w-full h-full object-cover"
-        :src="itemData?.travelNoteUrl"
+        :src="itemData?.imageUrl"
         alt=""
       />
       <img
@@ -41,31 +56,16 @@
         src="~/assets/img/comment/H5_default.png"
         alt=""
       />
-    </div>
+    </NuxtLink>
   </div>
 </template>
 <script setup>
-const listColor = [
-  {
-    text: '粉丝',
-    color: '#FF9300'
-  },
-  {
-    text: '互关',
-    color: '#3369E7'
-  }
-]
-
 defineProps({
   itemData: {
     type: Object,
     default: () => ({})
   }
 })
-
-const state = (parmas) => {
-  return listColor[parmas]
-}
 </script>
 
 <style lang="scss" scoped></style>

+ 150 - 2
src/components/Profile/InteractionMessage/ReceiveComment.vue

@@ -1,5 +1,153 @@
 <template>
-  <div>收到的评论</div>
+  <div
+    style="scrollbar-width: none"
+    class="mx-12 pt-8 mb-12 box-border border-b-[1px] border-dashed flex justify-between items-start"
+  >
+    <div class="flex shrink-0 w-[74%] justify-start items-start">
+      <div class="w-32 h-32 rounded-full shrink-0">
+        <img
+          v-if="itemData?.headImage"
+          class="w-full h-full object-cover rounded-full"
+          :src="itemData?.headImage"
+          alt=""
+        />
+        <img
+          v-else
+          class="w-full h-full object-cover rounded-full"
+          src="https://www.xiaoyaotravel.com/_nuxt/default_avatar.gSq5JxK1.png"
+          alt=""
+        />
+      </div>
+
+      <div class="ml-8 w-[85%] w-full text-sm">
+        <NuxtLink :to="goToPage(itemData)">
+          <p class="w-full line-clamp-1 ">
+            <span class="text-black-6  text-sm  pr-4">
+              {{ itemData?.showName }}
+            </span>
+
+            <div
+              :class="`inline-block text-sm px-6 py-3 text-[${bgColor(itemData?.state)}] bg-[${bgColor(itemData?.state)}]/[0.08]`"
+            >
+              {{ state(itemData?.state) }}
+            </div>
+          </p>
+
+          <p
+            :class="`w-full ${itemData?.state == 7 ? 'line-clamp-1' : 'line-clamp-2'} my-6 text-black-3 text-base leading-4xl`"
+          >
+            <span v-if="itemData?.isReply== 1">
+              回复{{
+                itemData?.showName != userInfo.showName
+                  ? `@${itemData?.showName}`
+                  : ''
+              }}:
+            </span>
+            <span v-else>评论:</span>
+
+            <span v-html="coveredContent( itemData?.messageContent)"></span>
+          </p>
+          <p class="w-full mb-6 text-black-9 leading-xl">{{ itemData?.createTime }}</p>
+        </NuxtLink>
+        <!--   @click.stop="addReply(itemData, itemData?.id)" -->
+        <div
+         v-if="itemData?.isReply== 1"
+         @click.stop="$emit('onAddReply')"
+          class="box-border mb-12 line-clamp-1 rounded-full w-95 h-26 flex justify-center items-center text-base px-8 text-black-3 leading-4xl bg-[#F5F5F5] active:bg-black/[0.1]"
+        >
+          <div class="w-16 h-16 rounded-full shrink-0 mr-4">
+            <img
+              v-if="userInfo?.headImageUrl"
+              class="w-full h-full object-cover rounded-full"
+              :src="userInfo?.headImageUrl"
+              alt=""
+            />
+            <img
+              v-else
+              class="w-full h-full object-cover rounded-full"
+              src="https://www.xiaoyaotravel.com/_nuxt/default_avatar.gSq5JxK1.png"
+              alt=""
+            />
+          </div>
+          回复评论
+        </div>
+      </div>
+    </div>
+
+    <NuxtLink
+      itemData
+      :to="itemData.businessType == 1 ? `/yj/${itemData.businessId}` : '/'"
+      class="block w-71 ml-17 h-47 shrink-0 rounded-[4px] overflow-hidden"
+    >
+      <img
+        v-if="itemData?.imageUrl"
+        class="w-full h-full object-cover"
+        :src="itemData?.imageUrl"
+        alt=""
+      />
+      <img v-else class="w-full h-full object-cover" :src="defaultImg" alt="" />
+    </NuxtLink>
+  </div>
 </template>
-<script setup></script>
+<script setup>
+import defaultImg from '~/assets/img/comment/H5_default.png'
+import emojiJson from '@/pages/yj/emoji.json'
+
+defineEmits(['onAddReply'])
+// 转换评论中的一些非字符emoji
+function coveredContent(val) {
+  if (!val) return ''
+  return val.replace(/\[.*?]/g, function (str) {
+    const baseApi = import.meta.env.VITE_APP_EMOJI_API
+    const emojiName = emojiJson[str]
+    if (!emojiName) return str
+    return `<img src=${baseApi}${emojiJson[str]} style="width: 20px; height: 20px;display: inline-block; vertical-align: middle"/>`
+  })
+}
+
+defineProps({
+  itemData: {
+    type: Object,
+    default: () => ({})
+  },
+  userInfo: {
+    type: Object,
+    default: () => ({})
+  }
+})
+
+// 跳转到那个页面
+const goToPage = (item) => {
+  switch (item?.businessType) {
+    case 1:
+      return `/yj/${item?.businessId}`
+    default:
+      return '/'
+  }
+}
+
+const state = (stateNum) => {
+  switch (stateNum) {
+    case 4:
+      return '粉丝'
+    case 2:
+      return '互关'
+    default:
+      return ''
+  }
+}
+
+// 背景色 和文字颜色
+const bgColor = (color) => {
+  if (color == 2) {
+    return '#3369E7'
+  }
+  if (color == 4) {
+    return '#FF9300'
+  }
+}
+
+
+
+</script>
 <style lang="scss" scoped></style>

+ 63 - 2
src/components/Profile/InteractionMessage/SendComment.vue

@@ -1,5 +1,66 @@
 <template>
-  <div>发出的评论</div>
+  <div class="flex justify-between itmes-start px-16 py-8 mb-12">
+    <div class="w-265 shrink-0 box-border flex justify-start itmes-start">
+      <div class="w-32 h-32 shrink-0 rounded-full mr-8 overflow-hidden">
+        <img
+          v-if="userInfo?.headImageUrl"
+          class="w-full h-full object-cover"
+          :src="userInfo?.headImageUrl"
+          alt=""
+        />
+        <img
+          v-else
+          class="w-full h-full object-cover"
+          src="https://www.xiaoyaotravel.com/_nuxt/default_avatar.gSq5JxK1.png"
+          alt=""
+        />
+      </div>
+
+      <div class="w-223">
+        <div class="-mt-5 line-clamp-1 text-sm text-black-6 pr-4">
+          {{ userInfo?.showName }}
+        </div>
+        <h1 class="w-full font-semibold line-clamp-2 text-black-3 text-base">
+          <template v-if="itemData.isReply == 1">
+            回复 {{ itemData.showName != userInfo.showName ? `@${itemData?.showName}:` : '' }}
+          </template>
+          <template v-else>评论:</template>
+          {{ itemData.messageConten }}
+        </h1>
+        <p class="text-black-9 text-sm">{{ itemData.creatTime }}</p>
+      </div>
+    </div>
+    <NuxtLink
+      itemData
+      :to="itemData.businessType == 1 ? `/yj/${itemData.businessId}` : '/'"
+      class="block w-71 ml-17 h-47 shrink-0 rounded-[4px] overflow-hidden"
+    >
+      <img
+        v-if="itemData?.imageUrl"
+        class="w-full h-full object-cover"
+        :src="itemData?.imageUrl"
+        alt=""
+      />
+      <img
+        v-else
+        class="w-full h-full object-cover"
+        src="~/assets/img/comment/H5_default.png"
+        alt=""
+      />
+    </NuxtLink>
+  </div>
 </template>
-<script setup></script>
+<script setup>
+defineProps({
+  itemData: {
+    type: Object,
+    default: () => ({})
+  },
+  userInfo: {
+    type: Object,
+    default: () => ({})
+  }
+})
+</script>
+
 <style lang="scss" scoped></style>

+ 35 - 44
src/pages/chat/single.vue

@@ -3,7 +3,7 @@
     <van-nav-bar @click-left="onClickLeft" @click-right="onClickRight">
       <template #left>
         <div>
-          <van-icon name="arrow-left" color="black" size="18"/>
+          <van-icon name="arrow-left" color="black" size="18" />
         </div>
       </template>
       <template #title>
@@ -15,36 +15,38 @@
         </div>
       </template>
       <template #right>
-        <van-icon name="ellipsis" color="black" size="18"/>
+        <van-icon name="ellipsis" color="black" size="18" />
       </template>
     </van-nav-bar>
     <van-list
-        ref="messageBoxRef"
-        class="flex-1 overflow-y-auto px-12 flex flex-col"
-        :finished="true"
-        finished-text=""
+      ref="messageBoxRef"
+      class="flex-1 overflow-y-auto px-12 flex flex-col"
+      :finished="true"
+      finished-text=""
     >
       <template v-for="(message, index) in receiveGetter" :key="index">
         <ChatMessage :message="message"></ChatMessage>
       </template>
-      <div v-if="false" class="text-[#979797] text-sm text-center mt-auto mb-10">在对方关注或回复前,最多只能发送1条信息</div>
+      <div v-if="false" class="text-[#979797] text-sm text-center mt-auto mb-10">
+        在对方关注或回复前,最多只能发送1条信息
+      </div>
     </van-list>
-    <ChatInput :operates="['image']"  @focus="scrollToBottom" @send="handleSendMessage"></ChatInput>
+    <ChatInput :operates="['image']" @focus="scrollToBottom" @send="handleSendMessage"></ChatInput>
   </div>
 </template>
 <script setup>
 import ChatMessage from './chat-message'
-import ChatInput from "./chat-input";
-import {messageContentParse, formatTimestamp} from '~/utils/detalTime'
-import {findHyperlinks} from "~/pages/chat/chat-message/link-message/handle";
+import ChatInput from './chat-input'
+import { messageContentParse, formatTimestamp } from '~/utils/detalTime'
+import { findHyperlinks } from '~/pages/chat/chat-message/link-message/handle'
 
 const route = useRoute()
 const router = useRouter()
 const refreshing = ref(false)
 const uploadUrl = `${import.meta.env.VITE_APP_BASE_URL}/website/tourMessage/upload`
 const chatStore = useChatStore()
-const {ws, curConversiton, receive,conversations, receiveGetter, connectSta, onNewMessage} =
-    storeToRefs(chatStore)
+const { ws, curConversiton, receive, conversations, receiveGetter, connectSta, onNewMessage } =
+  storeToRefs(chatStore)
 
 const user = computed(() => chatStore.user)
 
@@ -98,7 +100,7 @@ const title = computed(() => route.query.groupRemark)
 
 // 刷新
 const onRefresh = () => {
-  refreshing.value = false
+  refreshing.value = true
 }
 
 const onClickLeft = () => router.back()
@@ -118,8 +120,6 @@ const messageCount = ref(0)
 
 // 获取聊天记录
 async function getChatHistory(messageId = '') {
-  if (curConversiton.value.isLocal) return
-
   if (!groupId.value) return
 
   if (receive.value.length >= messageCount.value && receive.value.length > 0) return
@@ -133,8 +133,8 @@ async function getChatHistory(messageId = '') {
   }
 
   const {
-    data: {data = [], count = []}
-  } = await request('/website/tourMessage/getMessageByGroupId', {query})
+    data: { data = [], count = [] }
+  } = await request('/website/tourMessage/getMessageByGroupId', { query })
 
   messageCount.value = count || 0
 
@@ -157,8 +157,7 @@ async function getChatHistory(messageId = '') {
 function addEventListenerTextarea() {
   nextTick(() => {
     if (inputBoxRef.value) {
-      inputBoxRef.value.removeEventListener('keydown', () => {
-      })
+      inputBoxRef.value.removeEventListener('keydown', () => {})
       inputBoxRef.value.addEventListener('keydown', function (event) {
         if (event.key === 'Enter') {
           event.preventDefault()
@@ -173,8 +172,7 @@ function addEventListenerTextarea() {
 function addEventListenerMessage() {
   nextTick(() => {
     if (messageBoxRef.value) {
-      messageBoxRef.value.removeEventListener('scroll', () => {
-      })
+      messageBoxRef.value.removeEventListener('scroll', () => {})
 
       messageBoxRef.value.addEventListener('scroll', (e) => {
         if (messageBoxRef.value.scrollTop == 0 && receive.value[0]?.id) {
@@ -194,15 +192,14 @@ async function isFollow() {
   const query = {
     userId: curConversiton.value.toUserId
   }
-  const {data: status = 0} = await request('/website/tourGroup/isFollow', {query})
+  const { data: status = 0 } = await request('/website/tourGroup/isFollow', { query })
   followStatus.value = status
   console.log('关注情况:', status)
 }
 
-
 // 发送文本消息
 const sendTextMessage = (text) => {
-  if(!text) return
+  if (!text) return
   let msg = {
     // getUserId: getUserId.value,
     // sendUserId: sendUserId.value,
@@ -217,11 +214,11 @@ const sendTextMessage = (text) => {
     }
   }
   const isLink = !!findHyperlinks(text)
-  if (isLink) msg.messageType = 4;
+  if (isLink) msg.messageType = 4
 
   receive.value.push({
     ...msg,
-    messageContent: JSON.stringify({messageContent: msg.messageContent})
+    messageContent: JSON.stringify({ messageContent: msg.messageContent })
   })
   ws.value.send(JSON.stringify(msg))
 }
@@ -234,7 +231,7 @@ const sendImageMessage = async (file) => {
     formData.append('uploadFile', file)
     formData.append('asImage', true)
     formData.append('fieldName', 'messageContent')
-    const {data} = await request('/website/tourMessage/upload', {
+    const { data } = await request('/website/tourMessage/upload', {
       method: 'post',
       body: formData
     })
@@ -244,7 +241,7 @@ const sendImageMessage = async (file) => {
       sendUserId: sendUserId.value,
       specialUserId: '',
       groupId: groupId.value,
-      messageContent: JSON.stringify({messageContent: data.fileUrl}),
+      messageContent: JSON.stringify({ messageContent: data.fileUrl }),
       messageType: 1,
       noticeType: noticeType.value,
       object: {
@@ -253,46 +250,40 @@ const sendImageMessage = async (file) => {
     }
     receive.value.push({
       ...msg,
-      messageContent: JSON.stringify({messageContent: data.fileUrl})
+      messageContent: JSON.stringify({ messageContent: data.fileUrl })
     })
 
     ws.value.send(JSON.stringify(msg))
   } catch (e) {
     console.error(e, '??')
   } finally {
-
   }
 }
 
-const handleSendMessage = async ({type, messageContent}) => {
+const handleSendMessage = async ({ type, messageContent }) => {
   try {
     switch (type) {
       case 'text':
         sendTextMessage(messageContent)
-        break;
+        break
       case 'image':
         await sendImageMessage(messageContent)
-        break;
+        break
     }
     await scrollToBottom()
   } catch (e) {
-
   } finally {
-
   }
-
 }
 
-
 const scrollToBottom = async () => {
-  await nextTick(); // 确保DOM已经更新
-  const listElement = messageBoxRef.value?.$el;
+  await nextTick() // 确保DOM已经更新
+  const listElement = messageBoxRef.value?.$el
   if (listElement) {
-    const scrollContainer = listElement;
-    scrollContainer.scrollTop = scrollContainer.scrollHeight;
+    const scrollContainer = listElement
+    scrollContainer.scrollTop = scrollContainer.scrollHeight
   }
-};
-
+}
 
 watch(groupId, async () => {
   // 消息置空

+ 2 - 2
src/pages/chat/user-add.vue

@@ -35,9 +35,9 @@
                   class="w-40 h-40 ml-13 mr-12 rounded-full overflow-hidden"
                 >
                   <img
-                    v-if="item?.headImageUrl"
+                    v-if="item?.tourUserVo?.headImageUrl"
                     class="w-full h-full shrink-0 object-cover"
-                    :src="item?.headImageUrl"
+                    :src="item?.tourUserVo?.headImageUrl"
                     alt=""
                   />
                   <img

+ 225 - 203
src/pages/profile/interaction-message/index.vue

@@ -1,5 +1,4 @@
 <template>
-  <!-- hud -->
   <div class="w-full">
     <van-dropdown-menu fixed ref="interactionDropdownMenuRef" active-color="#FF9300">
       <van-dropdown-item
@@ -30,178 +29,109 @@
     </van-dropdown-menu>
 
     <van-pull-refresh v-model="refreshing" @refresh="onRefresh">
-      <Empty v-if="!interactionList.length && !loading" title="暂无评论" />
-      <van-list
-        v-if="interactionList.length"
-        v-model:loading="loading"
-        :finished="finished"
-        :immediate-check="false"
-        finished-text=""
-        @load="handleCurrentChange"
-      >
-        <template v-for="item in interactionList" :key="item?.id">
-          <!-- 点赞与收藏 -->
-          <ProfileInteractionMessageLikesandFavorites
-            v-if="item.noticeType == 5 || item.noticeType == -1"
-            :item-data="{
-              ...item,
-              messageContent: messageContentParse(item?.messageContent)
-            }"
-          ></ProfileInteractionMessageLikesandFavorites>
-
-          <!-- 艾特  -->
-          <ProfileInteractionMessageEit
-            v-if="item.noticeType == 6 || item.noticeType == -1"
-            :item-data="{
-              ...item,
-              messageContent: messageContentParse(item?.messageContent)
-            }"
-          ></ProfileInteractionMessageEit>
-
-          <!-- 我的评论的 -->
-          <div
-            v-if="interactionIndex == 0 || interactionIndex == 2"
-            style="scrollbar-width: none"
-            class="mx-12 pt-8 mb-12 box-border border-b-[1px] border-dashed flex justify-between items-start"
-          >
-            <div class="flex shrink-0 w-[74%] justify-start items-start">
-              <div class="w-32 h-32 rounded-full shrink-0">
-                <img
-                  v-if="item?.headImageUrlDictMap?.name"
-                  class="w-full h-full object-cover rounded-full"
-                  :src="item?.headImageUrlDictMap?.name"
-                  alt=""
-                />
-                <img
-                  v-else
-                  class="w-full h-full object-cover rounded-full"
-                  src="https://www.xiaoyaotravel.com/_nuxt/default_avatar.gSq5JxK1.png"
-                  alt=""
-                />
+      <div class="w-full h-[100vh]">
+        <ChatEmpty
+          v-if="!interactionList.length && !loading"
+          image="conment"
+          :title="`暂无${interactionTitle}`"
+        />
+        <van-list
+          v-if="interactionList.length"
+          v-model:loading="loading"
+          :finished="finished"
+          :immediate-check="false"
+          finished-text=""
+          @load="handleCurrentChange"
+        >
+          <template v-for="item in interactionList" :key="item?.id">
+            <!-- 点赞与收藏 -->
+            <ProfileInteractionMessageLikesandFavorites
+              v-if="item.noticeType == 5"
+              :item-data="{
+                ...item,
+                messageContent: messageContentParse(item?.messageContent).messageContent
+              }"
+            ></ProfileInteractionMessageLikesandFavorites>
+
+            <!-- 艾特  -->
+            <ProfileInteractionMessageEit
+              v-if="item.noticeType == 6"
+              :item-data="{
+                ...item,
+                messageContent: messageContentParse(item?.messageContent).messageContent
+              }"
+            ></ProfileInteractionMessageEit>
+
+            <!-- 收到的评论 -->
+            <ProfileInteractionMessageReceiveComment
+              v-if="item.noticeType == 7"
+              :item-data="{
+                ...item,
+                messageContent: messageContentParse(item?.messageContent).messageContent
+              }"
+              :user-info="userInfo"
+              @on-add-reply="addReply(item, item.reviewId)"
+            />
+
+            <!-- 发出的评论 -->
+            <ProfileInteractionMessageSendComment
+              v-if="item.noticeType == 8"
+              :item-data="{
+                ...item,
+                messageContent: messageContentParse(item?.messageContent)
+              }"
+            />
+          </template>
+        </van-list>
+
+        <div
+          v-if="showInput"
+          @click="handleBlur"
+          class="w-[100vw] h-[100vh] fixed top-0 border-[#000] left-0 z-100 bg-[#000]/[0.1]"
+        >
+          <div @click.stop="" class="fixed bottom-0 left-0 w-full bg-[#fff] pt-10 pb-30 z-52">
+            <div class="flex items-start">
+              <!-- border-[#FD9A00]   @blur="handleBlur"-->
+              <div
+                class="relative bg-[#F3F3F3] flex-1 ml-12 mr-12 pl-5 pr-5 pt-4 pb-4 rounded-[4px] h-50 border flex items-center justify-between"
+              >
+                <textarea
+                  v-model="commentValue"
+                  ref="textareaRef"
+                  :placeholder="
+                    replyComment?.id ? `回复:${replyComment?.commentUserIdDictMap?.name}` : ''
+                  "
+                  @focus="textareaFocus"
+                  class="ml-8 flex-1 h-full bg-black/[0]"
+                  maxlength="5000"
+                  style="resize: none"
+                ></textarea>
+                <img @click="openEmoji" src="~/assets/img/yj/emoji.png" class="w-22 h-22" alt="" />
               </div>
-
-              <div class="ml-8 w-[85%] w-full text-sm">
-                <NuxtLink :to="`/yj/${item?.travelNoteId}`">
-                  <p class="w-full line-clamp-1 text-black-6 font-normal leading-xl">
-                    {{ item?.commentUserIdDictMap?.name }}
-                  </p>
-                  <p
-                    :class="`w-full ${interactionIndex == 0 ? 'line-clamp-1' : 'line-clamp-2'} my-6 text-black-3 text-base leading-4xl`"
-                  >
-                    <span v-if="item?.replyUserId">
-                      回复{{
-                        item?.replyUserIdDictMap?.name != userInfo.showName
-                          ? `@${item?.replyUserIdDictMap?.name}`
-                          : ''
-                      }}:
-                    </span>
-                    <span v-else>评论:</span>
-
-                    <span v-html="coveredContent(item?.commentContent)"></span>
-                  </p>
-                  <p class="w-full mb-6 text-black-9 leading-xl">{{ item?.createTime }}</p>
-                </NuxtLink>
-                <div
-                  @click.stop="addReply(item, item?.id)"
-                  class="box-border mb-12 line-clamp-1 rounded-full w-95 h-26 flex justify-center items-center text-base px-8 text-black-3 leading-4xl bg-[#F5F5F5] active:bg-black/[0.1]"
-                >
-                  <div class="w-16 h-16 rounded-full shrink-0 mr-4">
-                    <img
-                      v-if="userInfo?.headImageUrl"
-                      class="w-full h-full object-cover rounded-full"
-                      :src="userInfo?.headImageUrl"
-                      alt=""
-                    />
-                    <img
-                      v-else
-                      class="w-full h-full object-cover rounded-full"
-                      src="https://www.xiaoyaotravel.com/_nuxt/default_avatar.gSq5JxK1.png"
-                      alt=""
-                    />
-                  </div>
-                  回复评论
-                </div>
+              <div
+                @click="addComment"
+                class="py-6 px-16 mr-12 bg-[#FD9A00] text-[#fff] flex items-center justify-center rounded-full shrink-0"
+              >
+                发送
               </div>
             </div>
-
-            <NuxtLink
-              :to="`/yj/${item.travelNoteId}`"
-              class="block w-71 ml-17 h-47 shrink-0 rounded-[4px] overflow-hidden"
-            >
-              <img
-                v-if="item?.travelNoteUrl"
-                class="w-full h-full object-cover"
-                :src="item?.travelNoteUrl"
-                alt=""
-              />
-              <img v-else class="w-full h-full object-cover" :src="defaultImg" alt="" />
-            </NuxtLink>
-          </div>
-
-          <div
-            v-if="interactionIndex == 1"
-            style="scrollbar-width: none"
-            class="block mx-12 pt-8 mb-12 box-border border-b-[1px] border-dashed flex justify-between items-start"
-          >
-            <div class="flex shrink-0 w-[74%] justify-start items-start">
-              <div class="w-32 h-32 rounded-full shrink-0">
-                <img
-                  v-if="userInfo?.headImageUrl"
-                  class="w-full h-full object-cover rounded-full"
-                  :src="userInfo?.headImageUrl"
-                  alt=""
-                />
-                <img
-                  v-else
-                  class="w-full h-full object-cover rounded-full"
-                  src="https://www.xiaoyaotravel.com/_nuxt/default_avatar.gSq5JxK1.png"
-                  alt=""
-                />
+            <div v-if="showEmoji" class="h-[300px] bg-[#fff] overflow-auto">
+              <div @click="closeEmojiBox" class="flex justify-end pr-15 text-[#999] text-[12px]">
+                收起表情
               </div>
-
-              <div class="ml-8 w-[85%] mb-12 w-full text-sm">
-                <NuxtLink :to="`/yj/${item?.travelNoteId}`">
-                  <p
-                    v-if="userInfo?.showName"
-                    class="w-full line-clamp-1 text-black-6 font-normal leading-xl"
-                  >
-                    {{ userInfo?.showName }}
-                  </p>
-                  <p class="w-full line-clamp-2 my-6 text-black-3 text-base leading-4xl">
-                    <span v-if="item.replyUserId">
-                      回复{{
-                        item?.replyUserIdDictMap?.name != userInfo.showName
-                          ? `@${item?.replyUserIdDictMap?.name}`
-                          : ''
-                      }}:
-                    </span>
-                    <span v-else>
-                      评论{{
-                        item?.replyUserIdDictMap?.name ? `@${item?.replyUserIdDictMap?.name}` : ''
-                      }}
-                    </span>
-                    <span v-html="coveredContent(item?.commentContent)"></span>
-                  </p>
-                  <p class="w-full mb-6 text-black-9 leading-xl">{{ item?.createTime }}</p>
-                </NuxtLink>
+              <div class="flex items-center flex-wrap">
+                <div
+                  v-for="(item, index) in emojiJson"
+                  :key="index"
+                  class="hover:bg-[#ddd] text-[22px] w-[10%] aspect-[1/1] flex items-center justify-center"
+                >
+                  <div @click="selectEmoji(index)" v-html="coveredContent(index)"></div>
+                </div>
               </div>
             </div>
-
-            <NuxtLink
-              :to="`/yj/${item.travelNoteId}`"
-              class="block w-71 ml-17 h-47 shrink-0 rounded-[4px] overflow-hidden"
-            >
-              <img
-                v-if="item?.travelNoteUrl"
-                class="w-full h-full object-cover"
-                :src="item?.travelNoteUrl"
-                alt=""
-              />
-              <img v-else class="w-full h-full object-cover" :src="defaultImg" alt="" />
-            </NuxtLink>
           </div>
-        </template>
-      </van-list>
+        </div>
+      </div>
     </van-pull-refresh>
   </div>
 </template>
@@ -227,13 +157,15 @@ const { token } = storeToRefs(authStore)
 
 onMounted(() => {
   getUserInfo()
-  getlist()
+  getList()
 })
 
 definePageMeta({
   layout: false
 })
 
+// 0未关注 1已关注 2已经互关 3我自己 4被关注      focusStatus字段
+// 条件查询 互动消息--> 5赞与收藏 6提及  7收到的评论 8发出的评论
 // 默认的数组
 const interactionDropdownMenuList = [
   {
@@ -246,20 +178,20 @@ const interactionDropdownMenuList = [
   { text: '赞与收藏', value: 5, icon: like, iconM: like, iconO: likeOrange },
   {
     text: '提及',
-    value: 10,
+    value: 6,
     icon: eit,
     iconM: eit,
     iconO: eitOrange
   },
-  { text: '我的评论', value: 0, icon: comment, iconM: comment, iconO: commentOrange },
+  // { text: '我的评论', value: 0, icon: comment, iconM: comment, iconO: commentOrange },
   {
     text: '收到的评论',
-    value: 2,
+    value: 7,
     icon: medicalFiles,
     iconM: medicalFiles,
     iconO: medicalFilesOrange
   },
-  { text: '发出的评论', value: 1, icon: send, iconM: send, iconO: sendOrange }
+  { text: '发出的评论', value: 8, icon: send, iconM: send, iconO: sendOrange }
 ]
 
 const pageNum = ref(1)
@@ -283,7 +215,7 @@ function onInteractionFilterClose(value) {
   interactionIndex.value = value
   interactionTitle.value = interactionDropdownMenuList.find((item) => item.value == value).text
   interactionList.value = []
-  getInteractionList()
+  getList()
 }
 
 useSeoMeta({
@@ -315,18 +247,18 @@ function coveredContent(val) {
   })
 }
 
-// 获取互动消息的评论的数据列表
-const getInteractionList = async () => {
+// 获取互动的全部消息
+const getList = async () => {
   try {
     loading.value = true
 
     const {
       data: { dataList, totalCount }
-    } = await request(`/website/comment/tourTravelNotesComment/my-comments`, {
+    } = await request(`/website/tourMessage/getInteractionList`, {
       query: {
         pageNum: pageNum.value,
-        pageSize: 20,
-        commentType: interactionIndex.value
+        pageSize: 10,
+        noticeType: interactionIndex.value
       }
     })
 
@@ -345,49 +277,139 @@ const getInteractionList = async () => {
   }
 }
 
-// 获取互动的全部消息
-const getlist = async () => {
-  try {
-    loading.value = true
+// 点赞的的方法
 
-    const {
-      data: { dataList, totalCount }
-    } = await request(`/website/tourMessage/getInteractionList`, {
-      query: {
-        pageNum: pageNum.value,
-        pageSize: 20,
-        noticeType: interactionIndex.value
-      }
+const textareaRef = ref(null)
+
+// 评论内容
+const commentValue = ref('')
+
+// 是否展示表情
+const showEmoji = ref(false)
+
+// 回复评论
+const replyComment = ref({})
+// 显示输入框
+const showInput = ref(false)
+
+// 发布评论
+const canAddComment = ref(true)
+
+function addReply(item, reviewId) {
+  if (!token.value) {
+    showConfirmDialog({
+      showConfirmDialog: true,
+      title: '提示',
+      message: '登录后可以回复评论',
+      theme: 'round-button'
+    }).then(async () => {
+      navigateTo({ path: '/login' })
     })
+    return
+  }
 
-    if (!Array.isArray(dataList) || !dataList.length) return (interactionList.value = [])
-    interactionList.value = interactionList.value.concat(dataList)
-    refreshing.value = false
+  showInput.value = true
 
-    if (interactionList.value.length >= totalCount) {
-      finished.value = true
-    } else {
-      finished.value = false
-    }
-  } finally {
-    refreshing.value = false
-    loading.value = false
+  nextTick(() => {
+    textareaRef.value?.focus()
+  })
+
+  replyComment.value = item
+  if (item.businessType == 1) {
+    // 业务是游记
+    replyComment.value.travelNoteId = item.businessId
   }
+
+  reviewId && (replyComment.value.reviewId = item.reviewId)
 }
 
-// 点赞的的方法
+// 文本域失焦
+function handleBlur() {
+  showEmoji.value = false
+  textareaRef.value?.blur()
+  showInput.value = false
+  replyComment.value = {}
+}
+
+const cursorIndex = ref(0)
+
+// 打开表情
+function openEmoji() {
+  nextTick(() => {
+    textareaRef.value.selectionStart && (cursorIndex.value = textareaRef.value.selectionStart)
+    showEmoji.value = true
+  })
+}
+
+// 收起表情
+function closeEmojiBox() {
+  showEmoji.value = false
+  nextTick(() => {
+    textareaRef.value.focus()
+  })
+}
+
+// 选择表情
+function selectEmoji(emojiStr = '') {
+  const length = emojiStr.length
+  commentValue.value =
+    commentValue.value.slice(0, cursorIndex.value) +
+    emojiStr +
+    commentValue.value.slice(cursorIndex.value)
+
+  nextTick(() => {
+    cursorIndex.value += length
+    textareaRef.value.setSelectionRange(cursorIndex.value, cursorIndex.value)
+  })
+}
+
+// 回复评论
+async function addComment() {
+  if (!canAddComment.value) return
+  if (!token.value) {
+    showConfirmDialog({
+      showConfirmDialog: true,
+      title: '提示',
+      message: '登录后可以发布评论',
+      theme: 'round-button'
+    }).then(async () => {
+      navigateTo({ path: '/login' })
+    })
+    return
+  }
+  if (!commentValue.value.trim()) {
+    showToast('评论内容不能为空!')
+    return
+  }
+  canAddComment.value = false
+  const body = { travelNoteId: replyComment.value.travelNoteId, commentContent: commentValue.value }
+  if (replyComment.value.id) {
+    body.replyCommentId = replyComment.value.id
+  }
+  request('/website/comment/tourTravelNotesComment/add', { method: 'post', body })
+    .then(() => {
+      commentValue.value = ''
+      showToast('评论成功')
+
+      // getList()
+      showInput.value = false
+      showEmoji.value = false
+    })
+    .finally(() => (canAddComment.value = true), (replyComment.value = {}), (cursorIndex.value = 0))
+}
 
 // 下拉刷新
 const onRefresh = () => {
   refreshing.value = true
   commentList.value = []
-  getMyCommentList()
+  getList()
 }
+
 // 改变页数
 const handleCurrentChange = () => {
   finished.value = true
   pageNum.value += 1
-  getInteractionList()
+  getList()
 }
 </script>
 

+ 283 - 249
src/pages/profile/my-news/index.vue

@@ -6,204 +6,283 @@
       :src="audioTips"
       style="opacity: 0; z-index: -1"
     ></audio>
-
+    <van-sticky :offset-top="50">
+      <div class="w-full text-xl font-semibold px-16 h-48 flex justify-start items-center bg-white">
+        <span
+          @click="showPopover = true"
+          v-if="showPopover"
+          class="iconfont icon-plus text-[#FF9300]"
+          style="font-size: 24px"
+        ></span>
+        <span v-else class="iconfont icon-plus text-black" style="font-size: 24px"></span>
+
+        <van-popover
+          v-model:show="showPopover"
+          placement="bottom"
+          theme="dark"
+          offset="[5,20]"
+          :actions="actionsList"
+          @select="onSelect"
+        >
+          <template #reference>
+            <span :class="`${showPopover ? 'text-[#FF9300]' : 'text-black-3'}`">添加</span>
+          </template>
+        </van-popover>
+      </div>
+    </van-sticky>
     <van-pull-refresh v-model="refreshing" @refresh="onRefresh">
-      <van-sticky :offset-top="50">
-        <div
-          class="w-full text-xl font-semibold px-16 h-48 flex justify-start items-center bg-white"
+      <div style="height: calc(100vh - 100px)" class="w-full">
+        <van-list
+          ref="messageBoxRef"
+          class="flex-1 overflow-y-auto flex flex-col"
+          :finished="true"
+          finished-text=""
         >
-          <span
-            @click="showPopover = true"
-            v-if="showPopover"
-            class="iconfont icon-plus text-[#FF9300]"
-            style="font-size: 24px"
-          ></span>
-          <span v-else class="iconfont icon-plus text-black" style="font-size: 24px"></span>
-
-          <van-popover
-            v-model:show="showPopover"
-            placement="bottom"
-            theme="dark"
-            offset="[5,20]"
-            :actions="actionsList"
-            @select="onSelect"
+          <div
+            @click="
+              onChatPage('/profile/system-message', {
+                groupId: chatList[0]?.groupId
+              })
+            "
+            class="w-full relative h-82 flex justify-start items-center px-16"
           >
-            <template #reference>
-              <span :class="`${showPopover ? 'text-[#FF9300]' : 'text-black-3'}`">添加</span>
-            </template>
-          </van-popover>
-        </div>
-      </van-sticky>
-
-      <div
-        @click="
-          onChatPage('/profile/system-message', {
-            groupId: chatList[0]?.groupId
-          })
-        "
-        class="w-full relative h-82 flex justify-start items-center px-16"
-      >
-        <van-badge
-          v-if="chatList[0]?.unreadMessageCount"
-          v-bind="messageNumber(chatList[0]?.unreadMessageCount)"
-          max="99"
-        >
+            <van-badge
+              v-if="chatList[0]?.unreadMessageCount"
+              v-bind="messageNumber(chatList[0]?.unreadMessageCount)"
+              max="99"
+            >
+              <div
+                class="w-48 h-48 bg-[#0052D9] rounded-full overflow-hidden flex justify-center items-center"
+              >
+                <img
+                  class="w-24 h-24 shrink-0 object-cover"
+                  src="~/assets/img/chat/remind.svg"
+                  alt=""
+                />
+              </div>
+            </van-badge>
+
+            <div
+              v-else
+              class="w-48 h-48 bg-[#0052D9] rounded-full overflow-hidden flex justify-center items-center"
+            >
+              <img
+                class="w-24 h-24 shrink-0 object-cover"
+                src="~/assets/img/chat/remind.svg"
+                alt=""
+              />
+            </div>
+
+            <div class="h-48 w-245 shrink-0 ml-12 flex flex-wrap items-start">
+              <h1 class="line-clamp-1 w-full text-base text-black-3 font-semibold mb-4">
+                {{ chatList[0]?.groupName }}
+              </h1>
+              <p class="line-clamp-1 h-20 text-sm text-black-6 leading-3xl">
+                {{
+                  chatList[0]?.lastMessage
+                    ? messageContentParse(chatList[0]?.lastMessage?.messageContent)
+                    : ''
+                }}
+              </p>
+            </div>
+
+            <div class="w-35 h-48 shrink-0">
+              <p class="text-black/[0.6] text-sm text-end">
+                {{
+                  chatList[0]?.lastMessage
+                    ? createTimeSplit(chatList[0]?.lastMessage?.createTime)
+                    : ''
+                }}
+              </p>
+            </div>
+            <div class="absolute bottom-0 right-0 w-[96%] h-1 border-b-[1px]"></div>
+          </div>
+          <!-- navigateTo('/follow?listType=fans') -->
           <div
-            class="w-48 h-48 bg-[#0052D9] rounded-full overflow-hidden flex justify-center items-center"
+            @click="
+              onChatPage('/follow', {
+                listType: 'fans',
+                groupId: chatList[1]?.groupId
+              })
+            "
+            class="w-full relative h-82 flex justify-start items-center px-16"
           >
-            <img
-              class="w-24 h-24 shrink-0 object-cover"
-              src="~/assets/img/chat/remind.svg"
-              alt=""
-            />
+            <van-badge
+              v-if="chatList[1]?.unreadMessageCount"
+              v-bind="messageNumber(chatList[1]?.unreadMessageCount)"
+              max="99"
+            >
+              <div
+                class="w-48 h-48 bg-[#FF9300] rounded-full overflow-hidden flex justify-center items-center"
+              >
+                <img
+                  class="w-24 h-24 shrink-0 object-cover"
+                  src="~/assets/img/chat/user.svg"
+                  alt=""
+                />
+              </div>
+            </van-badge>
+
+            <div
+              v-else
+              @click="navigateTo('/follow?listType=fans')"
+              class="w-48 h-48 bg-[#FF9300] rounded-full overflow-hidden flex justify-center items-center"
+            >
+              <img
+                class="w-24 h-24 shrink-0 object-cover"
+                src="~/assets/img/chat/user.svg"
+                alt=""
+              />
+            </div>
+
+            <div class="h-48 w-245 shrink-0 ml-12 flex flex-wrap items-start">
+              <h1 class="line-clamp-1 w-full text-base text-black-3 font-semibold mb-4">
+                {{ chatList[1]?.groupName }}
+              </h1>
+              <p class="line-clamp-1 h-20 text-sm text-black-6 leading-3xl">
+                {{
+                  chatList[1]?.lastMessage
+                    ? messageShowName(chatList[1]?.lastMessage?.messageContent)
+                    : ''
+                }}
+              </p>
+            </div>
+
+            <div class="w-35 h-48 shrink-0">
+              <p class="text-black/[0.6] text-sm text-end">
+                {{
+                  chatList[1]?.lastMessage
+                    ? createTimeSplit(chatList[1]?.lastMessage?.createTime)
+                    : ''
+                }}
+              </p>
+            </div>
+            <div class="absolute bottom-0 right-0 w-[96%] h-1 border-b-[1px]"></div>
           </div>
-        </van-badge>
 
-        <div
-          v-else
-          class="w-48 h-48 bg-[#0052D9] rounded-full overflow-hidden flex justify-center items-center"
-        >
-          <img class="w-24 h-24 shrink-0 object-cover" src="~/assets/img/chat/remind.svg" alt="" />
-        </div>
-
-        <div class="h-48 w-245 shrink-0 ml-12 flex flex-wrap items-start">
-          <h1 class="line-clamp-1 w-full text-base text-black-3 font-semibold mb-4">
-            {{ chatList[0]?.groupName }}
-          </h1>
-          <p class="line-clamp-1 h-20 text-sm text-black-6 leading-3xl">
-            {{
-              chatList[0]?.lastMessage
-                ? messageContentParse(chatList[0]?.lastMessage?.messageContent)
-                : ''
-            }}
-          </p>
-        </div>
-
-        <div class="w-35 h-48 shrink-0">
-          <p class="text-black/[0.6] text-sm text-end">
-            {{
-              chatList[0]?.lastMessage ? createTimeSplit(chatList[0]?.lastMessage?.createTime) : ''
-            }}
-          </p>
-        </div>
-        <div class="absolute bottom-0 right-0 w-[96%] h-1 border-b-[1px]"></div>
-      </div>
-      <!-- navigateTo('/follow?listType=fans') -->
-      <div
-        @click="
-          onChatPage('/follow', {
-            listType: 'fans',
-            groupId: chatList[1]?.groupId
-          })
-        "
-        class="w-full relative h-82 flex justify-start items-center px-16"
-      >
-        <van-badge
-          v-if="chatList[1]?.unreadMessageCount"
-          v-bind="messageNumber(chatList[1]?.unreadMessageCount)"
-          max="99"
-        >
           <div
-            class="w-48 h-48 bg-[#FF9300] rounded-full overflow-hidden flex justify-center items-center"
+            @click="
+              onChatPage('/profile/interaction-message', {
+                groupId: chatList[2]?.groupId
+              })
+            "
+            class="w-full relative h-82 flex justify-start items-center px-16"
           >
-            <img class="w-24 h-24 shrink-0 object-cover" src="~/assets/img/chat/user.svg" alt="" />
+            <van-badge
+              v-if="chatList[2]?.unreadMessageCount > 0"
+              v-bind="messageNumber(chatList[2]?.unreadMessageCount)"
+              max="99"
+            >
+              <div
+                class="w-48 h-48 bg-[#FF476A] rounded-full overflow-hidden flex justify-center items-center"
+              >
+                <img
+                  class="w-24 h-24 shrink-0 object-cover"
+                  src="~/assets/img/chat/weixin-shake.svg"
+                  alt=""
+                />
+              </div>
+            </van-badge>
+
+            <div
+              v-else
+              class="w-48 h-48 bg-[#FF476A] rounded-full overflow-hidden flex justify-center items-center"
+            >
+              <img
+                class="w-24 h-24 shrink-0 object-cover"
+                src="~/assets/img/chat/weixin-shake.svg"
+                alt=""
+              />
+            </div>
+
+            <div class="h-48 w-245 shrink-0 ml-12 flex flex-wrap items-start">
+              <h1 class="line-clamp-1 w-full text-base text-black-3 font-semibold mb-4">
+                {{ chatList[2]?.groupName }}
+              </h1>
+              <p class="line-clamp-1 h-20 text-sm text-black-6 leading-3xl">
+                {{
+                  chatList[2]?.lastMessage
+                    ? messageContentParse(chatList[2]?.lastMessage?.messageContent)
+                    : ''
+                }}
+              </p>
+            </div>
+
+            <div class="w-35 h-48 shrink-0">
+              <p class="text-black/[0.6] text-sm text-end">
+                {{
+                  chatList[2]?.lastMessage
+                    ? createTimeSplit(chatList[2]?.lastMessage?.createTime)
+                    : ''
+                }}
+              </p>
+            </div>
+            <div class="absolute bottom-0 right-0 w-[96%] h-1 border-b-[1px]"></div>
           </div>
-        </van-badge>
 
-        <div
-          v-else
-          @click="navigateTo('/follow?listType=fans')"
-          class="w-48 h-48 bg-[#FF9300] rounded-full overflow-hidden flex justify-center items-center"
-        >
-          <img class="w-24 h-24 shrink-0 object-cover" src="~/assets/img/chat/user.svg" alt="" />
-        </div>
-
-        <div class="h-48 w-245 shrink-0 ml-12 flex flex-wrap items-start">
-          <h1 class="line-clamp-1 w-full text-base text-black-3 font-semibold mb-4">
-            {{ chatList[1]?.groupName }}
-          </h1>
-          <p class="line-clamp-1 h-20 text-sm text-black-6 leading-3xl">
-            {{
-              chatList[1]?.lastMessage
-                ? messageShowName(chatList[1]?.lastMessage?.messageContent)
-                : ''
-            }}
-          </p>
-        </div>
-
-        <div class="w-35 h-48 shrink-0">
-          <p class="text-black/[0.6] text-sm text-end">
-            {{
-              chatList[1]?.lastMessage ? createTimeSplit(chatList[1]?.lastMessage?.createTime) : ''
-            }}
-          </p>
-        </div>
-        <div class="absolute bottom-0 right-0 w-[96%] h-1 border-b-[1px]"></div>
-      </div>
+          <!-- 置顶绘画列表  "-->
+          <div v-if="isTopList?.length && activeNames" class="w-full">
+            <template v-for="(item, index) in isTopList" :key="item?.id">
+              <template v-if="index > 2">
+                <!-- 单聊会话 -->
+                <ProfileNewsGroupChat
+                  v-if="item?.noticeType == 2"
+                  :item-data="{
+                    ...item,
+                    updateTime: item?.lastMessage
+                      ? createTimeSplit(item?.lastMessage?.updateTime)
+                      : ''
+                  }"
+                  @on-chat-page="
+                    onChatPage('/chat/group', { userId: user.userId, groupId: item?.groupId })
+                  "
+                  @on-no-bother="noBother(item)"
+                  @on-is-top="onIsTop(item)"
+                  @on-conv-delete="onIsShow(item)"
+                />
+
+                <!-- 群聊会话 -->
+                <ProfileNewsSingleChat
+                  v-if="item?.noticeType == 1"
+                  :item-data="{
+                    ...item,
+                    updateTime: item?.lastMessage
+                      ? createTimeSplit(item?.lastMessage?.updateTime)
+                      : ''
+                  }"
+                  @on-chat-page="
+                    onChatPage('/chat/single', {
+                      sendUserId: userInfo.userId,
+                      groupId: item?.groupId,
+                      getUserId: item?.toUserId,
+                      groupRemark: item?.groupRemark
+                    })
+                  "
+                  @on-no-bother="noBother(item)"
+                  @on-is-top="onIsTop(item)"
+                  @on-conv-delete="onIsShow(item)"
+                />
+              </template>
+              <template v-else></template>
+            </template>
+          </div>
 
-      <div
-        @click="
-          onChatPage('/profile/interaction-message', {
-            groupId: chatList[2]?.groupId
-          })
-        "
-        class="w-full relative h-82 flex justify-start items-center px-16"
-      >
-        <van-badge
-          v-if="chatList[2]?.unreadMessageCount > 0"
-          v-bind="messageNumber(chatList[2]?.unreadMessageCount)"
-          max="99"
-        >
           <div
-            class="w-48 h-48 bg-[#FF476A] rounded-full overflow-hidden flex justify-center items-center"
+            v-if="isTopList.length >= 6"
+            @click="activeNames = !activeNames"
+            class="flex justify-between items-center h-20 -mt-20 w-full p-16 box-border"
           >
-            <img
-              class="w-24 h-24 shrink-0 object-cover"
-              src="~/assets/img/chat/weixin-shake.svg"
-              alt=""
-            />
+            <div class="shrink-0 flex items-center">
+              <van-icon name="bars" size="16" class="mr-5" />
+              <span class="text-sm">{{ collapseTitle }}</span>
+            </div>
+            <div class="w-16 h-16 shrink-0">
+              <van-icon name="arrow" size="16" />
+            </div>
           </div>
-        </van-badge>
-
-        <div
-          v-else
-          class="w-48 h-48 bg-[#FF476A] rounded-full overflow-hidden flex justify-center items-center"
-        >
-          <img
-            class="w-24 h-24 shrink-0 object-cover"
-            src="~/assets/img/chat/weixin-shake.svg"
-            alt=""
-          />
-        </div>
-
-        <div class="h-48 w-245 shrink-0 ml-12 flex flex-wrap items-start">
-          <h1 class="line-clamp-1 w-full text-base text-black-3 font-semibold mb-4">
-            {{ chatList[2]?.groupName }}
-          </h1>
-          <p class="line-clamp-1 h-20 text-sm text-black-6 leading-3xl">
-            {{
-              chatList[2]?.lastMessage
-                ? messageContentParse(chatList[2]?.lastMessage?.messageContent)
-                : ''
-            }}
-          </p>
-        </div>
-
-        <div class="w-35 h-48 shrink-0">
-          <p class="text-black/[0.6] text-sm text-end">
-            {{
-              chatList[2]?.lastMessage ? createTimeSplit(chatList[2]?.lastMessage?.createTime) : ''
-            }}
-          </p>
-        </div>
-        <div class="absolute bottom-0 right-0 w-[96%] h-1 border-b-[1px]"></div>
-      </div>
 
-      <!-- 置顶绘画列表  "-->
-      <div v-if="isTopList?.length && activeNames" class="w-full">
-        <template v-for="(item, index) in isTopList" :key="item?.id">
-          <template v-if="index > 2">
-            <!-- 单聊会话 -->
+          <!-- 不置顶的会话列表 -->
+          <template v-for="(item, index) in pinnedList" :key="item?.id">
             <ProfileNewsGroupChat
               v-if="item?.noticeType == 2"
               :item-data="{
@@ -211,14 +290,15 @@
                 updateTime: item?.lastMessage ? createTimeSplit(item?.lastMessage?.updateTime) : ''
               }"
               @on-chat-page="
-                onChatPage('/chat/group', { userId: user.userId, groupId: item?.groupId })
+                onChatPage('/chat/group', {
+                  userId: userInfo.userId,
+                  groupId: item?.groupId
+                })
               "
               @on-no-bother="noBother(item)"
               @on-is-top="onIsTop(item)"
               @on-conv-delete="onIsShow(item)"
             />
-
-            <!-- 群聊会话 -->
             <ProfileNewsSingleChat
               v-if="item?.noticeType == 1"
               :item-data="{
@@ -226,73 +306,24 @@
                 updateTime: item?.lastMessage ? createTimeSplit(item?.lastMessage?.updateTime) : ''
               }"
               @on-chat-page="
-                onChatPage('/chat/single', {
-                  sendUserId: userInfo.userId,
-                  groupId: item?.groupId,
-                  getUserId: item?.toUserId,
-                  groupRemark: item?.groupRemark
-                })
+                onChatPage(
+                  '/chat/single',
+                  {
+                    sendUserId: userInfo.userId,
+                    groupId: item?.groupId,
+                    getUserId: item?.toUserId,
+                    groupRemark: item?.groupRemark
+                  },
+                  item
+                )
               "
               @on-no-bother="noBother(item)"
               @on-is-top="onIsTop(item)"
               @on-conv-delete="onIsShow(item)"
             />
           </template>
-          <template v-else></template>
-        </template>
+        </van-list>
       </div>
-
-      <div
-        v-if="isTopList.length >= 6"
-        @click="activeNames = !activeNames"
-        class="flex justify-between items-center h-20 -mt-20 w-full p-16 box-border"
-      >
-        <div class="shrink-0 flex items-center">
-          <van-icon name="bars" size="16" class="mr-5" />
-          <span class="text-sm">{{ collapseTitle }}</span>
-        </div>
-        <div class="w-16 h-16 shrink-0">
-          <van-icon name="arrow" size="16" />
-        </div>
-      </div>
-
-      <!-- 不置顶的会话列表 -->
-      <template v-for="(item, index) in pinnedList" :key="item?.id">
-        <ProfileNewsGroupChat
-          v-if="item?.noticeType == 2"
-          :item-data="{
-            ...item,
-            updateTime: item?.lastMessage ? createTimeSplit(item?.lastMessage?.updateTime) : ''
-          }"
-          @on-chat-page="
-            onChatPage('/chat/group', {
-              userId: userInfo.userId,
-              groupId: item?.groupId
-            })
-          "
-          @on-no-bother="noBother(item)"
-          @on-is-top="onIsTop(item)"
-          @on-conv-delete="onIsShow(item)"
-        />
-        <ProfileNewsSingleChat
-          v-if="item?.noticeType == 1"
-          :item-data="{
-            ...item,
-            updateTime: item?.lastMessage ? createTimeSplit(item?.lastMessage?.updateTime) : ''
-          }"
-          @on-chat-page="
-            onChatPage('/chat/single', {
-              sendUserId: userInfo.userId,
-              groupId: item?.groupId,
-              getUserId: item?.toUserId,
-              groupRemark: item?.groupRemark
-            })
-          "
-          @on-no-bother="noBother(item)"
-          @on-is-top="onIsTop(item)"
-          @on-conv-delete="onIsShow(item)"
-        />
-      </template>
     </van-pull-refresh>
   </div>
 </template>
@@ -301,7 +332,7 @@
 import comments from '~/assets/img/chat/comments-white.svg'
 import plaza from '~/assets/img/chat/guangchang.svg'
 import userAdd from '~/assets/img/chat/user-add.svg'
-
+import audioTips from '@/assets/audio/message.mp3'
 import { messageContentParse } from '~/utils/detalTime.js'
 
 const actionsList = [
@@ -332,10 +363,11 @@ const showPopover = ref(false)
 
 const messagesNumber = ref(10)
 
-// 置顶列表
+// 置顶列表
 const pinnedList = computed(() => chatList.value.filter((el) => el.isTop != 1))
+
+// 置顶列表
 const isTopList = computed(() => chatList.value.filter((el) => el?.isTop == 1) ?? [])
-const pinnedSystemList = ref([]) //三个固定的消息
 
 // 个置顶聊天
 const collapse_text = '折叠置顶聊天'
@@ -423,7 +455,9 @@ const messageNumber = (content) => {
 }
 
 // 跳转聊天页面
-const onChatPage = async (path, query) => {
+const onChatPage = async (path, query, itemParams) => {
+  console.log(itemParams, '6666')
+
   const res = await request('/website/tourMessage/updateRead', {
     query: {
       groupId: query.groupId