feat: 添加停止工作区功能并优化启动工作区按钮逻辑

This commit is contained in:
2026-02-20 16:00:50 +08:00
parent d85a1cf84b
commit 83fc1dca18

View File

@@ -13,7 +13,7 @@ import {
PopoverContent, PopoverContent,
PopoverTrigger, PopoverTrigger,
} from '@/components/ui/popover' } from '@/components/ui/popover'
import { Star, GitFork, FileText, Edit, FolderGit2, MoreVertical, FileText as IssueIcon, Settings, Play, Trash2, RefreshCw, BookOpen, Copy, Clock, Info } from 'lucide-react' import { Star, GitFork, FileText, Edit, FolderGit2, MoreVertical, FileText as IssueIcon, Settings, Play, Trash2, RefreshCw, BookOpen, Copy, Clock, Info, Eye, Square } from 'lucide-react'
import { useRepoStore } from '../store' import { useRepoStore } from '../store'
import { useMemo, useState } from 'react' import { useMemo, useState } from 'react'
import { myOrgs } from '../store/build' import { myOrgs } from '../store/build'
@@ -32,7 +32,7 @@ interface RepoCardProps {
export function RepoCard({ repo, onStartWorkspace, onEdit, onIssue, onSettings, onDelete, onSync }: RepoCardProps) { export function RepoCard({ repo, onStartWorkspace, onEdit, onIssue, onSettings, onDelete, onSync }: RepoCardProps) {
const [deletePopoverOpen, setDeletePopoverOpen] = useState(false) const [deletePopoverOpen, setDeletePopoverOpen] = useState(false)
const { workspaceList, getWorkspaceDetail, getList, buildUpdate } = useRepoStore(); const { workspaceList, getWorkspaceDetail, getList, buildUpdate, stopWorkspace } = useRepoStore();
const workspace = useMemo(() => { const workspace = useMemo(() => {
return workspaceList.find(ws => ws.slug === repo.path) return workspaceList.find(ws => ws.slug === repo.path)
}, [workspaceList, repo.path]) }, [workspaceList, repo.path])
@@ -97,6 +97,30 @@ export function RepoCard({ repo, onStartWorkspace, onEdit, onIssue, onSettings,
)} )}
</div> </div>
<div className="flex items-center gap-2 shrink-0"> <div className="flex items-center gap-2 shrink-0">
{isWorkspaceActive && (
<TooltipProvider>
<Tooltip>
<TooltipTrigger
render={
<Button
size="sm"
variant="outline"
onClick={() => {
// TODO: 实现停止工作区逻辑
stopWorkspace()
}}
className="h-8 w-8 p-0 border-neutral-200 hover:border-red-600 hover:bg-red-600 hover:text-white transition-all cursor-pointer"
>
<Square className="w-4 h-4" />
</Button>
}
/>
<TooltipContent>
<p></p>
</TooltipContent>
</Tooltip>
</TooltipProvider>
)}
<TooltipProvider> <TooltipProvider>
<Tooltip> <Tooltip>
<TooltipTrigger <TooltipTrigger
@@ -104,15 +128,22 @@ export function RepoCard({ repo, onStartWorkspace, onEdit, onIssue, onSettings,
<Button <Button
size="sm" size="sm"
variant="outline" variant="outline"
onClick={() => onStartWorkspace(repo)} onClick={() => {
if (!isWorkspaceActive) {
onStartWorkspace(repo)
} else {
getWorkspaceDetail(workspace)
}
}}
className="h-8 w-8 p-0 border-neutral-200 hover:border-neutral-900 hover:bg-neutral-900 hover:text-white transition-all cursor-pointer" className="h-8 w-8 p-0 border-neutral-200 hover:border-neutral-900 hover:bg-neutral-900 hover:text-white transition-all cursor-pointer"
> >
<Play className="w-4 h-4" /> {isWorkspaceActive ? <Eye className="w-4 h-4" /> : <Play className="w-4 h-4" />}
</Button> </Button>
} }
/> />
<TooltipContent> <TooltipContent>
<p></p> <p>{isWorkspaceActive ? '查看工作区' : '启动工作区'}</p>
</TooltipContent> </TooltipContent>
</Tooltip> </Tooltip>
</TooltipProvider> </TooltipProvider>