奇橙 1 year ago
parent
commit
cc651ced09

+ 8 - 1
src/ajax/api/file.js

@@ -20,8 +20,15 @@ const uploadExcels = (file) => {
     }
   });
 };
-
+const uploadFile = (id, chatId, file) => {
+  return request.post(`/api/files/upload/${id}?chat_id=${chatId}`, file, {
+    headers: {
+      "Content-Type": "multipart/form-data"
+    }
+  });
+};
 export default {
+  uploadFile,
   uploadFiles,
   uploadExcels
 };

+ 34 - 34
src/ajax/request.js

@@ -2,25 +2,25 @@ import axios from "axios";
 import ArcoVue from "@arco-design/web-vue";
 import helper from "@/utils/helper";
 const service = axios.create({
-    withCredentials: true, // 跨域发送 cookie
-    timeout: 3000, // 请求超时
-    headers: {
-        "Content-Type": "application/json"
-    }
+  withCredentials: true, // 跨域发送 cookie
+  timeout: 10000, // 请求超时
+  headers: {
+    "Content-Type": "application/json"
+  }
 });
 service.interceptors.request.use(
-    (config) => {
-        helper.setLoading(true);
-        if (helper.read("token")) {
-            config.headers["Authorization"] = `Bearer ${helper.read("token")}`;
-        }
-        return config;
-    },
-    (error) => {
-        console.error(error);
-        // 请求出错
-        return Promise.reject(error);
+  (config) => {
+    helper.setLoading(true);
+    if (helper.read("token")) {
+      config.headers["Authorization"] = `Bearer ${helper.read("token")}`;
     }
+    return config;
+  },
+  (error) => {
+    console.error(error);
+    // 请求出错
+    return Promise.reject(error);
+  }
 );
 
 /**
@@ -28,7 +28,7 @@ service.interceptors.request.use(
  * @param {*} response
  */
 const handlerLogin = (response) => {
-    if (response?.status !== 401 && response?.data?.msg !== "没有登录") return response;
+  if (response?.status !== 401 && response?.data?.msg !== "没有登录") return response;
 };
 
 /**
@@ -36,27 +36,27 @@ const handlerLogin = (response) => {
  * @param {*} response
  */
 const handler403 = (response) => {
-    if (response?.status !== 403) return response;
+  if (response?.status !== 403) return response;
 };
 
 service.interceptors.response.use(
-    (response) => {
-        const { code, data, msg } = response.data;
-        helper.setLoading(false);
-        if (code === 200) {
-            return data;
-        } else {
-            ArcoVue.Message["error"]({ content: msg, duration: 1500 });
-            return false;
-        }
-    },
-    (error) => {
-        handlerLogin(error.response);
-        handler403(error.response);
-        helper.setLoading(false);
-        ArcoVue.Message["error"]({ content: `网络异常,请稍后重试`, duration: 1500 });
-        // return false;
+  (response) => {
+    const { code, data, msg } = response.data;
+    helper.setLoading(false);
+    if (code === 200) {
+      return data;
+    } else {
+      ArcoVue.Message["error"]({ content: msg, duration: 1500 });
+      return false;
     }
+  },
+  (error) => {
+    handlerLogin(error.response);
+    handler403(error.response);
+    helper.setLoading(false);
+    ArcoVue.Message["error"]({ content: `网络异常,请稍后重试`, duration: 1500 });
+    // return false;
+  }
 );
 
 export default service;

+ 3 - 4
src/components/DialogWrap.vue

@@ -47,8 +47,7 @@
                         <div v-else v-show="item.capacity.status === 'loading'"
                             :class="[readonly || item.capacity.status === 'loading' ? 'disabled' : '']">
                             <a-spin :size="18" />
-                            <span>正在为您合并
-                                }}...</span>
+                            <span>正在为您合并...</span>
                         </div>
                         <section v-if="type === 'knowledge' && item.capacity.status === 'loaded'"
                             v-show="menuList[key].open">
@@ -71,7 +70,7 @@
                                         <span>
                                             <em v-for="(item, documentIndex) in document.list" :key="documentIndex">{{
                                                 item.title
-                                                }}</em>
+                                            }}</em>
                                         </span>
                                         <icon-caret-down size="12"
                                             v-if="documentKey === menuList[key].documentOpenIndex" />
@@ -84,7 +83,7 @@
                                                 :style="{ flex: 1, margin: '0' }">
                                                 <span style="color: rgba(153, 153, 153, 1); font-size: 12px">{{
                                                     item.content
-                                                    }}</span>
+                                                }}</span>
                                             </a-typography-paragraph>
                                         </p>
                                     </div>

+ 29 - 27
src/components/DocumentCards.vue

@@ -14,7 +14,7 @@
                 showDeleteTooltip = false;
             }
                 ">
-                <div :class="{ 'text-hide': showUpload }" v-if="!uploadImg">
+                <div :class="{ 'text-hide': showUpload }">
                     <div @click="() => {
                         showUpload = true;
                     }
@@ -25,20 +25,10 @@
                     </div>
                     <p>已选择 {{ fileList.length }} 个文档</p>
                 </div>
-                <div class="text-narrow" v-else>
-                    <div @click="() => {
-                        showUpload = true;
-                    }
-                        ">
-                        <img src="@/assets/document/6.svg" class="img-normal" v-if="!showUpload" />
-                        <img src="@/assets/document/7.svg" class="img-hover" v-if="!showUpload" />
-                        <img src="@/assets/document/8.svg" class="img-active" v-if="showUpload" />
-                    </div>
-                </div>
                 <template #content>
