Optimize code

This commit is contained in:
2024-01-03 15:16:48 +08:00
parent d67aea2895
commit bcd7b761ac
10 changed files with 609 additions and 593 deletions

View File

@@ -4,9 +4,8 @@ import '@/assets/css/components/common/card.scss'
interface CardProps interface CardProps
extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> {} extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> {}
const Card = forwardRef<HTMLDivElement, CardProps>((props, ref) => { const Card = forwardRef<HTMLDivElement, CardProps>(({ className, ...props }, ref) => {
const { className, ..._props } = props return <div className={`card-box${className ? ` ${className}` : ''}`} {...props} ref={ref} />
return <div className={`card-box${className ? ` ${className}` : ''}`} {..._props} ref={ref} />
}) })
export default Card export default Card

View File

@@ -6,14 +6,13 @@ interface FitCenterProps
vertical?: boolean vertical?: boolean
} }
const FitCenter: React.FC<FitCenterProps> = (props) => { const FitCenter: React.FC<FitCenterProps> = ({ className, vertical, ...props }) => {
const { className, vertical, ..._props } = props
return ( return (
<div <div
className={`fit-center${className ? ` ${className}` : ''}${ className={`fit-center${className ? ` ${className}` : ''}${
vertical ? ' flex-vertical' : ' flex-horizontal' vertical ? ' flex-vertical' : ' flex-horizontal'
}`} }`}
{..._props} {...props}
/> />
) )
} }

View File

@@ -7,20 +7,21 @@ interface FitFullscreenProps
backgroundColor?: string backgroundColor?: string
} }
const FitFullscreen = forwardRef<HTMLDivElement, FitFullscreenProps>((props, ref) => { const FitFullscreen = forwardRef<HTMLDivElement, FitFullscreenProps>(
const { zIndex, backgroundColor, className, style, ..._props } = props ({ zIndex, backgroundColor, className, style, ...props }, ref) => {
return ( return (
<div <div
className={`fit-fullscreen${className ? ` ${className}` : ''}`} className={`fit-fullscreen${className ? ` ${className}` : ''}`}
style={{ style={{
zIndex, zIndex,
backgroundColor, backgroundColor,
...style ...style
}} }}
ref={ref} ref={ref}
{..._props} {...props}
/> />
) )
}) }
)
export default FitFullscreen export default FitFullscreen

View File

@@ -7,18 +7,19 @@ interface FlexBoxProps
gap?: number gap?: number
} }
const FlexBox = forwardRef<HTMLDivElement, FlexBoxProps>((props, ref) => { const FlexBox = forwardRef<HTMLDivElement, FlexBoxProps>(
const { className, direction, gap, style, ..._props } = props ({ className, direction, gap, style, ...props }, ref) => {
return ( return (
<div <div
className={`flex-box ${ className={`flex-box ${
direction === 'horizontal' ? 'flex-horizontal' : 'flex-vertical' direction === 'horizontal' ? 'flex-horizontal' : 'flex-vertical'
}${className ? ` ${className}` : ''}`} }${className ? ` ${className}` : ''}`}
style={{ gap, ...style }} style={{ gap, ...style }}
{..._props} {...props}
ref={ref} ref={ref}
/> />
) )
}) }
)
export default FlexBox export default FlexBox

File diff suppressed because it is too large Load Diff

View File

