From 609fdcd9cc87b8e1591022ae8aebca1a3eb2ae96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=88=A9=E8=93=89?= <2655155213@qq.com> Date: Fri, 2 Jan 2026 05:56:03 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=B1=E5=BA=A6=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E7=AE=A1=E7=90=86=E5=90=8E=E5=8F=B0=E6=B2=BB?= =?UTF-8?q?=E7=90=86=E4=BD=93=E7=B3=BB=EF=BC=8C=E6=A0=87=E5=87=86=E5=8C=96?= =?UTF-8?q?=E5=8E=9F=E5=AD=90=20UI=20=E7=BB=84=E4=BB=B6=E5=BA=93=E4=B8=8E?= =?UTF-8?q?=E5=93=8D=E5=BA=94=E5=BC=8F=E4=BA=A4=E4=BA=92=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/frontend/src/components/ConfirmDialog.tsx | 88 ++++- .../src/components/InteractiveERRenderer.tsx | 255 +++++++++--- src/frontend/src/components/Pagination.tsx | 129 +++++-- .../src/components/PanelToggleButton.tsx | 81 +++- src/frontend/src/components/ProjectWizard.tsx | 276 +++++++++---- src/frontend/src/components/Sidebar.tsx | 159 +++++--- src/frontend/src/components/UI.tsx | 365 ++++++++++-------- src/frontend/src/hooks/useViewportWidth.ts | 192 +++++---- src/frontend/src/pages/Admin.tsx | 305 ++++++++++----- src/frontend/src/pages/AdminAIModels.tsx | 292 +++++++++----- src/frontend/src/pages/AdminAnnouncements.tsx | 221 ++++++++--- src/frontend/src/types/project-overview.ts | 109 +++++- src/frontend/src/utils/errorHandling.ts | 257 ++++++++---- src/frontend/src/utils/globalZoomLevel.ts | 205 ++++++---- src/frontend/src/utils/project-overview.ts | 191 ++++++--- 15 files changed, 2214 insertions(+), 911 deletions(-) diff --git a/src/frontend/src/components/ConfirmDialog.tsx b/src/frontend/src/components/ConfirmDialog.tsx index 60738a2..ccdf9bd 100644 --- a/src/frontend/src/components/ConfirmDialog.tsx +++ b/src/frontend/src/components/ConfirmDialog.tsx @@ -1,33 +1,67 @@ /** - * 统一的确认对话框组件 - * 用于替换所有浏览器默认的 confirm() 弹窗 + * @file ConfirmDialog.tsx + * @module Components/Feedback/Confirm-Dialog + * @description 基于 React 的原子化统一确认对话框组件。 + * 本组件作为系统交互层的“安全闸门”,替代了不可控的浏览器原生 confirm() 接口。 + * * 核心设计目标: + * [cite_start]1. 安全确认机制 (Usability-2): 针对物理数据库删除、DML 指令执行等高风险操作提供二次确认逻辑 [cite: 617]; + * 2. 交互一致性: 采用高斯模糊背景与平滑动效,确保系统视觉语言的统一; + * 3. 语义化视觉反馈: 支持危险操作(Danger)与普通操作(Primary)的视觉分级。 + * * 对应需求点: + * - [cite_start]Security-3: 对 AI 生成的 SQL 删除/更新操作强制确认 [cite: 555-556]; + * - Usability-2: 提供明确的双重确认提示以防止非技术用户误操作。 + * * @author Wang Lirong (王利蓉) + * @version 2.0.0 + * @date 2026-01-02 */ import React from 'react'; import { AlertTriangle, X } from 'lucide-react'; import { Button } from './UI'; +/** + * 确认对话框组件属性接口 + * @interface ConfirmDialogProps + * @description 封装了对话框的展示内容、交互行为及视觉风格配置。 + */ interface ConfirmDialogProps { - /** 是否显示对话框 */ + /** * 控制对话框的渲染状态 + * true 时展示遮罩与内容,false 时不渲染任何 DOM 节点。 + */ isOpen: boolean; - /** 关闭对话框的回调 */ + /** * 关闭对话框的回调函数 + * 触发场景:点击取消按钮、右上角关闭按钮或遮罩层。 + */ onClose: () => void; - /** 确认操作的回调 */ + /** * 用户执行“确认”动作后的业务回调 + * 该函数通常包含实际的 DDL/DML 提交逻辑或项目删除指令。 + */ onConfirm: () => void; - /** 对话框标题 */ + /** 对话框顶部的标题文本,需简明扼要说明操作意图 */ title: string; - /** 对话框内容/描述 */ + /** 对话框的核心描述内容,用于向用户解释该操作的后果及风险 */ message: string; - /** 确认按钮文本 */ + /** 确认按钮的自定义文本,默认为“确认” */ confirmText?: string; - /** 取消按钮文本 */ + /** 取消按钮的自定义文本,默认为“取消” */ cancelText?: string; - /** 是否为危险操作(红色确认按钮) */ + /** * 视觉风险标识开关 + * 设置为 true 时,确认按钮将应用红色警示色调,适用于不可逆的销毁操作。 + */ isDangerous?: boolean; - /** 是否显示警告图标 */ + /** * 警告图标显隐控制 + * 启用后会在标题左侧显示橙色警示符号,增强用户视觉注意。 + */ showWarningIcon?: boolean; } +/** + * 统一确认对话框组件实体 + * @component ConfirmDialog + * @description + * 采用 React 函数式组件构建,结合 Tailwind CSS 实现全分辨率适配与平滑过渡。 + * 组件层级设计遵循 Z-Index 规范(z-[60]),确保其始终浮动在全局蒙层与侧边栏之上。 + */ export const ConfirmDialog: React.FC = ({ isOpen, onClose, @@ -39,22 +73,44 @@ export const ConfirmDialog: React.FC = ({ isDangerous = false, showWarningIcon = false, }) => { + /** + * 步骤 1:条件渲染守卫 + * 若对话框处于关闭状态,立即终止渲染流以优化虚拟 DOM 性能。 + */ if (!isOpen) return null; + /** + * 步骤 2:封装确认逻辑 + * 在执行业务回调的同时自动关闭当前模态框,保证交互闭环。 + */ const handleConfirm = () => { + // 触发父级透传的业务指令(如 API 调用) onConfirm(); + // 逻辑流完成后关闭弹窗 onClose(); }; + /** + * 步骤 3:视觉布局构建 (Atomic Layout) + * 采用 Fixed 布局覆盖全屏,配合 backdrop-blur 实现现代 UI 的通透感。 + */ return ( + // 全屏遮罩层:提供 60% 透明度的深色背景及毛玻璃滤镜
+ + {/* 对话框主体容器:具备自适应宽度及进入动画 (animate-in) */}
- {/* Header */} + + {/* 对话框头部 (Header Section) */}
+ {/* 标题区域:包含可选的警告图标与截断保护文本 */}

+ {/* 条件渲染:显示警示图标以提示操作风险 */} {showWarningIcon && } {title}

+ + {/* 交互控件:右上角关闭图标,提供圆角悬停反馈 */}
- {/* Content */} + {/* 内容主体区域 (Content Section) */}
+ {/* 渲染业务描述文本,使用宽松的行高 (leading-relaxed) 以提升阅读舒适度 */}

{message}

- {/* Footer */} + {/* 底部操作栏 (Footer Section) */}
+ {/* 取消动作:默认变体按钮 */} + + {/* 确认动作:根据 isDangerous 参数动态切换按钮视觉语义 (Danger vs Primary) */} + {/* 复位首页触发器 */} + {/* 放大触发器 */}
- {/* 缩放信息 */} + {/* HUD - 状态信息栏: + 实时显示当前的物理缩放百分比。 + */}
= ({ ch {Math.round(scale * 100)}%
- {/* 外层容器 - 固定尺寸,防止抖动 */} + {/* 核心画布容器 (Main Canvas): + 采用高阴影、圆角化设计,符合现代分析仪表盘视觉规范。 + */}
= ({ ch position: 'relative' }} > - {/* 加载状态 - 绝对定位,不影响布局 */} + {/* 加载蒙层逻辑: + 在异步渲染期间提供平滑的等待反馈。 + */}
= ({ ch zIndex: 5 }}>
+ {/* CSS 纯代码驱动的加载动画旋转体 */}
= ({ ch
- {/* SVG 容器 - 绝对定位,渲染完成后显示 */} + {/* SVG 挂载宿主容器: + 渲染完成后,通过透明度渐变实现平滑入场。 + 绑定原生鼠标交互监听器,接管 Canvas 级别的所有操作。 + */}
= ({ ch style={{ position: 'absolute', inset: 0, - touchAction: 'none', + touchAction: 'none', // 禁用系统默认触摸手势,由组件接管控制 opacity: isLoading ? 0 : 1, visibility: isLoading ? 'hidden' : 'visible', transition: 'opacity 0.2s ease-in-out' }} /> + {/* 局部样式定义: + 定义全局公用的 Loading Keyframe 帧动画。 + */}