2025-07-18 10:00:06 +08:00
|
|
|
|
// TODO @puhui999:这些后续需要删除哈
|
2025-07-17 21:31:12 +08:00
|
|
|
|
# IoT场景联动规则表单设计思路文档
|
|
|
|
|
|
|
|
|
|
|
|
## 概述
|
|
|
|
|
|
|
|
|
|
|
|
本文档详细描述了IoT场景联动规则表单的设计思路,包括表单结构、组件设计、数据流转和用户交互逻辑。通过Mermaid图直观展示各个组件之间的关系和数据流向。
|
|
|
|
|
|
|
|
|
|
|
|
## 表单整体架构设计
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 表单主体结构
|
|
|
|
|
|
|
|
|
|
|
|
表单采用分步骤设计,包含以下主要部分:
|
|
|
|
|
|
|
|
|
|
|
|
- **基础信息配置**:场景名称、描述、状态
|
|
|
|
|
|
- **触发器配置**:设备触发或定时触发
|
|
|
|
|
|
- **执行器配置**:设备控制或告警配置
|
|
|
|
|
|
- **预览与保存**:配置预览和最终保存
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 组件层次结构图
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
graph TB
|
|
|
|
|
|
A[RuleSceneForm<br/>主表单组件] --> B[BasicInfoSection<br/>基础信息]
|
|
|
|
|
|
A --> C[TriggerSection<br/>触发器配置]
|
|
|
|
|
|
A --> D[ActionSection<br/>执行器配置]
|
|
|
|
|
|
A --> E[PreviewSection<br/>预览区域]
|
|
|
|
|
|
|
|
|
|
|
|
%% 基础信息组件
|
|
|
|
|
|
B --> B1[NameInput<br/>场景名称输入]
|
|
|
|
|
|
B --> B2[DescriptionInput<br/>场景描述输入]
|
|
|
|
|
|
B --> B3[StatusRadio<br/>状态选择]
|
|
|
|
|
|
|
|
|
|
|
|
%% 触发器配置组件
|
|
|
|
|
|
C --> C1[TriggerTypeSelector<br/>触发类型选择器]
|
|
|
|
|
|
C --> C2[DeviceTriggerConfig<br/>设备触发配置]
|
|
|
|
|
|
C --> C3[TimerTriggerConfig<br/>定时触发配置]
|
|
|
|
|
|
|
|
|
|
|
|
%% 设备触发配置子组件
|
|
|
|
|
|
C2 --> C21[ProductSelector<br/>产品选择器]
|
|
|
|
|
|
C2 --> C22[DeviceSelector<br/>设备选择器]
|
|
|
|
|
|
C2 --> C23[PropertySelector<br/>属性选择器]
|
|
|
|
|
|
C2 --> C24[OperatorSelector<br/>操作符选择器]
|
|
|
|
|
|
C2 --> C25[ValueInput<br/>值输入]
|
|
|
|
|
|
C2 --> C26[ConditionGroupConfig<br/>条件分组配置]
|
|
|
|
|
|
|
|
|
|
|
|
%% 定时触发配置子组件
|
|
|
|
|
|
C3 --> C31[CronInput<br/>CRON表达式输入]
|
|
|
|
|
|
C3 --> C32[CronBuilder<br/>可视化CRON构建器]
|
|
|
|
|
|
C3 --> C33[NextExecutionPreview<br/>下次执行时间预览]
|
|
|
|
|
|
|
|
|
|
|
|
%% 执行器配置组件
|
|
|
|
|
|
D --> D1[ActionTypeSelector<br/>执行类型选择器]
|
|
|
|
|
|
D --> D2[DeviceControlConfig<br/>设备控制配置]
|
|
|
|
|
|
D --> D3[AlertConfig<br/>告警配置]
|
|
|
|
|
|
|
|
|
|
|
|
%% 设备控制配置子组件
|
|
|
|
|
|
D2 --> D21[TargetProductSelector<br/>目标产品选择器]
|
|
|
|
|
|
D2 --> D22[TargetDeviceSelector<br/>目标设备选择器]
|
|
|
|
|
|
D2 --> D23[ControlTypeSelector<br/>控制类型选择器]
|
|
|
|
|
|
D2 --> D24[ParamsConfig<br/>参数配置]
|
|
|
|
|
|
|
|
|
|
|
|
%% 告警配置子组件
|
|
|
|
|
|
D3 --> D31[AlertConfigSelector<br/>告警配置选择器]
|
|
|
|
|
|
|
|
|
|
|
|
%% 预览区域组件
|
|
|
|
|
|
E --> E1[ConfigPreview<br/>配置预览]
|
|
|
|
|
|
E --> E2[ValidationResult<br/>验证结果]
|
|
|
|
|
|
E --> E3[SaveButton<br/>保存按钮]
|
|
|
|
|
|
|
|
|
|
|
|
%% 样式定义
|
|
|
|
|
|
classDef mainComponent fill:#e1f5fe,stroke:#01579b,stroke-width:2px
|
|
|
|
|
|
classDef sectionComponent fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
|
|
|
|
|
|
classDef subComponent fill:#e8f5e8,stroke:#1b5e20,stroke-width:2px
|
|
|
|
|
|
|
|
|
|
|
|
class A mainComponent
|
|
|
|
|
|
class B,C,D,E sectionComponent
|
|
|
|
|
|
class B1,B2,B3,C1,C2,C3,C21,C22,C23,C24,C25,C26,C31,C32,C33,D1,D2,D3,D21,D22,D23,D24,D31,E1,E2,E3 subComponent
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 组件层次结构文本
|
|
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
|
RuleSceneForm (主表单)
|
|
|
|
|
|
├── BasicInfoSection (基础信息)
|
|
|
|
|
|
│ ├── NameInput (场景名称输入)
|
|
|
|
|
|
│ ├── DescriptionInput (场景描述输入)
|
|
|
|
|
|
│ └── StatusRadio (状态选择)
|
|
|
|
|
|
├── TriggerSection (触发器配置)
|
|
|
|
|
|
│ ├── TriggerTypeSelector (触发类型选择)
|
|
|
|
|
|
│ ├── DeviceTriggerConfig (设备触发配置)
|
|
|
|
|
|
│ │ ├── ProductSelector (产品选择器)
|
|
|
|
|
|
│ │ ├── DeviceSelector (设备选择器)
|
|
|
|
|
|
│ │ ├── PropertySelector (属性选择器)
|
|
|
|
|
|
│ │ ├── OperatorSelector (操作符选择器)
|
|
|
|
|
|
│ │ ├── ValueInput (值输入)
|
|
|
|
|
|
│ │ └── ConditionGroupConfig (条件分组配置)
|
|
|
|
|
|
│ └── TimerTriggerConfig (定时触发配置)
|
|
|
|
|
|
│ ├── CronInput (CRON表达式输入)
|
|
|
|
|
|
│ ├── CronBuilder (可视化CRON构建器)
|
|
|
|
|
|
│ └── NextExecutionPreview (下次执行时间预览)
|
|
|
|
|
|
├── ActionSection (执行器配置)
|
|
|
|
|
|
│ ├── ActionTypeSelector (执行类型选择)
|
|
|
|
|
|
│ ├── DeviceControlConfig (设备控制配置)
|
|
|
|
|
|
│ │ ├── TargetProductSelector (目标产品选择器)
|
|
|
|
|
|
│ │ ├── TargetDeviceSelector (目标设备选择器)
|
|
|
|
|
|
│ │ ├── ControlTypeSelector (控制类型选择器)
|
|
|
|
|
|
│ │ └── ParamsConfig (参数配置)
|
|
|
|
|
|
│ └── AlertConfig (告警配置)
|
|
|
|
|
|
│ └── AlertConfigSelector (告警配置选择器)
|
|
|
|
|
|
└── PreviewSection (预览区域)
|
|
|
|
|
|
├── ConfigPreview (配置预览)
|
|
|
|
|
|
├── ValidationResult (验证结果)
|
|
|
|
|
|
└── SaveButton (保存按钮)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 表单数据结构设计
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 表单数据模型结构图
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
classDiagram
|
|
|
|
|
|
class RuleSceneFormData {
|
|
|
|
|
|
+number id?
|
|
|
|
|
|
+string name
|
|
|
|
|
|
+string description?
|
|
|
|
|
|
+number status
|
|
|
|
|
|
+TriggerFormData[] triggers
|
|
|
|
|
|
+ActionFormData[] actions
|
|
|
|
|
|
+validateForm() boolean
|
|
|
|
|
|
+toApiFormat() ApiRequestData
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class TriggerFormData {
|
|
|
|
|
|
+number type
|
|
|
|
|
|
+number productId?
|
|
|
|
|
|
+number deviceId?
|
|
|
|
|
|
+string identifier?
|
|
|
|
|
|
+string operator?
|
|
|
|
|
|
+string value?
|
|
|
|
|
|
+string cronExpression?
|
|
|
|
|
|
+ConditionGroupFormData[] conditionGroups?
|
|
|
|
|
|
+validateTrigger() boolean
|
|
|
|
|
|
+isDeviceTrigger() boolean
|
|
|
|
|
|
+isTimerTrigger() boolean
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class ActionFormData {
|
|
|
|
|
|
+number type
|
|
|
|
|
|
+number productId?
|
|
|
|
|
|
+number deviceId?
|
|
|
|
|
|
+Record params?
|
|
|
|
|
|
+number alertConfigId?
|
|
|
|
|
|
+validateAction() boolean
|
|
|
|
|
|
+isDeviceAction() boolean
|
|
|
|
|
|
+isAlertAction() boolean
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class ConditionGroupFormData {
|
|
|
|
|
|
+ConditionFormData[] conditions
|
|
|
|
|
|
+string logicOperator
|
|
|
|
|
|
+validateGroup() boolean
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class ConditionFormData {
|
|
|
|
|
|
+number type
|
|
|
|
|
|
+number productId
|
|
|
|
|
|
+number deviceId
|
|
|
|
|
|
+string identifier
|
|
|
|
|
|
+string operator
|
|
|
|
|
|
+string param
|
|
|
|
|
|
+validateCondition() boolean
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class TriggerTypeEnum {
|
|
|
|
|
|
<<enumeration>>
|
|
|
|
|
|
DEVICE_STATE_UPDATE: 1
|
|
|
|
|
|
DEVICE_PROPERTY_POST: 2
|
|
|
|
|
|
DEVICE_EVENT_POST: 3
|
|
|
|
|
|
DEVICE_SERVICE_INVOKE: 4
|
|
|
|
|
|
TIMER: 100
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class ActionTypeEnum {
|
|
|
|
|
|
<<enumeration>>
|
|
|
|
|
|
DEVICE_PROPERTY_SET: 1
|
|
|
|
|
|
DEVICE_SERVICE_INVOKE: 2
|
|
|
|
|
|
ALERT_TRIGGER: 100
|
|
|
|
|
|
ALERT_RECOVER: 101
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class OperatorEnum {
|
|
|
|
|
|
<<enumeration>>
|
|
|
|
|
|
EQUALS: "="
|
|
|
|
|
|
NOT_EQUALS: "!="
|
|
|
|
|
|
GREATER_THAN: ">"
|
|
|
|
|
|
LESS_THAN: "<"
|
|
|
|
|
|
IN: "in"
|
|
|
|
|
|
BETWEEN: "between"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
RuleSceneFormData "1" --> "*" TriggerFormData : contains
|
|
|
|
|
|
RuleSceneFormData "1" --> "*" ActionFormData : contains
|
|
|
|
|
|
TriggerFormData "1" --> "*" ConditionGroupFormData : contains
|
|
|
|
|
|
ConditionGroupFormData "1" --> "*" ConditionFormData : contains
|
|
|
|
|
|
TriggerFormData --> TriggerTypeEnum : uses
|
|
|
|
|
|
ActionFormData --> ActionTypeEnum : uses
|
|
|
|
|
|
ConditionFormData --> OperatorEnum : uses
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 表单数据模型代码
|
|
|
|
|
|
|
|
|
|
|
|
```typescript
|
|
|
|
|
|
interface RuleSceneFormData {
|
|
|
|
|
|
// 基础信息
|
|
|
|
|
|
id?: number;
|
|
|
|
|
|
name: string;
|
|
|
|
|
|
description?: string;
|
|
|
|
|
|
status: number;
|
|
|
|
|
|
|
|
|
|
|
|
// 触发器配置
|
|
|
|
|
|
triggers: TriggerFormData[];
|
|
|
|
|
|
|
|
|
|
|
|
// 执行器配置
|
|
|
|
|
|
actions: ActionFormData[];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
interface TriggerFormData {
|
|
|
|
|
|
type: number;
|
|
|
|
|
|
productId?: number;
|
|
|
|
|
|
deviceId?: number;
|
|
|
|
|
|
identifier?: string;
|
|
|
|
|
|
operator?: string;
|
|
|
|
|
|
value?: string;
|
|
|
|
|
|
cronExpression?: string;
|
|
|
|
|
|
conditionGroups?: ConditionGroupFormData[];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
interface ActionFormData {
|
|
|
|
|
|
type: number;
|
|
|
|
|
|
productId?: number;
|
|
|
|
|
|
deviceId?: number;
|
|
|
|
|
|
params?: Record<string, any>;
|
|
|
|
|
|
alertConfigId?: number;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
interface ConditionGroupFormData {
|
|
|
|
|
|
conditions: ConditionFormData[];
|
|
|
|
|
|
logicOperator: 'AND' | 'OR';
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
interface ConditionFormData {
|
|
|
|
|
|
type: number;
|
|
|
|
|
|
productId: number;
|
|
|
|
|
|
deviceId: number;
|
|
|
|
|
|
identifier: string;
|
|
|
|
|
|
operator: string;
|
|
|
|
|
|
param: string;
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 表单验证规则
|
|
|
|
|
|
|
|
|
|
|
|
```typescript
|
|
|
|
|
|
const validationRules = {
|
|
|
|
|
|
name: [
|
|
|
|
|
|
{ required: true, message: '场景名称不能为空' },
|
|
|
|
|
|
{ max: 50, message: '场景名称不能超过50个字符' }
|
|
|
|
|
|
],
|
|
|
|
|
|
status: [
|
|
|
|
|
|
{ required: true, message: '场景状态不能为空' },
|
|
|
|
|
|
{ type: 'enum', enum: [0, 1], message: '状态值必须为0或1' }
|
|
|
|
|
|
],
|
|
|
|
|
|
triggers: [
|
|
|
|
|
|
{ required: true, message: '触发器配置不能为空' },
|
|
|
|
|
|
{ type: 'array', min: 1, message: '至少需要一个触发器' }
|
|
|
|
|
|
],
|
|
|
|
|
|
actions: [
|
|
|
|
|
|
{ required: true, message: '执行器配置不能为空' },
|
|
|
|
|
|
{ type: 'array', min: 1, message: '至少需要一个执行器' }
|
|
|
|
|
|
]
|
|
|
|
|
|
};
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 核心组件设计
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 基础信息组件 (BasicInfoSection)
|
|
|
|
|
|
|
|
|
|
|
|
```vue
|
|
|
|
|
|
<template>
|
|
|
|
|
|
<el-card class="basic-info-section">
|
|
|
|
|
|
<template #header>
|
|
|
|
|
|
<span>基础信息</span>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<el-form :model="formData" :rules="rules" label-width="120px">
|
|
|
|
|
|
<el-form-item label="场景名称" prop="name">
|
|
|
|
|
|
<el-input
|
|
|
|
|
|
v-model="formData.name"
|
|
|
|
|
|
placeholder="请输入场景名称"
|
|
|
|
|
|
maxlength="50"
|
|
|
|
|
|
show-word-limit
|
|
|
|
|
|
/>
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
|
|
|
|
<el-form-item label="场景描述" prop="description">
|
|
|
|
|
|
<el-input
|
|
|
|
|
|
v-model="formData.description"
|
|
|
|
|
|
type="textarea"
|
|
|
|
|
|
placeholder="请输入场景描述"
|
|
|
|
|
|
:rows="3"
|
|
|
|
|
|
maxlength="200"
|
|
|
|
|
|
show-word-limit
|
|
|
|
|
|
/>
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
|
|
|
|
<el-form-item label="场景状态" prop="status">
|
|
|
|
|
|
<el-radio-group v-model="formData.status">
|
|
|
|
|
|
<el-radio :label="0">开启</el-radio>
|
|
|
|
|
|
<el-radio :label="1">关闭</el-radio>
|
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
</el-form>
|
|
|
|
|
|
</el-card>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 触发器配置组件 (TriggerSection)
|
|
|
|
|
|
|
|
|
|
|
|
```vue
|
|
|
|
|
|
<template>
|
|
|
|
|
|
<el-card class="trigger-section">
|
|
|
|
|
|
<template #header>
|
|
|
|
|
|
<div class="section-header">
|
|
|
|
|
|
<span>触发器配置</span>
|
|
|
|
|
|
<el-button type="primary" size="small" @click="addTrigger">
|
|
|
|
|
|
<el-icon><Plus /></el-icon>
|
|
|
|
|
|
添加触发器
|
|
|
|
|
|
</el-button>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<div v-for="(trigger, index) in triggers" :key="index" class="trigger-item">
|
|
|
|
|
|
<div class="trigger-header">
|
|
|
|
|
|
<span>触发器 {{ index + 1 }}</span>
|
|
|
|
|
|
<el-button
|
|
|
|
|
|
type="danger"
|
|
|
|
|
|
size="small"
|
|
|
|
|
|
text
|
|
|
|
|
|
@click="removeTrigger(index)"
|
|
|
|
|
|
v-if="triggers.length > 1"
|
|
|
|
|
|
>
|
|
|
|
|
|
删除
|
|
|
|
|
|
</el-button>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 触发类型选择 -->
|
|
|
|
|
|
<TriggerTypeSelector v-model="trigger.type" @change="onTriggerTypeChange(trigger, $event)" />
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 设备触发配置 -->
|
|
|
|
|
|
<DeviceTriggerConfig
|
|
|
|
|
|
v-if="isDeviceTrigger(trigger.type)"
|
|
|
|
|
|
v-model="trigger"
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 定时触发配置 -->
|
|
|
|
|
|
<TimerTriggerConfig
|
|
|
|
|
|
v-if="trigger.type === TriggerType.TIMER"
|
|
|
|
|
|
v-model="trigger.cronExpression"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</el-card>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 执行器配置组件 (ActionSection)
|
|
|
|
|
|
|
|
|
|
|
|
```vue
|
|
|
|
|
|
<template>
|
|
|
|
|
|
<el-card class="action-section">
|
|
|
|
|
|
<template #header>
|
|
|
|
|
|
<div class="section-header">
|
|
|
|
|
|
<span>执行器配置</span>
|
|
|
|
|
|
<el-button type="primary" size="small" @click="addAction">
|
|
|
|
|
|
<el-icon><Plus /></el-icon>
|
|
|
|
|
|
添加执行器
|
|
|
|
|
|
</el-button>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<div v-for="(action, index) in actions" :key="index" class="action-item">
|
|
|
|
|
|
<div class="action-header">
|
|
|
|
|
|
<span>执行器 {{ index + 1 }}</span>
|
|
|
|
|
|
<el-button
|
|
|
|
|
|
type="danger"
|
|
|
|
|
|
size="small"
|
|
|
|
|
|
text
|
|
|
|
|
|
@click="removeAction(index)"
|
|
|
|
|
|
v-if="actions.length > 1"
|
|
|
|
|
|
>
|
|
|
|
|
|
删除
|
|
|
|
|
|
</el-button>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 执行类型选择 -->
|
|
|
|
|
|
<ActionTypeSelector v-model="action.type" @change="onActionTypeChange(action, $event)" />
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 设备控制配置 -->
|
|
|
|
|
|
<DeviceControlConfig
|
|
|
|
|
|
v-if="isDeviceAction(action.type)"
|
|
|
|
|
|
v-model="action"
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 告警配置 -->
|
|
|
|
|
|
<AlertConfig
|
|
|
|
|
|
v-if="isAlertAction(action.type)"
|
|
|
|
|
|
v-model="action.alertConfigId"
|
|
|
|
|
|
/>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</el-card>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 表单交互流程设计
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 表单初始化流程图
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
flowchart TD
|
|
|
|
|
|
A[页面加载] --> B[初始化表单数据结构]
|
|
|
|
|
|
B --> C[获取基础数据]
|
|
|
|
|
|
C --> C1[加载产品列表]
|
|
|
|
|
|
C --> C2[加载告警配置列表]
|
|
|
|
|
|
C --> C3[加载用户权限信息]
|
|
|
|
|
|
C1 --> D[表单渲染]
|
|
|
|
|
|
C2 --> D
|
|
|
|
|
|
C3 --> D
|
|
|
|
|
|
D --> E[建立双向数据绑定]
|
|
|
|
|
|
E --> F[表单就绪]
|
|
|
|
|
|
|
|
|
|
|
|
%% 错误处理
|
|
|
|
|
|
C --> G{数据加载失败?}
|
|
|
|
|
|
G -->|是| H[显示错误信息]
|
|
|
|
|
|
G -->|否| D
|
|
|
|
|
|
H --> I[提供重试选项]
|
|
|
|
|
|
I --> C
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 触发器配置流程图
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
flowchart TD
|
|
|
|
|
|
A[开始配置触发器] --> B[选择触发类型]
|
|
|
|
|
|
B --> C{触发类型}
|
|
|
|
|
|
|
|
|
|
|
|
%% 设备触发分支
|
|
|
|
|
|
C -->|设备触发| D[设备触发配置]
|
|
|
|
|
|
D --> D1[选择产品]
|
|
|
|
|
|
D1 --> D2[加载设备列表]
|
|
|
|
|
|
D2 --> D3[选择设备]
|
|
|
|
|
|
D3 --> D4[加载物模型]
|
|
|
|
|
|
D4 --> D5[选择属性/事件]
|
|
|
|
|
|
D5 --> D6[选择操作符]
|
|
|
|
|
|
D6 --> D7[输入比较值]
|
|
|
|
|
|
D7 --> D8[配置条件分组]
|
|
|
|
|
|
D8 --> E[触发器配置完成]
|
|
|
|
|
|
|
|
|
|
|
|
%% 定时触发分支
|
|
|
|
|
|
C -->|定时触发| F[定时触发配置]
|
|
|
|
|
|
F --> F1[输入CRON表达式]
|
|
|
|
|
|
F1 --> F2{表达式格式}
|
|
|
|
|
|
F2 -->|正确| F3[显示下次执行时间]
|
|
|
|
|
|
F2 -->|错误| F4[显示错误提示]
|
|
|
|
|
|
F4 --> F5[提供可视化编辑器]
|
|
|
|
|
|
F5 --> F1
|
|
|
|
|
|
F3 --> E
|
|
|
|
|
|
|
|
|
|
|
|
%% 验证
|
|
|
|
|
|
E --> G[验证触发器配置]
|
|
|
|
|
|
G --> H{验证通过?}
|
|
|
|
|
|
H -->|是| I[保存触发器配置]
|
|
|
|
|
|
H -->|否| J[显示验证错误]
|
|
|
|
|
|
J --> D
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 执行器配置流程图
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
flowchart TD
|
|
|
|
|
|
A[开始配置执行器] --> B[选择执行类型]
|
|
|
|
|
|
B --> C{执行类型}
|
|
|
|
|
|
|
|
|
|
|
|
%% 设备控制分支
|
|
|
|
|
|
C -->|设备控制| D[设备控制配置]
|
|
|
|
|
|
D --> D1[选择目标产品]
|
|
|
|
|
|
D1 --> D2[加载目标设备列表]
|
|
|
|
|
|
D2 --> D3[选择目标设备]
|
|
|
|
|
|
D3 --> D4[选择控制类型]
|
|
|
|
|
|
D4 --> D5{控制类型}
|
|
|
|
|
|
D5 -->|属性设置| D6[配置属性参数]
|
|
|
|
|
|
D5 -->|服务调用| D7[配置服务参数]
|
|
|
|
|
|
D6 --> E[执行器配置完成]
|
|
|
|
|
|
D7 --> E
|
|
|
|
|
|
|
|
|
|
|
|
%% 告警分支
|
|
|
|
|
|
C -->|告警触发/恢复| F[告警配置]
|
|
|
|
|
|
F --> F1[选择告警配置项]
|
|
|
|
|
|
F1 --> F2[配置告警参数]
|
|
|
|
|
|
F2 --> E
|
|
|
|
|
|
|
|
|
|
|
|
%% 验证
|
|
|
|
|
|
E --> G[验证执行器配置]
|
|
|
|
|
|
G --> H{验证通过?}
|
|
|
|
|
|
H -->|是| I[保存执行器配置]
|
|
|
|
|
|
H -->|否| J[显示验证错误]
|
|
|
|
|
|
J --> D
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 4. 表单提交流程图
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
flowchart TD
|
|
|
|
|
|
A[用户点击保存] --> B[表单验证]
|
|
|
|
|
|
B --> C{验证通过?}
|
|
|
|
|
|
C -->|否| D[显示验证错误]
|
|
|
|
|
|
D --> E[用户修正错误]
|
|
|
|
|
|
E --> B
|
|
|
|
|
|
|
|
|
|
|
|
C -->|是| F[数据转换]
|
|
|
|
|
|
F --> G[转换为API格式]
|
|
|
|
|
|
G --> H[提交请求]
|
|
|
|
|
|
H --> I{请求成功?}
|
|
|
|
|
|
|
|
|
|
|
|
I -->|是| J[显示成功消息]
|
|
|
|
|
|
J --> K[跳转到列表页面]
|
|
|
|
|
|
|
|
|
|
|
|
I -->|否| L[显示错误消息]
|
|
|
|
|
|
L --> M[提供重试选项]
|
|
|
|
|
|
M --> H
|
|
|
|
|
|
|
|
|
|
|
|
%% 加载状态
|
|
|
|
|
|
H --> N[显示加载状态]
|
|
|
|
|
|
N --> I
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 5. 数据流转图
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
flowchart LR
|
|
|
|
|
|
A[用户输入] --> B[表单组件]
|
|
|
|
|
|
B --> C[数据验证]
|
|
|
|
|
|
C --> D[状态管理]
|
|
|
|
|
|
D --> E[API调用]
|
|
|
|
|
|
E --> F[后端处理]
|
|
|
|
|
|
F --> G[数据库存储]
|
|
|
|
|
|
|
|
|
|
|
|
%% 反向数据流
|
|
|
|
|
|
G --> H[响应数据]
|
|
|
|
|
|
H --> I[状态更新]
|
|
|
|
|
|
I --> J[UI更新]
|
|
|
|
|
|
J --> K[用户反馈]
|
|
|
|
|
|
|
|
|
|
|
|
%% 错误处理流
|
|
|
|
|
|
C --> L{验证失败?}
|
|
|
|
|
|
L -->|是| M[错误提示]
|
|
|
|
|
|
M --> A
|
|
|
|
|
|
|
|
|
|
|
|
E --> N{请求失败?}
|
|
|
|
|
|
N -->|是| O[错误处理]
|
|
|
|
|
|
O --> K
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 组件状态管理设计
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 状态管理架构图
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
graph TB
|
|
|
|
|
|
A[全局状态管理] --> B[表单状态]
|
|
|
|
|
|
A --> C[UI状态]
|
|
|
|
|
|
A --> D[数据缓存状态]
|
|
|
|
|
|
|
|
|
|
|
|
%% 表单状态
|
|
|
|
|
|
B --> B1[formData<br/>表单数据]
|
|
|
|
|
|
B --> B2[validationErrors<br/>验证错误]
|
|
|
|
|
|
B --> B3[isDirty<br/>数据变更标识]
|
|
|
|
|
|
B --> B4[isSubmitting<br/>提交状态]
|
|
|
|
|
|
|
|
|
|
|
|
%% UI状态
|
|
|
|
|
|
C --> C1[loading<br/>加载状态]
|
|
|
|
|
|
C --> C2[activeStep<br/>当前步骤]
|
|
|
|
|
|
C --> C3[expandedSections<br/>展开的区域]
|
|
|
|
|
|
C --> C4[modalVisible<br/>弹窗显示状态]
|
|
|
|
|
|
|
|
|
|
|
|
%% 数据缓存状态
|
|
|
|
|
|
D --> D1[productList<br/>产品列表]
|
|
|
|
|
|
D --> D2[deviceList<br/>设备列表]
|
|
|
|
|
|
D --> D3[thingModelList<br/>物模型列表]
|
|
|
|
|
|
D --> D4[alertConfigList<br/>告警配置列表]
|
|
|
|
|
|
|
|
|
|
|
|
%% 状态操作
|
|
|
|
|
|
E[状态操作] --> E1[updateFormData<br/>更新表单数据]
|
|
|
|
|
|
E --> E2[validateForm<br/>验证表单]
|
|
|
|
|
|
E --> E3[resetForm<br/>重置表单]
|
|
|
|
|
|
E --> E4[submitForm<br/>提交表单]
|
|
|
|
|
|
|
|
|
|
|
|
%% 样式定义
|
|
|
|
|
|
classDef stateClass fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
|
|
|
|
|
|
classDef actionClass fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
|
|
|
|
|
|
|
|
|
|
|
|
class A,B,C,D stateClass
|
|
|
|
|
|
class E,E1,E2,E3,E4 actionClass
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 组件通信图
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
sequenceDiagram
|
|
|
|
|
|
participant U as User
|
|
|
|
|
|
participant F as FormComponent
|
|
|
|
|
|
participant T as TriggerSection
|
|
|
|
|
|
participant A as ActionSection
|
|
|
|
|
|
participant S as StateManager
|
|
|
|
|
|
participant API as BackendAPI
|
|
|
|
|
|
|
|
|
|
|
|
U->>F: 填写基础信息
|
|
|
|
|
|
F->>S: updateFormData(basicInfo)
|
|
|
|
|
|
S-->>F: 状态更新完成
|
|
|
|
|
|
|
|
|
|
|
|
U->>T: 配置触发器
|
|
|
|
|
|
T->>S: updateTriggers(triggerData)
|
|
|
|
|
|
S->>API: loadDeviceList(productId)
|
|
|
|
|
|
API-->>S: 返回设备列表
|
|
|
|
|
|
S-->>T: 更新设备选项
|
|
|
|
|
|
|
|
|
|
|
|
U->>A: 配置执行器
|
|
|
|
|
|
A->>S: updateActions(actionData)
|
|
|
|
|
|
S-->>A: 状态更新完成
|
|
|
|
|
|
|
|
|
|
|
|
U->>F: 点击保存
|
|
|
|
|
|
F->>S: validateForm()
|
|
|
|
|
|
S-->>F: 验证结果
|
|
|
|
|
|
|
|
|
|
|
|
alt 验证通过
|
|
|
|
|
|
F->>S: submitForm()
|
|
|
|
|
|
S->>API: saveRuleScene(formData)
|
|
|
|
|
|
API-->>S: 保存结果
|
|
|
|
|
|
S-->>F: 显示成功消息
|
|
|
|
|
|
else 验证失败
|
|
|
|
|
|
S-->>F: 显示错误信息
|
|
|
|
|
|
end
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 数据流向图
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
flowchart LR
|
|
|
|
|
|
A[用户操作] --> B[组件事件]
|
|
|
|
|
|
B --> C[状态更新]
|
|
|
|
|
|
C --> D[数据验证]
|
|
|
|
|
|
D --> E{验证通过?}
|
|
|
|
|
|
|
|
|
|
|
|
E -->|是| F[更新状态]
|
|
|
|
|
|
E -->|否| G[显示错误]
|
|
|
|
|
|
|
|
|
|
|
|
F --> H[触发副作用]
|
|
|
|
|
|
H --> I[API调用]
|
|
|
|
|
|
I --> J[更新缓存]
|
|
|
|
|
|
J --> K[UI重新渲染]
|
|
|
|
|
|
|
|
|
|
|
|
G --> L[用户修正]
|
|
|
|
|
|
L --> A
|
|
|
|
|
|
|
|
|
|
|
|
%% 样式
|
|
|
|
|
|
classDef processClass fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
|
|
|
|
|
|
classDef decisionClass fill:#fff3e0,stroke:#f57c00,stroke-width:2px
|
|
|
|
|
|
classDef errorClass fill:#ffebee,stroke:#d32f2f,stroke-width:2px
|
|
|
|
|
|
|
|
|
|
|
|
class A,B,C,D,F,H,I,J,K,L processClass
|
|
|
|
|
|
class E decisionClass
|
|
|
|
|
|
class G errorClass
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 用户体验优化
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 智能提示和帮助
|
|
|
|
|
|
|
|
|
|
|
|
- **字段说明**:为复杂字段提供详细说明和示例
|
|
|
|
|
|
- **实时验证**:输入时实时验证数据格式
|
|
|
|
|
|
- **智能推荐**:根据已选择的产品推荐相关设备
|
|
|
|
|
|
- **预览功能**:实时预览配置效果
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 错误处理和反馈
|
|
|
|
|
|
|
|
|
|
|
|
- **表单验证**:清晰的错误提示信息
|
|
|
|
|
|
- **数据加载**:加载状态和错误重试机制
|
|
|
|
|
|
- **保存反馈**:明确的成功/失败反馈
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 操作便利性
|
|
|
|
|
|
|
|
|
|
|
|
- **批量操作**:支持批量添加/删除触发器和执行器
|
|
|
|
|
|
- **模板功能**:提供常用场景模板
|
|
|
|
|
|
- **导入导出**:支持配置的导入和导出
|
|
|
|
|
|
|
|
|
|
|
|
## 响应式设计考虑
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 移动端适配
|
|
|
|
|
|
|
|
|
|
|
|
- **布局调整**:在小屏幕上采用垂直布局
|
|
|
|
|
|
- **操作优化**:增大点击区域,优化触摸操作
|
|
|
|
|
|
- **内容精简**:在移动端隐藏非必要信息
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 不同屏幕尺寸适配
|
|
|
|
|
|
|
|
|
|
|
|
- **大屏幕**:充分利用空间,并排显示更多内容
|
|
|
|
|
|
- **中等屏幕**:平衡内容密度和可读性
|
|
|
|
|
|
- **小屏幕**:优先显示核心功能
|
|
|
|
|
|
|
|
|
|
|
|
## 性能优化策略
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 组件懒加载
|
|
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
|
// 懒加载复杂组件
|
|
|
|
|
|
const DeviceTriggerConfig = defineAsyncComponent(() =>
|
|
|
|
|
|
import('./components/DeviceTriggerConfig.vue')
|
|
|
|
|
|
);
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 数据缓存
|
|
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
|
// 缓存产品和设备数据
|
|
|
|
|
|
const productCache = new Map();
|
|
|
|
|
|
const deviceCache = new Map();
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 防抖处理
|
|
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
|
// 搜索防抖
|
|
|
|
|
|
const debouncedSearch = debounce(searchDevices, 300);
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 可访问性设计
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 键盘导航
|
|
|
|
|
|
|
|
|
|
|
|
- 支持Tab键在表单元素间导航
|
|
|
|
|
|
- 提供快捷键操作
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 屏幕阅读器支持
|
|
|
|
|
|
|
|
|
|
|
|
- 为表单元素提供适当的标签
|
|
|
|
|
|
- 使用ARIA属性增强可访问性
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 颜色和对比度
|
|
|
|
|
|
|
|
|
|
|
|
- 确保足够的颜色对比度
|
|
|
|
|
|
- 不仅依赖颜色传达信息
|
|
|
|
|
|
|
|
|
|
|
|
## 表单验证策略
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 验证层次结构图
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
graph TB
|
|
|
|
|
|
A[表单验证] --> B[字段级验证]
|
|
|
|
|
|
A --> C[组件级验证]
|
|
|
|
|
|
A --> D[表单级验证]
|
|
|
|
|
|
A --> E[业务级验证]
|
|
|
|
|
|
|
|
|
|
|
|
%% 字段级验证
|
|
|
|
|
|
B --> B1[必填验证]
|
|
|
|
|
|
B --> B2[格式验证]
|
|
|
|
|
|
B --> B3[长度验证]
|
|
|
|
|
|
B --> B4[类型验证]
|
|
|
|
|
|
|
|
|
|
|
|
%% 组件级验证
|
|
|
|
|
|
C --> C1[触发器验证]
|
|
|
|
|
|
C --> C2[执行器验证]
|
|
|
|
|
|
C --> C3[条件组合验证]
|
|
|
|
|
|
|
|
|
|
|
|
%% 表单级验证
|
|
|
|
|
|
D --> D1[数据完整性验证]
|
|
|
|
|
|
D --> D2[逻辑一致性验证]
|
|
|
|
|
|
D --> D3[依赖关系验证]
|
|
|
|
|
|
|
|
|
|
|
|
%% 业务级验证
|
|
|
|
|
|
E --> E1[设备权限验证]
|
|
|
|
|
|
E --> E2[产品可用性验证]
|
|
|
|
|
|
E --> E3[规则冲突验证]
|
|
|
|
|
|
|
|
|
|
|
|
%% 样式定义
|
|
|
|
|
|
classDef levelClass fill:#e1f5fe,stroke:#01579b,stroke-width:2px
|
|
|
|
|
|
classDef validationClass fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
|
|
|
|
|
|
|
|
|
|
|
|
class A levelClass
|
|
|
|
|
|
class B,C,D,E levelClass
|
|
|
|
|
|
class B1,B2,B3,B4,C1,C2,C3,D1,D2,D3,E1,E2,E3 validationClass
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 验证时机图
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
stateDiagram-v2
|
|
|
|
|
|
[*] --> 字段输入
|
|
|
|
|
|
字段输入 --> 实时验证: onChange
|
|
|
|
|
|
实时验证 --> 显示错误: 验证失败
|
|
|
|
|
|
实时验证 --> 清除错误: 验证通过
|
|
|
|
|
|
显示错误 --> 字段输入: 用户修正
|
|
|
|
|
|
清除错误 --> 字段输入: 继续输入
|
|
|
|
|
|
|
|
|
|
|
|
字段输入 --> 失焦验证: onBlur
|
|
|
|
|
|
失焦验证 --> 显示警告: 格式错误
|
|
|
|
|
|
失焦验证 --> 正常状态: 格式正确
|
|
|
|
|
|
显示警告 --> 字段输入: 重新聚焦
|
|
|
|
|
|
正常状态 --> 字段输入: 重新聚焦
|
|
|
|
|
|
|
|
|
|
|
|
字段输入 --> 表单提交: 用户提交
|
|
|
|
|
|
表单提交 --> 全量验证
|
|
|
|
|
|
全量验证 --> 提交成功: 验证通过
|
|
|
|
|
|
全量验证 --> 显示错误: 验证失败
|
|
|
|
|
|
提交成功 --> [*]
|
|
|
|
|
|
显示错误 --> 字段输入: 用户修正
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 测试策略
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 测试金字塔图
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
graph TB
|
|
|
|
|
|
A[测试金字塔] --> B[单元测试<br/>Unit Tests<br/>70%]
|
|
|
|
|
|
A --> C[集成测试<br/>Integration Tests<br/>20%]
|
|
|
|
|
|
A --> D[端到端测试<br/>E2E Tests<br/>10%]
|
|
|
|
|
|
|
|
|
|
|
|
%% 单元测试详细
|
|
|
|
|
|
B --> B1[组件渲染测试]
|
|
|
|
|
|
B --> B2[数据验证逻辑测试]
|
|
|
|
|
|
B --> B3[用户交互测试]
|
|
|
|
|
|
B --> B4[工具函数测试]
|
|
|
|
|
|
|
|
|
|
|
|
%% 集成测试详细
|
|
|
|
|
|
C --> C1[表单提交流程测试]
|
|
|
|
|
|
C --> C2[API调用测试]
|
|
|
|
|
|
C --> C3[数据转换测试]
|
|
|
|
|
|
C --> C4[组件间通信测试]
|
|
|
|
|
|
|
|
|
|
|
|
%% 端到端测试详细
|
|
|
|
|
|
D --> D1[完整用户流程测试]
|
|
|
|
|
|
D --> D2[浏览器兼容性测试]
|
|
|
|
|
|
D --> D3[响应式设计测试]
|
|
|
|
|
|
D --> D4[性能测试]
|
|
|
|
|
|
|
|
|
|
|
|
%% 样式定义
|
|
|
|
|
|
classDef pyramidClass fill:#e8f5e8,stroke:#2e7d32,stroke-width:3px
|
|
|
|
|
|
classDef unitClass fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
|
|
|
|
|
|
classDef integrationClass fill:#fff3e0,stroke:#f57c00,stroke-width:2px
|
|
|
|
|
|
classDef e2eClass fill:#ffebee,stroke:#d32f2f,stroke-width:2px
|
|
|
|
|
|
|
|
|
|
|
|
class A pyramidClass
|
|
|
|
|
|
class B,B1,B2,B3,B4 unitClass
|
|
|
|
|
|
class C,C1,C2,C3,C4 integrationClass
|
|
|
|
|
|
class D,D1,D2,D3,D4 e2eClass
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 测试用例覆盖图
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
mindmap
|
|
|
|
|
|
root((测试用例覆盖))
|
|
|
|
|
|
功能测试
|
|
|
|
|
|
基础信息
|
|
|
|
|
|
名称输入验证
|
|
|
|
|
|
描述输入验证
|
|
|
|
|
|
状态切换测试
|
|
|
|
|
|
触发器配置
|
|
|
|
|
|
设备触发配置
|
|
|
|
|
|
定时触发配置
|
|
|
|
|
|
条件组合测试
|
|
|
|
|
|
执行器配置
|
|
|
|
|
|
设备控制配置
|
|
|
|
|
|
告警配置测试
|
|
|
|
|
|
表单提交
|
|
|
|
|
|
验证流程测试
|
|
|
|
|
|
保存流程测试
|
|
|
|
|
|
|
|
|
|
|
|
异常测试
|
|
|
|
|
|
网络异常
|
|
|
|
|
|
API调用失败
|
|
|
|
|
|
超时处理
|
|
|
|
|
|
数据异常
|
|
|
|
|
|
格式错误处理
|
|
|
|
|
|
空数据处理
|
|
|
|
|
|
用户异常
|
|
|
|
|
|
权限不足
|
|
|
|
|
|
操作冲突
|
|
|
|
|
|
|
|
|
|
|
|
性能测试
|
|
|
|
|
|
加载性能
|
|
|
|
|
|
首屏加载时间
|
|
|
|
|
|
组件渲染性能
|
|
|
|
|
|
交互性能
|
|
|
|
|
|
表单响应速度
|
|
|
|
|
|
数据处理性能
|
|
|
|
|
|
内存性能
|
|
|
|
|
|
内存泄漏检测
|
|
|
|
|
|
组件销毁测试
|
|
|
|
|
|
|
|
|
|
|
|
兼容性测试
|
|
|
|
|
|
浏览器兼容
|
|
|
|
|
|
Chrome测试
|
|
|
|
|
|
Firefox测试
|
|
|
|
|
|
Safari测试
|
|
|
|
|
|
Edge测试
|
|
|
|
|
|
设备兼容
|
|
|
|
|
|
桌面端测试
|
|
|
|
|
|
平板端测试
|
|
|
|
|
|
移动端测试
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 表单设计架构总览
|
|
|
|
|
|
|
|
|
|
|
|
### 完整架构图
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
graph TB
|
|
|
|
|
|
%% 用户界面层
|
|
|
|
|
|
subgraph "用户界面层 (UI Layer)"
|
|
|
|
|
|
A[RuleSceneForm 主表单]
|
|
|
|
|
|
B[BasicInfoSection 基础信息]
|
|
|
|
|
|
C[TriggerSection 触发器配置]
|
|
|
|
|
|
D[ActionSection 执行器配置]
|
|
|
|
|
|
E[PreviewSection 预览区域]
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
%% 状态管理层
|
|
|
|
|
|
subgraph "状态管理层 (State Management)"
|
|
|
|
|
|
F[FormState 表单状态]
|
|
|
|
|
|
G[ValidationState 验证状态]
|
|
|
|
|
|
H[UIState 界面状态]
|
|
|
|
|
|
I[CacheState 缓存状态]
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
%% 业务逻辑层
|
|
|
|
|
|
subgraph "业务逻辑层 (Business Logic)"
|
|
|
|
|
|
J[FormValidator 表单验证器]
|
|
|
|
|
|
K[DataTransformer 数据转换器]
|
|
|
|
|
|
L[ConfigBuilder 配置构建器]
|
|
|
|
|
|
M[RuleEngine 规则引擎]
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
%% 数据访问层
|
|
|
|
|
|
subgraph "数据访问层 (Data Access)"
|
|
|
|
|
|
N[ProductAPI 产品接口]
|
|
|
|
|
|
O[DeviceAPI 设备接口]
|
|
|
|
|
|
P[RuleSceneAPI 规则场景接口]
|
|
|
|
|
|
Q[AlertAPI 告警接口]
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
%% 工具层
|
|
|
|
|
|
subgraph "工具层 (Utilities)"
|
|
|
|
|
|
R[CronValidator CRON验证器]
|
|
|
|
|
|
S[TypeChecker 类型检查器]
|
|
|
|
|
|
T[ErrorHandler 错误处理器]
|
|
|
|
|
|
U[Logger 日志记录器]
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
%% 连接关系
|
|
|
|
|
|
A --> B
|
|
|
|
|
|
A --> C
|
|
|
|
|
|
A --> D
|
|
|
|
|
|
A --> E
|
|
|
|
|
|
|
|
|
|
|
|
B --> F
|
|
|
|
|
|
C --> F
|
|
|
|
|
|
D --> F
|
|
|
|
|
|
E --> F
|
|
|
|
|
|
|
|
|
|
|
|
F --> J
|
|
|
|
|
|
G --> J
|
|
|
|
|
|
H --> K
|
|
|
|
|
|
I --> L
|
|
|
|
|
|
|
|
|
|
|
|
J --> M
|
|
|
|
|
|
K --> M
|
|
|
|
|
|
L --> M
|
|
|
|
|
|
|
|
|
|
|
|
M --> N
|
|
|
|
|
|
M --> O
|
|
|
|
|
|
M --> P
|
|
|
|
|
|
M --> Q
|
|
|
|
|
|
|
|
|
|
|
|
J --> R
|
|
|
|
|
|
K --> S
|
|
|
|
|
|
M --> T
|
|
|
|
|
|
A --> U
|
|
|
|
|
|
|
|
|
|
|
|
%% 样式定义
|
|
|
|
|
|
classDef uiClass fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
|
|
|
|
|
|
classDef stateClass fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
|
|
|
|
|
|
classDef businessClass fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
|
|
|
|
|
|
classDef dataClass fill:#fff3e0,stroke:#f57c00,stroke-width:2px
|
|
|
|
|
|
classDef utilClass fill:#fce4ec,stroke:#c2185b,stroke-width:2px
|
|
|
|
|
|
|
|
|
|
|
|
class A,B,C,D,E uiClass
|
|
|
|
|
|
class F,G,H,I stateClass
|
|
|
|
|
|
class J,K,L,M businessClass
|
|
|
|
|
|
class N,O,P,Q dataClass
|
|
|
|
|
|
class R,S,T,U utilClass
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 设计原则总结
|
|
|
|
|
|
|
|
|
|
|
|
```mermaid
|
|
|
|
|
|
mindmap
|
|
|
|
|
|
root((表单设计原则))
|
|
|
|
|
|
用户体验
|
|
|
|
|
|
直观易用
|
|
|
|
|
|
清晰的视觉层次
|
|
|
|
|
|
一致的交互模式
|
|
|
|
|
|
智能的操作提示
|
|
|
|
|
|
响应迅速
|
|
|
|
|
|
实时验证反馈
|
|
|
|
|
|
快速数据加载
|
|
|
|
|
|
流畅的动画效果
|
|
|
|
|
|
错误友好
|
|
|
|
|
|
明确的错误信息
|
|
|
|
|
|
便捷的错误修正
|
|
|
|
|
|
优雅的异常处理
|
|
|
|
|
|
|
|
|
|
|
|
技术架构
|
|
|
|
|
|
组件化设计
|
|
|
|
|
|
高内聚低耦合
|
|
|
|
|
|
可复用的组件
|
|
|
|
|
|
清晰的组件边界
|
|
|
|
|
|
状态管理
|
|
|
|
|
|
集中式状态管理
|
|
|
|
|
|
可预测的状态变更
|
|
|
|
|
|
高效的状态同步
|
|
|
|
|
|
数据流控制
|
|
|
|
|
|
单向数据流
|
|
|
|
|
|
明确的数据来源
|
|
|
|
|
|
可追踪的数据变更
|
|
|
|
|
|
|
|
|
|
|
|
质量保证
|
|
|
|
|
|
代码质量
|
|
|
|
|
|
类型安全
|
|
|
|
|
|
代码规范
|
|
|
|
|
|
充分的注释
|
|
|
|
|
|
测试覆盖
|
|
|
|
|
|
单元测试
|
|
|
|
|
|
集成测试
|
|
|
|
|
|
端到端测试
|
|
|
|
|
|
性能优化
|
|
|
|
|
|
懒加载
|
|
|
|
|
|
缓存策略
|
|
|
|
|
|
防抖节流
|
|
|
|
|
|
|
|
|
|
|
|
可维护性
|
|
|
|
|
|
模块化结构
|
|
|
|
|
|
清晰的目录结构
|
|
|
|
|
|
合理的文件组织
|
|
|
|
|
|
明确的依赖关系
|
|
|
|
|
|
文档完善
|
|
|
|
|
|
API文档
|
|
|
|
|
|
组件文档
|
|
|
|
|
|
使用说明
|
|
|
|
|
|
扩展性设计
|
|
|
|
|
|
插件化架构
|
|
|
|
|
|
配置化开发
|
|
|
|
|
|
版本兼容性
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 总结
|
|
|
|
|
|
|
|
|
|
|
|
IoT场景联动规则表单设计需要考虑:
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 核心设计要点
|
|
|
|
|
|
|
|
|
|
|
|
- **复杂性管理**:通过组件化和分步骤设计降低复杂度
|
|
|
|
|
|
- **用户体验**:提供直观的操作界面和智能提示
|
|
|
|
|
|
- **数据完整性**:完善的验证机制确保数据质量
|
|
|
|
|
|
- **扩展性**:模块化设计支持功能扩展
|
|
|
|
|
|
- **性能优化**:合理的加载和缓存策略
|
|
|
|
|
|
- **可访问性**:确保所有用户都能正常使用
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 技术实现要点
|
|
|
|
|
|
|
|
|
|
|
|
- **状态管理**:采用集中式状态管理,确保数据流的可控性
|
|
|
|
|
|
- **组件设计**:高内聚低耦合的组件架构,提高代码复用性
|
|
|
|
|
|
- **验证策略**:多层次的验证机制,保证数据质量
|
|
|
|
|
|
- **错误处理**:完善的错误处理和用户反馈机制
|
|
|
|
|
|
- **性能优化**:懒加载、缓存、防抖等优化策略
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 质量保证
|
|
|
|
|
|
|
|
|
|
|
|
- **测试覆盖**:完整的测试金字塔,确保代码质量
|
|
|
|
|
|
- **文档完善**:详细的设计文档和使用说明
|
|
|
|
|
|
- **代码规范**:统一的编码规范和类型安全
|
|
|
|
|
|
|
|
|
|
|
|
通过以上设计思路和详细的Mermaid图表,可以构建一个功能完善、用户友好、技术先进的IoT场景联动规则配置表单系统。
|