feat: 素材处理管线——自动处理、审核流程、6状态机

This commit is contained in:
2026-06-07 22:50:05 +08:00
parent a389888eb4
commit 90fdb44b20
30 changed files with 1452 additions and 55 deletions

View File

@@ -3,7 +3,12 @@ import { useState } from "react";
import type { CreateMaterialRequest, Material } from "./types";
import { useCurrentProject } from "../../shared/hooks/use-current-project";
import { useCreateMaterial } from "../../shared/hooks/use-materials";
import {
useApproveMaterial,
useCreateMaterial,
useDiscardMaterial,
useRetryMaterial,
} from "../../shared/hooks/use-materials";
import { AddMaterialModal } from "./components/AddMaterialModal";
import { MaterialDetailPanel } from "./components/MaterialDetailPanel";
import { MaterialSidebar } from "./components/MaterialSidebar";
@@ -14,6 +19,9 @@ export function InboxPage() {
const [selectedId, setSelectedId] = useState<null | string>(null);
const createMutation = useCreateMaterial(project.id);
const approveMutation = useApproveMaterial(project.id);
const discardMutation = useDiscardMaterial(project.id);
const retryMutation = useRetryMaterial(project.id);
const handleCreate = async (body: CreateMaterialRequest): Promise<Material> => {
const material = await createMutation.mutateAsync({ body, projectId: project.id });
@@ -27,6 +35,18 @@ export function InboxPage() {
}
};
const handleApprove = async (materialId: string) => {
await approveMutation.mutateAsync({ materialId, projectId: project.id });
};
const handleDiscard = async (materialId: string) => {
await discardMutation.mutateAsync({ materialId, projectId: project.id });
};
const handleRetry = async (materialId: string) => {
await retryMutation.mutateAsync({ materialId, projectId: project.id });
};
return (
<div className="app-inbox-page">
<MaterialSidebar
@@ -36,7 +56,13 @@ export function InboxPage() {
projectId={project.id}
selectedId={selectedId}
/>
<MaterialDetailPanel materialId={selectedId} projectId={project.id} />
<MaterialDetailPanel
materialId={selectedId}
onApprove={handleApprove}
onDiscard={handleDiscard}
onRetry={handleRetry}
projectId={project.id}
/>
<AddMaterialModal onAdd={handleCreate} onOpenChange={setModalOpen} open={modalOpen} />
</div>
);