Files
offerpai_backend/admin/src/main/resources/static/js/request.js
T
2026-07-10 15:27:16 +08:00

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 });
}
};
})();