import apiConfig from "./apiConfig"; function handler({success, fail, resolve, reject}){ return { success: res => { if (res.data.status <=100 ) console.error("!!!api response!!! status==="+res.data.status); if (res.data.status && res.data.status > 100 || res.data.status<0) { switch (res.data.status) { case 401: var message = "(●'◡'●)\n请先登录哦"; var code = res.data.status; break; default: var message = res.data.message; var code = res.data.status; } let e = new Error(message); e.code = code; if (fail) fail(e); return reject(e); } if (success) success(res.data); resolve(res.data); }, fail: e => { console.error(e); if ("errMsg" in e) (e = new Error("(⋟﹏⋞)\n网络连接出错了呢")).code = -2; if (!("message" in e)) (e = new Error("(>_<)\n出现了未知错误")).code = -1; console.debug(e); if (fail) { fail(e); } reject(e); } } } export default function ({ name, data:_data = {}, session, success, fail, complete, config:{method,header={}}={}}) { let api = apiConfig; for (var key of name.split(".")) api=api[key]||console.error(`no api named ${key} in apiList`, api); let { url, query={}, form = {}, config:{method:_method,_header={},...config}={}} = api; method = method || _method; console.debug(`call EduCoder api ${name}`, api, arguments[0], "require arguments:",form,query); if(url){ if(url._) url = url[method||"GET"]||url._; url = name.replace(/\.?[^\.]+$|\./g, "/") + url.replace(/\{(.*?)\}/, function (match, k) { return _data[k]||console.error(`${k} was not given in data`, _data) }).replace(/\*/g,key); }else url = name.replace(/\./g, "/"); url = global.config.apiRoot + url + ".json"; header = {..._header,...header}; var data={},param={}; if(form._) form={...form._,...form[method||"GET"]}; if(query._) query={...query._,...query[method||"GET"]}; for(var key in form){ if(key in _data) data[key]=_data[key]; else{ let value = form[key]; if (value!=null) data[key] = value; else if (typeof value == "object") console.error(`${key} was not given in data`, _data); } } for(var key in query){ if (key in _data) param[key] = _data[key]; else { let value = query[key]; if (value!=null) param[key] = value; else if (typeof value == "object") console.error(`${key} was not given in data`, _data); } } let queryStr = Object.keys(param).map(key => `${key}=${param[key]}`).join("&"); if(queryStr) url = url+"?"+queryStr; if(method=="uploadFile"){ console.log("uploadFile") var formData = data; var {name:_name, timeout} = config; if(!_name) _name = Object.keys(formData)[0]; var filePath = formData[_name]; delete formData[_name]; console.log({ url, filePath, name: _name, header, timeout, formData}); return new Promise((resolve, reject)=>{ session.uploadFile({ url, filePath, name:_name, header, timeout, formData,complete, ...handler({success, fail, resolve, reject}) }) }); }else return new Promise((resolve, reject) => { session.request({ url, method, data, header,complete,...handler({success, fail, resolve, reject}) }); }) }