98 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			98 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
|  | import buildURL from '../helpers/buildURL' | ||
|  | import buildFullPath from '../core/buildFullPath' | ||
|  | import settle from '../core/settle' | ||
|  | import { isUndefined } from '../utils' | ||
|  | 
 | ||
|  | /** | ||
|  |  * 返回可选值存在的配置 | ||
|  |  * @param {Array} keys - 可选值数组 | ||
|  |  * @param {Object} config2 - 配置 | ||
|  |  * @return {{}} - 存在的配置项 | ||
|  |  */ | ||
|  | const mergeKeys = (keys, config2) => { | ||
|  |     const config = {} | ||
|  |     keys.forEach((prop) => { | ||
|  |         if (!isUndefined(config2[prop])) { | ||
|  |             config[prop] = config2[prop] | ||
|  |         } | ||
|  |     }) | ||
|  |     return config | ||
|  | } | ||
|  | export default (config) => new Promise((resolve, reject) => { | ||
|  |     const fullPath = buildURL(buildFullPath(config.baseURL, config.url), config.params) | ||
|  |     const _config = { | ||
|  |         url: fullPath, | ||
|  |         header: config.header, | ||
|  |         complete: (response) => { | ||
|  |             config.fullPath = fullPath | ||
|  |             response.config = config | ||
|  |             try { | ||
|  |                 // 对可能字符串不是json 的情况容错
 | ||
|  |                 if (typeof response.data === 'string') { | ||
|  |                     response.data = JSON.parse(response.data) | ||
|  |                 } | ||
|  |                 // eslint-disable-next-line no-empty
 | ||
|  |             } catch (e) { | ||
|  |             } | ||
|  |             settle(resolve, reject, response) | ||
|  |         } | ||
|  |     } | ||
|  |     let requestTask | ||
|  |     if (config.method === 'UPLOAD') { | ||
|  |         delete _config.header['content-type'] | ||
|  |         delete _config.header['Content-Type'] | ||
|  |         const otherConfig = { | ||
|  |         // #ifdef MP-ALIPAY
 | ||
|  |             fileType: config.fileType, | ||
|  |             // #endif
 | ||
|  |             filePath: config.filePath, | ||
|  |             name: config.name | ||
|  |         } | ||
|  |         const optionalKeys = [ | ||
|  |         // #ifdef APP-PLUS || H5
 | ||
|  |             'files', | ||
|  |             // #endif
 | ||
|  |             // #ifdef H5
 | ||
|  |             'file', | ||
|  |             // #endif
 | ||
|  |             // #ifdef H5 || APP-PLUS
 | ||
|  |             'timeout', | ||
|  |             // #endif
 | ||
|  |             'formData' | ||
|  |         ] | ||
|  |         requestTask = uni.uploadFile({ ..._config, ...otherConfig, ...mergeKeys(optionalKeys, config) }) | ||
|  |     } else if (config.method === 'DOWNLOAD') { | ||
|  |         // #ifdef H5 || APP-PLUS
 | ||
|  |         if (!isUndefined(config.timeout)) { | ||
|  |             _config.timeout = config.timeout | ||
|  |         } | ||
|  |         // #endif
 | ||
|  |         requestTask = uni.downloadFile(_config) | ||
|  |     } else { | ||
|  |         const optionalKeys = [ | ||
|  |             'data', | ||
|  |             'method', | ||
|  |             // #ifdef H5 || APP-PLUS || MP-ALIPAY || MP-WEIXIN
 | ||
|  |             'timeout', | ||
|  |             // #endif
 | ||
|  |             'dataType', | ||
|  |             // #ifndef MP-ALIPAY
 | ||
|  |             'responseType', | ||
|  |             // #endif
 | ||
|  |             // #ifdef APP-PLUS
 | ||
|  |             'sslVerify', | ||
|  |             // #endif
 | ||
|  |             // #ifdef H5
 | ||
|  |             'withCredentials', | ||
|  |             // #endif
 | ||
|  |             // #ifdef APP-PLUS
 | ||
|  |             'firstIpv4' | ||
|  |         // #endif
 | ||
|  |         ] | ||
|  |         requestTask = uni.request({ ..._config, ...mergeKeys(optionalKeys, config) }) | ||
|  |     } | ||
|  |     if (config.getTask) { | ||
|  |         config.getTask(requestTask, config) | ||
|  |     } | ||
|  | }) |