diff --git a/nkebao/src/components/UploadVideo.tsx b/nkebao/src/components/UploadVideo.tsx new file mode 100644 index 00000000..c2cec4e8 --- /dev/null +++ b/nkebao/src/components/UploadVideo.tsx @@ -0,0 +1,94 @@ +import React, { useRef } from 'react'; +import { Button } from 'tdesign-mobile-react'; +import { X } from 'lucide-react'; +import { uploadImage } from '@/api/upload'; + +interface UploadVideoProps { + value?: string; + onChange?: (url: string) => void; + accept?: string; + disabled?: boolean; +} + +const VIDEO_BOX_CLASS = + 'relative flex items-center justify-center w-full aspect-[16/9] rounded-2xl border-2 border-dashed border-blue-300 bg-gray-50 overflow-hidden'; + +const UploadVideo: React.FC = ({ + value, + onChange, + accept = 'video/mp4,video/webm,video/ogg,video/quicktime,video/x-msvideo,video/x-ms-wmv,video/x-flv,video/x-matroska', + disabled, +}) => { + const inputRef = useRef(null); + + // 选择文件并上传 + const handleFileChange = async (e: React.ChangeEvent) => { + const file = e.target.files?.[0]; + if (!file) return; + try { + const url = await uploadImage(file); + onChange?.(url); + } catch (err: any) { + alert(err?.message || '上传失败'); + } finally { + if (inputRef.current) inputRef.current.value = ''; + } + }; + + // 触发文件选择 + const handleClick = () => { + if (!disabled) inputRef.current?.click(); + }; + + // 删除视频 + const handleDelete = () => { + onChange?.(''); + }; + + return ( +
+ {!value ? ( +
+ + +
+ ) : ( +
+
+ )} +
+ ); +}; + +export default UploadVideo; \ No newline at end of file diff --git a/nkebao/src/pages/content/materials/New.tsx b/nkebao/src/pages/content/materials/New.tsx index 760da842..57f4c84d 100644 --- a/nkebao/src/pages/content/materials/New.tsx +++ b/nkebao/src/pages/content/materials/New.tsx @@ -14,6 +14,7 @@ import { Upload } from 'tdesign-mobile-react'; import type { UploadFile as TDesignUploadFile } from 'tdesign-mobile-react/es/upload/type'; import { uploadImage } from '@/api/upload'; import UploadImage from '@/components/UploadImage'; +import UploadVideo from '@/components/UploadVideo'; export default function NewMaterial() { const navigate = useNavigate(); @@ -161,7 +162,7 @@ export default function NewMaterial() {