-                    <div :class="{ 'upload-wrap': true, 'upload-wrap-narrow': uploadImg }">
+                    <div :class="{ 'upload-wrap': true, 'upload-wrap-narrow': uploadFile }">
                         <header>
-                            <p>{{ uploadImg ? "上传图片" : "文档解析站" }}</p>
+                            <p>{{ uploadFile ? "上传文档" : "文档解析站" }}</p>
                             <div @click="() => {
                                 showUpload = false;
                             }
@@ -47,22 +37,23 @@
                             </div>
                         </header>
                         <div>
+
                             <section>
-                                <a-upload draggable :multiple="!uploadImg" :limit="50" @before-upload="onBeforeUpload"
+                                <a-upload draggable :multiple="!uploadFile" :limit="50" @before-upload="onBeforeUpload"
                                     @exceed-limit="onExceedLimit" @before-remove="onBeforeRemove"
                                     :custom-request="customRequest" :show-upload-button="{ showOnExceedLimit: true }"
-                                    :accept="uploadImg ? '.png,.jpg' : '.xlsx‌'">
+                                    :accept="uploadFile ? '.txt,.pdf' : '.xlsx‌'">
                                     <template #upload-button>
                                         <div class="upload-main">
-                                            <p>拖拽{{ uploadImg ? "图片" : "文档" }}到这里,或<span>点此上传</span></p>
+                                            <p>拖拽文档到这里,或<span>点此上传</span></p>
                                             <span>
-                                                支持上传{{ uploadImg ? ".png,.jpg图片" : ".xlsx‌文档" }},大小不超过30M
+                                                支持上传{{ uploadFile ? ".txt,.pdf" : ".xlsx‌文档" }},大小不超过30M
                                             </span>
                                         </div>
                                     </template>
                                 </a-upload>
                             </section>
-                            <div v-if="!uploadImg && false">
+                            <div v-if="!uploadFile && false">
                                 <p>
                                     <span>已解析文件列表</span>
                                     <span>共{{ tableData.length }}个</span>
@@ -109,7 +100,8 @@
                         <div>
                             <a-button type="outline" style="margin-right: 10px"
                                 @click="selectFiles(false)">取消</a-button>
-                            <a-button type="primary" @click="selectFiles(true, 'paper')">去合并({{ fileList.length
+                            <a-button type="primary" @click="selectFiles(true, 'paper')">去{{ uploadFile ? '提问' : '合并'
+                                }}({{ fileList.length
                                 }})</a-button>
                         </div>
                     </div>
@@ -125,7 +117,7 @@
 <script>
 import { defineComponent, ref, inject, reactive } from "vue";
 export default defineComponent({
-    props: ["data", "hasUpload", "hasSlider", "uploadImg", "isQuestion"],
+    props: ["data", "hasUpload", "hasSlider", "uploadFile", "isQuestion", "agentId"],
     setup(props) {
         const showUpload = ref(false);
         const { helper, ajax } = inject("$global");
@@ -135,19 +127,29 @@ export default defineComponent({
         const showDeleteTooltip = ref(false);
         const deleteId = ref("");
         const selectFiles = async (isSelect, type) => {
-            fileList.value.forEach(file => {
-                formData.append('files', file)
-            });
-            await ajax.file.uploadExcels(formData);
             showUpload.value = false;
             helper.dialogConfig = {
                 isQuestion: props.isQuestion,
                 selectedKeys: selectedKeys.value,
                 type
             };
-            helper.$bus.emit("open-dialog", {
-                "action": "process"
-            });
+            if (isSelect) {
+                if (props.uploadFile) {
+                    const data = await ajax.message.createDialog(props.agentId);
+                    fileList.value.forEach(file => {
+                        formData.append('file', file)
+                    });
+                    const result = await ajax.file.uploadFile(props.agentId, data.chat_id, formData);
+                    console.log(result);
+                } else {
+                    fileList.value.forEach(file => {
+                        formData.append('files', file)
+                    });
+                    await ajax.file.uploadExcels(formData);
+                    helper.$bus.emit("open-dialog", '合并Excel文件');
+                }
+            }
+
         };
         const handleDeleteButton = (id) => {
             showDeleteTooltip.value = true;

+ 2 - 1
src/views/DocumentAnswer.vue

@@ -1,5 +1,5 @@
 <template>
-    <document-cards :data="data" :hasUpload="false" :hasSlider="false" />
+    <document-cards :hasUpload="true" :uploadFile="true" :data="data" :hasSlider="false" :agentId="agentId" />
 </template>
 <script>
 import DocumentCards from "@/components/DocumentCards.vue";
@@ -8,6 +8,7 @@ export default defineComponent({
     components: {
         DocumentCards
     },
+    props: ["agentId"],
     setup() {
         const data = ref([
             {

+ 1 - 1
src/views/DocumentQuestion.vue

@@ -1,5 +1,5 @@
 <template>
-    <document-cards :data="data" :hasUpload="true" :hasSlider="true" :isQuestion="true" />
+    <document-cards :data="data" :hasUpload="false" :hasSlider="true" :isQuestion="true" />
 </template>
 <script>
 import DocumentCards from "@/components/DocumentCards.vue";

+ 1 - 1
src/views/Home.vue

@@ -30,7 +30,7 @@
                             <!-- 知识问答 -->
                             <DocumentQuestion v-if="navIndex === 2 && !showDialog" />
                             <!-- 文档智能 -->
-                            <DocumentAnswer v-if="navIndex === 3 && !showDialog" />
+                            <DocumentAnswer v-if="navIndex === 3 && !showDialog" :agentId="agentIds[navIndex]" />
                             <!-- 智能问答 -->
                             <Answer v-if="navIndex === 4 && !showDialog" />
                             <!-- 文库详情 -->