diff --git a/src/main/java/com/budwk/app/zhgh/spread/service/impl/SpreadCategoryServiceImpl.java b/src/main/java/com/budwk/app/zhgh/spread/service/impl/SpreadCategoryServiceImpl.java index 3cf1d81c..b4670347 100644 --- a/src/main/java/com/budwk/app/zhgh/spread/service/impl/SpreadCategoryServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/spread/service/impl/SpreadCategoryServiceImpl.java @@ -36,7 +36,9 @@ public class SpreadCategoryServiceImpl extends BaseServiceImpl i public List categoryTree(boolean visibleOnly) { List categories = listCategories(visibleOnly); Map nodeMap = new LinkedHashMap<>(); + Map> childrenMap = new LinkedHashMap<>(); for (SpreadCategory category : categories) { + List children = new ArrayList<>(); nodeMap.put(category.getId(), NutMap.NEW() .addv("id", category.getId()) .addv("parentId", category.getParentId()) @@ -45,7 +47,8 @@ public class SpreadCategoryServiceImpl extends BaseServiceImpl i .addv("sortOrder", category.getSortOrder()) .addv("visible", category.getVisible()) .addv("slider", category.getSlider()) - .addv("children", new ArrayList<>())); + .addv("children", children)); + childrenMap.put(category.getId(), children); } List roots = new ArrayList<>(); for (NutMap node : nodeMap.values()) { @@ -53,9 +56,16 @@ public class SpreadCategoryServiceImpl extends BaseServiceImpl i if ("0".equals(parentId) || !nodeMap.containsKey(parentId)) { roots.add(node); } else { - nodeMap.get(parentId).getList("children", NutMap.class).add(node); + // 直接向节点持有的原始集合追加,避免 NutMap 类型转换后子节点没有写回。 + childrenMap.get(parentId).add(node); } } + // 叶子栏目不返回空 children,避免级联选择器误判为仍有下一级。 + nodeMap.forEach((id, node) -> { + if (childrenMap.get(id).isEmpty()) { + node.remove("children"); + } + }); return roots; } @@ -125,11 +135,9 @@ public class SpreadCategoryServiceImpl extends BaseServiceImpl i if (category == null || StrUtil.isBlank(category.getName())) { throw new RuntimeException("栏目名称不能为空"); } - if (StrUtil.isBlank(category.getCode())) { - throw new RuntimeException("栏目编码不能为空"); - } category.setName(category.getName().trim()); - category.setCode(category.getCode().trim()); + // 参考模块不要求用户维护栏目编码,空值统一保存为 NULL。 + category.setCode(StrUtil.isBlank(category.getCode()) ? null : category.getCode().trim()); category.setParentId(StrUtil.blankToDefault(category.getParentId(), "0")); if (category.getId() != null && category.getId().equals(category.getParentId())) { throw new RuntimeException("上级栏目不能选择自身"); @@ -146,17 +154,12 @@ public class SpreadCategoryServiceImpl extends BaseServiceImpl i Cnd nameCnd = Cnd.where("name", "=", category.getName()) .and("parentId", "=", category.getParentId()) .and("delFlag", "=", false); - Cnd codeCnd = Cnd.where("code", "=", category.getCode()).and("delFlag", "=", false); if (StrUtil.isNotBlank(excludeId)) { nameCnd.and("id", "!=", excludeId); - codeCnd.and("id", "!=", excludeId); } if (count(nameCnd) > 0) { throw new RuntimeException("同级栏目名称已存在"); } - if (count(codeCnd) > 0) { - throw new RuntimeException("栏目编码已存在"); - } } private void applyDefaults(SpreadCategory category) { diff --git a/src/main/resources/db/spread_create.sql b/src/main/resources/db/spread_create.sql index 44912c29..4bfda893 100644 --- a/src/main/resources/db/spread_create.sql +++ b/src/main/resources/db/spread_create.sql @@ -3,7 +3,7 @@ CREATE TABLE IF NOT EXISTS `spread_category` ( `id` varchar(32) NOT NULL COMMENT 'ID', `parentId` varchar(32) NOT NULL DEFAULT '0' COMMENT '父栏目ID,0表示顶级栏目', `name` varchar(100) NOT NULL COMMENT '栏目名称', - `code` varchar(50) NOT NULL COMMENT '栏目编码', + `code` varchar(50) DEFAULT NULL COMMENT '栏目编码(兼容预置数据,页面无需维护)', `sortOrder` int NOT NULL DEFAULT 255 COMMENT '排序,数值越小越靠前', `visible` tinyint NOT NULL DEFAULT 1 COMMENT '是否可见:0否,1是', `slider` tinyint NOT NULL DEFAULT 0 COMMENT '是否参与轮播:0否,1是', diff --git a/src/main/resources/views/platform/zhgh/spread/category/index.html b/src/main/resources/views/platform/zhgh/spread/category/index.html index a1922d9a..8582a479 100644 --- a/src/main/resources/views/platform/zhgh/spread/category/index.html +++ b/src/main/resources/views/platform/zhgh/spread/category/index.html @@ -6,11 +6,12 @@ layout("/layouts/platform.html"){ 新增栏目 + 展开全部 + 折叠全部 - -