update pay ui

This commit is contained in:
2025-12-05 15:14:50 +08:00
parent 8f499cf566
commit 0f9f02e159
2 changed files with 308 additions and 207 deletions

View File

@@ -16,13 +16,14 @@ import {
Flex,
Tooltip,
} from '@chakra-ui/react';
import { ChevronRightIcon, CloseIcon } from '@chakra-ui/icons';
import { FaLayerGroup, FaFilter, FaTimes, FaHome } from 'react-icons/fa';
import { ChevronRightIcon } from '@chakra-ui/icons';
import { FaFilter, FaTimes, FaHome } from 'react-icons/fa';
const BreadcrumbNav = ({
filter,
onClearFilter,
onNavigate,
isDarkMode = false,
}) => {
// 如果没有筛选条件,不显示
if (!filter || (!filter.lv1 && !filter.lv2 && !filter.lv3)) {
@@ -56,14 +57,71 @@ const BreadcrumbNav = ({
});
}
// 深色主题样式
const darkStyles = {
container: {
bg: 'rgba(15, 23, 42, 0.8)',
backdropFilter: 'blur(20px)',
borderColor: 'whiteAlpha.100',
},
filterBadge: {
bg: 'purple.500',
color: 'white',
},
homeBadge: {
bg: 'whiteAlpha.100',
color: 'white',
_hover: { bg: 'whiteAlpha.200' },
},
chevron: { color: 'whiteAlpha.400' },
crumbBadge: (level, isLast) => ({
bg: level === 'lv1' ? 'purple.500' : level === 'lv2' ? 'blue.500' : 'cyan.500',
color: 'white',
}),
clearBtn: {
color: 'red.300',
_hover: { bg: 'whiteAlpha.100' },
},
hintText: { color: 'whiteAlpha.500' },
linkText: { color: 'purple.300' },
};
// 浅色主题样式
const lightStyles = {
container: {
bg: 'linear-gradient(135deg, rgba(99, 102, 241, 0.1) 0%, rgba(168, 85, 247, 0.1) 100%)',
borderColor: 'purple.200',
},
filterBadge: {
bg: 'purple.500',
color: 'white',
},
homeBadge: {
colorScheme: 'gray',
_hover: { bg: 'gray.200' },
},
chevron: { color: 'gray.400' },
crumbBadge: (level, isLast) => ({
colorScheme: level === 'lv1' ? 'purple' : level === 'lv2' ? 'blue' : 'cyan',
}),
clearBtn: {
colorScheme: 'red',
},
hintText: { color: 'gray.500' },
linkText: { color: 'purple.600' },
};
const styles = isDarkMode ? darkStyles : lightStyles;
return (
<Box
bg="linear-gradient(135deg, rgba(99, 102, 241, 0.1) 0%, rgba(168, 85, 247, 0.1) 100%)"
bg={styles.container.bg}
backdropFilter={isDarkMode ? styles.container.backdropFilter : undefined}
borderRadius="xl"
p={{ base: 3, md: 4 }}
mb={4}
border="1px solid"
borderColor="purple.200"
borderColor={styles.container.borderColor}
>
<Flex
align="center"
@@ -75,8 +133,8 @@ const BreadcrumbNav = ({
{/* 筛选图标 */}
<HStack
spacing={2}
bg="purple.500"
color="white"
bg={styles.filterBadge.bg}
color={styles.filterBadge.color}
px={3}
py={1}
borderRadius="full"
@@ -90,15 +148,15 @@ const BreadcrumbNav = ({
{/* 首页入口 */}
<Tooltip label="返回全部概念" placement="top">
<Badge
colorScheme="gray"
{...(isDarkMode ? {} : { colorScheme: 'gray' })}
bg={isDarkMode ? styles.homeBadge.bg : undefined}
color={isDarkMode ? styles.homeBadge.color : undefined}
px={3}
py={1}
borderRadius="full"
cursor="pointer"
onClick={onClearFilter}
_hover={{
bg: 'gray.200',
}}
_hover={styles.homeBadge._hover}
display="flex"
alignItems="center"
gap={1}
@@ -111,12 +169,11 @@ const BreadcrumbNav = ({
{/* 面包屑路径 */}
{breadcrumbs.map((crumb, index) => (
<React.Fragment key={crumb.level}>
<Icon as={ChevronRightIcon} color="gray.400" boxSize={4} />
<Icon as={ChevronRightIcon} color={styles.chevron.color} boxSize={4} />
<Badge
colorScheme={
crumb.level === 'lv1' ? 'purple' :
crumb.level === 'lv2' ? 'blue' : 'cyan'
}
{...(isDarkMode ? {} : { colorScheme: styles.crumbBadge(crumb.level, index === breadcrumbs.length - 1).colorScheme })}
bg={isDarkMode ? styles.crumbBadge(crumb.level, index === breadcrumbs.length - 1).bg : undefined}
color={isDarkMode ? styles.crumbBadge(crumb.level, index === breadcrumbs.length - 1).color : undefined}
px={3}
py={1}
borderRadius="full"
@@ -140,21 +197,23 @@ const BreadcrumbNav = ({
<IconButton
size="sm"
icon={<FaTimes />}
colorScheme="red"
{...(isDarkMode ? {} : { colorScheme: 'red' })}
color={isDarkMode ? styles.clearBtn.color : undefined}
variant="ghost"
borderRadius="full"
onClick={onClearFilter}
aria-label="清除筛选"
_hover={isDarkMode ? styles.clearBtn._hover : undefined}
/>
</Tooltip>
</Flex>
{/* 筛选提示 */}
<Text fontSize="xs" color="gray.500" mt={2}>
<Text fontSize="xs" color={styles.hintText.color} mt={2}>
当前显示{breadcrumbs.map(b => b.label).join(' > ')}分类下的概念
<Text
as="span"
color="purple.600"
color={styles.linkText.color}
cursor="pointer"
fontWeight="medium"
onClick={onClearFilter}