Merge branch 'master' of ssh://gitea.bowongai.com:219/bowong/mxivideo

This commit is contained in:
imeepos 2025-07-11 12:15:25 +08:00
commit 28384f9f09
1 changed files with 24 additions and 31 deletions

View File

@ -1,7 +1,7 @@
import React, { useState } from 'react'
import { User, Plus, X, Search } from 'lucide-react'
import { Project } from '../services/projectService'
import { AudioFile as Model, AudioService as ModelService } from '../services/audioService'
import { Model, ModelService } from '../services/modelService'
interface ProjectModelsProps {
project: Project
@ -22,11 +22,11 @@ const ProjectModels: React.FC<ProjectModelsProps> = ({
const loadAvailableModels = async () => {
try {
setLoading(true)
const response = await ModelService.getAllAudioFiles()
const response = await ModelService.getAllModels()
if (response.status && response.data) {
// 过滤掉已经添加到项目的模特
const projectModelIds = models.map(m => m.id)
const available = response.data.filter(model => !projectModelIds.includes(model.id))
const available = response.data.filter((model: Model) => !projectModelIds.includes(model.id))
setAvailableModels(available)
}
} catch (error) {
@ -56,7 +56,7 @@ const ProjectModels: React.FC<ProjectModelsProps> = ({
}
const filteredAvailableModels = availableModels.filter(model =>
model.filename.toLowerCase().includes(searchTerm.toLowerCase())
model.model_number.toLowerCase().includes(searchTerm.toLowerCase())
)
return (
@ -102,20 +102,19 @@ const ProjectModels: React.FC<ProjectModelsProps> = ({
<div key={model.id} className="bg-white border border-gray-200 rounded-lg p-4 hover:shadow-md transition-shadow">
<div className="flex items-start justify-between">
<div className="flex-1">
<h4 className="font-medium text-gray-900 mb-1">{model.filename}</h4>
<h4 className="font-medium text-gray-900 mb-1">{model.model_number}</h4>
<p className="text-sm text-gray-600 mb-2">
{ModelService.formatDuration(model.duration)} {ModelService.formatFileSize(model.file_size)}
{new Date(model.created_at).toLocaleDateString()}
</p>
<div className="flex flex-wrap gap-1">
{(model.tags || []).map((tag, index) => (
<span
key={index}
className="inline-block px-2 py-1 bg-blue-100 text-blue-800 text-xs rounded-full"
>
{tag}
</span>
))}
</div>
{model.model_image && (
<div className="w-16 h-16 bg-gray-100 rounded-lg overflow-hidden mb-2">
<img
src={model.model_image}
alt={model.model_number}
className="w-full h-full object-cover"
/>
</div>
)}
</div>
<button
onClick={() => handleRemoveModel(model.id)}
@ -181,23 +180,17 @@ const ProjectModels: React.FC<ProjectModelsProps> = ({
className="flex items-center justify-between p-3 border border-gray-200 rounded-lg hover:bg-gray-50 transition-colors"
>
<div className="flex-1">
<h4 className="font-medium text-gray-900">{model.filename}</h4>
<h4 className="font-medium text-gray-900">{model.model_number}</h4>
<p className="text-sm text-gray-600">
{ModelService.formatDuration(model.duration)} {ModelService.formatFileSize(model.file_size)}
{new Date(model.created_at).toLocaleDateString()}
</p>
{(model.tags || []).length > 0 && (
<div className="flex flex-wrap gap-1 mt-1">
{(model.tags || []).slice(0, 3).map((tag, index) => (
<span
key={index}
className="inline-block px-2 py-1 bg-gray-100 text-gray-700 text-xs rounded-full"
>
{tag}
</span>
))}
{(model.tags || []).length > 3 && (
<span className="text-xs text-gray-500">+{(model.tags || []).length - 3}</span>
)}
{model.model_image && (
<div className="w-12 h-12 bg-gray-100 rounded-lg overflow-hidden mt-1">
<img
src={model.model_image}
alt={model.model_number}
className="w-full h-full object-cover"
/>
</div>
)}
</div>