From 8ab183fe7d48a4f93ed44f287bb599b1ed9f2e88 Mon Sep 17 00:00:00 2001
From: liudong <liudong>
Date: 星期一, 05 八月 2024 17:56:19 +0800
Subject: [PATCH] 智能体管理的测试助手页面的bug修改
---
src/views/dmx/IntelligentAgent/components/editAgent.vue | 44 ++-----
src/views/dmx/IntelligentAgent/components/sessionAction.vue | 253 ++++++++++++++++++++++++++++++++++++++++++
.idea/codeStyles/Project.xml | 4
3 files changed, 269 insertions(+), 32 deletions(-)
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index 70dac63..3e22f4b 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -3,7 +3,7 @@
<HTMLCodeStyleSettings>
<option name="HTML_SPACE_INSIDE_EMPTY_TAG" value="true" />
</HTMLCodeStyleSettings>
- <JSCodeStyleSettings>
+ <JSCodeStyleSettings version="0">
<option name="FORCE_SEMICOLON_STYLE" value="true" />
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
<option name="FORCE_QUOTE_STYlE" value="true" />
@@ -11,7 +11,7 @@
<option name="SPACES_WITHIN_OBJECT_LITERAL_BRACES" value="true" />
<option name="SPACES_WITHIN_IMPORTS" value="true" />
</JSCodeStyleSettings>
- <TypeScriptCodeStyleSettings>
+ <TypeScriptCodeStyleSettings version="0">
<option name="FORCE_SEMICOLON_STYLE" value="true" />
<option name="SPACE_BEFORE_FUNCTION_LEFT_PARENTH" value="false" />
<option name="FORCE_QUOTE_STYlE" value="true" />
diff --git a/src/views/dmx/IntelligentAgent/components/editAgent.vue b/src/views/dmx/IntelligentAgent/components/editAgent.vue
index ad78aa7..f10b761 100644
--- a/src/views/dmx/IntelligentAgent/components/editAgent.vue
+++ b/src/views/dmx/IntelligentAgent/components/editAgent.vue
@@ -106,29 +106,7 @@
</div>
</div>
<div class="main-container-rt">
- <div :style="{ height: heightrg }">
- <div style="padding: 10px">
- <a-avatar :style="{ backgroundColor: '#3370ff' }">
- <img
- :style="{ width: '100%' }"
- alt="dessert"
- src="https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a20012a2d4d5b9db43dfc6a01fe508c0.png~tplv-uwbnlip3yd-webp.webp"
- />
- </a-avatar>
- 璋冭瘯棰勮
- </div>
- <a-divider style="margin: 0; margin-left: 10px" />
-
- <div class="bottom">
- <div class="input">
- <a-input placeholder="杈撳叆鎮ㄦ兂浜嗚В鐨勫唴瀹癸紝鎸塃nter鍙戦��">
- <template #suffix>
- <icon-send style="cursor: pointer" />
- </template> </a-input
- ></div>
- <div class="text">鍐呭鐢盇I鐢熸垚锛屼粎渚涘弬鑰�</div>
- </div>
- </div>
+ <sessionAction></sessionAction>
</div>
</div>
</a-modal>
@@ -142,6 +120,7 @@
import { dialogSet } from '@/api/Agent';
import { Message } from '@arco-design/web-vue';
import EventBus from "@/utils/EventBus";
+ import sessionAction from "@/views/dmx/IntelligentAgent/components/sessionAction.vue";
const { setLoading } = useLoading(true);
const props = defineProps(['typeAngint', 'formData']);
const visible = ref(false);
@@ -190,7 +169,6 @@
const formRef = ref(null);
let tabs = ref([]);
const height = ref('calc(100vh - 150px)');
- const heightrg = ref('calc(100vh - 100px)');
const emit = defineEmits(['cancelModal']);
const rules = {
name: [
@@ -246,8 +224,11 @@
visible.value = true;
nextTick(() => {
Object.assign(form, data);
- console.log(form);
+ console.log(form,'浼犲��');
system.value = form.prompt_config.system;
+ if(tabs.value && tabs.value.length>0){
+ form.kb_ids = [tabs.value[0].id];
+ }
});
};
defineExpose({
@@ -298,11 +279,10 @@
try {
const { data } = await queryKbList(params);
console.log(data, 'data');
- tabs.value = data;
- if(tabs.value && tabs.value.length>0){
- form.kb_ids = [tabs.value[0].id];
- }
- console.log(tabs.value, 'tabs');
+ nextTick(() => {
+ tabs.value = data;
+ console.log(tabs.value, 'tabs');
+ });
} catch (err) {
// you can report use errorHandler or other
} finally {
@@ -345,4 +325,8 @@
line-height: 40px;
}
}
+ :deep(.arco-textarea-wrapper.arco-textarea-disabled){
+ background: var(--color-bg-2);
+ color: var(--color-text-1);
+ }
</style>
diff --git a/src/views/dmx/IntelligentAgent/components/sessionAction.vue b/src/views/dmx/IntelligentAgent/components/sessionAction.vue
new file mode 100644
index 0000000..9db0aac
--- /dev/null
+++ b/src/views/dmx/IntelligentAgent/components/sessionAction.vue
@@ -0,0 +1,253 @@
+<template>
+ <div :style="{ height: heightrg }">
+ <div style="padding: 10px">
+ <a-avatar :style="{ backgroundColor: '#3370ff' }">
+ <img
+ :style="{ width: '100%' }"
+ alt="dessert"
+ src="https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/a20012a2d4d5b9db43dfc6a01fe508c0.png~tplv-uwbnlip3yd-webp.webp"
+ />
+ </a-avatar>
+ 璋冭瘯棰勮
+ </div>
+ <a-divider style="margin: 0; margin-left: 10px" />
+ <a-scrollbar
+ ref="scrollbar"
+ id="home"
+ class="chat-list"
+ style="width: 90%; overflow: auto; height: 70vh; margin: 0px auto"
+ >
+ <div class="chat-item" v-for="sessionDetail in sessionDetailList">
+ <a-comment
+ v-if="sessionDetail.role === 'user'"
+ avatar="https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp"
+ >
+ <template #content>
+ <div :class="{ light: theme === 'light' }">{{
+ sessionDetail.content
+ }}</div>
+ </template>
+ </a-comment>
+ <a-comment
+ v-else-if="sessionDetail.role === 'assistant'"
+ avatar="https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/9eeb1800d9b78349b24682c3518ac4a3.png~tplv-uwbnlip3yd-webp.webp"
+ >
+ <template #content>
+ <a-card
+ class="chat-item-answer"
+ style="background-color: rgba(63, 64, 79, 1)"
+ >
+ <div :class="{ light: theme === 'light' }">{{
+ sessionDetail.content
+ }}</div>
+ </a-card>
+ </template>
+ </a-comment>
+ <a-comment
+ v-else-if="sessionDetail.role === 'last'"
+ avatar="https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/9eeb1800d9b78349b24682c3518ac4a3.png~tplv-uwbnlip3yd-webp.webp"
+ >
+ <template #content>
+ <a-textarea
+ readonly
+ auto-size
+ v-model="displayedText"
+ class="chat-item-answer"
+ style="background-color: rgba(63, 64, 79, 1)"
+ >
+ </a-textarea>
+ </template>
+ </a-comment>
+ </div>
+ </a-scrollbar>
+ <div class="bottom">
+ <div class="input">
+ <a-input
+ v-model="inputMsg"
+ @keydown.enter="sendMessage"
+ placeholder="杈撳叆鎮ㄦ兂浜嗚В鐨勫唴瀹癸紝鎸塃nter鍙戦��"
+ >
+ <template #suffix>
+ <icon-send style="cursor: pointer" @click="sendMessage" />
+ </template> </a-input
+ ></div>
+ <div class="text">鍐呭鐢盇I鐢熸垚锛屼粎渚涘弬鑰�</div>
+ </div>
+ </div>
+</template>
+
+<script setup lang="ts">
+import {
+ IconMoreVertical,
+ IconQuestionCircleFill,
+ IconPoweroff,
+ IconCommon,
+ IconSend,
+} from '@arco-design/web-vue/es/icon';
+import img1 from '@/assets/images/u64.png';
+import img2 from '@/assets/images/u69.png';
+import img3 from '@/assets/images/u74.png';
+import { ref, onMounted, computed, reactive, nextTick, watch } from 'vue';
+import { useUserStore, useAppStore } from '@/store';
+import {
+ sessionListApi,
+ deleteSessionApi,
+ getSessionDetailsApi,
+ chatApi,
+} from '@/api/session';
+import { Message } from '@arco-design/web-vue';
+const userStore = useUserStore();
+const appStore = useAppStore();
+const theme = computed(() => {
+ return appStore.theme;
+});
+const heightrg = ref('calc(100vh - 100px)');
+const sessionList = ref([]); //浼氳瘽鍒楄〃
+const sessionDetailList = ref([]); //鏍规嵁浼氳瘽id鍑烘潵鐨勪細璇濊鎯�
+const activeSessionId = ref('');
+const inputMsg = ref('');
+const scrollbar = ref(null);
+
+const currIndex = ref(0);
+const displayedText = ref(''); // 姝e湪鏄剧ず鐨勬枃瀛�
+let timer: number | null = null;
+const streamStr = ref('');
+const modalObj = reactive({ add: false });
+//鏌ヨ浼氳瘽鍒楄〃
+const querySessionList = async () => {
+ const { code, data } = await sessionListApi();
+ if (code === 200) {
+ sessionList.value = data;
+ if (Array.isArray(data) && data.length > 0) {
+ activeSessionId.value = data[1].id;
+ const res = await getSessionDetailsApi(data[0].id);
+ if (res.code === 200) {
+ sessionDetailList.value = res.data.message;
+ refreshScroll();
+ }
+ }
+ } else {
+ Message.warning('鏌ヨ澶辫触');
+ }
+};
+//鏍规嵁浼氳瘽id鍒犻櫎浼氳瘽
+const deleteSession = async (session) => {
+ const { code } = await deleteSessionApi([session.id]);
+ if (code === 200) {
+ Message.success('鍒犻櫎鎴愬姛');
+ querySessionList();
+ }
+};
+// eslint-disable-next-line prettier/prettier
+// 鏂板浼氳瘽涔嬪悗鍒锋柊浼氳瘽鍒楄〃
+const addSession = () => {
+ querySessionList();
+};
+// 鍒濆鍖栨暟鎹�
+const initData = () => {
+ querySessionList();
+};
+// 鑾峰彇鐧诲綍淇℃伅
+const userName = computed(() => {
+ return userStore.name;
+});
+const avatar = computed(() => {
+ return userStore.avatar;
+});
+const refreshScroll = () => {
+ nextTick(() => {
+ const container = document.getElementById('home');
+ scrollbar.value.scrollTop(container.scrollHeight);
+ });
+};
+// 鏍规嵁浼氳瘽id 鏌ヨ浼氳瘽璇︽儏
+const querySessionDetail = async (session) => {
+ activeSessionId.value = session.id;
+ const { code, data } = await getSessionDetailsApi(session.id);
+ if (code === 200) {
+ sessionDetailList.value = data.message;
+ refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
+ }
+};
+const sendMessage = async () => {
+ if (inputMsg.value) {
+ const { code, data } = await chatApi({
+ conversation_id: activeSessionId.value,
+ messages: inputMsg.value,
+ });
+ const res = await getSessionDetailsApi(activeSessionId.value);
+ if (res.code === 200) {
+ sessionDetailList.value = res.data.message.map((item, index) => {
+ if (index === res.data.message.length - 1) {
+ item.role = 'last';
+ displayedText.value = '';
+ currIndex.value = 0;
+ streamStr.value = item.content;
+ startDisplayStr();
+ }
+ return item;
+ });
+ refreshScroll();
+ }
+ inputMsg.value = '';
+ } else {
+ Message.warning('娑堟伅涓嶈兘涓虹┖');
+ }
+};
+onMounted(() => {
+ initData();
+});
+//鏂囧瓧鍔ㄦ�佽緭鍑�
+const startDisplayStr = () => {
+ if (timer) {
+ clearTimeout(timer!);
+ }
+ const res = streamStr.value;
+ // 灏嗘暟缁勪腑鐨勫瓧绗︿覆鎷兼帴璧锋潵
+ if (currIndex.value < res.length) {
+ displayedText.value += res[currIndex.value];
+ currIndex.value++;
+ setTimeout(startDisplayStr, 100);
+ } else {
+ clearTimeout(timer!);
+ timer = null;
+ }
+};
+watch(
+ () => scrollbar.value,
+ (newScroll, oldScroll) => {
+ if (newScroll) {
+ // 鑾峰彇a-scroll鐨勯珮搴�
+ const height = newScroll.$el.offsetHeight;
+ console.log('a-scroll height changed to:', height);
+ }
+ },
+ { deep: true }
+);
+</script>
+
+<style scoped lang="less">
+.container {
+ width: 100%;
+ display: flex;
+}
+
+.bottom {
+ width: 100%;
+ position: absolute;
+ bottom: 40px;
+ left: 0;
+
+ .input {
+ margin-left: 20%;
+ width: 60%;
+ }
+
+ .text {
+ margin-left: 40%;
+ font-size: 12px;
+ color: lightgrey;
+ line-height: 40px;
+ }
+}
+</style>
--
Gitblit v1.8.0