From c60f9dffb7e411b79293b7690a24c6f109e47842 Mon Sep 17 00:00:00 2001 From: chenxing Date: Mon, 28 Sep 2026 12:32:34 +0800 Subject: [PATCH] =?UTF-8?q?[CMS-VISUAL]=20F3:=20=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E5=BD=A2=E6=80=81=E5=94=AF=E4=B8=80=E5=85=A5?= =?UTF-8?q?=E5=8F=A3=E6=94=B6=E6=95=9B=E5=88=B0=E5=B8=83=E5=B1=80=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E5=99=A8=E2=80=94=E2=80=94=E6=A0=8F=E7=9B=AE=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E7=BC=BA=E7=9C=81=20homeStyle=20=E6=97=B6=E4=BF=9D?= =?UTF-8?q?=E7=95=99=E5=AD=98=E9=87=8F=E5=80=BC=EF=BC=8C=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=E7=A7=BB=E9=99=A4=E8=AF=A5=E4=B8=8B=E6=8B=89?= =?UTF-8?q?=EF=BC=8819/19=20IT=20=E7=BB=BF=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yunhai/cms/service/impl/CategoryService.java | 7 ++++--- .../yunhai/cms/service/impl/CategoryServiceIT.java | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/yunhai/cms/service/impl/CategoryService.java b/src/main/java/com/yunhai/cms/service/impl/CategoryService.java index fa8bfba..48202b8 100644 --- a/src/main/java/com/yunhai/cms/service/impl/CategoryService.java +++ b/src/main/java/com/yunhai/cms/service/impl/CategoryService.java @@ -80,8 +80,7 @@ public class CategoryService { if (StringUtils.hasText(req.getHomeStyle()) && !HOME_STYLE_VALUES.contains(req.getHomeStyle())) { throw new BizException(ErrorCode.PARAM_ERROR, "首页展示形态非法:" + req.getHomeStyle() + "(仅支持 news_grid / media_focus)"); - } - CmsCategory category; + } CmsCategory category; if (req.getId() == null) { category = new CmsCategory(); category.setSiteId(site.getId()); @@ -98,7 +97,9 @@ public class CategoryService { category.setType(type.getCode()); category.setLinkUrl(req.getLinkUrl()); category.setTemplate(req.getTemplate()); - category.setHomeStyle(StringUtils.hasText(req.getHomeStyle()) ? req.getHomeStyle() : null); + // F3(docs/20 §四):「首页展示形态」唯一入口收敛到首页布局编辑器,栏目管理不再编辑该字段—— + // 入参缺省时保留已有值(存量数据不清除,无布局站点的回落渲染仍消费);显式传值仍校验(API 兼容) + category.setHomeStyle(StringUtils.hasText(req.getHomeStyle()) ? req.getHomeStyle() : category.getHomeStyle()); category.setContent(HtmlSanitizer.clean(req.getContent())); category.setSortNo(req.getSortNo() == null ? 0 : req.getSortNo()); category.setSeoTitle(req.getSeoTitle()); diff --git a/src/test/java/com/yunhai/cms/service/impl/CategoryServiceIT.java b/src/test/java/com/yunhai/cms/service/impl/CategoryServiceIT.java index 7a0fc00..b8d6c24 100644 --- a/src/test/java/com/yunhai/cms/service/impl/CategoryServiceIT.java +++ b/src/test/java/com/yunhai/cms/service/impl/CategoryServiceIT.java @@ -71,6 +71,20 @@ class CategoryServiceIT extends CmsIntegrationTestBase { .findFirst().orElseThrow(IllegalStateException::new).getHomeStyle()).isEqualTo("news_grid"); } + @Test + @DisplayName("docs/20 F3:编辑不带 homeStyle 时存量值保留(入口收敛到布局编辑器后不清数据)") + void save_homeStylePreservedWhenAbsent() { + CategorySaveRequest grid = req("形态栏目", 0, 1); + grid.setHomeStyle("news_grid"); + CategoryTreeNode created = categoryService.save(TestUsers.superAdmin(), grid); + + // 栏目管理已不再提交 homeStyle(F3 唯一入口=首页布局编辑器):再次保存仅改名称 + CategorySaveRequest edit = req("形态栏目改名", 0, 1); + edit.setId(created.getId()); + CategoryTreeNode updated = categoryService.save(TestUsers.superAdmin(), edit); + assertThat(updated.getHomeStyle()).isEqualTo("news_grid"); + } + @Test @DisplayName("docs/12:homeStyle 非法值被白名单拒绝") void save_homeStyleInvalidRejected() {