diff --git a/admin/src/hooks/core/useTable.ts b/admin/src/hooks/core/useTable.ts index 3506519..c29c402 100644 --- a/admin/src/hooks/core/useTable.ts +++ b/admin/src/hooks/core/useTable.ts @@ -404,14 +404,13 @@ function useTableImpl Promise>( return { records: [], total: 0, current: 1, size: 10 } } - if (!superseded) { - // 状态机:请求失败,进入 error 状态 - loadingState.value = 'error' - data.value = [] - } if (superseded) { // 旧请求的失败交给新请求兜底,不触发错误回调 throw err instanceof Error ? err : new Error(String(err)) + } else { + // 状态机:请求失败,进入 error 状态 + loadingState.value = 'error' + data.value = [] } const tableError = handleError(err, '获取表格数据失败') throw tableError diff --git a/admin/src/utils/tracker/index.ts b/admin/src/utils/tracker/index.ts index a56a957..d9d1800 100644 --- a/admin/src/utils/tracker/index.ts +++ b/admin/src/utils/tracker/index.ts @@ -51,7 +51,7 @@ export const formatStay = (ms?: number | null): string => { if (days) parts.push(`${days}天`) if (hours) parts.push(`${hours}小时`) if (minutes) parts.push(`${minutes}分`) - // 秒恒显示(含 0),避免"0秒/不足 1 秒"整行变空 + // 仅当非零或无更高单位时显示秒(与下方条件表达式语义一致) if (seconds || !parts.length) parts.push(`${seconds}秒`) return parts.join('') } diff --git a/admin/src/views/tracker/visitor/detail.vue b/admin/src/views/tracker/visitor/detail.vue index fc96909..e7608bd 100644 --- a/admin/src/views/tracker/visitor/detail.vue +++ b/admin/src/views/tracker/visitor/detail.vue @@ -1,10 +1,619 @@ + + + +