Browse Source

Merge branch 'master' of http://173.18.12.196:3000/front/self-constructing_graph

cynthia-qin 1 day ago
parent
commit
aacdb46db0

+ 1 - 1
.env.production

@@ -1,2 +1,2 @@
 NODE_ENV = production
-VITE_API_URL = http://kgb-server:8000
+VITE_API_URL = http://kgb-server:8005

+ 0 - 0
js-modules.d.ts


+ 10 - 2
src/router/index.ts

@@ -1,4 +1,4 @@
-import { createRouter, createWebHistory } from "vue-router";
+import { createRouter, createWebHistory, isNavigationFailure } from "vue-router";
 import AppCopy from "@/views/AppCopy.vue";
 import HomeView from "@/views/HomeView.vue";
 import Layout from "@/views/KMPlatform/Layout.vue";
@@ -14,7 +14,7 @@ import AccountManage from "@/views/KMPlatform/Permission/AccountManage.vue";
 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 { getSessionVar, deleteSessionVar } from "@/utils/session";
 
 const router = createRouter({
   history: createWebHistory(import.meta.env.BASE_URL),
@@ -199,4 +199,12 @@ router.beforeEach((to, from, next) => {
   }
 });
 
+router.afterEach((to, from, failure) => {
+  if (isNavigationFailure(failure)) {
+    console.log('failed navigation', failure)
+  } else {
+    to.meta.title ? (document.title = to.meta.title as string) : document.title = '知识图谱自动化构建平台'
+  }
+})
+
 export default router;

+ 37 - 1
src/utils/confirmation.jsx

@@ -1,5 +1,5 @@
 import { ElMessage, ElMessageBox } from 'element-plus'
-
+import { ref, reactive } from 'vue'
 const defaultFunc = () => { }
 
 export function confirmDelete(msg, ok = defaultFunc, no = defaultFunc) {
@@ -41,3 +41,39 @@ export function confirmDelete(msg, ok = defaultFunc, no = defaultFunc) {
 }
 
 
+export function confirmInput(msg, ok = defaultFunc, no = defaultFunc) {
+  let inputQuery = ref("")
+  let switchQuery = true
+
+  const handleInput = (e) => {
+    console.log('handleInput', this)
+  }
+
+  ElMessageBox({
+    title: '',
+    message: (<div>
+      <div className=""><span>实体类型名称:</span> <input onInput={handleInput} vModel={inputQuery.value} placeholder="请输入" /></div>
+      <div className=""><span>是否启用:</span><el-switch vModel={switchQuery} /></div>
+    </div>),
+    showCancelButton: true,
+    confirmButtonText: '确认',
+    cancelButtonText: '取消',
+    showClose: false,
+    customClass: "confirm-input",
+    beforeClose: (action, instance, done) => {
+      if (action === 'confirm') {
+        done()
+      } else {
+        done()
+      }
+    },
+  }).then((action, instance, done) => {
+    if (action === 'confirm') {
+      ok(inputQuery.value)
+    } else {
+
+    }
+  }).catch(() => {
+    no()
+  })
+}

+ 1 - 0
src/utils/js-modules.d.ts

@@ -0,0 +1 @@
+declare module 'jquery'

+ 34 - 93
src/views/AppCopy.vue

@@ -4,38 +4,19 @@
     <div class="login-container">
       <div class="login-header">
         <!-- <h1>知识图谱自动化构建平台</h1><br> -->
-        <h1>欢迎{{ isSignedIn ? "注册" : "登录" }}知识图谱自动化构建平台</h1>
+        <h1>欢迎{{ isSignedIn ? '注册' : '登录' }}知识图谱自动化构建平台</h1>
       </div>
 
       <div v-if="isSignedIn == false">
         <el-form v-model="loginForm">
-          <el-form-item
-            label="用户名"
-            :label-width="loginForm.formLabelWidth"
-            size="large"
-          >
-            <el-input
-              v-model="loginForm.username"
-              name="username"
-              placeholder="请输入用户名"
-            ></el-input>
+          <el-form-item label="用户名" :label-width="loginForm.formLabelWidth" size="large">
+            <el-input v-model="loginForm.username" name="username" placeholder="请输入用户名"></el-input>
           </el-form-item>
-          <el-form-item
-            label="密码"
-            :label-width="loginForm.formLabelWidth"
-            size="large"
-          >
-            <el-input
-              v-model="loginForm.password"
-              name="password"
-              type="password"
-              placeholder="请输入密码"
-            ></el-input>
+          <el-form-item label="密码" :label-width="loginForm.formLabelWidth" size="large">
+            <el-input v-model="loginForm.password" name="password" type="password" placeholder="请输入密码"></el-input>
           </el-form-item>
           <el-form-item label="" :label-width="loginForm.formLabelWidth">
-            <el-button type="primary" @click="handleLoginSubmit"
-              >登录</el-button
-            >
+            <el-button type="primary" @click="handleLoginSubmit">登录</el-button>
             <el-button type="success" @click="handleSignIn">注册</el-button>
           </el-form-item>
         </el-form>
@@ -46,77 +27,29 @@
       </div> -->
 
         <el-form :model="loginForm" :rules="signinRules" ref="signinForm">
-          <el-form-item
-            label="用户名"
-            :label-width="loginForm.formLabelWidth"
-            prop="username"
-            size="large"
-          >
-            <el-input
-              v-model="loginForm.username"
-              name="username"
-              placeholder="请输入用户名"
-            ></el-input>
+          <el-form-item label="用户名" :label-width="loginForm.formLabelWidth" prop="username" size="large">
+            <el-input v-model="loginForm.username" name="username" placeholder="请输入用户名"></el-input>
           </el-form-item>
-          <el-form-item
-            label="显示姓名"
-            :label-width="loginForm.formLabelWidth"
-            prop="full_name"
-            size="large"
-          >
-            <el-input
-              v-model="loginForm.full_name"
-              name="full_name"
-              placeholder="请输入姓名"
-            ></el-input>
+          <el-form-item label="显示姓名" :label-width="loginForm.formLabelWidth" prop="full_name" size="large">
+            <el-input v-model="loginForm.full_name" name="full_name" placeholder="请输入姓名"></el-input>
           </el-form-item>
-          <el-form-item
-            label="密码"
-            :label-width="loginForm.formLabelWidth"
-            prop="password"
-            size="large"
-          >
-            <el-input
-              v-model="loginForm.password"
-              name="password"
-              type="password"
-              placeholder="请输入密码"
-            ></el-input>
+          <el-form-item label="密码" :label-width="loginForm.formLabelWidth" prop="password" size="large">
+            <el-input v-model="loginForm.password" name="password" type="password" placeholder="请输入密码"></el-input>
           </el-form-item>
-          <el-form-item
-            lable="密码确认"
-            :label-width="loginForm.formLabelWidth"
-            prop="password2"
-            size="large"
-          >
-            <el-input
-              v-model="loginForm.password2"
-              name="password2"
-              type="password"
-              placeholder="请再次输入密码"
-            ></el-input>
+          <el-form-item lable="密码确认" :label-width="loginForm.formLabelWidth" prop="password2" size="large">
+            <el-input v-model="loginForm.password2" name="password2" type="password" placeholder="请再次输入密码"></el-input>
           </el-form-item>
-          <el-form-item
-            label="邮箱"
-            :label-width="loginForm.formLabelWidth"
-            prop="email"
-            size="large"
-          >
-            <el-input
-              v-model="loginForm.email"
-              name="email"
-              placeholder="请输入邮箱"
-            ></el-input>
+          <el-form-item label="邮箱" :label-width="loginForm.formLabelWidth" prop="email" size="large">
+            <el-input v-model="loginForm.email" name="email" placeholder="请输入邮箱"></el-input>
           </el-form-item>
           <el-form-item label="" :label-width="loginForm.formLabelWidth">
-            <el-button type="primary" @click="handleSignInSubmit"
-              >注册</el-button
-            >
+            <el-button type="primary" @click="handleSignInSubmit">注册</el-button>
             <el-button type="success" @click="handleSignIn">登录</el-button>
           </el-form-item>
         </el-form>
       </div>
     </div>
+
   </el-container>
   <el-container class="main-container" v-if="isLoggedIn">
     <el-header class="site_header">
@@ -168,7 +101,7 @@
   </el-container>
 </template>
 <script setup lang="ts">
-import { onMounted, ref, watch, watchEffect } from "vue";
+import { onMounted, ref,  watch, watchEffect } from "vue";
 import { useRouter, useRoute } from "vue-router";
 import { RouterView } from "vue-router";
 import SideMenu from "@/components/SideMenu.vue";
@@ -178,7 +111,7 @@ import {
   getSessionVar,
   saveSessionVar,
 } from "@/utils/session";
-import { ElNotification, ElMessageBox } from "element-plus";
+import { ElNotification, ElMessageBox, ElMessage } from "element-plus";
 import { useMenuStore } from "@/stores/menu.js";
 const { updateRouteList } = useMenuStore();
 const router = useRouter();
@@ -209,7 +142,7 @@ const validatePassword = (rule: any, value: any, callback: Function) => {
     callback();
   }
 };
-const validatePassword2 = (rule, value, callback) => {
+const validatePassword2 = (rule: Object, value: string, callback: Function) => {
   if (value === "") {
     callback(new Error("请再次输入密码"));
   } else if (value !== loginForm.value.password) {
@@ -353,9 +286,15 @@ const handleLoginSubmit = () => {
     };
 
     isLoggedIn.value = true;
-    goToKMPlatform();
-  });
-};
+    goToKMPlatform()
+  }).catch((err: any) => {
+    ElMessage({
+      message: err.message,
+      type: 'error'
+    })
+    console.log(err)
+  })
+}
 
 function handleLogout() {
   deleteSessionVar("session_id");
@@ -388,9 +327,9 @@ watchEffect(() => {
   // 监听路由变化
   console.log("route changed", route);
   if (route.query.logout) {
-    handleLogout();
+    handleLogout()
   }
-});
+})
 </script>
 <style scoped>
 #app {
