From 25adbec48a7961dd5a5ac3395f605ce23b3a9bc8 Mon Sep 17 00:00:00 2001 From: guke Date: Wed, 8 Jul 2026 16:01:15 +0800 Subject: [PATCH] =?UTF-8?q?feat(coupon-data):=20=E9=A2=86=E5=88=B8?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=9C=8B=E6=9D=BF=E5=8A=A0=E9=A2=86=E5=88=B8?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=A4=9A=E9=80=89=E7=AD=9B=E9=80=89(?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=85=A8=E9=80=89)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 筛选卡加状态多选(未完成/完成/失败/中途退出),默认全选=现状不改口径 - status 数组用 paramsSerializer indexes:null 序列化为 status=a&status=b(对齐 FastAPI list[str]) Co-Authored-By: Claude Opus 4.8 (1M context) --- src/app/(main)/coupon-data/page.tsx | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/app/(main)/coupon-data/page.tsx b/src/app/(main)/coupon-data/page.tsx index c58f01f..659b512 100644 --- a/src/app/(main)/coupon-data/page.tsx +++ b/src/app/(main)/coupon-data/page.tsx @@ -327,6 +327,8 @@ export default function CouponDataPage() { const [range, setRange] = useState<[Dayjs, Dayjs]>([dayjs().subtract(6, 'day'), dayjs()]); const [user, setUser] = useState(''); const [appEnv, setAppEnv] = useState('prod'); + // 领券状态多选(方案 A:整视图联动),默认全选四态(= 现状,不改口径)。 + const [statuses, setStatuses] = useState(['started', 'completed', 'failed', 'abandoned']); const [granularity, setGranularity] = useState<'day' | 'hour'>('day'); const [sortBy, setSortBy] = useState<'time' | 'elapsed'>('time'); const [limit, setLimit] = useState(100); @@ -362,11 +364,14 @@ export default function CouponDataPage() { date_to: to, user: user.trim() || undefined, app_env: appEnv, + status: statuses, granularity: gran, limit: targetLimit, offset: (targetPage - 1) * targetLimit, sort: targetSort, }, + // status 是数组:repeat 无方括号序列化(status=a&status=b),对齐 FastAPI list[str] Query + paramsSerializer: { indexes: null }, }); setData(res.data); // 并行拉「按券成功率」(独立端点,失败不影响主报表) @@ -386,7 +391,7 @@ export default function CouponDataPage() { setLoading(false); } }, - [range, user, appEnv, granularity, limit, sortBy, message], + [range, user, appEnv, statuses, granularity, limit, sortBy, message], ); useEffect(() => { @@ -581,6 +586,18 @@ export default function CouponDataPage() { ]} /> + + 状态 +