| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
- import { Checkbox } from "antd";
- import { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useState, } from "react";
- import { DAGE_FILE_CHECKBOX_OPTIONS } from "./constants";
- import { DageUpload, DageUploadType, } from "../DageUpload";
- import { FileCheckboxItem } from "./style";
- export const DageFileCheckbox = forwardRef(({ value, action, disabled, hasMobileModel, maxAudioCount = 1, maxImgCount = 9, maxMobileModelCount = 1, maxModelCount = 1, maxVideoCount = 1, onChange, onFileChange, }, ref) => {
- const checkboxVal = useMemo(() => (value ? value.split(",") : []), [value]);
- const [modelFiles, setModelFiles] = useState([]);
- const [mobileModelFiles, setMobileModelFiles] = useState([]);
- const [imgFiles, setImgFiles] = useState([]);
- const [videoFiles, setVideoFiles] = useState([]);
- const [audioFiles, setAudioFiles] = useState([]);
- const hasModel = useMemo(() => checkboxVal.includes(DageUploadType.MODEL), [checkboxVal]);
- const hasImg = useMemo(() => checkboxVal.includes(DageUploadType.IMG), [checkboxVal]);
- const hasAudio = useMemo(() => checkboxVal.includes(DageUploadType.AUDIO), [checkboxVal]);
- const hasVideo = useMemo(() => checkboxVal.includes(DageUploadType.VIDEO), [checkboxVal]);
- useImperativeHandle(ref, () => ({
- validate(rule, val, callback) {
- if (!val) {
- callback("请选择文件类型");
- }
- else if (hasModel &&
- (!modelFiles.length || !modelFiles.some((i) => i.status === "done"))) {
- callback("PC端模型文件不能为空");
- }
- else if (hasModel &&
- hasMobileModel &&
- (!mobileModelFiles.length ||
- !mobileModelFiles.some((i) => i.status === "done"))) {
- callback("移动端模型文件不能为空");
- }
- else if (hasImg &&
- (!imgFiles.length || !imgFiles.some((i) => i.status === "done"))) {
- callback("图片文件不能为空");
- }
- else if (hasVideo &&
- (!videoFiles.length || !videoFiles.some((i) => i.status === "done"))) {
- callback("视频文件不能为空");
- }
- else if (hasAudio &&
- (!audioFiles.length || !audioFiles.some((i) => i.status === "done"))) {
- callback("音频文件不能为空");
- }
- callback();
- },
- setFileList(list) {
- const stack = {
- [DageUploadType.MODEL]: [],
- [DageUploadType.MOBILE_MODEL]: [],
- [DageUploadType.IMG]: [],
- [DageUploadType.AUDIO]: [],
- [DageUploadType.VIDEO]: [],
- };
- list.forEach((item) => {
- stack[item.dType].push(item);
- });
- Object.keys(stack).forEach((key) => {
- const list = stack[key];
- if (!list.length)
- return;
- switch (key) {
- case DageUploadType.MODEL:
- setModelFiles(list);
- break;
- case DageUploadType.MOBILE_MODEL:
- setMobileModelFiles(list);
- break;
- case DageUploadType.IMG:
- setImgFiles(list);
- break;
- case DageUploadType.AUDIO:
- setAudioFiles(list);
- break;
- case DageUploadType.VIDEO:
- setVideoFiles(list);
- break;
- }
- });
- },
- }));
- const handleCheckbox = useCallback((val) => {
- onChange === null || onChange === void 0 ? void 0 : onChange(val.join(","));
- }, [onChange]);
- const handleFileChange = useCallback((method, list) => {
- method(list);
- }, []);
- useEffect(() => {
- if (!onFileChange)
- return;
- onFileChange([
- ...(hasModel ? modelFiles : []),
- ...(hasModel && hasMobileModel ? mobileModelFiles : []),
- ...(hasImg ? imgFiles : []),
- ...(hasVideo ? videoFiles : []),
- ...(hasAudio ? audioFiles : []),
- ]);
- }, [
- hasMobileModel,
- modelFiles,
- mobileModelFiles,
- imgFiles,
- videoFiles,
- audioFiles,
- hasModel,
- hasImg,
- hasVideo,
- hasAudio,
- onFileChange,
- ]);
- return (_jsxs("div", { className: "dage-file-checkbox", children: [_jsx(Checkbox.Group, { disabled: disabled, value: checkboxVal, options: DAGE_FILE_CHECKBOX_OPTIONS, style: {
- display: "flex",
- alignItems: "center",
- height: "32px",
- }, onChange: handleCheckbox }), hasModel && (_jsxs(_Fragment, { children: [_jsxs(FileCheckboxItem, { className: "dage-file-checkbox__item", children: [_jsx("p", { children: "PC\u7AEF\u6A21\u578B\uFF1A" }), _jsx(DageUpload, { disabled: disabled, value: modelFiles, action: action, dType: DageUploadType.MODEL, maxCount: maxModelCount, maxSize: 500, tips: "\u4EC5\u652F\u63014dage\u683C\u5F0F\u7684\u6A21\u578B\u6587\u4EF6\uFF0C\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC7500M", onChange: handleFileChange.bind(undefined, setModelFiles) })] }), hasMobileModel && (_jsxs(FileCheckboxItem, { className: "dage-file-checkbox__item", children: [_jsx("p", { children: "\u79FB\u52A8\u7AEF\u6A21\u578B\uFF1A" }), _jsx(DageUpload, { disabled: disabled, value: mobileModelFiles, action: action, dType: DageUploadType.MOBILE_MODEL, maxCount: maxMobileModelCount, maxSize: 1000, tips: "\u4EC5\u652F\u6301zip\u683C\u5F0F\u7684\u538B\u7F29\u5305\uFF0C\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC71000M", onChange: handleFileChange.bind(undefined, setMobileModelFiles) })] }))] })), hasImg && (_jsxs(FileCheckboxItem, { className: "dage-file-checkbox__item", children: [_jsx("p", { children: "\u56FE\u7247\uFF1A" }), _jsx(DageUpload, { disabled: disabled, value: imgFiles, action: action, dType: DageUploadType.IMG, maxCount: maxImgCount, maxSize: 20, tips: "\u652F\u6301png\u3001jpg\u548Cjpeg\u683C\u5F0F\uFF1B\u6700\u592720M\uFF0C\u6700\u591A9\u5F20", onChange: handleFileChange.bind(undefined, setImgFiles) })] })), hasAudio && (_jsxs(FileCheckboxItem, { className: "dage-file-checkbox__item", children: [_jsx("p", { children: "\u97F3\u9891\uFF1A" }), _jsx(DageUpload, { disabled: disabled, value: audioFiles, action: action, dType: DageUploadType.AUDIO, maxCount: maxAudioCount, maxSize: 10, tips: "\u4EC5\u652F\u6301MP3\u683C\u5F0F\u7684\u97F3\u9891\u6587\u4EF6\uFF0C\u5927\u5C0F\u4E0D\u5F97\u8D85\u8FC710MB", onChange: handleFileChange.bind(undefined, setAudioFiles) })] })), hasVideo && (_jsxs(FileCheckboxItem, { className: "dage-file-checkbox__item", children: [_jsx("p", { children: "\u89C6\u9891\uFF1A" }), _jsx(DageUpload, { disabled: disabled, value: videoFiles, action: action, dType: DageUploadType.VIDEO, maxCount: maxVideoCount, maxSize: 500, tips: "\u4EC5\u652F\u6301MP4\u683C\u5F0F\u7684\u89C6\u9891\u6587\u4EF6\uFF0C\u5927\u5C0F\u4E0D\u5F97\u8D85\u8FC7500MB", onChange: handleFileChange.bind(undefined, setVideoFiles) })] }))] }));
- });
- export * from "./types";
- export * from "./constants";
|