| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| 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; |
|
|