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