import config, { getHeaders } from './config'; import LocalStorage from '@/LocalStorage'; interface Api { get: (url: string, data?: any) => Promise, post: (url: string, data?: any) => Promise, put: (url: string, data?: any) => Promise, delete: (url: string, data?: any) => Promise, }; const apiGenerator = (): Api => { type Method = 'GET' | 'POST' | 'PUT' | 'DELETE'; function request( method: Method, url: string, data?: any, ): Promise { const options: { header: Object, method: Method, url: string, data?: any, } = { header: getHeaders(), method: method, url: config.baseURL + url, }; if (Object.keys(data).length !== 0) { const params: { [key: string]: any } = {}; for (const key in data) { if (data[key]) { params[key] = data[key]; } } options.data = params; }; return new Promise((resolve, reject) => { uni.request({ ...options, success: (response) => { // HTTP状态码 const statusCode = response.statusCode; if (statusCode === 200) {// 成功信息 const data = response.data as { code: number, data: any }; if (data.code === 200) {// 成功 resolve(data); } else {// 失败 if (data.code === 401) { LocalStorage.clear(); uni.reLaunch({ url: '/pages/login/index/index', success: () => { uni.showToast({ icon: 'none', mask: true, duration: 2000, title: '登录过期', }); } }); reject(); } else { reject(data); } } } else {// 错误信息 uni.showToast({ icon: 'none', mask: true, duration: 2000, title: '服务异常', }); reject(); } }, fail: () => { uni.showToast({ icon: 'none', mask: true, duration: 2000, title: '请求失败', }); reject(); }, }); }); } return { get: (url, data = {}) => { return request('GET', url, data); }, post: (url, data = {}) => { return request('POST', url, data); }, put: (url, data = {}) => { return request('PUT', url, data); }, delete: (url, data = {}) => { return request('DELETE', url, data); }, } }; const api = apiGenerator(); export default api;