zhangyaowen 3 сар өмнө
parent
commit
82e5196241

+ 6 - 9
pages/chat/components/messageListItem.vue

@@ -17,24 +17,21 @@
       </view>
       <!-- 消息体渲染管理员消息和用户消息并左右展示  -->
       <view v-if="message.contentType !== KeFuMessageContentTypeEnum.SYSTEM" class="ss-flex ss-col-top" :class="[
-        message.senderType === UserTypeEnum.ADMIN
-          ? `ss-row-left`
-          : message.senderType === UserTypeEnum.MEMBER
-            ? `ss-row-right`
-            : '',
+        message.senderId !== userInfo.id
+          ? `ss-row-left` : `ss-row-right`,
       ]">
         <!-- 客服头像 -->
-        <image v-show="message.senderType === UserTypeEnum.ADMIN" class="chat-avatar ss-m-r-24" :src="sheep.$url.cdn(message.senderAvatar) ||
+        <image v-show="message.receiverId === userInfo.id" class="chat-avatar ss-m-r-24" :src="message.receiverAvatar ||
           default1
           " mode="aspectFill"></image>
         <!-- 内容 -->
         <template v-if="message.contentType === KeFuMessageContentTypeEnum.TEXT">
-          <view class="message-box" :class="{ admin: message.senderType === UserTypeEnum.ADMIN }">
+          <view class="message-box" :class="{ admin: message.senderId === UserTypeEnum.ADMIN }">
             <mp-html :content="replaceEmoji(getMessageContent(message).text || message.content)" />
           </view>
         </template>
         <template v-if="message.contentType === KeFuMessageContentTypeEnum.IMAGE">
-          <view class="message-box" :class="{ admin: message.senderType === UserTypeEnum.ADMIN }"
+          <view class="message-box" :class="{ admin: message.senderId === UserTypeEnum.ADMIN }"
             :style="{ width: '200rpx' }">
             <su-image class="message-img" isPreview
               :previewList="[sheep.$url.cdn(getMessageContent(message).picUrl || message.content)]" :current="0"
@@ -53,7 +50,7 @@
             @tap="sheep.$router.go('/pages/order/detail', { id: getMessageContent(message).id })" />
         </template>
         <!-- user头像 -->
-        <image v-if="message.senderType === UserTypeEnum.MEMBER" class="chat-avatar ss-m-l-24" :src="sheep.$url.cdn(userInfo.avatar) ||
+        <image v-if="message.senderId === userInfo.id" class="chat-avatar ss-m-l-24" :src="message.receiverAvatar ||
           default1
           " mode="aspectFill">
         </image>

+ 4 - 2
pages/chat/index.vue

@@ -25,7 +25,7 @@
 
 <script setup>
 import MessageList from '@/pages/chat/components/messageList.vue';
-import { reactive, ref, toRefs } from 'vue';
+import { reactive, ref, toRefs, computed } from 'vue';
 import sheep from '@/sheep';
 import ToolsPopup from '@/pages/chat/components/toolsPopup.vue';
 import MessageInput from '@/pages/chat/components/messageInput.vue';
@@ -66,6 +66,7 @@ const route = ref({})
 onLoad((options) => {
   route.value = options
 });
+
 // 发送消息
 async function onSendMessage() {
   if (!chat.msg) return;
@@ -74,8 +75,9 @@ async function onSendMessage() {
       conversationId: route.value.conversationId,
       contentType: KeFuMessageContentTypeEnum.TEXT,
       content: JSON.stringify({ text: chat.msg }),
+      relUserId: route.value.relUserId
     };
-    await KeFuApi.sendKefuMessage(data);
+    await KeFuApi.sendKefuMessageNew(data);
     await messageListRef.value.refreshMessageList();
     chat.msg = '';
   } finally {

+ 15 - 9
pages/goods/index.vue

@@ -207,16 +207,23 @@ const phoneClick = () => {
   }
 }
 // 客服
