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