feat(system): 新增文件和图库管理权限配置,优化HTTP错误处理
- 新增 FILE 和 PICTURE 权限常量,支持文件和图库管理模块 - 新增 FILE_MANAGEMENT 和 PICTURE_MANAGEMENT 权限组 - 更新 SYSTEM_ADMIN 权限组,包含所有新增权限 - 优化 HTTP 错误处理,支持异步解析响应体中的具体错误信息 - 新增 413 状态码处理,提供文件大小超限的友好提示 - 改进网络请求错误提示,根据错误类型提供更精准的用户反馈 - 支持取消请求、超时、文件大小限制等场景的错误处理
This commit is contained in:
parent
162b017b58
commit
0e202ce003
@ -47,6 +47,23 @@ export const PERMISSIONS = {
|
||||
SEARCH: 'system:operlog:search',
|
||||
DELETE: 'system:operlog:delete',
|
||||
},
|
||||
|
||||
// 文件管理权限
|
||||
FILE: {
|
||||
LIST: 'system:file:list',
|
||||
ADD: 'system:file:add',
|
||||
UPDATE: 'system:file:update',
|
||||
DELETE: 'system:file:delete',
|
||||
UPLOAD: 'system:file:upload',
|
||||
},
|
||||
|
||||
// 图库管理权限
|
||||
PICTURE: {
|
||||
LIST: 'system:picture:list',
|
||||
ADD: 'system:sysPicture:add',
|
||||
UPDATE: 'system:sysPicture:update',
|
||||
DELETE: 'system:sysPicture:delete',
|
||||
},
|
||||
} as const
|
||||
|
||||
// 权限类型推断
|
||||
@ -78,6 +95,23 @@ export const PERMISSION_GROUPS = {
|
||||
PERMISSIONS.MENU.DELETE,
|
||||
],
|
||||
|
||||
// 文件管理相关权限
|
||||
FILE_MANAGEMENT: [
|
||||
PERMISSIONS.FILE.LIST,
|
||||
PERMISSIONS.FILE.ADD,
|
||||
PERMISSIONS.FILE.UPDATE,
|
||||
PERMISSIONS.FILE.DELETE,
|
||||
PERMISSIONS.FILE.UPLOAD,
|
||||
],
|
||||
|
||||
// 图库管理相关权限
|
||||
PICTURE_MANAGEMENT: [
|
||||
PERMISSIONS.PICTURE.LIST,
|
||||
PERMISSIONS.PICTURE.ADD,
|
||||
PERMISSIONS.PICTURE.UPDATE,
|
||||
PERMISSIONS.PICTURE.DELETE,
|
||||
],
|
||||
|
||||
// 系统管理员权限(包含所有权限)
|
||||
SYSTEM_ADMIN: [
|
||||
...Object.values(PERMISSIONS.USER),
|
||||
@ -85,5 +119,7 @@ export const PERMISSION_GROUPS = {
|
||||
...Object.values(PERMISSIONS.MENU),
|
||||
...Object.values(PERMISSIONS.LOGIN_LOG),
|
||||
...Object.values(PERMISSIONS.OPER_LOG),
|
||||
...Object.values(PERMISSIONS.FILE),
|
||||
...Object.values(PERMISSIONS.PICTURE),
|
||||
],
|
||||
} as const
|
||||
|
||||
@ -85,12 +85,27 @@ export function createAlovaInstance(
|
||||
return handleServiceResult(errorResult, false)
|
||||
}
|
||||
// 接口请求失败
|
||||
const errorResult = handleResponseError(response)
|
||||
const errorResult = await handleResponseError(response)
|
||||
return handleServiceResult(errorResult, false)
|
||||
},
|
||||
onError: (error, method) => {
|
||||
const tip = `[${method.type}] - [${method.url}] - ${error.message}`
|
||||
coiMsgWarning(tip)
|
||||
onError: (error, _method) => {
|
||||
// 根据错误类型提供更友好的提示
|
||||
let userMessage = '网络请求失败,请稍后重试'
|
||||
|
||||
if (error.name === 'AbortError') {
|
||||
userMessage = '请求已取消'
|
||||
}
|
||||
else if (error.name === 'TimeoutError') {
|
||||
userMessage = '请求超时,请检查网络连接'
|
||||
}
|
||||
else if (error.message.includes('fetch')) {
|
||||
userMessage = '网络连接失败,请检查网络状态'
|
||||
}
|
||||
else if (error.message.includes('413')) {
|
||||
userMessage = '文件大小超出限制,请选择较小的文件'
|
||||
}
|
||||
|
||||
coiMsgWarning(userMessage)
|
||||
},
|
||||
|
||||
onComplete: async (_method) => {
|
||||
|
||||
@ -23,6 +23,7 @@ export const ERROR_STATUS = {
|
||||
404: $t('http.404'),
|
||||
405: $t('http.405'),
|
||||
408: $t('http.408'),
|
||||
413: '文件大小超出限制,请选择较小的文件',
|
||||
500: $t('http.500'),
|
||||
501: $t('http.501'),
|
||||
502: $t('http.502'),
|
||||
|
||||
@ -14,7 +14,7 @@ type ErrorStatus = keyof typeof ERROR_STATUS
|
||||
* @param {Response} response
|
||||
* @return {*}
|
||||
*/
|
||||
export function handleResponseError(response: Response) {
|
||||
export async function handleResponseError(response: Response) {
|
||||
const error: Service.RequestError = {
|
||||
errorType: 'Response Error',
|
||||
code: 0,
|
||||
@ -22,7 +22,31 @@ export function handleResponseError(response: Response) {
|
||||
data: null,
|
||||
}
|
||||
const errorCode: ErrorStatus = response.status as ErrorStatus
|
||||
const message = ERROR_STATUS[errorCode] || ERROR_STATUS.default
|
||||
let message = ERROR_STATUS[errorCode] || ERROR_STATUS.default
|
||||
|
||||
// 尝试解析响应体中的具体错误信息
|
||||
try {
|
||||
const responseText = await response.text()
|
||||
if (responseText) {
|
||||
try {
|
||||
const responseData = JSON.parse(responseText)
|
||||
// 如果后端返回了具体的错误信息,优先使用
|
||||
if (responseData && responseData.msg) {
|
||||
message = responseData.msg
|
||||
}
|
||||
else if (responseData && responseData.message) {
|
||||
message = responseData.message
|
||||
}
|
||||
}
|
||||
catch {
|
||||
// 如果不是JSON格式,可能是HTML错误页面,使用预定义消息
|
||||
}
|
||||
}
|
||||
}
|
||||
catch {
|
||||
// 读取错误响应失败,使用默认错误消息
|
||||
}
|
||||
|
||||
Object.assign(error, { code: errorCode, message })
|
||||
|
||||
showError(error)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user