فهرست منبع

添加全部导入功能

yangdr 4 هفته پیش
والد
کامیت
4608943ea0

+ 8 - 4
src/components/LayoutHeader.vue

@@ -38,12 +38,13 @@ import { useRoute, useRouter } from "vue-router";
 import { getSessionVar, clearSessionVar, saveSessionVar } from '@/utils/session'
 import EditPasswordDialog from "@/components/EditPasswordDialog.vue"
 import { knowledgeGraphAddr } from "@/utils/config"
+import { isNotLogin } from "@/utils/app"
 
 const { proxy } = getCurrentInstance()
 const route = useRoute()
 const router = useRouter()
 let timer
-
+let editPassShow = ref(false)
 const menuRef = ref()
 const { routeList, updateRouteList } = useMenuStore()
 // console.log(operationPermissions)
@@ -81,7 +82,7 @@ const fetchOrgList = async () => {
 const changeOrg = async (orgId) => {
   // 可调用后端切换机构接口
   const res = await proxy.$http.post(`/open-platform/sys/changeSURO/${orgId}`)
-  console.log('切换机构结果:', res)
+  // console.log('切换机构结果:', res)
   saveSessionVar('org_id', orgId)
   saveSessionVar("knowledageSystem", '');
   saveSessionVar('routeList', '')
@@ -123,8 +124,11 @@ const changeOrg = async (orgId) => {
   // 刷新页面
   window.location.href = '/kmplatform/home';
 }
+// function isNotLogin() {
+//   return getSessionVar("session_id") == null &&
+//     getSessionVar("username") == null
+// }
 
-let editPassShow = ref(false)
 const currentPath = computed(() => {
   // console.log('当前路由:', route)
   let temp = ""
@@ -168,7 +172,7 @@ function handleLogin(event) {
 }
 onMounted(() => {
   window.addEventListener('message', handleLogin);
-  fetchOrgList()
+  (!isNotLogin()) && fetchOrgList()
   if (route.name === 'kmplatform') {
     router.push({ path: routeList[0].path })
   }

+ 53 - 15
src/dialogs/OCRDialog.vue

@@ -37,7 +37,8 @@
             <span class="number">文件数量</span>
           </div>
           <div :class="knowledgeBase.activeId === item.id ? 'knowledge-base-item active' : 'knowledge-base-item'"
-            v-for="item in knowledgeBase.data" :key="item.id" @click="handleKnowledgeBaseClick(toRaw(item))">
+            v-for="(item, index) in knowledgeBase.data" :key="item.id"
+            @click="handleKnowledgeBaseClick(toRaw(item), index)">
             <span class="name">
               <span class="icon">
                 <span class="document-icon"></span>
@@ -81,12 +82,20 @@
                         <i :class="`${row.file_type}-icon`"></i>
                       </span>
                       <span class="text-area">
-                        {{ row.file_name }}
+                        <el-text style="vertical-align: bottom;width: 100%;" line-clamp="1">
+                          {{ row.file_name }}
+                        </el-text>
                       </span>
                     </div>
                   </template>
                 </el-table-column>
-                <el-table-column prop="knowledge_type" label="知识类型" />
+                <el-table-column prop="knowledge_type" label="知识类型">
+                  <template #default="{ row }">
+                    <el-text line-clamp="1" style="vertical-align: bottom;">
+                      {{ row.knowledge_type }}
+                    </el-text>
+                  </template>
+                </el-table-column>
                 <el-table-column prop="version" label="版本" />
                 <el-table-column prop="author" label="作者(主编)" />
                 <el-table-column prop="year" label="年份" />
@@ -179,6 +188,7 @@ type kbData = {
 type knowledgeBaseType = {
   visible: boolean,
   activeId: number | string,
+  activeIndex: number,
   querySearch: string,
   data: kbData[],
   filesList: any[]
@@ -187,13 +197,16 @@ type knowledgeBaseType = {
 let knowledgeBase = ref<knowledgeBaseType>({
   visible: false,
   activeId: 0,
+  activeIndex: -1,
   querySearch: "",
   data: [],
   filesList: [],
   selectedNum: 0,
+
 })
-function handleKnowledgeBaseClick(data: kbData) {
+function handleKnowledgeBaseClick(data: kbData, index: number) {
   knowledgeBase.value.activeId = data.id
+  knowledgeBase.value.activeIndex = index
   paginationData.value.currentPage = 1
 }
 function handleGetKBfileList() {
@@ -208,8 +221,8 @@ function handleGetKBfileList() {
       knowledgeBase.value.filesList = data.list
       for (let i = 0; i < knowledgeBase.value.filesList.length; i++) {
         knowledgeBase.value.filesList[i].index = (paginationData.value.currentPage - 1) * paginationData.value.currentPageSize + i + 1
-        knowledgeBase.value.filesList[i].isValid = true
-        checkLinkValidity(i, knowledgeBase.value.filesList[i].minio_url)
+        // knowledgeBase.value.filesList[i].isValid = true
+        // checkLinkValidity(i, knowledgeBase.value.filesList[i].minio_url)
       }
       paginationData.value.total = data.total
     }
@@ -278,7 +291,22 @@ function handleGetKnowledgeBase() {
   })
 }
 
-function handleAllImport() {
+async function handleAllImport() {
+  try {
+    const res = await getKnowledgeBaseFilesList({
+      file_name: "",
+      pageSize: knowledgeBase.value.data[knowledgeBase.value.activeIndex].file_count,
+      pageNo: 1,
+      kbId: knowledgeBase.value.activeId
+    })
+    const { data, code } = res
+    if (code === 200) {
+      handleImportFiles(data.list)
+    }
+
+  } catch (e) {
+    console.log(e)
+  }
 
 }
 
@@ -347,7 +375,7 @@ async function calculateFileHashForNative(file: File) {
 }
 
 // 使用crypto-js计算文件的hash值 ,该方法易发生卡顿
-async function calculateFileHashForCryptoJS(file: File) {
+async function calculateFileHashForCryptoJS(file: File): Promise<string> {
   return new Promise((resolve, reject) => {
     try {
       const reader = new FileReader();
@@ -357,13 +385,12 @@ async function calculateFileHashForCryptoJS(file: File) {
         // 将 ArrayBuffer 转换为 CryptoJS 可以处理的 WordArray
         const wordArray = CryptoJS.lib.WordArray.create(arrayBuffer);
         // 计算文件的 SHA-256 哈希值并转为 Base64 编码字符串
-        const hashBase64 = CryptoJS.SHA256(wordArray).toString(CryptoJS.enc.Base64);
+        // const hashBase64 = CryptoJS.SHA256(wordArray).toString(CryptoJS.enc.Base64);
         // 计算文件的 SHA-256 哈希值并转为 16 进制字符串
         const hashHex = CryptoJS.SHA256(wordArray).toString(CryptoJS.enc.hex);
         // console.log('calculateFileHashForCryptoJS:', hashHex);
         resolve(hashHex)
       };
-
       reader.onerror = () => {
         reject('')
       }
@@ -439,8 +466,11 @@ const handleExceed: UploadProps['onExceed'] = (files) => {
   upload.value!.handleStart(file)
 }
 
-const handleRemove = (file: any, fileList: any) => {
-  console.log(file, fileList)
+const handleRemove = async (file: any, fileList: any) => {
+  const hashHex: string = await calculateFileHashForCryptoJS(file.raw)
+  const hashHexIndex = importedFileHashes.value.indexOf(hashHex)
+  importedFileHashes.value.splice(hashHexIndex, 1)
+  // console.log(file, fileList)
 }
 
 async function calculateFileHash(file: File) {
@@ -802,9 +832,17 @@ footer {
     }
 
     .list-name {
-      white-space: nowrap;
-      text-overflow: ellipsis;
-      display: inline;
+      display: flex;
+      flex-wrap: nowrap;
+      align-items: center;
+
+      .icon-area {
+        flex: 0 0 auto;
+      }
+
+      .text-area {
+        flex: 1 1 auto;
+      }
     }
 
     .circle {

+ 27 - 9
src/router/index.ts

@@ -16,13 +16,24 @@ import PermissionManage from "@/views/KMPlatform/Permission/permission.vue";
 import RoleManage from "@/views/KMPlatform/Permission/RoleManage.vue";
 import EntityRelationshipTypeManagement from '@/views/KMPlatform/KGBuilder/KRTM/EntityRelationshipTypeManagement.vue'
 import { getSessionVar, deleteSessionVar } from "@/utils/session";
+import page404 from "@/views/404/404.vue"
+import { isNotLogin } from "@/utils/app"
 
 const router = createRouter({
   history: createWebHistory(import.meta.env.BASE_URL),
   routes: [
     {
       path: "/",
-      redirect: "/kmplatform/home",
+      redirect: "/kmplatform",
+      name: "top",
+      meta: {
+        auth: false,
+      }
+    },
+    {
+      path: "/404",
+      name: 'page404',
+      component: page404,
       meta: {
         auth: false,
       }
@@ -219,26 +230,33 @@ const router = createRouter({
   ],
 });
 
-function isLogin() {
-  return getSessionVar("session_id") == null &&
-    getSessionVar("username") == null
+
+function hasRoute(name: string) {
+  const routes = router.getRoutes()
+  // console.log("routes", routes)
+  return routes.some((it) => it.name === name)
 }
 
 router.beforeEach((to, from, next) => {
-  if (isLogin()) {
-    // console.log("a,", to.meta && to.name !== 'login')
-    if (to.meta.auth && to.name !== 'login') {
-      next({ name: 'login' });
+  if (hasRoute(to.name as string)) {
+    if (isNotLogin()) {
+      // console.log("a,", to.meta && to.name !== 'login')
+      if (to.meta.auth && to.name !== 'login') {
+        next({ name: 'login' });
+      } else {
+        next()
+      }
     } else {
       next()
     }
   } else {
-    next()
+    next('/404')
   }
 });
 
 router.afterEach((to, from, failure) => {
   if (isNavigationFailure(failure)) {
+    if (to.fullPath === from.fullPath) return;
     console.log('failed navigation', failure)
   } else {
     to.meta.title ? (document.title = to.meta.title as string) : document.title = '知识图谱自动化构建平台'

+ 9 - 6
src/stores/menu.js

@@ -7,12 +7,15 @@ import {
 } from "@/utils/session";
 
 export const useMenuStore = defineStore('menu', () => {
-  let routeList = ref(getSessionVar("routeList") ? JSON.parse(getSessionVar("routeList")) : [{
-    path: '/kmplatform/openplatform',
-    name: 'openplatform',
-    title: "开放平台",
-    children: []
-  }])
+  function initRouteList() {
+    return getSessionVar("routeList") ? JSON.parse(getSessionVar("routeList")) : [{
+      path: '/kmplatform/openplatform',
+      name: 'openplatform',
+      title: "开放平台",
+      children: []
+    }]
+  }
+  let routeList = ref(initRouteList())
 
   // const routeList = ref([{
   //   path: '/kmplatform/home',

+ 58 - 55
src/utils/app.ts

@@ -1,66 +1,69 @@
-
+import { getSessionVar } from '@/utils/session'
 /**
  * 重置一个参数对象
  * @param args
  * @param def
  */
-export function resetArgs<T>(args:T, def:Partial<T> = {}):T {
+export function resetArgs<T>(args: T, def: Partial<T> = {}): T {
+
+  let val: { [k: string]: any } = {}
 
-    let val: { [k:string]:any }  = {}
-  
-    for (let key in args) {
-      if (def.hasOwnProperty(key)) {
-        val[key]  = def[key]
-      } else {
-        if (Array.isArray(args[key])) val[key] = [];
-        if ('string' == typeof args[key]) val[key] = '';
-        if ('number' == typeof args[key]) val[key] = null;
-        if ('boolean' == typeof args[key]) val[key] = false;
-      }
+  for (let key in args) {
+    if (def.hasOwnProperty(key)) {
+      val[key] = def[key]
+    } else {
+      if (Array.isArray(args[key])) val[key] = [];
+      if ('string' == typeof args[key]) val[key] = '';
+      if ('number' == typeof args[key]) val[key] = null;
+      if ('boolean' == typeof args[key]) val[key] = false;
     }
-    return val as T
   }
-  
-  /**
-   * 下载或者保存一个Blob
-   * @param blob
-   * @param fileName
-   * @param isOpen
-   * 接口返回数据流时,如果是pdf可以设置isOpen直接新窗口打开
-   * export function exportReport(params: { fileCode:string }) {
-   *   return request({
-   *     responseType:"blob",
-   *     closeResponseInterceptors:true,
-   *     url: '/customer-service/open/api/report/getReport',
-   *     method: 'get',
-   *     params
-   *   })
-   * }
-   */
-  export function saveBlob(blob:Blob,fileName:string,isOpen = false):void{
-  
-    let url = window.URL.createObjectURL(blob);
-    if(isOpen){
-      window.open(url)
-    }else {
-      let a = document.createElement("a");
-      document.body.appendChild(a);
-      a.setAttribute("display","none")
-      a.href = url;
-      a.download = fileName;
-      a.click();
-      a.remove();
-      window.URL.revokeObjectURL(url);
-    }
+  return val as T
+}
+
+/**
+ * 下载或者保存一个Blob
+ * @param blob
+ * @param fileName
+ * @param isOpen
+ * 接口返回数据流时,如果是pdf可以设置isOpen直接新窗口打开
+ * export function exportReport(params: { fileCode:string }) {
+ *   return request({
+ *     responseType:"blob",
+ *     closeResponseInterceptors:true,
+ *     url: '/customer-service/open/api/report/getReport',
+ *     method: 'get',
+ *     params
+ *   })
+ * }
+ */
+export function saveBlob(blob: Blob, fileName: string, isOpen = false): void {
+
+  let url = window.URL.createObjectURL(blob);
+  if (isOpen) {
+    window.open(url)
+  } else {
+    let a = document.createElement("a");
+    document.body.appendChild(a);
+    a.setAttribute("display", "none")
+    a.href = url;
+    a.download = fileName;
+    a.click();
+    a.remove();
+    window.URL.revokeObjectURL(url);
   }
-  
-  
-  export function toFormData (data:any): FormData{
-    const formData = new FormData()
-    for (const key in data) {
-      formData.append(key, data[key])
-    }
-    return formData
+}
+
+export function isNotLogin(): boolean {
+  return getSessionVar("session_id") == null &&
+    getSessionVar("username") == null
+}
+export function toFormData(data: any): FormData {
+  const formData = new FormData()
+  for (const key in data) {
+    formData.append(key, data[key])
   }
+  return formData
+}
 
-  export default {resetArgs,saveBlob,toFormData}
+export default { resetArgs, saveBlob, toFormData, isNotLogin }

+ 15 - 0
src/views/404/404.vue

@@ -0,0 +1,15 @@
+<template>
+  <el-empty :image-size="200">
+    <el-button type="primary"><router-link to="/kmplatform">返回主页</router-link></el-button>
+  </el-empty>
+</template>
+
+<script setup>
+
+</script>
+
+<style lang="less" scoped>
+a {
+  color: white;
+}
+</style>

+ 2 - 1
src/views/KMPlatform/OpenPlatform/OpenPlatform.vue

@@ -36,7 +36,8 @@ import { ref } from 'vue';
 import { useRouter } from 'vue-router';
 const router = useRouter();
 const handlePath = (id) => {
-  router.push({ name: 'platformText', params: { id: id } });
+
+  router.push({ name: 'platformText', params: { id: id } }).catch(err => console.log(err));
 };
 
 </script>

+ 2 - 1
src/views/KMPlatform/Permission/RoleManage.vue

@@ -17,7 +17,8 @@
       <el-table-column prop="description" label="描述" width="400" align="center" />
       <el-table-column fixed="right" label="操作" align="center">
         <template #default="scope">
-          <el-button link type="primary" @click="handleChange(scope.row)">编辑</el-button>
+          <el-button link type="primary" v-if="operationPermissions['c-1']"
+            @click="handleChange(scope.row)">编辑</el-button>
         </template>
       </el-table-column>
     </el-table>