// 本文件由FirstUI授权予四川政采招投标咨询有限公司(会员ID: 163,营业执照号:91 51 013 1 3 3 2 0 06 1 93 K)专用,请尊重知识产权,勿私下传播,违者追究法律责任。 const base = { //所有配置项,未设置则使用默认值 config() { return { //接口域名,如:https://firstui.cn(如果host为空,则直接使用传入的目标地址url) host: '', // 接口地址:/order/getList(如果host为空,直接传入:https://firstui.cn/order/getList) url: '', //参数 data: {}, //请求头 header: { /* * content-type: * application/x-www-form-urlencoded * application/json */ 'content-type': 'application/json' }, //必须大写 method: 'POST', //大于2000时才生效,否则使用全局配置或者默认值 timeout: 0, dataType: 'json', //是否阻止拦截重复的请求(重复:请求地址url + method + 参数data 一致) prevent: false, //Array 参数data中的key,prevent为true时有效,进行重复请求判断时移除keys中相关参数,如时间戳、随机数等. keys: [], //是否仅返回简要数据:true-仅返回接口数据data,false-返回包含header、statusCode、errMsg、data等数据 brief: false, //String 请求标记,用于中断该请求,不同请求不可重复,只可包含数字、字母、下划线,如:firstui_001 cancelToken: '', showLoading: true, //加载中提示文本,showLoading为true时有效 loadingText: '', errorMsg: '网络不给力,请检查网络设置!', //跨域请求时是否携带凭证(cookies)仅H5支持(HBuilderX 2.6.15+) withCredentials: false, //DNS解析时优先使用ipv4,仅 App-Android 支持 (HBuilderX 2.8.0+) firstIpv4: false, //get请求时参数值为数组时处理方式,可选值:comma-值逗号拼接,repeat-重复参数名,brackets-带中括号参数名,indices-数组下标参数名 arrayFormat: 'comma' } }, getOptions(config) { let options = { ...config }; const keys = ['host', 'timeout', 'prevent', 'keys', 'brief', 'cancelToken', 'showLoading', 'loadingText', 'errorMsg', 'arrayFormat' ]; keys.forEach(item => { delete options[item]; }) return options; }, getParamsHandle(config, arrayFormat) { const options = { ...config } const idx = ['indices', 'repeat', 'brackets'].indexOf(arrayFormat) if (options.data && Object.keys(options.data).length > 0 && idx !== -1) { let params = [] Object.entries(options.data).forEach(([key, value]) => { if (Array.isArray(value)) { let _key = key; if (arrayFormat === 'brackets') { _key = `${key}[]` } value.forEach((item, index) => { if (arrayFormat === 'indices') { _key = `${key}[${index}]` } const val = Object.prototype.toString.call(item) === '[object Object]' ? JSON.stringify(item) : item; params.push(`${_key}=${val}`) }) } else { params.push(`${key}=${value}`) } }) options.url = `${options.url}?${params.join('&')}` options.data = {} } return options; }, merge(a, b) { return Object.assign({}, a, b); }, mergeConfig(defaultConfig, config, init) { let header = base.merge(defaultConfig.header, config.header || {}); let params = base.merge(defaultConfig, config) params.header = header; if (!init) { let url = base.combineURLs(params.host, params.url) params.url = url; } return params; }, //如果host为空,则直接使用传入的目标地址 combineURLs(host, target) { return host ? host.replace(/\s+/g, '') + '/' + target.replace(/\s+/g, '').replace(/^\/+/, '') : target; }, toast(text, duration, success) { text && uni.showToast({ title: text, icon: success ? 'success' : 'none', duration: duration || 2000 }) }, showLoading(title, mask = true) { uni.showLoading({ mask: mask, title: title || '请稍候...' }) } } export default base