|
@@ -1,5 +1,24 @@
|
|
|
<template>
|
|
|
<div class="voice-assistant">
|
|
|
+ <el-segmented
|
|
|
+ :options="[
|
|
|
+ {
|
|
|
+ value: '',
|
|
|
+ label: '全部',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'user',
|
|
|
+ label: '市民',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ value: 'agent',
|
|
|
+ label: '坐席',
|
|
|
+ },
|
|
|
+ ]"
|
|
|
+ v-model="voiceType"
|
|
|
+ @change="changeVoiceType"
|
|
|
+ style="position: absolute; right: 0; top: -40px"
|
|
|
+ />
|
|
|
<!-- 聊天框 -->
|
|
|
<el-scrollbar class="h100" ref="scrollbarRef" max-height="400px" v-if="showMessageList.length" @click="stopScroll">
|
|
|
<div class="chat-box" ref="chatBoxRef">
|
|
@@ -30,7 +49,7 @@
|
|
|
<el-text class="end-call" tag="p" v-if="talkEnd">-- 通话结束 --</el-text>
|
|
|
</div>
|
|
|
</el-scrollbar>
|
|
|
- <el-empty v-else :image-size="100"/>
|
|
|
+ <el-empty v-else :image-size="100" />
|
|
|
<el-button @click.stop="keepScroll" class="keep-scroll" title="回到底部" circle v-if="!isScrollBottom && !talkEnd">
|
|
|
<SvgIcon name="ele-ArrowDown" size="18px" />
|
|
|
</el-button>
|
|
@@ -178,7 +197,7 @@ const wsReceive = (message: any) => {
|
|
|
messageList.value = [...messageList.value, data];
|
|
|
}
|
|
|
scrollToBottom();
|
|
|
- showMessageList.value = other.deepClone(messageList.value);
|
|
|
+ filterMessage(voiceType.value, other.deepClone(messageList.value));
|
|
|
console.log('通话消息转写内容:', showMessageList.value);
|
|
|
}
|
|
|
if (data.body.content.action === 4) {
|
|
@@ -205,6 +224,11 @@ const wsReceive = (message: any) => {
|
|
|
console.log('坐席辅助收到消息', message);
|
|
|
}
|
|
|
};
|
|
|
+const voiceType = ref('');
|
|
|
+// 选择坐席还是市民通话内容
|
|
|
+const changeVoiceType = () => {
|
|
|
+ filterMessage(voiceType.value, messageList.value);
|
|
|
+};
|
|
|
// 记录日志
|
|
|
const submitLogFn = async (request: any) => {
|
|
|
try {
|
|
@@ -274,26 +298,26 @@ const wsNotice = (message: any) => {
|
|
|
i.tags.push(data.body.content[0]);
|
|
|
}
|
|
|
}
|
|
|
- showMessageList.value = other.deepClone(messageList.value);
|
|
|
+ filterMessage(voiceType.value, other.deepClone(messageList.value));
|
|
|
}
|
|
|
} catch (error) {
|
|
|
console.log('坐席辅助收到消息', error);
|
|
|
}
|
|
|
};
|
|
|
// 消息筛选
|
|
|
-const filterMessage = (type: string) => {
|
|
|
+const filterMessage = (type: string,arr: any[]) => {
|
|
|
switch (type) {
|
|
|
case 'user':
|
|
|
- showMessageList.value = messageList.value.filter((item: any) => item.body.content.callSentenceInfo.role === 'user');
|
|
|
+ showMessageList.value = arr.filter((item: any) => item.body.content.callSentenceInfo.role === 'user');
|
|
|
break;
|
|
|
case 'agent':
|
|
|
- showMessageList.value = messageList.value.filter((item: any) => item.body.content.callSentenceInfo.role === 'agent');
|
|
|
+ showMessageList.value = arr.filter((item: any) => item.body.content.callSentenceInfo.role === 'agent');
|
|
|
break;
|
|
|
case 'all':
|
|
|
- showMessageList.value = messageList.value;
|
|
|
+ showMessageList.value = arr;
|
|
|
break;
|
|
|
default:
|
|
|
- showMessageList.value = messageList.value;
|
|
|
+ showMessageList.value = arr;
|
|
|
break;
|
|
|
}
|
|
|
};
|
|
@@ -302,8 +326,8 @@ const state = reactive({
|
|
|
ruleForm: {
|
|
|
callId: '',
|
|
|
},
|
|
|
-})
|
|
|
-onMounted( async () => {
|
|
|
+});
|
|
|
+onMounted(async () => {
|
|
|
tagsViewList.value = await Session.get('tagsViewList');
|
|
|
if (route.query.callId) {
|
|
|
state.ruleForm.callId = route.query?.callId as string; // 通话id
|