From de35ff5cdaa1e9f3390d529d9aee6eb74a1ad201 Mon Sep 17 00:00:00 2001 From: LIghtJUNction Date: Mon, 30 Mar 2026 01:07:55 +0800 Subject: [PATCH] feat(dashboard): complete redesign of Trace page - TraceDisplayer: new timeline-style layout with vertical track, dot markers, and expandable event cards - TracePage: redesigned topbar with custom toggle switch, removed scoped CSS conflicts - All colors use explicit hex values with !important to ensure visibility across themes - Vue 3 Composition API with shallowRef to avoid reactive overhead --- .../src/components/shared/TraceDisplayer.vue | 910 ++++++++++-------- dashboard/src/views/TracePage.vue | 128 ++- 2 files changed, 574 insertions(+), 464 deletions(-) diff --git a/dashboard/src/components/shared/TraceDisplayer.vue b/dashboard/src/components/shared/TraceDisplayer.vue index 42bd8a900..cc9ccd65c 100644 --- a/dashboard/src/components/shared/TraceDisplayer.vue +++ b/dashboard/src/components/shared/TraceDisplayer.vue @@ -1,462 +1,526 @@ - - - - diff --git a/dashboard/src/views/TracePage.vue b/dashboard/src/views/TracePage.vue index 9bc048575..41916d371 100644 --- a/dashboard/src/views/TracePage.vue +++ b/dashboard/src/views/TracePage.vue @@ -14,7 +14,7 @@ const fetchTraceSettings = async () => { try { const res = await axios.get('/api/trace/settings'); if (res.data?.status === 'ok') { - traceEnabled.value = res.data.data?.trace_enable ?? true; + traceEnabled.value = res.data?.data?.trace_enable ?? true; } } catch (err) { console.error('Failed to fetch trace settings:', err); @@ -27,7 +27,6 @@ const updateTraceSettings = async () => { await axios.post('/api/trace/settings', { trace_enable: traceEnabled.value }); - // Refresh the TraceDisplayer component to reconnect SSE traceDisplayerKey.value += 1; } catch (err) { console.error('Failed to update trace settings:', err); @@ -43,28 +42,26 @@ onMounted(() => {