61 lines
1.9 KiB
JavaScript
61 lines
1.9 KiB
JavaScript
/**
|
|
* 统一请求封装
|
|
*/
|
|
const request = (() => {
|
|
const BASE_URL = '/admin';
|
|
|
|
/** 从 cookie 中获取 Token */
|
|
function getToken() {
|
|
const match = document.cookie.match(/(?:^|;\s*)Token=([^;]*)/);
|
|
return match ? match[1] : '';
|
|
}
|
|
|
|
/** 统一请求方法 */
|
|
async function http(url, options = {}) {
|
|
const config = {
|
|
headers: { 'Content-Type': 'application/json', 'Token': getToken(), ...options.headers },
|
|
...options
|
|
};
|
|
const response = await fetch(BASE_URL + url, config);
|
|
|
|
// 401 未登录,跳转登录页
|
|
if (response.status === 401) {
|
|
window.location.href = BASE_URL + '/page/login';
|
|
return Promise.reject('未登录');
|
|
}
|
|
|
|
// 解析响应体
|
|
let result;
|
|
try { result = await response.json(); } catch (e) {
|
|
const msg = 'HTTP ' + response.status + ' 请求失败';
|
|
ElementPlus ? ElementPlus.ElMessage.error(msg) : alert(msg);
|
|
return Promise.reject(msg);
|
|
}
|
|
|
|
// 业务异常:code 不为 "0" 表示失败
|
|
if (result.code !== '0') {
|
|
const msg = result.msg || '请求失败';
|
|
ElementPlus ? ElementPlus.ElMessage.error(msg) : alert(msg);
|
|
return Promise.reject(msg);
|
|
}
|
|
|
|
return result.data;
|
|
}
|
|
|
|
return {
|
|
get(url, params) {
|
|
const query = params ? '?' + new URLSearchParams(params).toString() : '';
|
|
return http(url + query, { method: 'GET' });
|
|
},
|
|
post(url, data) {
|
|
return http(url, { method: 'POST', body: data != null ? JSON.stringify(data) : undefined });
|
|
},
|
|
put(url, data) {
|
|
return http(url, { method: 'PUT', body: JSON.stringify(data) });
|
|
},
|
|
del(url, data) {
|
|
return http(url, { method: 'DELETE', body: data ? JSON.stringify(data) : undefined });
|
|
}
|
|
};
|
|
})();
|