Files
TakeoutSaaS.AdminUI/src/api/tenant.ts
2026-01-29 04:21:09 +00:00

264 lines
6.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 租户IDSnowflake long → string
* @param data 更新数据tenantId 会以入参为准覆盖)
* @returns void后端 BaseResponse<void> 的 data 字段)
*
* 后端接口PUT /api/admin/v1/tenants/{tenantId}
* 预期响应BaseResponse<void>
* 预期错误码400参数错误、404租户不存在、409code 冲突)
* 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
}
})
}