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