From 124554bae5a2134785b3138a1b080fae657d8539 Mon Sep 17 00:00:00 2001 From: RockYang Date: Fri, 23 Jun 2023 06:31:25 +0800 Subject: [PATCH] =?UTF-8?q?opt:=20=E6=8A=BD=E7=A6=BB=20session=20=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E5=87=BD=E6=95=B0=EF=BC=8C=E4=BF=AE=E6=AD=A3=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E8=B7=AF=E7=94=B1=E8=A6=86=E7=9B=96=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/action/session.js | 21 +++++++++++ web/src/components/admin/AdminHeader.vue | 3 +- web/src/components/admin/AdminTags.vue | 12 +++++- web/src/main.js | 29 ++++++++------- web/src/views/404.vue | 47 ++++++++++++++++++------ web/src/views/ChatPlus.vue | 11 +----- web/src/views/Home.vue | 38 ++++--------------- 7 files changed, 94 insertions(+), 67 deletions(-) create mode 100644 web/src/action/session.js diff --git a/web/src/action/session.js b/web/src/action/session.js new file mode 100644 index 00000000..9f499e4d --- /dev/null +++ b/web/src/action/session.js @@ -0,0 +1,21 @@ +import {httpGet} from "@/utils/http"; + +export function checkSession() { + return new Promise((resolve, reject) => { + httpGet('/api/user/session').then(res => { + resolve(res) + }).catch(err => { + reject(err) + }) + }) +} + +export function checkAdminSession() { + return new Promise((resolve, reject) => { + httpGet('/api/admin/session').then(res => { + resolve(res) + }).catch(err => { + reject(err) + }) + }) +} \ No newline at end of file diff --git a/web/src/components/admin/AdminHeader.vue b/web/src/components/admin/AdminHeader.vue index 819274aa..4e84601e 100644 --- a/web/src/components/admin/AdminHeader.vue +++ b/web/src/components/admin/AdminHeader.vue @@ -82,6 +82,7 @@ import {useRouter} from 'vue-router'; import {ArrowDown, Expand, Fold} from "@element-plus/icons-vue"; import {httpGet} from "@/utils/http"; import {ElMessage} from "element-plus"; +import {checkAdminSession} from "@/action/session"; const message = ref(5); const username = ref('极客学长') @@ -93,7 +94,7 @@ const title = ref('Chat-Plus 控制台') const logo = ref('/images/logo.png') // 获取会话信息 -httpGet("/api/admin/session").then(() => { +checkAdminSession().then(() => { // 加载系统配置 httpGet('/api/admin/config/get?key=system').then(res => { title.value = res.data['admin_title']; diff --git a/web/src/components/admin/AdminTags.vue b/web/src/components/admin/AdminTags.vue index d05a7ed2..38a3ce86 100644 --- a/web/src/components/admin/AdminTags.vue +++ b/web/src/components/admin/AdminTags.vue @@ -36,14 +36,24 @@ import {useTagsStore} from '@/store/tags'; import {onBeforeRouteUpdate, useRoute, useRouter} from 'vue-router'; import {ArrowDown, Close} from "@element-plus/icons-vue"; +import {checkAdminSession} from "@/action/session"; +import {ElMessageBox} from "element-plus"; -const route = useRoute(); const router = useRouter(); +checkAdminSession().catch(() => { + ElMessageBox({ + title: '提示', + message: "当前会话已经失效,请重新登录", + confirmButtonText: 'OK', + callback: () => router.replace('/admin/login') + }); +}) const isActive = (path) => { return path === route.fullPath; }; const tags = useTagsStore(); +const route = useRoute(); // 关闭单个标签 const closeTags = (index) => { const delItem = tags.list[index]; diff --git a/web/src/main.js b/web/src/main.js index 67456354..4b655f53 100644 --- a/web/src/main.js +++ b/web/src/main.js @@ -8,7 +8,6 @@ import NotFound from './views/404.vue' import Home from "@/views/Home.vue"; import Login from "@/views/Login.vue" import Register from "@/views/Register.vue"; -import AdminLogin from "@/views/admin/Login.vue" import {createPinia} from "pinia"; const routes = [ @@ -16,8 +15,6 @@ const routes = [ {name: 'login', path: '/login', component: Login, meta: {title: '用户登录'}}, {name: 'register', path: '/register', component: Register, meta: {title: '用户注册'}}, {name: 'plus', path: '/chat', component: ChatPlus, meta: {title: 'ChatGPT-智能助手V3'}}, - // {name: 'admin', path: '/admin', component: Admin, meta: {title: 'Chat-Plus 控制台'}}, - {name: 'admin/login', path: '/admin/login', component: AdminLogin, meta: {title: 'Chat-Plus 控制台登录'}}, { name: 'admin', path: '/admin', @@ -27,61 +24,67 @@ const routes = [ children: [ { path: '/admin/welcome', - name: 'home', + name: 'admin-home', + meta: {title: 'Chat-Plus 控制台登录'}, + component: () => import('@/views/admin/Login.vue'), + }, + { + path: '/admin/welcome', + name: 'admin-home', meta: {title: '系统首页'}, component: () => import('@/views/admin/Welcome.vue'), }, { path: '/admin/system', - name: 'system', + name: 'admin-system', meta: {title: '系统设置'}, component: () => import('@/views/admin/SysConfig.vue'), }, { path: '/admin/user', - name: 'user', + name: 'admin-user', meta: {title: '用户管理'}, component: () => import('@/views/admin/UserList.vue'), }, { path: '/admin/role', - name: 'role', + name: 'admin-role', meta: {title: '角色管理'}, component: () => import('@/views/admin/RoleList.vue'), }, { path: '/admin/apikey', - name: 'apikey', + name: 'admin-apikey', meta: {title: 'API-KEY 管理'}, component: () => import('@/views/admin/ApiKey.vue'), }, { path: '/admin/loginLog', - name: 'loginLog', + name: 'admin-loginLog', meta: {title: '登录日志'}, component: () => import('@/views/admin/LoginLog.vue'), }, { path: '/admin/demo/form', - name: 'form', + name: 'admin-form', meta: {title: '表单页面'}, component: () => import('@/views/admin/demo/Form.vue'), }, { path: '/admin/demo/table', - name: 'table', + name: 'admin-table', meta: {title: '数据列表'}, component: () => import('@/views/admin/demo/Table.vue'), }, { path: '/admin/demo/import', - name: 'import', + name: 'admin-import', meta: {title: '导入数据'}, component: () => import('@/views/admin/demo/Import.vue'), }, { path: '/admin/demo/editor', - name: 'editor', + name: 'admin-editor', meta: {title: '富文本编辑器'}, component: () => import('@/views/admin/demo/Editor.vue'), }, diff --git a/web/src/views/404.vue b/web/src/views/404.vue index bafbe345..6b9d2043 100644 --- a/web/src/views/404.vue +++ b/web/src/views/404.vue @@ -1,17 +1,40 @@ - + + diff --git a/web/src/views/ChatPlus.vue b/web/src/views/ChatPlus.vue index 2a48ad87..f397a609 100644 --- a/web/src/views/ChatPlus.vue +++ b/web/src/views/ChatPlus.vue @@ -218,6 +218,7 @@ import {useRouter} from "vue-router"; import Clipboard from "clipboard"; import ConfigDialog from "@/components/ConfigDialog.vue"; import PasswordDialog from "@/components/PasswordDialog.vue"; +import {checkSession} from "@/action/session"; const title = ref('ChatGPT-智能助手'); const logo = 'images/logo.png'; @@ -278,16 +279,6 @@ onMounted(() => { }) }); -const checkSession = function () { - return new Promise((resolve, reject) => { - httpGet('/api/user/session').then(res => { - resolve(res) - }).catch(err => { - reject(err) - }) - }) -} - // 加载会话 const loadChats = function () { httpGet("/api/chat/list?user_id=" + user.value.id).then((res) => { diff --git a/web/src/views/Home.vue b/web/src/views/Home.vue index eff8187d..b33a608d 100644 --- a/web/src/views/Home.vue +++ b/web/src/views/Home.vue @@ -1,40 +1,18 @@ - -