src/api/authority.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/authority/role/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/dmx/knowledgeLib/config.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/login/components/login-form.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/sessionManager/components/agentSession.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/sessionManager/components/historySession.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/sessionManager/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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'); } 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 src/views/dmx/knowledgeLib/config.vue
@@ -47,7 +47,7 @@ </a-select> </a-form-item> <a-form-item field="parser_id" label="解析方法"> <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 = { 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> 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> @@ -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 = ''; 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'; src/views/sessionManager/components/historySession.vue
@@ -308,6 +308,7 @@ }) onMounted(() => { console.log(httpUrl,'当前地址'); EventBus.on("history", () => { emit('changeAgentType','3'); // DialogList() 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(''); // 正在显示的文字 @@ -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;