From 2f73a156942b87c359ec9e605e048a6a7f0e17b3 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 2 Jan 2026 13:10:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=92=89=E9=92=89=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E5=9B=9E=E8=B0=83=E9=A1=B5=E9=9D=A2=EF=BC=9A=E5=A4=84?= =?UTF-8?q?=E7=90=86OAuth=E5=9B=9E=E8=B0=83=EF=BC=8C=E4=BF=9D=E5=AD=98toke?= =?UTF-8?q?n=E5=B9=B6=E8=B7=B3=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/router/index.ts | 17 ++- frontend/src/views/DingTalkCallback.vue | 141 ++++++++++++++++++++++++ 2 files changed, 154 insertions(+), 4 deletions(-) create mode 100644 frontend/src/views/DingTalkCallback.vue diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index a203ffe..2a202fd 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -169,6 +169,15 @@ const routes: RouteRecordRaw[] = [ layout: 'blank' } }, + { + path: '/auth/dingtalk/callback', + name: 'DingTalkCallback', + component: () => import('@/views/DingTalkCallback.vue'), + meta: { + title: '钉钉登录回调', + layout: 'blank' + } + }, { path: '/:pathMatch(.*)*', name: 'NotFound', @@ -194,10 +203,10 @@ router.beforeEach(async (to, from, next) => { const authStore = useAuthStore() const token = localStorage.getItem('token') - // 如果访问登录页 - if (to.path === '/login') { - // 如果已登录,跳转到首页 - if (token && authStore.isLoggedIn) { + // 如果访问登录页或回调页,允许访问 + if (to.path === '/login' || to.path === '/auth/dingtalk/callback') { + // 如果是登录页且已登录,跳转到首页 + if (to.path === '/login' && token && authStore.isLoggedIn) { next('/') return } diff --git a/frontend/src/views/DingTalkCallback.vue b/frontend/src/views/DingTalkCallback.vue new file mode 100644 index 0000000..f51eb2c --- /dev/null +++ b/frontend/src/views/DingTalkCallback.vue @@ -0,0 +1,141 @@ + + + + +