From f54c055199b5463ec2d5a6450cf115837cb2f8b3 Mon Sep 17 00:00:00 2001 From: ChenYi <296215406@outlook.com> Date: Thu, 25 Dec 2025 16:41:46 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E6=93=8D=E4=BD=9C=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devicemanagement/deviceinfo/index.vue | 129 +++++++++++++++++- .../devicemanagement/deviceinfo/schema.ts | 53 +++++++ 2 files changed, 180 insertions(+), 2 deletions(-) diff --git a/apps/web-antd/src/views/devicemanagement/deviceinfo/index.vue b/apps/web-antd/src/views/devicemanagement/deviceinfo/index.vue index 0958563..1d5c06e 100644 --- a/apps/web-antd/src/views/devicemanagement/deviceinfo/index.vue +++ b/apps/web-antd/src/views/devicemanagement/deviceinfo/index.vue @@ -42,6 +42,7 @@ import { batchAddDeviceFormSchema, bindDeviceThingModelFormSchema, commandFormSchema, + deviceUpgradeFormSchema, editDeviceFormSchemaEdit, querySchema, tableSchema, @@ -267,6 +268,9 @@ const pageLoading = ref(false); const loadingTip = ref('缓存刷新中...'); const commandRow: Record = ref({}); +// 设备升级相关 +const upgradeRow: Record = ref({}); + // 表格列定义 const commandTableColumns = computed(() => [ { @@ -394,6 +398,21 @@ interface ThingModelProperty { const thingModelProperties = ref([]); const thingModelLoading = ref(false); +// 筛选关键词 +const filterKeyword = ref(''); +// 过滤后的物模型属性列表 +const filteredThingModelProperties = computed(() => { + if (!filterKeyword.value.trim()) { + return thingModelProperties.value; + } + const keyword = filterKeyword.value.trim().toLowerCase(); + return thingModelProperties.value.filter((prop) => { + return ( + prop.standardFieldDisplayName?.toLowerCase().includes(keyword) || + prop.ioTPlatformRawFieldName?.toLowerCase().includes(keyword) + ); + }); +}); // 获取平台物模型属性列表 const fetchThingModelProperties = async (row: Record) => { @@ -514,12 +533,14 @@ const [CommandModal, commandModalApi] = useVbenModal({ onBeforeClose: () => { commandRow.value = {}; thingModelProperties.value = []; + filterKeyword.value = ''; // 清空筛选关键词 return true; }, onOpenChange: async (isOpen: boolean) => { if (isOpen && commandRow.value) { // 打开模态框时,获取平台物模型属性列表 await fetchThingModelProperties(commandRow.value); + filterKeyword.value = ''; // 重置筛选关键词 } }, }); @@ -703,6 +724,83 @@ const [BatchAddModal, batchAddModalApi] = useVbenModal({ }, }); +// 设备升级表单 +const [UpgradeForm, upgradeFormApi] = useVbenForm({ + collapsed: false, + commonConfig: { + labelWidth: 120, + componentProps: { + class: 'w-full', + }, + }, + layout: 'horizontal', + schema: deviceUpgradeFormSchema.value, + showCollapseButton: false, + showDefaultActions: false, + wrapperClass: 'grid-cols-1', +}); + +// 设备升级提交逻辑 +const submitDeviceUpgrade = async () => { + const { valid } = await upgradeFormApi.validate(); + if (!valid) return; + + const formValues = await upgradeFormApi.getValues(); + + try { + upgradeModalApi.setState({ loading: true, confirmLoading: true }); + + // TODO: 待接口实现后,调用实际的升级接口 + // const result = await postDeviceUpgrade({ + // body: { + // deviceId: upgradeRow.value.id, + // targetVersionId: formValues.targetVersionId, + // upgradeDescription: formValues.upgradeDescription, + // }, + // }); + + // 模拟接口调用 + await new Promise((resolve) => setTimeout(resolve, 1000)); + + Message.success('设备升级任务已提交'); + upgradeModalApi.close(); + upgradeRow.value = {}; + upgradeFormApi.resetForm(); + gridApi.reload(); + } catch (error) { + console.error('设备升级失败:', error); + Message.error('设备升级失败'); + } finally { + upgradeModalApi.setState({ loading: false, confirmLoading: false }); + } +}; + +// 打开设备升级弹窗 +const openUpgradeModal = (row: Record) => { + upgradeRow.value = row; + upgradeModalApi.open(); + // 设置表单初始值 + nextTick(() => { + upgradeFormApi.setValues({ + deviceId: row.id, + deviceName: row.deviceName || row.deviceAddress, + currentVersion: row.firmwareVersion || '未知', + targetVersionId: undefined, + upgradeDescription: '', + }); + }); +}; + +const [UpgradeModal, upgradeModalApi] = useVbenModal({ + draggable: true, + onConfirm: submitDeviceUpgrade, + onBeforeClose: () => { + upgradeRow.value = {}; + upgradeFormApi.resetForm(); + return true; + }, +}); + // 获取批量添加模态框的状态 const batchAddModalState = batchAddModalApi.useStore(); @@ -1549,6 +1647,10 @@ const toolbarActions = computed(() => [