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/rule/scene/form/selectors/ProductSelector.vue | 79 +++++++++++++++++++++++++++++++++++++++
1 files changed, 79 insertions(+), 0 deletions(-)
diff --git a/src/views/iot/rule/scene/form/selectors/ProductSelector.vue b/src/views/iot/rule/scene/form/selectors/ProductSelector.vue
new file mode 100644
index 0000000..ab76d63
--- /dev/null
+++ b/src/views/iot/rule/scene/form/selectors/ProductSelector.vue
@@ -0,0 +1,79 @@
+<!-- 浜у搧閫夋嫨鍣ㄧ粍浠� -->
+<template>
+ <el-select
+ :model-value="modelValue"
+ @update:model-value="handleChange"
+ placeholder="璇烽�夋嫨浜у搧"
+ filterable
+ clearable
+ class="w-full"
+ :loading="productLoading"
+ >
+ <el-option
+ v-for="product in productList"
+ :key="product.id"
+ :label="product.name"
+ :value="product.id"
+ >
+ <div class="flex items-center justify-between w-full py-4px">
+ <div class="flex-1">
+ <div class="text-14px font-500 text-[var(--el-text-color-primary)] mb-2px">
+ {{ product.name }}
+ </div>
+ <div class="text-12px text-[var(--el-text-color-secondary)]">
+ {{ product.productKey }}
+ </div>
+ </div>
+ <dict-tag :type="DICT_TYPE.IOT_PRODUCT_STATUS" :value="product.status" />
+ </div>
+ </el-option>
+ </el-select>
+</template>
+
+<script setup lang="ts">
+import { ProductApi } from '@/api/iot/product/product'
+import { DICT_TYPE } from '@/utils/dict'
+
+/** 浜у搧閫夋嫨鍣ㄧ粍浠� */
+defineOptions({ name: 'ProductSelector' })
+
+defineProps<{
+ modelValue?: number
+}>()
+
+const emit = defineEmits<{
+ (e: 'update:modelValue', value?: number): void
+ (e: 'change', value?: number): void
+}>()
+
+const productLoading = ref(false) // 浜у搧鍔犺浇鐘舵��
+const productList = ref<any[]>([]) // 浜у搧鍒楄〃
+
+/**
+ * 澶勭悊閫夋嫨鍙樺寲浜嬩欢
+ * @param value 閫変腑鐨勪骇鍝� ID
+ */
+const handleChange = (value?: number) => {
+ emit('update:modelValue', value)
+ emit('change', value)
+}
+
+/** 鑾峰彇浜у搧鍒楄〃 */
+const getProductList = async () => {
+ try {
+ productLoading.value = true
+ const res = await ProductApi.getSimpleProductList()
+ productList.value = res || []
+ } catch (error) {
+ console.error('鑾峰彇浜у搧鍒楄〃澶辫触:', error)
+ productList.value = []
+ } finally {
+ productLoading.value = false
+ }
+}
+
+// 缁勪欢鎸傝浇鏃惰幏鍙栦骇鍝佸垪琛�
+onMounted(() => {
+ getProductList()
+})
+</script>
--
Gitblit v1.8.0