From c547081aa61be5c7b6d4c12853c675954c2156eb Mon Sep 17 00:00:00 2001
From: admin <344137771@qq.com>
Date: Tue, 10 Feb 2026 14:45:18 +0800
Subject: [PATCH] 1

---
 src/views/customerService/index.vue |  389 +++---------------------------------------------------
 1 files changed, 26 insertions(+), 363 deletions(-)

diff --git a/src/views/customerService/index.vue b/src/views/customerService/index.vue
index 1d77954..15714fd 100644
--- a/src/views/customerService/index.vue
+++ b/src/views/customerService/index.vue
@@ -1,377 +1,40 @@
 <template>
 	<div class="service-box flex flex-col pb-40">
-		<iframe height="100%" src="https://cdn.chat20gm.cfd/chat_online/index?channelId=1958101585091772416"></iframe>
+		<iframe height="100%" :src="iframeSrc"></iframe>
 	</div>
 </template>
 
 <script setup>
-	import {
-		Uploader,
-		showImagePreview
-	} from 'vant'
-	import {
-		_getMsg,
-		_getUnreadMsg,
-		_sendMsg
-	} from '@/service/im.api'
-	import {
-		_uploadImage
-	} from '@/service/upload.api'
-	import {
-		ref,
-		onMounted,
-		onUnmounted,
-		onBeforeMount
-	} from "vue";
-	import {
-		useI18n
-	} from "vue-i18n";
-	import {
-		throttle
-	} from '@/utils/index'
-	import {
-		closeToast,
-		showToast,
-		showLoadingToast
-	} from "vant";
-	import {
-		useRoute,
-		useRouter
-	} from 'vue-router';
-	import {
-		getc2cOrder
-	} from "@/service/recharge.api.js";
-	import {
-		useHomesStore
-	} from "@/store/homes.store";
-	import {
-		SET_KEFU
-	} from "@/store/types.store";
-	import {
-		useUserStore
-	} from '@/store/user';
-	import dayjs from 'dayjs';
-	import duration from 'dayjs/plugin/duration';
-	dayjs.extend(duration);
+import { computed } from 'vue'
+import { useUserStore } from '@/store/user'
 
-	const userStore = useUserStore()
-	const {
-		t
-	} = useI18n()
-	const homesStore = useHomesStore();
-	const router = useRouter()
-	const route = useRoute()
-	const list = ref([])
-	const message = ref('')
-	const lastMsgId = ref('')
-	const interval = ref(null)
-	const unread = ref(0)
-	const finished = ref(false)
-	const isScrollBottom = ref(true)
-	const currentScrollTop = ref(0)
-	const androidAttrs = ref(null)
-	const navEl = ref(null);
-	const boxScrollEl = ref(null);
-	const navHeight = ref(0);
-	const payInfo = ref({})
-	const remainingTime = ref(0)
+const BASE_URL = 'https://chatlink.chatslink.net/widget/standalone.html?eid=d6b703ce3568fa3d1c3793e8bc535a0c&agentid=96308ae67647106ecf8fe4b52b54a7f6&language=en'
 
-	let state = ref(null)
-	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 userStore = useUserStore()
 
