From 41169bf62e9ce3f79ff3de76a083293cb96dd37f Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Wed, 31 Aug 2022 18:07:40 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E7=B3=BB=E7=BB=9F=E7=AE=A1=E7=90=86-?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86):=20=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=94=99=E8=AF=AF=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commons/constants/AuthConstants.java | 4 ++++ .../dataease/plugins/server/XUserServer.java | 19 ++++++++++--------- frontend/src/lang/en.js | 4 +++- frontend/src/lang/tw.js | 4 +++- frontend/src/lang/zh.js | 4 +++- frontend/src/settings.js | 1 + frontend/src/styles/index.scss | 7 +++++++ frontend/src/utils/request.js | 13 ++++++++++++- 8 files changed, 43 insertions(+), 13 deletions(-) diff --git a/backend/src/main/java/io/dataease/commons/constants/AuthConstants.java b/backend/src/main/java/io/dataease/commons/constants/AuthConstants.java index 2e33f7581c..6bd0f2f3d6 100644 --- a/backend/src/main/java/io/dataease/commons/constants/AuthConstants.java +++ b/backend/src/main/java/io/dataease/commons/constants/AuthConstants.java @@ -21,4 +21,8 @@ public class AuthConstants { public final static String DEPT_DATASET_NAME = "dept_dataset"; public final static String DEPT_PANEL_NAME = "dept_panel"; + + + public static final String DE_DOWN_ERROR_KEY = "de-down-error-msg"; + } diff --git a/backend/src/main/java/io/dataease/plugins/server/XUserServer.java b/backend/src/main/java/io/dataease/plugins/server/XUserServer.java index 1a66947faf..d4ce11e3ed 100644 --- a/backend/src/main/java/io/dataease/plugins/server/XUserServer.java +++ b/backend/src/main/java/io/dataease/plugins/server/XUserServer.java @@ -1,7 +1,7 @@ package io.dataease.plugins.server; -import io.dataease.commons.exception.DEException; -import io.dataease.i18n.Translator; +import io.dataease.commons.constants.AuthConstants; +import io.dataease.commons.utils.LogUtil; import io.dataease.plugins.config.SpringContextUtil; import io.dataease.plugins.xpack.user.service.UserXpackService; import io.swagger.annotations.Api; @@ -31,23 +31,24 @@ public class XUserServer { @ApiOperation("导入") @PostMapping("/upload") - public void upload(@RequestPart(value = "file", required = true) MultipartFile file, HttpServletResponse response) throws Exception{ + public void upload(@RequestPart(value = "file", required = true) MultipartFile file, HttpServletResponse response) { if (file.getSize() > MAXSIZE) { String msgKey = "i18n_max_user_import_size"; - String msg = Translator.get(msgKey); - DEException.throwException(msg); + response.addHeader("Access-Control-Expose-Headers", AuthConstants.DE_DOWN_ERROR_KEY); + response.setHeader(AuthConstants.DE_DOWN_ERROR_KEY, msgKey); + return; } UserXpackService userXpackService = SpringContextUtil.getBean(UserXpackService.class); try{ userXpackService.upload(file, response); }catch (Exception e) { + response.addHeader("Access-Control-Expose-Headers", AuthConstants.DE_DOWN_ERROR_KEY); if (StringUtils.contains(e.getMessage(), "template file error")) { - - DEException.throwException(Translator.get("I18N_USER_TEMPLATE_ERROR")); + response.setHeader(AuthConstants.DE_DOWN_ERROR_KEY, "I18N_USER_TEMPLATE_ERROR"); }else { - DEException.throwException(e.getMessage()); + response.setHeader(AuthConstants.DE_DOWN_ERROR_KEY, e.getMessage()); } - + LogUtil.error(e.getMessage()); } } } diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index ca4c7eb98e..dcd4cc7d8c 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -2438,6 +2438,8 @@ export default { attr: 'Attribute', empty: 'Empty', please_select_map: 'Please select a range of map' - } + }, + 'I18N_USER_TEMPLATE_ERROR': 'Template file error', + 'i18n_max_user_import_size': 'File size exceeds 10M' } diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 8361c1c3b3..12065f458b 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -2460,5 +2460,7 @@ export default { attr: '屬性', empty: '無數據', please_select_map: '請先選擇地圖範圍' - } + }, + 'I18N_USER_TEMPLATE_ERROR': '模版錯誤', + 'i18n_max_user_import_size': '文件最大不能超過10M' } diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 8ee7a1d4dd..0a09f968bf 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -2460,5 +2460,7 @@ export default { attr: '属性', empty: '无数据', please_select_map: '请先选择地图范围' - } + }, + 'I18N_USER_TEMPLATE_ERROR': '模版错误', + 'i18n_max_user_import_size': '文件最大不能超过10M' } diff --git a/frontend/src/settings.js b/frontend/src/settings.js index 2a4f98b21d..24e96017fc 100644 --- a/frontend/src/settings.js +++ b/frontend/src/settings.js @@ -7,6 +7,7 @@ module.exports = { IdTokenKey: 'IdToken', AccessTokenKey: 'AccessToken', CASSESSION: 'JSESSIONID', + DownErrorKey: 'de-down-error-msg', /** * @type {boolean} true | false diff --git a/frontend/src/styles/index.scss b/frontend/src/styles/index.scss index e601d6a8e1..159a11cf2b 100644 --- a/frontend/src/styles/index.scss +++ b/frontend/src/styles/index.scss @@ -1202,4 +1202,11 @@ div:focus { } } } +} + +.upload-user{ + margin-bottom: 5px; + .el-upload{ + width: 100%; + } } \ No newline at end of file diff --git a/frontend/src/utils/request.js b/frontend/src/utils/request.js index be504d62b5..313bf12fcb 100644 --- a/frontend/src/utils/request.js +++ b/frontend/src/utils/request.js @@ -11,6 +11,7 @@ import Vue from 'vue' const TokenKey = Config.TokenKey const RefreshTokenKey = Config.RefreshTokenKey const LinkTokenKey = Config.LinkTokenKey +const DownErrorKey = Config.DownErrorKey import Cookies from 'js-cookie' const getTimeOut = () => { @@ -98,6 +99,9 @@ service.interceptors.response.use(response => { response.config.loading && tryHideLoading(store.getters.currentPath) checkAuth(response) Vue.prototype.$currentHttpRequestList.delete(response.config.url) + if (checkDownError(response)) { + return response + } return response.data }, error => { const config = error.response && error.response.config || error.config @@ -114,7 +118,14 @@ service.interceptors.response.use(response => { !config.hideMsg && (!headers['authentication-status']) && $error(msg) return Promise.reject(error) }) - +const checkDownError = response => { + if (response.request && response.request.responseType && response.request.responseType === 'blob' && response.headers && response.headers['de-down-error-msg']) { + const msg = i18n.t(response.headers[DownErrorKey]) + $error(msg) + return true + } + return false +} const checkAuth = response => { if (response.headers['authentication-status'] === 'login_expire') { const message = i18n.t('login.expires')