diff --git a/frontend/src/api/admin/settings.ts b/frontend/src/api/admin/settings.ts index 4fc49de6..84848cd0 100644 --- a/frontend/src/api/admin/settings.ts +++ b/frontend/src/api/admin/settings.ts @@ -850,6 +850,105 @@ export async function sendTestEmail( return data; } +// ==================== Email Template Settings ==================== + +export interface EmailTemplateOption { + value: string; + label?: string; + description?: string; +} + +export type EmailTemplateEventOption = string | EmailTemplateOption; + +export interface EmailTemplateSummary { + event: string; + locale: string; + subject: string; + is_custom?: boolean; + updated_at?: string; +} + +export interface EmailTemplateListResponse { + events: EmailTemplateEventOption[]; + locales: string[]; + templates?: EmailTemplateSummary[]; + placeholders?: string[]; +} + +export interface EmailTemplateDetail { + event: string; + locale: string; + subject: string; + html: string; + is_custom?: boolean; + updated_at?: string; + placeholders?: string[]; +} + +export interface UpdateEmailTemplateRequest { + subject: string; + html: string; +} + +export interface PreviewEmailTemplateRequest extends UpdateEmailTemplateRequest { + event: string; + locale: string; +} + +export interface EmailTemplatePreviewResponse { + subject: string; + html: string; +} + +export async function getEmailTemplates(): Promise { + const { data } = await apiClient.get( + "/admin/settings/email-templates", + ); + return data; +} + +export async function getEmailTemplate( + event: string, + locale: string, +): Promise { + const { data } = await apiClient.get( + `/admin/settings/email-templates/${encodeURIComponent(event)}/${encodeURIComponent(locale)}`, + ); + return data; +} + +export async function updateEmailTemplate( + event: string, + locale: string, + request: UpdateEmailTemplateRequest, +): Promise { + const { data } = await apiClient.put( + `/admin/settings/email-templates/${encodeURIComponent(event)}/${encodeURIComponent(locale)}`, + request, + ); + return data; +} + +export async function restoreOfficialEmailTemplate( + event: string, + locale: string, +): Promise { + const { data } = await apiClient.post( + `/admin/settings/email-templates/${encodeURIComponent(event)}/${encodeURIComponent(locale)}/restore-official`, + ); + return data; +} + +export async function previewEmailTemplate( + request: PreviewEmailTemplateRequest, +): Promise { + const { data } = await apiClient.post( + "/admin/settings/email-template-preview", + request, + ); + return data; +} + /** * Admin API Key status response */ @@ -1156,6 +1255,11 @@ export const settingsAPI = { updateSettings, testSmtpConnection, sendTestEmail, + getEmailTemplates, + getEmailTemplate, + updateEmailTemplate, + restoreOfficialEmailTemplate, + previewEmailTemplate, getAdminApiKey, regenerateAdminApiKey, deleteAdminApiKey, diff --git a/frontend/src/views/admin/SettingsView.vue b/frontend/src/views/admin/SettingsView.vue index 3f44a474..5da2d2e3 100644 --- a/frontend/src/views/admin/SettingsView.vue +++ b/frontend/src/views/admin/SettingsView.vue @@ -6193,6 +6193,9 @@ + + +
+
+
+
+

+ {{ t("admin.settings.emailTemplates.title") }} +

+

+ {{ t("admin.settings.emailTemplates.description") }} +

+
+
+ + + +
+
+ +
+
+ + {{ t("common.loading") }} +
+ + +
+
+ + +