diff --git a/src/constants/permissions.ts b/src/constants/permissions.ts index 1574ea3..6ee9ca3 100644 --- a/src/constants/permissions.ts +++ b/src/constants/permissions.ts @@ -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 diff --git a/src/service/http/alova.ts b/src/service/http/alova.ts index a05fd44..055379f 100644 --- a/src/service/http/alova.ts +++ b/src/service/http/alova.ts @@ -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) => { diff --git a/src/service/http/config.ts b/src/service/http/config.ts index c13dd0f..23d7484 100644 --- a/src/service/http/config.ts +++ b/src/service/http/config.ts @@ -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'), diff --git a/src/service/http/handle.ts b/src/service/http/handle.ts index f0739f9..420f972 100644 --- a/src/service/http/handle.ts +++ b/src/service/http/handle.ts @@ -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)