/** * 统一请求封装 */ 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 }); } }; })();