@@ -8,9 +8,7 @@ interface IndicatorProps {
onSwitch?: (index: number) => void onSwitch?: (index: number) => void
} }
const Indicator: React.FC<IndicatorProps> = (props) => { const Indicator: React.FC<IndicatorProps> = ({ total, current, onSwitch }) => {
const { total, current, onSwitch } = props
const handleClick = (index: number) => { const handleClick = (index: number) => {
return () => { return () => {
onSwitch && onSwitch(index) onSwitch && onSwitch(index)

View File

@@ -2,10 +2,8 @@ import React from 'react'
const SidebarSeparate: React.FC< const SidebarSeparate: React.FC<
React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>
> = (props) => { > = ({ className, ...props }) => {
const { className, ..._props } = props return <div className={`separate ${className ? ` ${className}` : ''}`} {...props} />
return <div className={`separate ${className ? ` ${className}` : ''}`} {..._props} />
} }
export default SidebarSeparate export default SidebarSeparate

View File

@@ -6,7 +6,7 @@ import HideScrollbar from '@/components/common/HideScrollbar'
import FitFullscreen from '@/components/common/FitFullscreen' import FitFullscreen from '@/components/common/FitFullscreen'
import FlexBox from '@/components/common/FlexBox' import FlexBox from '@/components/common/FlexBox'
import Card from '@/components/common/Card' import Card from '@/components/common/Card'
import Permission from '@/components/common/Permission.tsx' import Permission from '@/components/common/Permission'
interface CommonCardProps interface CommonCardProps
extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> { extends React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> {
@@ -16,11 +16,10 @@ interface CommonCardProps
url?: string url?: string
} }
const CommonCard = forwardRef<HTMLDivElement, CommonCardProps>((props) => { const CommonCard = forwardRef<HTMLDivElement, CommonCardProps>(
const navigate = useNavigate() ({
const cardRef = useRef<HTMLDivElement>(null)
const {
style, style,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
ref, ref,
icon, icon,
description, description,
@@ -32,32 +31,35 @@ const CommonCard = forwardRef<HTMLDivElement, CommonCardProps>((props) => {
}, },
url, url,
children, children,
..._props ...props
} = props }) => {
const navigate = useNavigate()
const cardRef = useRef<HTMLDivElement>(null)
useEffect(() => { useEffect(() => {
cardRef.current && VanillaTilt.init(cardRef.current, options) cardRef.current && VanillaTilt.init(cardRef.current, options)
}, [options]) }, [options])
const handleCardOnClick = () => { const handleCardOnClick = () => {
url && navigate(url) url && navigate(url)
}
return (
<Card
style={{ overflow: 'visible', ...style }}
ref={cardRef}
{...props}
onClick={handleCardOnClick}
>
<FlexBox className={'common-card'}>
<Icon component={icon} className={'icon'} />
<div className={'text'}>{children}</div>
<div className={'description'}>{description}</div>
</FlexBox>
</Card>
)
} }
)
return (
<Card
style={{ overflow: 'visible', ...style }}
ref={cardRef}
{..._props}
onClick={handleCardOnClick}
>
<FlexBox className={'common-card'}>
<Icon component={icon} className={'icon'} />
<div className={'text'}>{children}</div>
<div className={'description'}>{description}</div>
</FlexBox>
</Card>
)
})
const System: React.FC = () => { const System: React.FC = () => {
return ( return (

View File

@@ -15,7 +15,7 @@ import { BarChart, BarSeriesOption, LineChart, LineSeriesOption } from 'echarts/
import { SVGRenderer } from 'echarts/renderers' import { SVGRenderer } from 'echarts/renderers'
import { UniversalTransition } from 'echarts/features' import { UniversalTransition } from 'echarts/features'
import { CallbackDataParams } from 'echarts/types/dist/shared' import { CallbackDataParams } from 'echarts/types/dist/shared'
import { utcToLocalTime } from '@/util/datetime.tsx' import { utcToLocalTime } from '@/util/datetime'
echarts.use([ echarts.use([
TooltipComponent, TooltipComponent,

View File

@@ -25,7 +25,7 @@ const system: RouteJsonObject[] = [
path: 'settings', path: 'settings',
absolutePath: '/system/settings', absolutePath: '/system/settings',
id: 'system-settings', id: 'system-settings',
component: React.lazy(() => import('@/pages/system/Settings')), component: React.lazy(() => import('@/pages/system/settings')),
name: '系统设置', name: '系统设置',
icon: React.lazy(() => import('~icons/oxygen/option.jsx')), icon: React.lazy(() => import('~icons/oxygen/option.jsx')),
menu: true, menu: true,