feat:【IoT 物联网】物模型数据使用 NVARCHAR 存储,并兼容 struct、array 等数据结构
							parent
							
								
									4af1875001
								
							
						
					
					
						commit
						1281ff62ba
					
				|  | @ -89,7 +89,7 @@ | |||
|                 <!-- 数据图标 - 可点击 --> | ||||
|                 <div | ||||
|                   class="cursor-pointer flex items-center justify-center w-8 h-8 rounded-full hover:bg-blue-50 transition-colors" | ||||
|                   @click="openHistory(props.deviceId, item.identifier)" | ||||
|                   @click="openHistory(props.deviceId, item.identifier, item.dataType)" | ||||
|                 > | ||||
|                   <Icon icon="ep:data-line" class="text-[18px] text-[#0070ff]" /> | ||||
|                 </div> | ||||
|  | @ -135,7 +135,11 @@ | |||
|       /> | ||||
|       <el-table-column label="操作" align="center"> | ||||
|         <template #default="scope"> | ||||
|           <el-button link type="primary" @click="openHistory(props.deviceId, scope.row.identifier)"> | ||||
|           <el-button | ||||
|             link | ||||
|             type="primary" | ||||
|             @click="openHistory(props.deviceId, scope.row.identifier, scope.row.dataType)" | ||||
|           > | ||||
|             查看数据 | ||||
|           </el-button> | ||||
|         </template> | ||||
|  | @ -202,8 +206,8 @@ const handleQuery = () => { | |||
| 
 | ||||
| /** 历史操作 */ | ||||
| const historyRef = ref() | ||||
| const openHistory = (deviceId: number, identifier: string) => { | ||||
|   historyRef.value.open(deviceId, identifier) | ||||
| const openHistory = (deviceId: number, identifier: string, dataType: string) => { | ||||
|   historyRef.value.open(deviceId, identifier, dataType) | ||||
| } | ||||
| 
 | ||||
| /** 格式化属性值和单位 */ | ||||
|  |  | |||
|  | @ -27,6 +27,7 @@ | |||
|             <el-button | ||||
|               :type="viewMode === 'chart' ? 'primary' : 'default'" | ||||
|               @click="viewMode = 'chart'" | ||||
|               :disabled="isComplexDataType" | ||||
|             > | ||||
|               <Icon icon="ep:histogram" /> | ||||
|             </el-button> | ||||
|  | @ -57,7 +58,11 @@ | |||
|               {{ formatDate(new Date(scope.row.updateTime)) }} | ||||
|             </template> | ||||
|           </el-table-column> | ||||
|           <el-table-column label="属性值" align="center" prop="value" /> | ||||
|           <el-table-column label="属性值" align="center" prop="value"> | ||||
|             <template #default="scope"> | ||||
|               {{ scope.row.value }} | ||||
|             </template> | ||||
|           </el-table-column> | ||||
|         </el-table> | ||||
|       </div> | ||||
|     </ContentWrap> | ||||
|  | @ -67,6 +72,7 @@ | |||
| import { DeviceApi, IotDevicePropertyRespVO } from '@/api/iot/device/device' | ||||
| import { beginOfDay, defaultShortcuts, endOfDay, formatDate } from '@/utils/formatTime' | ||||
| import { Echart } from '@/components/Echart' | ||||
| import { IoTDataSpecsDataTypeEnum } from '@/views/iot/utils/constants' | ||||
| 
 | ||||
| defineProps<{ deviceId: number }>() | ||||
| 
 | ||||
|  | @ -78,6 +84,7 @@ const loading = ref(false) | |||
| const viewMode = ref<'chart' | 'list'>('chart') // 视图模式状态 | ||||
| const list = ref<IotDevicePropertyRespVO[]>([]) // 列表的数据 | ||||
| const chartKey = ref(0) // 图表重新渲染的key | ||||
| const thingModelDataType = ref<string>('') // 物模型数据类型 | ||||
| const queryParams = reactive({ | ||||
|   deviceId: -1, | ||||
|   identifier: '', | ||||
|  | @ -89,6 +96,14 @@ const queryParams = reactive({ | |||
| }) | ||||
| const queryFormRef = ref() // 搜索的表单 | ||||
| 
 | ||||
| // 判断是否为复杂数据类型(struct 或 array) | ||||
| const isComplexDataType = computed(() => { | ||||
|   if (!thingModelDataType.value) return false | ||||
|   return [IoTDataSpecsDataTypeEnum.STRUCT, IoTDataSpecsDataTypeEnum.ARRAY].includes( | ||||
|     thingModelDataType.value as any | ||||
|   ) | ||||
| }) | ||||
| 
 | ||||
| // Echarts 数据 | ||||
| const echartsData = computed(() => { | ||||
|   if (!list.value || list.value.length === 0) return [] | ||||
|  | @ -165,15 +180,24 @@ const getList = async () => { | |||
| } | ||||
| 
 | ||||
| /** 打开弹窗 */ | ||||
| const open = async (deviceId: number, identifier: string) => { | ||||
| const open = async (deviceId: number, identifier: string, dataType: string) => { | ||||
|   dialogVisible.value = true | ||||
|   queryParams.deviceId = deviceId | ||||
|   queryParams.identifier = identifier | ||||
|   // 重置图表key,确保每次打开都能正常渲染 | ||||
|   thingModelDataType.value = dataType | ||||
| 
 | ||||
|   // 如果物模型是 struct、array,需要默认使用 list 模式 | ||||
|   if (isComplexDataType.value) { | ||||
|     viewMode.value = 'list' | ||||
|   } else { | ||||
|     viewMode.value = 'chart' | ||||
|   } | ||||
|   // 重置图表 key,确保每次打开都能正常渲染 | ||||
|   chartKey.value = 0 | ||||
| 
 | ||||
|   // 等待弹窗完全渲染后再获取数据 | ||||
|   await nextTick() | ||||
|   getList() | ||||
|   await getList() | ||||
| } | ||||
| 
 | ||||
| /** 时间变化处理 */ | ||||
|  |  | |||
|  | @ -153,9 +153,10 @@ const submitForm = async () => { | |||
|       await ThingModelApi.updateThingModel(data) | ||||
|       message.success(t('common.updateSuccess')) | ||||
|     } | ||||
|   } finally { | ||||
|     dialogVisible.value = false // 确保关闭弹框 | ||||
|     // 关闭弹窗 | ||||
|     dialogVisible.value = false | ||||
|     emit('success') | ||||
|   } finally { | ||||
|     formLoading.value = false | ||||
|   } | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 YunaiV
						YunaiV