From 73d2c2005cdfdaae12a9fd2d8f2da7f179ca2767 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Fri, 21 Mar 2025 13:30:22 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=8A=9F=E8=83=BD=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E3=80=91IoT:=20=E8=A7=84=E5=88=99=E5=9C=BA=E6=99=AF=E7=9B=91?= =?UTF-8?q?=E5=90=AC=E5=99=A8=E7=9B=B8=E5=85=B3=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/iot/rule/scene/index.ts | 7 +- src/api/iot/rule/scene/scene.types.ts | 8 +- src/store/modules/app.ts | 2 +- src/views/iot/rule/scene/IoTRuleSceneForm.vue | 39 +- .../rule/scene/components/DeviceListener.vue | 86 ++-- .../scene/components/TriggerConditions.vue | 379 ------------------ 6 files changed, 97 insertions(+), 424 deletions(-) delete mode 100644 src/views/iot/rule/scene/components/TriggerConditions.vue diff --git a/src/api/iot/rule/scene/index.ts b/src/api/iot/rule/scene/index.ts index dd1ee5977..17f1f7f74 100644 --- a/src/api/iot/rule/scene/index.ts +++ b/src/api/iot/rule/scene/index.ts @@ -1,12 +1,13 @@ import request from '@/config/axios' +import { IotRuleSceneTriggerConfig } from '@/api/iot/rule/scene/scene.types' // IoT 规则场景(场景联动) VO export interface RuleSceneVO { id?: number // 场景编号 - name?: string // 场景名称 + name: string // 场景名称 description?: string // 场景描述 - status?: number // 场景状态 - triggers?: any[] // 触发器数组 + status: number // 场景状态 + triggers: IotRuleSceneTriggerConfig[] // 触发器数组 actions?: any[] // 执行器数组 } diff --git a/src/api/iot/rule/scene/scene.types.ts b/src/api/iot/rule/scene/scene.types.ts index 8914f0d7c..6e3350878 100644 --- a/src/api/iot/rule/scene/scene.types.ts +++ b/src/api/iot/rule/scene/scene.types.ts @@ -9,11 +9,11 @@ export interface IotRuleSceneTriggerConfig { */ type: number /** 产品标识 */ - productKey?: string + productKey: string /** 设备名称数组 */ - deviceNames?: string[] + deviceNames: string[] /** 触发条件数组。条件之间是"或"的关系 */ - conditions?: IotRuleSceneTriggerCondition[] + conditions: IotRuleSceneTriggerCondition[] /** CRON 表达式。当 type = 2 时必填 */ cronExpression?: string } @@ -29,7 +29,7 @@ export interface IotRuleSceneTriggerCondition { */ type: string /** 消息标识符 */ - identifier: string + identifier?: string /** 参数数组。参数之间是"或"的关系 */ parameters: IotRuleSceneTriggerConditionParameter[] } diff --git a/src/store/modules/app.ts b/src/store/modules/app.ts index e3d6a56f3..a6eee78fb 100644 --- a/src/store/modules/app.ts +++ b/src/store/modules/app.ts @@ -61,7 +61,7 @@ export const useAppStore = defineStore('app', { tagsView: true, // 标签页 tagsViewImmerse: false, // 标签页沉浸 tagsViewIcon: true, // 是否显示标签图标 - logo: true, // logo + logo: false, // logo fixedHeader: true, // 固定toolheader footer: true, // 显示页脚 greyMode: false, // 是否开始灰色模式,用于特殊悼念日 diff --git a/src/views/iot/rule/scene/IoTRuleSceneForm.vue b/src/views/iot/rule/scene/IoTRuleSceneForm.vue index db08aa1f4..1a396f72c 100644 --- a/src/views/iot/rule/scene/IoTRuleSceneForm.vue +++ b/src/views/iot/rule/scene/IoTRuleSceneForm.vue @@ -35,10 +35,19 @@ 触发器配置 + > + + 添加触发器 @@ -59,6 +68,8 @@ import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' import { RuleSceneApi, RuleSceneVO } from '@/api/iot/rule/scene' import DeviceListener from './components/DeviceListener.vue' +import { Delete } from '@element-plus/icons-vue' +import { IotRuleSceneTriggerConfig } from '@/api/iot/rule/scene/scene.types' /** IoT 规则场景(场景联动) 表单 */ defineOptions({ name: 'RuleSceneForm' }) @@ -72,7 +83,7 @@ const formLoading = ref(false) // 表单的加载中:1)修改时的数据加 const formType = ref('') // 表单的类型:create - 新增;update - 修改 const formData = ref({ status: 0, - triggers: [] + triggers: [] as IotRuleSceneTriggerConfig[] } as RuleSceneVO) const formRules = reactive({ name: [{ required: true, message: '场景名称不能为空', trigger: 'blur' }], @@ -82,10 +93,26 @@ const formRules = reactive({ }) const formRef = ref() // 表单 Ref +/** 添加触发器 */ const addTrigger = () => { - formData.value.triggers?.push({}) + formData.value.triggers.push({ + type: 1, + productKey: '', + deviceNames: [], + conditions: [ + { + type: 'property', + parameters: [] + } + ] + }) +} +/** 移除触发器 */ +const removeTrigger = (index: number) => { + const newTriggers = [...formData.value.triggers] + newTriggers.splice(index, 1) + formData.value.triggers = newTriggers } - /** 打开弹窗 */ const open = async (type: string, id?: number) => { dialogVisible.value = true @@ -132,7 +159,7 @@ const submitForm = async () => { const resetForm = () => { formData.value = { status: 0, - triggers: [] + triggers: [] as IotRuleSceneTriggerConfig[] } as RuleSceneVO formRef.value?.resetFields() } diff --git a/src/views/iot/rule/scene/components/DeviceListener.vue b/src/views/iot/rule/scene/components/DeviceListener.vue index 57f2fe8ab..09d51d542 100644 --- a/src/views/iot/rule/scene/components/DeviceListener.vue +++ b/src/views/iot/rule/scene/components/DeviceListener.vue @@ -3,7 +3,12 @@
触发条件 - + 设备 选择设备
- - + +
+ +
-
+ +
- +
- +
- +
+ 添加触发条件