|
|
|
|
import apiConfig, {baseUrl} from "./apiConfig";
|
|
|
|
|
|
|
|
|
|
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={}}={}} = api;
|
|
|
|
|
console.debug(`call EduCoder api ${name}`, api, arguments[0], "require arguments:",form,query);
|
|
|
|
|
if(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 = baseUrl + url + ".json";
|
|
|
|
|
method = method||_method;
|
|
|
|
|
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)
|
|
|
|
|
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)
|
|
|
|
|
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;
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
session.request({
|
|
|
|
|
url, method, data, header,complete,
|
|
|
|
|
success: res => {
|
|
|
|
|
if(res.data.status==1)console.error("!!!api response!!! status===1");
|
|
|
|
|
if (res.data.status&&res.data.status!=1) {
|
|
|
|
|
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 => {
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
}
|