From a0a85d13e9f8387678037cc2b6913b56b30f9b23 Mon Sep 17 00:00:00 2001
From: admin <344137771@qq.com>
Date: Tue, 03 Feb 2026 18:04:12 +0800
Subject: [PATCH] 1
---
src/views/customerService/index.vue | 86 +++++++++++--------------------------------
1 files changed, 22 insertions(+), 64 deletions(-)
diff --git a/src/views/customerService/index.vue b/src/views/customerService/index.vue
index 126fd61..2f8351f 100644
--- a/src/views/customerService/index.vue
+++ b/src/views/customerService/index.vue
@@ -1,13 +1,12 @@
<template>
<div class="service-box flex flex-col" :class="homesStore.kefu_url ? '' : 'pb-40'">
<div>
- <van-nav-bar ref="navEl" :title="$t('onLineService') + ' Jason David'" left-arrow @click-left="onClickLeft"
- fixed />
+ <van-nav-bar ref="navEl" :title="$t('onLineService')" left-arrow @click-left="onClickLeft" fixed />
<div class="px-3.5 py-5" v-if="state == 0">
<div class="white">{{ $t('OrdersWill') }} <span style="color: #1194F7">{{ dayjs.duration(remainingTime,
'seconds').format('mm:ss') }}</span> {{
- $t('afterCancel')
- }}</div>
+ $t('afterCancel')
+ }}</div>
<div class="mt-3">
<span class="mr-1" style="color: #8A919E">{{ $t('lumpSum') }}</span>
<span class="white">{{ payInfo.currency }} {{ payInfo.amount }}</span>
@@ -27,7 +26,7 @@
{{ $t('historyMessage') }}
</div>
<ul class="flex flex-col pt-3">
- <li v-for="(item, index) in list" :key="index" class="flex flex-col my-3">
+ <li v-for="(item, index) in list" :key="item.id" class="flex flex-col my-3">
<!-- <p class="text-center py-2 text-grey text-30" v-if="showTime(index)">{{
item.createtime &&
item.createtime.split(' ')[0]
@@ -35,7 +34,7 @@
<template v-if="item.delete_status != -1">
<p class="text-center pb-3 text-grey text-30">{{
item.createtime
- }}</p>
+ }}</p>
<div class="flex" :class="item.send_receive === 'send' ? 'justify-end' : ''">
<template v-if="item.send_receive === 'receive'">
<img src="@/assets/image/service/responser.png" class="w-20 h-20 mr-5" />
@@ -74,7 +73,7 @@
import { Uploader, showImagePreview } from 'vant'
import { _getMsg, _getUnreadMsg, _sendMsg } from '@/service/im.api'
import { _uploadImage } from '@/service/upload.api'
-import { ref, onMounted, onUnmounted, onBeforeMount, nextTick } from "vue";
+import { ref, onMounted, onUnmounted, onBeforeMount } from "vue";
import { useI18n } from "vue-i18n";
import { throttle } from '@/utils/index'
import { closeToast, showToast, showLoadingToast } from "vant";
@@ -111,24 +110,14 @@
let orderNo = ""
let partyId = ""
// onMounted(() => {
-// // 美洽客服
-// // const _ll="&id="+_id.value+"&name="+_name.value
-// const _ll = ""
-// // console.log(_ll)
-// const _uull = 'https://cdn.chat20gm.cfd/chat_online/index?channelId=1958101585091772416' + _ll;
-// // window.location.href=_uull
+// // 美洽客服
+// // const _ll="&id="+_id.value+"&name="+_name.value
+// // const _ll=""
-// // 绑定滚动事件监听器,使用 nextTick 确保 DOM 渲染完成
-// nextTick(() => {
-// if (boxScrollEl.value) {
-// boxScrollEl.value.addEventListener('scroll', handleScroll)
-// // 初始化时检查是否在底部
-// setTimeout(() => {
-// handleScroll()
-// }, 100)
-// }
-// })
+// // const _uull='https://cdn.chat20gm.cfd/chat_online/index?channelId=1958101585091772416'+_ll;
+// // window.location.href=_uull
// })
+
onMounted(() => {
orderNo = ""
partyId = ""
@@ -219,14 +208,6 @@
const fetchList = async (message_id = '') => { // 获取消息列表
console.log("orderNo = " + orderNo);
console.log("partyId = " + partyId);
- // 保存更新前的滚动位置和滚动高度
- let previousScrollTop = 0
- let previousScrollHeight = 0
- if (boxScrollEl.value && !message_id) {
- previousScrollTop = boxScrollEl.value.scrollTop
- previousScrollHeight = boxScrollEl.value.scrollHeight
- }
-
_getMsg({ message_id }, orderNo, partyId).then(data => { //
if (!lastMsgId.value) {
lastMsgId.value = data.length && data[data.length - 1]['id']
@@ -252,29 +233,10 @@
}
- // 使用 nextTick 确保 DOM 更新完成后再操作滚动
- setTimeout(() => {
- if (boxScrollEl.value) {
- if (message_id) {
- // 加载更多时,保持滚动位置(通过计算新增内容的高度)
- const newScrollHeight = boxScrollEl.value.scrollHeight
- const heightDiff = newScrollHeight - previousScrollHeight
- boxScrollEl.value.scrollTop = previousScrollTop + heightDiff
- } else {
- // 轮询新消息时,只有用户在底部才滚动到底部
- if (isScrollBottom.value) {
- boxScrollEl.value.scrollTop = boxScrollEl.value.scrollHeight - boxScrollEl.value.offsetHeight
- } else {
- // 如果用户不在底部,保持当前滚动位置(通过计算新增内容的高度)
- const newScrollHeight = boxScrollEl.value.scrollHeight
- const heightDiff = newScrollHeight - previousScrollHeight
- boxScrollEl.value.scrollTop = previousScrollTop + heightDiff
- }
- }
- currentScrollTop.value = boxScrollEl.value.scrollTop
- }
- }, 0)
-
+ if (isScrollBottom.value) {
+ boxScrollEl.value.scrollTop = boxScrollEl.value.scrollHeight - boxScrollEl.value.offsetHeight
+ }
+ currentScrollTop.value = boxScrollEl.value.scrollTop;
if (data.length < 10) {
finished.value = true
}
@@ -290,11 +252,11 @@
const handleScroll = () => {
if (boxScrollEl.value) {
- const { scrollTop, scrollHeight, offsetHeight } = boxScrollEl.value
- // 判断是否在底部(允许5px的误差)
- const isAtBottom = scrollHeight - scrollTop - offsetHeight <= 5
- isScrollBottom.value = isAtBottom
- currentScrollTop.value = scrollTop
+ if (boxScrollEl.value.scrollTop === currentScrollTop.value) {
+ isScrollBottom.value = true
+ } else {
+ isScrollBottom.value = false
+ }
}
}
@@ -324,7 +286,7 @@
message.value = ''
isScrollBottom.value = true
// document.getElementById('bottom').click()
- await fetchList()
+ // await fetchList()
})
}
const getCountdown = () => {
@@ -337,10 +299,6 @@
onUnmounted(() => {
clearIntervalTimer()
- // 移除滚动事件监听器
- if (boxScrollEl.value) {
- boxScrollEl.value.removeEventListener('scroll', handleScroll)
- }
})
</script>
--
Gitblit v1.9.3