/** * ProjectResourceLinkDemo - 项目与素材库联动演示 * 展示从项目面板切换到素材库的联动功能 */ import { useState, useEffect } from 'react'; import { Button } from '@/components/ui/button'; import { useUIStore } from '@/stores/uiStore'; export function ProjectResourceLinkDemo() { const [lastEvent, setLastEvent] = useState<{ projectId: string; projectName: string } | null>(null); const { switchToLibraryWithProject, leftPanelActiveTab } = useUIStore(); // 监听项目选择事件 useEffect(() => { const handleSelectProjectInLibrary = (event: CustomEvent) => { const { projectId, projectName } = event.detail; setLastEvent({ projectId, projectName }); }; window.addEventListener('selectProjectInLibrary', handleSelectProjectInLibrary as EventListener); return () => { window.removeEventListener('selectProjectInLibrary', handleSelectProjectInLibrary as EventListener); }; }, []); // 模拟项目数据 const mockProjects = [ { id: 'project-1', name: '西游记之大圣归来 - 2015第一部' }, { id: 'project-2', name: '琅琊榜 - 第一集' }, { id: 'project-3', name: '琅琊榜 - 第二集' }, { id: 'project-4', name: '琅琊榜 - 第三集' }, ]; const handleTestProjectLink = (projectId: string, projectName: string) => { switchToLibraryWithProject(projectId, projectName); }; return (

项目与素材库联动演示

当前状态

当前面板: {leftPanelActiveTab === 'project' ? '项目面板' : '素材库面板'}

{lastEvent && ( <>

最后选择的项目ID: {lastEvent.projectId}

最后选择的项目名称: {lastEvent.projectName}

)}

测试联动功能

点击下面的按钮模拟在项目面板中右键点击"展开素材"

{mockProjects.map((project) => ( ))}

联动流程:

  1. 用户在项目面板右键点击项目
  2. 选择"展开素材"菜单项
  3. 自动切换到素材库面板
  4. 智能搜索框显示项目名称
  5. 自动加载该项目的素材

技术实现:

  • UIStore 中的 switchToLibraryWithProject 方法
  • 自定义事件 'selectProjectInLibrary' 进行组件间通信
  • ProjectResourcePanel 和 ProjectSmartSearchInput 监听事件并响应
  • 自动切换面板并填充搜索框
); }