import React, { useState, useRef, useEffect, type ReactNode } from 'react'; import { Button, Row, Col, App, List, Space } from 'antd'; import { useTranslation } from 'react-i18next'; import dayjs from 'dayjs'; import type { ToolItem, Query, CustomToolModalRef } from './types'; import CustomToolModal from './components/CustomToolModal'; import SearchInput from '@/components/SearchInput' import BodyWrapper from '@/components/Empty/BodyWrapper' import RbCard from '@/components/RbCard/Card' import { getTools, deleteTool } from '@/api/tools' const Custom: React.FC<{ getStatusTag: (status: string) => ReactNode }> = ({ getStatusTag }) => { const { t } = useTranslation(); const { message, modal } = App.useApp() const [loading, setLoading] = useState(false); const [data, setData] = useState([]); const [query, setQuery] = useState({ name: undefined, tool_type: 'custom' }); const customToolModalRef = useRef(null); useEffect(() => { getData() }, [query.name]) const getData = () => { setLoading(true) getTools(query) .then((res) => { setData(res as ToolItem[]) }) .finally(() => { setLoading(false) }) } const handleSearch = (value?: string) => { setQuery(prev => ({ ...prev, name: value })) } // 打开添加服务弹窗 const handleEdit = (data?: ToolItem) => { customToolModalRef.current?.handleOpen(data); }; // 删除服务 const handleDeleteService = (item: ToolItem) => { modal.confirm({ title: t('common.confirmDeleteDesc', { name: item.name }), okText: t('common.delete'), cancelText: t('common.cancel'), okType: 'danger', onOk: () => { deleteTool(item.id).then(() => { message.success(t('common.deleteSuccess')); getData() }) } }) }; return (
( // {item.name[0]} //
// } title={
{item.name}
{/*
xx个工具
*/}
} extra={getStatusTag(item.status)} >
{['auth_type', 'tags', 'created_at'].map(key => (
{t(`tool.${key}`)}
{key === 'created_at' && item[key] ? dayjs(item[key]).format('YYYY-MM-DD HH:mm:ss') : key === 'auth_type' ? t(`tool.${(item.config_data as any)?.[key]}`) : key === 'tags' ? (item[key] as string[]).join('、') : (item.config_data as any)?.[key] || '-' }
))}
handleEdit(item)} >
handleDeleteService(item)} >
)} className="rb:h-[calc(100vh-178px)] rb:overflow-y-auto rb:overflow-x-hidden" /> {/* 添加服务弹窗组件 */} ); }; export default Custom;