Ver Fonte

feat: 调整侧边按钮的显示,按权限进行控制

zhupei há 1 ano atrás
pai
commit
94a6531feb
2 ficheiros alterados com 505 adições e 557 exclusões
  1. 68 39
      src/components/Slider.vue
  2. 437 518
      src/views/Home.vue

+ 68 - 39
src/components/Slider.vue

@@ -4,7 +4,7 @@
       <img src="@/assets/slider/logo.jpg" />
     </header>
     <section class="xiaoshu-aside-left-menus-container">
-      <div v-for="(item, key) in slider" :key="key" @click="handleClick(item.id, item.title)"
+      <div v-for="(item, key) in diaplay_agents" :key="key" @click="handleClick(item.id, item.title)"
         :class="{ active: item.id === navId }">
         <div :title="item.title" class="slide-item-container">
           <img :src="getAssetURL(`/src/assets/slider/${item.icon}.svg`)" width="24" class="img-normal" />
@@ -19,12 +19,12 @@
         <p>{{ userName }}</p>
       </footer>
       <template #content>
-        <div class="user-popover">
+        <div class="user-popover xiaoshu-aside-left-menus-pop-container">
           <header>
             <div style="background-color: rgb(255, 110, 110)">{{ userName?.slice(0, 1) }}</div>
             <p>{{ userName }}</p>
           </header>
-          <section>
+          <section class='xiaoshu-aside-left-menus-actions-container'>
             <div class="item">
               <div @click="toRagflow">
                 <icon-question-circle size="large" />
@@ -234,46 +234,75 @@
     </a-modal>
   </main>
 </template>
-<script>
-import { defineComponent, inject, onMounted, ref } from "vue";
-
-export default defineComponent({
-  props: ["navId"],
-  setup(props, { emit }) {
-    const openHelp = ref(false);
-    const { ajax, helper, config } = inject("$global");
-
-    const userName = ref(helper.read("userName") || "");
-    if (!userName.value) {
-      helper.goLink("/login");
-    }
-    const handleClick = (id, title) => {
-      emit("select-nav", { id, title });
-    };
-    const logout = () => {
-      helper.reset();
-      helper.goLink("/login");
-    };
-    const toRagflow = async () => {
-      const { ragflow_token } = await ajax.user.getToken();
-      if (ragflow_token) {
-        // window.open(`http://${window.location.hostname}:9222/authorization?ragflow_token=${ragflow_token}`, "_blank");
-        window.open(`http://${window.location.hostname}:11080/authorization?ragflow_token=${ragflow_token}`, "_blank");
-      }
 
+<script setup>
+import { defineComponent, inject, onMounted, computed, ref, watch } from "vue";
+
+const props = defineProps(["navId", 'agent_list']);
+
+const emit = defineEmits(['select-nav']);
+
+const openHelp = ref(false);
+const { ajax, helper, config } = inject("$global");
+
+const getDisplayMenu = () => {
+    const agent_list = props.agent_list;
+    const agent_config = config.slider;
+
+    const arr = [];
+
+    const len_conf = agent_config.length;
+    const len_res = agent_list.length;
+
+    for (let i = 0; i < len_conf; i++) {
+        const conf_item = agent_config[i];
+
+        let is_exist = false;
+        for (let j = 0; j < len_res; j++) {
+            const res_item = agent_list[j];
+
+            if (conf_item.title === res_item.name) {
+                // 已存在
+                is_exist = true;
+                break;
+            }
+        }
+
+        if (is_exist) {
+            arr.push(conf_item);
+        }
     }
 
-    return {
-      slider: config.slider,
-      getAssetURL: helper.getAssetURL,
-      userName,
-      handleClick,
-      openHelp,
-      toRagflow,
-      logout
-    };
-  }
+    return arr;
+};
+
+const diaplay_agents = ref([]);
+
+watch(() => props.agent_list, () => {
+    diaplay_agents.value = getDisplayMenu();
 });
+
+const userName = ref(helper.read("userName") || "");
+if (!userName.value) {
+    helper.goLink("/login");
+}
+const handleClick = (id, title) => {
+    emit("select-nav", { id, title });
+};
+const logout = () => {
+    helper.reset();
+    helper.goLink("/login");
+};
+const toRagflow = async () => {
+    const { ragflow_token } = await ajax.user.getToken();
+    if (ragflow_token) {
+    // window.open(`http://${window.location.hostname}:9222/authorization?ragflow_token=${ragflow_token}`, "_blank");
+    window.open(`http://${window.location.hostname}:11080/authorization?ragflow_token=${ragflow_token}`, "_blank");
+    }
+
+}
+
+const getAssetURL = helper.getAssetURL
 </script>
 <style lang="scss" scoped>
 main {

+ 437 - 518
src/views/Home.vue

@@ -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 {