From b3b34fa409762b44e6fd3c89e651f8c465556a48 Mon Sep 17 00:00:00 2001
From: zhangxiao <898441624@qq.com>
Date: 星期五, 23 八月 2024 19:25:05 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.5.5:10010/r/web/flow_web
---
src/views/authority/role/index.vue | 31 ++++
src/views/sessionManager/components/agentSession.vue | 132 ++++++++++++---------
src/views/sessionManager/index.vue | 147 ++++++++++++++++++------
src/api/authority.ts | 4
src/views/sessionManager/components/historySession.vue | 1
src/views/dmx/knowledgeLib/config.vue | 6
src/views/login/components/login-form.vue | 4
7 files changed, 224 insertions(+), 101 deletions(-)
diff --git a/src/api/authority.ts b/src/api/authority.ts
index 697a8b3..8f855da 100644
--- a/src/api/authority.ts
+++ b/src/api/authority.ts
@@ -175,9 +175,9 @@
}
export function KnowledgeList() {
- return axios.get<Result<Knowledge>>('/base/system/knowledge/list');
+ return axios.get<Result<Knowledge>>('/api/v1/kb/list');
}
export function DialogList() {
- return axios.get<Result<Knowledge>>('/base/system/dialog/list');
+ return axios.get<Result<Knowledge>>('/api/v1/dialog/list');
}
diff --git a/src/views/authority/role/index.vue b/src/views/authority/role/index.vue
index 300fc72..f049890 100644
--- a/src/views/authority/role/index.vue
+++ b/src/views/authority/role/index.vue
@@ -285,6 +285,8 @@
import Authheader from '@/views/authority/components/authheader.vue';
import router from "@/router";
import { queryCanvasList } from "@/api/Agent";
+ import { getUserResources } from "@/utils/auth";
+ import { forEach } from "lodash";
let treeDataMenu = ref([]);
let checkedKeysMenu = ref([]);
@@ -667,18 +669,43 @@
};
+ let userResources = JSON.parse(getUserResources());
+ const isExist = (val): boolean => {
+ let isok = false;
+ userResources.forEach((r) => {
+ if (val == r.menuId) {
+ isok = true;
+ }
+ });
+ return isok;
+ };
+ const removeChild = (nodes,newT) => {
+ nodes.forEach((child) => {
+ if (isExist(child.menuId)){
+ newT.push(child);
+ let nt = [];
+ if (child.children?.length > 0) {
+ removeChild(child.children, nt);
+ child.children = nt;
+ }
+ }
+ });
+ };
+
const MenuData = async (key) => {
await ResourceList(key).then((res) => {
+ let newTree=[]
+ removeChild(res.rows,newTree)
treeDataMenu.value = [...res.rows];
});
};
KnowledgeList().then((res) => {
- knowledgeList.value = res.rows;
+ knowledgeList.value = res.data;
});
DialogList().then((res) => {
- DialogsList.value = res.rows;
+ DialogsList.value = res.data;
});
queryCanvasList(null).then((canvas) => {
AgentList= canvas.data
diff --git a/src/views/dmx/knowledgeLib/config.vue b/src/views/dmx/knowledgeLib/config.vue
index 48c6b6a..088b890 100644
--- a/src/views/dmx/knowledgeLib/config.vue
+++ b/src/views/dmx/knowledgeLib/config.vue
@@ -47,7 +47,7 @@
</a-select>
</a-form-item>
<a-form-item field="parser_id" label="瑙f瀽鏂规硶">
- <a-select v-model="form.parser_id" placeholder="璇烽�夋嫨" :disabled="kbObj.chunk_num && kbObj.token_num " >
+ <a-select v-model="form.parser_id" placeholder="璇烽�夋嫨" :disabled="!!(kbObj.chunk_num && kbObj.token_num)" >
<a-option v-for="item in parser_ids" :key="item.value" :label="item.name" :value="item.value"></a-option>
</a-select>
</a-form-item>
@@ -314,7 +314,7 @@
Object.assign(form,{
});
- formRef.value.resetFields();
+ // formRef.value.resetFields();
}
const queryModel = async (params) => {
@@ -331,7 +331,7 @@
const changekbObj = (value) => {
nextTick(()=>{
- formRef.value.resetFields();
+ // formRef.value.resetFields();
kbObj = value;
console.log(kbObj, 'kbObj');
let configObj = {
diff --git a/src/views/login/components/login-form.vue b/src/views/login/components/login-form.vue
index e615cf8..8656e4a 100644
--- a/src/views/login/components/login-form.vue
+++ b/src/views/login/components/login-form.vue
@@ -12,11 +12,11 @@
>
<a-form-item
field="email"
- :rules="[{ required: true, message: '璇疯緭鍏ラ偖绠�' }]"
+ :rules="[{ required: true, message: '璇疯緭鍏ョ敤鎴峰悕' }]"
:validate-trigger="['change', 'blur']"
hide-label
>
- <a-input v-model="userInfo.email" placeholder="璇疯緭鍏ラ偖绠�">
+ <a-input v-model="userInfo.email" placeholder="璇疯緭鍏ョ敤鎴峰悕">
<template #prefix>
<icon-user />
</template>
diff --git a/src/views/sessionManager/components/agentSession.vue b/src/views/sessionManager/components/agentSession.vue
index 0c25dda..9c70b48 100644
--- a/src/views/sessionManager/components/agentSession.vue
+++ b/src/views/sessionManager/components/agentSession.vue
@@ -9,7 +9,13 @@
trigger="click"
>
<a-button border
- >{{agentTitle}}
+ >
+ <span style="
+ width: 100px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ ">{{ from.name }}</span>
<icon-down style="margin-left: 4px" />
</a-button>
<template #content>
@@ -75,7 +81,7 @@
auto-size
v-model="sessionDetail.content"
:class="{ chatItemAnswer: theme === 'light' }"
- :style="{backgroundColor: theme === 'light' ? '#ffffff' : '#000000'}"
+ :style="{ backgroundColor: theme === 'light' ? '#ffffff' : '#000000'}"
style="border: none"
>
</a-textarea>
@@ -108,14 +114,14 @@
>
</a-textarea>
</template>
-<!-- <template #actions>-->
-<!-- <div class="action"-->
-<!-- @click="stopChat"-->
-<!-- style="background: var(--color-bg-2);color: var(--color-primary-light-4);" v-if="displayedText != ''">-->
-<!-- <icon-record-stop />-->
-<!-- 鍋滄鐢熸垚-->
-<!-- </div>-->
-<!-- </template>-->
+ <template #actions>
+ <div class="action"
+ @click="stopChat"
+ style="background: var(--color-bg-2);color: var(--color-primary-light-4);" v-if="displayedText != ''">
+ <icon-record-stop />
+ 鍋滄鐢熸垚
+ </div>
+ </template>
</a-comment>
</div>
<!-- <div class="chartStart" v-if="isStart" @click="startChat"
@@ -141,9 +147,8 @@
maxRows: 5,
}"
/>
- <div style="height: 40px"></div>
- <div class="btn-send">
- <!-- <icon-send size="32" /> -->
+ <div style="width: 100%;display: flex;justify-content: space-between">
+ <span></span>
<a-button
:disabled="chatDis"
@click="sentClick"
@@ -155,11 +160,24 @@
</a-button
>
</div>
+<!-- <div class="btn-send">-->
+<!-- <!– <icon-send size="32" /> –>-->
+<!-- <a-button-->
+<!-- :disabled="chatDis"-->
+<!-- @click="sentClick"-->
+<!-- type="text"-->
+<!-- style="border-radius: 24px"-->
+<!-- :loading="loading"-->
+<!-- >-->
+<!-- <icon-send size="32" style="color: #0960bd;"/>-->
+<!-- </a-button-->
+<!-- >-->
+<!-- </div>-->
</div>
<a-modal v-model:visible="visible" title="淇敼鍚嶇О" @before-open="handleOpened" @cancel="handleCancel" :footer="false" title-align="start">
- <a-form ref="formRef" :rules="rules" :model="agentObj" @submit="handleSubmit" >
+ <a-form ref="formRef" :rules="rules" :model="from" @submit="handleSubmit" >
<a-form-item field="name" label="鍚嶇О">
- <a-input v-model="agentTitle" placeholder="璇疯緭鍏ュ悕绉�"/>
+ <a-input v-model="from.name" placeholder="璇疯緭鍏ュ悕绉�"/>
</a-form-item>
<a-form-item>
<div style="width: 100%;text-align: right">
@@ -214,11 +232,14 @@
const theme = computed(() => {
return appStore.theme;
});
+let from = reactive({
+ name:'鏈懡鍚嶄細璇�',
+});
const visible = ref(false);
let isHistory = ref(false);//鏄惁鏄巻鍙茶褰�
let dsl = reactive({});
-
+const chatDataMeg = reactive({});
const rules = {
@@ -232,19 +253,16 @@
const handleSubmit = async({values, errors}) => {
if(errors) return;
- // agentObj.name = agentTitle.value;
- // agentObj.conversation_id = agentObj.id;
console.log(agentObj, 'agentObj');
let chatData = {
- id:activeSessionId.value,
- conversation_id:activeSessionId.value,
- name: agentTitle.value
+ id:agentObj.id,
+ conversation_id:agentObj.id,
+ name: from.name
}
const { code, data } = await addSessionApi(chatData);
if (data) {
Message.success("淇敼鎴愬姛");
handleCancel()
- // queryAgentSessionDetail(agentObj.id);
}
}
@@ -269,15 +287,11 @@
};
const createNewAgent = async (session) => {
+ console.log(session,'鏂板缓agent浼氳瘽瀵硅薄');
Object.assign(agentObj, session);
isHistory.value = false;
initPage();
-
-
}
-
-
-
// 璋冪敤set鏂规硶
const agentSet = async () => {
const res = await agentSetApi({
@@ -285,10 +299,8 @@
title: agentObj.title,
dsl: agentObj.dsl,
});
- console.log(res,'agentSet');
+ // console.log(res,'agentSet');
if (res.code == 0) {
- // sessionDetailList.value = res.data.dsl.messages;
- // Message.success('淇敼鎴愬姛');
agentReset();
}
}
@@ -352,30 +364,30 @@
inputMsg.value = '';
}
// 璋冪敤get鏂规硶
-
const queryAgentSessionDetail = async (id) => {
const { code, data } = await getAgentSessionDetailsApi(id);
if (code == 0) {
- console.log(data,'浼氳瘽璇︽儏');
+ console.log(data,'agent浼氳瘽璇︽儏');
+ Object.assign(chatObj, data);
sessionDetailList.value = data.dsl.messages;
- agentTitle.value = `鍜�${data.title}鐨勪細璇漙 || '鏈懡鍚嶄細璇�';
+ agentTitle.value = `${data.title}` || '鏈懡鍚嶄細璇�';
+ from.name = `${data.title}` || '鏈懡鍚嶄細璇�';
refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
}
};
-// 鑾峰彇agent浼氳瘽璇︽儏
+// 鍘嗗彶璁板綍璺宠浆鑾峰彇agent浼氳瘽璇︽儏
const querySessionDetail = async (session) => {
- Object.assign(agentObj, session);
- agentObj.id = session.dialog_id;
activeSessionId.value = session.id;
- agentTitle.value = session.name;
- console.log(agentTitle.value, '浼氳瘽鍚嶇О');
+ from.name = session.name;
const { code, data } = await getSessionDetailsApi(session.id);
if (code == 200) {
sessionDetailList.value = data.message.messages;
const res = await getAgentSessionDetailsApi(session.dialog_id);
if (res.code == 0) {
- console.log(res.data,'浼氳瘽璇︽儏');
+ console.log(res.data,'agent浼氳瘽璇︽儏');
+ Object.assign(agentObj, res.data);
+ Object.assign(chatObj, res.data);
Object.assign(dsl, res.data.dsl);
refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
}
@@ -483,8 +495,13 @@
if (done) {
console.info('done');
displayedText.value = '';
- queryAgentSessionDetail(agentObj.id);
- EventBus.emit('queryAppUsageList');
+ if (isStopChat.value) {
+ isStopChat.value = false;
+ setChatDataMeg(chatDataMeg);
+ } else {
+ queryAgentSessionDetail(agentObj.id);
+ EventBus.emit('queryAppUsageList');
+ }
break;
}
}
@@ -494,10 +511,9 @@
}
const stopChat=async()=>{
- // const { code, data } = await stopChatApi(activeSessionId.value);
+ // const { code, data } = await stopChatApi(agentObj.id);
// if (code === 200) {
// Message.success("宸插仠姝�");
- // queryNewSessionDetail(activeSessionId.value);
// }
loading.value = false;
chatDis.value = false;
@@ -517,21 +533,27 @@
sessionDetailList.value = sessionDetailList.value.splice(0, sessionDetailList.value.length-2).concat(lastArr);
console.log(sessionDetailList.value, 'sessionDetailList2');
console.log(chatObj, 'chatObj瀵硅薄');
- chatObj.message = chatObj.message.concat(lastArr);
- // clearTimeout(timer!);
- // timer = null;
- // const { code, data } = await addSessionApi(chatObj);
- // if (data) {
- // //鍋滄瀹氭椂鍣�
- // clearTimeout(timer!);
- // timer = null;
- // displayedText.value = "";
- // queryNewSessionDetail(activeSessionId.value);
- // }
-
+ chatObj.dsl.messages = chatObj.dsl.messages.concat(lastArr);
+ Object.assign(chatDataMeg, {
+ id: chatObj.id,
+ conversation_id: chatObj.id,
+ message: sessionDetailList.value,
+ });
}
+
+const setChatDataMeg = async (chatData) => {
+ const { code, data } = await addSessionApi(chatData);
+ if (data) {
+ //鍋滄瀹氭椂鍣�
+ clearTimeout(timer!);
+ timer = null;
+ // displayedText.value = "";
+ queryAgentSessionDetail(chatObj.id);
+ }
+};
+
const handleShiftEnter = (event) => {
event.preventDefault();
inputMsg.value += '\n';
diff --git a/src/views/sessionManager/components/historySession.vue b/src/views/sessionManager/components/historySession.vue
index 58e0bb1..76a948f 100644
--- a/src/views/sessionManager/components/historySession.vue
+++ b/src/views/sessionManager/components/historySession.vue
@@ -308,6 +308,7 @@
})
onMounted(() => {
+ console.log(httpUrl,'褰撳墠鍦板潃');
EventBus.on("history", () => {
emit('changeAgentType','3');
// DialogList()
diff --git a/src/views/sessionManager/index.vue b/src/views/sessionManager/index.vue
index 3404ffb..31bb72c 100644
--- a/src/views/sessionManager/index.vue
+++ b/src/views/sessionManager/index.vue
@@ -24,7 +24,13 @@
<a-popover position="bottom" trigger="click">
<a-button border
- >{{ agentTitle }}
+ >
+ <span style="
+ width: 100px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ ">{{ from.name }}</span>
<icon-down style="margin-left: 4px" />
</a-button>
<template #content>
@@ -227,8 +233,27 @@
maxRows: 5,
}"
/>
-
- <div class="btn-send">
+ <div style="width: 100%;display: flex;justify-content: space-between">
+ <a-button
+ :disabled="onFileSelectedLoading"
+ @click="selectFile"
+ type="text"
+ style="border-radius: 24px"
+ >
+ <icon-attachment
+ size="28"
+ style="color: #0960bd"
+ />
+ <input
+ ref="fileInput"
+ type="file"
+ style="display: none"
+ @change="onFileSelected"
+ />
+ </a-button>
+ <span
+ style="cursor: pointer;margin-left: 20px;">
+ </span>
<a-button
:disabled="chatDis"
@click="sentClick"
@@ -239,6 +264,17 @@
<icon-send size="32" style="color: #0960bd" />
</a-button>
</div>
+<!-- <div class="btn-send">-->
+<!-- <a-button-->
+<!-- :disabled="chatDis"-->
+<!-- @click="sentClick"-->
+<!-- type="text"-->
+<!-- style="border-radius: 24px"-->
+<!-- :loading="loading"-->
+<!-- >-->
+<!-- <icon-send size="32" style="color: #0960bd" />-->
+<!-- </a-button>-->
+<!-- </div>-->
</div>
<!-- <div style="margin-top: 0px">-->
<!-- <a-upload-->
@@ -253,27 +289,27 @@
<!-- </template>-->
<!-- </a-upload>-->
<!-- </div>-->
- <span
- style="
- position: absolute;
- top: 94px;
- left: 20px;
- z-index: 999;
- cursor: pointer;
- "
- >
- <icon-attachment
- size="28"
- @click="selectFile"
- style="color: #0960bd"
- />
- <input
- ref="fileInput"
- type="file"
- style="display: none"
- @change="onFileSelected"
- />
- </span>
+<!-- <span-->
+<!-- style="-->
+<!-- position: absolute;-->
+<!-- top: 94px;-->
+<!-- left: 20px;-->
+<!-- z-index: 999;-->
+<!-- cursor: pointer;-->
+<!-- "-->
+<!-- >-->
+<!-- <icon-attachment-->
+<!-- size="28"-->
+<!-- @click="selectFile"-->
+<!-- style="color: #0960bd"-->
+<!-- />-->
+<!-- <input-->
+<!-- ref="fileInput"-->
+<!-- type="file"-->
+<!-- style="display: none"-->
+<!-- @change="onFileSelected"-->
+<!-- />-->
+<!-- </span>-->
<div class="uploadFileList">
<div
class="files"
@@ -283,11 +319,12 @@
>
<a-comment
:author="item.name"
- :content="item.size + ''"
+ :content="(item.size/1024).toFixed(2) + 'K'"
style="
background: var(--color-bg-2);
padding: 10px;
border-radius: 10px;
+ font-size: 12px;
"
>
<template #avatar>
@@ -355,11 +392,11 @@
<a-form
ref="formRef"
:rules="rules"
- :model="chatObj"
+ :model="from"
@submit="handleSubmit"
>
<a-form-item field="name" label="鍚嶇О">
- <a-input v-model="agentTitle" placeholder="璇疯緭鍏ュ悕绉�" />
+ <a-input v-model="from.name" placeholder="璇疯緭鍏ュ悕绉�" />
</a-form-item>
<a-form-item>
<div style="width: 100%; text-align: right">
@@ -434,6 +471,9 @@
const agentType = ref('1');
const agentTitle = ref('鏈懡鍚嶄細璇�');
let chatObj = reactive({});
+ let from = reactive({
+ name:'鏈懡鍚嶄細璇�',
+ });
const isStopChat = ref(false);
const currIndex = ref(0);
const displayedText = ref(''); // 姝e湪鏄剧ず鐨勬枃瀛�
@@ -456,6 +496,7 @@
const fileInput = ref(null);
const chatDataMeg = reactive({});
const visible = ref(false);
+ let toStop = false;
const rules = {
name: [
@@ -468,12 +509,10 @@
const handleSubmit = async ({ values, errors }) => {
if (errors) return;
- // chatObj.name = agentTitle.value;
- // chatObj.conversation_id = chatObj.id;
let chatData = {
id: chatObj.id,
conversation_id: chatObj.id,
- name: agentTitle.value,
+ name: from.name,
};
const { code, data } = await addSessionApi(chatData);
if (data) {
@@ -484,13 +523,10 @@
};
let dataItem = [];
const getTxt = (data, role, message, index) => {
- if (/##0\$\$/.test(message)) {
+ if (/##[0-9]\$\$/.test(message)) {
if (role == 'assistant' && index) {
- data.forEach((item) => {
- if (Object.keys(item).length !== 0 && item?.doc_aggs.length > 0) {
- dataItem = item.doc_aggs;
- }
- });
+ let i = index / 2 - 1 > 0 ? index / 2 - 1 : 0;
+ dataItem = data[i].doc_aggs;
}
} else {
dataItem = [];
@@ -501,7 +537,35 @@
const clickHref = (item) => {
// return Message.warning('鏆傛棤娉曟煡鐪�');
- window.open(`/api/v1/document/show/${item.doc_id}`, '_blank');
+ // window.open(`/api/v1/document/get/${item.doc_id}`, '_blank');
+ downloadFile({
+ url: `/api/v1/document/get/${item.doc_id}`,
+ filename: item.doc_name,
+ });
+ };
+
+ const downloadFile = ({
+ url,
+ filename,
+ target,
+ }: {
+ url: string;
+ filename?: string;
+ target?: string;
+ }) => {
+ const downloadElement = document.createElement('a');
+ downloadElement.style.display = 'none';
+ downloadElement.href = url;
+ if (target) {
+ downloadElement.target = '_blank';
+ }
+ downloadElement.rel = 'noopener noreferrer';
+ if (filename) {
+ downloadElement.download = filename;
+ }
+ document.body.appendChild(downloadElement);
+ downloadElement.click();
+ document.body.removeChild(downloadElement);
};
const getIconByExtension = computed(() => (extension) => {
@@ -740,6 +804,7 @@
const startChat = async (valMsg) => {
chatDis.value = true;
loading.value = true;
+ toStop = false;
sessionDetailList.value.push({
content: valMsg,
role: 'user',
@@ -767,6 +832,11 @@
.getReader();
currIndex.value = 0;
while (true) {
+ if (toStop) {
+ displayedText.value = '';
+ setChatDataMeg(chatDataMeg);
+ break;
+ }
const x = await reader?.read();
if (x) {
const { done, value } = x;
@@ -809,6 +879,7 @@
loading.value = false;
chatDis.value = false;
isStopChat.value = true;
+ toStop = true;
console.log('stopChat');
console.log(displayedText.value, 'displayedText');
console.log(sessionDetailList.value, 'sessionDetailList');
@@ -859,6 +930,7 @@
sessionDetailList.value = data.message;
messagenList.value = data;
agentTitle.value = data.name;
+ from.name = data.name;
refreshScroll(); //鍒锋柊婊氬姩鏉′綅缃�
isStopChat.value = false;
}
@@ -872,6 +944,7 @@
const querySessionDetail = async (session) => {
sectionList.value = session;
activeSessionId.value = session.id;
+ from.name = session.name;
const { code, data } = await getSessionDetailsApi(session.id);
if (code === 200) {
sessionDetailList.value = data.message;
--
Gitblit v1.8.0