import React, { useRef } from 'react'; import { type UseFormReturn } from 'react-hook-form'; import { Box, Typography, TextField, FormControl, InputLabel, Select, MenuItem, Grid, Avatar, Button, IconButton, CircularProgress, } from '@mui/material'; import { PhotoCamera as PhotoCameraIcon, Delete as DeleteIcon, Save as SaveIcon, } from '@mui/icons-material'; export interface BasicFormData { name: string; description: string; permission: string; avatar?: string; } interface GeneralFormProps { form: UseFormReturn; onSubmit: (data: BasicFormData) => void; isSubmitting?: boolean; onCancel?: () => void; disabled?: boolean; submitButtonText?: string; cancelButtonText?: string; } function GeneralForm({ form, onSubmit, isSubmitting = false, onCancel, disabled = false, submitButtonText = '提交', cancelButtonText = '取消' }: GeneralFormProps) { const fileInputRef = useRef(null); // 处理头像上传 const handleAvatarUpload = (event: React.ChangeEvent) => { const file = event.target.files?.[0]; if (file) { // 检查文件类型 if (!file.type.startsWith('image/')) { alert('请选择图片文件'); return; } // 检查文件大小 (限制为 2MB) if (file.size > 2 * 1024 * 1024) { alert('图片大小不能超过 2MB'); return; } const reader = new FileReader(); reader.onload = (e) => { const base64String = e.target?.result as string; form.setValue('avatar', base64String); }; reader.readAsDataURL(file); } }; // 删除头像 const handleAvatarDelete = () => { form.setValue('avatar', undefined); if (fileInputRef.current) { fileInputRef.current.value = ''; } }; const avatarValue = form.watch('avatar'); return ( 基础信息 {/* 头像上传 */} 头像 {!avatarValue && form.watch('name')?.charAt(0)?.toUpperCase()} {avatarValue && ( )} 支持 PNG、JPG 格式,文件大小不超过 2MB {/* 知识库名称 */} {/* 描述 */} {/* 权限设置 */} 权限设置 {/* 操作按钮 */} {onCancel && ( )} ); } export default GeneralForm;