264 lines
6.9 KiB
TypeScript
264 lines
6.9 KiB
TypeScript
import api from '@/utils/http'
|
||
import { fetchTenantPackageList } from './tenant-package'
|
||
import type { QuotaUsageHistoryDto, UpdateTenantCommand } from '@/types/tenant'
|
||
|
||
/**
|
||
* 获取租户列表
|
||
* @param params 搜索参数
|
||
*/
|
||
export function fetchGetTenantList(params?: Partial<Api.Tenant.TenantListParams>) {
|
||
return api.get<Api.Tenant.TenantListResponse>({
|
||
url: '/api/admin/v1/tenants',
|
||
params
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 注册租户
|
||
*/
|
||
export function fetchRegisterTenant(data: Api.Tenant.RegisterTenantCommand) {
|
||
return api.post<Api.Tenant.TenantDto>({
|
||
url: '/api/admin/v1/tenants',
|
||
data
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 后台手动新增租户并直接入驻(创建租户 + 认证 + 订阅 + 管理员账号)
|
||
*/
|
||
export function fetchCreateTenantManually(data: Api.Tenant.CreateTenantManuallyCommand) {
|
||
return api.post<Api.Tenant.TenantDetailDto>({
|
||
url: '/api/admin/v1/tenants/manual',
|
||
data
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 获取租户详情(包含认证信息、订阅信息)
|
||
*/
|
||
export function fetchGetTenantDetail(tenantId: string, options?: { showErrorMessage?: boolean }) {
|
||
return api.get<Api.Tenant.TenantDetailDto>({
|
||
url: `/api/admin/v1/tenants/${tenantId}`,
|
||
showErrorMessage: options?.showErrorMessage
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 获取租户配额使用情况
|
||
*/
|
||
export function fetchGetTenantQuotaUsage(
|
||
tenantId: string,
|
||
options?: { showErrorMessage?: boolean }
|
||
) {
|
||
return api.get<Api.QuotaPackage.TenantQuotaUsageDto[]>({
|
||
url: `/api/admin/v1/tenants/${tenantId}/quota-usage`,
|
||
showErrorMessage: options?.showErrorMessage
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 获取租户配额使用历史
|
||
* @param tenantId 租户ID
|
||
* @param params 分页参数
|
||
*/
|
||
export function fetchGetTenantQuotaUsageHistory(
|
||
tenantId: string,
|
||
params?: { Page?: number; PageSize?: number }
|
||
) {
|
||
return api.get<Api.Common.PageResult<QuotaUsageHistoryDto>>({
|
||
url: `/api/admin/v1/tenants/${tenantId}/quota-usage-history`,
|
||
params
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 获取订阅信息(注意:该接口为 POST)
|
||
*/
|
||
export function fetchGetTenantSubscriptions(
|
||
tenantId: string,
|
||
options?: { showErrorMessage?: boolean }
|
||
) {
|
||
return api.post<Api.Tenant.TenantSubscriptionDto>({
|
||
url: `/api/admin/v1/tenants/${tenantId}/subscriptions`,
|
||
data: {},
|
||
showErrorMessage: options?.showErrorMessage
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 获取账单信息(分页,最近10条可传 Page=1 PageSize=10)
|
||
*/
|
||
export function fetchGetTenantBillings(
|
||
tenantId: string,
|
||
params: { Page?: number; PageSize?: number } = {},
|
||
options?: { showErrorMessage?: boolean }
|
||
) {
|
||
return api.get<Api.Common.PageResult<Api.Billing.BillingListDto>>({
|
||
url: `/api/admin/v1/tenants/${tenantId}/billings`,
|
||
params,
|
||
showErrorMessage: options?.showErrorMessage
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 更新租户信息(TD-001:待后端接口补充)
|
||
* @param tenantId 租户ID(Snowflake long → string)
|
||
* @param data 更新数据(tenantId 会以入参为准覆盖)
|
||
* @returns void(后端 BaseResponse<void> 的 data 字段)
|
||
*
|
||
* 后端接口:PUT /api/admin/v1/tenants/{tenantId}
|
||
* 预期响应:BaseResponse<void>
|
||
* 预期错误码:400(参数错误)、404(租户不存在)、409(code 冲突)
|
||
* TODO(TD-001): Swagger 中缺失该端点(当前可能返回 404/405),待后端补充后再联调验证
|
||
*/
|
||
export function fetchUpdateTenant(tenantId: string, data: UpdateTenantCommand) {
|
||
return api.put<void>({
|
||
url: `/api/admin/v1/tenants/${tenantId}`,
|
||
data: { ...data, tenantId },
|
||
showErrorMessage: false
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 获取租户套餐列表(兼容旧调用)
|
||
*/
|
||
export const fetchGetTenantPackages = fetchTenantPackageList
|
||
|
||
/**
|
||
* 审核租户
|
||
*/
|
||
export function fetchReviewTenant(
|
||
tenantId: string,
|
||
data: Omit<Api.Tenant.ReviewTenantCommand, 'tenantId'>
|
||
) {
|
||
return api.post<Api.Tenant.TenantDto>({
|
||
url: `/api/admin/v1/tenants/${tenantId}/review`,
|
||
data: { ...data, tenantId }
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 获取租户审核领取信息(未领取返回 null)
|
||
*/
|
||
export function fetchGetTenantReviewClaim(tenantId: string) {
|
||
return api.get<Api.Tenant.TenantReviewClaimDto | null>({
|
||
url: `/api/admin/v1/tenants/${tenantId}/review/claim`
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 领取租户审核
|
||
*/
|
||
export function fetchClaimTenantReview(tenantId: string) {
|
||
return api.post<Api.Tenant.TenantReviewClaimDto>({
|
||
url: `/api/admin/v1/tenants/${tenantId}/review/claim`
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 强制接管租户审核(仅超级管理员)
|
||
*/
|
||
export function fetchForceClaimTenantReview(tenantId: string) {
|
||
return api.post<Api.Tenant.TenantReviewClaimDto>({
|
||
url: `/api/admin/v1/tenants/${tenantId}/review/force-claim`
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 释放租户审核领取(仅领取人)
|
||
*/
|
||
export function fetchReleaseTenantReviewClaim(tenantId: string) {
|
||
return api.post<Api.Tenant.TenantReviewClaimDto | null>({
|
||
url: `/api/admin/v1/tenants/${tenantId}/review/release`
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 查询租户审核日志
|
||
*/
|
||
export function fetchGetTenantAuditLogs(
|
||
tenantId: string,
|
||
params: { page?: number; pageSize?: number } = {}
|
||
) {
|
||
return api.get<Api.Tenant.TenantAuditLogListResponse>({
|
||
url: `/api/admin/v1/tenants/${tenantId}/audits`,
|
||
params: {
|
||
page: params.page ?? 1,
|
||
pageSize: params.pageSize ?? 20
|
||
}
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 冻结租户(暂停服务)
|
||
*/
|
||
export function fetchFreezeTenant(
|
||
tenantId: string,
|
||
data: Omit<Api.Tenant.FreezeTenantCommand, 'tenantId'>
|
||
) {
|
||
return api.post<Api.Tenant.TenantDto>({
|
||
url: `/api/admin/v1/tenants/${tenantId}/freeze`,
|
||
data: { ...data, tenantId }
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 解冻租户(恢复服务)
|
||
*/
|
||
export function fetchUnfreezeTenant(
|
||
tenantId: string,
|
||
data: Omit<Api.Tenant.UnfreezeTenantCommand, 'tenantId'> = {}
|
||
) {
|
||
return api.post<Api.Tenant.TenantDto>({
|
||
url: `/api/admin/v1/tenants/${tenantId}/unfreeze`,
|
||
data: { ...data, tenantId }
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 延期/赠送租户订阅时长(按当前订阅套餐续费)
|
||
*/
|
||
export function fetchExtendTenantSubscription(
|
||
tenantId: string,
|
||
data: Omit<Api.Tenant.ExtendTenantSubscriptionCommand, 'tenantId'>
|
||
) {
|
||
return api.post<Api.Tenant.TenantSubscriptionDto>({
|
||
url: `/api/admin/v1/tenants/${tenantId}/subscriptions/extend`,
|
||
data: { ...data, tenantId }
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 伪装登录租户(返回租户主管理员的 Token)
|
||
*/
|
||
export function fetchImpersonateTenant(tenantId: string) {
|
||
return api.post<Api.Auth.TokenResponse>({
|
||
url: `/api/admin/v1/tenants/${tenantId}/impersonate`
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 生成租户主管理员重置密码链接(仅展示一次)
|
||
*/
|
||
export function fetchCreateTenantAdminResetLink(tenantId: string) {
|
||
return api.post<string>({
|
||
url: `/api/admin/v1/tenants/${tenantId}/admin/reset-link`
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 获取租户配额购买记录(分页)
|
||
*/
|
||
export function fetchGetTenantQuotaPurchases(
|
||
tenantId: string,
|
||
params: { Page?: number; PageSize?: number } = {}
|
||
) {
|
||
return api.get<Api.Common.PageResult<Api.QuotaPackage.TenantQuotaPurchaseDto>>({
|
||
url: `/api/admin/v1/tenants/${tenantId}/quota-purchases`,
|
||
params: {
|
||
Page: params.Page ?? 1,
|
||
PageSize: params.PageSize ?? 10
|
||
}
|
||
})
|
||
}
|