admin.ts 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  1. import request from './request'
  2. import type { ApiResponse } from '@/types/auth'
  3. export interface SystemStats {
  4. total_users: number
  5. active_users: number
  6. new_users_today: number
  7. total_apps: number
  8. active_apps: number
  9. new_apps_today: number
  10. active_tokens: number
  11. today_requests: number
  12. requests_change_percent: number
  13. uptime: string
  14. cpu_usage: number
  15. memory_usage: number
  16. }
  17. export interface UserManagement {
  18. id: string
  19. username: string
  20. email: string
  21. phone?: string
  22. is_active: boolean
  23. is_superuser: boolean
  24. last_login_at?: string
  25. created_at: string
  26. login_count: number
  27. app_count: number
  28. }
  29. export interface AppManagement {
  30. id: string
  31. name: string
  32. app_key: string
  33. description?: string
  34. is_active: boolean
  35. is_trusted: boolean
  36. created_by: string
  37. creator_username: string
  38. created_at: string
  39. user_count: number
  40. request_count: number
  41. }
  42. export interface SystemLog {
  43. id: string
  44. level: string
  45. message: string
  46. module: string
  47. user_id?: string
  48. username?: string
  49. ip_address?: string
  50. created_at: string
  51. extra_data?: Record<string, any>
  52. }
  53. export interface SecurityEvent {
  54. id: string
  55. event_type: string
  56. severity: string
  57. title: string
  58. description: string
  59. user_id?: string
  60. username?: string
  61. ip_address: string
  62. user_agent?: string
  63. created_at: string
  64. handled: boolean
  65. }
  66. export interface SystemConfig {
  67. // 基本设置
  68. site_name: string
  69. site_description: string
  70. site_logo?: string
  71. // 安全设置
  72. password_min_length: number
  73. password_require_uppercase: boolean
  74. password_require_lowercase: boolean
  75. password_require_numbers: boolean
  76. password_require_symbols: boolean
  77. login_max_attempts: number
  78. login_lockout_duration: number
  79. // 令牌设置
  80. default_access_token_expires: number
  81. default_refresh_token_expires: number
  82. max_token_lifetime: number
  83. // 邮件设置
  84. email_enabled: boolean
  85. smtp_host?: string
  86. smtp_port?: number
  87. smtp_username?: string
  88. smtp_password?: string
  89. smtp_use_tls: boolean
  90. // 其他设置
  91. registration_enabled: boolean
  92. email_verification_required: boolean
  93. admin_approval_required: boolean
  94. }
  95. export const adminApi = {
  96. // 获取系统统计
  97. getSystemStats(): Promise<ApiResponse<SystemStats>> {
  98. return request.get('/api/v1/system/admin/stats')
  99. },
  100. // 获取用户列表(管理员视图)
  101. getUsers(params?: {
  102. page?: number
  103. page_size?: number
  104. keyword?: string
  105. status?: string
  106. role?: string
  107. start_date?: string
  108. end_date?: string
  109. }): Promise<ApiResponse<{
  110. items: UserManagement[]
  111. total: number
  112. page: number
  113. page_size: number
  114. }>> {
  115. return request.get('/api/v1/system/admin/users', { params })
  116. },
  117. // 创建用户
  118. createUser(data: {
  119. username: string
  120. email: string
  121. password: string
  122. phone?: string
  123. is_superuser?: boolean
  124. }): Promise<ApiResponse<UserManagement>> {
  125. return request.post('/api/v1/system/admin/users', data)
  126. },
  127. // 更新用户
  128. updateUser(userId: string, data: {
  129. email?: string
  130. phone?: string
  131. is_active?: boolean
  132. is_superuser?: boolean
  133. }): Promise<ApiResponse<UserManagement>> {
  134. return request.put(`/api/v1/system/admin/users/${userId}`, data)
  135. },
  136. // 删除用户
  137. deleteUser(userId: string): Promise<ApiResponse> {
  138. return request.delete(`/api/v1/system/admin/users/${userId}`)
  139. },
  140. // 重置用户密码
  141. resetUserPassword(userId: string, newPassword: string): Promise<ApiResponse> {
  142. return request.put(`/api/v1/system/admin/users/${userId}/password`, {
  143. new_password: newPassword
  144. })
  145. },
  146. // 强制用户下线
  147. forceUserLogout(userId: string): Promise<ApiResponse> {
  148. return request.post(`/api/v1/system/admin/users/${userId}/force-logout`)
  149. },
  150. // 获取应用列表(管理员视图)
  151. getApps(params?: {
  152. page?: number
  153. page_size?: number
  154. keyword?: string
  155. status?: string
  156. creator?: string
  157. start_date?: string
  158. end_date?: string
  159. }): Promise<ApiResponse<{
  160. items: AppManagement[]
  161. total: number
  162. page: number
  163. page_size: number
  164. }>> {
  165. return request.get('/api/v1/system/admin/apps', { params })
  166. },
  167. // 审核应用
  168. approveApp(appId: string, approved: boolean, reason?: string): Promise<ApiResponse> {
  169. return request.put(`/api/v1/system/admin/apps/${appId}/approve`, {
  170. approved,
  171. reason
  172. })
  173. },
  174. // 获取系统日志
  175. getSystemLogs(params?: {
  176. page?: number
  177. page_size?: number
  178. level?: string
  179. module?: string
  180. start_time?: string
  181. end_time?: string
  182. keyword?: string
  183. }): Promise<ApiResponse<{
  184. items: SystemLog[]
  185. total: number
  186. page: number
  187. page_size: number
  188. }>> {
  189. return request.get('/api/v1/system/admin/logs', { params })
  190. },
  191. // 获取安全事件
  192. getSecurityEvents(params?: {
  193. page?: number
  194. page_size?: number
  195. event_type?: string
  196. severity?: string
  197. handled?: boolean
  198. start_time?: string
  199. end_time?: string
  200. }): Promise<ApiResponse<{
  201. items: SecurityEvent[]
  202. total: number
  203. page: number
  204. page_size: number
  205. }>> {
  206. return request.get('/api/v1/system/admin/security/events', { params })
  207. },
  208. // 处理安全事件
  209. handleSecurityEvent(eventId: string, action: string, note?: string): Promise<ApiResponse> {
  210. return request.put(`/api/v1/system/admin/security/events/${eventId}`, {
  211. action,
  212. note
  213. })
  214. },
  215. // 获取系统配置
  216. getSystemConfig(): Promise<ApiResponse<SystemConfig>> {
  217. return request.get('/api/v1/system/admin/config')
  218. },
  219. // 更新系统配置
  220. updateSystemConfig(config: Partial<SystemConfig>): Promise<ApiResponse> {
  221. return request.put('/api/v1/system/admin/config', config)
  222. },
  223. // 系统备份
  224. createBackup(description?: string): Promise<ApiResponse<{ backup_id: string }>> {
  225. return request.post('/api/v1/system/admin/backup', { description })
  226. },
  227. // 获取备份列表
  228. getBackups(): Promise<ApiResponse<Array<{
  229. id: string
  230. description: string
  231. size: number
  232. created_at: string
  233. }>>> {
  234. return request.get('/api/v1/system/admin/backups')
  235. },
  236. // 下载备份
  237. downloadBackup(backupId: string): Promise<Blob> {
  238. return request.get(`/api/v1/system/admin/backups/${backupId}/download`, {
  239. responseType: 'blob'
  240. })
  241. },
  242. // 数据导出
  243. exportData(type: 'users' | 'apps' | 'logs', format: 'csv' | 'json', filters?: Record<string, any>): Promise<Blob> {
  244. return request.post(`/api/v1/system/admin/export/${type}`, {
  245. format,
  246. filters
  247. }, {
  248. responseType: 'blob'
  249. })
  250. },
  251. // 清理过期数据
  252. cleanupExpiredData(types: string[]): Promise<ApiResponse<{
  253. cleaned_count: number
  254. types: string[]
  255. }>> {
  256. return request.post('/api/v1/system/admin/cleanup', { types })
  257. }
  258. }