From d6f433bd84413f649146e7b235b91e0fc1a0c9c0 Mon Sep 17 00:00:00 2001 From: Flow <958079825@qq.com> Date: Fri, 30 May 2025 15:26:21 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=A6=E6=83=85=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/devices/DetailsForm.vue | 181 ++++++++++++++++++++++++++++ src/views/devices/DevFrom.vue | 59 +++++++-- src/views/devices/devices_cards.vue | 4 +- src/views/devices/index.vue | 21 ++-- 4 files changed, 246 insertions(+), 19 deletions(-) create mode 100644 src/views/devices/DetailsForm.vue diff --git a/src/views/devices/DetailsForm.vue b/src/views/devices/DetailsForm.vue new file mode 100644 index 000000000..51a702927 --- /dev/null +++ b/src/views/devices/DetailsForm.vue @@ -0,0 +1,181 @@ + + + diff --git a/src/views/devices/DevFrom.vue b/src/views/devices/DevFrom.vue index d2230c0dc..de4c096f0 100644 --- a/src/views/devices/DevFrom.vue +++ b/src/views/devices/DevFrom.vue @@ -6,10 +6,14 @@ :model="formData" :rules="formRules" label-width="100px" + :disabled="isDetail" > + + + @@ -97,9 +101,10 @@ const dialogVisible = ref(false) // 弹窗的是否展示 const dialogTitle = ref('') // 弹窗的标题 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 const formType = ref('') // 表单的类型:create - 新增;update - 修改 +const isDetail = ref(false) // 是否为详情模式 const formData = ref({ id: undefined, - deviceKey: undefined, + deviceId: undefined, deviceName: undefined, productId: undefined, productKey: undefined, @@ -122,14 +127,16 @@ const formData = ref({ longitude: undefined, areaId: undefined, address: undefined, + detailAddress: undefined, serialNumber: undefined, config: undefined, + description: undefined, groupIds: [] }) const formRules = reactive({ deviceId: [{ required: true, message: '设备ID不能为空', trigger: 'blur' }], - orgId: [{ required: true, message: '所属机构不能为空', trigger: 'blur' }], + deviceName: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }], deviceType: [{ required: true, message: '设备类型不能为空', trigger: 'blur' }], address: [{ required: true, message: '设备位置不能为空', trigger: 'blur' }], }) @@ -145,12 +152,46 @@ const open = async (type: string, id?: number) => { dialogVisible.value = true dialogTitle.value = t('action.' + type) formType.value = type + isDetail.value = type === 'details' // 设置是否为详情模式 resetForm() // 修改时,设置数据 if (id) { formLoading.value = true try { - formData.value = await DeviceApi.getDevice(id) + // 这里模拟获取设备数据,实际项目中应该调用API + const mockDeviceData = { + id: id, + deviceId: 'Device' + id, + deviceName: '测试设备' + id, + deviceType: 1, + state: DeviceStateEnum.INACTIVE, + address: '', + detailAddress: '测试地址123号', + description: '这是一个测试设备的描述信息', + productId: 1, + productKey: 'product_key_' + id, + nickname: '设备昵称' + id, + gatewayId: 1, + onlineTime: new Date(), + offlineTime: new Date(), + activeTime: new Date(), + createTime: new Date(), + ip: '192.168.1.1', + firmwareVersion: '1.0.0', + deviceSecret: 'secret_' + id, + mqttClientId: 'client_' + id, + mqttUsername: 'username_' + id, + mqttPassword: 'password_' + id, + authType: 'password', + latitude: 39.123456, + longitude: 117.123456, + areaId: 1, + serialNumber: 'SN' + id, + config: '{}', + groupIds: [] + } + formData.value = mockDeviceData + // 处理地址数据 if (formData.value.address) { const addressParts = formData.value.address.split('/') @@ -176,10 +217,6 @@ const open = async (type: string, id?: number) => { formLoading.value = false } } - // 获得产品列表 - productList.value = await ProductApi.getSimpleProductList() - // 获得分组列表 - groupList.value = await DeviceGroupApi.getSimpleDeviceGroupList() } defineExpose({ open }) // 提供 open 方法,用于打开弹窗 @@ -213,7 +250,7 @@ const submitForm = async () => { const resetForm = () => { formData.value = { id: undefined, - deviceKey: undefined, + deviceId: undefined, deviceName: undefined, productId: undefined, productKey: undefined, @@ -236,8 +273,10 @@ const resetForm = () => { longitude: undefined, areaId: undefined, address: undefined, + detailAddress: undefined, serialNumber: undefined, config: undefined, + description: undefined, groupIds: [] } selectedOptions.value = [] diff --git a/src/views/devices/devices_cards.vue b/src/views/devices/devices_cards.vue index fb1fcdffc..3e8980918 100644 --- a/src/views/devices/devices_cards.vue +++ b/src/views/devices/devices_cards.vue @@ -29,7 +29,7 @@

位置: - {{ deviceInfo.location }} + {{ deviceInfo.address }}

@@ -82,7 +82,7 @@ const props = defineProps({ id: '', name: '', type: '', - location: '', + address: '', status: 'normal', statusText: '正常' }) diff --git a/src/views/devices/index.vue b/src/views/devices/index.vue index 6cc67a9fe..eccf3ebe8 100644 --- a/src/views/devices/index.vue +++ b/src/views/devices/index.vue @@ -76,6 +76,7 @@ +