feat: 封面模板对接后端 CRUD API,移除 mock 数据
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 45s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 50s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 52s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m9s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m34s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 51s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 19s
AI Code Review / AI Code Review (pull_request) Failing after 1m54s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m52s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m23s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m45s
CI/CD Pipeline / CI Gate (pull_request) Successful in 6s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 44s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 1m15s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 910h16m14s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 910h17m29s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 910h16m14s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 910h17m30s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 910h16m14s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 910h16m15s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 910h16m15s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 910h16m15s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 910h16m15s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 910h17m35s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 910h19m11s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 910h17m31s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 910h19m13s
CI/CD Pipeline / PR Build Worker Image (pull_request) Failing after 910h17m36s
CI/CD Pipeline / PR Build API Image (pull_request) Failing after 910h17m42s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 910h19m15s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 910h51m46s

- 新增 api/cover-templates.ts:封装 GET/POST/PUT/DELETE /cover-templates
- useStep6Cover.ts:弹窗打开时 fetch 模板列表,CRUD 操作走 API
- CoverSettingsModal.tsx:增加 loading/error 状态展示 + 删除按钮(非系统模板)
- Step6CoverSettings.tsx:透传 loading/error/delete 属性
- constants.ts:删除 MOCK_COVER_TEMPLATES 硬编码数据
This commit is contained in:
xiaoxia
2026-08-09 17:06:45 +08:00
parent 1986a9f8a1
commit c2e2a16ed8
5 changed files with 196 additions and 72 deletions
+53
View File
@@ -0,0 +1,53 @@
/**
* 封面模板 CRUD API
* 后端路由: /api/v1/cover-templates
*/
import apiClient from "./client"
import type { CoverTemplate } from "@/pages/editing-planner/types"
export interface CoverTemplateListResponse {
items: CoverTemplate[]
total: number
}
export interface CoverTemplateCreateRequest {
name: string
config?: {
background_enabled?: boolean
background_color?: string
portrait_enabled?: boolean
title_text?: string
subtitle_text?: string
mask_enabled?: boolean
}
}
export type CoverTemplateUpdateRequest = Partial<CoverTemplateCreateRequest>
/** 获取封面模板列表 */
export async function fetchCoverTemplates(): Promise<CoverTemplateListResponse> {
const response = await apiClient.get<CoverTemplateListResponse>("/cover-templates")
return response.data
}
/** 创建封面模板 */
export async function createCoverTemplate(
data: CoverTemplateCreateRequest,
): Promise<CoverTemplate> {
const response = await apiClient.post<CoverTemplate>("/cover-templates", data)
return response.data
}
/** 更新封面模板 */
export async function updateCoverTemplate(
id: string,
data: CoverTemplateUpdateRequest,
): Promise<CoverTemplate> {
const response = await apiClient.put<CoverTemplate>(`/cover-templates/${id}`, data)
return response.data
}
/** 删除封面模板(系统模板不可删) */
export async function deleteCoverTemplate(id: string): Promise<void> {
await apiClient.delete(`/cover-templates/${id}`)
}