@@ -404,6 +343,7 @@ watchEffect(() => {
   height: 100vh;
   overflow: hidden;
 }
+
 .login-box {
   width: 100vw;
   height: 100vh;
@@ -425,6 +365,7 @@ watchEffect(() => {
   background-color: #eef6ff;
   border-radius: 12px 12px 12px 12px;
 }
+
 .login-header {
   font-size: 26px;
   font-weight: bold;

+ 114 - 3
src/views/KMPlatform/KGBuilder/ETM/EntityTypeManagement.vue

@@ -1,7 +1,118 @@
 <template>
-  Entity type management
+  <div class="entity-type-management">
+    <header>
+      <span class="search">
+        <el-input v-model="querySearch" size="large" placeholder="搜索" :prefix-icon="Search" />
+      </span>
+      <span class="newly-added" @click="handleNewlyAdd">
+        新增
+      </span>
+    </header>
+    <main>
+      <div class="table-area">
+        <el-table :data="[]" ref="elTableRef" class="elTable" style="width: 100%;min-width: 0px; max-width: 100%;"
+          size="large">
+          <el-table-column type="selection" width="30" />
+          <el-table-column label="#" prop="index" width="60" />
+          <el-table-column prop="name" min-width="150" label="实体类型名称">
+          </el-table-column>
+          <el-table-column prop="operator" label="操作人" />
+          <el-table-column prop="date" label="操作时间" />
+          <el-table-column fixed="right" label="操作" width="120">
+            <template #default="{ row }">
+              <div class="operation">
+                <el-switch v-model="switchValue" />
+                <el-button link type="primary">启用</el-button>
+                <el-button link type="primary">修改</el-button>
+                <el-button link type="primary">删除</el-button>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+    </main>
+    <footer></footer>
+  </div>
 </template>
 
-<script setup></script>
+<script setup lang="ts">
+import { ref, onMounted, onUnmounted } from 'vue'
+import $ from 'jquery'
+import { Search } from '@element-plus/icons-vue'
+import { confirmInput } from "@/utils/confirmation"
+let querySearch = ref<string>("")
+let switchValue = ref<boolean>(true)
+const elTableRef = ref<any>(null)
 
-<style lang="less" scoped></style>
+function handleNewlyAdd() {
+}
+
+// onMounted(() => {
+//   $(window).resize(() => {
+//     elTableRef.value.doLayout()
+//   })
+// })
+</script>
+
+<style lang="less" scoped>
+.search {
+  padding: 10px 20px;
+  // margin: 5px;
+  background: white;
+
+  /deep/ .el-input__wrapper {
+    background-color: #EFF1F5;
+    border-radius: 10px;
+  }
+
+  .el-input {
+    width: 300px;
+  }
+}
+
+.newly-added {
+  float: right;
+  background-color: #169BD5;
+  color: white;
+  padding: 15px 50px;
+  border-radius: 5px;
+  cursor: pointer;
+}
+
+.entity-type-management {
+  width: 100%;
+  box-sizing: border-box;
+  padding-left: 20px;
+
+  header {
+    clear: both;
+  }
+
+  main {
+    width: 100%;
+
+    .table-area {
+      width: 1000px;
+    }
+  }
+
+  footer {}
+
+
+  .elTable /deep/ .el-table__header-wrapper table,
+  .elTable /deep/ .el-table__body-wrapper table {
+    width: 100% !important;
+  }
+
+  .elTable /deep/ .el-table__body,
+  .elTable /deep/ .el-table__footer,
+  .elTable /deep/ .el-table__header {
+    table-layout: auto;
+  }
+
+  .elTable /deep/ .el-table__empty-block,
+  .elTable /deep/ .el-table__body {
+    width: 100% !important;
+  }
+}
+</style>

+ 3 - 2
src/views/KMPlatform/KGBuilder/KGBuilder.vue

@@ -68,8 +68,8 @@ function handleMenuClick(data) {
 
         &:is(.active) {
           // color: #0A61F7;
-          color:#40a1ff;
-           background: #eef6ff;
+          color: #40a1ff;
+          background: #eef6ff;
         }
 
         &:hover {
@@ -82,6 +82,7 @@ function handleMenuClick(data) {
 
   .content {
     flex: 1 1 auto;
+    min-width: 0px;
   }
 }
 </style>

+ 3 - 1
tsconfig.app.json

@@ -3,7 +3,9 @@
   "include": [
     "env.d.ts",
     "src/**/*",
-    "src/**/*.vue"
+    "src/**/*.vue",
+    "js-modules.d.ts",
+    "js-modules.d.ts"
   ],
   "exclude": [
     "src/**/__tests__/*"

+ 3 - 3
vite.config.ts

@@ -8,7 +8,7 @@ import vueJsx from "@vitejs/plugin-vue-jsx";
 
 export default defineConfig(({ command, mode }) => {
   const env = loadEnv(mode, process.cwd(), '');
-  console.log('env', env)
+  // console.log('env', env)
   return {
     define: {
       'process.env': env
@@ -18,10 +18,10 @@ export default defineConfig(({ command, mode }) => {
         '/api': {
           target: env.VITE_API_URL, //'http://172.18.0.3:8000/api',
           changeOrigin: true,
-          rewrite: path => path.replace(/^\/api/, '')
+          rewrite: path => path.replace(/^\/api/, '/open-platform')
         },
         '/open-platform': {
-          target: 'http://173.18.12.205:8005', // 后端服务器地址
+          target: 'http://173.18.12.205:8005/', // 后端服务器地址
           changeOrigin: true, // 启用跨域
           // rewrite: (path) => path.replace(/^\/open-platform/, '') // 路径重写
         }