From 5ff5e947cbd5cc0d0819be8da5bbc18df8965a06 Mon Sep 17 00:00:00 2001
From: liudong <liudong>
Date: 星期四, 01 八月 2024 11:06:36 +0800
Subject: [PATCH] 知识库文件的下载

---
 src/api/kbList.ts                    |   92 ++++++++++++++++++++----------
 yarn.lock                            |    5 +
 package.json                         |    1 
 src/views/dmx/knowledgeLib/index.vue |   28 ++++++---
 4 files changed, 85 insertions(+), 41 deletions(-)

diff --git a/package.json b/package.json
index 12aaa78..38ad2c8 100644
--- a/package.json
+++ b/package.json
@@ -36,6 +36,7 @@
   },
   "dependencies": {
     "@arco-design/web-vue": "^2.44.7",
+    "@vue-office/docx": "^1.6.2",
     "@vueuse/core": "^9.3.0",
     "arco-design-pro-vue": "^2.7.3",
     "axios": "^0.24.0",
diff --git a/src/api/kbList.ts b/src/api/kbList.ts
index 1f0448e..af8f7cc 100644
--- a/src/api/kbList.ts
+++ b/src/api/kbList.ts
@@ -1,15 +1,15 @@
-import axios from 'axios';
-import qs from 'query-string';
-import type { DescData } from '@arco-design/web-vue/es/descriptions/interface';
+import axios from "axios";
+import qs from "query-string";
+import type { DescData } from "@arco-design/web-vue/es/descriptions/interface";
 
 export interface PolicyRecord {
   id: string;
   number: number;
   name: string;
-  contentType: 'img' | 'horizontalVideo' | 'verticalVideo';
-  filterType: 'artificial' | 'rules';
+  contentType: "img" | "horizontalVideo" | "verticalVideo";
+  filterType: "artificial" | "rules";
   count: number;
-  status: 'online' | 'offline';
+  status: "online" | "offline";
   createdTime: string;
 }
 
@@ -22,44 +22,49 @@
   list: PolicyRecord[];
   total: number;
 }
