From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目

---
 src/views/iot/device/device/detail/index.vue |  108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 108 insertions(+), 0 deletions(-)

diff --git a/src/views/iot/device/device/detail/index.vue b/src/views/iot/device/device/detail/index.vue
new file mode 100644
index 0000000..3ec756b
--- /dev/null
+++ b/src/views/iot/device/device/detail/index.vue
@@ -0,0 +1,108 @@
+<template>
+  <DeviceDetailsHeader
+    :loading="loading"
+    :product="product"
+    :device="device"
+    @refresh="getDeviceData"
+  />
+  <el-col>
+    <el-tabs v-model="activeTab">
+      <el-tab-pane label="璁惧淇℃伅" name="info">
+        <DeviceDetailsInfo v-if="activeTab === 'info'" :product="product" :device="device" />
+      </el-tab-pane>
+      <el-tab-pane label="鐗╂ā鍨嬫暟鎹�" name="model">
+        <DeviceDetailsThingModel
+          v-if="activeTab === 'model'"
+          :device-id="device.id"
+          :thing-model-list="thingModelList"
+        />
+      </el-tab-pane>
+      <el-tab-pane label="瀛愯澶囩鐞�" v-if="product.deviceType === DeviceTypeEnum.GATEWAY" />
+      <el-tab-pane label="璁惧娑堟伅" name="log">
+        <DeviceDetailsMessage v-if="activeTab === 'log'" :device-id="device.id" />
+      </el-tab-pane>
+      <el-tab-pane label="妯℃嫙璁惧" name="simulator">
+        <DeviceDetailsSimulator
+          v-if="activeTab === 'simulator'"
+          :product="product"
+          :device="device"
+          :thing-model-list="thingModelList"
+        />
+      </el-tab-pane>
+      <el-tab-pane label="璁惧閰嶇疆" name="config">
+        <DeviceDetailConfig
+          v-if="activeTab === 'config'"
+          :device="device"
+          @success="getDeviceData"
+        />
+      </el-tab-pane>
+    </el-tabs>
+  </el-col>
+</template>
+<script lang="ts" setup>
+import { useTagsViewStore } from '@/store/modules/tagsView'
+import { DeviceApi, DeviceVO } from '@/api/iot/device/device'
+import { DeviceTypeEnum, ProductApi, ProductVO } from '@/api/iot/product/product'
+import { ThingModelApi, ThingModelData } from '@/api/iot/thingmodel'
+import DeviceDetailsHeader from './DeviceDetailsHeader.vue'
+import DeviceDetailsInfo from './DeviceDetailsInfo.vue'
+import DeviceDetailsThingModel from './DeviceDetailsThingModel.vue'
+import DeviceDetailsMessage from './DeviceDetailsMessage.vue'
+import DeviceDetailsSimulator from './DeviceDetailsSimulator.vue'
+import DeviceDetailConfig from './DeviceDetailConfig.vue'
+
+defineOptions({ name: 'IoTDeviceDetail' })
+
+const route = useRoute()
+const message = useMessage()
+const id = Number(route.params.id) // 灏嗗瓧绗︿覆杞崲涓烘暟瀛�
+const loading = ref(true) // 鍔犺浇涓�
+const product = ref<ProductVO>({} as ProductVO) // 浜у搧璇︽儏
+const device = ref<DeviceVO>({} as DeviceVO) // 璁惧璇︽儏
+const activeTab = ref('info') // 榛樿婵�娲荤殑鏍囩椤�
+const thingModelList = ref<ThingModelData[]>([]) // 鐗╂ā鍨嬪垪琛ㄦ暟鎹�
+
+/** 鑾峰彇璁惧璇︽儏 */
+const getDeviceData = async () => {
+  loading.value = true
+  try {
+    device.value = await DeviceApi.getDevice(id)
+    await getProductData(device.value.productId)
+    await getThingModelList(device.value.productId)
+  } finally {
+    loading.value = false
+  }
+}
+
+/** 鑾峰彇浜у搧璇︽儏 */
+const getProductData = async (id: number) => {
+  product.value = await ProductApi.getProduct(id)
+}
+
+/** 鑾峰彇鐗╂ā鍨嬪垪琛� */
+const getThingModelList = async (productId: number) => {
+  try {
+    const data = await ThingModelApi.getThingModelList({
+      productId: productId
+    })
+    thingModelList.value = data || []
+  } catch (error) {
+    console.error('鑾峰彇鐗╂ā鍨嬪垪琛ㄥけ璐�:', error)
+    thingModelList.value = []
+  }
+}
+
+/** 鍒濆鍖� */
+const { delView } = useTagsViewStore() // 瑙嗗浘鎿嶄綔
+const router = useRouter() // 璺敱
+const { currentRoute } = router
+onMounted(async () => {
+  if (!id) {
+    message.warning('鍙傛暟閿欒锛屼骇鍝佷笉鑳戒负绌猴紒')
+    delView(unref(currentRoute))
+    return
+  }
+  await getDeviceData()
+  activeTab.value = (route.query.tab as string) || 'info'
+})
+</script>

--
Gitblit v1.8.0