From a5d458b96d707ab9b220d12e7e47dfe2e0bc2e89 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Fri, 1 Aug 2025 17:18:23 +0800 Subject: [PATCH] =?UTF-8?q?perf=EF=BC=9A=E3=80=90IoT=20=E7=89=A9=E8=81=94?= =?UTF-8?q?=E7=BD=91=E3=80=91=E5=9C=BA=E6=99=AF=E8=81=94=E5=8A=A8=E8=A7=A6?= =?UTF-8?q?=E5=8F=91=E5=99=A8=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scene/form/configs/ConditionConfig.vue | 10 +- .../form/configs/ConditionGroupConfig.vue | 253 ------------------ .../configs/ConditionGroupContainerConfig.vue | 1 + .../configs/CurrentTimeConditionConfig.vue | 12 +- .../form/configs/DeviceControlConfig.vue | 19 +- .../configs/DeviceStatusConditionConfig.vue | 105 ++------ .../form/configs/DeviceTriggerConfig.vue | 6 +- .../form/configs/MainConditionConfig.vue | 1 + .../form/configs/MainConditionInnerConfig.vue | 12 +- .../form/configs/SubConditionGroupConfig.vue | 12 +- .../scene/form/configs/TimerTriggerConfig.vue | 13 +- .../form/selectors/ConditionTypeSelector.vue | 11 +- .../scene/form/selectors/DeviceSelector.vue | 17 +- .../scene/form/selectors/OperatorSelector.vue | 12 +- .../form/selectors/ProductDeviceSelector.vue | 45 +++- .../scene/form/selectors/ProductSelector.vue | 28 +- 16 files changed, 122 insertions(+), 435 deletions(-) delete mode 100644 src/views/iot/rule/scene/form/configs/ConditionGroupConfig.vue diff --git a/src/views/iot/rule/scene/form/configs/ConditionConfig.vue b/src/views/iot/rule/scene/form/configs/ConditionConfig.vue index 6bd932052..79c580b7c 100644 --- a/src/views/iot/rule/scene/form/configs/ConditionConfig.vue +++ b/src/views/iot/rule/scene/form/configs/ConditionConfig.vue @@ -190,22 +190,20 @@ const handleValidate = (result: { valid: boolean; message: string }) => { emit('validate', result) } -const handleProductChange = (productId: number) => { +const handleProductChange = (_: number) => { // 产品变化时清空设备和属性 - condition.value.productId = productId + condition.value.deviceId = undefined condition.value.identifier = '' updateValidationResult() } -const handleDeviceChange = (deviceId: number) => { +const handleDeviceChange = (_: number) => { // 设备变化时清空属性 - condition.value.deviceId = deviceId + condition.value.identifier = '' updateValidationResult() } const handlePropertyChange = (propertyInfo: { type: string; config: any }) => { - debugger - console.log(propertyInfo) propertyType.value = propertyInfo.type propertyConfig.value = propertyInfo.config diff --git a/src/views/iot/rule/scene/form/configs/ConditionGroupConfig.vue b/src/views/iot/rule/scene/form/configs/ConditionGroupConfig.vue deleted file mode 100644 index 6aad617fa..000000000 --- a/src/views/iot/rule/scene/form/configs/ConditionGroupConfig.vue +++ /dev/null @@ -1,253 +0,0 @@ - - - - diff --git a/src/views/iot/rule/scene/form/configs/ConditionGroupContainerConfig.vue b/src/views/iot/rule/scene/form/configs/ConditionGroupContainerConfig.vue index 60c4d3902..8ad0b1144 100644 --- a/src/views/iot/rule/scene/form/configs/ConditionGroupContainerConfig.vue +++ b/src/views/iot/rule/scene/form/configs/ConditionGroupContainerConfig.vue @@ -137,6 +137,7 @@ const props = defineProps<{ modelValue: ConditionGroupContainerFormData triggerType: number }>() + const emit = defineEmits<{ (e: 'update:modelValue', value: ConditionGroupContainerFormData): void (e: 'validate', result: { valid: boolean; message: string }): void diff --git a/src/views/iot/rule/scene/form/configs/CurrentTimeConditionConfig.vue b/src/views/iot/rule/scene/form/configs/CurrentTimeConditionConfig.vue index 8eaa05cc1..2dcea843f 100644 --- a/src/views/iot/rule/scene/form/configs/CurrentTimeConditionConfig.vue +++ b/src/views/iot/rule/scene/form/configs/CurrentTimeConditionConfig.vue @@ -102,18 +102,14 @@ import { /** 当前时间条件配置组件 */ defineOptions({ name: 'CurrentTimeConditionConfig' }) -interface Props { +const props = defineProps<{ modelValue: ConditionFormData -} +}>() -interface Emits { +const emit = defineEmits<{ (e: 'update:modelValue', value: ConditionFormData): void - (e: 'validate', result: { valid: boolean; message: string }): void -} - -const props = defineProps() -const emit = defineEmits() +}>() const condition = useVModel(props, 'modelValue', emit) diff --git a/src/views/iot/rule/scene/form/configs/DeviceControlConfig.vue b/src/views/iot/rule/scene/form/configs/DeviceControlConfig.vue index 4b102e3ca..9782869bd 100644 --- a/src/views/iot/rule/scene/form/configs/DeviceControlConfig.vue +++ b/src/views/iot/rule/scene/form/configs/DeviceControlConfig.vue @@ -27,9 +27,13 @@ @@ -56,17 +60,14 @@ import { ActionFormData } from '@/api/iot/rule/scene/scene.types' /** 设备控制配置组件 */ defineOptions({ name: 'DeviceControlConfig' }) -interface Props { +const props = defineProps<{ modelValue: ActionFormData -} +}>() -interface Emits { +const emit = defineEmits<{ (e: 'update:modelValue', value: ActionFormData): void (e: 'validate', result: { valid: boolean; message: string }): void -} - -const props = defineProps() -const emit = defineEmits() +}>() const action = useVModel(props, 'modelValue', emit) diff --git a/src/views/iot/rule/scene/form/configs/DeviceStatusConditionConfig.vue b/src/views/iot/rule/scene/form/configs/DeviceStatusConditionConfig.vue index 0190a28da..1b4e11d1c 100644 --- a/src/views/iot/rule/scene/form/configs/DeviceStatusConditionConfig.vue +++ b/src/views/iot/rule/scene/form/configs/DeviceStatusConditionConfig.vue @@ -26,31 +26,6 @@ - - - - - -
- - {{ option.label }} - {{ option.description }} -
-
-
-
-
- @@ -76,35 +51,32 @@ + + + + + + +
+ + {{ option.label }} + {{ option.description }} +
+
+
+
+
- - - -
-
- - 条件预览 -
-
- {{ conditionPreview }} -
-
- - -
- -
@@ -117,17 +89,14 @@ import { ConditionFormData } from '@/api/iot/rule/scene/scene.types' /** 设备状态条件配置组件 */ defineOptions({ name: 'DeviceStatusConditionConfig' }) -interface Props { +const props = defineProps<{ modelValue: ConditionFormData -} +}>() -interface Emits { +const emit = defineEmits<{ (e: 'update:modelValue', value: ConditionFormData): void (e: 'validate', result: { valid: boolean; message: string }): void -} - -const props = defineProps() -const emit = defineEmits() +}>() const condition = useVModel(props, 'modelValue', emit) @@ -169,22 +138,6 @@ const statusOperatorOptions = [ const validationMessage = ref('') const isValid = ref(true) -// 计算属性 -const conditionPreview = computed(() => { - if (!condition.value.param || !condition.value.operator) { - return '' - } - - const statusLabel = - deviceStatusOptions.find((opt) => opt.value === condition.value.param)?.label || - condition.value.param - const operatorLabel = - statusOperatorOptions.find((opt) => opt.value === condition.value.operator)?.label || - condition.value.operator - - return `设备状态 ${operatorLabel} ${statusLabel}` -}) - // 事件处理 const updateConditionField = (field: keyof ConditionFormData, value: any) => { condition.value[field] = value diff --git a/src/views/iot/rule/scene/form/configs/DeviceTriggerConfig.vue b/src/views/iot/rule/scene/form/configs/DeviceTriggerConfig.vue index 5e41a5f00..e16d558ec 100644 --- a/src/views/iot/rule/scene/form/configs/DeviceTriggerConfig.vue +++ b/src/views/iot/rule/scene/form/configs/DeviceTriggerConfig.vue @@ -68,14 +68,13 @@ import { IotRuleSceneTriggerTypeEnum as TriggerTypeEnum } from '@/views/iot/util /** 设备触发配置组件 */ defineOptions({ name: 'DeviceTriggerConfig' }) -// Props 和 Emits 定义 const props = defineProps<{ modelValue: TriggerFormData }>() const emit = defineEmits<{ - 'update:modelValue': [value: TriggerFormData] - validate: [result: { valid: boolean; message: string }] + (e: 'update:modelValue', value: TriggerFormData): void + (e: 'validate', value: { valid: boolean; message: string }): void }>() const trigger = useVModel(props, 'modelValue', emit) @@ -126,7 +125,6 @@ const addConditionGroup = () => { } // 事件处理 - const handleConditionGroupValidate = () => { updateValidationResult() } diff --git a/src/views/iot/rule/scene/form/configs/MainConditionConfig.vue b/src/views/iot/rule/scene/form/configs/MainConditionConfig.vue index b652bae0d..a3342bd73 100644 --- a/src/views/iot/rule/scene/form/configs/MainConditionConfig.vue +++ b/src/views/iot/rule/scene/form/configs/MainConditionConfig.vue @@ -51,6 +51,7 @@ defineProps<{ modelValue?: ConditionFormData triggerType: number }>() + const emit = defineEmits<{ (e: 'update:modelValue', value?: ConditionFormData): void (e: 'validate', result: { valid: boolean; message: string }): void diff --git a/src/views/iot/rule/scene/form/configs/MainConditionInnerConfig.vue b/src/views/iot/rule/scene/form/configs/MainConditionInnerConfig.vue index 709cf7356..9fec9b792 100644 --- a/src/views/iot/rule/scene/form/configs/MainConditionInnerConfig.vue +++ b/src/views/iot/rule/scene/form/configs/MainConditionInnerConfig.vue @@ -104,19 +104,15 @@ import { useVModel } from '@vueuse/core' /** 主条件内部配置组件 */ defineOptions({ name: 'MainConditionInnerConfig' }) -interface Props { +const props = defineProps<{ modelValue: ConditionFormData triggerType: number -} +}>() -interface Emits { +const emit = defineEmits<{ (e: 'update:modelValue', value: ConditionFormData): void - (e: 'validate', result: { valid: boolean; message: string }): void -} - -const props = defineProps() -const emit = defineEmits() +}>() // 响应式数据 const condition = useVModel(props, 'modelValue', emit) diff --git a/src/views/iot/rule/scene/form/configs/SubConditionGroupConfig.vue b/src/views/iot/rule/scene/form/configs/SubConditionGroupConfig.vue index 3cd8167e7..62ed91d80 100644 --- a/src/views/iot/rule/scene/form/configs/SubConditionGroupConfig.vue +++ b/src/views/iot/rule/scene/form/configs/SubConditionGroupConfig.vue @@ -98,20 +98,16 @@ import { /** 子条件组配置组件 */ defineOptions({ name: 'SubConditionGroupConfig' }) -interface Props { +const props = defineProps<{ modelValue: SubConditionGroupFormData triggerType: number maxConditions?: number -} +}>() -interface Emits { +const emit = defineEmits<{ (e: 'update:modelValue', value: SubConditionGroupFormData): void - (e: 'validate', result: { valid: boolean; message: string }): void -} - -const props = defineProps() -const emit = defineEmits() +}>() const subGroup = useVModel(props, 'modelValue', emit) diff --git a/src/views/iot/rule/scene/form/configs/TimerTriggerConfig.vue b/src/views/iot/rule/scene/form/configs/TimerTriggerConfig.vue index 4e2f10248..087939fd0 100644 --- a/src/views/iot/rule/scene/form/configs/TimerTriggerConfig.vue +++ b/src/views/iot/rule/scene/form/configs/TimerTriggerConfig.vue @@ -25,18 +25,13 @@ import { Crontab } from '@/components/Crontab' /** 定时触发配置组件 */ defineOptions({ name: 'TimerTriggerConfig' }) -// TODO @puhui999:下面的 Props、Emits 可以合并到变量那; -interface Props { +const props = defineProps<{ modelValue?: string -} - -interface Emits { +}>() +const emit = defineEmits<{ (e: 'update:modelValue', value: string): void (e: 'validate', result: { valid: boolean; message: string }): void -} - -const props = defineProps() -const emit = defineEmits() +}>() const localValue = useVModel(props, 'modelValue', emit, { defaultValue: '0 0 12 * * ?' diff --git a/src/views/iot/rule/scene/form/selectors/ConditionTypeSelector.vue b/src/views/iot/rule/scene/form/selectors/ConditionTypeSelector.vue index c955ceffa..60a11f184 100644 --- a/src/views/iot/rule/scene/form/selectors/ConditionTypeSelector.vue +++ b/src/views/iot/rule/scene/form/selectors/ConditionTypeSelector.vue @@ -29,17 +29,14 @@ import { IotRuleSceneTriggerConditionTypeEnum } from '@/api/iot/rule/scene/scene /** 条件类型选择器组件 */ defineOptions({ name: 'ConditionTypeSelector' }) -interface Props { +defineProps<{ modelValue?: number -} +}>() -interface Emits { +const emit = defineEmits<{ (e: 'update:modelValue', value: number): void (e: 'change', value: number): void -} - -const props = defineProps() -const emit = defineEmits() +}>() // 条件类型选项 const conditionTypeOptions = [ diff --git a/src/views/iot/rule/scene/form/selectors/DeviceSelector.vue b/src/views/iot/rule/scene/form/selectors/DeviceSelector.vue index 8afdf623d..28e7e689a 100644 --- a/src/views/iot/rule/scene/form/selectors/DeviceSelector.vue +++ b/src/views/iot/rule/scene/form/selectors/DeviceSelector.vue @@ -18,9 +18,9 @@ >
-
{{ - device.deviceName - }}
+
{{ device.deviceName }} +
{{ device.deviceKey }}
@@ -42,18 +42,15 @@ import { DeviceApi } from '@/api/iot/device/device' /** 设备选择器组件 */ defineOptions({ name: 'DeviceSelector' }) -interface Props { +const props = defineProps<{ modelValue?: number productId?: number -} +}>() -interface Emits { +const emit = defineEmits<{ (e: 'update:modelValue', value?: number): void (e: 'change', value?: number): void -} - -const props = defineProps() -const emit = defineEmits() +}>() // 状态 const deviceLoading = ref(false) diff --git a/src/views/iot/rule/scene/form/selectors/OperatorSelector.vue b/src/views/iot/rule/scene/form/selectors/OperatorSelector.vue index 838302f1f..513fea4b9 100644 --- a/src/views/iot/rule/scene/form/selectors/OperatorSelector.vue +++ b/src/views/iot/rule/scene/form/selectors/OperatorSelector.vue @@ -39,19 +39,15 @@ import { useVModel } from '@vueuse/core' /** 操作符选择器组件 */ defineOptions({ name: 'OperatorSelector' }) -interface Props { +const props = defineProps<{ modelValue?: string propertyType?: string -} +}>() -interface Emits { +const emit = defineEmits<{ (e: 'update:modelValue', value: string): void - (e: 'change', value: string): void -} - -const props = defineProps() -const emit = defineEmits() +}>() const localValue = useVModel(props, 'modelValue', emit) diff --git a/src/views/iot/rule/scene/form/selectors/ProductDeviceSelector.vue b/src/views/iot/rule/scene/form/selectors/ProductDeviceSelector.vue index bae5b7076..3132e98d8 100644 --- a/src/views/iot/rule/scene/form/selectors/ProductDeviceSelector.vue +++ b/src/views/iot/rule/scene/form/selectors/ProductDeviceSelector.vue @@ -22,13 +22,14 @@ >
-
{{ product.name }}
-
{{ product.productKey }}
+
{{ product.name }} +
+
{{ product.productKey }} +
- - - {{ product.status === 0 ? '正常' : '禁用' }} - +
@@ -70,8 +71,12 @@ >
-
{{ device.deviceName }}
-
{{ device.nickname || '无备注' }}
+
{{ device.deviceName }} +
+
{{ device.nickname || '无备注' }} +
{{ getDeviceStatusText(device.state) }} @@ -84,7 +89,10 @@ -
+
已选择设备 @@ -92,14 +100,22 @@
产品: - {{ selectedProduct?.name }} + {{ + selectedProduct?.name + }} {{ selectedProduct?.productKey }}
设备: - 全部设备 - {{ selectedDevice?.deviceName }} - 全部 + 全部设备 + {{ + selectedDevice?.deviceName + }} + 全部 {{ getDeviceStatusText(selectedDevice?.state) }} @@ -113,6 +129,7 @@ import { useVModel } from '@vueuse/core' import { ProductApi } from '@/api/iot/product/product' import { DeviceApi } from '@/api/iot/device/device' +import { DICT_TYPE } from '@/utils/dict' /** 产品设备选择器组件 */ defineOptions({ name: 'ProductDeviceSelector' }) @@ -124,7 +141,9 @@ interface Props { interface Emits { (e: 'update:productId', value?: number): void + (e: 'update:deviceId', value?: number): void + (e: 'change', value: { productId?: number; deviceId?: number }): void } diff --git a/src/views/iot/rule/scene/form/selectors/ProductSelector.vue b/src/views/iot/rule/scene/form/selectors/ProductSelector.vue index 70d95964c..56f8c648b 100644 --- a/src/views/iot/rule/scene/form/selectors/ProductSelector.vue +++ b/src/views/iot/rule/scene/form/selectors/ProductSelector.vue @@ -17,16 +17,14 @@ >
-
{{ - product.name - }}
-
{{ - product.productKey - }}
+
{{ product.name }} +
+
{{ product.productKey }} +
- - {{ product.status === 0 ? '正常' : '禁用' }} - +
@@ -34,21 +32,19 @@