feat:【IoT 物联网】物模型数据使用 NVARCHAR 存储,并兼容 struct、array 等数据结构

pull/789/MERGE
YunaiV 2025-06-29 17:09:27 +08:00
parent 4af1875001
commit 1281ff62ba
3 changed files with 39 additions and 10 deletions

View File

@ -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)
}
/** 格式化属性值和单位 */

View File

@ -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
// structarray使 list
if (isComplexDataType.value) {
viewMode.value = 'list'
} else {
viewMode.value = 'chart'
}
// key
chartKey.value = 0
//
await nextTick()
getList()
await getList()
}
/** 时间变化处理 */

View File

@ -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
}
}