+const userInfo = computed(() => sheep.$store('user').userInfo);
 const customerService = () => {
-  if (state.goodsInfo.proType == 0) {
-    sheep.$router.go('/pages/chat/index')
-  } else {
-    sheep.$router.go('/pages/customerService/index', {
-      data: JSON.stringify({
-        url: state.goodsInfo.qrCodePath,
+  CouponApi.getKefuConversationByRelID({
+    relID: state.goodsInfo.kefuId
+  }).then((res) => {
+    console.log(res, 44444)
+    if (state.goodsInfo.proType == 0) {
+      sheep.$router.go('/pages/chat/index', { conversationId: res.data.id, relUserId: userInfo.value.id === res.data.relUserId ? res.data.userId : res.data.relUserId })
+    } else {
+      sheep.$router.go('/pages/customerService/index', {
+        data: JSON.stringify({
+          url: state.goodsInfo.qrCodePath,
+        })
       })
-    })
-  }
+    }
+  })
+
 }
 // 规格变更
 function onSkuChange(e) {
@@ -341,7 +348,6 @@ async function getActivityTime(id) {
     state.rewardActivity.endTime = data.endTime;
   }
 }
-
 onLoad((options) => {
   // 非法参数
   if (!options.id) {

+ 4 - 3
pages/user/consultationRecords.vue

@@ -22,7 +22,7 @@
 
 <script setup>
 import sheep from '@/sheep';
-import { reactive, ref, toRefs } from 'vue';
+import { reactive, ref, toRefs, computed } from 'vue';
 import { useWebSocket } from '@/sheep/hooks/useWebSocket';
 import { onLoad } from '@dcloudio/uni-app';
 import SpuHistoryApi from '@/sheep/api/product/history';
@@ -57,10 +57,11 @@ const parseMessage = (content) => {
     return content;
   }
 }
-
+const userInfo = computed(() => sheep.$store('user').userInfo);
+console.log(userInfo.value.id, 44444)
 const goToChat = (item) => {
   console.log(item, 44444)
-  sheep.$router.go('/pages/chat/index', { conversationId: item.id })
+  sheep.$router.go('/pages/chat/index', { conversationId: item.id, relUserId: userInfo.value.id === item.relUserId ? item.userId : item.relUserId })
 
 }
 const { options } = useWebSocket({

+ 1 - 1
sheep/api/product/history.js

@@ -37,7 +37,7 @@ const SpuHistoryApi = {
   },
   conversationList: (data) => {
     return request({
-      url: '/promotion/kefu-conversation/list',
+      url: '/promotion/kefu-conversation/listNew',
       method: 'GET',
       data,
       custom: {

+ 8 - 0
sheep/api/promotion/coupon.js

@@ -60,6 +60,14 @@ const CouponApi = {
       },
     });
   },
+  // 获得客服会话
+  getKefuConversationByRelID: (params) => {
+    return request({
+      url: '/promotion/kefu-conversation/getByRelID',
+      method: 'GET',
+      params,
+    });
+  },
   // 获得优惠劵
   getCoupon: (id) => {
     return request({

+ 14 - 0
sheep/api/promotion/kefu.js

@@ -15,6 +15,20 @@ const KeFuApi = {
       },
     });
   },
+  sendKefuMessageNew: (data) => {
+    return request({
+      url: '/promotion/kefu-message/sendNew',
+      method: 'POST',
+      data,
+      custom: {
+        auth: true,
+        showLoading: true,
+        loadingMsg: '发送中',
+        showSuccess: true,
+        successMsg: '发送成功',
+      },
+    });
+  },
   getKefuMessageList: (params) => {
     return request({
       url: '/promotion/kefu-message/list',

+ 16 - 10
sheep/components/s-goods-card/s-goods-card.vue

@@ -90,7 +90,7 @@ import sheep from '@/sheep';
 import SpuApi from '@/sheep/api/product/spu';
 import OrderApi from '@/sheep/api/trade/order';
 import { appendSettlementProduct } from '@/sheep/hooks/useGoods';
-
+import CouponApi from '@/sheep/api/promotion/coupon';
 // 布局类型
 const LayoutTypeEnum = {
   // 单列大图
@@ -119,17 +119,23 @@ const props = defineProps({
 
 const { layoutType, btnBuy, spuIds } = props.data || {};
 const { marginLeft, marginRight } = props.styles || {};
+const userInfo = computed(() => sheep.$store('user').userInfo);
 const lxkfClick = (item) => {
-  if (item.proType == 0) {
-    sheep.$router.go('/pages/chat/index')
-  } else {
-    sheep.$router.go('/pages/customerService/index', {
-      data: JSON.stringify({
-        url: item.qrCodePath,
+
+  CouponApi.getKefuConversationByRelID({
+    relID: state.goodsInfo.kefuId
+  }).then((res) => {
+    console.log(res, 44444)
+    if (state.goodsInfo.proType == 0) {
+      sheep.$router.go('/pages/chat/index', { conversationId: res.data.id, relUserId: userInfo.value.id === res.data.relUserId ? res.data.userId : res.data.relUserId })
+    } else {
+      sheep.$router.go('/pages/customerService/index', {
+        data: JSON.stringify({
+          url: state.goodsInfo.qrCodePath,
+        })
       })
-    })
-  }
-  console.log(item)
+    }
+  })
   // sheep.$router.go('/pages/customerService/index')
 }
 

+ 14 - 4
sheep/components/s-tabbar/s-tabbar.vue

@@ -5,8 +5,7 @@
       :customStyle="tabbarStyle">
       <su-tabbar-item v-for="(item, index) in tabbar.items" :key="item.text" :text="item.text" :name="item.url"
         :badge="item.badge" :dot="item.dot" :badgeStyle="{ ...tabbar.badgeStyle, paddingTop: '20px' }"
-        :isCenter="getTabbarCenter(index)" :centerImage="sheep.$url.cdn(item.iconUrl)"
-        @tap="sheep.$router.go(item.url)">
+        :isCenter="getTabbarCenter(index)" :centerImage="sheep.$url.cdn(item.iconUrl)" @tap="routerGo(item)">
         <template v-slot:active-icon>
           <image class="u-page__item__slot-icon" :src="sheep.$url.cdn(item.activeIconUrl)"></image>
         </template>
@@ -23,7 +22,7 @@
 import { computed, unref } from 'vue';
 import sheep from '@/sheep';
 import SuTabbar from '@/sheep/ui/su-tabbar/su-tabbar.vue';
-
+import CouponApi from '@/sheep/api/promotion/coupon';
 const tabbar = computed(() => {
   return sheep.$store('app').template.basic?.tabbar;
 });
@@ -40,7 +39,18 @@ const tabbarStyle = computed(() => {
       )}) no-repeat top center / 100% auto`,
     };
 });
-
+const userInfo = computed(() => sheep.$store('user').userInfo);
+const routerGo = (item) => {
+  if (item.url === '/pages/chat/index') {
+    CouponApi.getKefuConversationByRelID({
+      relID: 1
+    }).then((res) => {
+      sheep.$router.go('/pages/chat/index', { conversationId: res.data.id, relUserId: userInfo.value.id === res.data.relUserId ? res.data.userId : res.data.relUserId })
+    })
+  } else {
+    sheep.$router.go(item.url)
+  }
+}
 const getTabbarCenter = (index) => {
   if (unref(tabbar).mode !== 2) return false;
   return unref(tabbar).items % 2 > 0