feat(iot):【协议改造】移除 codecType,使用 protocolType 替代

pull/854/head
YunaiV 2026-02-04 22:05:03 +08:00
parent 04a6987211
commit 57a77b2ba9
4 changed files with 68 additions and 25 deletions

View File

@ -16,7 +16,8 @@ export interface ProductVO {
status: number // 产品状态
deviceType: number // 设备类型
netType: number // 联网方式
codecType: string // 数据格式(编解码器类型)
protocolType: string // 协议类型
serializeType: string // 序列化类型
deviceCount: number // 设备数量
createTime: Date // 创建时间
}
@ -27,9 +28,22 @@ export enum DeviceTypeEnum {
GATEWAY_SUB = 1, // 网关子设备
GATEWAY = 2 // 网关设备
}
// IOT 数据格式(编解码器类型)枚举类
export enum CodecTypeEnum {
ALINK = 'Alink' // 阿里云 Alink 协议
// IoT 协议类型枚举
export enum ProtocolTypeEnum {
TCP = 'tcp',
UDP = 'udp',
WEBSOCKET = 'websocket',
HTTP = 'http',
MQTT = 'mqtt',
EMQX = 'emqx',
COAP = 'coap',
MODBUS_TCP = 'modbus_tcp'
}
// IoT 序列化类型枚举
export enum SerializeTypeEnum {
JSON = 'json',
BINARY = 'binary'
}
// IoT 产品 API

View File

@ -233,7 +233,8 @@ export enum DICT_TYPE {
IOT_NET_TYPE = 'iot_net_type', // IOT 联网方式
IOT_PRODUCT_STATUS = 'iot_product_status', // IOT 产品状态
IOT_PRODUCT_DEVICE_TYPE = 'iot_product_device_type', // IOT 产品设备类型
IOT_CODEC_TYPE = 'iot_codec_type', // IOT 数据格式(编解码器类型)
IOT_PROTOCOL_TYPE = 'iot_protocol_type', // IOT 协议类型
IOT_SERIALIZE_TYPE = 'iot_serialize_type', // IOT 序列化类型
IOT_LOCATION_TYPE = 'iot_location_type', // IOT 定位类型
IOT_DEVICE_STATE = 'iot_device_state', // IOT 设备状态
IOT_THING_MODEL_TYPE = 'iot_thing_model_type', // IOT 产品功能类型

View File

@ -4,7 +4,7 @@
ref="formRef"
:model="formData"
:rules="formRules"
label-width="110px"
label-width="120px"
v-loading="formLoading"
>
<el-form-item label="ProductKey" prop="productKey">
@ -49,11 +49,7 @@
label="联网方式"
prop="netType"
>
<el-select
v-model="formData.netType"
placeholder="请选择联网方式"
:disabled="formType === 'update'"
>
<el-select v-model="formData.netType" placeholder="请选择联网方式">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.IOT_NET_TYPE)"
:key="dict.value"
@ -62,16 +58,36 @@
/>
</el-select>
</el-form-item>
<el-form-item label="数据格式" prop="codecType">
<el-radio-group v-model="formData.codecType" :disabled="formType === 'update'">
<el-radio
v-for="dict in getStrDictOptions(DICT_TYPE.IOT_CODEC_TYPE)"
<el-form-item label="协议类型" prop="protocolType">
<el-select v-model="formData.protocolType" placeholder="请选择协议类型">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.IOT_PROTOCOL_TYPE)"
:key="dict.value"
:label="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item prop="serializeType">
<template #label>
<el-tooltip
content="iot-gateway-server 默认根据接入的协议类型确定数据格式,仅 MQTT、EMQX 协议支持自定义序列化类型"
placement="top"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
<span>
序列化类型
<Icon icon="ep:question-filled" class="ml-2px" />
</span>
</el-tooltip>
</template>
<el-select v-model="formData.serializeType" placeholder="请选择序列化类型">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.IOT_SERIALIZE_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-collapse>
<el-collapse-item title="更多配置">
@ -109,7 +125,13 @@
</template>
<script setup lang="ts">
import { ProductApi, ProductVO, CodecTypeEnum, DeviceTypeEnum } from '@/api/iot/product/product'
import {
ProductApi,
ProductVO,
ProtocolTypeEnum,
SerializeTypeEnum,
DeviceTypeEnum
} from '@/api/iot/product/product'
import { DICT_TYPE, getIntDictOptions, getStrDictOptions } from '@/utils/dict'
import { ProductCategoryApi, ProductCategoryVO } from '@/api/iot/product/category'
import { UploadImg } from '@/components/UploadFile'
@ -134,7 +156,8 @@ const formData = ref({
description: undefined,
deviceType: undefined,
netType: undefined,
codecType: CodecTypeEnum.ALINK,
protocolType: ProtocolTypeEnum.MQTT,
serializeType: SerializeTypeEnum.JSON,
registerEnabled: false
})
const formRules = reactive({
@ -149,7 +172,8 @@ const formRules = reactive({
trigger: 'change'
}
],
codecType: [{ required: true, message: '数据格式不能为空', trigger: 'change' }]
protocolType: [{ required: true, message: '协议类型不能为空', trigger: 'change' }],
serializeType: [{ required: true, message: '序列化类型不能为空', trigger: 'change' }]
})
const formRef = ref()
const categoryList = ref<ProductCategoryVO[]>([]) //
@ -209,7 +233,8 @@ const resetForm = () => {
description: undefined,
deviceType: undefined,
netType: undefined,
codecType: CodecTypeEnum.ALINK,
protocolType: ProtocolTypeEnum.MQTT,
serializeType: SerializeTypeEnum.JSON,
registerEnabled: false
}
formRef.value?.resetFields()

View File

@ -9,8 +9,11 @@
<el-descriptions-item label="创建时间">
{{ formatDate(product.createTime) }}
</el-descriptions-item>
<el-descriptions-item label="数据格式">
<dict-tag :type="DICT_TYPE.IOT_CODEC_TYPE" :value="product.codecType" />
<el-descriptions-item label="协议类型">
<dict-tag :type="DICT_TYPE.IOT_PROTOCOL_TYPE" :value="product.protocolType" />
</el-descriptions-item>
<el-descriptions-item label="序列化类型">
<dict-tag :type="DICT_TYPE.IOT_SERIALIZE_TYPE" :value="product.serializeType" />
</el-descriptions-item>
<el-descriptions-item label="产品状态">
<dict-tag :type="DICT_TYPE.IOT_PRODUCT_STATUS" :value="product.status" />