Merge branch 'master' of ssh://gitea.bowongai.com:219/bowong/mxivideo
This commit is contained in:
commit
28384f9f09
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue