import { useModel } from 'umi' import { Modal, Button, Form, Select, message, Space, Image as AntImg, Upload } from 'antd' import { SelectValue } from 'antd/es/select' import Cropprt from '@/components/Cropper' import React, { useCallback, useEffect, useState } from "react" const { Option } = Select import style from './index.less' import { request } from 'umi' import { api } from '@/services/api' import { DeleteOutlined, InboxOutlined } from '@ant-design/icons' import { RcFile } from 'antd/lib/upload' import getMD5 from '@/components/MD5' import { dataURLtoFile, imgMessage } from '@/utils/compress' const { Dragger } = Upload type Props = { visible: boolean, num?: number, // 上传数量 imgSize?: { width: number, height: number } // handleOk: () => void hideModal: (id?: number) => void, editData?: any, ajax: any, dataType: string, uploadType?: 'img' | 'video' } const channelCon = ['朋友圈信息流', '公众平台流量', '广点通', '小程序', '头条', '抖音'] function AddCon(props: Props) { let { visible, hideModal, editData, ajax, dataType: typeData, uploadType, imgSize, num } = props const [imgs, setImgs] = useState([]) const [video, setVideo] = useState() const [imgLength, setImgLength] = useState<{ width: number, height: number }>({ width: imgSize?.width || 800, height: imgSize?.height || 800 }) const [queryForm, setQueryForm] = useState({ content: '', labelIds: [], type: 1, channel: '朋友圈信息流', id: undefined, dataType: 'personal' }) const [loading, setLoading] = useState(false) const [fileList, setFileList] = useState([]) const { addMedias, getLabels, dataLable } = useModel('useLaunch.useMaterial') useEffect(() => { if (editData && typeof editData === 'object' && Object.keys(editData).length > 0) { let { content, labelIds, type, channel, id, dataType } = editData setImgs(content?.split(',')) setQueryForm({ content, labelIds: labelIds || [], type, id, channel, dataType }) } }, [editData]) useEffect(() => { getLabels.run({ pageNum: 1, pageSize: 200 }) }, []) /** 选择了图片触发 */ const setImgsHandle = useCallback(async (img: any) => { if (img) { if (imgs.length > 0) { let file = await dataURLtoFile(img, Math.round(new Date() as any / 1000)) let md5 = await getMD5(file) for (let item of imgs) { let file = await dataURLtoFile(item, Math.round(new Date() as any / 1000)) let md5s = await getMD5(file) if (md5 === md5s) { message.error('重复选择,请选择不同图片!') return } } let onesCk = await imgMessage([imgs[0]]) let imgCK = await imgMessage([img]) if ((onesCk[0]?.width !== imgCK[0]?.width) || (onesCk[0]?.height !== imgCK[0]?.height)) { message.error({ content: '上传组图时,需要图片尺寸相同', duration: 5 }) return } } imgs.push(img) if (imgs.length > 12) { message.error('每次最多上传12张') return } setImgs([...imgs]) imgMessage([...imgs]).then((res: any) => { if (res && res?.length > 0) { setImgLength({ width: res[0]?.width || 800, height: res[0]?.height }) } }) } }, [imgs, imgLength]) /** 设置上传类型 */ useEffect(() => { if (uploadType) { if (uploadType === 'img') { setQueryForm({ ...queryForm, type: 1 }) } else { setQueryForm({ ...queryForm, type: 2 }) } } }, [uploadType]) /** 上传创意 确定 */ const handleOk = useCallback(async () => { let { labelIds, id } = queryForm setLoading(true) if (labelIds.length === 0) { message.error('请选择标签'); return } dataLable.run({ labelIds: labelIds?.toString(), id, name: 'tagMedia' }).then(res => { setLoading(false) setQueryForm({ title: '', labelIds: [], type: 1 }) hideModal() ajax?.refresh() }) }, [queryForm, imgs, loading]) const del = useCallback((src: string) => { let newImgs = imgs.filter((item: string) => item !== src) setImgs(newImgs) }, [imgs]) return 修改标签 {/* */} } onOk={handleOk} onCancel={() => { hideModal() }} footer={ <> } >
{/* { queryForm?.type === 1 ? { !queryForm?.id && 0} isLaunch={imgSize && Object.keys(imgSize).length > 0} {...imgLength} callback={(img) => { setImgsHandle(img) }} /> } { imgs.length > 0 &&
{imgs?.map((item: string, index: number) => (
{!queryForm?.id &&
{ del(item) }}>
}
))}
}
: { !queryForm?.id ? {}} fileList={fileList} beforeUpload={(file: RcFile, FileList: RcFile[]): any => { const isLt2M = file.size / 1024 / 1024 < 500; if (!isLt2M) { message.error('请上传视频小于 500MB!'); return isLt2M; } setFileList(FileList) setVideo(file) }} >

单击或拖动文件到此区域以上载

支持MP4....

: }
} */} {/* */}
} export default React.memo(AddCon)