diff --git a/vehicle-data-platform/apps/web/src/v2/pages/AccessPage.test.tsx b/vehicle-data-platform/apps/web/src/v2/pages/AccessPage.test.tsx index ccc695ea..0eb6906c 100644 --- a/vehicle-data-platform/apps/web/src/v2/pages/AccessPage.test.tsx +++ b/vehicle-data-platform/apps/web/src/v2/pages/AccessPage.test.tsx @@ -212,6 +212,8 @@ test('renders mobile access vehicles as selectable Semi cards', async () => { expect(within(filterDialog).getByRole('combobox', { name: '接入状态' })).toBeInTheDocument(); expect(within(filterDialog).getByRole('combobox', { name: '真实协议' })).toBeInTheDocument(); expect(within(filterDialog).getByRole('combobox', { name: '车辆品牌' })).toBeInTheDocument(); + fireEvent.click(within(filterDialog).getByRole('button', { name: '重置条件' })); + expect(screen.getByRole('dialog', { name: '接入车辆筛选' })).toBeInTheDocument(); fireEvent.click(within(filterDialog).getByRole('combobox', { name: '接入状态' })); const attentionOption = (await screen.findAllByText('需关注')).find((element) => element.classList.contains('semi-select-option-text')); expect(attentionOption).toBeInTheDocument(); diff --git a/vehicle-data-platform/apps/web/src/v2/pages/AccessPage.tsx b/vehicle-data-platform/apps/web/src/v2/pages/AccessPage.tsx index db94ff96..5e7d1ee9 100644 --- a/vehicle-data-platform/apps/web/src/v2/pages/AccessPage.tsx +++ b/vehicle-data-platform/apps/web/src/v2/pages/AccessPage.tsx @@ -358,6 +358,7 @@ export default function AccessPage() { const syncURL = (filters: Filters) => { const next = new URLSearchParams(); Object.entries(filters).forEach(([key, value]) => { if (value) next.set(key, value); }); setSearchParams(next, { replace: true }); }; const apply = (next: Filters) => { setDraft(next); setCriteria(next); setOffset(0); setSelectedVIN(''); syncURL(next); }; const applyDraft = () => { apply(draft); setFiltersCollapsed(true); }; + const resetMobileDraft = () => setDraft(EMPTY_FILTERS); const resetFilters = () => { apply(EMPTY_FILTERS); setFiltersCollapsed(true); }; const submit = (event: FormEvent) => { event.preventDefault(); applyDraft(); }; const page = Math.floor(offset / limit) + 1; const totalPages = Math.max(1, Math.ceil((vehiclesQuery.data?.total ?? 0) / limit)); const summary = summaryQuery.data; @@ -424,7 +425,7 @@ export default function AccessPage() { title="筛选接入车辆" description="车辆、接入状态、真实协议与品牌" onCancel={() => setFiltersCollapsed(true)} - secondaryAction={{ label: '重置条件', onClick: resetFilters }} + secondaryAction={{ label: '重置条件', onClick: resetMobileDraft }} primaryAction={{ label: '应用并查询', onClick: applyDraft }} >
diff --git a/vehicle-data-platform/apps/web/src/v2/pages/AlertsPage.test.tsx b/vehicle-data-platform/apps/web/src/v2/pages/AlertsPage.test.tsx index beb83582..63eea82e 100644 --- a/vehicle-data-platform/apps/web/src/v2/pages/AlertsPage.test.tsx +++ b/vehicle-data-platform/apps/web/src/v2/pages/AlertsPage.test.tsx @@ -326,6 +326,8 @@ test('uses one focused Semi bottom SideSheet for the complete mobile event filte expect(within(dialog).getByRole('combobox', { name: '协议' })).toBeInTheDocument(); expect(within(dialog).getByLabelText('告警起始时间')).toBeInTheDocument(); expect(within(dialog).getByLabelText('告警结束时间')).toBeInTheDocument(); + fireEvent.click(within(dialog).getByRole('button', { name: '重置条件' })); + expect(screen.getByRole('dialog', { name: '告警事件筛选' })).toBeInTheDocument(); fireEvent.click(within(dialog).getByRole('combobox', { name: '协议' })); fireEvent.click(await screen.findByText('JT808')); fireEvent.click(within(dialog).getByRole('button', { name: '应用并查询' })); diff --git a/vehicle-data-platform/apps/web/src/v2/pages/AlertsPage.tsx b/vehicle-data-platform/apps/web/src/v2/pages/AlertsPage.tsx index 8f163909..e9216e02 100644 --- a/vehicle-data-platform/apps/web/src/v2/pages/AlertsPage.tsx +++ b/vehicle-data-platform/apps/web/src/v2/pages/AlertsPage.tsx @@ -200,6 +200,7 @@ function EventWorkspace({ filters, draft, setDraft, setFilters, rules, unread, e setFiltersCollapsed(true); }; const submit = (e: FormEvent) => { e.preventDefault(); applyDraft(); }; + const resetMobileDraft = () => setDraft(EMPTY_FILTERS); const resetFilters = () => { setDraft(EMPTY_FILTERS); setFilters(EMPTY_FILTERS); @@ -256,7 +257,7 @@ function EventWorkspace({ filters, draft, setDraft, setFilters, rules, unread, e title="筛选告警事件" description="车辆、状态、规则与时间范围" onCancel={() => setFiltersCollapsed(true)} - secondaryAction={{ label: '重置条件', onClick: resetFilters }} + secondaryAction={{ label: '重置条件', onClick: resetMobileDraft }} primaryAction={{ label: '应用并查询', onClick: applyDraft }} > diff --git a/vehicle-data-platform/apps/web/src/v2/pages/HistoryPage.test.tsx b/vehicle-data-platform/apps/web/src/v2/pages/HistoryPage.test.tsx index ed16b1e1..f1f40437 100644 --- a/vehicle-data-platform/apps/web/src/v2/pages/HistoryPage.test.tsx +++ b/vehicle-data-platform/apps/web/src/v2/pages/HistoryPage.test.tsx @@ -219,6 +219,8 @@ test('uses one focused Semi bottom SideSheet for the complete mobile history que expect(within(dialog).getByLabelText('结束时间')).toBeInTheDocument(); expect(within(dialog).getByRole('combobox', { name: '数据类型' })).toBeInTheDocument(); expect(within(dialog).getByRole('combobox', { name: '数据来源' })).toBeInTheDocument(); + fireEvent.click(within(dialog).getByRole('button', { name: '重置条件' })); + expect(screen.getByRole('dialog', { name: '历史查询范围' })).toBeInTheDocument(); fireEvent.change(within(dialog).getByPlaceholderText('车牌 / VIN,多台用逗号分隔'), { target: { value: 'MOBILEVIN' } }); fireEvent.click(within(dialog).getByRole('button', { name: '应用并查询' })); diff --git a/vehicle-data-platform/apps/web/src/v2/pages/HistoryPage.tsx b/vehicle-data-platform/apps/web/src/v2/pages/HistoryPage.tsx index 9848eb23..8331e8e8 100644 --- a/vehicle-data-platform/apps/web/src/v2/pages/HistoryPage.tsx +++ b/vehicle-data-platform/apps/web/src/v2/pages/HistoryPage.tsx @@ -359,6 +359,7 @@ export default function HistoryPage() { setSearchParams(preserveMonitorReturn(url, monitorReturn), { replace: true }); }; const submit = (event: FormEvent) => { event.preventDefault(); applyDraft(); }; + const resetDraft = () => setDraft({ keywords: '', ...currentHistoryWindow(), category: 'location', protocol: '' }); const reset = () => { const next = { keywords: '', ...currentHistoryWindow(), category: 'location', protocol: '' }; setDraft(next); setCriteria(next); setOffset(0); setFiltersCollapsed(true); setSearchParams(preserveMonitorReturn(new URLSearchParams(), monitorReturn), { replace: true }); }; const toggleMetric = (key: string) => setVisibleByCategory((current) => { const baseline = current[criteria.category] ?? allMetrics.filter((metric) => metric.defaultVisible).map((metric) => metric.key); @@ -439,7 +440,7 @@ export default function HistoryPage() { title="筛选历史数据" description="车辆、时间、数据类型与协议来源" onCancel={() => setFiltersCollapsed(true)} - secondaryAction={{ label: '重置条件', onClick: reset }} + secondaryAction={{ label: '重置条件', onClick: resetDraft }} primaryAction={{ label: '应用并查询', disabled: !parseHistoryKeywords(draft.keywords).length, onClick: applyDraft }} > diff --git a/vehicle-data-platform/apps/web/src/v2/pages/UsersPage.test.tsx b/vehicle-data-platform/apps/web/src/v2/pages/UsersPage.test.tsx index 56936a77..a69ed8e4 100644 --- a/vehicle-data-platform/apps/web/src/v2/pages/UsersPage.test.tsx +++ b/vehicle-data-platform/apps/web/src/v2/pages/UsersPage.test.tsx @@ -278,6 +278,9 @@ test('applies mobile customer filters explicitly and discards unconfirmed draft fireEvent.click(screen.getByRole('button', { name: '修改账号范围:全部状态 · 西部' })); fireEvent.click(screen.getByRole('button', { name: '重置条件' })); + expect(screen.getByRole('dialog', { name: '客户账号筛选' })).toBeInTheDocument(); + expect(screen.getByRole('button', { name: '关闭账号范围:全部状态 · 西部' })).toHaveAttribute('aria-expanded', 'true'); + fireEvent.click(screen.getByRole('button', { name: '应用筛选' })); await waitFor(() => expect(screen.getByRole('button', { name: /选择客户 华东客户/ })).toBeInTheDocument()); expect(screen.getByRole('button', { name: /选择客户 西部客户/ })).toBeInTheDocument(); expect(screen.getByRole('button', { name: '修改账号范围:全部状态' })).toBeInTheDocument(); diff --git a/vehicle-data-platform/apps/web/src/v2/pages/UsersPage.tsx b/vehicle-data-platform/apps/web/src/v2/pages/UsersPage.tsx index 3185fb5b..a5ced69d 100644 --- a/vehicle-data-platform/apps/web/src/v2/pages/UsersPage.tsx +++ b/vehicle-data-platform/apps/web/src/v2/pages/UsersPage.tsx @@ -358,12 +358,9 @@ export default function UsersPage() { setCustomerStatus(draftCustomerStatus); setFiltersCollapsed(true); }; - const resetMobileFilters = () => { + const resetMobileDraft = () => { setDraftCustomerKeyword(''); setDraftCustomerStatus('all'); - setCustomerKeyword(''); - setCustomerStatus('all'); - setFiltersCollapsed(true); }; const submitMobileFilters = (event: FormEvent) => { event.preventDefault(); @@ -398,7 +395,7 @@ export default function UsersPage() { title="筛选客户账号" description="按账号信息与权限状态缩小客户范围" onCancel={closeMobileFilters} - secondaryAction={{ label: '重置条件', onClick: resetMobileFilters }} + secondaryAction={{ label: '重置条件', onClick: resetMobileDraft }} primaryAction={{ label: '应用筛选', onClick: applyMobileFilters }} > diff --git a/vehicle-data-platform/apps/web/src/v2/pages/VehiclePage.test.tsx b/vehicle-data-platform/apps/web/src/v2/pages/VehiclePage.test.tsx index 17eb680d..1c2fc2c8 100644 --- a/vehicle-data-platform/apps/web/src/v2/pages/VehiclePage.test.tsx +++ b/vehicle-data-platform/apps/web/src/v2/pages/VehiclePage.test.tsx @@ -288,6 +288,9 @@ test('keeps the mobile vehicle directory primary and applies search from a Semi fireEvent.click(screen.getByRole('button', { name: `修改车辆范围:${items[0].plate} · 10 辆匹配` })); fireEvent.click(screen.getByRole('button', { name: '重置范围' })); + expect(screen.getByRole('dialog', { name: '车辆搜索' })).toBeInTheDocument(); + expect(screen.getByRole('button', { name: `关闭车辆范围:${items[0].plate} · 10 辆匹配` })).toHaveAttribute('aria-expanded', 'true'); + fireEvent.click(screen.getByRole('button', { name: '应用搜索' })); await waitFor(() => expect(screen.getByRole('button', { name: '修改车辆范围:10 辆授权车辆' })).toBeInTheDocument()); expect(screen.getByRole('heading', { name: '授权车辆', level: 5 })).toBeInTheDocument(); }); diff --git a/vehicle-data-platform/apps/web/src/v2/pages/VehicleSearchWorkspace.tsx b/vehicle-data-platform/apps/web/src/v2/pages/VehicleSearchWorkspace.tsx index 50f6ab53..503ee1b0 100644 --- a/vehicle-data-platform/apps/web/src/v2/pages/VehicleSearchWorkspace.tsx +++ b/vehicle-data-platform/apps/web/src/v2/pages/VehicleSearchWorkspace.tsx @@ -135,12 +135,9 @@ export default function VehicleSearchWorkspace() { setCandidatesOpen(false); setFiltersCollapsed(true); }; - const resetMobileFilters = () => { + const resetMobileDraft = () => { setDraftKeyword(''); - setKeyword(''); - setPage(1); setCandidatesOpen(false); - setFiltersCollapsed(true); }; const submit = (event: FormEvent) => { event.preventDefault(); @@ -183,7 +180,7 @@ export default function VehicleSearchWorkspace() { title="查找车辆" description="车牌优先,支持 VIN 与终端手机号" onCancel={closeMobileFilters} - secondaryAction={{ label: '重置范围', onClick: resetMobileFilters }} + secondaryAction={{ label: '重置范围', onClick: resetMobileDraft }} primaryAction={{ label: '应用搜索', onClick: applyMobileFilters }} > diff --git a/vehicle-data-platform/apps/web/src/v2/shared/MobileFilterSheet.test.tsx b/vehicle-data-platform/apps/web/src/v2/shared/MobileFilterSheet.test.tsx index 64e24bcf..790235fd 100644 --- a/vehicle-data-platform/apps/web/src/v2/shared/MobileFilterSheet.test.tsx +++ b/vehicle-data-platform/apps/web/src/v2/shared/MobileFilterSheet.test.tsx @@ -28,6 +28,7 @@ test('renders one shared Semi filter sheet with consistent title, section and ac expect(screen.getByText('按车辆和状态缩小范围')).toBeInTheDocument(); expect(screen.getByRole('region', { name: '车辆条件' })).toHaveTextContent('支持车牌或 VIN'); fireEvent.click(screen.getByRole('button', { name: '重置条件' })); + expect(screen.getByRole('dialog', { name: '测试筛选' })).toBeInTheDocument(); fireEvent.click(screen.getByRole('button', { name: '应用并查询' })); expect(onReset).toHaveBeenCalledTimes(1); expect(onApply).toHaveBeenCalledTimes(1);