feat: expand commercial ai drama platform

This commit is contained in:
xz
2026-08-31 21:09:48 +08:00
parent f06e583c9b
commit 8caf947b80
35 changed files with 10181 additions and 188 deletions
+18 -9
View File
@@ -73,6 +73,7 @@ import {
ProjectAssistantPage,
VoiceStudioPage
} from "./components/CreatorSuitePages";
import { KnowledgeLibraryPage } from "./components/KnowledgeLibraryPage";
import {
CastingBoardPage,
DeliveryAccessPage,
@@ -110,7 +111,8 @@ const navigationGroups = [
{ id: "creator-home", label: "我的工作台", icon: RadioTower },
{ id: "tasks", label: "协作任务", icon: ListChecks, requiredPermission: "task:view" },
{ id: "assistant", label: "项目 AI 助手", icon: Bot },
{ id: "asset-library", label: "资产库", icon: Images, requiredPermission: "asset:edit" },
{ id: "knowledge", label: "内容知识库", icon: FileJson2, requiredPermission: "script:read" },
{ id: "asset-library", label: "资产库", icon: Images, requiredAnyPermissions: ["asset:edit", "voice:edit", "compliance:manage"] },
{ id: "voice-studio", label: "声音与字幕", icon: AudioLines, requiredPermission: "voice:edit" },
{ id: "batch-production", label: "批量生产", icon: ListPlus, requiredPermission: "job:create" }
]
@@ -128,13 +130,13 @@ const navigationGroups = [
{ id: "overview", label: "生产总控", icon: RadioTower, requiredPermission: "usage:view" },
{ id: "factory", label: "项目工厂", icon: Layers3, requiredPermission: "project:create" },
{ id: "script", label: "剧本拆解", icon: BookOpen, requiredPermission: "script:edit" },
{ id: "casting", label: "资产与选角", icon: ShieldCheck, requiredPermission: "asset:edit" },
{ id: "casting", label: "资产与选角", icon: ShieldCheck, requiredAnyPermissions: ["asset:edit", "compliance:manage"] },
{ id: "director", label: "导演工作台", icon: Clapperboard, requiredPermission: "job:create" },
{ id: "jobs", label: "生成任务", icon: Wand2, requiredPermission: "job:create" },
{ id: "bible", label: "系列 Bible", icon: BookOpen, requiredPermission: "script:edit" },
{ id: "locks", label: "连续性锁", icon: ShieldCheck, requiredPermission: "asset:edit" },
{ id: "locks", label: "连续性锁", icon: ShieldCheck, requiredAnyPermissions: ["asset:edit", "compliance:manage"] },
{ id: "shots", label: "镜头清单", icon: Clapperboard, requiredPermission: "job:create" },
{ id: "modelops", label: "模型中台", icon: Network, requiredPermission: "model:manage" },
{ id: "modelops", label: "模型中台", icon: Network, requiredAnyPermissions: ["model:manage", "model:approve"] },
{ id: "qa", label: "审片中心", icon: ListChecks, requiredPermission: "qa:review" },
{ id: "compliance", label: "成本合规", icon: Scale, requiredPermission: "usage:view" },
{ id: "export", label: "交付运营", icon: Download, requiredPermission: "delivery:view" },
@@ -147,7 +149,7 @@ const navigationGroups = [
{ id: "admin-overview", label: "管理概览", icon: Gauge, requiredPermission: "usage:view" },
{ id: "admin-organizations", label: "组织与工作区", icon: Building2, requiredPermission: "organization:manage" },
{ id: "admin-members", label: "用户与权限", icon: Users, requiredPermission: "organization:members:invite" },
{ id: "admin-models", label: "模型与 Runner", icon: Network, requiredPermission: "model:manage" },
{ id: "admin-models", label: "模型与 Runner", icon: Network, requiredAnyPermissions: ["model:manage", "model:approve"] },
{ id: "admin-queue", label: "队列与任务", icon: Wand2, requiredPermission: "queue:manage" },
{ id: "admin-usage", label: "用量与成本", icon: Coins, requiredPermission: "usage:view" },
{ id: "admin-audit", label: "审计与合规", icon: ListChecks, requiredPermission: "audit:view" }
@@ -1706,9 +1708,9 @@ function App() {
projectId: activeProjectId,
episodeId: activeEpisodeId
};
const enterpriseArea = activeTab === "creator-home" || activeTab === "tasks" || activeTab === "assistant" || activeTab === "asset-library" || activeTab === "voice-studio" || activeTab === "batch-production" || activeTab === "account" || activeTab === "factory" || activeTab === "script" || activeTab === "casting" || activeTab === "director" || activeTab === "jobs" || activeTab === "bible" || activeTab === "locks" || activeTab === "shots" || activeTab === "modelops" || activeTab === "qa" || activeTab === "export" || activeTab === "delivery-portal" || activeTab.startsWith("admin-") || activeTab.startsWith("system-");
const enterpriseArea = activeTab === "creator-home" || activeTab === "tasks" || activeTab === "assistant" || activeTab === "knowledge" || activeTab === "asset-library" || activeTab === "voice-studio" || activeTab === "batch-production" || activeTab === "account" || activeTab === "factory" || activeTab === "script" || activeTab === "casting" || activeTab === "director" || activeTab === "jobs" || activeTab === "bible" || activeTab === "locks" || activeTab === "shots" || activeTab === "modelops" || activeTab === "qa" || activeTab === "export" || activeTab === "delivery-portal" || activeTab.startsWith("admin-") || activeTab.startsWith("system-");
const effectivePermissions = new Set(platformContext?.context?.permissions || []);
const canViewAdmin = ["workspace:create", "model:manage", "usage:view", "audit:view", "queue:manage"].some((permission) => effectivePermissions.has(permission));
const canViewAdmin = ["workspace:create", "model:manage", "model:approve", "usage:view", "compliance:manage", "audit:view", "queue:manage"].some((permission) => effectivePermissions.has(permission));
const canViewSystem = platformContext?.context?.systemAdmin || effectivePermissions.has("system:settings:view");
const canCreateProject = effectivePermissions.has("project:create");
const canCreateJob = effectivePermissions.has("job:create");
@@ -1716,9 +1718,14 @@ function App() {
const canManageProject = effectivePermissions.has("project:manage");
const canApproveDelivery = effectivePermissions.has("delivery:approve");
const canApproveVoice = effectivePermissions.has("voice:approve");
const canApproveAssets = effectivePermissions.has("compliance:manage");
const canSeeNavigationItem = (item) => {
if (item.requiredAnyPermissions) return item.requiredAnyPermissions.some((permission) => effectivePermissions.has(permission));
return !item.requiredPermission || effectivePermissions.has(item.requiredPermission);
};
const visibleNavigationGroups = navigationGroups
.filter((group) => group.label === "创作套件" || group.label === "账户" || group.label === "生产流水线" || (group.label === "管理员后台" && canViewAdmin) || (group.label === "系统设置" && canViewSystem))
.map((group) => ({ ...group, items: group.items.filter((item) => !item.requiredPermission || effectivePermissions.has(item.requiredPermission)) }))
.map((group) => ({ ...group, items: group.items.filter(canSeeNavigationItem) }))
.filter((group) => group.items.length);
const activeNavigationItem = visibleNavigationGroups.flatMap((group) => group.items).find((item) => item.id === activeTab);
@@ -1830,7 +1837,9 @@ function App() {
{activeTab === "assistant" && <ProjectAssistantPage project={project} setActiveTab={setActiveTab} allowedTabs={visibleNavigationGroups.flatMap((group) => group.items).map((item) => item.id)} />}
{activeTab === "asset-library" && <AssetLibraryPage project={project} contextOverrides={contextOverrides} />}
{activeTab === "knowledge" && <KnowledgeLibraryPage platformContext={platformContext} contextOverrides={contextOverrides} />}
{activeTab === "asset-library" && <AssetLibraryPage project={project} contextOverrides={contextOverrides} canApproveAssets={canApproveAssets} />}
{activeTab === "voice-studio" && <VoiceStudioPage project={project} onQueueJob={enqueueJob} contextOverrides={contextOverrides} canApproveVoice={canApproveVoice} />}