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() {