|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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(); |
|
|
setEditingVendor(vendor); |
|
|
setShowEditVendor(true); |
|
|
}; |
|
|
|
|
|
const handleDeleteVendor = async (vendor, e) => { |
|
|
e.stopPropagation(); |
|
|
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 ( |
|
|
<Tabs |
|
|
activeKey={activeVendorKey} |
|
|
type='card' |
|
|
collapsible |
|
|
onChange={handleTabChange} |
|
|
className='mb-2' |
|
|
tabBarExtraContent={ |
|
|
<Button |
|
|
type='primary' |
|
|
size='small' |
|
|
onClick={() => setShowAddVendor(true)} |
|
|
> |
|
|
{t('新增供应商')} |
|
|
</Button> |
|
|
} |
|
|
> |
|
|
<TabPane |
|
|
itemKey='all' |
|
|
tab={ |
|
|
<span className='flex items-center gap-2'> |
|
|
{t('全部')} |
|
|
<Tag |
|
|
color={activeVendorKey === 'all' ? 'red' : 'grey'} |
|
|
shape='circle' |
|
|
> |
|
|
{vendorCounts['all'] || 0} |
|
|
</Tag> |
|
|
</span> |
|
|
} |
|
|
/> |
|
|
|
|
|
{vendors.map((vendor) => { |
|
|
const key = String(vendor.id); |
|
|
const count = vendorCounts[vendor.id] || 0; |
|
|
return ( |
|
|
<TabPane |
|
|
key={key} |
|
|
itemKey={key} |
|
|
tab={ |
|
|
<span className='flex items-center gap-2'> |
|
|
{getLobeHubIcon(vendor.icon || 'Layers', 14)} |
|
|
{vendor.name} |
|
|
<Tag |
|
|
color={activeVendorKey === key ? 'red' : 'grey'} |
|
|
shape='circle' |
|
|
> |
|
|
{count} |
|
|
</Tag> |
|
|
<Dropdown |
|
|
trigger='click' |
|
|
position='bottomRight' |
|
|
render={ |
|
|
<Dropdown.Menu> |
|
|
<Dropdown.Item |
|
|
icon={<IconEdit />} |
|
|
onClick={(e) => handleEditVendor(vendor, e)} |
|
|
> |
|
|
{t('编辑')} |
|
|
</Dropdown.Item> |
|
|
<Dropdown.Item |
|
|
type='danger' |
|
|
icon={<IconDelete />} |
|
|
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('删除')} |
|
|
</Dropdown.Item> |
|
|
</Dropdown.Menu> |
|
|
} |
|
|
onClickOutSide={(e) => e.stopPropagation()} |
|
|
> |
|
|
<Button |
|
|
size='small' |
|
|
type='tertiary' |
|
|
theme='outline' |
|
|
onClick={(e) => e.stopPropagation()} |
|
|
> |
|
|
{t('操作')} |
|
|
</Button> |
|
|
</Dropdown> |
|
|
</span> |
|
|
} |
|
|
/> |
|
|
); |
|
|
})} |
|
|
</Tabs> |
|
|
); |
|
|
}; |
|
|
|
|
|
export default ModelsTabs; |
|
|
|