/* Copyright (C) 2025 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ import React from 'react'; import { Tabs, TabPane, Tag, Button, Dropdown, Modal } from '@douyinfe/semi-ui'; import { IconEdit, IconDelete } from '@douyinfe/semi-icons'; import { getLobeHubIcon, showError, showSuccess } from '../../../helpers'; import { API } from '../../../helpers'; const ModelsTabs = ({ activeVendorKey, setActiveVendorKey, vendorCounts, vendors, loadModels, activePage, pageSize, setActivePage, setShowAddVendor, setShowEditVendor, setEditingVendor, loadVendors, t, }) => { const handleTabChange = (key) => { setActiveVendorKey(key); setActivePage(1); loadModels(1, pageSize, key); }; const handleEditVendor = (vendor, e) => { e.stopPropagation(); // 阻止事件冒泡,避免触发tab切换 setEditingVendor(vendor); setShowEditVendor(true); }; const handleDeleteVendor = async (vendor, e) => { e.stopPropagation(); // 阻止事件冒泡,避免触发tab切换 try { const res = await API.delete(`/api/vendors/${vendor.id}`); if (res.data.success) { showSuccess(t('供应商删除成功')); // 如果删除的是当前选中的供应商,切换到"全部" if (activeVendorKey === String(vendor.id)) { setActiveVendorKey('all'); loadModels(1, pageSize, 'all'); } else { loadModels(activePage, pageSize, activeVendorKey); } loadVendors(); // 重新加载供应商列表 } else { showError(res.data.message || t('删除失败')); } } catch (error) { showError(error.response?.data?.message || t('删除失败')); } }; return ( setShowAddVendor(true)} > {t('新增供应商')} } > {t('全部')} {vendorCounts['all'] || 0} } /> {vendors.map((vendor) => { const key = String(vendor.id); const count = vendorCounts[vendor.id] || 0; return ( {getLobeHubIcon(vendor.icon || 'Layers', 14)} {vendor.name} {count} } onClick={(e) => handleEditVendor(vendor, e)} > {t('编辑')} } onClick={(e) => { e.stopPropagation(); Modal.confirm({ title: t('确认删除'), content: t( '确定要删除供应商 "{{name}}" 吗?此操作不可撤销。', { name: vendor.name }, ), onOk: () => handleDeleteVendor(vendor, e), okText: t('删除'), cancelText: t('取消'), type: 'warning', okType: 'danger', }); }} > {t('删除')} } onClickOutSide={(e) => e.stopPropagation()} > } /> ); })} ); }; export default ModelsTabs;