wjx 2 年之前
父节点
当前提交
c7fd3367c4

+ 3 - 0
src/components/FileBoxAD/components/imgModal/index.tsx

@@ -110,6 +110,9 @@ let ImgModal = React.memo((props: { isAll?: boolean }) => {
                                     setQueryForm({ ...queryForm, file: newFileList.file })
                                     setVisible(true)
                                 }}
+                                onRemove={() => {
+                                    setQueryForm({ ...queryForm, file: null })
+                                }}
                                 onPreview={(file: any) => {
                                     setPreviewVisible(true)
                                     setFileUrl(file.thumbUrl)

+ 30 - 0
src/components/FileBoxAD/components/imgsModal/index.less

@@ -0,0 +1,30 @@
+
+
+.imgsModal {
+
+    
+}
+.previewGroup {
+    position: relative;
+    .clear {
+        position: absolute;
+        right: -5px;
+        top: -8px;
+        color: red;
+        z-index: 20;
+        cursor: pointer;
+    }
+    .ant-image {
+        border: 1px solid rgb(210, 210, 210);
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        box-sizing: border-box;
+        overflow: hidden;
+        .ant-image-img {
+            width: auto !important;
+            display: inline-block;
+            box-sizing: border-box;
+        }
+    }
+}

+ 132 - 0
src/components/FileBoxAD/components/imgsModal/index.tsx

@@ -0,0 +1,132 @@
+import React, { useState } from 'react'
+import { Form, Input, InputNumber, message, Modal, Space, Upload, Image } from 'antd'
+import { useModel } from 'umi'
+import { RcFile } from 'antd/lib/upload'
+import CropperImg from '../Cropper'
+import { CloseCircleFilled} from '@ant-design/icons'
+import './index.less'
+
+/**新建非图文素材 */
+let ImgsModal = React.memo((props: { isAll?: boolean }) => {
+
+    /*****========STA=========*****/
+    const { isAll } = props
+    const [queryForm, setQueryForm] = useState<{ title: string, sort: number, fileSize: number, files: any[] }>({ title: '', sort: 0, fileSize: 0, files: [] })
+    const [visible, setVisible] = useState<boolean>(false)
+    const [file, setFile] = useState<any>(null)
+    const { state, typeEnum, addFiles, offEditFile } = useModel(isAll ? 'useLaunchAdq.useBdMedia' : 'useLaunchAdq.useBdMediaPup')
+    const { imgsVisrible, mediaType, actionItem, upLoadLoading } = state
+    /*****========END=========*****/
+
+
+    const handleOk = (e: any) => {
+        e?.stopPropagation()
+        if (queryForm?.files?.length > 0) {
+            addFiles({ ...queryForm });
+        } else {
+            message.error('请上传素材')
+        }
+    }
+
+    const clearHandle = (index: number) => {
+        setQueryForm(() => ({ ...queryForm, files: queryForm.files.filter((item: any, i) => i !== index) }))
+    }
+
+    return <div>
+        <Modal
+            title={(actionItem ? '编辑' : '批量新建') + typeEnum[mediaType as string]}
+            visible={imgsVisrible}
+            onOk={(e) => { handleOk(e) }}
+            confirmLoading={upLoadLoading}
+            onCancel={() => {
+                offEditFile();
+            }}
+            width={450}
+            destroyOnClose
+            maskClosable={false}
+        >
+            <Form
+                name="basic"
+                labelCol={{ span: 5 }}
+                wrapperCol={{ span: 19 }}
+                autoComplete="off"
+            >
+                <Form.Item
+                    label="图片名称"
+                >
+                    <Input value={queryForm.title} onChange={(e) => setQueryForm({ ...queryForm, title: e.target.value })} placeholder="请输入图片名称" />
+                </Form.Item>
+                {mediaType === 'IMG' && <Form.Item
+                    label="图片大小"
+                    tooltip="单位KB,0代表不填默认图片300KB;图片太大会压缩到此大小下"
+                >
+                    <InputNumber value={queryForm.fileSize} onChange={(e) => setQueryForm({ ...queryForm, fileSize: e })} placeholder="请输入图片大小" />
+                </Form.Item>}
+                <Form.Item
+                    label="排序"
+                    tooltip="数值越大越靠前"
+                >
+                    <InputNumber value={queryForm.sort} onChange={(e) => setQueryForm({ ...queryForm, sort: e })} placeholder="请输入排序" />
+                </Form.Item>
+                <Form.Item
+                    label={'上传' + typeEnum[mediaType as string]}
+                >
+                    <Space direction='vertical'>
+                        <Image.PreviewGroup>
+                            <Space wrap>
+                                {queryForm?.files?.map((item: any, index: number) => <div key={index} className='previewGroup'>
+                                    <div className='clear' onClick={() => clearHandle(index)}><CloseCircleFilled /></div>
+                                    <Image height={60} width={60} src={URL.createObjectURL(item)} className='imagePre'/>
+                                </div>)}
+                            </Space>
+                        </Image.PreviewGroup>
+                        <Space>
+                            <Upload
+                                listType="picture-card"
+                                accept='image/gif,image/jpeg,image/png,image/jpg'
+                                beforeUpload={(file: RcFile) => {
+                                    return false
+                                }}
+                                multiple
+                                fileList={[]}
+                                onChange={(newFileList: any) => {
+                                    console.log('newFileList-->', newFileList)
+                                    let newFiles: any[] = queryForm.files
+                                    newFiles.push(newFileList.file)
+                                    setQueryForm({ ...queryForm, files: newFiles })
+                                }}
+                                style={{ marginRight: 0 }}
+                            >
+                                普通上传
+                            </Upload>
+                            <Upload
+                                listType="picture-card"
+                                accept='image/gif,image/jpeg,image/png,image/jpg'
+                                beforeUpload={(file: RcFile) => {
+                                    return false
+                                }}
+                                fileList={[]}
+                                onChange={(newFileList: any) => {
+                                    setFile(newFileList.file)
+                                    setVisible(true)
+                                }}
+                            >
+                                裁剪上传
+                            </Upload>
+                        </Space>
+                    </Space>
+
+                </Form.Item>
+            </Form>
+        </Modal>
+
+        {/* 裁剪 */}
+        {visible && <CropperImg visible={visible} onClose={() => setVisible(false)} file={file} onChange={(fileList: any[], file: any) => { 
+            let newFiles: any[] = queryForm.files
+            newFiles.push(file)
+            setQueryForm({ ...queryForm, files: newFiles }); 
+            setVisible(false) 
+        }} />}
+    </div>
+})
+export default React.memo(ImgsModal)

+ 6 - 1
src/components/FileBoxAD/index.tsx

@@ -8,6 +8,7 @@ import ImgModal from "./components/imgModal"
 import TreeBox from "./components/tree"
 import SortModal from "./components/fileModal/sortModal"
 import { EyeOutlined } from "@ant-design/icons"
+import ImgsModal from "./components/imgsModal"
 
 interface News {
     id: number,
@@ -53,7 +54,7 @@ function FlieBox(props: Props) {
 
     const { isAll = true, height, noFile = false, setPage, isBack = false } = props
     const { state, set, dels, list, get, onFile, allFile, delPupOn, delPupOff, changeClickFile, editFile, fileClick, treeClick, pathClick, getList, edit_media_folder, get_folder_tree } = useModel(isAll ? 'useLaunchAdq.useBdMedia' : 'useLaunchAdq.useBdMediaPup')
-    const { fileVisible, belongUser, selectFile, selectItem, delPupId, xy, rightClickPup, path, publicPath, parentId, imgVisrible, mediaType, sortVisible } = state
+    const { fileVisible, belongUser, selectFile, selectItem, delPupId, xy, rightClickPup, path, publicPath, parentId, imgVisrible, imgsVisrible, mediaType, sortVisible } = state
     const { copy } = useCopy()
     const fileImg = require('../../../public/file.png')
     const [moveId, setMoveId] = useState<any>('')//移动的素材ID
@@ -102,6 +103,9 @@ function FlieBox(props: Props) {
             {
                 mediaType === 'PAGE' ? isAll ? <li onClick={() => { setPage && setPage(0) }}>新建素材</li> : <li>此处无法新建操作</li> : <li onClick={() => { set({ imgVisrible: true }) }}>新建素材</li>
             }
+            {
+                mediaType === 'IMG' && <li onClick={() => { set({ imgsVisrible: true }) }}>批量新建素材</li>
+            }
             {
                 isAll && <li onClick={dels} style={{ color: 'red' }}>删除选中文件</li>
             }
@@ -339,6 +343,7 @@ function FlieBox(props: Props) {
                 {sortVisible && <SortModal isAll={isAll} />}
                 {/* 新建非图文 */}
                 {imgVisrible && <ImgModal isAll={isAll} />}
+                {imgsVisrible && <ImgsModal isAll={isAll} />}
             </div>
             {
                 listData?.records?.length > 0 && <div className={style.pagination}>

+ 114 - 10
src/models/useLaunchAdq/useBdMedia.ts

@@ -1,6 +1,6 @@
 import getMD5 from '@/components/MD5';
 import { useAjax } from '@/Hook/useAjax';
-import { bdSysMediaList, bdSysMediaAdd, delMedia, bdSysMediaEdit, getFileUrl, getMedia, configSortApi, getFolderTree, editMediaFolder } from '@/services/launchAdq/material';
+import { bdSysMediaList, bdSysMediaAdd, delMedia, bdSysMediaEdit, getFileUrl, getMedia, configSortApi, getFolderTree, editMediaFolder, bdSysMediaAddsApi } from '@/services/launchAdq/material';
 import { blobToBase64, dataURLtoFile, videoMessage } from '@/utils/compress';
 import { getImgSize } from '@/utils/utils';
 import { message } from 'antd';
@@ -11,6 +11,7 @@ import { request } from 'umi';
 type State = {
     fileVisible?: boolean,//文件夹弹窗
     imgVisrible?: boolean,//img,voice,video弹窗
+    imgsVisrible?: boolean,//img,voice,video弹窗
     newsVisrible?: boolean,//news弹窗
     knewsVisrible?: boolean,//客服图文弹窗
     fileName?: string,//文件夹名称
@@ -78,6 +79,7 @@ const initData: State = {
     publicPath: [{ title: '公共本地', number: '0' }],
     path: [{ title: '个人本地', number: '0' }],
     imgVisrible: false,
+    imgsVisrible: false,
     newsVisrible: false,
     sortVisible: false,
     sort: 0,
@@ -88,6 +90,7 @@ function useBdMediaPup() {
     const { fileName, sort, belongUser, mediaType, parentId, selectFile, delPupId, rightClickPup, actionItem, path, publicPath, size, videoTitle, videoDescription } = state
     const list = useAjax((params) => bdSysMediaList(params))
     const add = useAjax((params) => bdSysMediaAdd(params), { msgNmae: '新增' })
+    const adds = useAjax((params) => bdSysMediaAddsApi(params), { msgNmae: '新增' })
     const del = useAjax((params) => delMedia(params), { msgNmae: '删除' })
     const edit = useAjax((params) => bdSysMediaEdit(params), { msgNmae: '编辑' })
     const configSort = useAjax((params) => configSortApi(params), { msgNmae: '排序' })
@@ -141,15 +144,15 @@ function useBdMediaPup() {
 
                 if (mediaType === 'IMG') {
                     if (file?.size > fileSize) { // 大于300kb进入压缩
-                        let bole = await compressAccurately(file, 250)
-                        if (bole?.size > 300000) {
-                            bole = await compressAccurately(file, 200)
+                        let bole = await compressAccurately(file, fileSize / 1024 - 50)
+                        if (bole?.size > fileSize) {
+                            bole = await compressAccurately(file, fileSize / 1024 - 100)
                         }
-                        if (bole?.size > 300000) {
-                            bole = await compressAccurately(file, 150)
+                        if (bole?.size > fileSize) {
+                            bole = await compressAccurately(file, fileSize / 1024 - 150)
                         }
-                        if (bole?.size > 300000) {
-                            bole = await compressAccurately(file, 100)
+                        if (bole?.size > fileSize) {
+                            bole = await compressAccurately(file, fileSize / 1024 - 200)
                         }
                         let newFile = await blobToBase64(bole)
                         message.warning({
@@ -182,7 +185,6 @@ function useBdMediaPup() {
                 /**修改文件名以用户设置的文件title命名*/
                 let newFile = new File([file], data?.title ? data?.title + '.' + file?.name?.split('.')[1] : file?.name, { type: file?.type })
                 let formData = new FormData();
-
                 /**向阿里云请求上传地址*/
                 fileUrl.run({ type: newFile.type, fileType: mediaType === 'VIDEO' ? 'video' : 'image' }).then(res1 => {
                     Object.keys(res1).forEach((key: string) => {
@@ -219,6 +221,107 @@ function useBdMediaPup() {
             }
         }
     }
+
+    /** 批量新增图片 视频 */
+    const addFiles = async (data: any) => {
+        if (data) {//存在代表素材
+            if (!data) {
+                return
+            }
+            let { files, ...value } = data
+            let params = files?.map(async (item: any, index: number) => {
+                let file = item
+                let fileSize = size || 0
+                if (mediaType === 'IMG') {
+                    fileSize = value?.fileSize ? value?.fileSize * 1024 : 307200
+                } else {
+                    fileSize = 104857600
+                }
+
+                if (mediaType === 'IMG') {
+                    let bad = 50
+                    let size = fileSize / 1024
+                    if (size > 10 && size <= 50) {
+                        bad = 5
+                    } else if (size > 50 && size <= 100) {
+                        bad = 10
+                    } else if (size > 100 && size <= 300) {
+                        bad = 20
+                    } else {
+                        bad = 50
+                    }
+                    if (file?.size > fileSize) { // 大于300kb进入压缩
+                        let bole = await compressAccurately(file, fileSize / 1024 - bad)
+                        if (bole?.size > fileSize) {
+                            bole = await compressAccurately(file, fileSize / 1024 - bad * 2)
+                        }
+                        if (bole?.size > fileSize) {
+                            bole = await compressAccurately(file, fileSize / 1024 - bad * 3)
+                        }
+                        if (bole?.size > fileSize) {
+                            bole = await compressAccurately(file, fileSize / 1024 - bad * 4)
+                        }
+                        let newFile = await blobToBase64(bole)
+                        message.warning({
+                            content: `选择的图片大于${fileSize / 1024}KB,图片已压缩`,
+                            duration: 3
+                        })
+                        file = await dataURLtoFile(newFile, file?.name)
+                    }
+                } else if (mediaType === 'VIDEO') {
+                    if (file?.size > fileSize) { // 大于100mb进入压缩
+                        message.error({
+                            content: `选择的视频大于${fileSize / 1024 / 1024}MB,请重新选择提交`,
+                            duration: 3
+                        })
+                        return
+                    }
+                }
+                let width = 0
+                let height = 0
+                if (mediaType === 'IMG') {
+                    let imgData = await getImgSize(file)
+                    width = imgData.width
+                    height = imgData.height
+                } else if (mediaType === "VIDEO") {
+                    let videoInfo: any = await videoMessage([file])
+                    width = videoInfo[0].width
+                    height = videoInfo[0].height
+                }
+                /**修改文件名以用户设置的文件title命名*/
+                let newFile = new File([file], data?.title ? data?.title + index + 1 + '.' + file?.name?.split('.')[1] : file?.name, { type: file?.type })
+                let formData = new FormData();
+                set({ upLoadLoading: true })
+                let res = await getFileUrl({ type: newFile.type, fileType: mediaType === 'VIDEO' ? 'video' : 'image' }).catch(() => set({ upLoadLoading: false }))
+                let res1 = res.data
+                Object.keys(res1).forEach((key: string) => {
+                    if (key !== 'url') {
+                        formData.append(key, res1[key])
+                    }
+                })
+                formData.append('file', newFile)
+                /**向阿里云返回的上传地址上传文件*/
+                let data1: { code: number, data: { url: string } } = await request(res1?.ossUrl, { method: 'post', body: formData }).catch(() => set({ upLoadLoading: false }))
+                message.success('上传成功')
+                let fileMd5 = await getMD5(newFile)
+                let obj = { title: data.title ? data.title + '_' + (index + 1).toString() : data.title, folder: false, parentId, width, height, fileMd5, url: data1?.data?.url, sort: data?.sort, fileSize: newFile?.size, fileMime: newFile.type }
+                if (mediaType === 'VIDEO') {
+                    obj['videoTitle'] = data?.videoTitle || data?.title
+                    obj['videoDescription'] = data?.videoDescription
+                }
+                return { ...obj }
+            })
+
+            Promise.all(params).then(res => {
+                adds.run({ belongUser: belongUser === '0' ? false : true, data: res }).then(response => {
+                    list.refresh()
+                    offEditFile()//关闭弹窗并清空相关数据
+                    set({ upLoadLoading: false })
+                }).catch(() => set({ upLoadLoading: false }))
+            })
+        }
+    }
+
     /**编辑非图文素材名称*/
     const nameOk = useCallback((selectWx?: any) => {
         if (fileName && actionItem) {
@@ -378,7 +481,7 @@ function useBdMediaPup() {
     }, [rightClickPup])
     /**取消编辑后清空选中存放的数据并关闭弹窗*/
     const offEditFile = useCallback(() => {
-        set({ fileVisible: false, imgVisrible: false, sortVisible: false, actionItem: '', fileName: '', selectFile: selectFile?.filter(id => id !== actionItem?.id), sort: 0 })
+        set({ fileVisible: false, imgVisrible: false, imgsVisrible: false, sortVisible: false, actionItem: '', fileName: '', selectFile: selectFile?.filter(id => id !== actionItem?.id), sort: 0 })
     }, [selectFile, actionItem])
     /**全选反选文件*/
     const allFile = useCallback(() => {
@@ -407,6 +510,7 @@ function useBdMediaPup() {
         fileClick,
         treeClick,
         pathClick,
+        addFiles,
         configSort,
         fileUrl,
         list,

+ 108 - 1
src/models/useLaunchAdq/useBdMediaPup.ts

@@ -10,6 +10,7 @@ import {
   configSortApi,
   getFolderTree,
   editMediaFolder,
+  bdSysMediaAddsApi,
 } from '@/services/launchAdq/material';
 import { blobToBase64, dataURLtoFile, videoMessage } from '@/utils/compress';
 import { getImgSize } from '@/utils/utils';
@@ -21,6 +22,7 @@ import { request } from 'umi';
 type State = {
   fileVisible?: boolean; //文件夹弹窗
   imgVisrible?: boolean; //img,voice,video弹窗
+  imgsVisrible?: boolean,//
   newsVisrible?: boolean; //news弹窗
   knewsVisrible?: boolean; //客服图文弹窗
   fileName?: string; //文件夹名称
@@ -96,6 +98,7 @@ const initData: State = {
   publicPath: [{ title: '公共本地', number: '0' }],
   path: [{ title: '个人本地', number: '0' }],
   imgVisrible: false,
+  imgsVisrible: false,
   newsVisrible: false,
   sortVisible: false,
   sort: 0,
@@ -137,6 +140,7 @@ function useBdMediaPup() {
   const del = useAjax((params) => delMedia(params), { msgNmae: '删除' });
   const edit = useAjax((params) => bdSysMediaEdit(params), { msgNmae: '编辑' });
   const configSort = useAjax((params) => configSortApi(params), { msgNmae: '排序' });
+  const adds = useAjax((params) => bdSysMediaAddsApi(params), { msgNmae: '新增' })
   const get = useAjax((params) => getMedia(params)); //获取图文详情
   const get_folder_tree = useAjax((params: any) => getFolderTree(params));
   const edit_media_folder = useAjax((params: any) => editMediaFolder(params));
@@ -302,6 +306,107 @@ function useBdMediaPup() {
       }
     }
   };
+
+  /** 批量新增图片 视频 */
+  const addFiles = async (data: any) => {
+    if (data) {//存在代表素材
+      if (!data) {
+        return
+      }
+      let { files, ...value } = data
+      let params = files?.map(async (item: any, index: number) => {
+        let file = item
+        let fileSize = size || 0
+        if (mediaType === 'IMG') {
+          fileSize = value?.fileSize ? value?.fileSize * 1024 : 307200
+        } else {
+          fileSize = 104857600
+        }
+
+        if (mediaType === 'IMG') {
+          let bad = 50
+          let size = fileSize / 1024
+          if (size > 10 && size <= 50) {
+            bad = 5
+          } else if (size > 50 && size <= 100) {
+            bad = 10
+          } else if (size > 100 && size <= 300) {
+            bad = 20
+          } else {
+            bad = 50
+          }
+          if (file?.size > fileSize) { // 大于300kb进入压缩
+            let bole = await compressAccurately(file, fileSize / 1024 - bad)
+            if (bole?.size > fileSize) {
+              bole = await compressAccurately(file, fileSize / 1024 - bad * 2)
+            }
+            if (bole?.size > fileSize) {
+              bole = await compressAccurately(file, fileSize / 1024 - bad * 3)
+            }
+            if (bole?.size > fileSize) {
+              bole = await compressAccurately(file, fileSize / 1024 - bad * 4)
+            }
+            let newFile = await blobToBase64(bole)
+            message.warning({
+              content: `选择的图片大于${fileSize / 1024}KB,图片已压缩`,
+              duration: 3
+            })
+            file = await dataURLtoFile(newFile, file?.name)
+          }
+        } else if (mediaType === 'VIDEO') {
+          if (file?.size > fileSize) { // 大于100mb进入压缩
+            message.error({
+              content: `选择的视频大于${fileSize / 1024 / 1024}MB,请重新选择提交`,
+              duration: 3
+            })
+            return
+          }
+        }
+        let width = 0
+        let height = 0
+        if (mediaType === 'IMG') {
+          let imgData = await getImgSize(file)
+          width = imgData.width
+          height = imgData.height
+        } else if (mediaType === "VIDEO") {
+          let videoInfo: any = await videoMessage([file])
+          width = videoInfo[0].width
+          height = videoInfo[0].height
+        }
+        /**修改文件名以用户设置的文件title命名*/
+        let newFile = new File([file], data?.title ? data?.title + index + 1 + '.' + file?.name?.split('.')[1] : file?.name, { type: file?.type })
+        let formData = new FormData();
+        set({ upLoadLoading: true })
+        let res = await getFileUrl({ type: newFile.type, fileType: mediaType === 'VIDEO' ? 'video' : 'image' }).catch(() => set({ upLoadLoading: false }))
+        let res1 = res.data
+        Object.keys(res1).forEach((key: string) => {
+          if (key !== 'url') {
+            formData.append(key, res1[key])
+          }
+        })
+        formData.append('file', newFile)
+        /**向阿里云返回的上传地址上传文件*/
+        let data1: { code: number, data: { url: string } } = await request(res1?.ossUrl, { method: 'post', body: formData }).catch(() => set({ upLoadLoading: false }))
+        message.success('上传成功')
+        let fileMd5 = await getMD5(newFile)
+        let obj = { title: data.title + (index + 1).toString(), folder: false, parentId, width, height, fileMd5, url: data1?.data?.url, sort: data?.sort, fileSize: newFile?.size, fileMime: newFile.type }
+        if (mediaType === 'VIDEO') {
+          obj['videoTitle'] = data?.videoTitle || data?.title
+          obj['videoDescription'] = data?.videoDescription
+        }
+        return { ...obj }
+      })
+
+      Promise.all(params).then(res => {
+        adds.run({ belongUser: belongUser === '0' ? false : true, data: res }).then(response => {
+          list.refresh()
+          offEditFile()//关闭弹窗并清空相关数据
+          set({ upLoadLoading: false })
+        }).catch(() => set({ upLoadLoading: false }))
+      })
+    }
+  }
+
   /**编辑非图文素材名称*/
   const nameOk = useCallback(
     (selectWx: any) => {
@@ -377,7 +482,7 @@ function useBdMediaPup() {
         setIsOk(true);
       });
     },
-    [list, mediaType, belongUser, parentId, cloudSize, maxSize,adcreativeTemplateId,promotedObjectType,promotedObjectId,pageType,canvasType,siteSet,sourceType,marketingScene],
+    [list, mediaType, belongUser, parentId, cloudSize, maxSize, adcreativeTemplateId, promotedObjectType, promotedObjectId, pageType, canvasType, siteSet, sourceType, marketingScene],
   );
   /**选中文件 single 开启可单选为了在右键删除选择时只选一个*/
   const onFile = useCallback(
@@ -549,6 +654,7 @@ function useBdMediaPup() {
     set({
       fileVisible: false,
       imgVisrible: false,
+      imgsVisrible: false,
       sortVisible: false,
       actionItem: '',
       fileName: '',
@@ -583,6 +689,7 @@ function useBdMediaPup() {
     fileClick,
     treeClick,
     pathClick,
+    addFiles,
     configSort,
     list,
     add,

+ 11 - 3
src/services/launchAdq/material.ts

@@ -106,13 +106,13 @@ export async function bdSysMediaList(params: { parentId?: any, belongUser: boole
       data: param,
     });
   } else {
-    console.log('param===>',param)
+    console.log('param===>', param)
     return request(api + `/adq/sysWechatComponentPage/list/${belongUser}`, {
       method: 'POST',
       data: param,
     });
   }
-  
+
 }
 /**修改本地素材 */
 export async function bdSysMediaEdit(params: { belongUser: boolean, sysMediaId: number, mediaType: "IMG" | "VIDEO" | 'PAGE' }) {
@@ -153,8 +153,16 @@ export async function bdSysMediaAdd(params: { belongUser: boolean, parentId: num
       data: param,
     });
   }
-
 }
+/**批量新增本地素材 */
+export async function bdSysMediaAddsApi(params: { belongUser: boolean, data: any }) {
+  const { belongUser, ...param } = params
+  return request(api + `/adq//sysMediaImage/addBatch/${belongUser}`, {
+    method: 'POST',
+    data: param.data
+  });
+}
+
 /**删除本地素材 */
 export async function delMedia(params: { sysMediaId: any, mediaType: 'IMG' | 'VIDEO' | 'PAGE' }) {
   if (params.mediaType === 'IMG') {