[CMS-VISUAL] F3: 首页展示形态唯一入口收敛到布局编辑器——栏目保存缺省 homeStyle 时保留存量值,管理弹窗移除该下拉(19/19 IT 绿)

This commit is contained in:
chenxing
2026-09-28 12:32:34 +08:00
parent 19e9c18c96
commit c60f9dffb7
2 changed files with 18 additions and 3 deletions
@@ -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());
@@ -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() {