From 9bf83cb9bc0e0b4590b15b418be7476007d58c9b Mon Sep 17 00:00:00 2001
From: zhangxiao <898441624@qq.com>
Date: 星期三, 14 八月 2024 14:46:50 +0800
Subject: [PATCH] fix: 新增会话修改必填项
---
src/views/dmx/agent/components/sessionAction.vue | 373 ++++++++-------
src/views/sessionManager/index.vue | 940 ++++++++++++++++++++--------------------
src/views/sessionManager/components/addSession.vue | 17
3 files changed, 669 insertions(+), 661 deletions(-)
diff --git a/src/views/dmx/agent/components/sessionAction.vue b/src/views/dmx/agent/components/sessionAction.vue
index e084802..13ef5bf 100644
--- a/src/views/dmx/agent/components/sessionAction.vue
+++ b/src/views/dmx/agent/components/sessionAction.vue
@@ -15,7 +15,7 @@
ref="scrollbar"
id="home"
class="chat-list"
- style="width: 90%; overflow: auto; height: 70vh; margin: 0px auto;"
+ style="width: 90%; overflow: auto; height: 70vh; margin: 0px auto"
>
<div class="chat-item" v-for="sessionDetail in sessionDetailList">
<a-comment
@@ -23,9 +23,16 @@
avatar="https://p1-arco.byteimg.com/tos-cn-i-uwbnlip3yd/3ee5f13fb09879ecb5185e440cef6eb9.png~tplv-uwbnlip3yd-webp.webp"
>
<template #content>
- <div :class="{ light: theme === 'light' }" style="background-color: var(--color-bg-2);color: var(--color-text-3);border: none;padding: 16px;">{{
- sessionDetail.content
- }}</div>
+ <div
+ :class="{ light: theme === 'light' }"
+ style="
+ background-color: var(--color-bg-2);
+ color: var(--color-text-3);
+ border: none;
+ padding: 16px;
+ "
+ >{{ sessionDetail.content }}</div
+ >
</template>
</a-comment>
<a-comment
@@ -35,11 +42,15 @@
<template #content>
<a-card
class="chat-item-answer"
- style="background-color: var(--color-bg-2);color: var(--color-text-3);border: none"
+ style="
+ background-color: var(--color-bg-2);
+ color: var(--color-text-3);
+ border: none;
+ "
>
<div :class="{ light: theme === 'light' }">{{
- sessionDetail.content
- }}</div>
+ sessionDetail.content
+ }}</div>
</a-card>
</template>
</a-comment>
@@ -53,7 +64,11 @@
auto-size
v-model="displayedText"
class="chat-item-answer"
- style="background-color: var(--color-bg-2);color: var(--color-text-3);border: none"
+ style="
+ background-color: var(--color-bg-2);
+ color: var(--color-text-3);
+ border: none;
+ "
>
</a-textarea>
</template>
@@ -70,196 +85,196 @@
<template #suffix>
<icon-send style="cursor: pointer" @click="sendMessage" />
</template> </a-input
- ></div>
+ ></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);
+ 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);
+ 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;
+ 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('娑堟伅涓嶈兘涓虹┖');
}
- } 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);
+ };
+ onMounted(() => {
+ initData();
});
-};
-// 鏍规嵁浼氳瘽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();
+ //鏂囧瓧鍔ㄦ�佽緭鍑�
+ const startDisplayStr = () => {
+ if (timer) {
+ clearTimeout(timer!);
}
- 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);
+ const res = streamStr.value;
+ // 灏嗘暟缁勪腑鐨勫瓧绗︿覆鎷兼帴璧锋潵
+ if (currIndex.value < res.length) {
+ displayedText.value += res[currIndex.value];
+ currIndex.value++;
+ setTimeout(startDisplayStr, 100);
+ } else {
+ clearTimeout(timer!);
+ timer = null;
}
- },
- { deep: true }
-);
+ };
+ 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;
-}
-//.light {
-// color: white !important;
-//}
-.bottom {
- width: 100%;
- position: absolute;
- bottom: 40px;
- left: 0;
-
- .input {
- margin-left: 20%;
- width: 60%;
+ .container {
+ width: 100%;
+ display: flex;
}
+ //.light {
+ // color: white !important;
+ //}
+ .bottom {
+ width: 100%;
+ position: absolute;
+ bottom: 40px;
+ left: 0;
- .text {
- margin-left: 40%;
- font-size: 12px;
- color: lightgrey;
- line-height: 40px;
- }
-}
-.chat-list {
- width: 90%;
- margin: 0px auto;
- .chat-item {
- margin-top: 20px;
- .chat-item-answer {
- color: white;
+ .input {
+ margin-left: 20%;
+ width: 60%;
+ }
+
+ .text {
+ margin-left: 40%;
+ font-size: 12px;
+ color: lightgrey;
+ line-height: 40px;
}
}
-}
+ .chat-list {
+ width: 90%;
+ margin: 0px auto;
+ .chat-item {
+ margin-top: 20px;
+ .chat-item-answer {
+ color: white;
+ }
+ }
+ }
</style>
diff --git a/src/views/sessionManager/components/addSession.vue b/src/views/sessionManager/components/addSession.vue
index 7b2c2c9..b29cc7a 100644
--- a/src/views/sessionManager/components/addSession.vue
+++ b/src/views/sessionManager/components/addSession.vue
@@ -24,12 +24,12 @@
message: '鏅鸿兘鍔╂墜涓嶈兘涓虹┖',
},
],
- conversation_desc: [
- {
- required: true,
- message: '鎻忚堪涓嶈兘涓虹┖',
- },
- ],
+ // conversation_desc: [
+ // {
+ // required: true,
+ // message: '鎻忚堪涓嶈兘涓虹┖',
+ // },
+ // ],
};
onMounted(() => {
queryDialogList();
@@ -38,6 +38,7 @@
const handleOk = () => {
formRef.value.validate().then(async (res) => {
if (!res) {
+ conversation.value.conversation_desc = '鏈懡鍚嶄細璇�';
const { code } = await addSessionApi({ ...conversation.value });
if (code === 200) {
Message.success('娣诲姞鎴愬姛');
@@ -85,7 +86,7 @@
>
<template #title> 鏂板浼氳瘽 </template>
<a-form ref="formRef" :model="conversation" :rules="rules">
- <a-form-item label="鍔╂墜鍏宠仈:" field="dialog_id" >
+ <a-form-item label="鍔╂墜鍏宠仈:" field="dialog_id">
<a-select
style="width: 80%"
v-model="conversation.dialog_id"
@@ -100,7 +101,7 @@
>
</a-select>
</a-form-item>
- <a-form-item label="鍚嶅瓧:" field="conversation_desc">
+ <a-form-item label="鍚嶅瓧:">
<a-textarea
placeholder="璇疯緭鍏ュ悕瀛�"
:max-length="100"
diff --git a/src/views/sessionManager/index.vue b/src/views/sessionManager/index.vue
index abb44a3..8243092 100644
--- a/src/views/sessionManager/index.vue
+++ b/src/views/sessionManager/index.vue
@@ -50,10 +50,10 @@
:class="{ isLeftActive: activeSessionId === session.id }"
>
<div class="text" :class="{ time: theme === 'dark' }"
- >{{ session.name }}
+ >{{ session.name }}
</div>
<div class="time"
- >{{
+ >{{
moment(new Date(session.create_time)).format(
'YYYY-MM-DD HH:mm:ss'
)
@@ -64,7 +64,7 @@
</a-card>
</a-col>
<!-- 鏅鸿兘浣撲細璇�-->
- <a-col :span="18" v-show="agentType == '1'">
+ <a-col :span="18" v-show="agentType == '1'">
<a-card class="center">
<!-- <div
v-if="sessionDetailList.length === 0"
@@ -164,7 +164,7 @@
</template>
<template #content>
<div :class="{ chartUserText: theme === 'light' }"
- >{{ sessionDetail.content }}
+ >{{ sessionDetail.content }}
</div>
</template>
</a-comment>
@@ -179,7 +179,7 @@
<template #content>
<a-card :class="{ chatItemAnswer: theme === 'light' }">
<div :class="{ light: theme === 'light' }"
- >{{ sessionDetail.content }}
+ >{{ sessionDetail.content }}
</div>
</a-card>
</template>
@@ -243,21 +243,18 @@
style="border-radius: 24px"
:loading="loading"
size="large"
- >鍙戦��</a-button
+ >鍙戦��</a-button
>
</div>
</div>
</div>
</a-card>
</a-col>
- <a-col :span="18" v-show="agentType == '2'">
+ <a-col :span="18" v-show="agentType == '2'">
<a-card class="center">
<agentSession :modalObj="agentObj"></agentSession>
</a-card>
</a-col>
-
-
-
<!-- <a-col :span="5">
<a-card class="right">
@@ -323,524 +320,519 @@
</div>
</template>
<script setup lang="ts">
-import {
- IconClose,
- IconSearch,
- IconTiktokColor,
-} from '@arco-design/web-vue/es/icon';
-import { useAppStore, useUserStore } from '@/store';
-import { computed, nextTick, onMounted, watch, reactive, ref } from 'vue';
+ import {
+ IconClose,
+ IconSearch,
+ IconTiktokColor,
+ } from '@arco-design/web-vue/es/icon';
+ import { useAppStore, useUserStore } from '@/store';
+ import { computed, nextTick, onMounted, watch, reactive, ref } from 'vue';
-import { Message } from '@arco-design/web-vue';
-import { EventSourceParserStream } from 'eventsource-parser/stream';
-import moment from 'moment';
-import AddSession from '@/views/sessionManager/components/addSession.vue';
-import agentSession from '@/views/sessionManager/components/agentSession.vue';
-import {
- chatApi,
- getDialogListApi,
- getSessionDetailsApi,
- sessionListApi,
-} from '@/api/session';
-import { getAuthorization } from '@/utils/auth';
-import { queryCanvasList } from "@/api/Agent";
-import { getAgentSessionDetailsApi } from "@/api/agentSession";
+ import { Message } from '@arco-design/web-vue';
+ import { EventSourceParserStream } from 'eventsource-parser/stream';
+ import moment from 'moment';
+ import AddSession from '@/views/sessionManager/components/addSession.vue';
+ import agentSession from '@/views/sessionManager/components/agentSession.vue';
+ import {
+ chatApi,
+ getDialogListApi,
+ getSessionDetailsApi,
+ sessionListApi,
+ } from '@/api/session';
+ import { getAuthorization } from '@/utils/auth';
+ import { queryCanvasList } from '@/api/Agent';
+ import { getAgentSessionDetailsApi } from '@/api/agentSession';
-const sessionDetailList = ref([]); //鏍规嵁浼氳瘽id鍑烘潵鐨勪細璇濊鎯�
-const sessionList = ref([]); //浼氳瘽鍒楄〃
-const modalObj = reactive({ add: false });
-const dialogId = ref('');
-const chatDis = ref(false);
-const loading = ref(false);
-const agentType = ref('1');
+ const sessionDetailList = ref([]); //鏍规嵁浼氳瘽id鍑烘潵鐨勪細璇濊鎯�
+ const sessionList = ref([]); //浼氳瘽鍒楄〃
+ const modalObj = reactive({ add: false });
+ const dialogId = ref('');
+ const chatDis = ref(false);
+ const loading = ref(false);
+ const agentType = ref('1');
-const currIndex = ref(0);
-const displayedText = ref(''); // 姝e湪鏄剧ず鐨勬枃瀛�
-let timer: number | null = null;
-const streamStr = ref('');
-const inputMsg = ref('');
-const activeSessionId = ref('');
-const fieldNames = { value: 'id', label: 'name' };
-const dialogs = ref([]);
-const dialogObj = reactive({});
-const agentObj = reactive({});
-const agentList = ref([]);
-const selectValue = ref('');
-const sectionList = ref({});
-const DialogList = async () => {
- const { code, data } = await getDialogListApi();
- if (code === 200) {
- if (data) {
- selectValue.value = data[0].id;
- dialogs.value = data.map((item) => {
+ const currIndex = ref(0);
+ const displayedText = ref(''); // 姝e湪鏄剧ず鐨勬枃瀛�
+ let timer: number | null = null;
+ const streamStr = ref('');
+ const inputMsg = ref('');
+ const activeSessionId = ref('');
+ const fieldNames = { value: 'id', label: 'name' };
+ const dialogs = ref([]);
+ const dialogObj = reactive({});
+ const agentObj = reactive({});
+ const agentList = ref([]);
+ const selectValue = ref('');
+ const sectionList = ref({});
+ const DialogList = async () => {
+ const { code, data } = await getDialogListApi();
+ if (code === 200) {
+ if (data) {
+ selectValue.value = data[0].id;
+ dialogs.value = data.map((item) => {
+ return {
+ ...item,
+ type: 1, //鏅鸿兘浣�
+ };
+ });
+ console.log(data, 'dialogs');
+ queryCanvas();
+ // querySessionList();
+ }
+ }
+ };
+
+ const queryCanvas = async (params = {}) => {
+ try {
+ const { data } = await queryCanvasList(params);
+ console.log(data, 'agent');
+ agentList.value = data.map((item) => {
return {
...item,
- type: 1,//鏅鸿兘浣�
- }
+ name: item.title,
+ type: 2, //agent
+ };
});
- console.log(data, 'dialogs');
- queryCanvas();
- // querySessionList();
- }
- }
-};
+ // 鍚堝苟鏁扮粍
+ dialogs.value = dialogs.value.concat(agentList.value);
-const queryCanvas = async (params = {}) => {
- try {
- const { data } = await queryCanvasList(params);
- console.log(data, 'agent');
- agentList.value = data.map((item) => {
- return {
- ...item,
- name: item.title,
- type: 2,//agent
+ // 鍒ゆ柇褰撳墠鏄櫤鑳戒綋鎴朼gent
+ // console.log(val, 'val');
+ if (dialogs.value.length > 0) {
+ dialogChange(dialogs.value[0].id);
}
- });
- // 鍚堝苟鏁扮粍
- dialogs.value = dialogs.value.concat(agentList.value);
+ } catch (err) {
+ // you can report use errorHandler or other
+ } finally {
+ }
+ };
+ const handleShiftEnter = (event) => {
+ event.preventDefault();
+ inputMsg.value += '\n';
+ };
+ const dialogChange = (val) => {
// 鍒ゆ柇褰撳墠鏄櫤鑳戒綋鎴朼gent
// console.log(val, 'val');
- if(dialogs.value.length>0){
- dialogChange(dialogs.value[0].id);
+ dialogId.value = val;
+ dialogs.value.forEach((item) => {
+ if (item.id === val) {
+ Object.assign(dialogObj, item);
+ }
+ });
+ console.log(dialogObj.type, 'dialogObj');
+ if (dialogObj.type == 1) {
+ agentType.value = 1;
+ querySessionList();
+ } else {
+ agentType.value = 2;
+ queryAgentSessionList();
}
- } catch (err) {
- // you can report use errorHandler or other
- } finally {
-
- }
-};
-
-const handleShiftEnter = (event) => {
- event.preventDefault();
- inputMsg.value += '\n';
-};
-const dialogChange = (val) => {
- // 鍒ゆ柇褰撳墠鏄櫤鑳戒綋鎴朼gent
- // console.log(val, 'val');
- dialogId.value = val;
- dialogs.value.forEach((item) => {
- if (item.id === val) {
- Object.assign(dialogObj, item)
- }
- })
- console.log(dialogObj.type, 'dialogObj');
- if (dialogObj.type == 1) {
- agentType.value = 1;
- querySessionList();
- } else {
- agentType.value = 2;
- queryAgentSessionList()
- }
-
-
-
- // querySessionList();
-};
-const sentClick = () => {
- sendMessage('click');
-};
-const sendMessage = async (event) => {
- if (event.keyCode == 13 || event === 'click') {
- if (!event.shiftKey) {
- //鍙湁enter娌℃湁shift锛屾垨杩涜浣犵殑鍏朵粬閫昏緫
- if (event !== 'click') {
- event.preventDefault(); // 闃绘榛樿琛屼负锛屽嵆涓嶆崲琛�
- }
-
- chatDis.value = true;
- loading.value = true;
- if (!activeSessionId.value) {
- Message.warning('璇烽�夋嫨浼氳瘽');
- chatDis.value = false;
- loading.value = false;
- return;
- }
-
- // if (displayedText.value) {
- // querySessionList();
- // }
-
- if (inputMsg.value) {
- sessionDetailList.value.push({
- content: inputMsg.value,
- role: 'user',
- });
- sessionDetailList.value.push({ role: 'last' });
- refreshScroll();
- const response = await fetch(
- '/api/tech/cloudminds/query?modeltype=localragflow',
- {
- method: 'POST',
- headers: {
- 'Authorization': getAuthorization(),
- 'Content-Type': 'application/json',
- },
- body: JSON.stringify({
- conversation_id: activeSessionId.value,
- messages: inputMsg.value,
- }),
- }
- );
-
- const reader = response?.body
- ?.pipeThrough(new TextDecoderStream())
- .pipeThrough(new EventSourceParserStream())
- .getReader();
- currIndex.value = 0;
- while (true) {
- const x = await reader?.read();
- if (x) {
- const { done, value } = x;
- console.log(x, 999);
- try {
- const val = JSON.parse(value?.data || '');
- const d = val?.data;
- if (typeof d !== 'boolean') {
- console.info('data:', d);
- streamStr.value = d.content;
- startDisplayStr();
- }
- } catch (e) {
- console.warn(e);
- }
- if (done) {
- console.info('done');
- displayedText.value = '';
- querySessionDetail(sectionList.value);
- break;
- }
- }
+ // querySessionList();
+ };
+ const sentClick = () => {
+ sendMessage('click');
+ };
+ const sendMessage = async (event) => {
+ if (event.keyCode == 13 || event === 'click') {
+ if (!event.shiftKey) {
+ //鍙湁enter娌℃湁shift锛屾垨杩涜浣犵殑鍏朵粬閫昏緫
+ if (event !== 'click') {
+ event.preventDefault(); // 闃绘榛樿琛屼负锛屽嵆涓嶆崲琛�
}
- chatDis.value = false;
- loading.value = false;
- inputMsg.value = '';
- } else {
- Message.warning('娑堟伅涓嶈兘涓虹┖');
- chatDis.value = false;
- loading.value = false;
+
+ chatDis.value = true;
+ loading.value = true;
+ if (!activeSessionId.value) {
+ Message.warning('璇烽�夋嫨浼氳瘽');
+ chatDis.value = false;
+ loading.value = false;
+ return;
+ }
+
+ // if (displayedText.value) {
+ // querySessionList();
+ // }
+
+ if (inputMsg.value) {
+ sessionDetailList.value.push({
+ content: inputMsg.value,
+ role: 'user',
+ });
+ sessionDetailList.value.push({ role: 'last' });
+ refreshScroll();
+ const response = await fetch(
+ '/api/tech/cloudminds/query?modeltype=localragflow',
+ {
+ method: 'POST',
+ headers: {
+ 'Authorization': getAuthorization(),
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({
+ conversation_id: activeSessionId.value,
+ messages: inputMsg.value,
+ }),
+ }
+ );
+
+ const reader = response?.body
+ ?.pipeThrough(new TextDecoderStream())
+ .pipeThrough(new EventSourceParserStream())
+ .getReader();
+ currIndex.value = 0;
+ while (true) {
+ const x = await reader?.read();
+ if (x) {
+ const { done, value } = x;
+ console.log(x, 999);
+ try {
+ const val = JSON.parse(value?.data || '');
+ const d = val?.data;
+ if (typeof d !== 'boolean') {
+ console.info('data:', d);
+ streamStr.value = d.content;
+ startDisplayStr();
+ }
+ } catch (e) {
+ console.warn(e);
+ }
+ if (done) {
+ console.info('done');
+ displayedText.value = '';
+ querySessionDetail(sectionList.value);
+ break;
+ }
+ }
+ }
+ querySessionList();
+ chatDis.value = false;
+ loading.value = false;
+ inputMsg.value = '';
+ } else {
+ Message.warning('娑堟伅涓嶈兘涓虹┖');
+ chatDis.value = false;
+ loading.value = false;
+ }
}
}
- }
-};
-const querySessionDetail = async (session) => {
- sectionList.value = session;
- activeSessionId.value = session.id;
- const { code, data } = await getSessionDetailsApi(session.id);
- if (code === 200) {
- sessionDetailList.value = data.message;
- refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
- }
-};
-const queryAgentSessionDetail = async (id) => {
- const { code, data } = await getAgentSessionDetailsApi(id);
- if (code == 0) {
- Object.assign(agentObj, data)
- // sessionDetailList.value = data.message;
- // refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
- }
-};
-const scrollbar = ref(null);
-const refreshScroll = () => {
- nextTick(() => {
- const container = document.getElementById('home');
- scrollbar.value.scrollTop(container.scrollHeight);
+ };
+ const querySessionDetail = async (session) => {
+ sectionList.value = session;
+ activeSessionId.value = session.id;
+ const { code, data } = await getSessionDetailsApi(session.id);
+ if (code === 200) {
+ sessionDetailList.value = data.message;
+ refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
+ }
+ };
+ const queryAgentSessionDetail = async (id) => {
+ const { code, data } = await getAgentSessionDetailsApi(id);
+ if (code == 0) {
+ Object.assign(agentObj, data);
+ // sessionDetailList.value = data.message;
+ // refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
+ }
+ };
+ const scrollbar = ref(null);
+ const refreshScroll = () => {
+ nextTick(() => {
+ const container = document.getElementById('home');
+ scrollbar.value.scrollTop(container.scrollHeight);
+ });
+ };
+ // 鏌ヨ浼氳瘽鍒楄〃
+ const querySessionList = async () => {
+ const { code, data } = await sessionListApi(selectValue.value);
+ if (code === 200) {
+ sessionList.value = data;
+ activeSessionId.value = data[0].id; //榛樿閫夋嫨绗竴涓�
+ querySessionDetail(data[0]);
+ } else {
+ Message.warning('鏌ヨ澶辫触');
+ }
+ };
+
+ // 鏌ヨ浼氳瘽鍒楄〃
+ const queryAgentSessionList = async () => {
+ // const { code, data } = await sessionListApi(selectValue.value);
+ // if (code === 200) {
+ //
+ // } else {
+ // Message.warning('鏌ヨ澶辫触');
+ // }
+ queryAgentSessionDetail(selectValue.value);
+ };
+
+ //鏂板浼氳瘽涔嬪悗鍒锋柊浼氳瘽鍒楄〃
+ const addSession = () => {
+ querySessionList();
+ };
+ onMounted(() => {
+ DialogList();
});
-};
-// 鏌ヨ浼氳瘽鍒楄〃
-const querySessionList = async () => {
- const { code, data } = await sessionListApi(selectValue.value);
- if (code === 200) {
- sessionList.value = data;
- activeSessionId.value = data[0].id; //榛樿閫夋嫨绗竴涓�
- querySessionDetail(data[0]);
- } else {
- Message.warning('鏌ヨ澶辫触');
- }
-};
+ const appStore = useAppStore();
+ const theme = computed(() => {
+ return appStore.theme;
+ });
-// 鏌ヨ浼氳瘽鍒楄〃
-const queryAgentSessionList = async () => {
- // const { code, data } = await sessionListApi(selectValue.value);
- // if (code === 200) {
- //
- // } else {
- // Message.warning('鏌ヨ澶辫触');
- // }
- queryAgentSessionDetail(selectValue.value);
-};
-
-
-//鏂板浼氳瘽涔嬪悗鍒锋柊浼氳瘽鍒楄〃
-const addSession = () => {
- querySessionList();
-};
-onMounted(() => {
- DialogList();
-});
-
-const appStore = useAppStore();
-const theme = computed(() => {
- return appStore.theme;
-});
-
-//鏂囧瓧鍔ㄦ�佽緭鍑�
-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);
- refreshScroll();
- } else {
- clearTimeout(timer!);
- timer = null;
- }
-};
+ //鏂囧瓧鍔ㄦ�佽緭鍑�
+ 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);
+ refreshScroll();
+ } else {
+ clearTimeout(timer!);
+ timer = null;
+ }
+ };
</script>
<style scoped lang="scss">
-.isLeftActive {
- background-color: #ededf5;
-}
-.left-list-item {
- margin-bottom: 2px;
-}
-.left-list-item:hover {
- background-color: #ededf5;
-}
-
-.dark {
- color: gray !important;
-}
-
-.container {
- .top-title {
- line-height: 32px;
- font-size: 16px;
- color: #333;
+ .isLeftActive {
+ background-color: #ededf5;
}
- .left-select {
- :deep(.arco-select-view-single) {
- border-radius: 5px;
+ .left-list-item {
+ margin-bottom: 2px;
+ }
+ .left-list-item:hover {
+ background-color: #ededf5;
+ }
+
+ .dark {
+ color: gray !important;
+ }
+
+ .container {
+ .top-title {
+ line-height: 32px;
+ font-size: 16px;
+ color: #333;
}
- }
+ .left-select {
+ :deep(.arco-select-view-single) {
+ border-radius: 5px;
+ }
+ }
- .center,
- .right {
- box-sizing: border-box;
- height: calc(100vh - 200px);
- }
+ .center,
+ .right {
+ box-sizing: border-box;
+ height: calc(100vh - 200px);
+ }
- .left {
- /* height: calc(100vh - 160px);
+ .left {
+ /* height: calc(100vh - 160px);
overflow-y: auto;
overflow-x: hidden;*/
- border: 0px;
+ border: 0px;
- .left-list {
- .item {
- cursor: pointer;
+ .left-list {
+ .item {
+ cursor: pointer;
- .text,
- .time {
- line-height: 30px;
- }
+ .text,
+ .time {
+ line-height: 30px;
+ }
- .text {
- color: black;
- padding-left: 10px;
- }
+ .text {
+ color: black;
+ padding-left: 10px;
+ }
- .time {
- color: gray;
- font-size: 12px;
- padding-left: 10px;
+ .time {
+ color: gray;
+ font-size: 12px;
+ padding-left: 10px;
+ }
}
}
}
- }
- .card-btn-1 {
- margin: 8px 15px;
- width: 100%;
- border-radius: 5px;
- }
+ .card-btn-1 {
+ margin: 8px 15px;
+ width: 100%;
+ border-radius: 5px;
+ }
- .card-btn-2 {
- margin: 10px 10px;
- }
- .chatItemAnswer {
- box-sizing: border-box;
- background: #f1f1f1;
- border-radius: 14px;
- .light {
+ .card-btn-2 {
+ margin: 10px 10px;
+ }
+ .chatItemAnswer {
box-sizing: border-box;
background: #f1f1f1;
border-radius: 14px;
- }
- }
- .textItemAnswer {
- background-color: #373739;
- }
-
- .center {
- position: relative;
-
- .center-title {
- line-height: 60px;
- font-size: 25px;
- font-family: 榛戜綋;
- color: deepskyblue;
- }
-
- .center-content {
- font-size: 14px;
- color: gray;
- }
-
- .center-question {
- margin-top: 20px;
- display: flex;
- justify-content: space-between;
-
- .center-question-left {
- margin-top: 5px;
- margin-left: 20px;
- }
-
- .center-question-right {
- margin-right: 20px;
+ .light {
+ box-sizing: border-box;
+ background: #f1f1f1;
+ border-radius: 14px;
}
}
- .center-list {
- margin-top: 10px;
+ .textItemAnswer {
+ background-color: #373739;
+ }
- .item {
- border-radius: 10px;
- margin-top: 10px;
- padding: 10px;
- min-height: 120px;
- background-color: #e9f3ff;
- .item-content {
- color: #666;
- }
- .item-title {
- text-align: center;
- line-height: 40px;
- font-size: 20px;
- font-family: 榛戜綋;
- color: #333;
- }
- }
- }
- .chartStart {
- color: #4955f5;
- cursor: pointer;
- font-family: PingFangSC-Medium;
- font-size: 12px;
- font-weight: 500;
- }
- .chat_bottom {
- display: flex;
- align-items: center;
- .center-bottom {
- // position: absolute;
- // width: 90%;
- // bottom: 20px;
- // left: 5%;
- background: #fff;
- border: 1px solid #00000014;
- border-radius: 24px;
- display: flex;
- flex: 1 1;
- flex-direction: column;
- overflow: hidden;
- position: relative;
- // padding-top:10px;
- :deep(.arco-textarea-wrapper) {
- border-radius: 24px;
- }
+ .center {
+ position: relative;
- .btn-send {
- position: absolute !important;
- right: 10px;
- bottom: 10px;
- z-index: 10;
- }
- :deep(.arco-btn-size-large) {
- height: 28px;
- width: 60px;
- }
- }
- :deep(.arco-textarea-wrapper) {
- padding-top: 5px;
- }
- }
- }
- .chat-item {
- padding: 10px 0;
- .chartUserText {
- font-weight: 600;
- font-size: 14px;
- color: #333;
- margin-top: 4px;
- }
- .icon-user-jpg {
- border: 1px solid #d9d9d9;
- }
- }
- .right {
- .right-top {
- display: flex;
- justify-content: space-between;
-
- .right-title {
+ .center-title {
+ line-height: 60px;
font-size: 25px;
- color: black;
+ font-family: 榛戜綋;
+ color: deepskyblue;
}
- .right-btn {
- position: relative;
- left: 20px;
- top: 0px;
+ .center-content {
+ font-size: 14px;
+ color: gray;
}
- }
- .right-tag {
- margin-top: 20px;
- display: flex;
- justify-content: space-between;
- flex-wrap: wrap;
- :deep(.arco-btn-primary) {
- margin-bottom: 10px !important;
- &:hover {
+
+ .center-question {
+ margin-top: 20px;
+ display: flex;
+ justify-content: space-between;
+
+ .center-question-left {
+ margin-top: 5px;
+ margin-left: 20px;
+ }
+
+ .center-question-right {
+ margin-right: 20px;
+ }
+ }
+ .center-list {
+ margin-top: 10px;
+
+ .item {
+ border-radius: 10px;
+ margin-top: 10px;
+ padding: 10px;
+ min-height: 120px;
background-color: #e9f3ff;
- color: rgb(22, 93, 255);
+ .item-content {
+ color: #666;
+ }
+ .item-title {
+ text-align: center;
+ line-height: 40px;
+ font-size: 20px;
+ font-family: 榛戜綋;
+ color: #333;
+ }
+ }
+ }
+ .chartStart {
+ color: #4955f5;
+ cursor: pointer;
+ font-family: PingFangSC-Medium;
+ font-size: 12px;
+ font-weight: 500;
+ }
+ .chat_bottom {
+ display: flex;
+ align-items: center;
+ .center-bottom {
+ // position: absolute;
+ // width: 90%;
+ // bottom: 20px;
+ // left: 5%;
+ background: #fff;
+ border: 1px solid #00000014;
+ border-radius: 24px;
+ display: flex;
+ flex: 1 1;
+ flex-direction: column;
+ overflow: hidden;
+ position: relative;
+ // padding-top:10px;
+ :deep(.arco-textarea-wrapper) {
+ border-radius: 24px;
+ }
+
+ .btn-send {
+ position: absolute !important;
+ right: 10px;
+ bottom: 10px;
+ z-index: 10;
+ }
+ :deep(.arco-btn-size-large) {
+ height: 28px;
+ width: 60px;
+ }
+ }
+ :deep(.arco-textarea-wrapper) {
+ padding-top: 5px;
}
}
}
+ .chat-item {
+ padding: 10px 0;
+ .chartUserText {
+ font-weight: 600;
+ font-size: 14px;
+ color: #333;
+ margin-top: 4px;
+ }
+ .icon-user-jpg {
+ border: 1px solid #d9d9d9;
+ }
+ }
+ .right {
+ .right-top {
+ display: flex;
+ justify-content: space-between;
- .right-list {
- .right-item {
- border-radius: 10px;
- margin-top: 10px;
- padding: 10px;
- min-height: 120px;
- background-color: #e9f3ff;
+ .right-title {
+ font-size: 25px;
+ color: black;
+ }
- .item-title {
- text-align: center;
- line-height: 40px;
- font-size: 20px;
- font-family: 榛戜綋;
- color: #333;
+ .right-btn {
+ position: relative;
+ left: 20px;
+ top: 0px;
+ }
+ }
+ .right-tag {
+ margin-top: 20px;
+ display: flex;
+ justify-content: space-between;
+ flex-wrap: wrap;
+ :deep(.arco-btn-primary) {
+ margin-bottom: 10px !important;
+ &:hover {
+ background-color: #e9f3ff;
+ color: rgb(22, 93, 255);
+ }
+ }
+ }
+
+ .right-list {
+ .right-item {
+ border-radius: 10px;
+ margin-top: 10px;
+ padding: 10px;
+ min-height: 120px;
+ background-color: #e9f3ff;
+
+ .item-title {
+ text-align: center;
+ line-height: 40px;
+ font-size: 20px;
+ font-family: 榛戜綋;
+ color: #333;
+ }
}
}
}
}
-}
</style>
--
Gitblit v1.8.0