import MyEmpty from '@/new-components/common/MyEmpty'; import { IResource } from '@/types/app'; import { DeleteOutlined, PlusOutlined } from '@ant-design/icons'; import { Button, Popconfirm, Select, Typography } from 'antd'; import classNames from 'classnames'; import { concat } from 'lodash'; import React, { useEffect, useRef, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { v4 as uuid } from 'uuid'; import { resourceTypeIcon } from '../../config'; import ResourceContent from './ResourceContent'; interface ResourceTabProps extends IResource { uid?: string; icon?: string; initVal?: any; name?: string; } const ResourcesCard: React.FC<{ name: string; updateData: (data: any) => void; initValue?: any; resourceTypeOptions: Record[]; }> = ({ name, updateData, resourceTypeOptions, initValue }) => { const { t } = useTranslation(); const resources = useRef(initValue || []); const [curIcon, setCurIcon] = useState<{ uid: string; icon: string }>({ uid: '', icon: '', }); const [resourcesTabs, setResourcesTabs] = useState( initValue?.map((item: any) => { return { ...item, icon: item.type, initVal: item, }; }) || [], ); const [filterResourcesTabs, setFilterResourcesTabs] = useState([...resourcesTabs]); const [activeKey, setActiveKey] = useState(resourcesTabs?.[0]?.uid || ''); const [hoverKey, setHoverKey] = useState(''); // 删除资源 const remove = (e: any, item: any) => { e?.stopPropagation(); const findActiveIndex = resources.current?.findIndex(i => i.uid === activeKey); const filteredResources = resourcesTabs?.filter(i => i.uid !== item.uid); resources.current = resources.current.filter(i => i.uid !== item.uid) || []; updateData([name, resources.current]); setResourcesTabs(filteredResources); if (findActiveIndex === resourcesTabs?.length - 1 && findActiveIndex !== 0) { setTimeout(() => { setActiveKey(filteredResources?.[filteredResources.length - 1]?.uid || ''); }, 0); } setActiveKey(filteredResources?.[findActiveIndex]?.uid || ''); }; // 添加资源 const addSource = () => { const uid = uuid(); resources.current = concat( resources.current, [ { is_dynamic: false, type: resourceTypeOptions?.filter(item => item.value !== 'all')?.[0].value, value: '', uid, name: t('resource') + ` ${resources.current.length + 1}`, }, ].filter(Boolean), ); updateData([name, resources.current]); setResourcesTabs((prev: any) => { return [ ...prev, { icon: resourceTypeOptions?.filter(item => item.value !== 'all')?.[0]?.value || '', uid, initVal: { is_dynamic: false, type: resourceTypeOptions?.filter(item => item.value !== 'all')?.[0].value, value: '', uid, name: t('resource') + ` ${prev.length + 1}`, }, name: t('resource') + ` ${prev.length + 1}`, }, ]; }); setActiveKey(uid); setCurIcon({ uid, icon: resourceTypeOptions?.filter(item => item.value !== 'all')?.[0].value, }); }; useEffect(() => { setFilterResourcesTabs([...resourcesTabs]); }, [resourcesTabs]); // 资源切换图标同步切换 useEffect(() => { setResourcesTabs( resourcesTabs.map(item => { if (curIcon?.uid === item.uid) { return { ...item, icon: curIcon.icon, }; } return item; }), ); // eslint-disable-next-line react-hooks/exhaustive-deps }, [curIcon]); return (