-	})
-	// onMounted_bak(() => {
-	//   orderNo = ""
-	//   partyId = ""
-	//   navHeight.value = navEl.value.$el.getBoundingClientRect().height
-	//   if (route.query.order_no) {
-	//     getc2cOrderDetails(route.query.order_no, (data) => {
-	//       console.log("getc2cOrderDetails = " + JSON.stringify(data))
-	//       orderNo = data.orderNo;
-	//       partyId = data.partyId;
-	//       fetchList()
-	//     })
-	//   } else {
-	//     if (!homesStore.kefu_url) {
-	//       fetchList()
-	//     }
-	//   }
-	//   setInterval(() => {
-	//     getCountdown()
-	//   }, 1000)
-	//   const model = navigator.userAgent;
-	//   // 判断是否是安卓手机,是则是true
-	//   androidAttrs.value = model.indexOf('Android') > -1 || model.indexOf('Linux') > -1
-	//   window.addEventListener('scroll', handleScroll, true)
-	// })
-
-	onBeforeMount(() => {
-		homesStore[SET_KEFU]()
-	})
-
-	//获取订单详情
-	const getc2cOrderDetails = (orderNo, call) => {
-		getc2cOrder({
-			order_no: orderNo
-		}).then((res) => {
-			payInfo.value = res
-			state.value = payInfo.value.state
-			remainingTime.value = res.autoCancelTimeRemain
-			if (call) {
-				call(res)
-			}
-		})
-	}
-
-	//第三方客服带用户id
-	const generateExtranetLink = () => {
-		let extranetLink = ''
-		if (userStore.userInfo && userStore.userInfo.usercode) {
-			const userData = encodeURIComponent(JSON.stringify({
-				name: userStore.userInfo.usercode,
-				comment: ''
-			}))
-			let params = `&clientid=${userStore.userInfo.usercode}&metadata=${userData}`;
-			extranetLink = homesStore.kefu_url + params;
-		} else {
-			extranetLink = homesStore.kefu_url
-		}
-		// extranetLink = homesStore.kefu_url + params;
-		console.log('generateExtranetLink', extranetLink)
-		// console.log('extranetLink',extranetLink)
-		return extranetLink;
-	}
-
-	const throttleSend = throttle((message) => {
-		send('text', message)
-	}, 500)
-
-	const onOversize = (file) => {
-		showToast(t('fileMaxLimit'));
-	}
-	const onPreview = (url) => { // 预览
-		showImagePreview([url])
-	}
-	const showTime = (index) => { // 时间显示
-		if (index === 0) {
-			return true
-		}
-		if (index === list.value.length - 1) {
-			return false
-		}
-		if (list.value[index].createtime.split(' ')[0] === list.value[index + 1].createtime.split(' ')[1]) {
-			return false
-		}
-	}
-	const afterRead = (file) => { // 文件上传
-		showLoadingToast({
-			duration: 0
-		})
-		_uploadImage(file, (percent) => {
-			console.log(percent)
-		}).then(data => {
-			closeToast()
-			send('img', data)
-		}).catch(() => {
-			showToast(t('失败'))
-		})
-	}
-	const fetchList = async (message_id = '') => { // 获取消息列表
-		console.log("orderNo = " + orderNo);
-		console.log("partyId = " + partyId);
-		_getMsg({
-			message_id
-		}, orderNo, partyId).then(data => { //
-			if (!lastMsgId.value) {
-				lastMsgId.value = data.length && data[data.length - 1]['id']
-			}
-			if (data.length) {
-				if (message_id) { // 加载更多
-					lastMsgId.value = data[data.length - 1]['id']
-					list.value = [...data.reverse(), ...list.value]
-				} else {
-					list.value = [...list.value, ...data.reverse()]
-					let hash = {};
-					list.value = list.value.reduce(function(preVal, curVal) {
-						hash[curVal.id] ? ' ' : hash[curVal.id] = true && preVal.push(curVal);
-						return preVal
-					}, []);
-					list.value.forEach((item, index) => {
-						data.forEach((item2, index2) => {
-							if (item.id === item2.id) {
-								item.delete_status = item2.delete_status
-							}
-						})
-					})
-
-				}
-
-				if (isScrollBottom.value) {
-					boxScrollEl.value.scrollTop = boxScrollEl.value.scrollHeight - boxScrollEl.value
-						.offsetHeight
-				}
-				currentScrollTop.value = boxScrollEl.value.scrollTop;
-				if (data.length < 10) {
-					finished.value = true
-				}
-			}
-			if (!message_id) {
-				clearIntervalTimer()
-				interval.value = setInterval(() => {
-					fetchList()
-				}, 1000)
-			}
-		})
-	}
-
-	const handleScroll = () => {
-		if (boxScrollEl.value) {
-			if (boxScrollEl.value.scrollTop === currentScrollTop.value) {
-				isScrollBottom.value = true
-			} else {
-				isScrollBottom.value = false
-			}
-		}
-	}
-
-	const onMore = () => { // 加载更多
-		fetchList(lastMsgId.value)
-	}
-	const clearIntervalTimer = () => {
-		if (interval.value) {
-			clearInterval(interval.value)
-			interval.value = null
-		}
-	}
-	const fetchUnread = () => { // 获取未读
-		_getUnreadMsg(orderNo, partyId).then(data => {
-			unread.value = data
-		})
-	}
-	const onClickLeft = () => { // 返回
-		router.go(-1);
-	}
-	const send = (type = 'text', content = '') => { // 发送消息, img 也当消息text
-		if (!content) {
-			showToast(t('entryMessageContent'))
-			return
-		}
-		_sendMsg(type, content, orderNo, partyId).then(async data => {
-			message.value = ''
-			isScrollBottom.value = true
-			// document.getElementById('bottom').click()
-			// await fetchList()
-		})
-	}
-	const getCountdown = () => {
-		if (remainingTime.value > 0) {
-			remainingTime.value = remainingTime.value - 1
-		} else {
-			remainingTime.value = 0
-		}
-	}
-
-	onUnmounted(() => {
-		clearIntervalTimer()
-	})
+const iframeSrc = computed(() => {
+	const userInfo = userStore.userInfo || {}
+	const usercode = userInfo.usercode != null ? encodeURIComponent(String(userInfo.usercode)) : ''
+	const username = userInfo.username != null ? encodeURIComponent(String(userInfo.username)) : ''
+	let url = BASE_URL
+	// if (usercode) url += '&userCode=' + usercode
+	// if (username) url += '&name=' + username
+	var params = { userCode: usercode, name: username }
+	if (username) url += '&metadata=' + JSON.stringify(params);
+	return url
+})
 </script>
 <style lang="scss" scoped>