+
 // 鐭ヨ瘑搴撳垪琛ㄦ帴鍙�
 export function queryKbList(params) {
-  return axios.get('/api/v1/kb/list', {
+  return axios.get("/api/v1/kb/list", {
     params
   });
 }
+
 // 鐭ヨ瘑搴撹鎯呮帴鍙�
 export function queryKbdetail(params) {
-  return axios.get('/api/v1/kb/detail', {
+  return axios.get("/api/v1/kb/detail", {
     params
   });
 }
 
 // 淇℃伅鎺ュ彛
 export function queryKbtenantInfo(params) {
-  return axios.get('/api/v1/user/tenant_info', {
+  return axios.get("/api/v1/user/tenant_info", {
     params
   });
 }
+
 // 鏂囨。鍒楄〃鎺ュ彛
 export function queryKbDocumentList(params) {
-  return axios.get('/api/v1/document/list', {
+  return axios.get("/api/v1/document/list", {
     params
   });
 }
 
 // 鐭ヨ瘑搴撳垱寤烘帴鍙�
 export function kbcreate(params) {
-  return axios.post('/api/v1/kb/create', params);
+  return axios.post("/api/v1/kb/create", params);
 }
+
 // 鐭ヨ瘑搴撳垹闄ゆ帴鍙�
 export function deleteKnow(params) {
-  return axios.post('/api/v1/kb/rm', params);
+  return axios.post("/api/v1/kb/rm", params);
 }
+
 //鐭ヨ瘑搴撴洿鏂版帴鍙�
 
 export function querykbupdate(params) {
-  return axios.post('/api/v1/kb/update', params);
+  return axios.post("/api/v1/kb/update", params);
 }
 
 // 鏂囨。涓婁紶鎺ュ彛
@@ -71,48 +76,49 @@
 export function kbdocumentupload(params) {
   const config = {
     headers: {
-      'Content-Type': 'application/x-www-form-urlencoded',
+      "Content-Type": "application/x-www-form-urlencoded"
       // token: token,
-    },
-  }
+    }
+  };
   return axios.post(
-    '/api/v1/document/upload',
+    "/api/v1/document/upload",
     params,
     config
-  )
+  );
 }
 
 
 // 鏂囨。鍚姩/鍙栨秷瑙f瀽鎺ュ彛
 
 export function kbdocumentrun(params) {
-  return axios.post('/api/v1/document/run', params);
+  return axios.post("/api/v1/document/run", params);
 }
 
 // 鏂囨。鍒犻櫎鎺ュ彛
 
 export function kbdocumentrm(params) {
-  return axios.post('/api/v1/document/rm', params);
+  return axios.post("/api/v1/document/rm", params);
 }
 
 
 // 鏂囨。閲嶅懡鍚嶆帴鍙�
 export function kbdocumentrename(params) {
-  return axios.post('/api/v1/document/rename', params);
-}
-// 鏂囦欢瑙f瀽鏂规硶鎺ュ彛
-export function kbdocumentchangeparser(params) {
-  return axios.post('/api/v1/document/change_parser', params);
+  return axios.post("/api/v1/document/rename", params);
 }
 
- // 鏂囨。鍚敤/绂佺敤鎺ュ彛
+// 鏂囦欢瑙f瀽鏂规硶鎺ュ彛
+export function kbdocumentchangeparser(params) {
+  return axios.post("/api/v1/document/change_parser", params);
+}
+
+// 鏂囨。鍚敤/绂佺敤鎺ュ彛
 export function kbdocumentchangeStatus(params) {
-  return axios.post('/api/v1/document/change_status', params);
+  return axios.post("/api/v1/document/change_status", params);
 }
 
 // 妯″瀷鍒楄〃鎺ュ彛
 export function queryModelList(params) {
-  return axios.get('/api/v1/llm/list', {
+  return axios.get("/api/v1/llm/list", {
     params
   });
 }
@@ -120,18 +126,40 @@
 
 // 娴嬭瘯鎺ュ彛
 export function kbretrievalTest(params) {
-  return axios.post('/api/v1/chunk/retrieval_test', params);
+  return axios.post("/api/v1/chunk/retrieval_test", params);
 }
 
 
 // 閰嶇疆鎺ュ彛
 export function kbUpdate(params) {
-  return axios.post('/api/v1/kb/update', params);
+  return axios.post("/api/v1/kb/update", params);
 }
 
 
+// 鏂囨。涓嬭浇鎺ュ彛
 
-
-
+export 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);
+};
 
 
diff --git a/src/views/dmx/knowledgeLib/index.vue b/src/views/dmx/knowledgeLib/index.vue
index 8df5eb4..7da5b5e 100644
--- a/src/views/dmx/knowledgeLib/index.vue
+++ b/src/views/dmx/knowledgeLib/index.vue
@@ -223,9 +223,14 @@
                         </template>
                       </a-button>
                     </a-popconfirm>
-                    <a-button type="text" size="small">
+                    <a-button type="text" size="small" @click="onDownloadDocument(record)">
                       <template #icon>
                         <icon-download />
+                      </template>
+                    </a-button>
+                    <a-button type="text" size="small"  @click="seeload(record)">
+                      <template #icon>
+                        <icon-eye />
                       </template>
                     </a-button>
                   </template>
@@ -296,7 +301,7 @@
   queryKbDocumentList,
   deleteKnow,
   queryKbdetail,
-  queryKbtenantInfo, kbdocumentrm, kbdocumentchangeparser, kbdocumentrun, kbdocumentchangeStatus
+  queryKbtenantInfo, kbdocumentrm, kbdocumentchangeparser, kbdocumentrun, kbdocumentchangeStatus,downloadFile
 } from "@/api/kbList";
   import { Pagination } from '@/types/global';
   import type { SelectOptionData } from '@arco-design/web-vue/es/select/interface';
@@ -433,8 +438,8 @@
       title: t('dmx.column.Operate'),
       dataIndex: 'action',
       slotName: 'action',
-      width: 150,
-      minWidth: 150,
+      width: 200,
+      minWidth: 200,
     },
   ]);
   const contentTypeOptions = computed<SelectOptionData[]>(() => [
@@ -659,6 +664,16 @@
       })
     }
   }
+  const   onDownloadDocument =  async (record)=>{
+    console.log(record);
+    downloadFile({
+      url: `/api/v1/document/get/${record.id}`,
+      filename: record.name,
+    });
+  }
+const   seeload =  async (row)=>{
+  console.log(row);
+}
 
 const   handleChangeStatus =  async (row)=>{
   console.log(row);
@@ -685,11 +700,6 @@
     doc_ids: [row.id],
     run: run
   })
-  // let data = await kbdocumentchangeparser({
-  //   parser_id: row.parser_id,
-  //   doc_id: row.id,
-  //   parser_config: row.parser_config,
-  // })
   if(data.code == 0){
     Message.success('瑙f瀽鎴愬姛');
     row.run = '3';
diff --git a/yarn.lock b/yarn.lock
index 619cb2e..4700063 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1015,6 +1015,11 @@
     "@volar/language-core" "1.11.1"
     path-browserify "^1.0.1"
 
+"@vue-office/docx@^1.6.2":
+  version "1.6.2"
+  resolved "https://registry.npmmirror.com/@vue-office/docx/-/docx-1.6.2.tgz#c97d28db60db5325dd351d90b0202dd3d54ad427"
+  integrity sha512-OHAoUHeY8nHjhWvwDhlPx+/rmRkxmqLpvPgtfCEOZ4H1c1LCdJ6eDbdV3152ww8dcdZ7fgGQu3fmSSaI7JwdpQ==
+
 "@vue/babel-helper-vue-transform-on@1.2.2":
   version "1.2.2"
   resolved "https://registry.npmmirror.com/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.2.tgz#7f1f817a4f00ad531651a8d1d22e22d9e42807ef"

--
Gitblit v1.8.0