diff --git a/src/api/sys/model/userModel.ts b/src/api/sys/model/userModel.ts index 3e3dc97b..a0743581 100644 --- a/src/api/sys/model/userModel.ts +++ b/src/api/sys/model/userModel.ts @@ -1,9 +1,19 @@ /** - * @description: Login interface parameters + * 账密登录参数 */ export interface LoginParams { - username: string + // 账号/手机号/邮箱 + account: string + // 密码 password: string + // 终端 + client: string + // 登录方式 + loginType: string + // 验证码key + captchaKey: string + // 验证码 + captcha: string } export interface RoleInfo { @@ -12,27 +22,15 @@ export interface RoleInfo { } /** - * @description: Login interface return value - */ -export interface LoginResultModel { - userId: string | number - token: string - role: RoleInfo -} - -/** - * @description: Get user information return value + * 登录后用户信息 */ export interface GetUserInfoModel { - roles: RoleInfo[] // 用户id - userId: string | number - // 用户名 + userId: number + // 名称 + name: string + // 账号 username: string - // 真实名字 - realName: string // 头像 avatar: string - // 介绍 - desc?: string } diff --git a/src/api/sys/user.ts b/src/api/sys/user.ts index 50007450..cbd5e573 100644 --- a/src/api/sys/user.ts +++ b/src/api/sys/user.ts @@ -1,46 +1,51 @@ import { defHttp } from '/@/utils/http/axios' -import { LoginParams, LoginResultModel, GetUserInfoModel } from './model/userModel' +import { LoginParams, GetUserInfoModel } from './model/userModel' import { ErrorMessageMode, Result } from '/#/axios' enum Api { - Login = '/login', Logout = '/logout', - GetUserInfo = '/getUserInfo', GetPermCode = '/getPermCode', TestRetry = '/testRetry', } /** - * @description: user login api + * 登录接口 返回token */ -export function loginApi(params: LoginParams, mode: ErrorMessageMode = 'modal') { - return defHttp.post>( - { - url: Api.Login, - params, - }, - { - errorMessageMode: mode, - }, - ) +export function loginApi(params: LoginParams) { + return defHttp.post>({ + url: '/token/login', + params, + }) +} +/** + * 登录后获取用户信息 + */ +export function getUserInfo() { + return defHttp.get>({ url: '/user/getLoginAfterUserInfo' }) } /** - * @description: getUserInfo + * 获取用户菜单和资源权限 */ -export function getUserInfo() { - return defHttp.get>({ url: Api.GetUserInfo }, { errorMessageMode: 'none' }) +export function getPermissions(clientCode: string) { + return defHttp.get>({ url: '/role/menu/getPermissions', params: { clientCode } }) } export function getPermCode() { return defHttp.get({ url: Api.GetPermCode }) } +/** + * 退出 + */ export function doLogout() { - return defHttp.get({ url: Api.Logout }) + return defHttp.post({ url: '/token/logout' }) } +/** + * 测试重试 + */ export function testRetry() { return defHttp.get( { url: Api.TestRetry }, diff --git a/src/layouts/default/header/components/user-dropdown/index.vue b/src/layouts/default/header/components/user-dropdown/index.vue index 47fd9217..671b6321 100644 --- a/src/layouts/default/header/components/user-dropdown/index.vue +++ b/src/layouts/default/header/components/user-dropdown/index.vue @@ -4,17 +4,17 @@ - {{ getUserInfo.realName }} + {{ getUserInfo.name }} @@ -49,7 +49,7 @@ Dropdown, Menu, MenuItem: createAsyncComponent(() => import('./DropMenuItem.vue')), - MenuDivider: Menu.Divider, + // MenuDivider: Menu.Divider, LockAction: createAsyncComponent(() => import('../lock/LockModal.vue')), }, props: { @@ -57,15 +57,14 @@ }, setup() { const { prefixCls } = useDesign('header-user-dropdown') - const { t } = useI18n() const { getShowDoc, getUseLockPage } = useHeaderSetting() const userStore = useUserStore() + // 用户信息 const getUserInfo = computed(() => { - const { realName = '', avatar, desc } = userStore.getUserInfo || {} - return { realName, avatar: avatar || headerImg, desc } + const { name = '', avatar } = userStore.getUserInfo || {} + return { name, avatar: headerImg } }) - const [register, { openModal }] = useModal() function handleLock() { @@ -98,10 +97,9 @@ return { prefixCls, - t, getUserInfo, handleMenuClick, - getShowDoc, + // getShowDoc, register, getUseLockPage, } diff --git a/src/store/modules/user.ts b/src/store/modules/user.ts index 92445aef..69daf227 100644 --- a/src/store/modules/user.ts +++ b/src/store/modules/user.ts @@ -57,6 +57,7 @@ export const useUserStore = defineStore({ }, }, actions: { + // token信心 setToken(info: string | undefined) { this.token = info ? info : '' // for null or undefined value setAuthCache(TOKEN_KEY, info) @@ -80,36 +81,33 @@ export const useUserStore = defineStore({ this.sessionTimeout = false }, /** - * @description: login + * 登录方法 */ - async login( - params: LoginParams & { - goHome?: boolean - mode?: ErrorMessageMode - }, - ): Promise { + async login(params: LoginParams) { try { - const { goHome = true, mode, ...loginParams } = params - const data = await loginApi(loginParams, mode) - const { token } = data.data - - // save token + const { data: token } = await loginApi(params) + // 保存token this.setToken(token) - return this.afterLoginAction(goHome) + await this.afterLoginAction(true) + return token } catch (error) { return Promise.reject(error) } }, - async afterLoginAction(goHome?: boolean): Promise { + /** + * 登录后操作 + */ + async afterLoginAction(goHome?: boolean) { if (!this.getToken) return null - // get user info - const userInfo = await this.getUserInfoAction() - + // 获取用户信息 + await this.getUserInfoAction() const sessionTimeout = this.sessionTimeout + // 超时 if (sessionTimeout) { this.setSessionTimeout(false) } else { const permissionStore = usePermissionStore() + console.log(permissionStore) if (!permissionStore.isDynamicAddedRoute) { const routes = await permissionStore.buildRoutesAction() routes.forEach((route) => { @@ -118,21 +116,13 @@ export const useUserStore = defineStore({ router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw) permissionStore.setDynamicAddedRoute(true) } - goHome && (await router.replace(userInfo?.homePath || PageEnum.BASE_HOME)) + goHome && (await router.replace(PageEnum.BASE_HOME)) } - return userInfo }, - async getUserInfoAction(): Promise { + // 获取并存储用户信息 + async getUserInfoAction() { if (!this.getToken) return null const { data: userInfo } = await getUserInfo() - const { roles = [] } = userInfo - if (isArray(roles)) { - const roleList = roles.map((item) => item.value) as RoleEnum[] - this.setRoleList(roleList) - } else { - userInfo.roles = [] - this.setRoleList([]) - } this.setUserInfo(userInfo) return userInfo }, diff --git a/src/utils/http/axios/index.ts b/src/utils/http/axios/index.ts index cdfc68eb..c1f35be2 100644 --- a/src/utils/http/axios/index.ts +++ b/src/utils/http/axios/index.ts @@ -135,8 +135,8 @@ const transform: AxiosTransform = { // 请求之前处理config const token = getToken() if (token && (config as Recordable)?.requestOptions?.withToken !== false) { - // jwt token - ;(config as Recordable).headers.Authorization = options.authenticationScheme ? `${options.authenticationScheme} ${token}` : token + // 添加 token 到请求头 + ;(config as Recordable).headers.AccessToken = token } return config }, diff --git a/src/views/modules/system/client/ClientEdit.vue b/src/views/modules/system/client/ClientEdit.vue index 7ba16596..634b45ef 100644 --- a/src/views/modules/system/client/ClientEdit.vue +++ b/src/views/modules/system/client/ClientEdit.vue @@ -10,13 +10,13 @@ - + - + - + @@ -59,9 +59,8 @@ import { nextTick, reactive, ref } from 'vue' import useFormEdit from '/@/hooks/bootx/useFormEdit' import { add, Client, existsByCode, existsByCodeNotId, get, update } from './Client.api' - import { Rule, useForm } from "ant-design-vue/lib/form"; + import { FormInstance, Rule, useForm } from 'ant-design-vue/lib/form' import { FormEditType } from '/@/enums/formTypeEnum' - import { FormInstance } from 'ant-design-vue/es' import { findAll, LoginType } from '/@/views/modules/system/loginType/LoginType.api' const { diff --git a/src/views/modules/system/loginType/LoginTypeEdit.vue b/src/views/modules/system/loginType/LoginTypeEdit.vue index 9c233b00..f33a0f75 100644 --- a/src/views/modules/system/loginType/LoginTypeEdit.vue +++ b/src/views/modules/system/loginType/LoginTypeEdit.vue @@ -10,13 +10,13 @@ - + - + - + @@ -35,7 +35,7 @@ - - () // 校验状态 const rules = reactive({ code: [ @@ -118,7 +117,6 @@ const res = formEditType.value === FormEditType.Edit ? await existsByCodeNotId(code, id) : await existsByCode(code) return res.data ? Promise.reject('该编码已存在!') : Promise.resolve() } - const formRef = ref() // 事件 const emits = defineEmits(['ok']) diff --git a/src/views/sys/login/Login.vue b/src/views/sys/login/Login.vue index 7cc4223a..aea48471 100644 --- a/src/views/sys/login/Login.vue +++ b/src/views/sys/login/Login.vue @@ -2,7 +2,7 @@
- +
@@ -16,10 +16,10 @@
- {{ t('sys.login.signInTitle') }} + 开箱即用的中后台管理系统
- {{ t('sys.login.signInDesc') }} + 输入您的个人详细信息开始使用!
@@ -61,9 +61,9 @@ const globSetting = useGlobSetting() const { prefixCls } = useDesign('login') - const { t } = useI18n() + // const { t } = useI18n() const localeStore = useLocaleStore() - const showLocale = localeStore.getShowPicker + // const showLocale = localeStore.getShowPicker const title = computed(() => globSetting?.title ?? '')