feat(platform): refine customer alert evidence copy
This commit is contained in:
@@ -176,7 +176,7 @@ function slaEscalationReport(rows: SlaEscalationRow[], release?: string) {
|
||||
` 问题:${qualityIssueLabel(row.issue.issueType)} / ${row.issue.protocol}`,
|
||||
` 建议动作:${row.issue.actionLabel}`,
|
||||
` 车辆服务:${window.location.origin}${window.location.pathname}${row.issue.vehicleHash}`,
|
||||
` RAW证据:${window.location.origin}${window.location.pathname}${row.issue.rawHash}`
|
||||
` 原始记录:${window.location.origin}${window.location.pathname}${row.issue.rawHash}`
|
||||
].join('\n')) : ['暂无待升级告警'])
|
||||
].join('\n');
|
||||
}
|
||||
@@ -239,7 +239,7 @@ function notificationExecutionMatrixReport(rows: NotificationExecutionRow[], rel
|
||||
` 证据:${row.evidenceText}`,
|
||||
` 动作:${row.issue.actionLabel} - ${row.issue.actionDetail || '-'}`,
|
||||
` 车辆服务:${window.location.origin}${window.location.pathname}${row.issue.vehicleHash}`,
|
||||
` RAW证据:${window.location.origin}${window.location.pathname}${row.issue.rawHash}`
|
||||
` 原始记录:${window.location.origin}${window.location.pathname}${row.issue.rawHash}`
|
||||
].join('\n')) : ['暂无待执行通知'])
|
||||
].join('\n');
|
||||
}
|
||||
@@ -313,7 +313,7 @@ function notificationCoverageReport({
|
||||
'',
|
||||
'管理动作:',
|
||||
'1. P0 命中先确认责任方、渠道和升级窗口是否明确',
|
||||
'2. 证据不完整的车辆先补齐车辆服务、实时、轨迹、RAW 链接',
|
||||
'2. 证据不完整的车辆先补齐车辆服务、实时、轨迹和原始记录链接',
|
||||
'3. 超时或即将升级的告警必须同步业务责任人',
|
||||
'4. 链路异常时优先恢复采集、MySQL、TDEngine、Redis、Kafka 等前置能力'
|
||||
].join('\n');
|
||||
@@ -364,7 +364,7 @@ function priorityIssueDigest(plan: QualityNotificationPlan | null, release?: str
|
||||
` 车辆服务:${window.location.origin}${window.location.pathname}${issue.vehicleHash}`,
|
||||
` 实时定位:${window.location.origin}${window.location.pathname}${issue.realtimeHash}`,
|
||||
` 轨迹证据:${window.location.origin}${window.location.pathname}${issue.historyHash}`,
|
||||
` RAW证据:${window.location.origin}${window.location.pathname}${issue.rawHash}`
|
||||
` 原始记录:${window.location.origin}${window.location.pathname}${issue.rawHash}`
|
||||
].join('\n'))
|
||||
].join('\n');
|
||||
}
|
||||
@@ -398,12 +398,12 @@ function alertEscalationChecklist(plan: QualityNotificationPlan | null, release?
|
||||
`车辆服务:${window.location.origin}${window.location.pathname}${nextIssue.vehicleHash}`,
|
||||
`实时证据:${window.location.origin}${window.location.pathname}${nextIssue.realtimeHash}`,
|
||||
`轨迹证据:${window.location.origin}${window.location.pathname}${nextIssue.historyHash}`,
|
||||
`RAW证据:${window.location.origin}${window.location.pathname}${nextIssue.rawHash}`
|
||||
`原始记录:${window.location.origin}${window.location.pathname}${nextIssue.rawHash}`
|
||||
].join('\n') : '暂无待处置告警',
|
||||
'',
|
||||
'值班动作:',
|
||||
'1. 先处理 P0,无来源/VIN 缺失/存储不可写优先于普通字段缺失',
|
||||
'2. 复制单条通知给责任团队,并同步车辆服务、实时、轨迹、RAW 证据',
|
||||
'2. 复制单条通知给责任团队,并同步车辆服务、实时、轨迹和原始记录',
|
||||
'3. 超过升级窗口未恢复时,按主通知策略升级到业务责任人',
|
||||
'4. 恢复后检查验收口径,并在告警事件页确认不再命中'
|
||||
].join('\n');
|
||||
@@ -435,7 +435,7 @@ function alertNotificationDrillPackage(plan: QualityNotificationPlan | null, hea
|
||||
'',
|
||||
'演练步骤:',
|
||||
'1. 在告警事件页确认 P0/P1 命中数量与本页一致',
|
||||
'2. 对第一条待通知告警打开车辆服务、实时、轨迹、RAW 四类证据',
|
||||
'2. 对第一条待通知告警打开车辆服务、实时、轨迹、原始记录四类证据',
|
||||
'3. 复制单条告警通知给责任团队,记录发送时间',
|
||||
'4. 超过升级窗口仍未恢复时,按策略升级到业务责任人',
|
||||
'5. 恢复后按验收口径复核,并确认告警不再命中',
|
||||
@@ -449,7 +449,7 @@ function alertNotificationDrillPackage(plan: QualityNotificationPlan | null, hea
|
||||
`车辆服务:${window.location.origin}${window.location.pathname}${nextIssue.vehicleHash}`,
|
||||
`实时证据:${window.location.origin}${window.location.pathname}${nextIssue.realtimeHash}`,
|
||||
`轨迹证据:${window.location.origin}${window.location.pathname}${nextIssue.historyHash}`,
|
||||
`RAW证据:${window.location.origin}${window.location.pathname}${nextIssue.rawHash}`
|
||||
`原始记录:${window.location.origin}${window.location.pathname}${nextIssue.rawHash}`
|
||||
].join('\n') : '暂无待通知样例'
|
||||
].join('\n');
|
||||
}
|
||||
@@ -565,7 +565,7 @@ export function NotificationRules() {
|
||||
step: '02',
|
||||
title: '补齐证据',
|
||||
value: `${evidenceCompleteCount}/${priorityIssues.length || 0} 完整`,
|
||||
detail: '通知前必须带上车辆服务、实时监控、轨迹回放和RAW证据链接。',
|
||||
detail: '通知前必须带上车辆服务、实时监控、轨迹回放和原始记录链接。',
|
||||
action: '证据矩阵',
|
||||
color: evidenceCompleteCount === priorityIssues.length ? 'green' as const : 'orange' as const,
|
||||
onClick: () => nextPriorityIssue?.rawHash ? navigateHash(nextPriorityIssue.rawHash) : undefined
|
||||
@@ -766,7 +766,7 @@ export function NotificationRules() {
|
||||
<Button size="small" aria-label="下一步车辆服务" disabled={!nextPriorityIssue.vehicleHash} onClick={() => navigateHash(nextPriorityIssue.vehicleHash)}>车辆服务</Button>
|
||||
<Button size="small" aria-label="下一步实时证据" disabled={!nextPriorityIssue.realtimeHash} onClick={() => navigateHash(nextPriorityIssue.realtimeHash)}>实时证据</Button>
|
||||
<Button size="small" aria-label="下一步轨迹证据" disabled={!nextPriorityIssue.historyHash} onClick={() => navigateHash(nextPriorityIssue.historyHash)}>轨迹证据</Button>
|
||||
<Button size="small" aria-label="下一步RAW证据" disabled={!nextPriorityIssue.rawHash} onClick={() => navigateHash(nextPriorityIssue.rawHash)}>RAW证据</Button>
|
||||
<Button size="small" aria-label="下一步原始记录" disabled={!nextPriorityIssue.rawHash} onClick={() => navigateHash(nextPriorityIssue.rawHash)}>原始记录</Button>
|
||||
</Space>
|
||||
</>
|
||||
) : (
|
||||
@@ -801,7 +801,7 @@ export function NotificationRules() {
|
||||
render: (_: unknown, row: NotificationExecutionRow) => (
|
||||
<Space wrap>
|
||||
<Button size="small" disabled={!row.issue.vehicleHash} onClick={() => navigateHash(row.issue.vehicleHash)}>车辆服务</Button>
|
||||
<Button size="small" disabled={!row.issue.rawHash} onClick={() => navigateHash(row.issue.rawHash)}>RAW证据</Button>
|
||||
<Button size="small" disabled={!row.issue.rawHash} onClick={() => navigateHash(row.issue.rawHash)}>原始记录</Button>
|
||||
<Button size="small" icon={<IconCopy />} onClick={() => copyText(row.issue.notificationText, '告警通知')}>复制通知</Button>
|
||||
</Space>
|
||||
)
|
||||
@@ -846,7 +846,7 @@ export function NotificationRules() {
|
||||
render: (_: unknown, row: SlaEscalationRow) => (
|
||||
<Space wrap>
|
||||
<Button size="small" disabled={!row.issue.vehicleHash} onClick={() => navigateHash(row.issue.vehicleHash)}>车辆服务</Button>
|
||||
<Button size="small" disabled={!row.issue.rawHash} onClick={() => navigateHash(row.issue.rawHash)}>RAW证据</Button>
|
||||
<Button size="small" disabled={!row.issue.rawHash} onClick={() => navigateHash(row.issue.rawHash)}>原始记录</Button>
|
||||
<Button size="small" icon={<IconCopy />} onClick={() => copyText(row.issue.notificationText, '告警通知')}>复制通知</Button>
|
||||
</Space>
|
||||
)
|
||||
@@ -924,7 +924,7 @@ export function NotificationRules() {
|
||||
<Button size="small" disabled={!row.vehicleHash} onClick={() => navigateHash(row.vehicleHash)}>车辆服务</Button>
|
||||
<Button size="small" disabled={!row.realtimeHash} onClick={() => navigateHash(row.realtimeHash)}>实时</Button>
|
||||
<Button size="small" disabled={!row.historyHash} onClick={() => navigateHash(row.historyHash)}>轨迹</Button>
|
||||
<Button size="small" disabled={!row.rawHash} onClick={() => navigateHash(row.rawHash)}>RAW</Button>
|
||||
<Button size="small" disabled={!row.rawHash} onClick={() => navigateHash(row.rawHash)}>原始</Button>
|
||||
<Button size="small" aria-label="复制单条告警通知" icon={<IconCopy />} onClick={() => copyText(row.notificationText, '告警通知')}>复制通知</Button>
|
||||
</Space>
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user