diff --git a/vehicle-data-platform/apps/web/src/pages/Dashboard.tsx b/vehicle-data-platform/apps/web/src/pages/Dashboard.tsx index a23c4308..f3ceef0d 100644 --- a/vehicle-data-platform/apps/web/src/pages/Dashboard.tsx +++ b/vehicle-data-platform/apps/web/src/pages/Dashboard.tsx @@ -197,7 +197,7 @@ function focusVehicleFromIssue(row: QualityIssueRow): FocusVehicleService { realtimeEvidence: `来源 ${qualityProtocolLabel(row.protocol)} / 最后 ${row.lastSeen || '-'}`, historyEvidence: filters.dateFrom ? `${filters.dateFrom} 至 ${filters.dateTo}` : '待确认时间窗', alertEvidence: row.detail || qualityIssueLabel(row.issueType), - statisticEvidence: '里程统计需回溯车辆口径', + statisticEvidence: '统计查询需回溯车辆口径', issueType: row.issueType }; } @@ -411,7 +411,7 @@ export function Dashboard({ onClick: () => onOpenHistory() }, { - title: '里程统计', + title: '统计查询', value: `${formatCount(serviceSummary?.totalVehicles)} 辆可统计`, detail: '按自定义时间查询区间里程、日里程和异常记录。', action: '查看统计', @@ -449,9 +449,9 @@ export function Dashboard({ }, { step: '04', - title: '统计里程', + title: '统计查询', detail: '用同一时间窗核对区间里程和每日统计。', - action: '里程统计', + action: '统计查询', onClick: () => onOpenMileage({}) }, { @@ -525,10 +525,10 @@ export function Dashboard({ { title: '按时间窗复盘', value: taskTimeMonitorSummary, - detail: '同一时间窗贯穿轨迹、里程、原始记录和告警,不需要跨页面重复输入。', + detail: '同一时间窗贯穿轨迹、统计、原始记录和告警,不需要跨页面重复输入。', color: 'blue' as const, primaryAction: '轨迹回放', - secondaryAction: '里程统计', + secondaryAction: '统计查询', onPrimary: () => openTimeMonitorHistory(), onSecondary: () => openTimeMonitorMileage() }, @@ -595,10 +595,10 @@ export function Dashboard({ onClick: () => onOpenQuality() }, { - title: '里程统计', + title: '统计查询', status: `统计车辆 ${formatCount(serviceSummary?.totalVehicles)}`, color: 'green' as const, - description: '提供里程等运营统计,保证区间总值与每日统计口径闭合。', + description: '提供里程等运营统计查询,保证区间总值与每日统计口径闭合。', action: '查看统计', onClick: () => onOpenMileage() } @@ -622,7 +622,7 @@ export function Dashboard({ { title: '一车一统计', value: formatCount(serviceSummary?.totalVehicles), - detail: '里程等运营指标按车辆口径闭合,再回溯到来源证据。' + detail: '统计指标按车辆口径闭合,再回溯到来源证据。' } ]; const workflowSteps = [ @@ -670,8 +670,8 @@ export function Dashboard({ title: '统计复核', value: `${formatCount(serviceSummary?.totalVehicles)} 车辆`, color: 'green' as const, - detail: '核对里程统计口径,保证区间统计和每日统计闭合。', - action: '里程统计', + detail: '核对统计查询口径,保证区间统计和每日统计闭合。', + action: '统计查询', onClick: () => onOpenMileage() } ]; @@ -777,13 +777,13 @@ export function Dashboard({ ] }, { - title: '里程统计', + title: '统计查询', value: `${formatCount(serviceSummary?.totalVehicles)} 车辆口径`, meta: '区间闭合复核', color: 'green' as const, - detail: '里程等指标先按车辆口径闭合,再回溯轨迹和原始记录。', + detail: '统计指标先按车辆口径闭合,再回溯轨迹和原始记录。', actions: [ - { label: '打开里程统计', onClick: () => onOpenMileage() }, + { label: '打开统计查询', onClick: () => onOpenMileage() }, { label: '查看车辆中心', onClick: () => onOpenVehicles({}) } ] } @@ -831,7 +831,7 @@ export function Dashboard({ { label: '复盘时间', value: timeMonitorScope().dateFrom || timeMonitorScope().dateTo ? `${timeMonitorScope().dateFrom || '-'} 至 ${timeMonitorScope().dateTo || '-'}` : '全部时间', - detail: '同步带入轨迹、里程、历史证据和告警', + detail: '同步带入轨迹、统计、历史证据和告警', color: 'blue' as const }, { @@ -926,7 +926,7 @@ export function Dashboard({ `范围:${timeMonitorSummary}`, `交付结论:${timeMonitorDeliveryStatus.label};${timeMonitorDeliveryStatus.detail}`, `时间窗判定:${dayRangeText(scope.dateFrom, scope.dateTo)}`, - '平台能力:实时地图 / 轨迹回放 / 里程统计 / 历史数据查询 / 告警通知', + '平台能力:实时地图 / 轨迹回放 / 统计查询 / 历史数据查询 / 告警通知', `车辆范围:${scope.keyword || '全部车辆'}`, `数据通道:${scope.protocol || '全部数据通道'}`, `时间范围:${scope.dateFrom || '-'} 至 ${scope.dateTo || '-'}`, @@ -939,7 +939,7 @@ export function Dashboard({ '下一步动作:', ...timeMonitorDeliveryActions.map((item, index) => `${index + 1}. ${item.label}:${item.value};${item.detail}`), `轨迹回放:${appURL(buildAppHash({ page: 'history', keyword: scope.keyword, protocol: scope.protocol, filters: scope }))}`, - `里程统计:${appURL(buildAppHash({ page: 'mileage', keyword: scope.keyword, protocol: scope.protocol, filters: scope }))}`, + `统计查询:${appURL(buildAppHash({ page: 'mileage', keyword: scope.keyword, protocol: scope.protocol, filters: scope }))}`, `历史数据查询:${appURL(buildAppHash({ page: 'history-query', keyword: scope.keyword, protocol: scope.protocol, filters: rawFilters }))}`, `告警通知:${appURL(buildAppHash({ page: 'alert-events', keyword: scope.keyword, protocol: scope.protocol, filters: scope }))}`, `实时地图:${appURL(buildAppHash({ page: 'map', keyword: scope.keyword, protocol: scope.protocol, filters: scope }))}` @@ -1032,7 +1032,7 @@ export function Dashboard({ owner: '告警 / 统计', evidence: `告警 ${formatCount(summary?.issueVehicles)},统计车辆 ${formatCount(serviceSummary?.totalVehicles)}`, detail: '断链、缺字段、里程异常和离线时长进入通知、统计和复核工作流。', - action: '里程统计', + action: '统计查询', onClick: () => onOpenMileage() } ]; @@ -1078,11 +1078,11 @@ export function Dashboard({ onSecondary: () => onOpenQuality(highPriorityIssue?.issueType ? { issueType: highPriorityIssue.issueType } : {}) }, { - title: '里程统计', + title: '统计查询', objective: '按车辆口径查询里程等指标,保证区间统计和日统计可闭合。', evidence: `车辆口径 ${formatCount(serviceSummary?.totalVehicles)} / 区间统计可追溯轨迹证据`, sla: '统计值必须能追溯轨迹和原始记录', - primaryAction: '里程统计', + primaryAction: '统计查询', secondaryAction: '车辆中心', onPrimary: () => onOpenMileage(), onSecondary: () => onOpenVehicles({}) @@ -1109,7 +1109,7 @@ export function Dashboard({ `轨迹回放:${appURL(buildAppHash({ page: 'history', keyword: highPriorityFilters?.keyword, protocol: highPriorityFilters?.protocol, filters: highPriorityFilters }))}`, `原始记录:${appURL(buildAppHash({ page: 'history-query', keyword: highPriorityFilters?.keyword, protocol: highPriorityFilters?.protocol, filters: { ...highPriorityFilters, tab: 'raw', includeFields: 'true' } }))}`, `告警事件:${appURL(buildAppHash({ page: 'alert-events', filters: highPriorityIssue?.issueType ? { issueType: highPriorityIssue.issueType } : {} }))}`, - `里程统计:${appURL(buildAppHash({ page: 'mileage', keyword: highPriorityLookupKey, protocol: highPriorityIssue?.protocol }))}`, + `统计查询:${appURL(buildAppHash({ page: 'mileage', keyword: highPriorityLookupKey, protocol: highPriorityIssue?.protocol }))}`, `车辆服务:${appURL(buildAppHash({ page: 'detail', keyword: highPriorityLookupKey, protocol: highPriorityIssue?.protocol }))}` ].filter(Boolean); copyText(lines.join('\n'), '运营交接摘要'); @@ -1149,7 +1149,7 @@ export function Dashboard({ `轨迹回放:${appURL(buildAppHash({ page: 'history' }))}`, `历史查询:${appURL(buildAppHash({ page: 'history-query', filters: { tab: 'raw', includeFields: 'true' } }))}`, `告警事件:${appURL(buildAppHash({ page: 'alert-events' }))}`, - `里程统计:${appURL(buildAppHash({ page: 'mileage' }))}`, + `统计查询:${appURL(buildAppHash({ page: 'mileage' }))}`, `运维质量:${appURL(buildAppHash({ page: 'ops-quality' }))}` ]; copyText(lines.join('\n'), '数据流转图'); @@ -1173,7 +1173,7 @@ export function Dashboard({ `实时监控:${appURL(buildAppHash({ page: 'realtime', keyword: focusVehicle.lookupKey, protocol: focusVehicle.protocol }))}`, `轨迹回放:${appURL(buildAppHash({ page: 'history', keyword: focusVehicle.lookupKey, protocol: focusVehicle.protocol }))}`, `原始记录:${appURL(buildAppHash({ page: 'history-query', keyword: focusVehicle.lookupKey, protocol: focusVehicle.protocol, filters: { ...commonFilters, tab: 'raw', includeFields: 'true' } }))}`, - `里程统计:${appURL(buildAppHash({ page: 'mileage', keyword: focusVehicle.lookupKey, protocol: focusVehicle.protocol }))}`, + `统计查询:${appURL(buildAppHash({ page: 'mileage', keyword: focusVehicle.lookupKey, protocol: focusVehicle.protocol }))}`, `告警事件:${appURL(buildAppHash({ page: 'alert-events', keyword: focusVehicle.lookupKey, protocol: focusVehicle.protocol, filters: focusVehicle.issueType ? { issueType: focusVehicle.issueType } : {} }))}` ]; copyText(lines.join('\n'), '重点车辆服务处置卡'); @@ -1274,10 +1274,10 @@ export function Dashboard({ { title: '自定义时间复盘', value: taskTimeMonitorSummary, - detail: '一个时间窗贯穿轨迹回放、里程统计、历史查询和告警复盘,适合客户问询与 BI 核对。', + detail: '一个时间窗贯穿轨迹回放、统计查询、历史查询和告警复盘,适合客户问询与 BI 核对。', color: 'blue' as const, primaryAction: '轨迹复盘', - secondaryAction: '里程统计', + secondaryAction: '统计查询', onPrimary: () => openTimeMonitorHistory(), onSecondary: () => openTimeMonitorMileage() }, @@ -1312,7 +1312,7 @@ export function Dashboard({ { title: '复盘时间', value: dayRangeText(timeMonitorScopeValue.dateFrom, timeMonitorScopeValue.dateTo), - detail: '同一个时间窗贯穿轨迹回放、里程统计、原始记录和告警复盘。', + detail: '同一个时间窗贯穿轨迹回放、统计查询、原始记录和告警复盘。', action: '轨迹回放', color: 'blue' as const, onClick: openTimeMonitorHistory @@ -1347,13 +1347,13 @@ export function Dashboard({ '客户服务路径:', '1. 找车:先按 VIN、车牌、手机号或 OEM 锁定车辆。', '2. 看位置:打开实时地图确认车辆在线、坐标和最新上报。', - '3. 复盘时间:同一时间窗查看轨迹、里程和告警。', + '3. 复盘时间:同一时间窗查看轨迹、统计和告警。', '4. 交付数据:按车辆、时间、字段导出位置历史、原始记录和字段明细。', '5. 闭环异常:告警事件进入通知和处置流程。', `车辆中心:${appURL(buildAppHash({ page: 'vehicles' }))}`, `实时地图:${appURL(buildAppHash({ page: 'map', filters: { online: 'online' } }))}`, `轨迹回放:${appURL(buildAppHash({ page: 'history', keyword: scope.keyword, protocol: scope.protocol, filters: scope }))}`, - `里程统计:${appURL(buildAppHash({ page: 'mileage', keyword: scope.keyword, protocol: scope.protocol, filters: scope }))}`, + `统计查询:${appURL(buildAppHash({ page: 'mileage', keyword: scope.keyword, protocol: scope.protocol, filters: scope }))}`, `历史数据:${appURL(buildAppHash({ page: 'history-query', keyword: scope.keyword, protocol: scope.protocol, filters: rawFilters }))}`, `告警事件:${appURL(buildAppHash({ page: 'alert-events', keyword: scope.keyword, protocol: scope.protocol, filters: scope }))}` ]; @@ -1440,7 +1440,7 @@ export function Dashboard({ { level: focusVehicle ? '单车' : '范围', title: focusVehicle ? '复盘重点车辆' : '选择一辆车复盘', - detail: focusVehicle ? `${focusVehicle.label},${focusVehicle.reason}` : '从车辆中心或地图选择车辆后,进入轨迹、里程和历史证据。', + detail: focusVehicle ? `${focusVehicle.label},${focusVehicle.reason}` : '从车辆中心或地图选择车辆后,进入轨迹、统计和历史证据。', action: focusVehicle ? '车辆服务' : '车辆中心', color: focusVehicle?.statusColor ?? 'blue' as const, onClick: () => focusVehicle?.lookupKey ? onOpenVehicle(focusVehicle.lookupKey, focusVehicle.protocol) : onOpenVehicles({}) @@ -1448,7 +1448,7 @@ export function Dashboard({ { level: '时间窗', title: '按同一范围交付数据', - detail: `${dayRangeText(timeMonitorScopeValue.dateFrom, timeMonitorScopeValue.dateTo)},同步轨迹、里程、历史和告警。`, + detail: `${dayRangeText(timeMonitorScopeValue.dateFrom, timeMonitorScopeValue.dateTo)},同步轨迹、统计、历史和告警。`, action: '复制复盘包', color: 'blue' as const, onClick: copyTimeMonitorReviewPackage @@ -1468,13 +1468,13 @@ export function Dashboard({ { label: '时间窗', value: dayRangeText(timeMonitorScopeValue.dateFrom, timeMonitorScopeValue.dateTo), - detail: '同一时间范围贯穿轨迹、里程、历史和告警。' + detail: '同一时间范围贯穿轨迹、统计、历史和告警。' } ]; return (