diff --git a/apps/fronted/src/app/workbench/page.tsx b/apps/fronted/src/app/workbench/page.tsx index 7265667..2706e1b 100644 --- a/apps/fronted/src/app/workbench/page.tsx +++ b/apps/fronted/src/app/workbench/page.tsx @@ -111,7 +111,7 @@ export default function Home() { - +
diff --git a/apps/fronted/src/components/editor/EditPanel.tsx b/apps/fronted/src/components/editor/EditPanel.tsx index 12b4220..9a760d1 100644 --- a/apps/fronted/src/components/editor/EditPanel.tsx +++ b/apps/fronted/src/components/editor/EditPanel.tsx @@ -21,7 +21,6 @@ import { Button } from "@/components/ui/button"; import Field from "./Field"; import ProjectItem from "./project/ProjectItem"; -// ProjectEditor 组件用于编辑单个项目 interface Project { id: string; name: string; @@ -31,6 +30,7 @@ interface Project { technologies: string; responsibilities: string; achievements: string; + visible: boolean; } // 主面板组件 @@ -56,7 +56,8 @@ export function EditPanel() { description: "", technologies: "", responsibilities: "", - achievements: "" + achievements: "", + visible: true }; setEditingId(newProject.id); updateProjects(newProject); diff --git a/apps/fronted/src/components/editor/PreviewPanel.tsx b/apps/fronted/src/components/editor/PreviewPanel.tsx index 1881b7b..c99956a 100644 --- a/apps/fronted/src/components/editor/PreviewPanel.tsx +++ b/apps/fronted/src/components/editor/PreviewPanel.tsx @@ -108,185 +108,187 @@ export function PreviewPanel() { 项目经历 - {projects.map((project) => ( - - {/* 拖拽高亮效果 */} - {draggingProjectId === project.id && ( - -
project.visible) // 只显示 visible 为 true 的项目 + .map((project) => ( + + {/* 拖拽高亮效果 */} + {draggingProjectId === project.id && ( +
-
-
- )} + > +
+
+
+ )} - - - - {project.name || "未命名项目"} - - + + + {project.name || "未命名项目"} + + + {project.role} + + + - {project.role} - + {project.date} + - - {project.date} - + + {/* 项目详情 */} + {project.description && ( + +
+ + )} + + {/* 技术栈 */} + {project.technologies && ( + + + 技术栈: + + + {project.technologies} + + + )} + + {/* 主要职责 */} + {project.responsibilities && ( + + + 主要职责: + + + {project.responsibilities} + + + )} + + {/* 项目成就 */} + {project.achievements && ( + + + 项目成就: + + + {project.achievements} + + + )} - - {/* 项目详情 */} - {project.description && ( - -
- - )} - - {/* 技术栈 */} - {project.technologies && ( - - - 技术栈: - - - {project.technologies} - - - )} - - {/* 主要职责 */} - {project.responsibilities && ( - - - 主要职责: - - - {project.responsibilities} - - - )} - - {/* 项目成就 */} - {project.achievements && ( - - - 项目成就: - - - {project.achievements} - - - )} - - ))} + ))} ); diff --git a/apps/fronted/src/components/editor/project/ProjectItem.tsx b/apps/fronted/src/components/editor/project/ProjectItem.tsx index e451535..65b8ae2 100644 --- a/apps/fronted/src/components/editor/project/ProjectItem.tsx +++ b/apps/fronted/src/components/editor/project/ProjectItem.tsx @@ -7,8 +7,8 @@ import { Reorder, useDragControls } from "framer-motion"; -import { ChevronDown, GripVertical, Trash2 } from "lucide-react"; -import { useState } from "react"; +import { ChevronDown, Eye, EyeOff, GripVertical, Trash2 } from "lucide-react"; +import { useCallback, useState } from "react"; import Field from "../Field"; import { AlertDialog, @@ -31,6 +31,7 @@ interface Project { technologies: string; responsibilities: string; achievements: string; + visible: boolean; } interface ProjectEditorProps { @@ -72,7 +73,7 @@ const DeleteConfirmDialog: React.FC = ({ className={cn( theme === "dark" ? "bg-neutral-900 border-neutral-800" : "bg-white" )} - onClick={(e) => e.stopPropagation()} // 添加这行 + onClick={(e) => e.stopPropagation()} > { const [expandedId, setExpandedId] = useState(null); const { theme, updateProjects, deleteProject } = useResumeStore(); + const [isUpdating, setIsUpdating] = useState(false); + + const handleVisibilityToggle = useCallback( + (e: React.MouseEvent) => { + e.stopPropagation(); + + if (isUpdating) return; + + setIsUpdating(true); + setTimeout(() => { + updateProjects({ + ...project, + visible: !project.visible + }); + setIsUpdating(false); + }, 10); + }, + [project, updateProjects, isUpdating] + ); + return ( {
+ { diff --git a/apps/fronted/src/store/useResumeStore.ts b/apps/fronted/src/store/useResumeStore.ts index 02b91e9..cbdb6e4 100644 --- a/apps/fronted/src/store/useResumeStore.ts +++ b/apps/fronted/src/store/useResumeStore.ts @@ -105,7 +105,8 @@ const initialState = { technologies: "React, TypeScript, TailwindCSS, shadcn/ui", responsibilities: "负责整体技术方案设计和团队管理,把控项目进度和代码质量", - achievements: "系统整体性能提升 50%,代码重用率提高到 80%" + achievements: "系统整体性能提升 50%,代码重用率提高到 80%", + visible: true }, { id: "p2", @@ -117,7 +118,8 @@ const initialState = { technologies: "React, TypeScript, TailwindCSS, shadcn/ui", responsibilities: "负责整体技术方案设计和团队管理,把控项目进度和代码质量", - achievements: "系统整体性能提升 50%,代码重用率提高到 80%" + achievements: "系统整体性能提升 50%,代码重用率提高到 80%", + visible: true } ] }; diff --git a/apps/fronted/src/types/resume.ts b/apps/fronted/src/types/resume.ts index 41f99d6..c9e45cf 100644 --- a/apps/fronted/src/types/resume.ts +++ b/apps/fronted/src/types/resume.ts @@ -39,6 +39,7 @@ export interface Project { technologies: string; responsibilities: string; achievements: string; + visible: boolean; } export interface ResumeSection {