feat: add cover image functionality for articles

- Implemented `resolveApiURL` function to handle various URL formats.
- Updated `ArticleDetail` and `UpdateArticleRequest` interfaces to include `cover_asset_url`.
- Enhanced `ArticleEditorView` to manage cover image uploads, including a new `CoverPickerModal` component.
- Added cover image requirements logic in `cover-requirements.ts` to enforce platform-specific cover image rules.
- Modified backend services to handle cover image uploads and validations, including checks for required cover images for specific platforms.
- Improved error handling for cover image requirements during article publishing.
This commit is contained in:
2026-04-07 09:19:03 +08:00
parent 1e844704e4
commit 9f721f6088
13 changed files with 1360 additions and 129 deletions
+22 -1
View File
@@ -96,6 +96,24 @@ export function getApiBaseURL(): string {
return "";
}
export function resolveApiURL(value?: string | null): string {
const trimmed = String(value ?? "").trim();
if (!trimmed) {
return "";
}
if (/^https?:\/\//i.test(trimmed)) {
return trimmed;
}
if (/^\/\//.test(trimmed)) {
return `https:${trimmed}`;
}
const apiBaseURL = getApiBaseURL();
if (!apiBaseURL) {
return trimmed;
}
return new URL(trimmed, apiBaseURL.endsWith("/") ? apiBaseURL : `${apiBaseURL}/`).toString();
}
export const apiClient = createApiClient({
baseURL,
auth: {
@@ -229,7 +247,10 @@ export const articlesApi = {
formData,
);
return response.data.data;
return {
...response.data.data,
url: resolveApiURL(response.data.data.url),
};
},
versions(id: number) {
return apiClient.get<ArticleVersion[]>(`/api/tenant/articles/${id}/versions`);