From fca0b5a78fe789ef1f800bc189b7c66c23de87f5 Mon Sep 17 00:00:00 2001 From: iven Date: Sun, 10 May 2026 19:14:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(health):=20=E6=96=B0=E5=A2=9E=E5=85=AC?= =?UTF-8?q?=E5=BC=80=E6=96=87=E7=AB=A0=E5=88=97=E8=A1=A8=E7=AB=AF=E7=82=B9?= =?UTF-8?q?=20/public/articles=20=E4=BE=9B=E5=B0=8F=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E8=AE=BF=E5=AE=A2=E9=A6=96=E9=A1=B5=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 访客首页文章列表调用 /health/articles 需要 JWT 认证导致 401。 新增 GET /public/articles?tenant_id=xxx 端点,强制只返回已发布文章, 无需认证。小程序访客首页改用此公开端点。 --- apps/miniprogram/src/pages/index/index.tsx | 4 ++-- crates/erp-health/src/dto/article_dto.rs | 2 ++ .../erp-health/src/handler/article_handler.rs | 24 +++++++++++++++++++ crates/erp-health/src/module.rs | 4 ++++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/apps/miniprogram/src/pages/index/index.tsx b/apps/miniprogram/src/pages/index/index.tsx index ac3f995..c0e7fae 100644 --- a/apps/miniprogram/src/pages/index/index.tsx +++ b/apps/miniprogram/src/pages/index/index.tsx @@ -60,8 +60,8 @@ function GuestHome({ modeClass }: { modeClass: string }) { try { const [bannerData, articleData] = await Promise.allSettled([ api.get('/public/banners', { tenant_id: tenantId }, 300_000), - api.get<{ data: Article[]; total: number }>('/health/articles', { - status: 'published', + api.get<{ data: Article[]; total: number }>('/public/articles', { + tenant_id: tenantId, page_size: 4, }, 300_000), ]); diff --git a/crates/erp-health/src/dto/article_dto.rs b/crates/erp-health/src/dto/article_dto.rs index 6ee950a..b38626d 100644 --- a/crates/erp-health/src/dto/article_dto.rs +++ b/crates/erp-health/src/dto/article_dto.rs @@ -55,6 +55,8 @@ pub struct ArticleListItem { #[derive(Debug, Clone, Deserialize, IntoParams)] pub struct ArticleListParams { + /// 公开端点必需:租户 ID + pub tenant_id: Option, pub page: Option, pub page_size: Option, pub category: Option, diff --git a/crates/erp-health/src/handler/article_handler.rs b/crates/erp-health/src/handler/article_handler.rs index 31b7f04..cd26c0a 100644 --- a/crates/erp-health/src/handler/article_handler.rs +++ b/crates/erp-health/src/handler/article_handler.rs @@ -48,6 +48,30 @@ where Ok(Json(ApiResponse::ok(result))) } +pub async fn list_public_articles( + State(state): State, + Query(params): Query, +) -> Result>>, AppError> { + let tenant_id = params + .tenant_id + .ok_or_else(|| AppError::Validation("tenant_id is required".into()))?; + let page = params.page.unwrap_or(1); + let page_size = params.page_size.unwrap_or(20); + let result = article_service::list_articles( + &state, + tenant_id, + page, + page_size, + params.category, + Some("published".to_string()), + params.category_id, + params.tag_id, + params.keyword, + ) + .await?; + Ok(Json(ApiResponse::ok(result))) +} + pub async fn get_article( State(state): State, Extension(ctx): Extension, diff --git a/crates/erp-health/src/module.rs b/crates/erp-health/src/module.rs index a7dda3c..4166cd6 100644 --- a/crates/erp-health/src/module.rs +++ b/crates/erp-health/src/module.rs @@ -157,6 +157,10 @@ impl HealthModule { "/public/banners", axum::routing::get(banner_handler::list_public_banners), ) + .route( + "/public/articles", + axum::routing::get(article_handler::list_public_articles), + ) } /// FHIR R4 只读路由(使用 OAuth client_credentials 认证)