-	.service-box {
-		font-size: 14px;
-		width: 100%;
-		height: 100vh;
-		box-sizing: border-box;
-		background: $mainBgColor;
-		overflow: hidden;
+.service-box {
+	font-size: 14px;
+	width: 100%;
+	height: 100vh;
+	box-sizing: border-box;
+	background: $mainBgColor;
+	overflow: hidden;
 
-		:deep(.van-hairline--bottom::after) {
-			border-color: $mainBgColor;
-		}
+	:deep(.van-hairline--bottom::after) {
+		border-color: $mainBgColor;
 	}
-
-	.break-word {
-		word-wrap: break-word;
-		white-space: pre-wrap;
-	}
-
-	.max-w-230 {
-		max-width: 115px;
-	}
-
-	.responser {
-		position: relative;
-
-		&::after {
-			content: '';
-			width: 0;
-			height: 0;
-			border-top: 5px solid transparent;
-			border-bottom: 5px solid transparent;
-			border-right: 10px solid $input_background;
-			position: absolute;
-			left: -10px;
-			top: 10px;
-		}
-	}
-
-	.borderTop {
-		border-top: 1px solid $border_color;
-	}
-
-	.bottomBox {
-		height: 65px;
-	}
-
-	.white {
-		color: $text_color;
-	}
-
-	.chatBg {
-		background: $input_background;
-		height: 36px;
-		padding: 8px 18px;
-		border-radius: 18px;
-		color: $text_color;
-		font-size: 14px;
-		border: 1px solid $chat-border;
-	}
-
-	.right-chatBg {
-		position: relative;
-		background: $color_main;
-		color: $text_color;
-
-		&::after {
-			content: '';
-			width: 0;
-			height: 0;
-			border-top: 5px solid transparent;
-			border-bottom: 5px solid transparent;
-			border-left: 10px solid $color_main;
-			position: absolute;
-			right: -8px;
-			top: 14px;
-		}
-	}
-
-	.left-chatBg {
-		background: $input_background;
-	}
-
-	.localKefu {
-		overflow: auto;
-		flex-direction: column;
-	}
-
-	.van-nav-bar--fixed {
-		position: relative !important;
-	}
+}
 </style>
\ No newline at end of file

--
Gitblit v1.9.3