2025-10-10 20:26:17 +08:00
|
|
|
|
<script lang="ts" setup>
|
2025-10-13 10:17:19 +08:00
|
|
|
|
import type { ThingModelData } from '#/api/iot/thingmodel';
|
|
|
|
|
|
|
2025-10-17 00:13:48 +08:00
|
|
|
|
import { computed } from 'vue';
|
|
|
|
|
|
|
|
|
|
|
|
import { Tooltip } from 'ant-design-vue';
|
|
|
|
|
|
|
2025-10-10 20:26:17 +08:00
|
|
|
|
import {
|
|
|
|
|
|
getEventTypeLabel,
|
|
|
|
|
|
getThingModelServiceCallTypeLabel,
|
|
|
|
|
|
IoTDataSpecsDataTypeEnum,
|
|
|
|
|
|
IoTThingModelTypeEnum,
|
|
|
|
|
|
} from '#/views/iot/utils/constants';
|
|
|
|
|
|
|
|
|
|
|
|
/** 数据定义展示组件 */
|
|
|
|
|
|
defineOptions({ name: 'DataDefinition' });
|
|
|
|
|
|
|
2025-10-17 00:13:48 +08:00
|
|
|
|
const props = defineProps<{ data: ThingModelData }>();
|
|
|
|
|
|
|
|
|
|
|
|
// 格式化布尔值和枚举值列表为字符串
|
|
|
|
|
|
const formattedDataSpecsList = computed(() => {
|
2025-10-20 10:37:23 +08:00
|
|
|
|
if (
|
|
|
|
|
|
!props.data.property?.dataSpecsList ||
|
|
|
|
|
|
props.data.property.dataSpecsList.length === 0
|
|
|
|
|
|
) {
|
2025-10-17 00:13:48 +08:00
|
|
|
|
return '';
|
|
|
|
|
|
}
|
|
|
|
|
|
return props.data.property.dataSpecsList
|
2025-10-20 10:37:23 +08:00
|
|
|
|
.map((item) => `${item.value}-${item.name}`)
|
2025-10-17 00:13:48 +08:00
|
|
|
|
.join('、');
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// 显示的简短文本(第一个值)
|
|
|
|
|
|
const shortText = computed(() => {
|
2025-10-20 10:37:23 +08:00
|
|
|
|
if (
|
|
|
|
|
|
!props.data.property?.dataSpecsList ||
|
|
|
|
|
|
props.data.property.dataSpecsList.length === 0
|
|
|
|
|
|
) {
|
2025-10-17 00:13:48 +08:00
|
|
|
|
return '-';
|
|
|
|
|
|
}
|
|
|
|
|
|
const first = props.data.property.dataSpecsList[0];
|
|
|
|
|
|
const count = props.data.property.dataSpecsList.length;
|
2025-10-20 10:37:23 +08:00
|
|
|
|
return count > 1
|
|
|
|
|
|
? `${first.value}-${first.name} 等${count}项`
|
|
|
|
|
|
: `${first.value}-${first.name}`;
|
2025-10-17 00:13:48 +08:00
|
|
|
|
});
|
2025-10-10 20:26:17 +08:00
|
|
|
|
</script>
|
|
|
|
|
|
|
2025-10-07 19:58:59 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<!-- 属性 -->
|
2025-10-17 00:13:48 +08:00
|
|
|
|
<template v-if="Number(data.type) === IoTThingModelTypeEnum.PROPERTY">
|
2025-10-07 19:58:59 +08:00
|
|
|
|
<!-- 非列表型:数值 -->
|
|
|
|
|
|
<div
|
|
|
|
|
|
v-if="
|
|
|
|
|
|
[
|
|
|
|
|
|
IoTDataSpecsDataTypeEnum.INT,
|
|
|
|
|
|
IoTDataSpecsDataTypeEnum.DOUBLE,
|
2025-10-10 20:26:17 +08:00
|
|
|
|
IoTDataSpecsDataTypeEnum.FLOAT,
|
2025-10-13 10:17:19 +08:00
|
|
|
|
].includes(data.property?.dataType as any)
|
2025-10-07 19:58:59 +08:00
|
|
|
|
"
|
|
|
|
|
|
>
|
2025-10-10 20:26:17 +08:00
|
|
|
|
取值范围:{{
|
2025-10-17 00:13:48 +08:00
|
|
|
|
`${data.property?.dataSpecs?.min}~${data.property?.dataSpecs?.max}`
|
2025-10-10 20:26:17 +08:00
|
|
|
|
}}
|
2025-10-07 19:58:59 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
<!-- 非列表型:文本 -->
|
2025-10-13 10:17:19 +08:00
|
|
|
|
<div v-if="IoTDataSpecsDataTypeEnum.TEXT === data.property?.dataType">
|
2025-10-17 00:13:48 +08:00
|
|
|
|
数据长度:{{ data.property?.dataSpecs?.length }}
|
2025-10-07 19:58:59 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
<!-- 列表型: 数组、结构、时间(特殊) -->
|
|
|
|
|
|
<div
|
|
|
|
|
|
v-if="
|
|
|
|
|
|
[
|
|
|
|
|
|
IoTDataSpecsDataTypeEnum.ARRAY,
|
|
|
|
|
|
IoTDataSpecsDataTypeEnum.STRUCT,
|
2025-10-10 20:26:17 +08:00
|
|
|
|
IoTDataSpecsDataTypeEnum.DATE,
|
2025-10-13 10:17:19 +08:00
|
|
|
|
].includes(data.property?.dataType as any)
|
2025-10-07 19:58:59 +08:00
|
|
|
|
"
|
|
|
|
|
|
>
|
|
|
|
|
|
-
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<!-- 列表型: 布尔值、枚举 -->
|
|
|
|
|
|
<div
|
|
|
|
|
|
v-if="
|
|
|
|
|
|
[IoTDataSpecsDataTypeEnum.BOOL, IoTDataSpecsDataTypeEnum.ENUM].includes(
|
2025-10-13 10:17:19 +08:00
|
|
|
|
data.property?.dataType as any,
|
2025-10-07 19:58:59 +08:00
|
|
|
|
)
|
|
|
|
|
|
"
|
|
|
|
|
|
>
|
2025-10-17 00:13:48 +08:00
|
|
|
|
<Tooltip :title="formattedDataSpecsList" placement="topLeft">
|
|
|
|
|
|
<span class="data-specs-text">
|
|
|
|
|
|
{{
|
|
|
|
|
|
IoTDataSpecsDataTypeEnum.BOOL === data.property?.dataType
|
|
|
|
|
|
? '布尔值'
|
|
|
|
|
|
: '枚举值'
|
|
|
|
|
|
}}:{{ shortText }}
|
|
|
|
|
|
</span>
|
|
|
|
|
|
</Tooltip>
|
2025-10-07 19:58:59 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<!-- 服务 -->
|
2025-10-17 00:13:48 +08:00
|
|
|
|
<div v-if="Number(data.type) === IoTThingModelTypeEnum.SERVICE">
|
2025-10-13 10:17:19 +08:00
|
|
|
|
调用方式:{{
|
|
|
|
|
|
getThingModelServiceCallTypeLabel(data.service?.callType as any)
|
|
|
|
|
|
}}
|
2025-10-07 19:58:59 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
<!-- 事件 -->
|
2025-10-17 00:13:48 +08:00
|
|
|
|
<div v-if="Number(data.type) === IoTThingModelTypeEnum.EVENT">
|
2025-10-13 10:17:19 +08:00
|
|
|
|
事件类型:{{ getEventTypeLabel(data.event?.type as any) }}
|
2025-10-07 19:58:59 +08:00
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
2025-10-17 00:13:48 +08:00
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
|
.data-specs-text {
|
|
|
|
|
|
cursor: help;
|
|
|
|
|
|
border-bottom: 1px dashed #d9d9d9;
|
|
|
|
|
|
|
|
|
|
|
|
&:hover {
|
|
|
|
|
|
color: #1890ff;
|
2025-10-20 10:37:23 +08:00
|
|
|
|
border-bottom-color: #1890ff;
|
2025-10-17 00:13:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|