feat: 完成Nacos配置优化和WebSocket集成

主要更新:
1. 统一所有微服务端口配置(19000-19008)
2. 为所有服务创建本地/测试/生产三套环境配置
3. 配置Nacos认证密码(本地:Peanut2817*#, 测试/生产:EmotionMuseum2025)
4. 优化网关路由配置,支持负载均衡和WebSocket
5. 新增emotion-websocket模块,支持实时聊天
6. 前端集成WebSocket,替代HTTP轮询
7. 添加配置验证和管理工具脚本

技术特性:
- 完整的环境隔离和服务发现
- WebSocket实时通信支持
- 负载均衡路由配置
- 跨域和安全配置
- 自动重连和心跳检测
This commit is contained in:
2025-07-17 18:10:45 +08:00
parent 9a3a8267b5
commit c77352877d
391 changed files with 46585 additions and 4294 deletions
+150
View File
@@ -0,0 +1,150 @@
import axios from 'axios'
import type {
LoginRequest,
LoginResponse,
RegisterRequest,
CaptchaResponse,
ApiResponse,
RefreshTokenRequest,
ChangePasswordRequest,
ForgotPasswordRequest,
ResetPasswordRequest,
UserInfo
} from '@/types/auth'
// 创建axios实例
const authApi = axios.create({
baseURL: '/api/auth',
timeout: 10000,
headers: {
'Content-Type': 'application/json'
}
})
// 请求拦截器
authApi.interceptors.request.use(
(config) => {
const token = localStorage.getItem('token')
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
},
(error) => {
return Promise.reject(error)
}
)
// 响应拦截器
authApi.interceptors.response.use(
(response) => {
return response.data
},
(error) => {
if (error.response?.status === 401) {
// token过期,清除本地存储并跳转到登录页
localStorage.removeItem('token')
localStorage.removeItem('userInfo')
window.location.href = '/login'
}
return Promise.reject(error.response?.data || error)
}
)
export const authService = {
// 获取验证码
async getCaptcha(): Promise<CaptchaResponse> {
const response: ApiResponse<CaptchaResponse> = await authApi.get('/captcha')
return response.data
},
// 用户登录
async login(data: LoginRequest): Promise<ApiResponse<LoginResponse>> {
return await authApi.post('/login', data)
},
// 用户注册
async register(data: RegisterRequest): Promise<ApiResponse<UserInfo>> {
return await authApi.post('/register', data)
},
// 刷新token
async refreshToken(data: RefreshTokenRequest): Promise<ApiResponse<LoginResponse>> {
return await authApi.post('/refresh-token', data)
},
// 用户登出
async logout(): Promise<ApiResponse<void>> {
return await authApi.post('/logout')
},
// 获取用户信息
async getUserInfo(): Promise<ApiResponse<UserInfo>> {
return await authApi.get('/user-info')
},
// 修改密码
async changePassword(data: ChangePasswordRequest): Promise<ApiResponse<void>> {
return await authApi.post('/change-password', data)
},
// 忘记密码
async forgotPassword(data: ForgotPasswordRequest): Promise<ApiResponse<void>> {
return await authApi.post('/forgot-password', data)
},
// 重置密码
async resetPassword(data: ResetPasswordRequest): Promise<ApiResponse<void>> {
return await authApi.post('/reset-password', data)
},
// 验证token有效性
async validateToken(): Promise<ApiResponse<boolean>> {
return await authApi.get('/validate-token')
},
// 检查账号是否存在
async checkAccount(account: string): Promise<ApiResponse<boolean>> {
return await authApi.get(`/check-account?account=${account}`)
}
}
// 工具函数
export const authUtils = {
// 获取token
getToken(): string | null {
return localStorage.getItem('token')
},
// 设置token
setToken(token: string): void {
localStorage.setItem('token', token)
},
// 移除token
removeToken(): void {
localStorage.removeItem('token')
localStorage.removeItem('userInfo')
},
// 获取用户信息
getUserInfo(): UserInfo | null {
const userInfo = localStorage.getItem('userInfo')
return userInfo ? JSON.parse(userInfo) : null
},
// 设置用户信息
setUserInfo(userInfo: UserInfo): void {
localStorage.setItem('userInfo', JSON.stringify(userInfo))
},
// 检查是否已登录
isLoggedIn(): boolean {
return !!this.getToken()
},
// 清除所有认证信息
clearAuth(): void {
this.removeToken()
}
}