feat: optimize email filtering with frontend-only search (#787)

* feat: optimize email filtering with frontend-only search

- Remove backend keyword parameter from mail APIs (breaking change)
- Implement frontend filtering on current page (20-100 items)
- Add message_id database index for UPDATE performance
- Support desktop and mobile responsive layouts
- Update API documentation and CHANGELOG

BREAKING CHANGE: /admin/mails and /user_api/mails no longer accept keyword parameter

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* fix: restore Mail ID query input in Index.vue

- Keep showMailIdQuery UI input for querying specific mail by ID
- Triggered when URL contains mail_id parameter

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Dream Hunter
2025-12-15 02:55:50 +08:00
committed by GitHub
co-authored by Claude Sonnet 4.5
parent 1836f931ee
commit e5f62d4713
17 changed files with 489 additions and 546 deletions
+26 -26
View File
@@ -13,11 +13,11 @@ importers:
version: 3.10.1
devDependencies:
'@types/node':
specifier: ^25.0.0
version: 25.0.0
specifier: ^25.0.2
version: 25.0.2
vitepress:
specifier: ^1.6.4
version: 1.6.4(@algolia/client-search@5.46.0)(@types/node@25.0.0)(postcss@8.5.6)(search-insights@2.13.0)(typescript@5.4.5)
version: 1.6.4(@algolia/client-search@5.46.0)(@types/node@25.0.2)(postcss@8.5.6)(search-insights@2.13.0)(typescript@5.4.5)
wrangler:
specifier: ^4.54.0
version: 4.54.0
@@ -484,8 +484,8 @@ packages:
cpu: [x64]
os: [win32]
'@iconify-json/simple-icons@1.2.62':
resolution: {integrity: sha512-GpWQ294d4lraB3D2eBSSMROh1x9uKgpmyereLlGzVQjGZ7lbeFzby2ywXxyp4vEODmTDyf1/4WcOYs/yH4rJ5Q==}
'@iconify-json/simple-icons@1.2.63':
resolution: {integrity: sha512-xZl2UWCwE58VlqZ+pDPmaUhE2tq8MVSTJRr4/9nzzHlDdjJ0Ud1VxNXPrwTSgESKY29iCQw3S0r2nJTSNNngHw==}
'@iconify/types@2.0.0':
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
@@ -605,14 +605,14 @@ packages:
'@jridgewell/trace-mapping@0.3.9':
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
'@poppinss/colors@4.1.5':
resolution: {integrity: sha512-FvdDqtcRCtz6hThExcFOgW0cWX+xwSMWcRuQe5ZEb2m7cVQOAVZOIMt+/v9RxGiD9/OY16qJBXK4CVKWAPalBw==}
'@poppinss/colors@4.1.6':
resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==}
'@poppinss/dumper@0.6.5':
resolution: {integrity: sha512-NBdYIb90J7LfOI32dOewKI1r7wnkiH6m920puQ3qHUeZkxNkQiFnXVWoE6YtFSv6QOiPPf7ys6i+HWWecDz7sw==}
'@poppinss/exception@1.2.2':
resolution: {integrity: sha512-m7bpKCD4QMlFCjA/nKTs23fuvoVFoA83brRKmObCUNmi/9tVu8Ve3w4YQAnJu4q3Tjf5fr685HYIC/IA2zHRSg==}
'@poppinss/exception@1.2.3':
resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==}
'@rollup/rollup-android-arm-eabi@4.53.3':
resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==}
@@ -773,8 +773,8 @@ packages:
'@types/mdurl@2.0.0':
resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
'@types/node@25.0.0':
resolution: {integrity: sha512-rl78HwuZlaDIUSeUKkmogkhebA+8K1Hy7tddZuJ3D0xV8pZSfsYGTsliGUol1JPzu9EKnTxPC4L1fiWouStRew==}
'@types/node@25.0.2':
resolution: {integrity: sha512-gWEkeiyYE4vqjON/+Obqcoeffmk0NF15WSBwSs7zwVA2bAbTaE0SJ7P0WNGoJn8uE7fiaV5a7dKYIJriEqOrmA==}
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
@@ -1645,7 +1645,7 @@ snapshots:
'@esbuild/win32-x64@0.27.0':
optional: true
'@iconify-json/simple-icons@1.2.62':
'@iconify-json/simple-icons@1.2.63':
dependencies:
'@iconify/types': 2.0.0
@@ -1735,17 +1735,17 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
'@poppinss/colors@4.1.5':
'@poppinss/colors@4.1.6':
dependencies:
kleur: 4.1.5
'@poppinss/dumper@0.6.5':
dependencies:
'@poppinss/colors': 4.1.5
'@poppinss/colors': 4.1.6
'@sindresorhus/is': 7.1.1
supports-color: 10.2.2
'@poppinss/exception@1.2.2': {}
'@poppinss/exception@1.2.3': {}
'@rollup/rollup-android-arm-eabi@4.53.3':
optional: true
@@ -1876,7 +1876,7 @@ snapshots:
'@types/mdurl@2.0.0': {}
'@types/node@25.0.0':
'@types/node@25.0.2':
dependencies:
undici-types: 7.16.0
@@ -1886,9 +1886,9 @@ snapshots:
'@ungap/structured-clone@1.3.0': {}
'@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@25.0.0))(vue@3.5.25(typescript@5.4.5))':
'@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@25.0.2))(vue@3.5.25(typescript@5.4.5))':
dependencies:
vite: 5.4.21(@types/node@25.0.0)
vite: 5.4.21(@types/node@25.0.2)
vue: 3.5.25(typescript@5.4.5)
'@vue/compiler-core@3.5.25':
@@ -2440,25 +2440,25 @@ snapshots:
'@types/unist': 3.0.3
vfile-message: 4.0.3
vite@5.4.21(@types/node@25.0.0):
vite@5.4.21(@types/node@25.0.2):
dependencies:
esbuild: 0.21.5
postcss: 8.5.6
rollup: 4.53.3
optionalDependencies:
'@types/node': 25.0.0
'@types/node': 25.0.2
fsevents: 2.3.3
vitepress@1.6.4(@algolia/client-search@5.46.0)(@types/node@25.0.0)(postcss@8.5.6)(search-insights@2.13.0)(typescript@5.4.5):
vitepress@1.6.4(@algolia/client-search@5.46.0)(@types/node@25.0.2)(postcss@8.5.6)(search-insights@2.13.0)(typescript@5.4.5):
dependencies:
'@docsearch/css': 3.8.2
'@docsearch/js': 3.8.2(@algolia/client-search@5.46.0)(search-insights@2.13.0)
'@iconify-json/simple-icons': 1.2.62
'@iconify-json/simple-icons': 1.2.63
'@shikijs/core': 2.5.0
'@shikijs/transformers': 2.5.0
'@shikijs/types': 2.5.0
'@types/markdown-it': 14.1.2
'@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@25.0.0))(vue@3.5.25(typescript@5.4.5))
'@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@25.0.2))(vue@3.5.25(typescript@5.4.5))
'@vue/devtools-api': 7.7.9
'@vue/shared': 3.5.25
'@vueuse/core': 12.8.2(typescript@5.4.5)
@@ -2467,7 +2467,7 @@ snapshots:
mark.js: 8.11.1
minisearch: 7.2.0
shiki: 2.5.0
vite: 5.4.21(@types/node@25.0.0)
vite: 5.4.21(@types/node@25.0.2)
vue: 3.5.25(typescript@5.4.5)
optionalDependencies:
postcss: 8.5.6
@@ -2536,12 +2536,12 @@ snapshots:
youch-core@0.3.3:
dependencies:
'@poppinss/exception': 1.2.2
'@poppinss/exception': 1.2.3
error-stack-parser-es: 1.0.5
youch@4.1.0-beta.10:
dependencies:
'@poppinss/colors': 4.1.5
'@poppinss/colors': 4.1.6
'@poppinss/dumper': 0.6.5
'@speed-highlight/core': 1.2.12
cookie: 1.1.1