完善日志查询

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
>({
...options,
url: '/TableModel/OneNETLogInfo',
url: '/TableModel/CTWingLogInfo',
});
};

View File

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

View File

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

View File

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