1. 扁平化多语言文件层级,移除嵌套的命名空间 2. 更新组件内多语言调用路径,适配新的语言包结构 3. 重构HTTP请求错误处理逻辑 4. 新增remote-only模式的远端语言包加载器 5. 新增多语言数据源remote-only配置项
233 lines
6.4 KiB
JavaScript
233 lines
6.4 KiB
JavaScript
import Config from './config.js'
|
||
import Util from './util.js'
|
||
import store from '@/store/index.js'
|
||
import Platform from './platform.js'
|
||
|
||
const { appType, appTypeName } = Platform.getPlatformInfo();
|
||
|
||
// 惰性加载 Lang,避免与 lang.js 的循环依赖
|
||
let _Lang = null;
|
||
function getLang() {
|
||
if (!_Lang) {
|
||
_Lang = require('./lang.js').default;
|
||
}
|
||
return _Lang;
|
||
}
|
||
|
||
export default {
|
||
sendRequest(params) {
|
||
if (!Config.baseUrl) {
|
||
uni.showToast({
|
||
title: getLang().lang('http.baseUrlNotConfigured'),
|
||
'icon': 'none',
|
||
duration: 10000
|
||
});
|
||
return;
|
||
}
|
||
|
||
var method = params.data != undefined ? 'POST' : 'GET',
|
||
url = (Config.baseUrl + params.url).replace(/(?<!:)\/+/g, '/'),
|
||
data = {
|
||
app_type: appType,
|
||
app_type_name: appTypeName
|
||
};
|
||
|
||
// token
|
||
data.token = store.state.token || '';
|
||
data.uniacid = uni.getStorageSync('uniacid') || Config.uniacid; // 从缓存中获取uniacid,或使用默认uniacid,支持快应用
|
||
|
||
// 门店id
|
||
var default_store_info = store.state.defaultStoreInfo;
|
||
if (default_store_info) {
|
||
data.store_id = default_store_info.store_id;
|
||
}
|
||
|
||
var store_info = store.state.globalStoreInfo;
|
||
|
||
if (store_info) data.store_id = store_info.store_id;
|
||
|
||
// 参数
|
||
if (params.data != undefined) Object.assign(data, params.data);
|
||
|
||
if (params.async === false) {
|
||
//同步
|
||
return new Promise((resolve, reject) => {
|
||
uni.request({
|
||
url: url,
|
||
method: method,
|
||
data: data,
|
||
header: params.header || {
|
||
// 'Accept': 'application/json',
|
||
'content-type': 'application/x-www-form-urlencoded;application/json'
|
||
},
|
||
dataType: params.dataType || 'json',
|
||
responseType: params.responseType || 'text',
|
||
success: (res) => {
|
||
// try {
|
||
// res.data = JSON.parse(res.data);
|
||
// } catch (e) {
|
||
// //TODO handle the exception
|
||
// console.log('api error:', e);
|
||
// }
|
||
if (res.data.code == -3 && store.state.siteState > 0) {
|
||
store.commit('setSiteState', -3);
|
||
Util.redirectTo('/pages_tool/storeclose/storeclose', {}, 'reLaunch');
|
||
return;
|
||
}
|
||
if (res.data.refreshtoken) {
|
||
store.commit('setToken', res.data.refreshtoken);
|
||
}
|
||
if (res.data.code == -10009 || res.data.code == -10010) {
|
||
store.commit('setToken', '');
|
||
store.commit('setMemberInfo', '');
|
||
}
|
||
resolve(res.data);
|
||
},
|
||
fail: (res) => {
|
||
if (res.errMsg && res.errMsg == 'request:fail url not in domain list') {
|
||
uni.showToast({
|
||
title: getLang().lang('http.domainNotInList', { url: Config.baseUrl }),
|
||
'icon': 'none',
|
||
duration: 10000
|
||
});
|
||
return;
|
||
}
|
||
reject(res);
|
||
},
|
||
complete: (res) => {
|
||
// success/fail 已处理 resolve/reject,complete 只负责兜底提示非预期状态
|
||
if ((res.errMsg && res.errMsg != "request:ok") || (res.statusCode && [200, 500].indexOf(res.statusCode) == -1)) {
|
||
uni.showToast({
|
||
title: getLang().lang('http.requestFailed', { url: Config.baseUrl }),
|
||
'icon': 'none',
|
||
duration: 10000
|
||
});
|
||
}
|
||
}
|
||
});
|
||
});
|
||
} else {
|
||
//异步
|
||
uni.request({
|
||
url: url,
|
||
method: method,
|
||
data: data,
|
||
header: params.header || {
|
||
// 'Accept': 'application/json',
|
||
'content-type': 'application/x-www-form-urlencoded;application/json'
|
||
},
|
||
dataType: params.dataType || 'json',
|
||
responseType: params.responseType || 'text',
|
||
success: (res) => {
|
||
// try {
|
||
// res.data = JSON.parse(res.data);
|
||
// } catch (e) {
|
||
// //TODO handle the exception
|
||
// console.log('api error:', e);
|
||
// }
|
||
if (res.data.code == -3 && store.state.siteState > 0) {
|
||
store.commit('setSiteState', -3);
|
||
Util.redirectTo('/pages_tool/storeclose/storeclose', {}, 'reLaunch');
|
||
return;
|
||
}
|
||
if (res.data.refreshtoken) {
|
||
store.commit('setToken', res.data.refreshtoken);
|
||
}
|
||
if (res.data.code == -10009 || res.data.code == -10010) {
|
||
store.commit('setToken', '');
|
||
store.commit('setMemberInfo', '');
|
||
}
|
||
typeof params.success == 'function' && params.success(res.data);
|
||
},
|
||
fail: (res) => {
|
||
if (res.errMsg && res.errMsg == 'request:fail url not in domain list') {
|
||
uni.showToast({
|
||
title: getLang().lang('http.domainNotInList', { url: Config.baseUrl }),
|
||
'icon': 'none',
|
||
duration: 10000
|
||
});
|
||
return;
|
||
}
|
||
typeof params.fail == 'function' && params.fail(res);
|
||
},
|
||
complete: (res) => {
|
||
if ((res.errMsg && res.errMsg != "request:ok") || (res.statusCode && [200, 500].indexOf(res.statusCode) == -1)) {
|
||
uni.showToast({
|
||
title: getLang().lang('http.requestFailed', { url: Config.baseUrl }),
|
||
'icon': 'none',
|
||
duration: 10000
|
||
});
|
||
return;
|
||
}
|
||
typeof params.complete == 'function' && params.complete(res.data);
|
||
}
|
||
});
|
||
}
|
||
},
|
||
uploadBase64(params) {
|
||
uni.request({
|
||
url: Config.baseUrl + '/api/upload/headimgBase64',
|
||
method: 'POST',
|
||
header: {
|
||
'content-type': 'application/x-www-form-urlencoded;application/json'
|
||
},
|
||
data: {
|
||
app_type: appType,
|
||
app_type_name: appTypeName,
|
||
images: params.base64
|
||
},
|
||
dataType: 'json',
|
||
responseType: 'text',
|
||
success: res => {
|
||
typeof params.success == 'function' && params.success(res.data);
|
||
},
|
||
fail: () => {
|
||
typeof params.fail == 'function' && params.fail(res);
|
||
}
|
||
});
|
||
},
|
||
pullImage(params) {
|
||
uni.request({
|
||
url: Config.baseUrl + '/api/upload/headimgPull',
|
||
method: 'POST',
|
||
header: {
|
||
'content-type': 'application/x-www-form-urlencoded;application/json'
|
||
},
|
||
data: {
|
||
app_type: appType,
|
||
app_type_name: appTypeName,
|
||
path: params.path
|
||
},
|
||
dataType: 'json',
|
||
responseType: 'text',
|
||
success: res => {
|
||
typeof params.success == 'function' && params.success(res.data);
|
||
},
|
||
fail: () => {
|
||
typeof params.fail == 'function' && params.fail(res);
|
||
}
|
||
});
|
||
},
|
||
upload(params) {
|
||
uni.uploadFile({
|
||
url: Config.baseUrl + params.url,
|
||
filePath: params.filePath,
|
||
name: params.name || 'file',
|
||
fileType: params.fileType || 'image',
|
||
formData: {
|
||
app_type: appType,
|
||
app_type_name: appTypeName,
|
||
},
|
||
header: {
|
||
'content-type': 'application/x-www-form-urlencoded;application/json'
|
||
},
|
||
success: (res) => {
|
||
typeof params.success == 'function' && params.success(JSON.parse(res.data));
|
||
},
|
||
fail: (res) => {
|
||
typeof params.fail == 'function' && params.fail(res);
|
||
}
|
||
});
|
||
}
|
||
}
|