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