完善设备数据查询

This commit is contained in:
ChenYi 2025-07-11 15:46:31 +08:00
parent 3384c9de4e
commit 7abca2781b
3 changed files with 173 additions and 23 deletions

View File

@ -82,6 +82,7 @@
"dataType": "Data Type",
"deviceType": "Device Type",
"deviceId": "Device ID",
"deviceInfo": "Device Info",
"timestamps": "Timestamps",
"manualOrNot": "Manual Operation",
"isTimeout": "Timeout Status",
@ -223,8 +224,7 @@
"DeviceType": "DeviceType",
"pointData": "pointData",
"archivesIssued": "archivesIssued"
}
,
},
"IoTDBBase": {
"SystemName": "SystemName",
"ProjectId": "ProjectId",

View File

@ -81,6 +81,7 @@
"projectId": "项目编码",
"dataType": "数据类型",
"deviceType": "设备类型",
"deviceInfo": "设备信息",
"deviceId": "设备ID",
"timestamps": "时标",
"manualOrNot": "是否手动操作",

View File

@ -2,12 +2,13 @@ import type { VxeGridProps } from '#/adapter/vxe-table';
import { computed } from 'vue';
import dayjs from 'dayjs';
import {
getSelectResultList,
postFocusesPage,
postMetersPage,
} from '#/api-client';
import { $t } from '#/locales';
import { getSelectResultList } from '#/api-client';
export const querySchema = computed(() => [
{
component: 'ApiSelect',
@ -25,7 +26,6 @@ export const querySchema = computed(() => [
optionsPropName: 'options',
immediate: true,
afterFetch: (res: any) => {
console.log('ApiSelect afterFetch result:', res);
// 确保返回的是数组格式
if (Array.isArray(res)) {
return res;
@ -44,9 +44,156 @@ export const querySchema = computed(() => [
},
},
{
component: 'Input',
component: 'ApiSelect',
fieldName: 'DeviceType',
label: $t('abp.IoTDBBase.DeviceType'),
componentProps: {
api: getSelectResultList,
params: {
query: {
TypeName: 'MeterTypeEnum',
},
},
labelField: 'secondValue',
valueField: 'value',
optionsPropName: 'options',
immediate: true,
afterFetch: (res: any) => {
// 确保返回的是数组格式
if (Array.isArray(res)) {
return res;
}
// 如果是包装在 items 中的,提取出来
if (res && Array.isArray(res.items)) {
return res.items;
}
// 如果是包装在 data 中的,提取出来
if (res && Array.isArray(res.data)) {
return res.data;
}
// 如果都不是,返回空数组
return [];
},
},
},
{
component: 'ApiSelect',
fieldName: 'IoTDataType',
label: $t('abp.IoTDBBase.IoTDataType'),
componentProps: {
api: getSelectResultList,
params: {
query: {
TypeName: 'IoTDBDataTypeConst',
},
},
labelField: 'value',
valueField: 'key',
optionsPropName: 'options',
immediate: true,
afterFetch: (res: any) => {
// 确保返回的是数组格式
if (Array.isArray(res)) {
return res;
}
// 如果是包装在 items 中的,提取出来
if (res && Array.isArray(res.items)) {
return res.items;
}
// 如果是包装在 data 中的,提取出来
if (res && Array.isArray(res.data)) {
return res.data;
}
// 如果都不是,返回空数组
return [];
},
},
},
{
component: 'ApiSelect',
fieldName: 'FocusAddress',
label: $t('abp.focus.focusAddress'),
componentProps: {
api: postFocusesPage,
params: {
body: {
pageIndex: 1,
pageSize: 1000, // 获取足够多的数据用于下拉选择
},
},
labelField: 'name',
valueField: 'focusAddress',
optionsPropName: 'options',
immediate: true,
showSearch: true,
allowClear: true,
placeholder: $t('common.pleaseSelect') + $t('abp.focus.focusAddress'),
filterOption: false, // 禁用本地过滤,使用服务端搜索
optionFilterProp: 'label', // 根据 label 进行过滤
afterFetch: (res: any) => {
// 确保返回的是数组格式
if (Array.isArray(res)) {
return res;
}
// 如果是包装在 items 中的,提取出来
if (res && Array.isArray(res.items)) {
return res.items;
}
// 如果是包装在 data 中的,提取出来
if (res && Array.isArray(res.data)) {
return res.data;
}
// 如果是包装在 data.items 中的,提取出来
if (res && res.data && Array.isArray(res.data.items)) {
return res.data.items;
}
// 如果都不是,返回空数组
return [];
},
},
},
{
component: 'ApiSelect',
fieldName: 'DeviceId',
label: $t('abp.log.deviceInfo'),
componentProps: {
api: postMetersPage,
params: {
body: {
pageIndex: 1,
pageSize: 1000, // 获取足够多的数据用于下拉选择
},
},
labelField: 'name',
valueField: 'focusAddress',
optionsPropName: 'options',
immediate: true,
showSearch: true,
allowClear: true,
placeholder: $t('common.pleaseSelect') + $t('abp.log.deviceInfo'),
filterOption: false, // 禁用本地过滤,使用服务端搜索
optionFilterProp: 'label', // 根据 label 进行过滤
afterFetch: (res: any) => {
// 确保返回的是数组格式
if (Array.isArray(res)) {
return res;
}
// 如果是包装在 items 中的,提取出来
if (res && Array.isArray(res.items)) {
return res.items;
}
// 如果是包装在 data 中的,提取出来
if (res && Array.isArray(res.data)) {
return res.data;
}
// 如果是包装在 data.items 中的,提取出来
if (res && res.data && Array.isArray(res.data.items)) {
return res.data.items;
}
// 如果都不是,返回空数组
return [];
},
},
},
]);
export const tableSchema: any = computed((): VxeGridProps['columns'] => [
@ -56,13 +203,16 @@ export const tableSchema: any = computed((): VxeGridProps['columns'] => [
title: $t('abp.IoTDBBase.Timestamps'),
minWidth: '150',
},
{ field: 'SystemName', title: $t('abp.IoTDBBase.SystemName'), minWidth: '150' },
{
field: 'SystemName',
title: $t('abp.IoTDBBase.SystemName'),
minWidth: '150',
},
{
field: 'ProjectId',
title: $t('abp.IoTDBBase.ProjectId'),
minWidth: '150',
}
,
},
{
field: 'DeviceType',
title: $t('abp.IoTDBBase.DeviceType'),
@ -72,11 +222,10 @@ export const tableSchema: any = computed((): VxeGridProps['columns'] => [
field: 'IoTDataType',
title: $t('abp.IoTDBBase.IoTDataType'),
minWidth: '150',
}
,
},
{
field: 'DeviceId',
title: $t('abp.IoTDBBase.DeviceId'),
minWidth: '150',
}
},
]);