fix(web): close final workbench interaction gaps

This commit is contained in:
2026-07-22 01:24:51 +08:00
parent 26c3e6fd8a
commit b1ce837845
23 changed files with 808 additions and 175 deletions

View File

@@ -7,8 +7,11 @@ import { ProjectOverview } from './project-overview'
import type { ProjectTaskUpdate } from './project-task-edit-modal'
import { ProjectTasks } from './project-tasks'
import type { ChannelKey, InboxConfirmationOutcome, ProjectWorkspace } from './project-types'
import type { InboxSuggestionDTO } from '../../api/inbox'
import type { CaptureInboxInput, InboxSuggestionDTO } from '../../api/inbox'
import type { AISessionDTO, CreateAISessionInput } from '../../api/ai'
import { Card, Empty, Typography } from '@arco-design/web-react'
const { Text } = Typography
export function ProjectChannelPage({
activeChannel,
@@ -23,6 +26,7 @@ export function ProjectChannelPage({
onCreateProjectTag,
onUpdateTask,
onAnalyzeInbox,
onCaptureInbox,
onConfirmInbox,
onListAISessions,
onCreateAISession,
@@ -36,16 +40,28 @@ export function ProjectChannelPage({
onCreateTask: () => void
onUploadSource: () => void
onCreateCronPlan: () => void
onCreateProjectTag: (name: string) => void
onUpdateTask: (update: ProjectTaskUpdate) => void
onCreateProjectTag: (name: string) => Promise<void>
onUpdateTask: (update: ProjectTaskUpdate) => Promise<void>
onAnalyzeInbox: (inboxId: string) => Promise<InboxSuggestionDTO[]>
onCaptureInbox: (projectId: string, input: CaptureInboxInput) => Promise<string>
onConfirmInbox: (inboxId: string, suggestionIds: string[]) => Promise<InboxConfirmationOutcome>
onListAISessions: (projectId: string, signal?: AbortSignal) => Promise<AISessionDTO[]>
onCreateAISession: (projectId: string, input: CreateAISessionInput, signal?: AbortSignal) => Promise<AISessionDTO>
}) {
if (activeChannel.startsWith('custom:')) {
return (
<div className="project-channel-page project-unavailable-page overview-page">
<Card className="queue-section" bordered>
<Empty description="自定义链接频道暂未开放" />
<Text type="secondary">MVP </Text>
</Card>
</div>
)
}
switch (activeChannel) {
case 'inbox':
return <ProjectInbox key={activeWorkspace.project.id} activeWorkspace={activeWorkspace} onAnalyze={onAnalyzeInbox} onConfirm={onConfirmInbox} />
return <ProjectInbox key={activeWorkspace.project.id} activeWorkspace={activeWorkspace} onCapture={onCaptureInbox} onAnalyze={onAnalyzeInbox} onConfirm={onConfirmInbox} />
case 'tasks':
return <ProjectTasks activeWorkspace={activeWorkspace} activeTaskID={activeTaskID} onOpenTask={onOpenTask} onCloseTask={onCloseTask} onSelectItem={onSelectItem} onCreateTask={onCreateTask} onCreateProjectTag={onCreateProjectTag} onUpdateTask={onUpdateTask} />
case 'ai':