|
|
@@ -1,6 +1,6 @@
|
|
|
<template>
|
|
|
<div id="app">
|
|
|
- <Slider @select-nav="selectNav" :navId="navId" v-show="!closeOthers"></Slider>
|
|
|
+ <Slider @select-nav="selectNav" :agent_list="agentList" :navId="navId" v-show="!closeOthers"></Slider>
|
|
|
|
|
|
<div class="main">
|
|
|
<div :class="{ 'history-wrap': true, 'history-wrap-open': !closeOthers && navId > -1 }">
|
|
|
@@ -148,7 +148,7 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
-<script>
|
|
|
+<script setup>
|
|
|
import { Message } from '@arco-design/web-vue';
|
|
|
|
|
|
|
|
|
@@ -184,587 +184,506 @@ import { defineComponent, ref, onMounted, inject, onBeforeUnmount } from "vue";
|
|
|
|
|
|
import { wendangzhinengSetTempDocFile, wendangzhinengClearDocFile } from '../components/dialog-wrap/temp-wendangzhineng-docs';
|
|
|
|
|
|
-export default defineComponent({
|
|
|
- components: {
|
|
|
- Right,
|
|
|
- Slider,
|
|
|
- ProjectIntro,
|
|
|
- History,
|
|
|
- Index,
|
|
|
- Answer,
|
|
|
- MessageInput,
|
|
|
-
|
|
|
- PictureFooter,
|
|
|
-
|
|
|
- DialogWrap,
|
|
|
- Document,
|
|
|
- PicArticle,
|
|
|
- DocumentAnswer,
|
|
|
- DocumentsmartData,
|
|
|
- DocumentInterlocution,
|
|
|
- DocumentQuestion,
|
|
|
- DocumentQuestion2,
|
|
|
- Analysis,
|
|
|
- DocumentDetail,
|
|
|
- DocumentCombine,
|
|
|
-
|
|
|
- ToggleBtn,
|
|
|
- BtnIframeChujuan, // 文档出卷按钮
|
|
|
-
|
|
|
- DocumentReportFooter,
|
|
|
-
|
|
|
- BtnMangeDoc
|
|
|
- },
|
|
|
- setup() {
|
|
|
- // NOTE: 先把4文库问答的类型改成report类型,后续再改回来
|
|
|
- const dialogType = [
|
|
|
- "report",
|
|
|
- "excel",
|
|
|
- "knowledgeQuiz",
|
|
|
- // "report",
|
|
|
- "wendangzhineng",
|
|
|
- "normal",
|
|
|
- "smartData",
|
|
|
- "huitu", // 小数绘图
|
|
|
- "question",
|
|
|
-
|
|
|
- "question",
|
|
|
- 'document_report', // 文档报告生成
|
|
|
- ];
|
|
|
-
|
|
|
- const { config, helper, ajax } = inject("$global");
|
|
|
-
|
|
|
- const SYSTEM_NAME = config.defaultTitle
|
|
|
-
|
|
|
- const closeOthers = ref(false);
|
|
|
- const swiperNumber = ref(5);
|
|
|
- const navId = ref(-1);
|
|
|
-
|
|
|
- const readonly = ref(false);
|
|
|
-
|
|
|
- const showDialog = ref(false); // 是否显示对话内容 v-if
|
|
|
- const initDialog = ref(false); // 对话是否初始化
|
|
|
- const hideDialog = ref(false); // 是否隐藏对话 v-show
|
|
|
-
|
|
|
- const historyMode = ref(false);
|
|
|
- const dialogList = ref([]);
|
|
|
-
|
|
|
- const selectId = ref(""); // 当前选择的 agent_id 或者 历史记录的 ID
|
|
|
- const real_agent_id = ref(""); // 实际的agent_id,此值仅在 点击侧边栏具体功能时更改,例如点击 知识问答、文档智能按钮时更改
|
|
|
- const agentIds = ref([]); // agent ID的列表
|
|
|
-
|
|
|
- const dialogId = ref("");
|
|
|
- const historyList = ref([]);
|
|
|
- const variables = ref([]);
|
|
|
- const textValue = ref("");
|
|
|
- const parseStatus = ref(false);
|
|
|
- const maxLength = ref(6000); // 允许输入的最大长度
|
|
|
- const targetDocument = ref(null); // 当前查看详情的文档
|
|
|
- const transNavId = ref() //查看详情时记录之前的navId
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- let reportData = {};
|
|
|
- let agents = {}
|
|
|
-
|
|
|
- const openAll = () => {
|
|
|
- closeOthers.value = !closeOthers.value;
|
|
|
- };
|
|
|
|
|
|
- const setReadonly = (status) => {
|
|
|
- readonly.value = status;
|
|
|
- };
|
|
|
- const changeParse = (status) => {
|
|
|
- parseStatus.value = status;
|
|
|
- }
|
|
|
- const goDocument = (targetDoc) => {
|
|
|
- transNavId.value = navId.value
|
|
|
- navId.value = -2;
|
|
|
- hideDialog.value = true;
|
|
|
- targetDocument.value = {...targetDoc };
|
|
|
- };
|
|
|
- const goBack = () => {
|
|
|
- navId.value = transNavId.value;
|
|
|
- hideDialog.value = false;
|
|
|
- };
|
|
|
+// NOTE: 先把4文库问答的类型改成report类型,后续再改回来
|
|
|
+const dialogType = [
|
|
|
+ "report",
|
|
|
+ "excel",
|
|
|
+ "knowledgeQuiz",
|
|
|
+ // "report",
|
|
|
+ "wendangzhineng",
|
|
|
+ "normal",
|
|
|
+ "smartData",
|
|
|
+ "huitu", // 小数绘图
|
|
|
+ "question",
|
|
|
|
|
|
- /**
|
|
|
- * 当点击某个导航时触发的方法
|
|
|
- * 例如:点击 知识问答 文档智能 智能问答 智能数据 等
|
|
|
- * @params {object} node
|
|
|
- * @params {number} node.id - 例如 3 4 5
|
|
|
- * @params {string} node.title - 例如:文档智能 小数绘图
|
|
|
- */
|
|
|
- const selectNav = async (node) => {
|
|
|
- navId.value = node.id;
|
|
|
- textValue.value = [];
|
|
|
- // 关闭历史模式
|
|
|
- historyMode.value = false;
|
|
|
- readonly.value = false;
|
|
|
-
|
|
|
- if (node.index === -1) {
|
|
|
- swiperNumber.value = 5;
|
|
|
- } else {
|
|
|
- swiperNumber.value = 4;
|
|
|
- }
|
|
|
+ "question",
|
|
|
+ 'document_report', // 文档报告生成
|
|
|
+];
|
|
|
|
|
|
- helper.$bus.emit("stop-writing");
|
|
|
- showDialog.value = false;
|
|
|
+const { config, helper, ajax } = inject("$global");
|
|
|
|
|
|
- // 获取当前选定的agent对应的ID
|
|
|
- selectId.value = (agents.find(agent => agent.name === node.title) || {}).id || null;
|
|
|
- real_agent_id.value = selectId.value; // 记录agent_id值
|
|
|
+const SYSTEM_NAME = config.defaultTitle
|
|
|
|
|
|
- /**
|
|
|
- * 导航切换
|
|
|
- * 清空文档智能的数据
|
|
|
- */
|
|
|
- wendangzhineng_file_uploaded.value = false;
|
|
|
- wendangzhineng_text_input.value = '';
|
|
|
- wendangzhineng_file_list.value = [];
|
|
|
- wendangzhinengClearDocFile();
|
|
|
+const closeOthers = ref(false);
|
|
|
+const swiperNumber = ref(5);
|
|
|
+const navId = ref(-1);
|
|
|
|
|
|
- // 获取历史记录
|
|
|
- const data = await ajax.message.getDialogs(selectId.value);
|
|
|
+const readonly = ref(false);
|
|
|
|
|
|
+const showDialog = ref(false); // 是否显示对话内容 v-if
|
|
|
+const initDialog = ref(false); // 对话是否初始化
|
|
|
+const hideDialog = ref(false); // 是否隐藏对话 v-show
|
|
|
|
|
|
- // if (navId.value === 0 || navId.value === 3) {
|
|
|
- // const result = await ajax.agent.getVariables(selectId.value);
|
|
|
- // variables.value = result;
|
|
|
- // reportData = {};
|
|
|
- // }
|
|
|
+const historyMode = ref(false);
|
|
|
+const dialogList = ref([]);
|
|
|
|
|
|
- if (data && Array.isArray(data)) {
|
|
|
- historyList.value = data.map((value) => {
|
|
|
- return {
|
|
|
- content: value.name,
|
|
|
- id: value.id,
|
|
|
- time: value.update_date
|
|
|
- };
|
|
|
- });
|
|
|
- }
|
|
|
+const selectId = ref(""); // 当前选择的 agent_id 或者 历史记录的 ID
|
|
|
+const real_agent_id = ref(""); // 实际的agent_id,此值仅在 点击侧边栏具体功能时更改,例如点击 知识问答、文档智能按钮时更改
|
|
|
+const agentIds = ref([]); // agent ID的列表
|
|
|
+const agentList = ref([]);
|
|
|
|
|
|
- // 每次切换功能板块时,清空sendData数据
|
|
|
- // helper.write('sendData', {});
|
|
|
- clearLocalStorageSendData();
|
|
|
- };
|
|
|
+const dialogId = ref("");
|
|
|
+const historyList = ref([]);
|
|
|
+const variables = ref([]);
|
|
|
+const textValue = ref("");
|
|
|
+const parseStatus = ref(false);
|
|
|
+const maxLength = ref(6000); // 允许输入的最大长度
|
|
|
+const targetDocument = ref(null); // 当前查看详情的文档
|
|
|
+const transNavId = ref() //查看详情时记录之前的navId
|
|
|
|
|
|
- /**
|
|
|
- * 选择某个历史记录
|
|
|
- * @params {string} id - 历史记录对应的ID
|
|
|
- */
|
|
|
- const selectHistory = async (id) => {
|
|
|
- showDialog.value = true;
|
|
|
- // 历史记录对话模式,不调用对话ID接口
|
|
|
- historyMode.value = true;
|
|
|
- readonly.value = true;
|
|
|
-
|
|
|
- selectId.value = id;
|
|
|
- helper.$bus.emit("set-loading", true);
|
|
|
- helper.$bus.emit("stop-writing");
|
|
|
- initDialog.value = false;
|
|
|
-
|
|
|
- // 历史记录 通过当前name取id
|
|
|
- const name = config.slider.find(item => item.id === navId.value).title
|
|
|
- const agentsId = agents.find(agent => agent.name === name).id;
|
|
|
- const data = await ajax.message.getHistoryLogs(agentsId, id);
|
|
|
-
|
|
|
- if (data && Array.isArray(data) && data.length > 0) {
|
|
|
- dialogList.value = data
|
|
|
- } else {
|
|
|
- dialogList.value = []
|
|
|
- }
|
|
|
-
|
|
|
- initDialog.value = true;
|
|
|
- helper.$bus.emit("set-loading", false);
|
|
|
- };
|
|
|
-
|
|
|
- const beginCombine = async () => {
|
|
|
- let report_name = "";
|
|
|
- let inputData = [];
|
|
|
- for (let key in reportData) {
|
|
|
- /**
|
|
|
- * 此部分代码于 2024/11/25日上午做了简单优化
|
|
|
- * 优化时,仅调整了循环体内的代码
|
|
|
- * 由于此功能暂时禁用,无法测试优化后的效果是否正常
|
|
|
- * 如果后续测试时发现代码异常,可copy此时间之前的原代码
|
|
|
- */
|
|
|
- const cur_report = reportData[key];
|
|
|
- const report_key = cur_report.key;
|
|
|
- const report_value = cur_report.value;
|
|
|
-
|
|
|
- const item = {
|
|
|
- id: key,
|
|
|
- name: report_key,
|
|
|
- };
|
|
|
-
|
|
|
- if (typeof report_value === "string") {
|
|
|
- report_name += `${report_key}:${report_value}\n`;
|
|
|
-
|
|
|
- item.file_path = '';
|
|
|
- item.value = report_value;
|
|
|
- } else {
|
|
|
- report_name += `${report_key}:${report_value.name}\n`;
|
|
|
-
|
|
|
- item.file_path = report_value.url;
|
|
|
- item.value = '';
|
|
|
- }
|
|
|
-
|
|
|
- inputData.push(item);
|
|
|
- }
|
|
|
-
|
|
|
- // 如果不是历史记录对话模式,则创建对话
|
|
|
- if (!historyMode.value) {
|
|
|
- const data = await ajax.message.createDialog(selectId.value);
|
|
|
|
|
|
- if (data) {
|
|
|
- dialogId.value = data.chat_id;
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
- dialogList.value = [];
|
|
|
- showDialog.value = true;
|
|
|
- initDialog.value = true;
|
|
|
-
|
|
|
- const sendData = {
|
|
|
- chatHistory: [],
|
|
|
- message: textValue.value,
|
|
|
- name: "报告生成",
|
|
|
- description: "报告生成",
|
|
|
- inputs: {
|
|
|
- report_name,
|
|
|
- id: "Report-PRcYL",
|
|
|
- data: inputData
|
|
|
- }
|
|
|
- };
|
|
|
+let reportData = {};
|
|
|
+let agents = {}
|
|
|
|
|
|
- setTimeout(() => {
|
|
|
- helper.$bus.emit("send-message", sendData);
|
|
|
- }, 500);
|
|
|
- };
|
|
|
+const openAll = () => {
|
|
|
+ closeOthers.value = !closeOthers.value;
|
|
|
+};
|
|
|
|
|
|
+const setReadonly = (status) => {
|
|
|
+ readonly.value = status;
|
|
|
+};
|
|
|
+const changeParse = (status) => {
|
|
|
+ parseStatus.value = status;
|
|
|
+}
|
|
|
+const goDocument = (targetDoc) => {
|
|
|
+ transNavId.value = navId.value
|
|
|
+ navId.value = -2;
|
|
|
+ hideDialog.value = true;
|
|
|
+ targetDocument.value = {...targetDoc };
|
|
|
+};
|
|
|
+const goBack = () => {
|
|
|
+ navId.value = transNavId.value;
|
|
|
+ hideDialog.value = false;
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * 当点击某个导航时触发的方法
|
|
|
+ * 例如:点击 知识问答 文档智能 智能问答 智能数据 等
|
|
|
+ * @params {object} node
|
|
|
+ * @params {number} node.id - 例如 3 4 5
|
|
|
+ * @params {string} node.title - 例如:文档智能 小数绘图
|
|
|
+ */
|
|
|
+const selectNav = async (node) => {
|
|
|
+ navId.value = node.id;
|
|
|
+ textValue.value = [];
|
|
|
+ // 关闭历史模式
|
|
|
+ historyMode.value = false;
|
|
|
+ readonly.value = false;
|
|
|
+
|
|
|
+ if (node.index === -1) {
|
|
|
+ swiperNumber.value = 5;
|
|
|
+ } else {
|
|
|
+ swiperNumber.value = 4;
|
|
|
+ }
|
|
|
|
|
|
- const continueCombine = async () => {
|
|
|
- const sendData = {
|
|
|
- chatHistory: [],
|
|
|
- name: "报告生成",
|
|
|
- description: "报告生成",
|
|
|
- inputs: {
|
|
|
- report_name: textValue.value,
|
|
|
- id: "Report-PRcYL",
|
|
|
- query: textValue.value,
|
|
|
- }
|
|
|
+ helper.$bus.emit("stop-writing");
|
|
|
+ showDialog.value = false;
|
|
|
+
|
|
|
+ // 获取当前选定的agent对应的ID
|
|
|
+ selectId.value = (agents.find(agent => agent.name === node.title) || {}).id || null;
|
|
|
+ real_agent_id.value = selectId.value; // 记录agent_id值
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 导航切换
|
|
|
+ * 清空文档智能的数据
|
|
|
+ */
|
|
|
+ wendangzhineng_file_uploaded.value = false;
|
|
|
+ wendangzhineng_text_input.value = '';
|
|
|
+ wendangzhineng_file_list.value = [];
|
|
|
+ wendangzhinengClearDocFile();
|
|
|
+
|
|
|
+ // 获取历史记录
|
|
|
+ const data = await ajax.message.getDialogs(selectId.value);
|
|
|
+
|
|
|
+
|
|
|
+ // if (navId.value === 0 || navId.value === 3) {
|
|
|
+ // const result = await ajax.agent.getVariables(selectId.value);
|
|
|
+ // variables.value = result;
|
|
|
+ // reportData = {};
|
|
|
+ // }
|
|
|
+
|
|
|
+ if (data && Array.isArray(data)) {
|
|
|
+ historyList.value = data.map((value) => {
|
|
|
+ return {
|
|
|
+ content: value.name,
|
|
|
+ id: value.id,
|
|
|
+ time: value.update_date
|
|
|
};
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
- setTimeout(() => {
|
|
|
- helper.$bus.emit("send-message", sendData);
|
|
|
- textValue.value = "";
|
|
|
- }, 500);
|
|
|
- };
|
|
|
+ // 每次切换功能板块时,清空sendData数据
|
|
|
+ // helper.write('sendData', {});
|
|
|
+ clearLocalStorageSendData();
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * 选择某个历史记录
|
|
|
+ * @params {string} id - 历史记录对应的ID
|
|
|
+ */
|
|
|
+const selectHistory = async (id) => {
|
|
|
+ showDialog.value = true;
|
|
|
+ // 历史记录对话模式,不调用对话ID接口
|
|
|
+ historyMode.value = true;
|
|
|
+ readonly.value = true;
|
|
|
+
|
|
|
+ selectId.value = id;
|
|
|
+ helper.$bus.emit("set-loading", true);
|
|
|
+ helper.$bus.emit("stop-writing");
|
|
|
+ initDialog.value = false;
|
|
|
+
|
|
|
+ // 历史记录 通过当前name取id
|
|
|
+ const name = config.slider.find(item => item.id === navId.value).title
|
|
|
+ const agentsId = agents.find(agent => agent.name === name).id;
|
|
|
+ const data = await ajax.message.getHistoryLogs(agentsId, id);
|
|
|
+
|
|
|
+ if (data && Array.isArray(data) && data.length > 0) {
|
|
|
+ dialogList.value = data
|
|
|
+ } else {
|
|
|
+ dialogList.value = []
|
|
|
+ }
|
|
|
|
|
|
- const customChange = (event, key, value) => {
|
|
|
- reportData[key] = {
|
|
|
- key: value,
|
|
|
- value: event
|
|
|
- };
|
|
|
- };
|
|
|
+ initDialog.value = true;
|
|
|
+ helper.$bus.emit("set-loading", false);
|
|
|
+};
|
|
|
|
|
|
+const beginCombine = async () => {
|
|
|
+ let report_name = "";
|
|
|
+ let inputData = [];
|
|
|
+ for (let key in reportData) {
|
|
|
/**
|
|
|
- * 文档智能上传文件
|
|
|
- * @param option
|
|
|
- * @param key
|
|
|
- * @param value
|
|
|
+ * 此部分代码于 2024/11/25日上午做了简单优化
|
|
|
+ * 优化时,仅调整了循环体内的代码
|
|
|
+ * 由于此功能暂时禁用,无法测试优化后的效果是否正常
|
|
|
+ * 如果后续测试时发现代码异常,可copy此时间之前的原代码
|
|
|
*/
|
|
|
- const customRequest = async (option, key, value) => {
|
|
|
- const { onSuccess, fileItem } = option;
|
|
|
- const { file, uid, name } = fileItem;
|
|
|
- const fileList = [];
|
|
|
-
|
|
|
- fileList.push({
|
|
|
- id: uid,
|
|
|
- file
|
|
|
- });
|
|
|
-
|
|
|
- onSuccess();
|
|
|
- const formData = new FormData();
|
|
|
-
|
|
|
- fileList.forEach((item) => {
|
|
|
- formData.append("file", item.file);
|
|
|
- });
|
|
|
-
|
|
|
- const data = await ajax.file.uploadFiles(selectId.value, formData);
|
|
|
-
|
|
|
- reportData[key] = {
|
|
|
- key: value,
|
|
|
- value: {
|
|
|
- name,
|
|
|
- url: data.file_path
|
|
|
- }
|
|
|
- };
|
|
|
- };
|
|
|
+ const cur_report = reportData[key];
|
|
|
+ const report_key = cur_report.key;
|
|
|
+ const report_value = cur_report.value;
|
|
|
|
|
|
- onMounted(async () => {
|
|
|
- agents = await ajax.agent.getAgents();
|
|
|
- agentIds.value = agents && Array.isArray(agents) && agents.map((data) => data.id) || [];
|
|
|
+ const item = {
|
|
|
+ id: key,
|
|
|
+ name: report_key,
|
|
|
+ };
|
|
|
|
|
|
- helper.$bus.on("open-dialog", async (value) => {
|
|
|
- // 如果不是历史记录对话模式,则创建对话
|
|
|
- if (!historyMode.value) {
|
|
|
- const data = await ajax.message.createDialog(selectId.value);
|
|
|
- dialogId.value = data.chat_id;
|
|
|
- }
|
|
|
+ if (typeof report_value === "string") {
|
|
|
+ report_name += `${report_key}:${report_value}\n`;
|
|
|
|
|
|
- dialogList.value = [];
|
|
|
- showDialog.value = true;
|
|
|
- initDialog.value = true;
|
|
|
+ item.file_path = '';
|
|
|
+ item.value = report_value;
|
|
|
+ } else {
|
|
|
+ report_name += `${report_key}:${report_value.name}\n`;
|
|
|
|
|
|
- // TODO
|
|
|
- setTimeout(() => {
|
|
|
- helper.$bus.emit("send-message", value);
|
|
|
- }, 200);
|
|
|
- });
|
|
|
- });
|
|
|
+ item.file_path = report_value.url;
|
|
|
+ item.value = '';
|
|
|
+ }
|
|
|
|
|
|
- onBeforeUnmount(() => {
|
|
|
- helper.$bus.off("open-dialog");
|
|
|
- });
|
|
|
+ inputData.push(item);
|
|
|
+ }
|
|
|
|
|
|
- /**
|
|
|
- * 点击新建对话按钮
|
|
|
- */
|
|
|
- const handelSetNewChat = () => {
|
|
|
- selectId.value = real_agent_id.value;
|
|
|
+ // 如果不是历史记录对话模式,则创建对话
|
|
|
+ if (!historyMode.value) {
|
|
|
+ const data = await ajax.message.createDialog(selectId.value);
|
|
|
|
|
|
- showDialog.value = false;
|
|
|
+ if (data) {
|
|
|
+ dialogId.value = data.chat_id;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- historyMode.value = false;
|
|
|
- setReadonly(false);
|
|
|
+ dialogList.value = [];
|
|
|
+ showDialog.value = true;
|
|
|
+ initDialog.value = true;
|
|
|
+
|
|
|
+ const sendData = {
|
|
|
+ chatHistory: [],
|
|
|
+ message: textValue.value,
|
|
|
+ name: "报告生成",
|
|
|
+ description: "报告生成",
|
|
|
+ inputs: {
|
|
|
+ report_name,
|
|
|
+ id: "Report-PRcYL",
|
|
|
+ data: inputData
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ setTimeout(() => {
|
|
|
+ helper.$bus.emit("send-message", sendData);
|
|
|
+ }, 500);
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
+const continueCombine = async () => {
|
|
|
+ const sendData = {
|
|
|
+ chatHistory: [],
|
|
|
+ name: "报告生成",
|
|
|
+ description: "报告生成",
|
|
|
+ inputs: {
|
|
|
+ report_name: textValue.value,
|
|
|
+ id: "Report-PRcYL",
|
|
|
+ query: textValue.value,
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ setTimeout(() => {
|
|
|
+ helper.$bus.emit("send-message", sendData);
|
|
|
+ textValue.value = "";
|
|
|
+ }, 500);
|
|
|
+};
|
|
|
+
|
|
|
+const customChange = (event, key, value) => {
|
|
|
+ reportData[key] = {
|
|
|
+ key: value,
|
|
|
+ value: event
|
|
|
+ };
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * 文档智能上传文件
|
|
|
+ * @param option
|
|
|
+ * @param key
|
|
|
+ * @param value
|
|
|
+ */
|
|
|
+const customRequest = async (option, key, value) => {
|
|
|
+ const { onSuccess, fileItem } = option;
|
|
|
+ const { file, uid, name } = fileItem;
|
|
|
+ const fileList = [];
|
|
|
+
|
|
|
+ fileList.push({
|
|
|
+ id: uid,
|
|
|
+ file
|
|
|
+ });
|
|
|
+
|
|
|
+ onSuccess();
|
|
|
+ const formData = new FormData();
|
|
|
+
|
|
|
+ fileList.forEach((item) => {
|
|
|
+ formData.append("file", item.file);
|
|
|
+ });
|
|
|
+
|
|
|
+ const data = await ajax.file.uploadFiles(selectId.value, formData);
|
|
|
+
|
|
|
+ reportData[key] = {
|
|
|
+ key: value,
|
|
|
+ value: {
|
|
|
+ name,
|
|
|
+ url: data.file_path
|
|
|
+ }
|
|
|
+ };
|
|
|
+};
|
|
|
|
|
|
- // 清空文档智能相关的数据
|
|
|
- wendangzhineng_file_uploaded.value = false;
|
|
|
- wendangzhineng_text_input.value = '';
|
|
|
- wendangzhineng_file_list.value = [];
|
|
|
- wendangzhinengClearDocFile();
|
|
|
+onMounted(async () => {
|
|
|
+ agents = await ajax.agent.getAgents();
|
|
|
+ agentList.value = agents;
|
|
|
+ console.log(agentList.value, 'agentList.value::agentList.value');
|
|
|
|
|
|
- // 每次新建对话时,清空sendData数据
|
|
|
- clearLocalStorageSendData();
|
|
|
- };
|
|
|
+ agentIds.value = agents && Array.isArray(agents) && agents.map((data) => data.id) || [];
|
|
|
|
|
|
- function clearLocalStorageSendData() {
|
|
|
- // helper.write('sendData', {});
|
|
|
+ helper.$bus.on("open-dialog", async (value) => {
|
|
|
+ // 如果不是历史记录对话模式,则创建对话
|
|
|
+ if (!historyMode.value) {
|
|
|
+ const data = await ajax.message.createDialog(selectId.value);
|
|
|
+ dialogId.value = data.chat_id;
|
|
|
}
|
|
|
|
|
|
- const text_area_style = {
|
|
|
- flex: 1,
|
|
|
- borderRadius: '12px',
|
|
|
- marginTop: '20px',
|
|
|
- padding: '0px 30px 0 16px',
|
|
|
- background: 'transparent',
|
|
|
- border: '1px solid #e3e3e3',
|
|
|
- minHeight: '120px',
|
|
|
- paddingBottom: `${textValue.value.length > maxLength.value / 2 ? '20px' : ''}`
|
|
|
- };
|
|
|
+ dialogList.value = [];
|
|
|
+ showDialog.value = true;
|
|
|
+ initDialog.value = true;
|
|
|
|
|
|
- /**
|
|
|
- * 文档智能相关内容处理
|
|
|
- */
|
|
|
- /**
|
|
|
- * 文件上传操作
|
|
|
- */
|
|
|
- const MAX_ACCEPT_FILE = 5;
|
|
|
- const upload_warning_text = `支持上传文件pdf、docx文档(最多${MAX_ACCEPT_FILE}个,每个大小不超过10MB)`;
|
|
|
- const wendangzhineng_file_list = ref([]);
|
|
|
- const wendangzhineng_text_input = ref('');
|
|
|
- const wendangzhineng_file_uploaded = ref(false);
|
|
|
- const wendangzhineng_is_loading = ref(false);
|
|
|
- /**
|
|
|
- * 文件数据变化
|
|
|
- * @param fileList
|
|
|
- */
|
|
|
- const handleFileChange = (fileList) => {
|
|
|
- wendangzhineng_file_list.value = fileList;
|
|
|
- }
|
|
|
- const getFIleParams = () => {
|
|
|
- const formData = new FormData();
|
|
|
+ // TODO
|
|
|
+ setTimeout(() => {
|
|
|
+ helper.$bus.emit("send-message", value);
|
|
|
+ }, 200);
|
|
|
+ });
|
|
|
+});
|
|
|
|
|
|
- const f_list = wendangzhineng_file_list.value;
|
|
|
+onBeforeUnmount(() => {
|
|
|
+ helper.$bus.off("open-dialog");
|
|
|
+});
|
|
|
|
|
|
- f_list.forEach((item) => {
|
|
|
- const file = item.file;
|
|
|
+/**
|
|
|
+ * 点击新建对话按钮
|
|
|
+ */
|
|
|
+const handelSetNewChat = () => {
|
|
|
+ selectId.value = real_agent_id.value;
|
|
|
|
|
|
- formData.append("file", file);
|
|
|
- });
|
|
|
+ showDialog.value = false;
|
|
|
|
|
|
- return formData;
|
|
|
- }
|
|
|
- const showMsg = (msg) => {
|
|
|
- Message.error({ content: msg, position: 'bottom' });
|
|
|
- }
|
|
|
- const beginWendangzhinengCombine = async () => {
|
|
|
- if (wendangzhineng_is_loading.value) {
|
|
|
- return;
|
|
|
- }
|
|
|
+ historyMode.value = false;
|
|
|
+ setReadonly(false);
|
|
|
|
|
|
- wendangzhineng_is_loading.value = true;
|
|
|
+ // 清空文档智能相关的数据
|
|
|
+ wendangzhineng_file_uploaded.value = false;
|
|
|
+ wendangzhineng_text_input.value = '';
|
|
|
+ wendangzhineng_file_list.value = [];
|
|
|
+ wendangzhinengClearDocFile();
|
|
|
|
|
|
- // 文档智能
|
|
|
- const title = wendangzhineng_text_input.value; // 标题
|
|
|
- const f_list = wendangzhineng_file_list.value;
|
|
|
+ // 每次新建对话时,清空sendData数据
|
|
|
+ clearLocalStorageSendData();
|
|
|
+};
|
|
|
|
|
|
- let sendData = null;
|
|
|
+function clearLocalStorageSendData() {
|
|
|
+ // helper.write('sendData', {});
|
|
|
+}
|
|
|
|
|
|
- if (!wendangzhineng_file_uploaded.value) {
|
|
|
- // 文件未上传
|
|
|
- if (f_list.length === 0) {
|
|
|
- showMsg('请选择文件');
|
|
|
- return;
|
|
|
- }
|
|
|
+const text_area_style = {
|
|
|
+ flex: 1,
|
|
|
+ borderRadius: '12px',
|
|
|
+ marginTop: '20px',
|
|
|
+ padding: '0px 30px 0 16px',
|
|
|
+ background: 'transparent',
|
|
|
+ border: '1px solid #e3e3e3',
|
|
|
+ minHeight: '120px',
|
|
|
+ paddingBottom: `${textValue.value.length > maxLength.value / 2 ? '20px' : ''}`
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * 文档智能相关内容处理
|
|
|
+ */
|
|
|
+/**
|
|
|
+ * 文件上传操作
|
|
|
+ */
|
|
|
+const MAX_ACCEPT_FILE = 5;
|
|
|
+const upload_warning_text = `支持上传文件pdf、docx文档(最多${MAX_ACCEPT_FILE}个,每个大小不超过10MB)`;
|
|
|
+const wendangzhineng_file_list = ref([]);
|
|
|
+const wendangzhineng_text_input = ref('');
|
|
|
+const wendangzhineng_file_uploaded = ref(false);
|
|
|
+const wendangzhineng_is_loading = ref(false);
|
|
|
+/**
|
|
|
+ * 文件数据变化
|
|
|
+ * @param fileList
|
|
|
+ */
|
|
|
+const handleFileChange = (fileList) => {
|
|
|
+ wendangzhineng_file_list.value = fileList;
|
|
|
+}
|
|
|
+const getFIleParams = () => {
|
|
|
+ const formData = new FormData();
|
|
|
|
|
|
- if (!title) {
|
|
|
- showMsg('请输入内容');
|
|
|
- return;
|
|
|
- }
|
|
|
+ const f_list = wendangzhineng_file_list.value;
|
|
|
|
|
|
- showDialog.value = true;
|
|
|
+ f_list.forEach((item) => {
|
|
|
+ const file = item.file;
|
|
|
|
|
|
- // 创建会话
|
|
|
- const data = await ajax.message.createDialog(selectId.value);
|
|
|
- if (data) {
|
|
|
- dialogId.value = data.chat_id;
|
|
|
- }
|
|
|
+ formData.append("file", file);
|
|
|
+ });
|
|
|
|
|
|
- // 上传文件
|
|
|
- const fm_data = getFIleParams();
|
|
|
- const uploadResult1 = await ajax.file.uploadFiles(real_agent_id.value, fm_data);
|
|
|
- const files_info = uploadResult1.files; // 数组
|
|
|
- const file_id_list = files_info.map(item => item.id);
|
|
|
+ return formData;
|
|
|
+}
|
|
|
+const showMsg = (msg) => {
|
|
|
+ Message.error({ content: msg, position: 'bottom' });
|
|
|
+}
|
|
|
+const beginWendangzhinengCombine = async () => {
|
|
|
+ if (wendangzhineng_is_loading.value) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- sendData = {
|
|
|
- message: title,
|
|
|
- upload_file_id: file_id_list
|
|
|
- }
|
|
|
+ wendangzhineng_is_loading.value = true;
|
|
|
|
|
|
- /**
|
|
|
- * 在内存中保存上传的文件
|
|
|
- * 供对话时界面上显示
|
|
|
- */
|
|
|
- wendangzhinengSetTempDocFile({
|
|
|
- client_files: f_list,
|
|
|
- server_files: files_info
|
|
|
- });
|
|
|
-
|
|
|
- } else {
|
|
|
- // 已上传,无需再上传
|
|
|
- // 再次提问
|
|
|
- if (!title) {
|
|
|
- showMsg('请输入内容');
|
|
|
- return;
|
|
|
- }
|
|
|
+ // 文档智能
|
|
|
+ const title = wendangzhineng_text_input.value; // 标题
|
|
|
+ const f_list = wendangzhineng_file_list.value;
|
|
|
|
|
|
- showDialog.value = true;
|
|
|
+ let sendData = null;
|
|
|
|
|
|
- // 创建会话
|
|
|
- const data = await ajax.message.createDialog(selectId.value);
|
|
|
- if (data) {
|
|
|
- dialogId.value = data.chat_id;
|
|
|
- }
|
|
|
+ if (!wendangzhineng_file_uploaded.value) {
|
|
|
+ // 文件未上传
|
|
|
+ if (f_list.length === 0) {
|
|
|
+ showMsg('请选择文件');
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- sendData = {
|
|
|
- message: title,
|
|
|
- }
|
|
|
- }
|
|
|
+ if (!title) {
|
|
|
+ showMsg('请输入内容');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ showDialog.value = true;
|
|
|
|
|
|
- wendangzhineng_file_uploaded.value = true;
|
|
|
- // wendangzhineng_text_input.value = '';
|
|
|
- // wendangzhineng_file_list.value = [];
|
|
|
+ // 创建会话
|
|
|
+ const data = await ajax.message.createDialog(selectId.value);
|
|
|
+ if (data) {
|
|
|
+ dialogId.value = data.chat_id;
|
|
|
+ }
|
|
|
|
|
|
- dialogList.value = [];
|
|
|
- // showDialog.value = true;
|
|
|
- initDialog.value = true;
|
|
|
+ // 上传文件
|
|
|
+ const fm_data = getFIleParams();
|
|
|
+ const uploadResult1 = await ajax.file.uploadFiles(real_agent_id.value, fm_data);
|
|
|
+ const files_info = uploadResult1.files; // 数组
|
|
|
+ const file_id_list = files_info.map(item => item.id);
|
|
|
|
|
|
- setTimeout(() => {
|
|
|
- helper.$bus.emit("send-message", sendData);
|
|
|
- wendangzhineng_text_input.value = '';
|
|
|
- wendangzhineng_is_loading.value = false;
|
|
|
- }, 500);
|
|
|
- };
|
|
|
- /**
|
|
|
- * 移除文本中的换行符
|
|
|
- */
|
|
|
- const removeBreakLineFlag = () => {
|
|
|
- wendangzhineng_text_input.value = wendangzhineng_text_input.value.replace(/\n/, '');
|
|
|
- };
|
|
|
+ sendData = {
|
|
|
+ message: title,
|
|
|
+ upload_file_id: file_id_list
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
- * 用户按键事件
|
|
|
- * @param e
|
|
|
+ * 在内存中保存上传的文件
|
|
|
+ * 供对话时界面上显示
|
|
|
*/
|
|
|
- const handleTextKeyUp = (e) => {
|
|
|
- if (e.keyCode === 13) {
|
|
|
- if (e.ctrlKey) {
|
|
|
- // 此时也按下Ctrl:换行处理
|
|
|
- } else {
|
|
|
- // 此时没有按下Ctrl
|
|
|
- removeBreakLineFlag();
|
|
|
-
|
|
|
- beginWendangzhinengCombine();
|
|
|
- }
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
+ wendangzhinengSetTempDocFile({
|
|
|
+ client_files: f_list,
|
|
|
+ server_files: files_info
|
|
|
+ });
|
|
|
|
|
|
+ } else {
|
|
|
+ // 已上传,无需再上传
|
|
|
+ // 再次提问
|
|
|
+ if (!title) {
|
|
|
+ showMsg('请输入内容');
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
+ showDialog.value = true;
|
|
|
|
|
|
+ // 创建会话
|
|
|
+ const data = await ajax.message.createDialog(selectId.value);
|
|
|
+ if (data) {
|
|
|
+ dialogId.value = data.chat_id;
|
|
|
+ }
|
|
|
|
|
|
+ sendData = {
|
|
|
+ message: title,
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- return {
|
|
|
- SYSTEM_NAME,
|
|
|
- customChange,
|
|
|
- customRequest,
|
|
|
- historyList,
|
|
|
- beginCombine,
|
|
|
- continueCombine,
|
|
|
- selectId,
|
|
|
- dialogId,
|
|
|
- navId,
|
|
|
- variables,
|
|
|
- selectNav,
|
|
|
- swiperNumber,
|
|
|
- slider: config.slider,
|
|
|
- readonly,
|
|
|
- setReadonly,
|
|
|
- showDialog,
|
|
|
- selectHistory,
|
|
|
- historyMode,
|
|
|
- closeOthers,
|
|
|
- openAll,
|
|
|
- dialogType,
|
|
|
- dialogList,
|
|
|
- initDialog,
|
|
|
- goDocument,
|
|
|
- goBack,
|
|
|
- changeParse,
|
|
|
- hideDialog,
|
|
|
- agentIds,
|
|
|
- textValue,
|
|
|
- parseStatus,
|
|
|
- maxLength,
|
|
|
-
|
|
|
- handelSetNewChat,
|
|
|
- targetDocument,
|
|
|
-
|
|
|
- text_area_style,
|
|
|
-
|
|
|
- MAX_ACCEPT_FILE,
|
|
|
- wendangzhineng_text_input,
|
|
|
- wendangzhineng_file_list,
|
|
|
- upload_warning_text,
|
|
|
- handleFileChange,
|
|
|
- handleTextKeyUp,
|
|
|
- beginWendangzhinengCombine
|
|
|
- };
|
|
|
+ wendangzhineng_file_uploaded.value = true;
|
|
|
+ // wendangzhineng_text_input.value = '';
|
|
|
+ // wendangzhineng_file_list.value = [];
|
|
|
+
|
|
|
+ dialogList.value = [];
|
|
|
+ // showDialog.value = true;
|
|
|
+ initDialog.value = true;
|
|
|
+
|
|
|
+ setTimeout(() => {
|
|
|
+ helper.$bus.emit("send-message", sendData);
|
|
|
+ wendangzhineng_text_input.value = '';
|
|
|
+ wendangzhineng_is_loading.value = false;
|
|
|
+ }, 500);
|
|
|
+};
|
|
|
+/**
|
|
|
+ * 移除文本中的换行符
|
|
|
+ */
|
|
|
+const removeBreakLineFlag = () => {
|
|
|
+ wendangzhineng_text_input.value = wendangzhineng_text_input.value.replace(/\n/, '');
|
|
|
+};
|
|
|
+
|
|
|
+/**
|
|
|
+ * 用户按键事件
|
|
|
+ * @param e
|
|
|
+ */
|
|
|
+const handleTextKeyUp = (e) => {
|
|
|
+ if (e.keyCode === 13) {
|
|
|
+ if (e.ctrlKey) {
|
|
|
+ // 此时也按下Ctrl:换行处理
|
|
|
+ } else {
|
|
|
+ // 此时没有按下Ctrl
|
|
|
+ removeBreakLineFlag();
|
|
|
+
|
|
|
+ beginWendangzhinengCombine();
|
|
|
+ }
|
|
|
}
|
|
|
-});
|
|
|
+};
|
|
|
</script>
|
|
|
<style lang="scss" scoped>
|
|
|
.main {
|