feat(i18n): translate backend error messages, dict labels auto-translate, add 150+ medical dict terms
This commit is contained in:
@@ -1,12 +1,14 @@
|
||||
import axios from 'axios'
|
||||
import {ElLoading, ElMessage, ElMessageBox, ElNotification} from 'element-plus'
|
||||
import {getToken} from '@/utils/auth'
|
||||
import errorCode from '@/utils/errorCode'
|
||||
import errorCode, {errorCodeEn, errorCodeVi} from '@/utils/errorCode'
|
||||
import {blobValidate, tansParams} from '@/utils/his'
|
||||
import cache from '@/plugins/cache'
|
||||
import {saveAs} from 'file-saver'
|
||||
import useUserStore from '@/store/modules/user'
|
||||
import JSONBig from 'json-bigint'
|
||||
import {autoTranslate} from '@/i18n/autoTranslate'
|
||||
import Cookies from 'js-cookie'
|
||||
|
||||
// 初始化json-bigint,配置大数字转字符串(关键:storeAsString: true)
|
||||
const jsonBig = JSONBig({ storeAsString: true })
|
||||
@@ -141,8 +143,14 @@ service.interceptors.request.use(config => {
|
||||
service.interceptors.response.use(res => {
|
||||
// 未设置状态码则默认成功状态
|
||||
const code = res.data.code || 200;
|
||||
// 获取错误信息
|
||||
const msg = errorCode[code] || res.data.msg || errorCode['default']
|
||||
// 获取错误信息(支持多语言)
|
||||
const lang = Cookies.get('lang') || localStorage.getItem('lang') || 'zh-CN'
|
||||
const errorDict = lang === 'en' ? errorCodeEn : lang === 'vi' ? errorCodeVi : errorCode
|
||||
let msg = errorDict[code] || res.data.msg || errorDict['default']
|
||||
// 后端返回的中文错误消息自动翻译
|
||||
if (lang !== 'zh-CN' && /[\u4e00-\u9fff]/.test(msg)) {
|
||||
msg = autoTranslate(msg)
|
||||
}
|
||||
// 二进制数据则直接返回
|
||||
if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
|
||||
return res.data
|
||||
@@ -160,11 +168,12 @@ service.interceptors.request.use(config => {
|
||||
}).catch(() => {
|
||||
isRelogin.show = false;
|
||||
});
|
||||
return Promise.reject('登录已过期,请重新登录。')
|
||||
return Promise.reject(lang === 'zh-CN' ? '登录已过期,请重新登录。' : lang === 'en' ? 'Session expired, please log in again.' : 'Phiên hết hạn, vui lòng đăng nhập lại.')
|
||||
}
|
||||
|
||||
// 其他页面:显示提示后自动跳转
|
||||
ElMessage.warning('登录已过期,正在跳转到登录页面...');
|
||||
const expiredMsg = lang === 'zh-CN' ? '登录已过期,正在跳转到登录页面...' : lang === 'en' ? 'Session expired, redirecting to login...' : 'Phiên hết hạn, đang chuyển đến trang đăng nhập...'
|
||||
ElMessage.warning(expiredMsg);
|
||||
useUserStore().logOut().then(() => {
|
||||
isRelogin.show = false;
|
||||
// 跳转到登录页,保留当前路径作为redirect参数
|
||||
@@ -204,13 +213,15 @@ service.interceptors.request.use(config => {
|
||||
},
|
||||
error => {
|
||||
console.log('err' + error)
|
||||
const lang = Cookies.get('lang') || localStorage.getItem('lang') || 'zh-CN'
|
||||
let { message } = error;
|
||||
if (message == "Network Error") {
|
||||
message = "后端接口连接异常";
|
||||
message = lang === 'zh-CN' ? '后端接口连接异常' : lang === 'en' ? 'Backend API connection error' : 'Lỗi kết nối API backend';
|
||||
} else if (message.includes("timeout")) {
|
||||
message = "系统接口请求超时";
|
||||
message = lang === 'zh-CN' ? '系统接口请求超时' : lang === 'en' ? 'API request timeout' : 'Yêu cầu API hết thời gian';
|
||||
} else if (message.includes("Request failed with status code")) {
|
||||
message = "系统接口" + message.substr(message.length - 3) + "异常";
|
||||
const code = message.substr(message.length - 3)
|
||||
message = lang === 'zh-CN' ? '系统接口' + code + '异常' : lang === 'en' ? 'API error ' + code : 'Lỗi API ' + code;
|
||||
}
|
||||
// 检查是否需要跳过错误提示
|
||||
if (!error.config?.skipErrorMsg) {
|
||||
@@ -221,7 +232,9 @@ service.interceptors.request.use(config => {
|
||||
|
||||
// 通用下载方法
|
||||
export function download(url, params, filename, config) {
|
||||
downloadLoadingInstance = ElLoading.service({ text: "正在下载数据,请稍候", background: "rgba(0, 0, 0, 0.7)", })
|
||||
const lang = Cookies.get('lang') || localStorage.getItem('lang') || 'zh-CN'
|
||||
const dlMsg = lang === 'zh-CN' ? '正在下载数据,请稍候' : lang === 'en' ? 'Downloading data, please wait' : 'Đang tải dữ liệu, vui lòng đợi'
|
||||
downloadLoadingInstance = ElLoading.service({ text: dlMsg, background: "rgba(0, 0, 0, 0.7)", })
|
||||
return service.post(url, params, {
|
||||
transformRequest: [(params) => { return tansParams(params) }],
|
||||
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||||
@@ -235,20 +248,25 @@ export function download(url, params, filename, config) {
|
||||
} else {
|
||||
const resText = await data.text();
|
||||
const rspObj = JSON.parse(resText);
|
||||
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
|
||||
const errorDict = lang === 'en' ? errorCodeEn : lang === 'vi' ? errorCodeVi : errorCode
|
||||
let errMsg = errorDict[rspObj.code] || rspObj.msg || errorDict['default']
|
||||
if (lang !== 'zh-CN' && /[\u4e00-\u9fff]/.test(errMsg)) errMsg = autoTranslate(errMsg)
|
||||
ElMessage.error(errMsg);
|
||||
}
|
||||
downloadLoadingInstance.close();
|
||||
}).catch((r) => {
|
||||
console.error(r)
|
||||
ElMessage.error('下载文件出现错误,请联系管理员!')
|
||||
const dlErr = lang === 'zh-CN' ? '下载文件出现错误,请联系管理员!' : lang === 'en' ? 'Download error, please contact administrator!' : 'Lỗi tải xuống, vui lòng liên hệ quản trị viên!'
|
||||
ElMessage.error(dlErr)
|
||||
downloadLoadingInstance.close();
|
||||
})
|
||||
}
|
||||
|
||||
// 添加GET方式下载方法
|
||||
export function downloadGet(url, params, filename, config) {
|
||||
downloadLoadingInstance = ElLoading.service({ text: "正在下载数据,请稍候", background: "rgba(0, 0, 0, 0.7)", })
|
||||
const lang2 = Cookies.get('lang') || localStorage.getItem('lang') || 'zh-CN'
|
||||
const dlMsg2 = lang2 === 'zh-CN' ? '正在下载数据,请稍候' : lang2 === 'en' ? 'Downloading data, please wait' : 'Đang tải dữ liệu, vui lòng đợi'
|
||||
downloadLoadingInstance = ElLoading.service({ text: dlMsg2, background: "rgba(0, 0, 0, 0.7)", })
|
||||
return service.get(url, {
|
||||
params: params,
|
||||
responseType: 'blob',
|
||||
@@ -261,13 +279,16 @@ export function downloadGet(url, params, filename, config) {
|
||||
} else {
|
||||
const resText = await data.text();
|
||||
const rspObj = JSON.parse(resText);
|
||||
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
|
||||
const errorDict2 = lang2 === 'en' ? errorCodeEn : lang2 === 'vi' ? errorCodeVi : errorCode
|
||||
let errMsg = errorDict2[rspObj.code] || rspObj.msg || errorDict2['default']
|
||||
if (lang2 !== 'zh-CN' && /[\u4e00-\u9fff]/.test(errMsg)) errMsg = autoTranslate(errMsg)
|
||||
ElMessage.error(errMsg);
|
||||
}
|
||||
downloadLoadingInstance.close();
|
||||
}).catch((r) => {
|
||||
console.error(r)
|
||||
ElMessage.error('下载文件出现错误,请联系管理员!')
|
||||
const dlErr2 = lang2 === 'zh-CN' ? '下载文件出现错误,请联系管理员!' : lang2 === 'en' ? 'Download error, please contact administrator!' : 'Lỗi tải xuống, vui lòng liên hệ quản trị viên!'
|
||||
ElMessage.error(dlErr2)
|
||||
downloadLoadingInstance.close();
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user