diff --git a/src/pages/dashboard/components/usage-inner/export-data.tsx b/src/pages/dashboard/components/usage-inner/export-data.tsx index 889f0bdf..7dc2d9cd 100644 --- a/src/pages/dashboard/components/usage-inner/export-data.tsx +++ b/src/pages/dashboard/components/usage-inner/export-data.tsx @@ -3,9 +3,11 @@ import ScrollerModal from '@/components/scroller-modal'; import useTableFetch from '@/hooks/use-table-fetch'; import { useIntl } from '@umijs/max'; import { DatePicker, Select, Space, Table } from 'antd'; +import dayjs from 'dayjs'; import React from 'react'; import { queryDashboardUsageData } from '../../apis'; import { exportTableColumns } from '../../config'; +import useRangePickerPreset from '../../hooks/use-rangepicker-preset'; const ExportData: React.FC<{ open: boolean; @@ -28,6 +30,9 @@ const ExportData: React.FC<{ }); const { open, onCancel } = props || {}; const intl = useIntl(); + const { disabledRangeDaysDate, rangePresets } = useRangePickerPreset({ + range: 60 + }); const handleSubmit = () => {}; @@ -66,7 +71,16 @@ const ExportData: React.FC<{ } > - + { + handleSearch(); + }} + > = (props) => { return ( } size="small" onClick={onExport} diff --git a/src/pages/dashboard/config/index.ts b/src/pages/dashboard/config/index.ts index 4391f5c4..5a82ddb6 100644 --- a/src/pages/dashboard/config/index.ts +++ b/src/pages/dashboard/config/index.ts @@ -75,7 +75,7 @@ export const baseColorMap = { baseL2: 'rgba(13,171,219,0.8)', baseL1: 'rgba(0,34,255,0.8)', base: 'rgba(0,85,255,0.8)', - baseR1: 'rgba(0,255,233,0.8)', + baseR1: 'rgba(0,187,204, 0.6)', baseR2: 'rgba(48,0,255,0.8)', baseR3: 'rgba(85,167,255,0.8)' }; diff --git a/src/pages/dashboard/hooks/use-rangepicker-preset.ts b/src/pages/dashboard/hooks/use-rangepicker-preset.ts new file mode 100644 index 00000000..ba600358 --- /dev/null +++ b/src/pages/dashboard/hooks/use-rangepicker-preset.ts @@ -0,0 +1,67 @@ +import { DatePickerProps } from 'antd'; +import dayjs, { type Dayjs } from 'dayjs'; + +interface RangePickerPreset { + range: number; +} + +export default function useRangePickerPreset(options?: RangePickerPreset): { + disabledRangeDaysDate: DatePickerProps['disabledDate']; + rangePresets: { + label: React.ReactNode; + value: [Dayjs, Dayjs] | (() => [Dayjs, Dayjs]); + }[]; + range: number; +} { + const { range = 60 } = options || {}; + + const getYearMonth = (date: Dayjs) => date.year() * 12 + date.month(); + + const disabledRangeDaysDate: DatePickerProps['disabledDate'] = ( + current, + { from, type } + ) => { + // before 2025 is not allowed + if (current.year() < 2025) { + return true; + } + + if (from) { + const minDate = from.add(1 - range, 'days'); + const maxDate = from.add(range - 1, 'days'); + + switch (type) { + case 'year': + return ( + current.year() < minDate.year() || current.year() > maxDate.year() + ); + + case 'month': + return ( + getYearMonth(current) < getYearMonth(minDate) || + getYearMonth(current) > getYearMonth(maxDate) + ); + + default: + return Math.abs(current.diff(from, 'days')) >= range; + } + } + + return false; + }; + + const rangePresets: { + label: React.ReactNode; + value: [Dayjs, Dayjs] | (() => [Dayjs, Dayjs]); + }[] = [ + { label: 'Last 7 Days', value: [dayjs().add(-7, 'd'), dayjs()] }, + { label: 'Last 30 Days', value: [dayjs().add(-30, 'd'), dayjs()] }, + { label: 'Last 60 Days', value: [dayjs().add(-60, 'd'), dayjs()] } + ]; + + return { + disabledRangeDaysDate, + rangePresets, + range + }; +}