╔══════════════════════════════════════════════════════════════════════════════╗ ║ 配置类型选择功能 - 流程图 ║ ╚══════════════════════════════════════════════════════════════════════════════╝ ┌─────────────────────────────────────────────────────────────────────────────┐ │ 场景1:配置设置 │ └─────────────────────────────────────────────────────────────────────────────┘ 用户点击"配置"按钮 │ ▼ ┌─────────────────────┐ │ 选择配置类型对话框 │ │ │ │ ○ 600泵 ✓ │ │ ● 1000泵 ✓ │ │ │ │ [确定] [取消] │ └─────────────────────┘ │ ▼ 用户选择"1000泵" │ ▼ ┌─────────────────────┐ │ 配置设置 - 1000泵 │ │ │ │ [InfluxDB配置] │ │ [占位符配置] │ │ [设备配置] │ │ ... │ │ │ │ [保存] [取消] │ └─────────────────────┘ │ ▼ 保存到 configs/1000泵/default.json ┌─────────────────────────────────────────────────────────────────────────────┐ │ 场景2:开始工单 │ └─────────────────────────────────────────────────────────────────────────────┘ 用户点击"开始工单"按钮 │ ▼ ┌─────────────────────┐ │ 选择配置类型对话框 │ │ │ │ ● 600泵 ✓ │ │ ○ 1000泵 ✓ │ │ │ │ [确定] [取消] │ └─────────────────────┘ │ ▼ 用户选择"600泵" │ ▼ 加载 configs/600泵/default.json 加载 configs/600泵/template.docx │ ▼ ┌─────────────────────┐ │ 开始工单 - 600泵 │ │ │ │ 工单号: _______ │ │ 操作员: _______ │ │ 备注: _______ │ │ │ │ [开始] [取消] │ └─────────────────────┘ │ ▼ 开始工单 ├─ 使用 600泵 的配置 └─ 使用 600泵 的模板 ┌─────────────────────────────────────────────────────────────────────────────┐ │ 对话框详细界面 │ └─────────────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────┐ │ 选择配置类型 [_][□][X] │ ├──────────────────────────────────────────────────┤ │ │ │ 请选择要使用的配置类型: │ │ │ │ ┌────────────────────────────────────────┐ │ │ │ 📁 600泵 ✓ │◄─── 配置完整 │ │ 📁 1000泵 ✓ │ 可以选择 │ │ 📁 新设备 ⚠ (缺少模板) │◄─── 缺少模板 │ │ 📁 测试 ✗ (配置缺失) │◄─── 配置缺失 │ │ │ 不可选择 │ └────────────────────────────────────────┘ │ │ │ ┌────────────────────────────────────────┐ │ │ │ 📋 类型名称: 600泵 │◄─── 详细信息 │ │ │ │ │ ✓ 配置文件: default.json │ │ │ ✓ 模板文件: template-001.docx │ │ │ │ │ │ 📂 路径: F:\...\configs\600泵 │ │ └────────────────────────────────────────┘ │ │ │ [确定] [取消] │ └──────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────────────────────┐ │ 数据流向 │ └─────────────────────────────────────────────────────────────────────────────┘ ConfigCategoryManager │ ├─► scan_categories() │ │ │ └─► 扫描 configs/ 目录 │ │ │ ├─► 发现 600泵/ │ │ ├─ default.json ✓ │ │ └─ template.docx ✓ │ │ │ └─► 发现 1000泵/ │ ├─ default.json ✓ │ └─ template.docx ✓ │ └─► 返回: [ConfigCategory, ConfigCategory] ConfigTypeSelectorDialog │ ├─► 显示配置类型列表 │ ├─ 600泵 ✓ │ └─ 1000泵 ✓ │ ├─► 用户选择 "600泵" │ └─► 返回: ConfigCategory(name="600泵", ...) MainWindow │ ├─► 接收选择结果 │ ├─► 加载配置 │ └─ AppConfig.load(configs/600泵/default.json) │ ├─► 加载模板 │ └─ template_path = configs/600泵/template.docx │ └─► 继续后续操作 ┌─────────────────────────────────────────────────────────────────────────────┐ │ 代码调用流程 │ └─────────────────────────────────────────────────────────────────────────────┘ # 场景1:配置设置 ───────────────────── def open_config_dialog(self): # 1. 显示类型选择对话框 category = select_config_for_settings(self) if category is None: return # 用户取消 # 2. 加载配置 self.config = AppConfig.load(category.config_path) self._autosave_path = category.config_path # 3. 打开配置对话框 dlg = QDialog(self) dlg.setWindowTitle(f"配置设置 - {category.name}") # ... # 场景2:开始工单 ───────────────────── def _start_work_order(self): # 1. 显示类型选择对话框 category = select_config_for_work_order(self) if category is None: return # 用户取消 # 2. 加载配置和模板 self.config = AppConfig.load(category.config_path) self.template_path = category.template_path # 3. 显示工单信息输入对话框 dlg = QDialog(self) dlg.setWindowTitle(f"开始工单 - {category.name}") # ... # 4. 开始工单 # 使用当前配置和模板 ┌─────────────────────────────────────────────────────────────────────────────┐ │ 配置类型状态 │ └─────────────────────────────────────────────────────────────────────────────┘ 状态1: 完整配置 ✓ ───────────────── configs/600泵/ ├── default.json ✓ 存在 └── template.docx ✓ 存在 → 可以选择 → 显示绿色 ✓ 状态2: 缺少模板 ⚠ ───────────────── configs/新设备/ ├── default.json ✓ 存在 └── template.docx ✗ 不存在 → 可以选择(但有警告) → 显示橙色 ⚠ 状态3: 配置缺失 ✗ ───────────────── configs/测试/ ├── default.json ✗ 不存在 └── template.docx ? 不检查 → 不可选择 → 显示红色 ✗ → 项目被禁用 ┌─────────────────────────────────────────────────────────────────────────────┐ │ 用户体验对比 │ └─────────────────────────────────────────────────────────────────────────────┘ 之前的流程: ─────────── 点击"配置" → 打开配置对话框 ↓ 编辑哪个配置? 保存到哪里? 不清楚!❌ 现在的流程: ─────────── 点击"配置" → 选择配置类型 → 打开该类型的配置对话框 (600泵/1000泵) ↓ 清楚明了!✓ 之前的流程: ─────────── 点击"开始工单" → 使用哪个配置? 使用哪个模板? 不清楚!❌ 现在的流程: ─────────── 点击"开始工单" → 选择配置类型 → 使用该类型的配置和模板 (600泵/1000泵) ↓ 清楚明了!✓ ┌─────────────────────────────────────────────────────────────────────────────┐ │ 集成步骤 │ └─────────────────────────────────────────────────────────────────────────────┘ 步骤1: 导入模块 ───────────────── from config_type_selector import ( select_config_for_work_order, select_config_for_settings ) 步骤2: 修改"配置"按钮 ───────────────────── def open_config_dialog(self): category = select_config_for_settings(self) if category: # 加载配置 # 打开配置对话框 步骤3: 修改"开始工单"按钮 ───────────────────────── def _start_work_order(self): category = select_config_for_work_order(self) if category: # 加载配置和模板 # 显示工单信息输入 # 开始工单 步骤4: 测试 ───────────── ✓ 点击"配置",验证类型选择 ✓ 点击"开始工单",验证类型选择 ✓ 验证配置保存到正确位置 ┌─────────────────────────────────────────────────────────────────────────────┐ │ 完成! │ └─────────────────────────────────────────────────────────────────────────────┘ ✅ 配置类型选择对话框已开发 ✅ 演示程序已创建 ✅ 集成代码已编写 ✅ 文档已完成 📝 下一步: 1. 运行 python demo_type_selector.py 查看效果 2. 参考 集成类型选择对话框.py 集成到主程序 3. 测试功能 ╔══════════════════════════════════════════════════════════════════════════════╗ ║ 完成! ║ ╚══════════════════════════════════════════════════════════════════════════════╝