JeeSite 树型表通常用于存储分类,比如文章分类,存在树型结构。
但是,默认 ID 是手动输入的,当多次创建分类后,在某些情况下,会提示编码已存在,这时候还得再手动更改 ID。
树型表,通常有 ID,父ID,它用来存储层级关系,像下面这张表结构:
字段名 | 类型 | 备注 |
---|---|---|
parent_code | varchar(64) | 父级编号 |
parent_codes | varchar(1000) | 所有父级编号 |
tree_sort | decimal(10) | 本级排序号(升序) |
tree_sorts | varchar(1000) | 所有级别排序号 |
tree_leaf | char(1) | 是否最末级 |
tree_level | decimal(4) | 层次级别 |
tree_names | nvarchar(1000) | 全节点名 |
通常情况下,ID 字段默认不显示,只需要自动生成就可以了:
首页隐藏 编码字段,增加 hide 类。
<div class="row hide"> <div class="col-xs-12"> <div class="form-group"> <label class="control-label col-sm-2" title=""><span class="required ">*</span> ${text('类型编码')}:<i class="fa icon-question hide"></i></label> <div class="col-sm-4"> <#form:hidden path="isNewRecord"/> <#form:input path="categoryCode" maxlength="64" readonly="${!cmsfileCategory.isNewRecord}" class="form-control required abc"/> </div> </div> </div> </div>
控制器中 createNextNode 方法,修改生成 ID 规则为 IdGen.randomBase62(19):
/** * 创建并初始化下一个节点信息,如:排序号、默认值 */ @RequiresPermissions("category:cmsfileCategory:edit") @RequestMapping(value = "createNextNode") @ResponseBody public CmsfileCategory createNextNode(CmsfileCategory cmsfileCategory) { if (StringUtils.isNotBlank(cmsfileCategory.getParentCode())){ cmsfileCategory.setParent(cmsfileCategoryService.get(cmsfileCategory.getParentCode())); } if (cmsfileCategory.getIsNewRecord()) { CmsfileCategory where = new CmsfileCategory(); where.setParentCode(cmsfileCategory.getParentCode()); CmsfileCategory last = cmsfileCategoryService.getLastByParentCode(where); // 获取到下级最后一个节点 if (last != null){ cmsfileCategory.setTreeSort(last.getTreeSort() + 30); cmsfileCategory.setCategoryCode(IdGen.randomBase62(19)); }else if (cmsfileCategory.getParent() != null){ cmsfileCategory.setCategoryCode(IdGen.randomBase62(19)); } else { cmsfileCategory.setCategoryCode(IdGen.randomBase62(19)); } } // 以下设置表单默认数据 if (cmsfileCategory.getTreeSort() == null){ cmsfileCategory.setTreeSort(CmsfileCategory.DEFAULT_TREE_SORT); } return cmsfileCategory; }