|
|
|
@ -13,8 +13,10 @@ import { usePermissionStore } from '@/store/modules/permission'
|
|
|
|
|
import { useI18n } from '@/hooks/web/useI18n' |
|
|
|
|
import { useMessage } from '@/hooks/web/useMessage' |
|
|
|
|
import { getAuthCache, setAuthCache, setTenantId } from '@/utils/auth' |
|
|
|
|
import { doLogout, getUserInfo, loginApi } from '@/api/base/user' |
|
|
|
|
import type { LoginParams, UserInfo } from '@/api/base/user/types' |
|
|
|
|
import type { __MenuItem } from '@/api/base/user' |
|
|
|
|
import { doLogout, getUserButtons, getUserRouters, loginApi } from '@/api/base/user' |
|
|
|
|
import type { LoginParams, User, UserInfo } from '@/api/base/user/types' |
|
|
|
|
import type { MenuItem } from '@/api/system/menu/types' |
|
|
|
|
|
|
|
|
|
interface UserState { |
|
|
|
|
userInfo: Nullable<UserInfo> |
|
|
|
@ -98,22 +100,22 @@ export const useUserStore = defineStore('app-user', {
|
|
|
|
|
try { |
|
|
|
|
const { goHome = true, mode, ...loginParams } = params |
|
|
|
|
const data = await loginApi(loginParams, mode) |
|
|
|
|
const { accessToken, refreshToken } = data |
|
|
|
|
const { access_token, refresh_token, ...user } = data |
|
|
|
|
|
|
|
|
|
// save token
|
|
|
|
|
this.setAccessToken(accessToken) |
|
|
|
|
this.setRefreshToken(refreshToken) |
|
|
|
|
return this.afterLoginAction(goHome) |
|
|
|
|
this.setAccessToken(access_token) |
|
|
|
|
this.setRefreshToken(refresh_token) |
|
|
|
|
return this.afterLoginAction(goHome, user) |
|
|
|
|
} |
|
|
|
|
catch (error) { |
|
|
|
|
return Promise.reject(error) |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
async afterLoginAction(goHome?: boolean): Promise<UserInfo | null> { |
|
|
|
|
async afterLoginAction(goHome?: boolean, user?: User): Promise<UserInfo | null> { |
|
|
|
|
if (!this.getAccessToken) |
|
|
|
|
return null |
|
|
|
|
// get user info
|
|
|
|
|
const userInfo = await this.getUserInfoAction() |
|
|
|
|
const userInfo = await this.getUserInfoAction(user!) |
|
|
|
|
|
|
|
|
|
const sessionTimeout = this.sessionTimeout |
|
|
|
|
if (sessionTimeout) { |
|
|
|
@ -136,12 +138,45 @@ export const useUserStore = defineStore('app-user', {
|
|
|
|
|
} |
|
|
|
|
return userInfo |
|
|
|
|
}, |
|
|
|
|
async getUserInfoAction(): Promise<UserInfo | null> { |
|
|
|
|
async getUserInfoAction(user: User): Promise<UserInfo | null> { |
|
|
|
|
if (!this.getAccessToken) |
|
|
|
|
return null |
|
|
|
|
|
|
|
|
|
const userInfo = await getUserInfo() |
|
|
|
|
setTenantId(userInfo.user.tenantId) |
|
|
|
|
function normalizeMenus(__menus: __MenuItem[]): MenuItem[] { |
|
|
|
|
const menus: MenuItem[] = [] |
|
|
|
|
for (let i = 0; i < __menus.length; i++) { |
|
|
|
|
const __menu = __menus[i] |
|
|
|
|
menus.push({ |
|
|
|
|
id: __menu.id, |
|
|
|
|
parentId: __menu.parentId, |
|
|
|
|
name: __menu.name, |
|
|
|
|
component: `${__menu.path}.vue`, |
|
|
|
|
// componentName?: string
|
|
|
|
|
path: __menu.path, |
|
|
|
|
icon: __menu.source, |
|
|
|
|
sort: __menu.sort, |
|
|
|
|
children: __menu.children ? normalizeMenus(__menu.children) : [], |
|
|
|
|
code: __menu.code, |
|
|
|
|
type: 1, |
|
|
|
|
visible: 1, |
|
|
|
|
keepAlive: 0, |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
return menus |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
let userInfo: UserInfo | null = null |
|
|
|
|
try { |
|
|
|
|
const [menus, buttons] = await Promise.all([ |
|
|
|
|
getUserRouters(), |
|
|
|
|
getUserButtons(), |
|
|
|
|
]) |
|
|
|
|
userInfo = { menus: normalizeMenus(menus), buttons, user } |
|
|
|
|
} |
|
|
|
|
catch { |
|
|
|
|
return null |
|
|
|
|
} |
|
|
|
|
setTenantId(userInfo.user.tenant_id) |
|
|
|
|
usePermissionStore().changePermissionCode(userInfo.buttons) |
|
|
|
|
this.setUserInfo(userInfo) |
|
|
|
|
return userInfo |
|
|
|
|