| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| import React, { useMemo } from 'react';
|
| import { Empty } from '@douyinfe/semi-ui';
|
| import CardTable from '../../common/ui/CardTable';
|
| import {
|
| IllustrationNoResult,
|
| IllustrationNoResultDark,
|
| } from '@douyinfe/semi-illustrations';
|
| import { getChannelsColumns } from './ChannelsColumnDefs';
|
|
|
| const ChannelsTable = (channelsData) => {
|
| const {
|
| channels,
|
| loading,
|
| searching,
|
| activePage,
|
| pageSize,
|
| channelCount,
|
| enableBatchDelete,
|
| compactMode,
|
| visibleColumns,
|
| setSelectedChannels,
|
| handlePageChange,
|
| handlePageSizeChange,
|
| handleRow,
|
| t,
|
| COLUMN_KEYS,
|
|
|
| updateChannelBalance,
|
| manageChannel,
|
| manageTag,
|
| submitTagEdit,
|
| testChannel,
|
| setCurrentTestChannel,
|
| setShowModelTestModal,
|
| setEditingChannel,
|
| setShowEdit,
|
| setShowEditTag,
|
| setEditingTag,
|
| copySelectedChannel,
|
| refresh,
|
| checkOllamaVersion,
|
|
|
| setShowMultiKeyManageModal,
|
| setCurrentMultiKeyChannel,
|
| } = channelsData;
|
|
|
|
|
| const allColumns = useMemo(() => {
|
| return getChannelsColumns({
|
| t,
|
| COLUMN_KEYS,
|
| updateChannelBalance,
|
| manageChannel,
|
| manageTag,
|
| submitTagEdit,
|
| testChannel,
|
| setCurrentTestChannel,
|
| setShowModelTestModal,
|
| setEditingChannel,
|
| setShowEdit,
|
| setShowEditTag,
|
| setEditingTag,
|
| copySelectedChannel,
|
| refresh,
|
| activePage,
|
| channels,
|
| checkOllamaVersion,
|
| setShowMultiKeyManageModal,
|
| setCurrentMultiKeyChannel,
|
| });
|
| }, [
|
| t,
|
| COLUMN_KEYS,
|
| updateChannelBalance,
|
| manageChannel,
|
| manageTag,
|
| submitTagEdit,
|
| testChannel,
|
| setCurrentTestChannel,
|
| setShowModelTestModal,
|
| setEditingChannel,
|
| setShowEdit,
|
| setShowEditTag,
|
| setEditingTag,
|
| copySelectedChannel,
|
| refresh,
|
| activePage,
|
| channels,
|
| checkOllamaVersion,
|
| setShowMultiKeyManageModal,
|
| setCurrentMultiKeyChannel,
|
| ]);
|
|
|
|
|
| const getVisibleColumns = () => {
|
| return allColumns.filter((column) => visibleColumns[column.key]);
|
| };
|
|
|
| const visibleColumnsList = useMemo(() => {
|
| return getVisibleColumns();
|
| }, [visibleColumns, allColumns]);
|
|
|
| const tableColumns = useMemo(() => {
|
| return compactMode
|
| ? visibleColumnsList.map(({ fixed, ...rest }) => rest)
|
| : visibleColumnsList;
|
| }, [compactMode, visibleColumnsList]);
|
|
|
| return (
|
| <CardTable
|
| columns={tableColumns}
|
| dataSource={channels}
|
| scroll={compactMode ? undefined : { x: 'max-content' }}
|
| pagination={{
|
| currentPage: activePage,
|
| pageSize: pageSize,
|
| total: channelCount,
|
| pageSizeOpts: [10, 20, 50, 100],
|
| showSizeChanger: true,
|
| onPageSizeChange: handlePageSizeChange,
|
| onPageChange: handlePageChange,
|
| }}
|
| hidePagination={true}
|
| expandAllRows={false}
|
| onRow={handleRow}
|
| rowSelection={
|
| enableBatchDelete
|
| ? {
|
| onChange: (selectedRowKeys, selectedRows) => {
|
| setSelectedChannels(selectedRows);
|
| },
|
| }
|
| : null
|
| }
|
| empty={
|
| <Empty
|
| image={<IllustrationNoResult style={{ width: 150, height: 150 }} />}
|
| darkModeImage={
|
| <IllustrationNoResultDark style={{ width: 150, height: 150 }} />
|
| }
|
| description={t('搜索无结果')}
|
| style={{ padding: 30 }}
|
| />
|
| }
|
| className='rounded-xl overflow-hidden'
|
| size='middle'
|
| loading={loading || searching}
|
| />
|
| );
|
| };
|
|
|
| export default ChannelsTable;
|
|
|