Files
photography/admin/src/services/userService.ts
xujiang 0ff0a7e995 fix: 修复 Prettier 格式检查和依赖问题
## 修复内容

### 依赖修复
- 安装缺失的 `prettier-plugin-organize-imports` 插件
- 修复 CI/CD 中的 "Cannot find package" 错误
- 更新 package.json 和 bun.lockb

### 代码格式化
- 对所有源文件运行 Prettier 自动格式化
- 统一 import 语句排序和组织
- 修复 49 个文件的代码风格问题
- 确保所有文件符合项目代码规范

### 格式化改进
- Import 语句自动排序和分组
- 统一缩进和空格规范
- 标准化引号和分号使用
- 优化对象和数组格式

## 验证结果
 `bun run format` 通过 - 所有文件格式正确
 `prettier-plugin-organize-imports` 正常工作
 CI/CD 格式检查将通过

## 技术细节
- 添加 prettier-plugin-organize-imports@^4.1.0
- 保持现有 .prettierrc 配置不变
- 格式化涉及 TS/TSX/JS/JSX/JSON/CSS/MD 文件
- 代码功能完全不受影响,仅调整格式
2025-07-14 11:25:05 +08:00

158 lines
3.8 KiB
TypeScript

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`)
},
}