import React, { useEffect, useRef, useState } from "react" import style from './index.less' import Folder from "./folder"; import Material from "./material"; import { Card, message, Modal } from "antd"; import '../../tencentAdPutIn/index.less' import { DataNode, EventDataNode } from "antd/lib/tree"; import { delFolderApi, getFolderListApi } from "@/services/adqV3/cloudNew"; import { useAjax } from "@/Hook/useAjax"; import ManageFolder from "./manageFolder"; import { ExclamationCircleOutlined, FolderOpenOutlined, FolderOutlined } from "@ant-design/icons"; import { updateTreeData } from "./const"; import Search from "./search"; export const DispatchCloudNew = React.createContext(null); /** * 新版素材库 * @returns */ const CloudNew: React.FC = () => { /**********************************/ const refMaterial = useRef(null); const [treeData, setTreeData] = useState([]); const [selectedKeys, setSelectedKeys] = useState([]); const [queryFormFolder, setQueryFormFolder] = useState({}) const [folderVisible, setFolderVisible] = useState(false) const [folderLoading, setFolderLoading] = useState(false) const [breadcrumdData, setBreadcrumdData] = useState([{ label: '全部素材', key: 0, currentKey: '0' }]) const [loadedKeys, setLoadedKeys] = useState([]) // 已经加载了的节点 const [initialValuesFolder, setInitialValuesFolder] = useState({}) const [expandedKeys, setExpandedKeys] = useState([]); // 目录树打开控制 const [folderCreateBy, setFolderCreateBy] = useState() // 获取最上层文件夹创建人 const [batchFolderVisible, setBatchFolderVisible] = useState(false) // 批量操作文件夹控制 const [handleType, setHandleType] = useState<'folder' | 'file'>('file') // 操作类型 const [materialParams, setMaterialParams] = useState({ pageNum: 1, pageSize: 30 }) const getFolderList = useAjax((params) => getFolderListApi(params)) const delFolderAjax = useAjax((params) => delFolderApi(params)) /**********************************/ useEffect(() => { handleGetFolder() }, [queryFormFolder?.folderName]) useEffect(() => { if (breadcrumdData.length > 1) { let folderId = breadcrumdData[1].key setFolderCreateBy(getFolderList.data.find((item: { id: number; }) => item.id === folderId).createBy) } else { setFolderCreateBy(undefined) } }, [breadcrumdData, getFolderList.data]) // 获取顶级文件夹列表 const handleGetFolder = () => { setFolderLoading(() => true) setLoadedKeys(() => []) getFolderList.run({ folderName: queryFormFolder?.folderName }).then(res => { setFolderLoading(() => false) setTreeData(() => res?.map((item: { folderName: any; id: any; }) => ({ title: item.folderName, key: '0-' + item.id, icon: ({ selected }: any) => (selected ? : ), })) || []) }).catch(() => setFolderLoading(false)) } // 下级目录 const handleUpdateFolder = (parentIdStr: string) => { const parentIdArr = parentIdStr.split('-') const parentIdArrLength = parentIdArr.length const parentId = Number(parentIdArr[parentIdArrLength - 1]) return getFolderListApi({ parentId }).then(res => { setLoadedKeys(loadedkeys => [...loadedkeys, parentIdStr].filter(item => !item.includes(parentIdStr + '-'))) setExpandedKeys(expandedKeys => [...expandedKeys, parentIdStr]) setTreeData(origin => updateTreeData(origin, parentIdStr, res?.data?.map((item: { folderName: any; id: any; }) => ({ title: item.folderName, key: parentIdStr + '-' + item.id, icon: ({ selected }: any) => (selected ? : ) })) || []), ); }) } // 查找所有菜单列表(m面包屑) const findParentKeys = (key: string, tree: DataNode[]) => { let newBreadcrumdData: CLOUDNEW.BreadcrumdData[] = [{ label: '全部素材', key: 0, currentKey: '0' }] let keys = key.split('-') let treeData: DataNode[] = JSON.parse(JSON.stringify(tree)) let currentKey: string = '0' keys.forEach((item, index) => { if (index !== 0) { currentKey = currentKey + '-' + item let treeD = treeData.find(item => item.key === currentKey) if (treeD) { if (treeD?.children) { treeData = treeD.children } newBreadcrumdData.push({ label: treeD?.title as string, key: Number(item), currentKey }) } } }) setBreadcrumdData(newBreadcrumdData) }; // 删除文件夹 const delFolder = (id: number, name: string) => { Modal.confirm({ title: {`删除文件夹“${name}”`}, icon: , content: '是否确定删除该文件夹', okText: '确认', cancelText: '取消', className: 'modalResetCss', onOk: () => { return new Promise((resolve: (value: unknown) => void) => { delFolderAjax.run(id).then(res => { if (res) { message.success('删除成功'); (refMaterial.current as any).folderRefresh() if (selectedKeys[0] === '0' || !selectedKeys[0]) { setTreeData(data => data.filter(item => item.key !== ('0-' + id))) } else { handleUpdateFolder(selectedKeys[0] as string) } resolve('') } }) }) } }); } return <>
{/* 搜索 */} (refMaterial.current as any)?.search(value)} />
{/* 文件夹 */} ) => { return new Promise(async (resolve) => { console.log('Trigger Select', treeNode); await handleUpdateFolder(treeNode.key as string) resolve() }) }} /> {/* 素材列表 */} { setFolderVisible(true) }} onUpdateFolder={(data) => { setInitialValuesFolder(data) setFolderVisible(true) }} onDelFolder={delFolder} ref={refMaterial} />
{/* 文件夹新增修改 */} {folderVisible && { setFolderVisible(false) }} onChange={(newData) => { setFolderVisible(false) if (initialValuesFolder?.id) { (refMaterial.current as any).folderRefresh() if (selectedKeys?.[0]) { handleUpdateFolder(selectedKeys[0] as string) } else { setTreeData(data => data.map(item => { return item.key === ('0-' + newData.id) ? { ...item, title: newData.folderName } : item })) } setInitialValuesFolder(undefined) } else { (refMaterial.current as any).folderRefresh() if (selectedKeys?.[0]) { handleUpdateFolder(selectedKeys[0] as string) } else { // handleGetFolder() setTreeData(data => [...data, { title: newData.folderName, key: '0-' + newData.id, icon: ({ selected }: any) => (selected ? : ) }]) } } }} />} } export default CloudNew