53 lines
1.3 KiB
JavaScript
53 lines
1.3 KiB
JavaScript
import $store from "@/store/index";
|
||
import Vue from "vue"
|
||
let prototype = Vue.prototype;
|
||
|
||
function findRule(name) {
|
||
let pos = name.indexOf('.');
|
||
if (pos > 0) {
|
||
let temp, arr = name.split('.');
|
||
for (let i = 0; i < arr.length; i++) {
|
||
if (i == 0) {
|
||
temp = prototype.$apis[arr[i]] || {};
|
||
} else {
|
||
temp = temp[arr[i]] || {};
|
||
}
|
||
}
|
||
return temp;
|
||
}
|
||
|
||
return name;
|
||
}
|
||
|
||
const request = async (args) => {
|
||
let rule = findRule(args.api || {});
|
||
if (JSON.stringify(rule) === "{}") {
|
||
throw "找不到API:" + args.api;
|
||
}
|
||
|
||
if (rule.auth && !$store.state.user.token) {
|
||
$store.commit("user/showLoginModal", true);
|
||
return;
|
||
}
|
||
|
||
const headers = {
|
||
"XX-Wxapp-AppId": prototype.$config.appId,
|
||
'XX-Token': $store.state.user.token,
|
||
'XX-Device-Type': 'wxapp',
|
||
};
|
||
|
||
const [error, response] = await uni.request({
|
||
url: prototype.$config.root + rule.url,
|
||
method: rule.method || 'get',
|
||
data: args.data,
|
||
header: {
|
||
'X-Requested-With': 'XMLHttpRequest',
|
||
'content-type': 'application/x-www-form-urlencoded',
|
||
...headers
|
||
}
|
||
});
|
||
|
||
return Promise.resolve(response.data);
|
||
};
|
||
|
||
export default request |