import request from '@/utils/http'
|
|
function buildLoginPayload({ username, password }) {
|
return { username, password }
|
}
|
|
function normalizeLoginParams(params) {
|
return {
|
username: params?.username || params?.userName || '',
|
password: params?.password
|
}
|
}
|
|
function normalizeLoginResponse(payload) {
|
const data = payload?.data || payload || {}
|
return {
|
accessToken: data.accessToken || '',
|
refreshToken: data.refreshToken || '',
|
user: data.user || {}
|
}
|
}
|
|
function normalizeUserInfo(data) {
|
const normalizedRoles = normalizeRoleCodes(data?.roles)
|
const normalizedButtons = normalizeButtonMarks(data)
|
return {
|
...data,
|
roles: normalizedRoles,
|
buttons: normalizedButtons
|
}
|
}
|
|
function normalizeRoleCodes(roles) {
|
if (!Array.isArray(roles)) {
|
return []
|
}
|
|
return Array.from(
|
new Set(
|
roles
|
.map((item) => {
|
if (typeof item === 'string') {
|
return item.trim()
|
}
|
if (item && typeof item === 'object') {
|
return item.code || item.name || ''
|
}
|
return ''
|
})
|
.filter(Boolean)
|
)
|
)
|
}
|
|
function normalizeButtonMarks(data) {
|
const directButtons = Array.isArray(data?.buttons) ? data.buttons : []
|
const authorityButtons = Array.isArray(data?.authorities)
|
? data.authorities.map((item) => item?.authority || item?.authMark || '')
|
: []
|
|
return Array.from(
|
new Set(
|
[...directButtons, ...authorityButtons]
|
.map((item) => (typeof item === 'string' ? item.trim() : ''))
|
.filter(Boolean)
|
)
|
)
|
}
|
|
function fetchLogin(params) {
|
return request
|
.post({
|
url: '/login',
|
params: buildLoginPayload(normalizeLoginParams(params))
|
// showSuccessMessage: true // 显示成功消息
|
// showErrorMessage: false // 不显示错误消息
|
})
|
.then((response) => {
|
const normalized = normalizeLoginResponse(response)
|
return {
|
token: normalized.accessToken,
|
accessToken: normalized.accessToken,
|
refreshToken: normalized.refreshToken,
|
user: normalized.user
|
}
|
})
|
}
|
function fetchGetUserInfo() {
|
return request
|
.get({
|
url: '/auth/user'
|
// 自定义请求头
|
// headers: {
|
// 'X-Custom-Header': 'your-custom-value'
|
// }
|
})
|
.then((response) => normalizeUserInfo(response))
|
}
|
function fetchGetMenuList() {
|
return request.get({
|
url: '/auth/menu'
|
})
|
}
|
export {
|
buildLoginPayload,
|
fetchGetMenuList,
|
fetchGetUserInfo,
|
fetchLogin,
|
normalizeLoginResponse,
|
normalizeUserInfo
|
}
|