import type { VxeGridProps } from '#/adapter/vxe-table'; import { computed } from 'vue'; import { getSelectResultList, postFocusesPage, postMetersPage, } from '#/api-client'; import { $t } from '#/locales'; export const querySchema = computed(() => [ { component: 'ApiSelect', fieldName: 'SystemName', label: $t('abp.IoTDBBase.SystemName'), componentProps: { api: getSelectResultList, params: { query: { TypeName: 'BusinessSystemEnum', }, }, 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: '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'] => [ { title: $t('common.seq'), type: 'seq', width: 50 }, { field: 'Timestamps', title: $t('abp.IoTDBBase.Timestamps'), 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'), minWidth: '150', }, { field: 'IoTDataType', title: $t('abp.IoTDBBase.IoTDataType'), minWidth: '150', }, { field: 'DeviceId', title: $t('abp.IoTDBBase.DeviceId'), minWidth: '150', }, ]);