-
+
{{ product.name }}
-
-
+
+
{{ product.productKey }}
-
-
+
+
-
-
+
+
{{ device.deviceName }}
-
-
+
+
{{ device.nickname || '--' }}
-
-
+
+
-
-
+
+
{{ formatDateTime(device.createTime) }}
-
-
+
+
{{ formatDateTime(device.activeTime) }}
-
-
+
+
{{ formatDateTime(device.onlineTime) }}
-
-
+
+
{{ formatDateTime(device.offlineTime) }}
-
-
+
+
{{ device.longitude }}, {{ device.latitude }}
@@ -121,12 +123,12 @@ function handleAuthInfoDialogClose() {
暂无位置信息
-
-
+
+
-
+
@@ -138,7 +140,7 @@ function handleAuthInfoDialogClose() {
width="640px"
>
+
-
-
+
+
-
-
+
+
-
+
diff --git a/apps/web-antdv-next/src/views/iot/product/product/detail/modules/header.vue b/apps/web-antdv-next/src/views/iot/product/product/detail/modules/header.vue
index 54c6dc8ce..c3e504042 100644
--- a/apps/web-antdv-next/src/views/iot/product/product/detail/modules/header.vue
+++ b/apps/web-antdv-next/src/views/iot/product/product/detail/modules/header.vue
@@ -11,6 +11,7 @@ import {
Button,
Card,
Descriptions,
+ DescriptionsItem,
message,
Popconfirm,
} from 'antdv-next';
@@ -135,7 +136,7 @@ async function handleSyncPropertyTable(product: IotProductApi.Product) {
-
+
{{ product.productKey }}
-
-
+
+
{{ product.deviceCount ?? '加载中...' }}
-
+
diff --git a/apps/web-antdv-next/src/views/iot/product/product/detail/modules/info.vue b/apps/web-antdv-next/src/views/iot/product/product/detail/modules/info.vue
index ecd96c07d..d92475948 100644
--- a/apps/web-antdv-next/src/views/iot/product/product/detail/modules/info.vue
+++ b/apps/web-antdv-next/src/views/iot/product/product/detail/modules/info.vue
@@ -5,7 +5,7 @@ import { ref } from 'vue';
import { DeviceTypeEnum, DICT_TYPE } from '@vben/constants';
-import { Button, Card, Descriptions, message } from 'antdv-next';
+import { Button, Card, Descriptions, DescriptionsItem, message } from 'antdv-next';
import { DictTag } from '#/components/dict-tag';
@@ -44,37 +44,37 @@ async function copyToClipboard(text: string) {
-
+
{{ product.name }}
-
-
+
+
{{ product.categoryName || '-' }}
-
-
+
+
-
-
+
+
{{ formatDate(product.createTime) }}
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
-
-
+
+
{{ product.productSecret }}
********
-
-
+
+
{{ product.registerEnabled ? '已开启' : '未开启' }}
-
-
+
+
{{ product.description || '-' }}
-
+
diff --git a/apps/web-antdv-next/src/views/iot/rule/data/sink/config/database-config-form.vue b/apps/web-antdv-next/src/views/iot/rule/data/sink/config/database-config-form.vue
index f06210d8b..bf8433c78 100644
--- a/apps/web-antdv-next/src/views/iot/rule/data/sink/config/database-config-form.vue
+++ b/apps/web-antdv-next/src/views/iot/rule/data/sink/config/database-config-form.vue
@@ -5,7 +5,7 @@ import { IconifyIcon } from '@vben/icons';
import { isEmpty } from '@vben/utils';
import { useClipboard, useVModel } from '@vueuse/core';
-import { Button, Form, Input, message } from 'antdv-next';
+import { Button, Form, FormItem, Input, message } from 'antdv-next';
import { IotDataSinkTypeEnum } from '#/api/iot/rule/data/sink';
@@ -67,7 +67,7 @@ onMounted(() => {
-
-
-
+
-
-
+ {
v-model:value="config.password"
placeholder="请输入数据库密码"
/>
-
-
+ {
{{ showSqlTip ? '收起表结构提示' : '查看表结构提示' }}
-
+
{
- {
-
-
+ PUT
DELETE
-
-
+
+
-
-
+
+
-
-
+
+
-
+
diff --git a/apps/web-antdv-next/src/views/iot/rule/data/sink/config/kafka-mq-config-form.vue b/apps/web-antdv-next/src/views/iot/rule/data/sink/config/kafka-mq-config-form.vue
index 6da154393..9f986a65c 100644
--- a/apps/web-antdv-next/src/views/iot/rule/data/sink/config/kafka-mq-config-form.vue
+++ b/apps/web-antdv-next/src/views/iot/rule/data/sink/config/kafka-mq-config-form.vue
@@ -4,7 +4,7 @@ import { onMounted } from 'vue';
import { isEmpty } from '@vben/utils';
import { useVModel } from '@vueuse/core';
-import { Form, Input, Switch } from 'antdv-next';
+import { FormItem, Input, Switch } from 'antdv-next';
import { IotDataSinkTypeEnum } from '#/api/iot/rule/data/sink';
@@ -28,7 +28,7 @@ onMounted(() => {
- {
v-model:value="config.bootstrapServers"
placeholder="请输入服务地址,如:localhost:9092"
/>
-
-
+
-
-
+
-
-
+
+
-
-
+
-
+
diff --git a/apps/web-antdv-next/src/views/iot/rule/data/sink/config/mqtt-config-form.vue b/apps/web-antdv-next/src/views/iot/rule/data/sink/config/mqtt-config-form.vue
index b8848491b..6be7f7156 100644
--- a/apps/web-antdv-next/src/views/iot/rule/data/sink/config/mqtt-config-form.vue
+++ b/apps/web-antdv-next/src/views/iot/rule/data/sink/config/mqtt-config-form.vue
@@ -4,7 +4,7 @@ import { onMounted } from 'vue';
import { isEmpty } from '@vben/utils';
import { useVModel } from '@vueuse/core';
-import { Form, Input } from 'antdv-next';
+import { FormItem, Input } from 'antdv-next';
import { IotDataSinkTypeEnum } from '#/api/iot/rule/data/sink';
@@ -28,7 +28,7 @@ onMounted(() => {
- {
v-model:value="config.url"
placeholder="请输入 MQTT 服务地址,如:mqtt://localhost:1883"
/>
-
-
+
-
-
+
-
-
+
-
-
+
-
+
diff --git a/apps/web-antdv-next/src/views/iot/rule/data/sink/config/rabbit-mq-config-form.vue b/apps/web-antdv-next/src/views/iot/rule/data/sink/config/rabbit-mq-config-form.vue
index bb9108bcb..b73ccbecd 100644
--- a/apps/web-antdv-next/src/views/iot/rule/data/sink/config/rabbit-mq-config-form.vue
+++ b/apps/web-antdv-next/src/views/iot/rule/data/sink/config/rabbit-mq-config-form.vue
@@ -4,7 +4,7 @@ import { onMounted } from 'vue';
import { isEmpty } from '@vben/utils';
import { useVModel } from '@vueuse/core';
-import { Form, Input, InputNumber } from 'antdv-next';
+import { FormItem, Input, InputNumber } from 'antdv-next';
import { IotDataSinkTypeEnum } from '#/api/iot/rule/data/sink';
@@ -31,7 +31,7 @@ onMounted(() => {
- {
v-model:value="config.host"
placeholder="请输入主机地址,如:localhost"
/>
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
+
diff --git a/apps/web-antdv-next/src/views/iot/rule/data/sink/config/redis-stream-config-form.vue b/apps/web-antdv-next/src/views/iot/rule/data/sink/config/redis-stream-config-form.vue
index 960293025..046d31e4b 100644
--- a/apps/web-antdv-next/src/views/iot/rule/data/sink/config/redis-stream-config-form.vue
+++ b/apps/web-antdv-next/src/views/iot/rule/data/sink/config/redis-stream-config-form.vue
@@ -4,7 +4,7 @@ import { onMounted } from 'vue';
import { isEmpty } from '@vben/utils';
import { useVModel } from '@vueuse/core';
-import { Form, Input, InputNumber } from 'antdv-next';
+import { FormItem, Input, InputNumber } from 'antdv-next';
import { IotDataSinkTypeEnum } from '#/api/iot/rule/data/sink';
@@ -36,7 +36,7 @@ onMounted(() => {
- {
v-model:value="config.host"
placeholder="请输入主机地址,如:localhost"
/>
-
-
+
-
-
+
-
-
+
-
-
+
-
+
diff --git a/apps/web-antdv-next/src/views/iot/rule/data/sink/config/rocket-mq-config-form.vue b/apps/web-antdv-next/src/views/iot/rule/data/sink/config/rocket-mq-config-form.vue
index 8420696b4..a3f798ba3 100644
--- a/apps/web-antdv-next/src/views/iot/rule/data/sink/config/rocket-mq-config-form.vue
+++ b/apps/web-antdv-next/src/views/iot/rule/data/sink/config/rocket-mq-config-form.vue
@@ -4,7 +4,7 @@ import { onMounted } from 'vue';
import { isEmpty } from '@vben/utils';
import { useVModel } from '@vueuse/core';
-import { Form, Input } from 'antdv-next';
+import { FormItem, Input } from 'antdv-next';
import { IotDataSinkTypeEnum } from '#/api/iot/rule/data/sink';
@@ -29,7 +29,7 @@ onMounted(() => {
-
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
+
-
+
diff --git a/apps/web-antdv-next/src/views/iot/rule/data/sink/config/tcp-config-form.vue b/apps/web-antdv-next/src/views/iot/rule/data/sink/config/tcp-config-form.vue
index d9149000e..347dd682c 100644
--- a/apps/web-antdv-next/src/views/iot/rule/data/sink/config/tcp-config-form.vue
+++ b/apps/web-antdv-next/src/views/iot/rule/data/sink/config/tcp-config-form.vue
@@ -4,7 +4,7 @@ import { onMounted } from 'vue';
import { isEmpty } from '@vben/utils';
import { useVModel } from '@vueuse/core';
-import { Form, Input, InputNumber, Select, Switch } from 'antdv-next';
+import { FormItem, Input, InputNumber, Select, Switch } from 'antdv-next';
import { IotDataSinkTypeEnum } from '#/api/iot/rule/data/sink';
@@ -33,7 +33,7 @@ onMounted(() => {
- {
v-model:value="config.host"
placeholder="请输入 TCP 服务器地址,如:localhost"
/>
-
-
+
-
-
+
-
-
+
-
-
+
+
-
-
+ {
v-model:value="config.sslCertPath"
placeholder="请输入 SSL 证书路径"
/>
-
-
+ JSON
BINARY
-
-
+
+
{
placeholder="0 表示不启用心跳"
class="w-full"
/>
-
-
+
+
-
-
+
+
-
+
diff --git a/apps/web-antdv-next/src/views/iot/rule/data/sink/config/websocket-config-form.vue b/apps/web-antdv-next/src/views/iot/rule/data/sink/config/websocket-config-form.vue
index aa056c5ec..8789412d3 100644
--- a/apps/web-antdv-next/src/views/iot/rule/data/sink/config/websocket-config-form.vue
+++ b/apps/web-antdv-next/src/views/iot/rule/data/sink/config/websocket-config-form.vue
@@ -4,7 +4,7 @@ import { onMounted } from 'vue';
import { isEmpty } from '@vben/utils';
import { useVModel } from '@vueuse/core';
-import { Form, Input, InputNumber, Select, Switch } from 'antdv-next';
+import { FormItem, Input, InputNumber, Select, Switch } from 'antdv-next';
import { IotDataSinkTypeEnum } from '#/api/iot/rule/data/sink';
@@ -37,7 +37,7 @@ onMounted(() => {
-
-
-
+
-
-
+
-
-
+
+
{
placeholder="0 表示不启用心跳"
class="w-full"
/>
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+ JSON
TEXT
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
diff --git a/apps/web-antdv-next/src/views/iot/rule/data/sink/modules/form.vue b/apps/web-antdv-next/src/views/iot/rule/data/sink/modules/form.vue
index ada1afb55..a74094fca 100644
--- a/apps/web-antdv-next/src/views/iot/rule/data/sink/modules/form.vue
+++ b/apps/web-antdv-next/src/views/iot/rule/data/sink/modules/form.vue
@@ -7,7 +7,7 @@ import { useVbenModal } from '@vben/common-ui';
import { CommonStatusEnum, DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
-import { Form, Input, message, Radio, Select } from 'antdv-next';
+import { Form, FormItem, Input, message, Radio, Select } from 'antdv-next';
import {
createDataSink,
@@ -102,7 +102,7 @@ function handleTypeChange(type: number) {
:wrapper-col="{ span: 18 }"
class="mx-4"
>
-
-
-
+
+
-
-
+ handleTypeChange(value as number)"
/>
-
+
-
-
+
diff --git a/apps/web-antdv-next/src/views/iot/rule/scene/form/configs/alert-config.vue b/apps/web-antdv-next/src/views/iot/rule/scene/form/configs/alert-config.vue
index ea81ead11..49ef1e9ae 100644
--- a/apps/web-antdv-next/src/views/iot/rule/scene/form/configs/alert-config.vue
+++ b/apps/web-antdv-next/src/views/iot/rule/scene/form/configs/alert-config.vue
@@ -3,7 +3,7 @@
import { onMounted, ref } from 'vue';
import { useVModel } from '@vueuse/core';
-import { Form, Select } from 'antdv-next';
+import { FormItem, Select } from 'antdv-next';
import { getSimpleAlertConfigList } from '#/api/iot/alert/config';
@@ -46,7 +46,7 @@ onMounted(() => {
-
+
-
+
diff --git a/apps/web-antdv-next/src/views/iot/rule/scene/form/configs/condition-config.vue b/apps/web-antdv-next/src/views/iot/rule/scene/form/configs/condition-config.vue
index 031cafb2e..88bd83fcf 100644
--- a/apps/web-antdv-next/src/views/iot/rule/scene/form/configs/condition-config.vue
+++ b/apps/web-antdv-next/src/views/iot/rule/scene/form/configs/condition-config.vue
@@ -12,7 +12,7 @@ import {
} from '@vben/constants';
import { useVModel } from '@vueuse/core';
-import { Col, Form, Row, Select } from 'antdv-next';
+import { Col, FormItem, Row, Select } from 'antdv-next';
import ValueInput from '../inputs/value-input.vue';
import DeviceSelector from '../selectors/device-selector.vue';
@@ -160,7 +160,7 @@ function handleOperatorChange() {
-
+
-
+
-
+
-
+
-
+
-
+
@@ -222,7 +222,7 @@ function handleOperatorChange() {
-
+
-
+
-
+
-
+
@@ -273,7 +273,7 @@ function handleOperatorChange() {
-
+
-
+
-
+
-
+
-
+
-
+
@@ -218,7 +218,7 @@ function handlePropertyChange(propertyInfo: any) {
-
+
-
+
-
+
-
+
-
+
updateConditionField('value', value)
- "
+ @update:value="(value) => updateConditionField('value', value)"
placeholder="留空则事件发生即匹配"
/>
@@ -281,7 +279,7 @@ function handlePropertyChange(propertyInfo: any) {
:operator="condition.operator"
:property-config="propertyConfig"
/>
-
+
@@ -291,7 +289,7 @@ function handlePropertyChange(propertyInfo: any) {
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/apps/web-antdv-next/src/views/iot/rule/scene/form/sections/action-section.vue b/apps/web-antdv-next/src/views/iot/rule/scene/form/sections/action-section.vue
index 31a5c0e11..aacfa0562 100644
--- a/apps/web-antdv-next/src/views/iot/rule/scene/form/sections/action-section.vue
+++ b/apps/web-antdv-next/src/views/iot/rule/scene/form/sections/action-section.vue
@@ -11,7 +11,7 @@ import { IconifyIcon } from '@vben/icons';
import { getStableObjectKey } from '@vben/utils';
import { useVModel } from '@vueuse/core';
-import { Button, Card, Empty, Form, Select, Tag } from 'antdv-next';
+import { Button, Card, Empty, FormItem, Select, Tag } from 'antdv-next';
import AlertConfig from '../configs/alert-config.vue';
import DeviceControlConfig from '../configs/device-control-config.vue';
@@ -228,7 +228,7 @@ function onActionTypeChange(action: RuleSceneApi.Action, type: number) {
-
+
-
+
diff --git a/apps/web-antdv-next/src/views/iot/rule/scene/form/sections/basic-info-section.vue b/apps/web-antdv-next/src/views/iot/rule/scene/form/sections/basic-info-section.vue
index 42c437a60..2efa0f48c 100644
--- a/apps/web-antdv-next/src/views/iot/rule/scene/form/sections/basic-info-section.vue
+++ b/apps/web-antdv-next/src/views/iot/rule/scene/form/sections/basic-info-section.vue
@@ -7,7 +7,7 @@ import { getDictOptions } from '@vben/hooks';
import { IconifyIcon } from '@vben/icons';
import { useVModel } from '@vueuse/core';
-import { Card, Col, Form, Input, Radio, Row } from 'antdv-next';
+import { Card, Col, FormItem, Input, Radio, Row } from 'antdv-next';
import { DictTag } from '#/components/dict-tag';
@@ -44,7 +44,7 @@ const formData = useVModel(props, 'modelValue', emit); // 表单数据
-
+
-
+
-
+
+
-
+
diff --git a/apps/web-antdv-next/src/views/iot/rule/scene/form/sections/trigger-section.vue b/apps/web-antdv-next/src/views/iot/rule/scene/form/sections/trigger-section.vue
index d40a716c5..a49ac22a1 100644
--- a/apps/web-antdv-next/src/views/iot/rule/scene/form/sections/trigger-section.vue
+++ b/apps/web-antdv-next/src/views/iot/rule/scene/form/sections/trigger-section.vue
@@ -12,7 +12,7 @@ import { IconifyIcon } from '@vben/icons';
import { getStableObjectKey } from '@vben/utils';
import { useVModel } from '@vueuse/core';
-import { Button, Card, Empty, Form, Tag } from 'antdv-next';
+import { Button, Card, Empty, FormItem, Tag } from 'antdv-next';
import { CronTab } from '#/components/cron-tab';
@@ -208,14 +208,14 @@ onMounted(() => {
-
+
updateTriggerCronConfig(index, value)
"
/>
-
+
diff --git a/apps/web-antdv-next/src/views/iot/thingmodel/modules/data-specs/array.vue b/apps/web-antdv-next/src/views/iot/thingmodel/modules/data-specs/array.vue
index 6d80f95b4..23660e9b9 100644
--- a/apps/web-antdv-next/src/views/iot/thingmodel/modules/data-specs/array.vue
+++ b/apps/web-antdv-next/src/views/iot/thingmodel/modules/data-specs/array.vue
@@ -5,7 +5,7 @@ import type { Ref } from 'vue';
import { getDataTypeOptions, IoTDataSpecsDataTypeEnum } from '@vben/constants';
import { useVModel } from '@vueuse/core';
-import { Form, Input, Radio } from 'antdv-next';
+import { FormItem, Input, Radio } from 'antdv-next';
import { ThingModelFormRules } from '#/api/iot/thingmodel';
@@ -34,7 +34,7 @@ function handleChange(e: any) {
-
-
-
+
-
+
-
@@ -98,7 +98,7 @@ function validateEnumList(_rule: any, _value: any, callback: any) {
:key="index"
class="mb-[5px] flex items-center justify-between"
>
-
-
+
~
-
-
+
-
+