diff --git a/apps/web-ele/src/api/fengling/index.ts b/apps/web-ele/src/api/fengling/index.ts new file mode 100644 index 0000000..890049a --- /dev/null +++ b/apps/web-ele/src/api/fengling/index.ts @@ -0,0 +1,6 @@ +export * from './log'; +export * from './oauth'; +export * from './role'; +export * from './tenant'; +export * from './user'; +export * from './typings'; diff --git a/apps/web-ele/src/api/fengling/log.ts b/apps/web-ele/src/api/fengling/log.ts new file mode 100644 index 0000000..a81ae82 --- /dev/null +++ b/apps/web-ele/src/api/fengling/log.ts @@ -0,0 +1,35 @@ +import type { FenglingApi } from './typings'; + +import { requestClient } from '#/api/request'; + +export namespace LogApi { + export async function getAuditLogList(params: { + page?: number + pageSize?: number + userId?: number + action?: string + resourceType?: string + startDate?: string + endDate?: string + }) { + return requestClient.get>( + '/logs/audit', + { params } + ); + } + + export async function getAccessLogList(params: { + page?: number + pageSize?: number + userId?: number + path?: string + statusCode?: number + startDate?: string + endDate?: string + }) { + return requestClient.get>( + '/logs/access', + { params } + ); + } +} diff --git a/apps/web-ele/src/api/fengling/oauth.ts b/apps/web-ele/src/api/fengling/oauth.ts new file mode 100644 index 0000000..9252b3c --- /dev/null +++ b/apps/web-ele/src/api/fengling/oauth.ts @@ -0,0 +1,45 @@ +import type { FenglingApi } from './typings'; + +import { requestClient } from '#/api/request'; + +export namespace OAuthApi { + export async function getClientList(params: { + page?: number + pageSize?: number + keyword?: string + status?: string + }) { + return requestClient.get>( + '/oauth/clients', + { params } + ); + } + + export async function getClientById(id: number) { + return requestClient.get(`/oauth/clients/${id}`); + } + + export async function createClient(data: FenglingApi.OAuth.CreateOAuthClientDto) { + return requestClient.post('/oauth/clients', data); + } + + export async function updateClient(id: number, data: FenglingApi.OAuth.UpdateOAuthClientDto) { + return requestClient.put(`/oauth/clients/${id}`, data); + } + + export async function deleteClient(id: number) { + return requestClient.delete(`/oauth/clients/${id}`); + } + + export async function regenerateClientSecret(id: number) { + return requestClient.post(`/oauth/clients/${id}/regenerate-secret`); + } + + export async function activateClient(id: number) { + return requestClient.post(`/oauth/clients/${id}/activate`); + } + + export async function deactivateClient(id: number) { + return requestClient.post(`/oauth/clients/${id}/deactivate`); + } +} diff --git a/apps/web-ele/src/api/fengling/role.ts b/apps/web-ele/src/api/fengling/role.ts new file mode 100644 index 0000000..e834b7a --- /dev/null +++ b/apps/web-ele/src/api/fengling/role.ts @@ -0,0 +1,36 @@ +import type { FenglingApi } from './typings'; + +import { requestClient } from '#/api/request'; + +export namespace RoleApi { + export async function getRoleList(params: { + page?: number + pageSize?: number + keyword?: string + }) { + return requestClient.get>( + '/roles', + { params } + ); + } + + export async function getRoleById(id: number) { + return requestClient.get(`/roles/${id}`); + } + + export async function createRole(data: FenglingApi.Role.CreateRoleDto) { + return requestClient.post('/roles', data); + } + + export async function updateRole(id: number, data: FenglingApi.Role.UpdateRoleDto) { + return requestClient.put(`/roles/${id}`, data); + } + + export async function deleteRole(id: number) { + return requestClient.delete(`/roles/${id}`); + } + + export async function getAllRoles() { + return requestClient.get('/roles/all'); + } +} diff --git a/apps/web-ele/src/api/fengling/tenant.ts b/apps/web-ele/src/api/fengling/tenant.ts new file mode 100644 index 0000000..82d2931 --- /dev/null +++ b/apps/web-ele/src/api/fengling/tenant.ts @@ -0,0 +1,55 @@ +import type { FenglingApi } from './typings'; + +import { requestClient } from '#/api/request'; + +export namespace TenantApi { + export async function getTenantList(params: { + page?: number + pageSize?: number + keyword?: string + status?: string + }) { + return requestClient.get>( + '/tenants', + { params } + ); + } + + export async function getTenantById(id: number) { + return requestClient.get(`/tenants/${id}`); + } + + export async function createTenant(data: FenglingApi.Tenant.CreateTenantDto) { + return requestClient.post('/tenants', data); + } + + export async function updateTenant(id: number, data: FenglingApi.Tenant.UpdateTenantDto) { + return requestClient.put(`/tenants/${id}`, data); + } + + export async function deleteTenant(id: number) { + return requestClient.delete(`/tenants/${id}`); + } + + export async function activateTenant(id: number) { + return requestClient.post(`/tenants/${id}/activate`); + } + + export async function deactivateTenant(id: number) { + return requestClient.post(`/tenants/${id}/deactivate`); + } + + export async function extendTenantExpiry(id: number, expiresAt: string) { + return requestClient.post(`/tenants/${id}/extend`, { expiresAt }); + } + + export async function getTenantUsers(id: number) { + return requestClient.get>( + `/tenants/${id}/users` + ); + } + + export async function getTenantStatistics(id: number) { + return requestClient.get(`/tenants/${id}/statistics`); + } +} diff --git a/apps/web-ele/src/api/fengling/typings.d.ts b/apps/web-ele/src/api/fengling/typings.d.ts new file mode 100644 index 0000000..af83075 --- /dev/null +++ b/apps/web-ele/src/api/fengling/typings.d.ts @@ -0,0 +1,177 @@ +export namespace FenglingApi { + export namespace Tenant { + export interface Tenant { + id: number + tenantId: string + name: string + contactName: string + contactEmail: string + contactPhone: string + maxUsers?: number + userCount: number + status: 'active' | 'inactive' | 'expired' + expiresAt?: string + description?: string + createdAt: string + } + + export interface CreateTenantDto { + tenantId: string + name: string + contactName: string + contactEmail: string + contactPhone: string + maxUsers?: number + expiresAt?: string + status: 'active' | 'inactive' + description?: string + } + + export interface UpdateTenantDto { + name?: string + contactName?: string + contactEmail?: string + contactPhone?: string + maxUsers?: number + expiresAt?: string + status?: 'active' | 'inactive' + description?: string + } + } + + export namespace User { + export interface User { + id: number + userName: string + email: string + realName?: string + tenantId?: string + roles: string[] + isActive: boolean + createdAt: string + } + + export interface CreateUserDto { + userName: string + email: string + realName?: string + password: string + tenantId?: string + roleIds: number[] + } + + export interface UpdateUserDto { + email?: string + realName?: string + isActive?: boolean + roleIds?: number[] + } + + export interface ResetPasswordDto { + newPassword: string + } + } + + export namespace Role { + export interface Role { + id: number + name: string + displayName: string + description?: string + permissions: string[] + createdAt: string + } + + export interface CreateRoleDto { + name: string + displayName: string + description?: string + permissions: string[] + } + + export interface UpdateRoleDto { + displayName?: string + description?: string + permissions?: string[] + } + } + + export namespace OAuth { + export interface OAuthClient { + id: number + clientId: string + displayName: string + redirectUris: string[] + postLogoutRedirectUris: string[] + scopes: string[] + grantTypes: string[] + clientType: 'confidential' | 'public' + consentType: 'explicit' | 'implicit' | 'external' + status: 'active' | 'inactive' + description?: string + createdAt: string + updatedAt: string + } + + export interface CreateOAuthClientDto { + clientId: string + displayName: string + clientSecret?: string + redirectUris: string[] + postLogoutRedirectUris: string[] + scopes: string[] + grantTypes: string[] + clientType?: 'confidential' | 'public' + consentType?: 'explicit' | 'implicit' | 'external' + status?: 'active' | 'inactive' + description?: string + } + + export interface UpdateOAuthClientDto { + displayName: string + redirectUris: string[] + postLogoutRedirectUris: string[] + scopes: string[] + grantTypes: string[] + clientType: 'confidential' | 'public' + consentType: 'explicit' | 'implicit' | 'external' + status: 'active' | 'inactive' + description?: string + } + } + + export namespace Log { + export interface AuditLog { + id: number + userId?: number + userName?: string + action: string + resourceType: string + resourceId?: string + details?: string + ipAddress?: string + userAgent?: string + createdAt: string + } + + export interface AccessLog { + id: number + userId?: number + userName?: string + path: string + method: string + statusCode: number + duration: number + ipAddress?: string + userAgent?: string + createdAt: string + } + } + + export interface PaginatedResponse { + items: T[] + totalCount: number + page: number + pageSize: number + } +} diff --git a/apps/web-ele/src/api/fengling/user.ts b/apps/web-ele/src/api/fengling/user.ts new file mode 100644 index 0000000..3bb7643 --- /dev/null +++ b/apps/web-ele/src/api/fengling/user.ts @@ -0,0 +1,38 @@ +import type { FenglingApi } from './typings'; + +import { requestClient } from '#/api/request'; + +export namespace UserApi { + export async function getUserList(params: { + page?: number + pageSize?: number + keyword?: string + tenantId?: string + isActive?: boolean + }) { + return requestClient.get>( + '/users', + { params } + ); + } + + export async function getUserById(id: number) { + return requestClient.get(`/users/${id}`); + } + + export async function createUser(data: FenglingApi.User.CreateUserDto) { + return requestClient.post('/users', data); + } + + export async function updateUser(id: number, data: FenglingApi.User.UpdateUserDto) { + return requestClient.put(`/users/${id}`, data); + } + + export async function deleteUser(id: number) { + return requestClient.delete(`/users/${id}`); + } + + export async function resetUserPassword(id: number, data: FenglingApi.User.ResetPasswordDto) { + return requestClient.post(`/users/${id}/reset-password`, data); + } +} diff --git a/apps/web-ele/src/api/index.ts b/apps/web-ele/src/api/index.ts index 4b0e041..9937061 100644 --- a/apps/web-ele/src/api/index.ts +++ b/apps/web-ele/src/api/index.ts @@ -1 +1,2 @@ export * from './core'; +export * from './fengling';