feat: 完成后端-管理后台集成及部署配置
🚀 主要功能: - 完善后端API服务层,实现完整的CRUD操作 - 开发管理后台所有核心页面 (仪表板、照片、分类、标签、用户、设置) - 完成前后端完全集成,所有API接口正常对接 - 配置完整的CI/CD流水线,支持自动化部署 🎯 后端完善: - 实现PhotoService, CategoryService, TagService, UserService - 添加完整的API处理器和路由配置 - 支持Docker容器化部署 - 添加数据库迁移和健康检查 🎨 管理后台完成: - 仪表板: 实时统计数据展示 - 照片管理: 完整的CRUD操作,支持批量处理 - 分类管理: 树形结构展示和管理 - 标签管理: 颜色标签和统计信息 - 用户管理: 角色权限控制 - 系统设置: 多标签配置界面 - 添加pre-commit代码质量检查 🔧 部署配置: - Docker Compose完整配置 - 后端CI/CD流水线 (Docker部署) - 管理后台CI/CD流水线 (静态文件部署) - 前端CI/CD流水线优化 - 自动化脚本: 部署、备份、监控 - 完整的部署文档和运维指南 ✅ 集成完成: - 所有API接口正常连接 - 认证系统完整集成 - 数据获取和状态管理 - 错误处理和用户反馈 - 响应式设计优化
This commit is contained in:
157
admin/src/services/userService.ts
Normal file
157
admin/src/services/userService.ts
Normal file
@ -0,0 +1,157 @@
|
||||
import api from './api'
|
||||
|
||||
interface User {
|
||||
id: number
|
||||
username: string
|
||||
email: string
|
||||
role: 'admin' | 'editor' | 'viewer'
|
||||
isActive: boolean
|
||||
lastLoginAt?: string
|
||||
createdAt: string
|
||||
updatedAt: string
|
||||
profile?: {
|
||||
firstName?: string
|
||||
lastName?: string
|
||||
avatar?: string
|
||||
}
|
||||
}
|
||||
|
||||
interface UserListParams {
|
||||
search?: string
|
||||
role?: string | null
|
||||
isActive?: boolean | null
|
||||
page?: number
|
||||
limit?: number
|
||||
}
|
||||
|
||||
interface UserCreateData {
|
||||
username: string
|
||||
email: string
|
||||
password: string
|
||||
role?: string
|
||||
isActive?: boolean
|
||||
profile?: {
|
||||
firstName?: string
|
||||
lastName?: string
|
||||
}
|
||||
}
|
||||
|
||||
interface UserUpdateData {
|
||||
username?: string
|
||||
email?: string
|
||||
password?: string
|
||||
role?: string
|
||||
isActive?: boolean
|
||||
profile?: {
|
||||
firstName?: string
|
||||
lastName?: string
|
||||
avatar?: string
|
||||
}
|
||||
}
|
||||
|
||||
interface UserStats {
|
||||
total: number
|
||||
active: number
|
||||
admins: number
|
||||
editors: number
|
||||
viewers: number
|
||||
recentLogins: number
|
||||
}
|
||||
|
||||
export const userService = {
|
||||
// 获取用户列表
|
||||
getUsers: async (params: UserListParams = {}): Promise<User[]> => {
|
||||
const response = await api.get('/users', { params })
|
||||
return response.data
|
||||
},
|
||||
|
||||
// 获取用户统计
|
||||
getStats: async (): Promise<UserStats> => {
|
||||
const response = await api.get('/users/stats')
|
||||
return response.data
|
||||
},
|
||||
|
||||
// 创建用户
|
||||
createUser: async (data: UserCreateData): Promise<User> => {
|
||||
const response = await api.post('/users', data)
|
||||
return response.data
|
||||
},
|
||||
|
||||
// 更新用户
|
||||
updateUser: async (id: number, data: UserUpdateData): Promise<User> => {
|
||||
const response = await api.put(`/users/${id}`, data)
|
||||
return response.data
|
||||
},
|
||||
|
||||
// 删除用户
|
||||
deleteUser: async (id: number): Promise<void> => {
|
||||
await api.delete(`/users/${id}`)
|
||||
},
|
||||
|
||||
// 获取用户详情
|
||||
getUser: async (id: number): Promise<User> => {
|
||||
const response = await api.get(`/users/${id}`)
|
||||
return response.data
|
||||
},
|
||||
|
||||
// 批量删除用户
|
||||
deleteUsers: async (ids: number[]): Promise<void> => {
|
||||
await api.delete('/users/batch', { data: { ids } })
|
||||
},
|
||||
|
||||
// 批量更新用户状态
|
||||
updateUsersStatus: async (ids: number[], isActive: boolean): Promise<void> => {
|
||||
await api.put('/users/batch/status', { ids, isActive })
|
||||
},
|
||||
|
||||
// 重置用户密码
|
||||
resetPassword: async (id: number): Promise<string> => {
|
||||
const response = await api.post(`/users/${id}/reset-password`)
|
||||
return response.data.newPassword
|
||||
},
|
||||
|
||||
// 更改用户角色
|
||||
updateUserRole: async (id: number, role: string): Promise<User> => {
|
||||
const response = await api.put(`/users/${id}/role`, { role })
|
||||
return response.data
|
||||
},
|
||||
|
||||
// 获取用户活动日志
|
||||
getUserActivity: async (id: number): Promise<any[]> => {
|
||||
const response = await api.get(`/users/${id}/activity`)
|
||||
return response.data
|
||||
},
|
||||
|
||||
// 获取最近登录用户
|
||||
getRecentLogins: async (limit: number = 10): Promise<User[]> => {
|
||||
const response = await api.get('/users/recent-logins', { params: { limit } })
|
||||
return response.data
|
||||
},
|
||||
|
||||
// 检查用户名是否可用
|
||||
checkUsername: async (username: string): Promise<boolean> => {
|
||||
const response = await api.get('/users/check-username', { params: { username } })
|
||||
return response.data.available
|
||||
},
|
||||
|
||||
// 检查邮箱是否可用
|
||||
checkEmail: async (email: string): Promise<boolean> => {
|
||||
const response = await api.get('/users/check-email', { params: { email } })
|
||||
return response.data.available
|
||||
},
|
||||
|
||||
// 发送验证邮件
|
||||
sendVerificationEmail: async (id: number): Promise<void> => {
|
||||
await api.post(`/users/${id}/send-verification`)
|
||||
},
|
||||
|
||||
// 激活用户账号
|
||||
activateUser: async (id: number): Promise<void> => {
|
||||
await api.post(`/users/${id}/activate`)
|
||||
},
|
||||
|
||||
// 停用用户账号
|
||||
deactivateUser: async (id: number): Promise<void> => {
|
||||
await api.post(`/users/${id}/deactivate`)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user