From 1afa70bb53a61425544f3e5e00af9b9154c15c59 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Thu, 21 May 2026 12:44:12 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20iot=20=E4=BA=8C=E6=AC=A1=E7=A1=AE?= =?UTF-8?q?=E8=AE=A4=E7=BB=9F=E4=B8=80=E6=94=B9=E7=94=A8=20popconfirm=20?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=EF=BC=88P1=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 设备详情「配置推送」按钮包 Popconfirm / ElPopconfirm,防误下发 - 场景联动列表 TableAction 启用 / 停用项改用 popConfirm 配置 - 产品详情头部「发布 / 撤销发布 / 同步物模型表结构」三处按钮同步切换 - 移除命令式 Modal.confirm / ElMessageBox.confirm,与 system / iot 现有惯例一致 - 顺带消除 ele 端 ElMessageBox.confirm 取消未 catch 的未处理 promise --- .../device/device/detail/modules/config.vue | 13 ++-- .../product/product/detail/modules/header.vue | 77 ++++++++----------- .../src/views/iot/rule/scene/index.vue | 5 +- .../device/device/detail/modules/config.vue | 23 ++++-- .../product/product/detail/modules/header.vue | 46 ++++++----- .../src/views/iot/rule/scene/index.vue | 15 +++- 6 files changed, 94 insertions(+), 85 deletions(-) diff --git a/apps/web-antd/src/views/iot/device/device/detail/modules/config.vue b/apps/web-antd/src/views/iot/device/device/detail/modules/config.vue index d44620289..4b1706841 100644 --- a/apps/web-antd/src/views/iot/device/device/detail/modules/config.vue +++ b/apps/web-antd/src/views/iot/device/device/detail/modules/config.vue @@ -6,7 +6,7 @@ import { computed, ref, watchEffect } from 'vue'; import { IotDeviceMessageMethodEnum } from '@vben/constants'; -import { Alert, Button, message, Textarea } from 'ant-design-vue'; +import { Alert, Button, message, Popconfirm, Textarea } from 'ant-design-vue'; import { sendDeviceMessage, updateDevice } from '#/api/iot/device/device'; @@ -160,14 +160,13 @@ async function updateDeviceConfig() { 保存 - + + diff --git a/apps/web-antd/src/views/iot/product/product/detail/modules/header.vue b/apps/web-antd/src/views/iot/product/product/detail/modules/header.vue index 3abdc099f..c11137085 100644 --- a/apps/web-antd/src/views/iot/product/product/detail/modules/header.vue +++ b/apps/web-antd/src/views/iot/product/product/detail/modules/header.vue @@ -7,7 +7,13 @@ import { useAccess } from '@vben/access'; import { useVbenModal } from '@vben/common-ui'; import { ProductStatusEnum } from '@vben/constants'; -import { Button, Card, Descriptions, message, Modal } from 'ant-design-vue'; +import { + Button, + Card, + Descriptions, + message, + Popconfirm, +} from 'ant-design-vue'; import { syncProductPropertyTable, @@ -61,41 +67,23 @@ function openEditForm(row: IotProductApi.Product) { } /** 发布产品 */ -function handlePublish(product: IotProductApi.Product) { - Modal.confirm({ - title: '确认发布', - content: `确认要发布产品「${product.name}」吗?`, - async onOk() { - await updateProductStatus(product.id!, ProductStatusEnum.PUBLISHED); - message.success('发布成功'); - emit('refresh'); - }, - }); +async function handlePublish(product: IotProductApi.Product) { + await updateProductStatus(product.id!, ProductStatusEnum.PUBLISHED); + message.success('发布成功'); + emit('refresh'); } /** 撤销发布 */ -function handleUnpublish(product: IotProductApi.Product) { - Modal.confirm({ - title: '确认撤销发布', - content: `确认要撤销发布产品「${product.name}」吗?`, - async onOk() { - await updateProductStatus(product.id!, ProductStatusEnum.UNPUBLISHED); - message.success('撤销发布成功'); - emit('refresh'); - }, - }); +async function handleUnpublish(product: IotProductApi.Product) { + await updateProductStatus(product.id!, ProductStatusEnum.UNPUBLISHED); + message.success('撤销发布成功'); + emit('refresh'); } /** 同步物模型超级表结构 */ -function handleSyncPropertyTable(product: IotProductApi.Product) { - Modal.confirm({ - title: '确认同步', - content: `确认要同步产品「${product.name}」的物模型超级表结构吗?`, - async onOk() { - await syncProductPropertyTable(product.id!); - message.success('同步成功'); - }, - }); +async function handleSyncPropertyTable(product: IotProductApi.Product) { + await syncProductPropertyTable(product.id!); + message.success('同步成功'); } @@ -115,32 +103,33 @@ function handleSyncPropertyTable(product: IotProductApi.Product) { > 编辑 - - + + - 撤销发布 - - + + - 同步物模型表结构 - + + diff --git a/apps/web-antd/src/views/iot/rule/scene/index.vue b/apps/web-antd/src/views/iot/rule/scene/index.vue index b5d7d1024..3260bea5e 100644 --- a/apps/web-antd/src/views/iot/rule/scene/index.vue +++ b/apps/web-antd/src/views/iot/rule/scene/index.vue @@ -372,7 +372,10 @@ const [Grid, gridApi] = useVbenVxeGrid({ row.status === CommonStatusEnum.ENABLE ? 'ant-design:stop-outlined' : 'ant-design:check-circle-outlined', - onClick: handleToggleStatus.bind(null, row), + popConfirm: { + title: `确认${row.status === CommonStatusEnum.ENABLE ? '停用' : '启用'}场景规则「${row.name}」吗?`, + confirm: handleToggleStatus.bind(null, row), + }, }, { label: $t('common.edit'), diff --git a/apps/web-ele/src/views/iot/device/device/detail/modules/config.vue b/apps/web-ele/src/views/iot/device/device/detail/modules/config.vue index 0d61a0cfe..e29070aa0 100644 --- a/apps/web-ele/src/views/iot/device/device/detail/modules/config.vue +++ b/apps/web-ele/src/views/iot/device/device/detail/modules/config.vue @@ -6,7 +6,13 @@ import { computed, ref, watchEffect } from 'vue'; import { IotDeviceMessageMethodEnum } from '@vben/constants'; -import { ElAlert, ElButton, ElInput, ElMessage } from 'element-plus'; +import { + ElAlert, + ElButton, + ElInput, + ElMessage, + ElPopconfirm, +} from 'element-plus'; import { sendDeviceMessage, updateDevice } from '#/api/iot/device/device'; @@ -162,14 +168,17 @@ async function updateDeviceConfig() { 保存 编辑 - - 配置推送 - + + diff --git a/apps/web-ele/src/views/iot/product/product/detail/modules/header.vue b/apps/web-ele/src/views/iot/product/product/detail/modules/header.vue index 521d9e083..b974bda1a 100644 --- a/apps/web-ele/src/views/iot/product/product/detail/modules/header.vue +++ b/apps/web-ele/src/views/iot/product/product/detail/modules/header.vue @@ -13,7 +13,7 @@ import { ElDescriptions, ElDescriptionsItem, ElMessage, - ElMessageBox, + ElPopconfirm, } from 'element-plus'; import { @@ -69,7 +69,6 @@ function openEditForm(row: IotProductApi.Product) { /** 发布产品 */ async function handlePublish(product: IotProductApi.Product) { - await ElMessageBox.confirm(`确认要发布产品「${product.name}」吗?`, '确认发布'); await updateProductStatus(product.id!, ProductStatusEnum.PUBLISHED); ElMessage.success('发布成功'); emit('refresh'); @@ -77,10 +76,6 @@ async function handlePublish(product: IotProductApi.Product) { /** 撤销发布 */ async function handleUnpublish(product: IotProductApi.Product) { - await ElMessageBox.confirm( - `确认要撤销发布产品「${product.name}」吗?`, - '确认撤销发布', - ); await updateProductStatus(product.id!, ProductStatusEnum.UNPUBLISHED); ElMessage.success('撤销发布成功'); emit('refresh'); @@ -88,10 +83,6 @@ async function handleUnpublish(product: IotProductApi.Product) { /** 同步物模型超级表结构 */ async function handleSyncPropertyTable(product: IotProductApi.Product) { - await ElMessageBox.confirm( - `确认要同步产品「${product.name}」的物模型超级表结构吗?`, - '确认同步', - ); await syncProductPropertyTable(product.id!); ElMessage.success('同步成功'); } @@ -113,32 +104,39 @@ async function handleSyncPropertyTable(product: IotProductApi.Product) { > 编辑 - - 发布 - - + 发布 + + + - 撤销发布 - - + 撤销发布 + + + - 同步物模型表结构 - + + diff --git a/apps/web-ele/src/views/iot/rule/scene/index.vue b/apps/web-ele/src/views/iot/rule/scene/index.vue index 06710a57a..5f86e2620 100644 --- a/apps/web-ele/src/views/iot/rule/scene/index.vue +++ b/apps/web-ele/src/views/iot/rule/scene/index.vue @@ -15,7 +15,15 @@ import { import { IconifyIcon } from '@vben/icons'; import { CronUtils, formatDateTime } from '@vben/utils'; -import { ElCard, ElCol, ElLoading, ElMessage, ElRow, ElTag, ElTooltip } from 'element-plus'; +import { + ElCard, + ElCol, + ElLoading, + ElMessage, + ElRow, + ElTag, + ElTooltip, +} from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -368,7 +376,10 @@ const [Grid, gridApi] = useVbenVxeGrid({ row.status === CommonStatusEnum.ENABLE ? 'ant-design:stop-outlined' : 'ant-design:check-circle-outlined', - onClick: handleToggleStatus.bind(null, row), + popConfirm: { + title: `确认${row.status === CommonStatusEnum.ENABLE ? '停用' : '启用'}场景规则「${row.name}」吗?`, + confirm: handleToggleStatus.bind(null, row), + }, }, { label: $t('common.edit'),