diff --git a/packages/napcat-webui-frontend/src/components/onebot/api/nav_list.tsx b/packages/napcat-webui-frontend/src/components/onebot/api/nav_list.tsx index 2e4d58fa..7b4670cb 100644 --- a/packages/napcat-webui-frontend/src/components/onebot/api/nav_list.tsx +++ b/packages/napcat-webui-frontend/src/components/onebot/api/nav_list.tsx @@ -1,9 +1,11 @@ import { Input } from '@heroui/input'; +import { useLocalStorage } from '@uidotdev/usehooks'; import clsx from 'clsx'; import { AnimatePresence, motion } from 'motion/react'; import { useMemo, useState } from 'react'; import { TbChevronRight, TbFolder, TbSearch } from 'react-icons/tb'; +import key from '@/const/key'; import oneBotHttpApiGroup from '@/const/ob_api/group'; import oneBotHttpApiMessage from '@/const/ob_api/message'; import oneBotHttpApiSystem from '@/const/ob_api/system'; @@ -22,6 +24,8 @@ const OneBotApiNavList: React.FC = (props) => { const { data, selectedApi, onSelect, openSideBar, onToggle } = props; const [searchValue, setSearchValue] = useState(''); const [expandedGroups, setExpandedGroups] = useState([]); + const [backgroundImage] = useLocalStorage(key.backgroundImage, ''); + const hasBackground = !!backgroundImage; const groups = useMemo(() => { const rawGroups = [ @@ -70,7 +74,9 @@ const OneBotApiNavList: React.FC = (props) => { // Mobile: absolute position, drawer style // Desktop: relative position, pushing content 'absolute md:relative left-0 top-0', - 'bg-white/80 dark:bg-black/80 md:bg-transparent backdrop-blur-2xl md:backdrop-blur-none' + hasBackground + ? 'bg-white/10 dark:bg-black/40 backdrop-blur-xl md:bg-transparent md:backdrop-blur-none' + : 'bg-white/80 dark:bg-black/40 backdrop-blur-xl md:bg-transparent md:backdrop-blur-none' )} initial={false} animate={{ @@ -139,7 +145,7 @@ const OneBotApiNavList: React.FC = (props) => { className={clsx( 'flex flex-col gap-0.5 px-3 py-2 rounded-lg cursor-pointer transition-all border border-transparent select-none', isSelected - ? 'bg-primary/20 border-primary/20 shadow-sm' + ? (hasBackground ? '' : 'bg-primary/20 border-primary/20 shadow-sm') : 'hover:bg-white/5' )} > diff --git a/packages/napcat-webui-frontend/src/components/sidebar/index.tsx b/packages/napcat-webui-frontend/src/components/sidebar/index.tsx index 49e90f63..4c2c9706 100644 --- a/packages/napcat-webui-frontend/src/components/sidebar/index.tsx +++ b/packages/napcat-webui-frontend/src/components/sidebar/index.tsx @@ -1,10 +1,12 @@ import { Button } from '@heroui/button'; +import { useLocalStorage } from '@uidotdev/usehooks'; import clsx from 'clsx'; import { AnimatePresence, motion } from 'motion/react'; import React from 'react'; import { IoMdLogOut } from 'react-icons/io'; import { MdDarkMode, MdLightMode } from 'react-icons/md'; +import key from '@/const/key'; import useAuth from '@/hooks/auth'; import useDialog from '@/hooks/use-dialog'; import { useTheme } from '@/hooks/use-theme'; @@ -23,6 +25,9 @@ const SideBar: React.FC = (props) => { const { toggleTheme, isDark } = useTheme(); const { revokeAuth } = useAuth(); const dialog = useDialog(); + const [backgroundImage] = useLocalStorage(key.backgroundImage, ''); + const hasBackground = !!backgroundImage; + const onRevokeAuth = () => { dialog.confirm({ title: '退出登录', @@ -48,7 +53,9 @@ const SideBar: React.FC = (props) => { = ({ data }) => { systemUsage={Number(data?.cpu.usage.system) || 0} processUsage={Number(data?.cpu.usage.qq) || 0} title='CPU占用' + hasBackground={hasBackground} /> diff --git a/packages/napcat-webui-frontend/src/components/usage_pie.tsx b/packages/napcat-webui-frontend/src/components/usage_pie.tsx index 97b71c0a..9765c6b9 100644 --- a/packages/napcat-webui-frontend/src/components/usage_pie.tsx +++ b/packages/napcat-webui-frontend/src/components/usage_pie.tsx @@ -1,4 +1,5 @@ import React, { useMemo } from 'react'; +import clsx from 'clsx'; import { useTheme } from '@/hooks/use-theme'; @@ -6,12 +7,14 @@ interface UsagePieProps { systemUsage: number; processUsage: number; title?: string; + hasBackground?: boolean; } const UsagePie: React.FC = ({ systemUsage, processUsage, title, + hasBackground, }) => { const { theme } = useTheme(); @@ -91,15 +94,24 @@ const UsagePie: React.FC = ({ {/* Center Content */}
{title && ( - + {title} )}
- + {Math.round(cleanSystem)} - % + %