import React, { useState } from 'react'; import { DslFile } from '../../types'; import { useApp } from '../../contexts/AppContext'; import Button from '../common/Button'; import TextArea from '../common/TextArea'; import Input from '../common/Input'; import Modal from '../common/Modal'; interface DslFileListProps { groupId: string; files: DslFile[]; } const DslFileList: React.FC = ({ groupId, files }) => { const { deleteDslFile, updateDslFile } = useApp(); const [selectedFile, setSelectedFile] = useState(null); const [showViewModal, setShowViewModal] = useState(false); const [showEditModal, setShowEditModal] = useState(false); const [editFileName, setEditFileName] = useState(''); const [editContent, setEditContent] = useState(''); const [error, setError] = useState(''); if (files.length === 0) { return (

暂无 YAML 文件

上传或添加 YAML 文件以便于存储和管理

); } const formatDate = (date: string | Date) => { const dateObj = typeof date === 'string' ? new Date(date) : date; return dateObj.toLocaleDateString('zh-CN', { year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit' }); }; const handleDelete = (fileId: string) => { if (window.confirm('确定要删除此 YAML 文件吗?此操作不可撤销。')) { deleteDslFile(groupId, fileId); } }; const handleViewFile = (file: DslFile) => { setSelectedFile(file); setShowViewModal(true); }; const handleEditFile = (file: DslFile) => { setSelectedFile(file); setEditFileName(file.name); setEditContent(file.content); setShowEditModal(true); }; const handleSaveEdit = async () => { if (!selectedFile) return; setError(''); if (!editFileName.trim()) { setError('请输入文件名'); return; } if (!editContent.trim()) { setError('请输入YAML内容'); return; } try { await updateDslFile(groupId, selectedFile._id, { name: editFileName, content: editContent }); setShowEditModal(false); } catch (err: any) { console.error('更新YAML文件失败:', err); setError(err.message || '更新失败,请重试'); } }; const handleExportFile = (file: DslFile) => { // 创建 Blob 对象 const blob = new Blob([file.content], { type: 'text/yaml' }); // 创建下载链接 const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = file.name; document.body.appendChild(a); a.click(); // 清理 setTimeout(() => { document.body.removeChild(a); URL.revokeObjectURL(url); }, 0); }; const getFileIcon = (fileName: string) => { return ( ); }; return (
{files.map((file) => (
{getFileIcon(file.name)}
{file.name}
上传于 {formatDate(file.uploadedAt)}
))} {/* 查看文件模态框 */} setShowViewModal(false)} title={selectedFile?.name || "查看 YAML 文件"} >
{selectedFile && (
                  {selectedFile.content}
                
)}
{/* 编辑文件模态框 */} setShowEditModal(false)} title="编辑 YAML 文件" >
{error && (
{error}
)} setEditFileName(e.target.value)} required />