diff --git a/src/api/generated/docs/KamiApiCamelOilV1GetPrefetchOrderLogsRes.md b/src/api/generated/docs/KamiApiCamelOilV1GetPrefetchOrderLogsRes.md index 24a57d3..5e872dc 100644 --- a/src/api/generated/docs/KamiApiCamelOilV1GetPrefetchOrderLogsRes.md +++ b/src/api/generated/docs/KamiApiCamelOilV1GetPrefetchOrderLogsRes.md @@ -2,9 +2,11 @@ ## Properties -| Name | Type | Description | Notes | -| -------- | -------------------------------------------------------------------------------------------------- | ------------------ | --------------------------------- | -| **logs** | [**Array<KamiApiCamelOilV1PrefetchOrderLogItem>**](KamiApiCamelOilV1PrefetchOrderLogItem.md) | 预拉取订单日志列表 | [optional] [default to undefined] | +| Name | Type | Description | Notes | +| ------------------- | -------------------------------------------------------------------------------------------------- | ------------------------ | --------------------------------- | +| **logs** | [**Array<KamiApiCamelOilV1PrefetchOrderLogItem>**](KamiApiCamelOilV1PrefetchOrderLogItem.md) | 预拉取订单日志列表 | [optional] [default to undefined] | +| **actualStartTime** | **string** | 实际查询到的最早日志时间 | [optional] [default to undefined] | +| **actualEndTime** | **string** | 实际查询到的最晚日志时间 | [optional] [default to undefined] | ## Example @@ -12,7 +14,9 @@ import { KamiApiCamelOilV1GetPrefetchOrderLogsRes } from './api'; const instance: KamiApiCamelOilV1GetPrefetchOrderLogsRes = { - logs + logs, + actualStartTime, + actualEndTime }; ``` diff --git a/src/api/generated/models/kami-api-camel-oil-v1-get-prefetch-order-logs-res.ts b/src/api/generated/models/kami-api-camel-oil-v1-get-prefetch-order-logs-res.ts index cb379c9..69182af 100644 --- a/src/api/generated/models/kami-api-camel-oil-v1-get-prefetch-order-logs-res.ts +++ b/src/api/generated/models/kami-api-camel-oil-v1-get-prefetch-order-logs-res.ts @@ -21,4 +21,12 @@ export interface KamiApiCamelOilV1GetPrefetchOrderLogsRes { * 预拉取订单日志列表 */ logs?: Array; + /** + * 实际查询到的最早日志时间 + */ + actualStartTime?: string; + /** + * 实际查询到的最晚日志时间 + */ + actualEndTime?: string; } diff --git a/src/views/camel-oil-info/prefetch/components/prefetch-logs.vue b/src/views/camel-oil-info/prefetch/components/prefetch-logs.vue index 3755066..0821b33 100644 --- a/src/views/camel-oil-info/prefetch/components/prefetch-logs.vue +++ b/src/views/camel-oil-info/prefetch/components/prefetch-logs.vue @@ -132,12 +132,11 @@ const formModel = reactive({ }); const logsRenderData = ref([]); -const allLogs = ref([]); -const currentPage = ref(1); -const pageSize = ref(50); const hasMore = ref(true); const logContentRef = ref(); const loadingMore = ref(false); +const currentStartTime = ref(null); // 当前查询的开始时间 +const currentEndTime = ref(null); // 当前查询的结束时间 const generateFormModel = () => { const now = dayjs(); @@ -156,43 +155,60 @@ const formatDateTime = (dateTime: string | undefined): string => { return dayjs(dateTime).format('YYYY-MM-DD HH:mm:ss'); }; -const fetchLogs = async (reset = true) => { - if (!formModel.startTime || !formModel.endTime) { - Message.warning({ - content: '请选择开始时间和结束时间', - closable: true - }); - setLoading(false); - return; - } +const fetchLogs = async ( + reset = true, + startTimeOverride?: string, + endTimeOverride?: string +) => { + let queryStartTime: string; + let queryEndTime: string; if (reset) { + // 初始查询或搜索,使用表单时间 + if (!formModel.startTime || !formModel.endTime) { + Message.warning({ + content: '请选择开始时间和结束时间', + closable: true + }); + setLoading(false); + return; + } + queryStartTime = dayjs(formModel.startTime).format('YYYY-MM-DD HH:mm:ss'); + queryEndTime = dayjs(formModel.endTime).format('YYYY-MM-DD HH:mm:ss'); setLoading(true); } else { + // 继续查询,使用传入的时间覆盖或当前时间往前倒1分钟 + queryStartTime = + startTimeOverride || + dayjs(currentStartTime.value) + .subtract(1, 'minute') + .format('YYYY-MM-DD HH:mm:ss'); + queryEndTime = endTimeOverride || currentStartTime.value!; // 从当前最早时间开始 loadingMore.value = true; } try { const { data } = await jdV2PrefetchClient.apiJdV2PrefetchLogsGet({ - startTime: dayjs(formModel.startTime).format('YYYY-MM-DD HH:mm:ss'), - endTime: dayjs(formModel.endTime).format('YYYY-MM-DD HH:mm:ss') + startTime: queryStartTime, + endTime: queryEndTime }); const newLogs = data.logs || []; + const actualStartTime = data.actualStartTime; + const actualEndTime = data.actualEndTime; if (reset) { - allLogs.value = newLogs; - logsRenderData.value = newLogs.slice(0, pageSize.value); - currentPage.value = 1; - hasMore.value = newLogs.length > pageSize.value; + // 初始查询 + logsRenderData.value = newLogs.reverse(); // 倒序显示,最新的在前面 + currentStartTime.value = actualStartTime || queryStartTime; + currentEndTime.value = actualEndTime || queryEndTime; + hasMore.value = newLogs.length > 0 && actualStartTime !== null; } else { - const nextBatch = newLogs.slice( - currentPage.value * pageSize.value, - (currentPage.value + 1) * pageSize.value - ); - logsRenderData.value.push(...nextBatch); - currentPage.value++; - hasMore.value = currentPage.value * pageSize.value < newLogs.length; + // 继续查询 + logsRenderData.value.push(...newLogs.reverse()); // 倒序显示,追加在后面 + currentStartTime.value = actualStartTime || queryStartTime; + // 如果没有返回更多数据或者实际查询时间没有变化,说明没有更多数据了 + hasMore.value = newLogs.length > 0 && actualStartTime !== null; } } catch (err) { console.error('获取预拉取订单日志失败:', err); @@ -218,14 +234,20 @@ const handleScroll = (event: Event) => { const target = event.target as HTMLElement; const { scrollTop, scrollHeight, clientHeight } = target; - // 当滚动到距离底部50px时加载更多 - if (scrollTop + clientHeight >= scrollHeight - 50) { + // 当滚动到底部(距离底部50px内)时加载更早的日志 + if (scrollHeight - scrollTop <= clientHeight + 50) { loadMoreLogs(); } }; const searchLogs = () => { fetchLogs(true); + // 搜索后重置滚动位置到顶部 + nextTick(() => { + if (logContentRef.value) { + logContentRef.value.scrollTop = 0; + } + }); }; const resetLogs = () => { @@ -242,6 +264,8 @@ onMounted(() => { nextTick(() => { if (logContentRef.value) { logContentRef.value.addEventListener('scroll', handleScroll); + // 初始状态滚动到顶部显示最新日志 + logContentRef.value.scrollTop = 0; } }); });