完善日志查询

This commit is contained in:
ChenYi 2025-07-11 13:51:31 +08:00
parent 3b3cb9ff34
commit e4fcf728b8
4 changed files with 115 additions and 89 deletions

View File

@ -3197,6 +3197,6 @@ export const postCTWingLogInfoPage = <ThrowOnError extends boolean = false>(
ThrowOnError ThrowOnError
>({ >({
...options, ...options,
url: '/TableModel/OneNETLogInfo', url: '/TableModel/CTWingLogInfo',
}); });
}; };

View File

@ -5096,6 +5096,7 @@ export type IoTDBTreeModelDeviceDataDto = {
export type IoTDBTreeModelDeviceDataPageListResultDto = { export type IoTDBTreeModelDeviceDataPageListResultDto = {
items?: Array<IoTDBTreeModelDeviceDataDto> | null; items?: Array<IoTDBTreeModelDeviceDataDto> | null;
totalCount?: number;
}; };
export type IoTDBTreeModelDeviceDataPageAllResponse = export type IoTDBTreeModelDeviceDataPageAllResponse =
@ -5145,6 +5146,7 @@ export type IoTDBOneNETLogInfoPageListInput = {
}; };
export type IoTDBOneNETLogInfoPageListResult = { export type IoTDBOneNETLogInfoPageListResult = {
items?: Array<OneNETLogInfoDto> | null; items?: Array<OneNETLogInfoDto> | null;
totalCount?: number;
}; };
export type CTWingLogInfoDto = { export type CTWingLogInfoDto = {
@ -5195,4 +5197,5 @@ export type IoTDBCTWingLogInfoDtoPageListInput = {
}; };
export type IoTDBCTWingLogInfoDtoPageListResult = { export type IoTDBCTWingLogInfoDtoPageListResult = {
items?: Array<CTWingLogInfoDto> | null; items?: Array<CTWingLogInfoDto> | null;
totalCount?: number;
}; };

View File

@ -62,11 +62,6 @@ export const tableSchema: any = computed((): VxeGridProps['columns'] => [
title: $t('abp.IoTDBBase.DeviceId'), title: $t('abp.IoTDBBase.DeviceId'),
minWidth: 150, minWidth: 150,
}, },
{
field: 'devicePath',
title: $t('abp.IoTDBBase.DevicePath'),
minWidth: 200,
},
{ {
field: 'platformTenantId', field: 'platformTenantId',
title: $t('abp.CTWingLog.PlatformTenantId'), title: $t('abp.CTWingLog.PlatformTenantId'),
@ -90,7 +85,7 @@ export const tableSchema: any = computed((): VxeGridProps['columns'] => [
{ {
field: 'messageType', field: 'messageType',
title: $t('abp.CTWingLog.MessageType'), title: $t('abp.CTWingLog.MessageType'),
minWidth: 120, minWidth: 180,
}, },
{ {
field: 'protocol', field: 'protocol',
@ -111,13 +106,11 @@ export const tableSchema: any = computed((): VxeGridProps['columns'] => [
field: 'rawMessage', field: 'rawMessage',
title: $t('abp.CTWingLog.RawMessage'), title: $t('abp.CTWingLog.RawMessage'),
minWidth: 200, minWidth: 200,
showOverflow: false,
}, },
{ {
field: 'receivedPayload', field: 'receivedPayload',
title: $t('abp.CTWingLog.ReceivedPayload'), title: $t('abp.CTWingLog.ReceivedPayload'),
minWidth: 200, minWidth: 200,
showOverflow: false,
}, },
{ {
field: 'receivedTime', field: 'receivedTime',

View File

@ -2,16 +2,16 @@
import type { VbenFormProps } from '#/adapter/form'; import type { VbenFormProps } from '#/adapter/form';
import type { VxeGridProps } from '#/adapter/vxe-table'; import type { VxeGridProps } from '#/adapter/vxe-table';
import { computed, nextTick, ref, watch } from 'vue';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
import { nextTick, watch, ref, computed } from 'vue';
import { Page } from '@vben/common-ui'; import { Page } from '@vben/common-ui';
import { useVbenVxeGrid } from '#/adapter/vxe-table'; import { useVbenVxeGrid } from '#/adapter/vxe-table';
import { postTreeModelDeviceDataInfoPage } from '#/api-client'; import { postTreeModelDeviceDataInfoPage } from '#/api-client';
import { querySchema, tableSchema } from './schema';
import { generateDynamicColumns } from './dynamicColumns'; import { generateDynamicColumns } from './dynamicColumns';
import { querySchema } from './schema';
defineOptions({ defineOptions({
name: 'DeviceData', name: 'DeviceData',
@ -29,19 +29,16 @@ const actualTotalCount = ref<number>(0);
// - IoTDBTreeModelDeviceDataDto // - IoTDBTreeModelDeviceDataDto
const fixedColumns = [ const fixedColumns = [
{ title: '序号', type: 'seq', width: 50 }, { title: '序号', type: 'seq', width: 50 },
{ field: 'Timestamps', title: '时间戳', minWidth: 150 },
{ field: 'SystemName', title: '系统名称', minWidth: 150 }, { field: 'SystemName', title: '系统名称', minWidth: 150 },
{ field: 'ProjectId', title: '项目ID', minWidth: 150 }, { field: 'ProjectId', title: '项目ID', minWidth: 150 },
{ field: 'DeviceType', title: '设备类型', minWidth: 150 }, { field: 'DeviceType', title: '设备类型', minWidth: 150 },
{ field: 'IoTDataType', title: 'IoT数据类型', minWidth: 150 }, { field: 'IoTDataType', title: 'IoT数据类型', minWidth: 150 },
{ field: 'DeviceId', title: '设备ID', minWidth: 150 }, { field: 'DeviceId', title: '设备ID', minWidth: 150 },
{ field: 'Timestamps', title: '时间戳', minWidth: 150 },
]; ];
// - 使 // - 使
const allColumns = computed(() => [ const allColumns = computed(() => [...fixedColumns, ...dynamicColumns.value]);
...fixedColumns,
...dynamicColumns.value,
]);
// //
const initDefaultColumns = () => { const initDefaultColumns = () => {
@ -103,7 +100,6 @@ const gridOptions: VxeGridProps<any> = {
}, },
toolbarConfig: { toolbarConfig: {
custom: true, custom: true,
search: true,
}, },
customConfig: { customConfig: {
storage: true, storage: true,
@ -115,7 +111,13 @@ const gridOptions: VxeGridProps<any> = {
ajax: { ajax: {
query: async ({ page }, formValues) => { query: async ({ page }, formValues) => {
console.log('=== API调用开始 ==='); console.log('=== API调用开始 ===');
console.log('请求参数:', { page, formValues, DeviceType, DeviceId, FocusAddress }); console.log('请求参数:', {
page,
formValues,
DeviceType,
DeviceId,
FocusAddress,
});
try { try {
const { data } = await postTreeModelDeviceDataInfoPage({ const { data } = await postTreeModelDeviceDataInfoPage({
@ -131,16 +133,25 @@ const gridOptions: VxeGridProps<any> = {
console.log('API返回的原始数据:', data); console.log('API返回的原始数据:', data);
console.log('数据类型:', typeof data); console.log('数据类型:', typeof data);
console.log('data是否为null/undefined:', data === null || data === undefined); console.log(
'data是否为null/undefined:',
data === null || data === undefined,
);
if (data) { if (data) {
console.log('data.items存在:', !!data.items); console.log('data.items存在:', !!data.items);
console.log('data.items类型:', Array.isArray(data.items) ? 'Array' : typeof data.items); console.log(
'data.items类型:',
Array.isArray(data.items) ? 'Array' : typeof data.items,
);
if (data.items) { if (data.items) {
console.log('data.items长度:', data.items.length); console.log('data.items长度:', data.items.length);
if (data.items.length > 0) { if (data.items.length > 0) {
console.log('第一条数据:', data.items[0]); console.log('第一条数据:', data.items[0]);
console.log('第一条数据的所有字段:', Object.keys(data.items[0])); console.log(
'第一条数据的所有字段:',
Object.keys(data.items[0]),
);
} }
} }
} }
@ -168,51 +179,64 @@ const gridOptions: VxeGridProps<any> = {
}, },
}); });
// APItotalCount // APItotalCount
const currentPageSize = page.pageSize; const currentPageSize = page.pageSize;
const currentItemsCount = data.items ? data.items.length : 0; const currentItemsCount = data.items ? data.items.length : 0;
// //
let estimatedTotalCount = 0; let estimatedTotalCount = 0;
// 使 // 使
if (page.currentPage === 1) { if (page.currentPage === 1) {
if (currentItemsCount === currentPageSize) { if (currentItemsCount === currentPageSize) {
// //
// 使 // 使
estimatedTotalCount = currentPageSize * 2; estimatedTotalCount = currentPageSize * 2;
} else {
//
estimatedTotalCount = currentItemsCount;
}
} else { } else {
// // 使
estimatedTotalCount = currentItemsCount; if (currentItemsCount === currentPageSize) {
//
estimatedTotalCount =
page.currentPage * currentPageSize + currentPageSize;
} else {
//
estimatedTotalCount =
(page.currentPage - 1) * currentPageSize + currentItemsCount;
}
} }
} else {
// 使 //
if (currentItemsCount === currentPageSize) { estimatedTotalCount = Math.max(
// estimatedTotalCount,
estimatedTotalCount = page.currentPage * currentPageSize + currentPageSize; currentItemsCount,
} else { );
//
estimatedTotalCount = (page.currentPage - 1) * currentPageSize + currentItemsCount; //
if (currentItemsCount < currentPageSize) {
actualTotalCount.value = estimatedTotalCount;
console.log('更新缓存的实际总数:', estimatedTotalCount);
} }
}
// const result = {
estimatedTotalCount = Math.max(estimatedTotalCount, currentItemsCount); items: data.items || [],
totalCount: estimatedTotalCount,
// };
if (currentItemsCount < currentPageSize) { console.log('返回给表格的数据:', result);
actualTotalCount.value = estimatedTotalCount; console.log(
console.log('更新缓存的实际总数:', estimatedTotalCount); '估算总数:',
} result.totalCount,
'当前页数据量:',
const result = { result.items.length,
items: data.items || [], );
totalCount: estimatedTotalCount, console.log('分页信息:', {
}; currentPage: page.currentPage,
console.log('返回给表格的数据:', result); pageSize: currentPageSize,
console.log('估算总数:', result.totalCount, '当前页数据量:', result.items.length); });
console.log('分页信息:', { currentPage: page.currentPage, pageSize: currentPageSize }); return result;
return result;
} }
console.log('没有数据或数据为空'); console.log('没有数据或数据为空');
@ -232,23 +256,29 @@ const gridOptions: VxeGridProps<any> = {
const [Grid, gridApi] = useVbenVxeGrid({ formOptions, gridOptions }); const [Grid, gridApi] = useVbenVxeGrid({ formOptions, gridOptions });
// //
watch(() => gridApi?.pagerApi?.currentPage, (newPage, oldPage) => { watch(
console.log('当前页变化:', { newPage, oldPage }); () => gridApi?.pagerApi?.currentPage,
}); (newPage, oldPage) => {
console.log('当前页变化:', { newPage, oldPage });
},
);
watch(() => gridApi?.pagerApi?.pageSize, (newSize, oldSize) => { watch(
console.log('页面大小变化:', { newSize, oldSize }); () => gridApi?.pagerApi?.pageSize,
if (newSize !== oldSize && oldSize) { (newSize, oldSize) => {
console.log('页面大小从', oldSize, '变为', newSize, ',重置到第一页'); console.log('页面大小变化:', { newSize, oldSize });
// if (newSize !== oldSize && oldSize) {
if (actualTotalCount.value > 0 && newSize > actualTotalCount.value) { console.log('页面大小从', oldSize, '变为', newSize, ',重置到第一页');
console.log('新页面大小大于缓存总数,清除缓存'); //
actualTotalCount.value = 0; if (actualTotalCount.value > 0 && newSize > actualTotalCount.value) {
console.log('新页面大小大于缓存总数,清除缓存');
actualTotalCount.value = 0;
}
//
gridApi.pagerApi.currentPage = 1;
} }
// },
gridApi.pagerApi.currentPage = 1; );
}
});
</script> </script>
<template> <template>