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