You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
294 lines
9.8 KiB
294 lines
9.8 KiB
import axios from 'axios'; |
|
import { stringify } from 'query-string'; |
|
import { isArray, map, omit } from 'lodash'; |
|
import noDataFilter from './noDataFilter'; |
|
import { getStorage, getToken } from './store'; |
|
const error = { code: 999, message: '服务器异常!', success: false }; |
|
class Request { |
|
constructor(config) { |
|
var _a, _b, _c, _d, _e, _f; |
|
// 创建axios实例 |
|
this.instance = axios.create(config); |
|
// 默认配置 |
|
this.instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; |
|
// 传入拦截器 |
|
this.interceptorsObj = config.interceptors; |
|
// 3.此处为了多个config传入不同的拦截器 |
|
if ((_a = this.interceptorsObj) === null || _a === void 0 ? void 0 : _a.requestInterceptors) { |
|
this.instance.interceptors.request.use((_b = this.interceptorsObj) === null || _b === void 0 ? void 0 : _b.requestInterceptors, (_c = this.interceptorsObj) === null || _c === void 0 ? void 0 : _c.requestInterceptorsCatch); |
|
} |
|
else { |
|
// default |
|
// Add a request interceptor |
|
this.instance.interceptors.request.use(function (config) { |
|
if (getToken()) { |
|
config.headers.token = getToken(); |
|
} |
|
return config; |
|
}, function (error) { |
|
// Do something with request error |
|
return Promise.reject(error); |
|
}); |
|
} |
|
if ((_d = this.interceptorsObj) === null || _d === void 0 ? void 0 : _d.responseInterceptors) { |
|
this.instance.interceptors.response.use((_e = this.interceptorsObj) === null || _e === void 0 ? void 0 : _e.responseInterceptors, (_f = this.interceptorsObj) === null || _f === void 0 ? void 0 : _f.responseInterceptorsCatch); |
|
} |
|
else { |
|
// default |
|
this.instance.interceptors.response.use(function (response) { |
|
const { data, status } = response; |
|
if (Number(status) === 200) { |
|
return data; |
|
} |
|
return error; |
|
}); |
|
} |
|
this.requestPost = this.requestPost.bind(this); |
|
this.requestTableList = this.requestTableList.bind(this); |
|
this.requestGet = this.requestGet.bind(this); |
|
this.requestExport = this.requestExport.bind(this); |
|
this.requestOptions = this.requestOptions.bind(this); |
|
this.requestTreeOptions = this.requestTreeOptions.bind(this); |
|
} |
|
request(config) { |
|
return new Promise((resolve, reject) => { |
|
var _a; |
|
// 单个请求设置拦截器在这里 |
|
if ((_a = config.interceptors) === null || _a === void 0 ? void 0 : _a.requestInterceptors) { |
|
this.instance.interceptors.request.use(config.interceptors.requestInterceptors); |
|
} |
|
this.instance |
|
.request(config) |
|
.then(res => { |
|
var _a; |
|
// 接口数据响应处理 |
|
if ((_a = config.interceptors) === null || _a === void 0 ? void 0 : _a.responseInterceptors) { |
|
res = config.interceptors.responseInterceptors(res); |
|
} |
|
resolve(res); |
|
}) |
|
.catch((err) => { |
|
// 向上抛出错误 |
|
reject(err); |
|
}); |
|
}); |
|
} |
|
/** |
|
* 发起post请求 |
|
* @param baseURL |
|
* @param url |
|
* @param params |
|
* @return {Promise<AxiosResponse<any>>} |
|
*/ |
|
requestPost(baseURL, url, params) { |
|
const options = { |
|
baseURL, |
|
url, |
|
data: Object.assign({}, noDataFilter(params)), |
|
method: 'post', |
|
withCredentials: false, |
|
transformRequest: [ |
|
function (data) { |
|
return stringify(data, { |
|
strict: false, |
|
}); |
|
}, |
|
], |
|
}; |
|
return this.instance(options).then((result) => { |
|
if (result.code === 0 && result.success) { |
|
return Object.assign(Object.assign({}, result), { type: 'success' }); |
|
} |
|
else { |
|
return Object.assign(Object.assign({}, result), { type: 'error' }); |
|
} |
|
}); |
|
} |
|
/** |
|
*获取table列表数据 |
|
* @param baseURL |
|
* @param url |
|
* @param params |
|
* @return {success:true,total:'100',data:'[]'} |
|
*/ |
|
requestTableList(baseURL, url, params) { |
|
const _params = Object.assign({}, params); |
|
if (_params === null || _params === void 0 ? void 0 : _params.current) { |
|
_params.pageNum = _params.current; |
|
Reflect.deleteProperty(_params, 'current'); |
|
} |
|
const options = { |
|
baseURL, |
|
url, |
|
params: _params, |
|
method: 'get', |
|
withCredentials: false, |
|
}; |
|
return this.instance(options) |
|
.then((result) => { |
|
var _a; |
|
if (!result) { |
|
return null; |
|
} |
|
if (result.code === 0) { |
|
if (isArray(result.data)) { |
|
return { |
|
data: result.data, |
|
total: result.data.length, |
|
success: true, |
|
}; |
|
} |
|
return { |
|
success: true, |
|
total: ((_a = result === null || result === void 0 ? void 0 : result.data) === null || _a === void 0 ? void 0 : _a.total) || 0, |
|
data: result.data.rows, |
|
}; |
|
} |
|
else { |
|
return null; |
|
} |
|
}) |
|
.catch(() => { |
|
return null; |
|
}); |
|
} |
|
/** |
|
* |
|
* @param baseURL |
|
* @param url |
|
* @param params |
|
*/ |
|
requestGet(baseURL, url, params) { |
|
const options = { |
|
baseURL, |
|
url, |
|
params: Object.assign({}, noDataFilter(params)), |
|
method: 'get', |
|
withCredentials: false, |
|
}; |
|
return this.instance(options).then((result) => { |
|
if (result.code === 0 && result.success) { |
|
return result.data; |
|
} |
|
else { |
|
return null; |
|
} |
|
}); |
|
} |
|
/** |
|
* |
|
* @param baseURL |
|
* @param url |
|
* @param params |
|
*/ |
|
requestExport(baseURL, url, params) { |
|
const options = { |
|
baseURL, |
|
url, |
|
params: Object.assign({}, noDataFilter(params)), |
|
method: 'get', |
|
responseType: 'blob', |
|
}; |
|
return this.instance(options); |
|
} |
|
/** |
|
* |
|
* @param api |
|
* @param path |
|
* @param params |
|
* @param keys |
|
* @return {Promise<[{label:'',value:''}]>} |
|
*/ |
|
requestOptions(baseURL, url, params, keys) { |
|
const options = { |
|
baseURL, |
|
url, |
|
params: Object.assign({}, noDataFilter(params)), |
|
method: 'get', |
|
withCredentials: false, |
|
}; |
|
const value = keys[0]; |
|
const label = keys[1]; |
|
return this.instance(options) |
|
.then((result) => { |
|
if (result.code === 0 && result.success) { |
|
if (isArray(result.data)) { |
|
return map(result.data, (item) => { |
|
return Object.assign(Object.assign({}, omit(item, keys)), { value: item[value], label: item[label] }); |
|
}); |
|
} |
|
} |
|
return null; |
|
}) |
|
.catch(() => { |
|
return null; |
|
}); |
|
} |
|
/** |
|
* |
|
* @param baseURL |
|
* @param url |
|
* @param params |
|
* @param keys |
|
*/ |
|
requestTreeOptions(baseURL, url, params, keys) { |
|
const options = { |
|
baseURL, |
|
url, |
|
params: Object.assign({}, noDataFilter(params)), |
|
method: 'get', |
|
withCredentials: false, |
|
}; |
|
return this.instance(options) |
|
.then((result) => { |
|
if (result.code === 0 && result.success) { |
|
if (isArray(result.data)) { |
|
return this.convertTree(result.data, keys); |
|
} |
|
} |
|
return null; |
|
}) |
|
.catch(() => { |
|
return null; |
|
}); |
|
} |
|
/** |
|
* |
|
* @param menu |
|
* @param keys |
|
*/ |
|
convertTree(menu, keys) { |
|
try { |
|
const pid = keys[0]; |
|
const value = keys[1]; |
|
const title = keys[2]; |
|
const children = keys[3] || 'children'; |
|
const convertMenu = (list, parent) => { |
|
if (list.length < 2) { |
|
return list.map((item) => (Object.assign(Object.assign({}, item), { title: item[title], value: item[value], pid: item[pid] }))); |
|
} |
|
return list |
|
.filter((item) => { |
|
if (item[pid] === parent) { |
|
item[children] = convertMenu(list, item[value]); |
|
return true; |
|
} |
|
return false; |
|
}) |
|
.map((item) => (Object.assign(Object.assign({}, item), { title: item[title], value: item[value], pid: item[pid] }))); |
|
}; |
|
return convertMenu(menu, String(getStorage('parentId'))); |
|
} |
|
catch (error) { |
|
console.log(error); |
|
} |
|
} |
|
} |
|
const request = new Request({}); |
|
const requestPost = request.requestPost; |
|
const requestTableList = request.requestTableList; |
|
const requestGet = request.requestGet; |
|
const requestExport = request.requestExport; |
|
const requestOptions = request.requestOptions; |
|
const requestTreeOptions = request.requestTreeOptions; |
|
export { requestPost, requestTableList, requestGet, requestExport, requestOptions, requestTreeOptions };
|
|
|