From 11b1afd68cafd0b7c00908c11c6004a348a70c5e Mon Sep 17 00:00:00 2001 From: kkfluous Date: Fri, 7 Aug 2026 16:59:02 +0800 Subject: [PATCH] fix: preserve electric drilldown history --- docs/bi-refactor-roadmap.md | 1 + src/modules/energy/ElectricDaily.tsx | 16 +++++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/docs/bi-refactor-roadmap.md b/docs/bi-refactor-roadmap.md index e89e106..801dcda 100644 --- a/docs/bi-refactor-roadmap.md +++ b/docs/bi-refactor-roadmap.md @@ -163,6 +163,7 @@ SUM(fee) / NULLIF(SUM(kwh), 0) - 已完成氢能每日趋势到加氢订单的 URL 下钻、分页和结构化故障状态;待数据源恢复后验收真实明细。 - 已为电能总览与氢能每日趋势柱图统一 Enter/Space 键盘下钻;氢能有效日期柱提供可读名称、焦点和选中反馈。 - 已完成电能全部车辆、日期和订单下钻。 +- 电能每日列表打开新日期订单使用浏览器历史 `pushState`,返回/前进可恢复进入前后的分析状态;筛选调整仍使用 `replaceState`。 - 已完成 ETC 通行记录与结算账单下钻代码、筛选、分页和未同步空状态;待首次真实同步后验收真实数据。 ### 阶段 C:数据可信度 diff --git a/src/modules/energy/ElectricDaily.tsx b/src/modules/energy/ElectricDaily.tsx index b3447d9..c2ce1b0 100644 --- a/src/modules/energy/ElectricDaily.tsx +++ b/src/modules/energy/ElectricDaily.tsx @@ -58,9 +58,9 @@ export default function ElectricDaily() { const selectedDateRef = useRef(selectedDate); selectedDateRef.current = selectedDate; - const commitDrillContext = useCallback((next: ElectricDrillContext) => { + const commitDrillContext = useCallback((next: ElectricDrillContext, mode: 'push' | 'replace' = 'replace') => { const url = buildElectricDrillUrl(window.location, next); - window.history.replaceState(null, '', url); + window.history[mode === 'push' ? 'pushState' : 'replaceState'](null, '', url); setDrillContext(next); }, []); @@ -148,13 +148,14 @@ export default function ElectricDaily() { }; const toggleDate = (date: string) => { + const opening = selectedDate !== date; commitDrillContext({ ...drillContext, vehicleScope, startDate: effectiveRange.start, endDate: effectiveRange.end, - selectedDate: selectedDate === date ? undefined : date, - }); + selectedDate: opening ? date : undefined, + }, opening ? 'push' : 'replace'); }; useEffect(() => { @@ -251,10 +252,13 @@ export default function ElectricDaily() { return (
{selectedDate === d.date && ( -
+
{ordersError ? ( ) : !orders || orders.date !== d.date ? (