fix(style): dashboard usage filters

This commit is contained in:
jialin
2026-03-26 17:59:33 +08:00
committed by jialin
parent 589936199c
commit bb3cef89c1
3 changed files with 67 additions and 60 deletions
@@ -7,44 +7,15 @@ import { useIntl } from '@umijs/max';
import { Button, DatePicker, Tooltip } from 'antd'; import { Button, DatePicker, Tooltip } from 'antd';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import React from 'react'; import React from 'react';
import styled from 'styled-components';
import { DASHBOARD_STATS_API } from '../../apis'; import { DASHBOARD_STATS_API } from '../../apis';
import useRangePickerPreset from '../../hooks/use-rangepicker-preset'; import useRangePickerPreset from '../../hooks/use-rangepicker-preset';
import FilterBarCss from '../../styles/filter-bar.less';
const OptionWrapper = styled.span`
display: flex;
align-items: center;
gap: 8px;
`;
const LabelWrapper = styled.div`
display: flex;
align-items: center;
gap: 8px;
`;
const DefaultDateConfig = { const DefaultDateConfig = {
maxRange: 60, maxRange: 60,
defaultRange: 29 defaultRange: 29
}; };
const FilterWrapper = styled.div`
position: relative;
z-index: 10;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 0px;
.selection {
display: flex;
align-items: center;
gap: 12px;
}
.ant-select-selection-overflow-item > span {
height: 24px;
}
`;
interface FilterBarProps { interface FilterBarProps {
query: any; query: any;
userList: any[]; userList: any[];
@@ -105,28 +76,28 @@ const FilterBar: React.FC<FilterBarProps> = (props) => {
if (data.providerType === 'deployments') { if (data.providerType === 'deployments') {
return ( return (
<OptionWrapper> <span className={FilterBarCss.optionsWrapper}>
<ProviderLogo provider={data.providerType as string} /> <ProviderLogo provider={data.providerType as string} />
<AutoTooltip ghost maxWidth={105}> <AutoTooltip ghost>
{intl.formatMessage({ id: 'menu.models.deployment' })} {intl.formatMessage({ id: 'menu.models.deployment' })}
</AutoTooltip> </AutoTooltip>
</OptionWrapper> </span>
); );
} }
return ( return (
<OptionWrapper> <span className={FilterBarCss.optionsWrapper}>
<ProviderLogo provider={data.providerType as string} /> <ProviderLogo provider={data.providerType as string} />
<AutoTooltip ghost maxWidth={105}> <AutoTooltip ghost>
<span>{data.label}</span> <span>{data.label}</span>
</AutoTooltip> </AutoTooltip>
</OptionWrapper> </span>
); );
}; };
return ( return (
<FilterWrapper> <div className={FilterBarCss.wrapper}>
<div className="selection"> <div className={FilterBarCss.selection}>
<DatePicker.RangePicker <DatePicker.RangePicker
maxDate={dayjs()} maxDate={dayjs()}
defaultValue={[ defaultValue={[
@@ -149,7 +120,7 @@ const FilterBar: React.FC<FilterBarProps> = (props) => {
placeholder={intl.formatMessage({ placeholder={intl.formatMessage({
id: 'dashboard.usage.selectuser' id: 'dashboard.usage.selectuser'
})} })}
style={{ maxWidth: 200, minWidth: 160 }} style={{ width: '100%' }}
value={query.user_ids} value={query.user_ids}
onChange={handleUsersChange} onChange={handleUsersChange}
></SimpleSelect> ></SimpleSelect>
@@ -164,9 +135,12 @@ const FilterBar: React.FC<FilterBarProps> = (props) => {
}} }}
styles={{ styles={{
root: { root: {
width: cascaderWidth width: '100%'
}, },
popup: { popup: {
list: {
flex: 1
},
listItem: { listItem: {
padding: '5px 10px' padding: '5px 10px'
} }
@@ -190,7 +164,7 @@ const FilterBar: React.FC<FilterBarProps> = (props) => {
</Tooltip> </Tooltip>
)} )}
</div> </div>
</FilterWrapper> </div>
); );
}; };
@@ -2,23 +2,17 @@ import breakpoints from '@/config/breakpoints';
import { useIntl } from '@umijs/max'; import { useIntl } from '@umijs/max';
import { Col, Row } from 'antd'; import { Col, Row } from 'antd';
import { FC, useContext, useEffect, useMemo } from 'react'; import { FC, useContext, useEffect, useMemo } from 'react';
import styled from 'styled-components';
import { DASHBOARD_STATS_API } from '../../apis'; import { DASHBOARD_STATS_API } from '../../apis';
import { baseColorMap } from '../../config'; import { baseColorMap } from '../../config';
import { DashboardContext } from '../../config/dashboard-context'; import { DashboardContext } from '../../config/dashboard-context';
import { DashboardUsageData } from '../../config/types'; import { DashboardUsageData } from '../../config/types';
import FilterBarCss from '../../styles/filter-bar.less';
import ExportData from './export-data'; import ExportData from './export-data';
import FilterBar from './filter-bar'; import FilterBar from './filter-bar';
import RequestTokenInner from './request-token-inner'; import RequestTokenInner from './request-token-inner';
import TopUser from './top-user'; import TopUser from './top-user';
import useUsageData from './use-usage-data'; import useUsageData from './use-usage-data';
const TitleWrapper = styled.div`
margin: 0;
font-weight: 700;
min-width: max-content;
`;
const UsageInner: FC<{ maxWidth: number }> = ({ maxWidth }) => { const UsageInner: FC<{ maxWidth: number }> = ({ maxWidth }) => {
const intl = useIntl(); const intl = useIntl();
const { model_usage } = useContext(DashboardContext); const { model_usage } = useContext(DashboardContext);
@@ -95,17 +89,10 @@ const UsageInner: FC<{ maxWidth: number }> = ({ maxWidth }) => {
<div> <div>
<Row gutter={maxWidth < breakpoints.xl ? [0, 0] : [20, 20]}> <Row gutter={maxWidth < breakpoints.xl ? [0, 0] : [20, 20]}>
<Col xs={24} sm={24} md={24} lg={24} xl={16}> <Col xs={24} sm={24} md={24} lg={24} xl={16}>
<div <div className={FilterBarCss.usageTitle}>
style={{ <div className={FilterBarCss.usageTitleText}>
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
margin: '20px 0 '
}}
>
<TitleWrapper>
{intl.formatMessage({ id: 'dashboard.usage' })} {intl.formatMessage({ id: 'dashboard.usage' })}
</TitleWrapper> </div>
<FilterBar <FilterBar
url={DASHBOARD_STATS_API} url={DASHBOARD_STATS_API}
query={query} query={query}
@@ -129,9 +116,9 @@ const UsageInner: FC<{ maxWidth: number }> = ({ maxWidth }) => {
<div <div
style={{ margin: maxWidth < breakpoints.xl ? '26px 0' : '32px 0' }} style={{ margin: maxWidth < breakpoints.xl ? '26px 0' : '32px 0' }}
> >
<TitleWrapper> <div className={FilterBarCss.usageTitleText}>
{intl.formatMessage({ id: 'dashboard.topusers' })} {intl.formatMessage({ id: 'dashboard.topusers' })}
</TitleWrapper> </div>
</div> </div>
<TopUser <TopUser
userData={topUserData.userData} userData={topUserData.userData}
@@ -0,0 +1,46 @@
.wrapper {
position: relative;
z-index: 10;
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 0;
gap: 16px;
flex: 1;
.selection {
display: grid;
flex: 1;
grid-template-columns:
max-content minmax(160px, 200px) minmax(300px, 1fr)
max-content;
gap: 12px;
align-items: center;
}
:global {
.ant-select-selection-overflow-item > span {
height: 24px;
}
}
}
.optionsWrapper {
display: flex;
align-items: center;
gap: 8px;
padding-right: 4px;
}
.usageTitle {
margin: 20px 0;
display: grid;
align-items: center;
grid-template-columns: minmax(45px, 200px) 1fr;
}
.usageTitleText {
margin: 0;
font-weight: 700;
min-width: max-content;
}