From b4dfdcfe706557c8de7b99506b0df062c3450304 Mon Sep 17 00:00:00 2001 From: richarjiang Date: Thu, 14 Aug 2025 16:03:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=96=87=E7=AB=A0=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E5=B0=81=E9=9D=A2=E5=9B=BE=E7=89=87=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E5=8C=85=E6=8B=AC=E5=9C=A8=E6=95=B0=E6=8D=AE=E4=BC=A0?= =?UTF-8?q?=E8=BE=93=E5=AF=B9=E8=B1=A1=E3=80=81=E6=A8=A1=E5=9E=8B=E5=92=8C?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E4=B8=AD=E6=B7=BB=E5=8A=A0=E5=B0=81=E9=9D=A2?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E5=AD=97=E6=AE=B5=EF=BC=8C=E5=B9=B6=E5=9C=A8?= =?UTF-8?q?=E6=8E=A8=E8=8D=90=E6=9C=8D=E5=8A=A1=E4=B8=AD=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=96=87=E7=AB=A0=E5=8D=A1=E7=89=87=E4=BB=A5=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=B0=81=E9=9D=A2=E5=9B=BE=E7=89=87=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/articles/articles.service.ts | 1 + src/articles/dto/article.dto.ts | 4 ++++ src/articles/models/article.model.ts | 7 +++++++ src/recommendations/recommendations.service.ts | 4 +++- 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/articles/articles.service.ts b/src/articles/articles.service.ts index baac5c2..0991247 100644 --- a/src/articles/articles.service.ts +++ b/src/articles/articles.service.ts @@ -18,6 +18,7 @@ export class ArticlesService { title: dto.title, publishedDate: dto.publishedDate as any, htmlContent: dto.htmlContent, + coverImage: dto.coverImage, }); return { code: ResponseCode.SUCCESS, message: 'success', data: article.toJSON() as ArticleVo }; } diff --git a/src/articles/dto/article.dto.ts b/src/articles/dto/article.dto.ts index 888ab5e..07013bb 100644 --- a/src/articles/dto/article.dto.ts +++ b/src/articles/dto/article.dto.ts @@ -10,6 +10,9 @@ export class CreateArticleDto { @ApiProperty({ description: 'HTML 富文本内容' }) htmlContent!: string; + + @ApiProperty({ description: '封面图片' }) + coverImage!: string; } export class QueryArticlesDto { @@ -35,6 +38,7 @@ export interface ArticleVo { publishedDate: string; readCount: number; htmlContent: string; + coverImage: string; } export type CreateArticleResponseDto = BaseResponseDto; diff --git a/src/articles/models/article.model.ts b/src/articles/models/article.model.ts index 57295c8..aca4b8c 100644 --- a/src/articles/models/article.model.ts +++ b/src/articles/models/article.model.ts @@ -19,6 +19,13 @@ export class Article extends Model { }) declare title: string; + @Column({ + type: DataType.TEXT, + allowNull: false, + comment: '封面图片', + }) + declare coverImage: string; + @Column({ type: DataType.DATEONLY, allowNull: false, diff --git a/src/recommendations/recommendations.service.ts b/src/recommendations/recommendations.service.ts index a3a4a46..a36ea56 100644 --- a/src/recommendations/recommendations.service.ts +++ b/src/recommendations/recommendations.service.ts @@ -14,11 +14,13 @@ export class RecommendationsService { const limit = 10 // 取最新文章若干 - const articlesRes = await this.articlesService.query({ page: 1, pageSize: limit } as any); + const articlesRes = await this.articlesService.query({ page: 1, pageSize: limit }); const articleCards: RecommendationCard[] = (articlesRes.data.list || []).map(a => ({ id: `article-${a.id}`, type: RecommendationType.Article, title: a.title, + coverUrl: a.coverImage, + html: a.htmlContent, articleId: a.id, extra: { publishedDate: a.publishedDate, readCount: a.readCount }, }));