From 0a80b43804ebbd39978ea11b88c0177c099db4fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E5=BF=B5?= Date: Tue, 15 Sep 2026 17:59:23 +0800 Subject: [PATCH] =?UTF-8?q?fix(admin):=20getVisitors=20=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E6=94=B6=E7=B4=A7=EF=BC=88=E5=93=A8=E5=85=B5?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2=E9=98=B2=E5=81=87=E7=AD=9B=E9=80=89?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit online/is_new/show_bot 后端按字符串哨兵 =="1" 解析(visitors.py _page_visitors), boolean true 会被 axios 序列化成 "true" 而被静默忽略——看起来生效实则未生效。 新增 VisitorListParams 接口把三个开关锁死为字面量 "1",其余筛选字段一并收型。 Co-Authored-By: Claude Code --- admin/src/api/tracker/visitors.ts | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/admin/src/api/tracker/visitors.ts b/admin/src/api/tracker/visitors.ts index c4e6fd3..7ad50ef 100644 --- a/admin/src/api/tracker/visitors.ts +++ b/admin/src/api/tracker/visitors.ts @@ -90,8 +90,31 @@ export interface VisitorListResp { page: number } -/** 访客列表(筛选参数:search/country/device_type/online/is_new/show_bot/date_from/date_to/page) */ -export const getVisitors = (params: Record) => +/** + * 访客列表筛选参数。 + * online/is_new/show_bot 是后端字符串哨兵(仅 "1" 生效,见 visitors.py `_page_visitors`)—— + * 传 boolean true 会被序列化成 "true" 而被静默忽略(假筛选),类型层面直接锁死。 + */ +export interface VisitorListParams { + page?: number + country?: string + device_type?: string + /** 仅 "1" 生效:5 分钟内有行为的在线访客 */ + online?: '1' + /** 仅 "1" 生效:今天首次到访的新访客 */ + is_new?: '1' + /** 仅 "1" 生效:包含爬虫(默认排除) */ + show_bot?: '1' + /** visitor_id / last_ip 前缀模糊匹配 */ + search?: string + /** YYYY-MM-DD(非法值后端宽松忽略) */ + date_from?: string + /** YYYY-MM-DD */ + date_to?: string +} + +/** 访客列表(筛选参数见 VisitorListParams) */ +export const getVisitors = (params: VisitorListParams) => request.get({ url: '/admin/visitors', params }) /** 访客详情(404 时后端返回 visitor_not_found) */