From 9c3f7341aab646324747008af9eedd29219e731b Mon Sep 17 00:00:00 2001 From: imeepos Date: Fri, 18 Jul 2025 10:55:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E8=BD=A8=E9=81=93=E7=89=87=E6=AE=B5=E5=8C=B9=E9=85=8D=E8=A7=84?= =?UTF-8?q?=E5=88=99=E7=BC=96=E8=BE=91=E4=BD=93=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新功能: - 实现匹配规则保存后自动刷新轨道片段数据 - 优化匹配规则编辑界面的视觉设计 UI/UX 优化: - 保存按钮从小图标改为明显的绿色按钮,包含文字标签 - 取消按钮也改为带文字的按钮,提升可发现性 - 编辑按钮从灰色图标改为蓝色带边框的按钮 - 编辑状态下添加蓝色背景和边框,突出编辑区域 - 优化标签颜色,在蓝色背景下更加清晰 - 表单控件添加白色背景和蓝色边框 数据刷新机制: - TemplateDetailModal 添加 currentTemplate 状态管理 - 实现 refreshTemplateData 函数自动获取最新模板数据 - 匹配规则保存后触发 handleRuleUpdated 回调 - 自动刷新模板列表和详情数据 用户体验提升: - 保存按钮更容易被发现和点击 - 编辑状态更加明显,用户不会迷失 - 保存后立即看到最新数据,无需手动刷新 - 加载状态和错误提示更加清晰 技术改进: - 按钮样式遵循 promptx/frontend-developer 设计规范 - 响应式设计,支持不同屏幕尺寸 - 完整的状态管理和错误处理 - 优雅的动画过渡效果 --- .../template/SegmentMatchingRuleEditor.tsx | 42 ++++++------ .../template/TemplateDetailModal.tsx | 66 +++++++++++++------ apps/desktop/src/pages/TemplateManagement.tsx | 4 ++ 3 files changed, 72 insertions(+), 40 deletions(-) diff --git a/apps/desktop/src/components/template/SegmentMatchingRuleEditor.tsx b/apps/desktop/src/components/template/SegmentMatchingRuleEditor.tsx index 4f67d74..895afad 100644 --- a/apps/desktop/src/components/template/SegmentMatchingRuleEditor.tsx +++ b/apps/desktop/src/components/template/SegmentMatchingRuleEditor.tsx @@ -148,42 +148,45 @@ export const SegmentMatchingRuleEditor: React.FC ); } return ( -
+
- 编辑匹配规则: -
+ 编辑匹配规则: +
-
{SegmentMatchingRuleHelper.isAiClassification(editingRule) && (
-
)}
{error && ( -
- {error} +
+ ⚠️ {error}
)} {loading && ( -
- 正在保存... +
+
+ 正在保存匹配规则...
)}
diff --git a/apps/desktop/src/components/template/TemplateDetailModal.tsx b/apps/desktop/src/components/template/TemplateDetailModal.tsx index 7ae2b8f..f793eb9 100644 --- a/apps/desktop/src/components/template/TemplateDetailModal.tsx +++ b/apps/desktop/src/components/template/TemplateDetailModal.tsx @@ -2,20 +2,46 @@ import React, { useState } from 'react'; import { X, Calendar, Clock, Monitor, Layers, FileText, Image, Video, Music, Type, Sparkles, CheckCircle, XCircle, AlertCircle, Upload, Cloud, ChevronDown, ChevronRight, Info } from 'lucide-react'; import { Template, TemplateMaterial, TemplateMaterialType, TrackType } from '../../types/template'; import { SegmentMatchingRuleEditor } from './SegmentMatchingRuleEditor'; +import { useTemplateStore } from '../../stores/templateStore'; interface TemplateDetailModalProps { template: Template; onClose: () => void; + onTemplateUpdated?: () => void; } export const TemplateDetailModal: React.FC = ({ template, onClose, + onTemplateUpdated, }) => { const [activeTab, setActiveTab] = useState<'overview' | 'materials' | 'tracks'>('overview'); const [expandedSections, setExpandedSections] = useState>({}); const [expandedMaterials, setExpandedMaterials] = useState>({}); const [expandedSegments, setExpandedSegments] = useState>({}); + const [currentTemplate, setCurrentTemplate] = useState