feat(platform): remove default history vehicle

This commit is contained in:
lingniu
2026-07-05 03:17:20 +08:00
parent 1de268942c
commit 8b38b1411d
3 changed files with 44 additions and 9 deletions

View File

@@ -16,7 +16,7 @@ import { Vehicles } from './pages/Vehicles';
export default function App() {
const initialRoute = parseAppHash(window.location.hash);
const initialVehicleKey = initialRoute.keyword || 'LB9A32A24R0LS1426';
const initialVehicleKey = initialRoute.keyword || '';
const [activePage, setActivePage] = useState<PageKey>(initialRoute.page ?? 'dashboard');
const [activeVin, setActiveVin] = useState(initialVehicleKey);
const [analysisVin, setAnalysisVin] = useState(initialVehicleKey);
@@ -351,7 +351,8 @@ export default function App() {
const openHistoryWithFilters = (filters: Record<string, string> = {}) => {
const nextFilters = normalizeHistoryFilterValues(filters);
const nextVin = nextFilters.keyword?.trim() || analysisVin;
const hasKeywordInput = Object.prototype.hasOwnProperty.call(nextFilters, 'keyword');
const nextVin = nextFilters.keyword?.trim() || (hasKeywordInput ? '' : analysisVin);
const nextProtocol = nextFilters.protocol?.trim() ?? activeProtocol;
const nextTab = nextFilters.tab === 'raw' || nextFilters.tab === 'fields' ? nextFilters.tab : 'location';
const nextPage = nextTab === 'raw' || nextTab === 'fields' ? 'history-query' : 'history';
@@ -385,11 +386,9 @@ export default function App() {
const openRawWithFilters = (filters: Record<string, string> = {}) => {
const nextFilters = normalizeHistoryFilterValues(filters);
const nextVin = nextFilters.keyword?.trim() || analysisVin;
const hasKeywordInput = Object.prototype.hasOwnProperty.call(nextFilters, 'keyword');
const nextVin = nextFilters.keyword?.trim() || (hasKeywordInput ? '' : analysisVin);
const nextProtocol = nextFilters.protocol?.trim() ?? activeProtocol;
if (!nextVin) {
return;
}
setAnalysisVin(nextVin);
setActiveProtocol(nextProtocol);
setHistoryTab('raw');

View File

@@ -32,7 +32,6 @@ type RawFieldRow = {
};
const defaultFilters: HistoryFilters = {
keyword: 'LB9A32A24R0LS1426',
includeFields: false
};
@@ -55,6 +54,24 @@ function nextDate(value: string) {
return date.toISOString().slice(0, 10);
}
function todayDateString() {
const date = new Date();
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
function previousDateString(value: string) {
const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(value.trim());
if (!match) return value;
const date = new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3]) - 1);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
function splitFields(value?: string) {
return (value ?? '')
.split(/[\n,]/)
@@ -168,10 +185,24 @@ function analyzeTrajectoryAnomalies(rows: HistoryLocationRow[]): TrajectoryAnoma
}
function mergeInitialFilters(initialVin: string, initialProtocol?: string, initialFilters: Record<string, string> = {}): HistoryFilters {
const hasExplicitFilters = Object.keys(initialFilters).length > 0;
const hasExplicitScope = Boolean(
initialVin?.trim() ||
initialProtocol?.trim() ||
initialFilters.keyword?.trim() ||
initialFilters.protocol?.trim() ||
initialFilters.dateFrom?.trim() ||
initialFilters.dateTo?.trim() ||
initialFilters.fields?.trim()
);
const today = todayDateString();
const defaultDateRange = hasExplicitScope ? {} : {
dateFrom: previousDateString(today),
dateTo: today
};
return {
...defaultFilters,
keyword: initialVin || (hasExplicitFilters ? '' : defaultFilters.keyword),
...defaultDateRange,
keyword: initialVin || '',
protocol: initialProtocol,
...initialFilters,
includeFields: isIncludeFieldsEnabled(initialFilters.includeFields)
@@ -1075,6 +1106,9 @@ export function History({
<Typography.Text type="secondary">
BI
</Typography.Text>
<Typography.Text type="tertiary">
VIN
</Typography.Text>
<Space wrap>
<Button size="small" theme="solid" type="primary" onClick={() => openQueryTab('location')}></Button>
<Button size="small" onClick={() => openQueryTab('raw')}></Button>

View File

@@ -204,6 +204,8 @@ test('exposes AMap operations shortcuts when map key is configured', async () =>
expect(window.location.hash.startsWith('#/history-query')).toBe(true);
expect(new URLSearchParams(window.location.hash.split('?')[1] ?? '').get('tab')).toBe('raw');
expect(await screen.findByRole('heading', { name: '数据导出' })).toBeInTheDocument();
expect(screen.getByText('默认查询最近一天,不预置任何车辆;输入 VIN、车牌或手机号后进入单车证据交付。')).toBeInTheDocument();
expect(screen.queryByDisplayValue('LB9A32A24R0LS1426')).not.toBeInTheDocument();
fireEvent.click(screen.getByRole('button', { name: '顶部里程统计' }));
expect(window.location.hash.startsWith('#/mileage')).toBe(true);
fireEvent.click(await screen.findByRole('button', { name: '顶部告警事件正常' }));