diff --git a/Api/Ewide.Core/Extension/RestfulResultProvider.cs b/Api/Ewide.Core/Extension/RestfulResultProvider.cs index 9216ce0..7181e07 100644 --- a/Api/Ewide.Core/Extension/RestfulResultProvider.cs +++ b/Api/Ewide.Core/Extension/RestfulResultProvider.cs @@ -41,6 +41,20 @@ namespace Ewide.Core // 解析异常信息 var (StatusCode, ErrorCode, Errors) = UnifyContext.GetExceptionMetadata(context); + // 如果是代码自行抛出的异常,视为接口调用成功,返回结果失败 + if (context.Exception.GetType() == typeof(Furion.FriendlyException.AppFriendlyException)) + { + return DisplayJson(new RestfulResult + { + Code = StatusCodes.Status200OK, + Success = false, + Data = null, + Message = Errors, + Extras = UnifyContext.Take(), + Timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() + }); + } + return DisplayJson(new RestfulResult { Code = StatusCode, diff --git a/web-react/src/common/api/index.js b/web-react/src/common/api/index.js index 0f80ffc..c0c329a 100644 --- a/web-react/src/common/api/index.js +++ b/web-react/src/common/api/index.js @@ -13,7 +13,7 @@ import status from './status' * api.getItemGroupType(parmas).then(...) */ import urls from './requests' -import { notification } from 'antd' +import { message as Message, notification } from 'antd' const STATUS = status @@ -64,6 +64,10 @@ const errorNotification = ({ code, message }) => { } } +const errorMessage = (message) => { + Message.error(message) +} + const handlerUnauthorized = () => { token.value = '' window.location.replace('/login') @@ -125,13 +129,28 @@ for (let key in urls) { api[`${key}Await`](params) .then((res) => { const { data } = res + const isFile = [ArrayBuffer, Blob].includes(data.constructor) + const result = isFile ? res : data + + // 错误的返回码,以通知的形式弹出 if (errerCodes.indexOf(data.code) >= 0) { errorNotification(data) - reject([ArrayBuffer, Blob].indexOf(data.constructor) > -1 ? res : data) - } else if (data.code === STATUS.Unauthorized) { + reject(result) + } + + // 非文件,返回码正确,但是结果失败,以消息的形式弹出 + else if (!isFile && !data.success) { + errorMessage(data.message) + reject(result) + } + + // 未登录 + else if (data.code === STATUS.Unauthorized) { handlerUnauthorized() - } else { - reslove([ArrayBuffer, Blob].indexOf(data.constructor) > -1 ? res : data) + } + + else { + reslove(result) } }) .catch(({ response }) => { diff --git a/web-react/src/components/query-table/index.jsx b/web-react/src/components/query-table/index.jsx index f1c3049..71e29ba 100644 --- a/web-react/src/components/query-table/index.jsx +++ b/web-react/src/components/query-table/index.jsx @@ -222,31 +222,33 @@ export default class QueryTable extends Component { this.query = this.props.queryInitialValues } - const res = await this.loadData( - { - pageIndex: this.pagination.current, - pageSize: this.pagination.pageSize, - ...this.sorter, - }, - cloneDeep(this.query) - ) - if (res.rows || res.data || res.items) { - this.setState({ - type: 'table', - dataSource: res.rows || res.data || res.items, - }) + try { + const res = await this.loadData( + { + pageIndex: this.pagination.current, + pageSize: this.pagination.pageSize, + ...this.sorter, + }, + cloneDeep(this.query) + ) + if (res.rows || res.data || res.items) { + this.setState({ + type: 'table', + dataSource: res.rows || res.data || res.items, + }) - this.pagination.total = res.totalCount - } else if (res) { - this.setState({ - type: 'tree', - dataSource: clearChildren(res), - }) + this.pagination.total = res.totalCount + } else if (res) { + this.setState({ + type: 'tree', + dataSource: clearChildren(res), + }) - this.pagination = false + this.pagination = false + } + } finally { + this.onLoaded() } - - this.onLoaded() } /** diff --git a/web-react/src/views/login/index.jsx b/web-react/src/views/login/index.jsx index e04b7ea..b3118eb 100644 --- a/web-react/src/views/login/index.jsx +++ b/web-react/src/views/login/index.jsx @@ -36,6 +36,7 @@ export default class index extends Component { Message.success('登录成功') this.props.history.replace('/') } else { + this.setState({ loading: false }) Message.error(message) } })