xianyu-backend-java/frontend/vite.config.ts
“legeling” a501b10dde fix: 优化登录注册验证流程和修复多个前端问题
- 登录/注册:添加邮箱格式实时校验和错误提示
- 登录/注册:图形验证码输入4位后自动验证,验证成功后禁用输入框
- 登录/注册:优化验证码提示文案,明确验证流程
- 登录/注册:验证成功后输入框显示绿色边框和背景
- 登录/注册:改进发送验证码按钮的禁用逻辑和错误提示
- 商品管理:修复选中行在暗黑模式下的背景色显示
2025-12-07 01:37:13 +08:00

244 lines
6.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import path from 'path'
// https://vitejs.dev/config/
export default defineConfig(({ command }) => ({
plugins: [react()],
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
},
},
server: {
port: 3000,
proxy: {
'/api': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/login': {
target: 'http://localhost:8080',
changeOrigin: true,
bypass: (req) => {
if (req.method === 'GET') {
return '/index.html'
}
},
},
'/verify': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/cookies': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/delivery-rules': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/system-settings': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/logs': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/users': {
target: 'http://localhost:8080',
changeOrigin: true,
},
// 管理员API - 前端有 /admin/* 路由,需要区分浏览器访问和 API 请求
'/admin': {
target: 'http://localhost:8080',
changeOrigin: true,
bypass: (req) => {
// 浏览器直接访问Accept 包含 text/html让前端路由处理
if (req.headers.accept?.includes('text/html')) {
return '/index.html'
}
},
},
'/risk-control-logs': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/qrcode': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/generate-captcha': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/verify-captcha': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/send-verification-code': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/registration-status': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/login-info-status': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/register': {
target: 'http://localhost:8080',
changeOrigin: true,
bypass: (req) => {
// 浏览器直接访问时返回前端页面,只有 POST 请求才代理到后端
if (req.method === 'GET' && req.headers.accept?.includes('text/html')) {
return '/index.html'
}
},
},
'/itemReplays': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/item-reply': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/default-replies': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/ai-reply-settings': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/ai-reply-test': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/password-login': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/qr-login': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/keywords-export': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/keywords-import': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/default-reply': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/static': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/backup': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/project-stats': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/change-password': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/change-admin-password': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/logout': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/user-settings': {
target: 'http://localhost:8080',
changeOrigin: true,
},
'/search': {
target: 'http://localhost:8080',
changeOrigin: true,
},
// 商品管理 - 前端有 /items 路由,需要区分浏览器访问和 API 请求
'/items': {
target: 'http://localhost:8080',
changeOrigin: true,
bypass: (req) => {
// 只有浏览器直接访问 /items 路径时才返回前端页面
// API 请求通常是 /items/xxx 或带有 application/json
const isApiRequest = req.url !== '/items' ||
req.headers.accept?.includes('application/json') ||
req.headers['content-type']?.includes('application/json')
if (!isApiRequest && req.headers.accept?.includes('text/html')) {
return '/index.html'
}
},
},
// 卡券管理 - 前端有 /cards 路由
'/cards': {
target: 'http://localhost:8080',
changeOrigin: true,
bypass: (req) => {
if (req.headers.accept?.includes('text/html')) {
return '/index.html'
}
},
},
// 通知渠道 - 前端有 /notification-channels 路由
'/notification-channels': {
target: 'http://localhost:8080',
changeOrigin: true,
bypass: (req) => {
if (req.headers.accept?.includes('text/html')) {
return '/index.html'
}
},
},
// 消息通知 - 前端有 /message-notifications 路由
'/message-notifications': {
target: 'http://localhost:8080',
changeOrigin: true,
bypass: (req) => {
if (req.headers.accept?.includes('text/html')) {
return '/index.html'
}
},
},
// 关键词 - 前端有 /keywords 路由
'/keywords': {
target: 'http://localhost:8080',
changeOrigin: true,
bypass: (req) => {
if (req.headers.accept?.includes('text/html')) {
return '/index.html'
}
},
},
// 订单 API - 后端路径是 /api/orders
'/api/orders': {
target: 'http://localhost:8080',
changeOrigin: true,
},
},
},
build: {
outDir: 'dist',
// 资源放在 assets 目录,通过 base 配置让引用路径为 /static/assets/
assetsDir: 'assets',
},
// 只在生产构建时使用 /static/ 作为 base开发模式使用 /
base: command === 'build' ? '/static/' : '/',
}))