feat: add tenant theme templates

This commit is contained in:
Codex
2026-06-29 18:05:30 +08:00
parent a68b4ab9e3
commit ee578af1f6
16 changed files with 1239 additions and 24 deletions

View File

@@ -443,6 +443,41 @@ export interface TenantOverview {
publicConfig?: Record<string, unknown>;
}
export interface TenantThemeTemplateItem {
code: string;
name: string;
description?: string | null;
previewImageUrl?: string | null;
theme?: Record<string, unknown>;
publicAssets?: Record<string, unknown>;
sortOrder?: number;
status?: string;
updatedAt?: string;
}
export interface TenantThemeConfigItem {
tenantId?: string;
activeTemplateCode?: string | null;
activeTemplateName?: string | null;
activeTheme?: Record<string, unknown>;
activePublicAssets?: Record<string, unknown>;
draftTemplateCode?: string | null;
draftTemplateName?: string | null;
draftTheme?: Record<string, unknown>;
draftPublicAssets?: Record<string, unknown>;
status?: string;
publishedAt?: string | null;
updatedAt?: string | null;
brandingTheme?: Record<string, unknown>;
brandingPublicAssets?: Record<string, unknown>;
}
export interface TenantThemeDraftInput {
templateCode: string;
theme?: Record<string, unknown>;
publicAssets?: Record<string, unknown>;
}
export interface TenantPermissionCatalogItem {
key: string;
label?: string;
@@ -538,6 +573,28 @@ export async function loadTenantOverview() {
return apiRequest<{ item?: TenantOverview }>('/api/tenant-admin/overview');
}
export async function loadThemeTemplates() {
return apiRequest<{ items?: TenantThemeTemplateItem[] }>('/api/tenant-admin/theme-templates');
}
export async function loadTenantTheme() {
return apiRequest<{ item?: TenantThemeConfigItem }>('/api/tenant-admin/theme');
}
export async function previewTenantTheme(input: TenantThemeDraftInput) {
return apiRequest<{ item?: TenantThemeConfigItem & { templateName?: string | null } }>('/api/tenant-admin/theme/preview', {
method: 'POST',
body: input,
});
}
export async function publishTenantTheme(input: { useDraft?: boolean; templateCode?: string; theme?: Record<string, unknown>; publicAssets?: Record<string, unknown> } = {}) {
return apiRequest<{ item?: TenantThemeConfigItem & { templateName?: string | null } }>('/api/tenant-admin/theme/publish', {
method: 'POST',
body: { useDraft: input.useDraft ?? true, ...input },
});
}
export async function loadTenantPermissions() {
return apiRequest<TenantPermissionsPayload>('/api/tenant-admin/permissions');
}