|
|
@@ -131,7 +131,7 @@
|
|
|
<section>
|
|
|
<div v-for="(knowledge, knowledgeIndex) in item.reference" :key="knowledgeIndex">
|
|
|
<a-popover :title="knowledge.doc_name" position="left">
|
|
|
- <div>
|
|
|
+ <div @click="openDocuementPage(knowledge)">
|
|
|
<span>{{ knowledgeIndex + 1 }}</span>
|
|
|
<span>{{ knowledge.doc_name }}</span>
|
|
|
</div>
|
|
|
@@ -268,13 +268,16 @@ export default defineComponent({
|
|
|
let dialogIndex = dialogList.length;
|
|
|
const dialogScroll = ref("");
|
|
|
const dialogConfig = ref({});
|
|
|
+
|
|
|
const scrollToEnd = async () => {
|
|
|
await nextTick();
|
|
|
if (dialogScroll.value) {
|
|
|
dialogScroll.value.scrollTop = dialogScroll.value.scrollHeight;
|
|
|
}
|
|
|
};
|
|
|
+
|
|
|
let answerInterval = null;
|
|
|
+
|
|
|
const stopWriting = () => {
|
|
|
window.clearInterval(answerInterval);
|
|
|
emit("set-readonly", false);
|
|
|
@@ -286,21 +289,25 @@ export default defineComponent({
|
|
|
scrollToEnd();
|
|
|
dialogIndex += 1;
|
|
|
};
|
|
|
+
|
|
|
const addData = (data) => {
|
|
|
dialogList.splice(dialogIndex, 1, data);
|
|
|
randomKey.value = Math.random();
|
|
|
scrollToEnd();
|
|
|
};
|
|
|
+
|
|
|
const saveAnswer = (index) => {
|
|
|
if (!props.readonly) {
|
|
|
menuList[index].save = !menuList[index].save;
|
|
|
}
|
|
|
};
|
|
|
+
|
|
|
const openCapacity = (index) => {
|
|
|
if (!props.readonly) {
|
|
|
menuList[index].open = !menuList[index].open;
|
|
|
}
|
|
|
};
|
|
|
+
|
|
|
const openDocument = (index, documentIndex) => {
|
|
|
if (menuList[index].documentOpenIndex === documentIndex) {
|
|
|
menuList[index].documentOpenIndex = -1;
|
|
|
@@ -324,11 +331,13 @@ export default defineComponent({
|
|
|
|
|
|
}
|
|
|
};
|
|
|
+
|
|
|
const copyAnswer = (text) => {
|
|
|
if (!props.readonly) {
|
|
|
helper.copyText(text, "复制成功");
|
|
|
}
|
|
|
};
|
|
|
+
|
|
|
const reQuestion = (text) => {
|
|
|
if (!props.readonly) {
|
|
|
setTimeout(() => {
|
|
|
@@ -336,9 +345,21 @@ export default defineComponent({
|
|
|
}, 200);
|
|
|
}
|
|
|
};
|
|
|
+
|
|
|
const goKnowledge = () => {
|
|
|
- emit("go-document");
|
|
|
+ // emit("go-document");
|
|
|
};
|
|
|
+ // 点击文档,打开新页面
|
|
|
+ const openDocuementPage = (knowledge) => {
|
|
|
+ const doc_name = knowledge.doc_name;
|
|
|
+ const doc_id = knowledge.id;
|
|
|
+
|
|
|
+ const pdf_url = `http://192.168.20.119:11080/v1/document/get/${doc_id}`;
|
|
|
+
|
|
|
+ window.open(pdf_url);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
const addLoading = (data) => {
|
|
|
const mockData = DOCUMENT_RESULT;
|
|
|
data.capacity = {
|
|
|
@@ -393,6 +414,7 @@ export default defineComponent({
|
|
|
helper.webSocket.close();
|
|
|
});
|
|
|
|
|
|
+
|
|
|
onMounted(() => {
|
|
|
scrollToEnd();
|
|
|
/**
|
|
|
@@ -400,20 +422,70 @@ export default defineComponent({
|
|
|
* 答案中 引用图标(感叹号)点击时,浮层显示引用内容
|
|
|
*/
|
|
|
applyRefferencePopover(props.list);
|
|
|
- // 如果是智能数据,则拿缓存里的数据开启对话
|
|
|
- if (helper.read("sendData") && helper.read("sendData").agent_id == 'basic_excel_talk') {
|
|
|
- const data = helper.read("sendData");
|
|
|
- helper.webSocket = ajax.message.create(helper.read("token"), data.agent_id, data.chat_id, props.type);
|
|
|
- // 创建对话之后清空缓存
|
|
|
- helper.write('sendData', {});
|
|
|
- } else {
|
|
|
- helper.webSocket = ajax.message.create(helper.read("token"), props.agentId, props.dialogId, props.type);
|
|
|
+
|
|
|
+
|
|
|
+ // socket 消息队列
|
|
|
+ let msg_list = [];
|
|
|
+
|
|
|
+ function createSocket(){
|
|
|
+ const token = helper.read("token");
|
|
|
+ // 如果是智能数据,则拿缓存里的数据开启对话
|
|
|
+ if (helper.read("sendData") && helper.read("sendData").agent_id == 'basic_excel_talk') {
|
|
|
+ const data = helper.read("sendData");
|
|
|
+
|
|
|
+ helper.webSocket = ajax.message.create(token, data.agent_id, data.chat_id, props.type);
|
|
|
+
|
|
|
+ // 创建对话之后清空缓存
|
|
|
+ helper.write('sendData', {});
|
|
|
+ } else {
|
|
|
+ helper.webSocket = ajax.message.create(token, props.agentId, props.dialogId, props.type);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 监听socket开启事件
|
|
|
+ // 当socket开启后,遍历消息,并发送
|
|
|
+ helper.webSocket.onopen = function(event){
|
|
|
+ msg_list.forEach(item => {
|
|
|
+ helper.webSocket.send(item);
|
|
|
+ });
|
|
|
+
|
|
|
+ // 所有消息发送完成后,清空消息队列
|
|
|
+ msg_list = [];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 发送socket数据
|
|
|
+ function sendSocketMsg(dt){
|
|
|
+ // 判断socket是否开启
|
|
|
+ // 如果开启,则直接发送,如果没有开启,则将数据推入消息队列
|
|
|
+ if(helper.webSocket.readyState === 0){
|
|
|
+ msg_list.push(dt);
|
|
|
+ }
|
|
|
+ if(helper.webSocket.readyState === 1){
|
|
|
+ helper.webSocket.send(dt);
|
|
|
+ }
|
|
|
+ if(helper.webSocket.readyState === 2){
|
|
|
+ // 正在关闭
|
|
|
+ }
|
|
|
+ if(helper.webSocket.readyState === 3){
|
|
|
+ msg_list.push(dt);
|
|
|
+
|
|
|
+ // 已关闭: 重新开启socket
|
|
|
+ createSocket();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ // 创建socket链接
|
|
|
+ createSocket();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
helper.webSocket.onmessage = (event) => {
|
|
|
const { type, reference, step_message, files } = JSON.parse(event.data);
|
|
|
+
|
|
|
let { message } = JSON.parse(event.data);
|
|
|
+
|
|
|
if (!loadingData.value) return;
|
|
|
+
|
|
|
if (type === "stream") {
|
|
|
// 没解析完就一直loading
|
|
|
if (step_message == '文件上传完成,开始解析') {
|
|
|
@@ -428,9 +500,11 @@ export default defineComponent({
|
|
|
addData(loadingData.value);
|
|
|
} else {
|
|
|
answerData.value += step_message ? getHTML(step_message) + "</br>" : message
|
|
|
+
|
|
|
if (answerData.value && !isLoaded.value) {
|
|
|
answerLoaded();
|
|
|
}
|
|
|
+
|
|
|
addAnswer(loadingData.value);
|
|
|
}
|
|
|
}
|
|
|
@@ -463,26 +537,28 @@ export default defineComponent({
|
|
|
if (image_url) {
|
|
|
imageUrl.value = `http://${window.location.hostname}${port}${image_url}`
|
|
|
}
|
|
|
+
|
|
|
if (excel_url) {
|
|
|
const file = {
|
|
|
file_url: `http://${window.location.hostname}${port}${excel_url}`,
|
|
|
file_name: `${excel_name}.xlsx` || '点击下载',
|
|
|
}
|
|
|
+
|
|
|
answerFile.value = file
|
|
|
}
|
|
|
+
|
|
|
if (code) answerCode.value = getHTML(code);
|
|
|
- if (sql) answerSql.value = getHTML(sql);
|
|
|
|
|
|
+ if (sql) answerSql.value = getHTML(sql);
|
|
|
}
|
|
|
|
|
|
if (answerData.value && !isLoaded.value) {
|
|
|
answerLoaded();
|
|
|
}
|
|
|
+
|
|
|
addAnswer(loadingData.value);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
if (type === "close") {
|
|
|
if (!answerData.value) {
|
|
|
answerLoaded();
|
|
|
@@ -494,6 +570,7 @@ export default defineComponent({
|
|
|
isLoaded.value = false;
|
|
|
}
|
|
|
};
|
|
|
+
|
|
|
helper.$bus.on("send-message", (value) => {
|
|
|
dialogConfig.value = helper.dialogConfig;
|
|
|
const question = props.type === "report" ? value.inputs.report_name : value;
|
|
|
@@ -505,18 +582,26 @@ export default defineComponent({
|
|
|
: {
|
|
|
message: value
|
|
|
};
|
|
|
+
|
|
|
if (props.type === 'doc') {
|
|
|
sendData.doc_ids = [helper.read('docId')];
|
|
|
}
|
|
|
- helper.webSocket.send(JSON.stringify(sendData));
|
|
|
+
|
|
|
+ const dt = JSON.stringify(sendData);
|
|
|
+
|
|
|
+ // 发送socket数据
|
|
|
+ sendSocketMsg(dt)
|
|
|
});
|
|
|
+
|
|
|
helper.$bus.on("clear-message", () => {
|
|
|
dialogList.splice(0);
|
|
|
});
|
|
|
+
|
|
|
helper.$bus.on("stop-writing", () => {
|
|
|
stopWriting();
|
|
|
});
|
|
|
});
|
|
|
+
|
|
|
return {
|
|
|
goKnowledge,
|
|
|
randomKey,
|
|
|
@@ -538,7 +623,9 @@ export default defineComponent({
|
|
|
knowledgeList,
|
|
|
dialogConfig,
|
|
|
userName,
|
|
|
- downloadFile
|
|
|
+ downloadFile,
|
|
|
+
|
|
|
+ openDocuementPage
|
|
|
};
|
|
|
}
|
|
|
});
|