| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | 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)    }})
 |