feat(platform): add customer time window presets

This commit is contained in:
lingniu
2026-07-05 19:28:25 +08:00
parent 0bfc47bc1c
commit 0c3c6e7b3d
4 changed files with 142 additions and 26 deletions

View File

@@ -244,6 +244,7 @@ export default function App() {
const updateHistoryFilters = (filters: Record<string, unknown> = {}, tab = historyTab) => {
const hasKeywordInput = Object.prototype.hasOwnProperty.call(filters, 'keyword');
const nextFilters = normalizeHistoryFilterValues(filters);
setCustomerTimeWindow(timeWindowFiltersFromValues(nextFilters));
setHistoryFilters(nextFilters);
if (nextFilters.keyword) {
setAnalysisVin(nextFilters.keyword);
@@ -271,6 +272,7 @@ export default function App() {
const updateMileageFilters = (filters: Record<string, unknown> = {}) => {
const nextFilters = normalizeMileageFilterValues(filters);
setCustomerTimeWindow(timeWindowFiltersFromValues(nextFilters));
setMileageFilters(nextFilters);
if (nextFilters.keyword) {
setAnalysisVin(nextFilters.keyword);
@@ -302,11 +304,13 @@ export default function App() {
};
const updateQualityFilters = (filters: Record<string, string> = {}) => {
setCustomerTimeWindow(timeWindowFiltersFromValues(filters));
setQualityFilters(filters);
replaceQualityHash(filters);
};
const openQuality = (filters: Record<string, string> = {}) => {
setCustomerTimeWindow(timeWindowFiltersFromValues(filters));
setQualityFilters(filters);
setActivePage('alert-events');
replaceQualityHash(filters);
@@ -364,6 +368,7 @@ export default function App() {
const openHistoryWithFilters = (filters: Record<string, string> = {}) => {
const nextFilters = normalizeHistoryFilterValues(filters);
setCustomerTimeWindow(timeWindowFiltersFromValues(nextFilters));
const hasKeywordInput = Object.prototype.hasOwnProperty.call(nextFilters, 'keyword');
const nextVin = nextFilters.keyword?.trim() || (hasKeywordInput ? '' : analysisVin);
const nextProtocol = nextFilters.protocol?.trim() ?? activeProtocol;
@@ -399,6 +404,7 @@ export default function App() {
const openRawWithFilters = (filters: Record<string, string> = {}) => {
const nextFilters = normalizeHistoryFilterValues(filters);
setCustomerTimeWindow(timeWindowFiltersFromValues(nextFilters));
const hasKeywordInput = Object.prototype.hasOwnProperty.call(nextFilters, 'keyword');
const nextVin = nextFilters.keyword?.trim() || (hasKeywordInput ? '' : analysisVin);
const nextProtocol = nextFilters.protocol?.trim() ?? activeProtocol;
@@ -440,6 +446,7 @@ export default function App() {
const openMileageWithFilters = (filters: Record<string, string> = {}) => {
const nextFilters = normalizeMileageFilterValues(filters);
setCustomerTimeWindow(timeWindowFiltersFromValues(nextFilters));
const nextVin = nextFilters.keyword?.trim() || analysisVin;
const nextProtocol = nextFilters.protocol?.trim() ?? activeProtocol;
setAnalysisVin(nextVin);
@@ -453,30 +460,10 @@ export default function App() {
const currentCustomerTaskTimeWindow = () => {
const globalDateFrom = customerTimeWindow.dateFrom?.trim();
const globalDateTo = customerTimeWindow.dateTo?.trim();
if (globalDateFrom || globalDateTo) {
return {
...(globalDateFrom ? { dateFrom: globalDateFrom } : {}),
...(globalDateTo ? { dateTo: globalDateTo } : {})
};
}
const candidates = activePage === 'mileage'
? [mileageFilters, historyFilters, qualityFilters]
: activePage === 'history' || activePage === 'history-query'
? [historyFilters, mileageFilters, qualityFilters]
: activePage === 'alert-events' || activePage === 'quality'
? [qualityFilters, historyFilters, mileageFilters]
: [historyFilters, mileageFilters, qualityFilters];
for (const filters of candidates) {
const dateFrom = filters.dateFrom?.trim();
const dateTo = filters.dateTo?.trim();
if (dateFrom || dateTo) {
return {
...(dateFrom ? { dateFrom } : {}),
...(dateTo ? { dateTo } : {})
};
}
}
return {};
return {
...(globalDateFrom ? { dateFrom: globalDateFrom } : {}),
...(globalDateTo ? { dateTo: globalDateTo } : {})
};
};
const openCustomerTask = (page: PageKey) => {
@@ -555,9 +542,15 @@ export default function App() {
}
function timeWindowFiltersFromRoute(route: ReturnType<typeof parseAppHash>): Record<string, string> {
return timeWindowFiltersFromValues(route.filters ?? {});
}
function timeWindowFiltersFromValues(filters: Record<string, unknown>): Record<string, string> {
const dateFrom = String(filters.dateFrom ?? '').trim();
const dateTo = String(filters.dateTo ?? '').trim();
return {
...(route.filters?.dateFrom ? { dateFrom: route.filters.dateFrom } : {}),
...(route.filters?.dateTo ? { dateTo: route.filters.dateTo } : {})
...(dateFrom ? { dateFrom } : {}),
...(dateTo ? { dateTo } : {})
};
}