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"
>
+
+
+
- 确 定
- 取 消
+ 确 定
+ {{ 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 @@
+