diff --git a/apps/desktop/src/pages/MaterialModelBinding.tsx b/apps/desktop/src/pages/MaterialModelBinding.tsx index 168db18..d28e2c5 100644 --- a/apps/desktop/src/pages/MaterialModelBinding.tsx +++ b/apps/desktop/src/pages/MaterialModelBinding.tsx @@ -26,17 +26,20 @@ import { MaterialModelBindingService, MaterialModelBindingStats } from '../services/materialModelBindingService'; +import { useProjectStore } from '../store/projectStore'; export const MaterialModelBinding: React.FC = () => { const navigate = useNavigate(); const { success, error } = useNotifications(); - + const { projects, loadProjects } = useProjectStore(); + const [materials, setMaterials] = useState([]); const [models, setModels] = useState([]); const [stats, setStats] = useState(null); const [selectedModel, setSelectedModel] = useState(''); + const [selectedProject, setSelectedProject] = useState(''); const [searchQuery, setSearchQuery] = useState(''); const [filterType, setFilterType] = useState<'all' | 'bound' | 'unbound'>('all'); const [loading, setLoading] = useState(true); @@ -52,10 +55,10 @@ export const MaterialModelBinding: React.FC = () => { // 当搜索条件变化时重新加载素材 useEffect(() => { - if (searchQuery !== '' || filterType !== 'all' || selectedModel !== '') { + if (searchQuery !== '' || filterType !== 'all' || selectedModel !== '' || selectedProject !== '') { loadMaterials(); } - }, [searchQuery, filterType, selectedModel]); + }, [searchQuery, filterType, selectedModel, selectedProject]); const loadData = async () => { setLoading(true); @@ -63,6 +66,7 @@ export const MaterialModelBinding: React.FC = () => { await Promise.all([ loadMaterials(), loadModels(), + loadProjects(), loadStats(), ]); } catch (err) { @@ -75,6 +79,7 @@ export const MaterialModelBinding: React.FC = () => { const loadMaterials = async () => { try { const materialsData = await MaterialModelBindingService.getMaterialsByFilter({ + projectId: selectedProject || undefined, modelId: filterType === 'bound' ? selectedModel : undefined, bound: filterType === 'bound' ? true : filterType === 'unbound' ? false : undefined, search: searchQuery, @@ -187,6 +192,15 @@ export const MaterialModelBinding: React.FC = () => { })), ]; + // 获取项目选项 + const getProjectOptions = () => [ + { value: '', label: '全部项目' }, + ...projects.map(project => ({ + value: project.id, + label: project.name, + })), + ]; + const getFilterOptions = () => [ { value: 'all', label: '全部素材' }, { value: 'bound', label: '已绑定' }, @@ -302,6 +316,12 @@ export const MaterialModelBinding: React.FC = () => {
+ setFilterType(value as any)}