+
+
+ 客户数据导出
+ {deliveryState}
+
+ {activeTab === 'location' ? '位置历史' : activeTab === 'raw' ? '原始记录' : '字段明细'}
+
+
+ 先锁定车辆和时间窗,再选择交付物并导出
+
+ 面向客户的数据导出以车辆服务为中心:同一个筛选范围可以交付位置历史、RAW证据、字段明细、轨迹复盘和里程复核。
+
+
+
+
+
+
+
+
+
+ {[
+ {
+ step: '01',
+ title: '选择范围',
+ value: currentVehicleKeyword || '全部车辆',
+ detail: `${currentProtocol || '全部来源'} / ${filters.dateFrom || '-'} 至 ${filters.dateTo || '-'}`,
+ action: '调整筛选',
+ color: currentVehicleKeyword ? 'green' as const : 'blue' as const,
+ disabled: false,
+ onClick: () => document.querySelector('input[name="keyword"]')?.focus()
+ },
+ {
+ step: '02',
+ title: '位置历史',
+ value: `${locations.total.toLocaleString()} 条`,
+ detail: `${validLocations.length.toLocaleString()} 个有效坐标,可用于定位复盘和轨迹回放。`,
+ action: '导出位置',
+ color: locations.total > 0 ? 'green' as const : 'grey' as const,
+ disabled: locations.items.length === 0,
+ onClick: exportLocations
+ },
+ {
+ step: '03',
+ title: 'RAW证据',
+ value: `${(rawFrames.total ?? 0).toLocaleString()} 帧`,
+ detail: '保留原始接入记录,用于解释位置、里程和字段来源。',
+ action: '导出RAW',
+ color: (rawFrames.total ?? 0) > 0 ? 'blue' as const : 'grey' as const,
+ disabled: rawFrames.items.length === 0,
+ onClick: exportRawFrames
+ },
+ {
+ step: '04',
+ title: '字段明细',
+ value: `${rawFieldRows.length.toLocaleString()} 个`,
+ detail: selectedFieldCount > 0 ? `已裁剪 ${selectedFieldCount.toLocaleString()} 个字段。` : '需要字段级交付时切换字段明细或填写字段裁剪。',
+ action: '字段明细',
+ color: rawFieldRows.length > 0 ? 'green' as const : 'orange' as const,
+ disabled: false,
+ onClick: () => openQueryTab('fields')
+ },
+ {
+ step: '05',
+ title: '交付说明',
+ value: deliveryState,
+ detail: anomalyTotal > 0 ? `存在 ${anomalyTotal.toLocaleString()} 项质量提示,交付时需说明。` : '当前范围未发现明显轨迹质量提示。',
+ action: '复制交付',
+ color: deliveryStateColor,
+ disabled: false,
+ onClick: copyDeliveryPackage
+ }
+ ].map((item) => (
+
+ ))}
+
+
+ ) : null}