fix(log-center): ES 时间戳双字段兼容 + AI助手按钮去重清理

This commit is contained in:
attacker committed 2026-06-27 16:31:06 +08:00
1 parent 36bd0a6155
commit 084a3be2cf
4 files changed
+74 -207

No files matched your search

@@ -166,6 +166,7 @@ export function UnifiedQueryPanel({ engine, onRuleCreated }: Props) {
const [historyPanelOpen, setHistoryPanelOpen] = useState(false);
const [alertDialogOpen, setAlertDialogOpen] = useState(false);
const [saveMenuOpen, setSaveMenuOpen] = useState(false);
const [hasQueried, setHasQueried] = useState(false);
// 数据源切换后更新 dsId // Logan.Li
useEffect(() => {
@@ -194,7 +195,7 @@ export function UnifiedQueryPanel({ engine, onRuleCreated }: Props) {
const mock = generateMockEntries(effEngine as LogEngine, 120);
setEntries(mock); setHistogramData(generateHistogramData(mock)); setTotalCount(mock.length * 14);
setQueryTime(Math.round(performance.now() - t0)); setStatTable(generateMockStatTable(effEngine as LogEngine));
setClusters(generateMockClusters()); setPage(1); setLoading(false);
setClusters(generateMockClusters()); setPage(1); setLoading(false); setHasQueried(true);
historyStorage.add({ engine: effEngine as LogEngine, datasourceName: currentSource.name, query, timeRange: timeRange.label, resultCount: mock.length });
}, 300);
return;
@@ -243,10 +244,11 @@ export function UnifiedQueryPanel({ engine, onRuleCreated }: Props) {
setStatTable(generateMockStatTable(effEngine as LogEngine));
setClusters(generateMockClusters());
setPage(1);
setHasQueried(true);
historyStorage.add({ engine: effEngine as LogEngine, datasourceName: currentSource.name, query, timeRange: timeRange.label, resultCount: mapped.length });
} catch (e: any) {
toast({ title: '查询失败', description: e?.message || String(e), variant: 'destructive' });
setEntries([]); setTotalCount(0);
setEntries([]); setTotalCount(0); setHasQueried(true);
} finally {
setLoading(false);
}
@@ -373,13 +375,31 @@ export function UnifiedQueryPanel({ engine, onRuleCreated }: Props) {
</div>
)}
{/* 空状态 */}
{!loading && entries.length === 0 && (
{/* 空状态:从未查询 vs 查询返回 0 结果 */}
{!loading && entries.length === 0 && !hasQueried && (
<div className="border rounded-lg flex flex-col items-center justify-center gap-2" style={{ borderColor: 'var(--dg-border)', minHeight: '300px' }}>
<span className="text-sm" style={{ color: 'var(--dg-text-muted)' }}>输入查询语句并点击「查询」查看结果</span>
<span className="text-xs font-mono px-3 py-1 rounded" style={{ color: 'var(--dg-text-muted)', background: 'var(--dg-bg-tertiary)' }}>{meta.queryPlaceholder}</span>
</div>
)}
{!loading && entries.length === 0 && hasQueried && (
<div className="border rounded-lg flex flex-col items-center justify-center gap-3" style={{ borderColor: 'var(--dg-border)', minHeight: '300px' }}>
<div className="w-12 h-12 rounded-full flex items-center justify-center" style={{ background: 'var(--dg-bg-tertiary)' }}>
<svg className="h-6 w-6" style={{ color: 'var(--dg-text-muted)' }} fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={1.5}>
<path strokeLinecap="round" strokeLinejoin="round" d="M21 21l-5.197-5.197m0 0A7.5 7.5 0 105.196 5.196a7.5 7.5 0 0010.607 10.607z" />
</svg>
</div>
<div className="text-center">
<p className="text-sm font-medium" style={{ color: 'var(--dg-text-primary)' }}>未找到匹配的日志记录</p>
<p className="text-xs mt-1" style={{ color: 'var(--dg-text-muted)' }}>
查询已执行({queryTime}ms),但当前时间范围和筛选条件下无匹配结果
</p>
</div>
<button onClick={handleRun} className="px-4 py-1.5 rounded text-xs font-medium text-white transition-opacity hover:opacity-90" style={{ background: '#22c55e' }}>
<Play className="h-3.5 w-3.5 inline mr-1" />重新查询
</button>
</div>
)}
{/* Loading */}
{loading && entries.length === 0 && (