diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts index 2593d1a..613cf0d 100644 --- a/src/store/modules/user.ts +++ b/src/store/modules/user.ts @@ -36,6 +36,10 @@ export const useUserStore = defineStore('user', () => { if (res) { const data = res.data; const user = data.user; + // 对用户进行校验,防止为空时卡死在登录页 + if (user === null) { + return Promise.reject('用户不存在,请联系相关人员'); + } const profile = user.avatar == '' || user.avatar == null ? defAva : user.avatar; if (data.roles && data.roles.length > 0) { diff --git a/src/views/login.vue b/src/views/login.vue index 85e3857..1045841 100644 --- a/src/views/login.vue +++ b/src/views/login.vue @@ -65,6 +65,8 @@ import { useUserStore } from '@/store/modules/user'; import { LoginData, TenantVO } from '@/api/types'; import { to } from 'await-to-js'; import { HttpStatus } from "@/enums/RespEnum"; +import usePermissionStore from "@/store/modules/permission"; +import { isHttp } from "@/utils/validate"; const userStore = useUserStore(); const router = useRouter(); @@ -123,9 +125,27 @@ const handleLogin = () => { } // 调用action的登录方法 const [err] = await to(userStore.login(loginForm.value)); - if (!err) { + + // 获取用户信息 + const [getUserInfoError] = await to(useUserStore().getInfo()); + + if (!err && !getUserInfoError) { + // 组装路由信息 + const accessRoutes = await usePermissionStore().generateRoutes(); + // 根据roles权限生成可访问的路由表 + accessRoutes.forEach((route) => { + if (!isHttp(route.path)) { + router.addRoute(route); // 动态添加可访问路由表 + } + }); await router.push({ path: redirect.value || '/' }); } else { + if(err){ + ElMessage.error(err); + } + if(getUserInfoError){ + ElMessage.error(getUserInfoError); + } loading.value = false; // 重新获取验证码 if (captchaEnabled.value) {