diff --git a/components/ImageUploader.tsx b/components/ImageUploader.tsx index c1144af..1faad0d 100644 --- a/components/ImageUploader.tsx +++ b/components/ImageUploader.tsx @@ -1,8 +1,5 @@ import { useCallback, useEffect, useRef } from 'react'; -import { Box, IconButton, Typography } from '@mui/material'; -import ImageIcon from '@mui/icons-material/Image'; -import ClearIcon from '@mui/icons-material/Clear'; -import { qrCodePageStyles } from '@/config/pageTheme'; +import { Image, X } from 'lucide-react'; import { useSnackbar } from '@/components/GlobalSnackbar'; import { useLazyTranslation } from '@/utils/useLazyTranslation'; @@ -115,9 +112,14 @@ const ImageUploader = ({ }, [showMessage, handleFileChange, t]); return ( - - + {selectedFile ? ( - - + + - { e.stopPropagation(); handleClearFile(); }} - sx={qrCodePageStyles.CLEAR_BUTTON} + className="absolute -top-2 -right-2 w-6 h-6 bg-red-500 text-white rounded-full flex items-center justify-center hover:bg-red-600 transition-colors" > - - - - - {selectedFile.name} - - - {t('qrCode:clickToChange')} - - + + + + {selectedFile.name} + {t('qrCode:clickToChange')} + ) : ( <> - - - {t('qrCode:clickToUpload')} - - - {t('qrCode:supportFormats')} - + + {t('qrCode:clickToUpload')} + {t('qrCode:supportFormats')} > )} - + ); }; diff --git a/components/QrCodePreview.tsx b/components/QrCodePreview.tsx index 424397e..5828dec 100644 --- a/components/QrCodePreview.tsx +++ b/components/QrCodePreview.tsx @@ -1,7 +1,4 @@ -import { Box, Button, Typography } from '@mui/material'; -import DownloadIcon from '@mui/icons-material/Download'; -import ContentCopyIcon from '@mui/icons-material/ContentCopy'; -import { qrCodePageStyles } from '@/config/pageTheme'; +import { Download, Copy } from 'lucide-react'; import { useLazyTranslation } from '@/utils/useLazyTranslation'; interface QrCodePreviewProps { @@ -18,38 +15,36 @@ const QrCodePreview = ({ qrCodeDataUrl, onDownload, onCopy }: QrCodePreviewProps if (!qrCodeDataUrl) { return ( - - - {t('qrCode:qrCodeWillShow')} - - + + {t('qrCode:qrCodeWillShow')} + ); } return ( - - - - - } + + + + + + {t('qrCode:downloadButton')} - - } + + + {t('qrCode:copyQrButton')} - - - - + + + + ); }; diff --git a/pages/QrCode/__tests__/index.test.tsx b/pages/QrCode/__tests__/index.test.tsx index f8b9adf..a3ed8d9 100644 --- a/pages/QrCode/__tests__/index.test.tsx +++ b/pages/QrCode/__tests__/index.test.tsx @@ -85,7 +85,7 @@ describe('QrCodePage', () => { it('应该渲染双栏布局容器', () => { const { container } = render(); - const gridContainer = container.querySelector('.MuiGrid-container'); + const gridContainer = container.querySelector('.grid.grid-cols-1.md\\:grid-cols-2'); expect(gridContainer).toBeInTheDocument(); }); }); diff --git a/pages/QrCode/components/GeneratePanel.tsx b/pages/QrCode/components/GeneratePanel.tsx index d48835d..3e7e29a 100644 --- a/pages/QrCode/components/GeneratePanel.tsx +++ b/pages/QrCode/components/GeneratePanel.tsx @@ -1,4 +1,3 @@ -import { Grid } from '@mui/material'; import TextInputArea from '@/components/TextInputArea'; import QrCodePreview from '@/components/QrCodePreview'; import { useSnackbar } from '@/components/GlobalSnackbar'; @@ -11,8 +10,8 @@ export default function GeneratePanel() { const { generatorState, setTextToEncode, downloadQrCode, copyQrCode } = useQrCodeContext(); return ( - - + + - - + + - - + + ); } diff --git a/pages/QrCode/components/ParsePanel.tsx b/pages/QrCode/components/ParsePanel.tsx index a7414b6..c8d6e57 100644 --- a/pages/QrCode/components/ParsePanel.tsx +++ b/pages/QrCode/components/ParsePanel.tsx @@ -1,5 +1,4 @@ import { useEffect, useCallback } from 'react'; -import { Grid } from '@mui/material'; import TextInputArea from '@/components/TextInputArea'; import ImageUploader from '@/components/ImageUploader'; import { useSnackbar } from '@/components/GlobalSnackbar'; @@ -57,8 +56,8 @@ export default function ParsePanel() { }, [handlePaste]); return ( - - + + setParserState((prev) => ({ ...prev, dragging }))} /> - - + + - - + + ); } diff --git a/pages/QrCode/index.tsx b/pages/QrCode/index.tsx index be9262e..878514e 100644 --- a/pages/QrCode/index.tsx +++ b/pages/QrCode/index.tsx @@ -1,5 +1,4 @@ -import { Box, Container, useMediaQuery, useTheme } from '@mui/material'; -import QrCodeIcon from '@mui/icons-material/QrCode'; +import { QrCode } from 'lucide-react'; import PageHeader from '@/components/PageHeader'; import SwitchButtonGroup from '@/components/SwitchButtonGroup'; import { qrCodePageStyles } from '@/config/pageTheme'; @@ -12,8 +11,6 @@ import type { QrCodeMode } from './types'; export default function Index() { const { t } = useLazyTranslation('qrCode'); - const theme = useTheme(); - const isDesktop = useMediaQuery(theme.breakpoints.up('md')); const qrCode = useQrCode(); // 模式选项 @@ -24,15 +21,12 @@ export default function Index() { return ( - - + + } + icon={} iconColor={qrCodePageStyles.primaryColor} sx={{ mb: 2.5 }} /> @@ -45,8 +39,8 @@ export default function Index() { /> {qrCode.mode === 'generate' ? : } - - + + ); }