diff --git a/src/components/alert-info/block.tsx b/src/components/alert-info/block.tsx index cec53470..e5c15584 100644 --- a/src/components/alert-info/block.tsx +++ b/src/components/alert-info/block.tsx @@ -30,7 +30,7 @@ const useStyles = createStyles(({ token, css }) => { position: relative; padding-left: 32px; text-align: left; - border-radius: ${token.borderRadius}px; + border-radius: ${token.borderRadiusLG}px; margin: 0; border: 1px solid transparent; .ant-typography { diff --git a/src/components/card-wrapper/index.tsx b/src/components/card-wrapper/index.tsx index 99d72401..0b5c1bea 100644 --- a/src/components/card-wrapper/index.tsx +++ b/src/components/card-wrapper/index.tsx @@ -1,7 +1,7 @@ import styled from 'styled-components'; const Wrapper = styled.div` - border-radius: var(--border-radius-small); + border-radius: var(--border-radius-lg); background-color: var(--ant-color-bg-container); box-shadow: none; padding: 10px 16px; diff --git a/src/components/icon-font/index.tsx b/src/components/icon-font/index.tsx index e6fb0e10..2029ef5b 100644 --- a/src/components/icon-font/index.tsx +++ b/src/components/icon-font/index.tsx @@ -2,7 +2,7 @@ import { createFromIconfontCN } from '@ant-design/icons'; // import './iconfont/iconfont.js'; const IconFont = createFromIconfontCN({ - scriptUrl: '//at.alicdn.com/t/c/font_4613488_110n9b7vcjv.js' + scriptUrl: '//at.alicdn.com/t/c/font_4613488_jctdntmi5mf.js' }); export default IconFont; diff --git a/src/components/label-selector/wrapper.tsx b/src/components/label-selector/wrapper.tsx index b5688647..7c1c4ec4 100644 --- a/src/components/label-selector/wrapper.tsx +++ b/src/components/label-selector/wrapper.tsx @@ -25,7 +25,7 @@ const Container = styled.div` padding: 14px; padding-top: 34px; border: 1px solid var(--ant-color-border); - border-radius: var(--border-radius-base); + border-radius: var(--ant-border-radius-lg); display: flex; width: 100%; flex-direction: column; @@ -71,7 +71,13 @@ const Wrapper: React.FC = ({ {!disabled && ( {button || ( - +
+ +
+ + ); + }; + return ( @@ -126,26 +161,29 @@ const FilterForm: React.FC< onValuesChange={handleOnValuesChange} initialValues={initialValues} form={form} + layout="vertical" + styles={{ + label: { + lineHeight: 1, + height: 'auto', + marginBottom: 8, + fontWeight: 500 + }, + content: { + minHeight: 0 + } + }} > {children} -
- -
- -
-
} onOpenChange={handleOpenChange} styles={{ container: { - padding: 8 + padding: 8, + border: '1px solid var(--ant-color-split)' }, root: { width: width @@ -153,25 +191,45 @@ const FilterForm: React.FC< }} > - - {hasFilters && ( - - )} - {hasFilters && ( - - { - e.stopPropagation(); - handleOnReset(); + +
); diff --git a/src/pages/_components/page-box.tsx b/src/pages/_components/page-box.tsx index 2fd989ad..8daa456b 100644 --- a/src/pages/_components/page-box.tsx +++ b/src/pages/_components/page-box.tsx @@ -1,9 +1,11 @@ import useOverlayScroller from '@/hooks/use-overlay-scroller'; +import { ExtraContent } from '@/layouts/extraRender'; import { PageContainer, RouteContext, type PageContainerProps } from '@ant-design/pro-components'; +import { Divider } from 'antd'; import classNames from 'classnames'; import { useContext, useEffect, useRef } from 'react'; import pageBoxCss from './styles/page-box.less'; @@ -38,6 +40,7 @@ export const PageContainerInner: React.FC< {...rest} fixedHeader={false} title={false} + pageHeaderRender={false} style={{ flex: 1 }} @@ -49,9 +52,15 @@ export const PageContainerInner: React.FC<
{leftContent || pageContext.title}
- {rightContent && ( -
{rightContent}
- )} +
+ {rightContent && ( +
+ {rightContent} + +
+ )} + +
void; + options: Option[]; + disabled?: boolean; + variant?: 'filled' | 'outlined' | 'solid'; +}; + +const PillButtonGroup: React.FC = ({ + value, + onChange, + options, + disabled, + variant = 'outlined' +}) => { + return ( +
+ {options.map((item) => { + const active = value === item.value; + + return ( + + { + if (item.value !== value) { + onChange?.(item.value); + } + if (item.value === value) { + onChange?.(undefined); + } + }} + > + {item.icon} + {item.label} + + + ); + })} +
+ ); +}; + +export default PillButtonGroup; diff --git a/src/pages/_components/pill-button-group/styles.less b/src/pages/_components/pill-button-group/styles.less new file mode 100644 index 00000000..d7bc8943 --- /dev/null +++ b/src/pages/_components/pill-button-group/styles.less @@ -0,0 +1,31 @@ +.pill-item { + height: 28px; + line-height: 28px; + display: flex; + align-items: center; + gap: 8px; + justify-content: center; + border-radius: var(--ant-border-radius); + background-color: var(--ant-color-fill-tertiary); + color: var(--ant-color-text-secondary); + padding: 0 8px; + cursor: pointer; + transition: all 0.3s; + + &.active { + background-color: var(--ant-color-fill); + color: var(--ant-color-text); + font-weight: 500; + } + + &:not(.active):hover { + background-color: var(--ant-color-fill-secondary); + } +} + +.wrapper { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: 8px; + align-items: center; +} diff --git a/src/pages/_components/styles/page-box.less b/src/pages/_components/styles/page-box.less index d763b3fb..86ae6a61 100644 --- a/src/pages/_components/styles/page-box.less +++ b/src/pages/_components/styles/page-box.less @@ -18,7 +18,7 @@ } .ant-pro-page-container-children-container { - height: calc(100vh - 56px); + height: calc(100vh - 16px); display: flex; flex-direction: column; border: 1px solid var(--color-border-container); diff --git a/src/pages/api-keys/index.tsx b/src/pages/api-keys/index.tsx index 09aaf51c..12c66e1c 100644 --- a/src/pages/api-keys/index.tsx +++ b/src/pages/api-keys/index.tsx @@ -151,6 +151,7 @@ const APIKeys: React.FC = () => { rowKey="id" onChange={handleTableChange} pagination={{ + size: 'middle', showSizeChanger: true, pageSize: queryParams.perPage, current: queryParams.page, diff --git a/src/pages/backends/components/backend-card.tsx b/src/pages/backends/components/backend-card.tsx index 67857d59..96304bbe 100644 --- a/src/pages/backends/components/backend-card.tsx +++ b/src/pages/backends/components/backend-card.tsx @@ -27,7 +27,7 @@ const StyledCard = styled(Card)` &:hover { .operations { background-color: var(--ant-color-fill-tertiary); - border-radius: var(--ant-border-radius); + border-radius: var(--ant-border-radius-lg); } } `; @@ -40,7 +40,7 @@ const TagInner = styled(Tag)<{ height?: number }>` font-size: 18px; height: ${({ height }) => (height ? `${height}px` : '28px')}; width: ${({ height }) => (height ? `${height}px` : '28px')}; - border-radius: 6px; + border-radius: var(--ant-border-radius-lg); font-weight: 400; `; diff --git a/src/pages/backends/forms/version-info.tsx b/src/pages/backends/forms/version-info.tsx index 6c5ca477..a896e163 100644 --- a/src/pages/backends/forms/version-info.tsx +++ b/src/pages/backends/forms/version-info.tsx @@ -22,7 +22,7 @@ const ItemWrapper = styled.div` gap: 8px; width: 100%; border: 1px solid var(--ant-color-border); - border-radius: var(--ant-border-radius); + border-radius: var(--ant-border-radius-lg); padding: 12px 16px; &:hover { background-color: var(--ant-color-fill-tertiary); diff --git a/src/pages/benchmark/hooks/use-benchmark-columns.tsx b/src/pages/benchmark/hooks/use-benchmark-columns.tsx index 8db1ae14..2354dcb9 100644 --- a/src/pages/benchmark/hooks/use-benchmark-columns.tsx +++ b/src/pages/benchmark/hooks/use-benchmark-columns.tsx @@ -38,7 +38,10 @@ const useBenchmarkColumns = (params: { ...columns, { title: ( - + {intl.formatMessage({ id: 'common.table.operation' })} ), diff --git a/src/pages/benchmark/hooks/use-column-settings.tsx b/src/pages/benchmark/hooks/use-column-settings.tsx index 27538cd1..e16e950f 100644 --- a/src/pages/benchmark/hooks/use-column-settings.tsx +++ b/src/pages/benchmark/hooks/use-column-settings.tsx @@ -358,7 +358,10 @@ const useColumnSettings = (options: { const metadataColumns = [ { title: ( - + {intl.formatMessage({ id: 'clusters.title' })} ), @@ -371,7 +374,10 @@ const useColumnSettings = (options: { }, { title: ( - + {intl.formatMessage({ id: 'benchmark.detail.modelName' })} ), @@ -385,7 +391,10 @@ const useColumnSettings = (options: { }, { title: ( - + {intl.formatMessage({ id: 'benchmark.form.profile' })} ), diff --git a/src/pages/benchmark/index.tsx b/src/pages/benchmark/index.tsx index c0122d36..721f2297 100644 --- a/src/pages/benchmark/index.tsx +++ b/src/pages/benchmark/index.tsx @@ -255,6 +255,7 @@ const Benchmark: React.FC = () => { scroll={{ x: 1200 }} onChange={handleTableChange} pagination={{ + size: 'middle', showSizeChanger: true, pageSize: queryParams.perPage, current: queryParams.page, diff --git a/src/pages/cluster-management/clusters.tsx b/src/pages/cluster-management/clusters.tsx index d2505970..107e57f2 100644 --- a/src/pages/cluster-management/clusters.tsx +++ b/src/pages/cluster-management/clusters.tsx @@ -396,6 +396,7 @@ const Clusters: React.FC = () => { > } pagination={{ + size: 'middle', showSizeChanger: true, pageSize: queryParams.perPage, current: queryParams.page, diff --git a/src/pages/cluster-management/components/add-credential.tsx b/src/pages/cluster-management/components/add-credential.tsx index 84ee5959..a4fbe025 100644 --- a/src/pages/cluster-management/components/add-credential.tsx +++ b/src/pages/cluster-management/components/add-credential.tsx @@ -6,24 +6,12 @@ import FormDrawer from '@/pages/_components/form-drawer'; import { useIntl } from '@umijs/max'; import { Form } from 'antd'; import React, { useEffect } from 'react'; -import styled from 'styled-components'; import { ProviderType, ProviderValueMap } from '../config'; import { CredentialFormData as FormData, CredentialListItem as ListItem } from '../config/types'; -const ExtraContent = styled.div` - display: flex; - justify-content: flex-end; - align-items: center; - position: absolute; - bottom: 6px; - right: 32px; - z-index: 1; - background: var(--ant-color-bg-container); - padding-inline: 8px; -`; type AddModalProps = { title: string; action: PageActionType; diff --git a/src/pages/cluster-management/components/worker-pools.tsx b/src/pages/cluster-management/components/worker-pools.tsx index 5c27fcab..94a621f2 100644 --- a/src/pages/cluster-management/components/worker-pools.tsx +++ b/src/pages/cluster-management/components/worker-pools.tsx @@ -156,6 +156,7 @@ const WorkerPools = () => { rowSelection={rowSelection} columns={columns} pagination={{ + size: 'middle', showSizeChanger: true, pageSize: queryParams.perPage, current: queryParams.page, diff --git a/src/pages/cluster-management/credentials.tsx b/src/pages/cluster-management/credentials.tsx index c37cc15f..4dc474a2 100644 --- a/src/pages/cluster-management/credentials.tsx +++ b/src/pages/cluster-management/credentials.tsx @@ -215,6 +215,7 @@ const Credentials: React.FC = () => { rowKey="id" onChange={handleTableChange} pagination={{ + size: 'middle', showSizeChanger: true, pageSize: queryParams.perPage, current: queryParams.page, diff --git a/src/pages/cluster-management/hooks/use-cluster-columns.tsx b/src/pages/cluster-management/hooks/use-cluster-columns.tsx index 2f62359b..1f59c915 100644 --- a/src/pages/cluster-management/hooks/use-cluster-columns.tsx +++ b/src/pages/cluster-management/hooks/use-cluster-columns.tsx @@ -100,7 +100,9 @@ const useClusterColumns = ( span: 3, render: (text: string, record: ClusterListItem) => ( <> - {record.name} + + {record.name} + {record.is_default && ( ( - {text} + {text} ) }, diff --git a/src/pages/dashboard/components/active-table.tsx b/src/pages/dashboard/components/active-table.tsx index edd45385..82151e22 100644 --- a/src/pages/dashboard/components/active-table.tsx +++ b/src/pages/dashboard/components/active-table.tsx @@ -25,7 +25,7 @@ const ActiveTable = () => { render: (text: any, record: any) => { return ( - + {record.provider_name ? `${record.provider_name}/${text}` : text} diff --git a/src/pages/dashboard/components/usage-inner/index.tsx b/src/pages/dashboard/components/usage-inner/index.tsx index fa573415..08a3dad4 100644 --- a/src/pages/dashboard/components/usage-inner/index.tsx +++ b/src/pages/dashboard/components/usage-inner/index.tsx @@ -114,7 +114,7 @@ const UsageInner: FC<{ maxWidth: number }> = ({ maxWidth }) => {
{intl.formatMessage({ id: 'dashboard.topusers' })} diff --git a/src/pages/llmodels/components/instance-cells/name-cell.tsx b/src/pages/llmodels/components/instance-cells/name-cell.tsx index dc743663..47f3120c 100644 --- a/src/pages/llmodels/components/instance-cells/name-cell.tsx +++ b/src/pages/llmodels/components/instance-cells/name-cell.tsx @@ -19,6 +19,9 @@ export interface NameCellProps { modelData: any; defaultOpenId?: string; showWorkerInfo?: boolean; + styles?: { + label?: React.CSSProperties; + }; } const calcTotalVram = (vram: Record) => { @@ -110,12 +113,15 @@ const NameCell: React.FC = ({ record, modelData, defaultOpenId, - showWorkerInfo = true + showWorkerInfo = true, + styles }) => { return ( - {record.name} + + {record.name} + {!!record.worker_id && showWorkerInfo && ( = ({ return (
- + void; handleSearch: () => void; handleCategoryChange: (value: string) => void; + onFilterChange: (allValues: any) => void; clusterList: Global.BaseOption[]; } @@ -22,6 +22,7 @@ const LeftFilters: React.FC = (props) => { handleStatusChange, handleSearch, handleCategoryChange, + onFilterChange, clusterList } = props; const { labelRender, optionRender, statusOptions } = useFilterStatus(); @@ -36,12 +37,19 @@ const LeftFilters: React.FC = (props) => { > } placeholder={intl.formatMessage({ id: 'common.filter.name' })} - style={{ width: 200 }} + style={{ width: 400 }} size="large" allowClear + suffix={ + + } onChange={handleNameChange} > - = (props) => { labelRender={labelRender} options={statusOptions} onChange={handleStatusChange} - > + > */}