From 4742b3db05ff335d1e07e05fdb918f4dad141d24 Mon Sep 17 00:00:00 2001 From: zhouyonggao <1971162852@qq.com> Date: Tue, 23 Dec 2025 11:36:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(api):=20=E4=BB=8EURL=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E4=B8=AD=E8=8E=B7=E5=8F=96token=E5=B9=B6=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=B0=E8=AF=B7=E6=B1=82=E5=A4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增getToken方法,从URL参数中获取token,返回空字符串或token值 - 新增buildHeaders方法,构建请求头并自动添加token字段 - 所有HTTP请求方法(get, post, patch, del)中,统一调用buildHeaders设置请求头 - 在ApiService中暴露getToken方法方便外部调用 - 改进请求流程,确保带token的请求能够正确发送验证信息 --- web/modules/api.js | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/web/modules/api.js b/web/modules/api.js index e48717e..4ac6969 100644 --- a/web/modules/api.js +++ b/web/modules/api.js @@ -49,6 +49,16 @@ const getMobile = () => { return value && String(value).trim() ? String(value).trim() : ''; }; +/** + * 从 URL 参数中获取 token + * @returns {string} token,不存在返回空字符串 + */ +const getToken = () => { + const params = new URLSearchParams(window.location.search || ''); + const value = params.get('token'); + return value && String(value).trim() ? String(value).trim() : ''; +}; + /** * 从 URL 参数中获取商户 ID * @returns {string} 商户 ID,不存在返回空字符串 @@ -97,6 +107,19 @@ const parsePaginatedResponse = (data) => { }; }; +/** + * 预处理请求 headers,添加 token + * @returns {Object} headers 对象 + */ +const buildHeaders = () => { + const headers = { 'Content-Type': 'application/json' }; + const token = getToken(); + if (token) { + headers['token'] = token; + } + return headers; +}; + /** * 通用 GET 请求 * @param {string} endpoint - API 端点 @@ -124,7 +147,9 @@ const get = async (endpoint, options = {}) => { url += (endpoint.includes('?') ? '&' : '?') + queryString; } - const response = await fetch(url); + const response = await fetch(url, { + headers: buildHeaders() + }); if (!response.ok) { throw new Error(`请求失败: ${response.status} ${response.statusText}`); } @@ -149,7 +174,7 @@ const post = async (endpoint, body, options = {}) => { const response = await fetch(url, { method: 'POST', - headers: { 'Content-Type': 'application/json' }, + headers: buildHeaders(), body: JSON.stringify(body) }); @@ -181,10 +206,7 @@ const patch = async (endpoint, body) => { const url = API_BASE + endpoint; const response = await fetch(url, { method: 'PATCH', - headers: { - 'Content-Type': 'application/json', - 'Accept': 'application/json' - }, + headers: buildHeaders(), body: JSON.stringify(body) }); @@ -209,7 +231,10 @@ const del = async (endpoint, options = {}) => { url += (endpoint.includes('?') ? '&' : '?') + 'soft=1'; } - const response = await fetch(url, { method: 'DELETE' }); + const response = await fetch(url, { + method: 'DELETE', + headers: buildHeaders() + }); if (!response.ok) { const errorText = await response.text(); throw new Error(errorText || `请求失败: ${response.status}`); @@ -435,6 +460,7 @@ window.ApiService = { API_BASE, getUserId, getMobile, + getToken, hasOnlyUserId, getMerchantId, buildUserQueryString,