diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai index 41ac3aad..024fa25f 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai +++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai @@ -52,7 +52,7 @@ public class ${entityName} implements Serializable { <#if po.fieldName == primaryKeyField> @TableId(type = IdType.ASSIGN_ID) <#else> - <#if po.fieldDbType =='Date'> + <#if po.fieldDbType =='Date' || po.fieldDbType =='Datetime'> <#if po.classType=='date'> <#if !excel_ignore_arr?seq_contains("${po.fieldName}")> @Excel(name = "${po.filedComment}", width = 15, format = "yyyy-MM-dd") diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai index 3c329cbd..2c9aba3b 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai +++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai @@ -47,7 +47,7 @@ public class ${entityName} implements Serializable { <#if po.fieldName == primaryKeyField> @TableId(type = IdType.ASSIGN_ID) <#else> - <#if po.fieldDbType =='Date'> + <#if po.fieldDbType =='Date' || po.fieldDbType =='Datetime'> <#if po.classType=='date'> <#if !excel_ignore_arr?seq_contains("${po.fieldName}")> @Excel(name = "${po.filedComment}", width = 15, format = "yyyy-MM-dd") diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai index ba02b61d..cfc71297 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai +++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai @@ -48,7 +48,7 @@ public class ${subTab.entityName} implements Serializable { <#if po.fieldName == primaryKeyField> @TableId(type = IdType.ASSIGN_ID) <#else> - <#if po.fieldDbType =='Date'> + <#if po.fieldDbType =='Date' || po.fieldDbType =='Datetime'> <#if po.classType=='date'> <#if !excel_ignore_arr?seq_contains("${po.fieldName}")> @Excel(name = "${po.filedComment}", width = 15, format = "yyyy-MM-dd") diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai index c080ca15..c10a67f4 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai +++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai @@ -44,7 +44,7 @@ public class ${entityName}Page { /**${po.filedComment}*/ <#if po.fieldName == primaryKeyField> <#else> - <#if po.fieldDbType =='Date'> + <#if po.fieldDbType =='Date' || po.fieldDbType =='Datetime'> <#if po.classType=='date'> <#if !excel_ignore_arr?seq_contains("${po.fieldName}")> @Excel(name = "${po.filedComment}", width = 15, format = "yyyy-MM-dd") diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai index b86d19f9..ee6640a4 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai +++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai @@ -12,6 +12,7 @@ import javax.servlet.http.HttpServletResponse; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.util.oConvertUtils; +import org.jeecg.common.system.vo.SelectTreeModel; import ${bussiPackage}.${entityPackage}.entity.${entityName}; import ${bussiPackage}.${entityPackage}.service.I${entityName}Service; @@ -55,7 +56,7 @@ import org.jeecg.common.aspect.annotation.AutoLog; public class ${entityName}Controller extends JeecgController<${entityName}, I${entityName}Service>{ @Autowired private I${entityName}Service ${entityName?uncap_first}Service; - + /** * 分页列表查询 * @@ -94,6 +95,67 @@ public class ${entityName}Controller extends JeecgController<${entityName}, I${e } } + /** + * 【vue3专用】加载节点的子数据 + * + * @param pid + * @return + */ + @RequestMapping(value = "/loadTreeChildren", method = RequestMethod.GET) + public Result> loadTreeChildren(@RequestParam(name = "pid") String pid) { + Result> result = new Result<>(); + try { + List ls = ${entityName?uncap_first}Service.queryListByPid(pid); + result.setResult(ls); + result.setSuccess(true); + } catch (Exception e) { + e.printStackTrace(); + result.setMessage(e.getMessage()); + result.setSuccess(false); + } + return result; + } + + /** + * 【vue3专用】加载一级节点/如果是同步 则所有数据 + * + * @param async + * @param pcode + * @return + */ + @RequestMapping(value = "/loadTreeRoot", method = RequestMethod.GET) + public Result> loadTreeRoot(@RequestParam(name = "async") Boolean async, @RequestParam(name = "pcode") String pcode) { + Result> result = new Result<>(); + try { + List ls = ${entityName?uncap_first}Service.queryListByCode(pcode); + if (!async) { + loadAllChildren(ls); + } + result.setResult(ls); + result.setSuccess(true); + } catch (Exception e) { + e.printStackTrace(); + result.setMessage(e.getMessage()); + result.setSuccess(false); + } + return result; + } + + /** + * 【vue3专用】递归求子节点 同步加载用到 + * + * @param ls + */ + private void loadAllChildren(List ls) { + for (SelectTreeModel tsm : ls) { + List temp = ${entityName?uncap_first}Service.queryListByPid(tsm.getKey()); + if (temp != null && temp.size() > 0) { + tsm.setChildren(temp); + loadAllChildren(temp); + } + } + } + /** * 获取子数据 * @param ${entityName?uncap_first} diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai index 3da88916..dfcd1b32 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai +++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai @@ -48,7 +48,7 @@ public class ${entityName} implements Serializable { <#if po.fieldName == primaryKeyField> @TableId(type = IdType.ASSIGN_ID) <#else> - <#if po.fieldDbType =='Date'> + <#if po.fieldDbType =='Date' || po.fieldDbType =='Datetime'> <#if po.classType=='date'> <#if !excel_ignore_arr?seq_contains("${po.fieldName}")> @Excel(name = "${po.filedComment}", width = 15, format = "yyyy-MM-dd") diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai index 24a7f3ea..d894ff1b 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai +++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai @@ -1,8 +1,12 @@ package ${bussiPackage}.${entityPackage}.mapper; -import org.apache.ibatis.annotations.Param; -import ${bussiPackage}.${entityPackage}.entity.${entityName}; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.jeecg.common.system.vo.SelectTreeModel; +import ${bussiPackage}.${entityPackage}.entity.${entityName}; + +import java.util.List; +import java.util.Map; /** * @Description: ${tableVo.ftlDescription} @@ -19,4 +23,13 @@ public interface ${entityName}Mapper extends BaseMapper<${entityName}> { */ void updateTreeNodeStatus(@Param("id") String id,@Param("status") String status); + /** + * 【vue3专用】根据父级ID查询树节点数据 + * + * @param pid + * @param query + * @return + */ + List queryListByPid(@Param("pid") String pid, @Param("query") Map query); + } diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml index 273c582e..f224e0bf 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml +++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml @@ -1,8 +1,18 @@ <#assign hasChildrenField = ""> +<#assign pidFieldName = ""> +<#assign textFieldName = ""> <#list originalColumns as po> -<#if po.fieldDbName == tableVo.extendParams.hasChildren> -<#assign hasChildrenField = po.fieldName> - + <#if po.fieldDbName == tableVo.extendParams.hasChildren> + <#assign hasChildrenField = po.fieldName> + + <#-- begin 【vue3专用】 --> + <#if po.fieldDbName == tableVo.extendParams.pidField> + <#assign pidFieldName = po.fieldName> + + <#if po.fieldDbName == tableVo.extendParams.textField> + <#assign textFieldName = po.fieldName> + + <#-- end 【vue3专用】 --> @@ -12,4 +22,20 @@ update ${tableName} set ${Format.humpToUnderline(hasChildrenField)} = ${r'#'}{status} where id = ${r'#'}{id} + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai index 28490d45..701da1a9 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai +++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai @@ -1,5 +1,6 @@ package ${bussiPackage}.${entityPackage}.service; +import org.jeecg.common.system.vo.SelectTreeModel; import ${bussiPackage}.${entityPackage}.entity.${entityName}; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.common.exception.JeecgBootException; @@ -23,16 +24,51 @@ public interface I${entityName}Service extends IService<${entityName}> { /**树节点无子节点状态值*/ public static final String NOCHILD = "0"; - /**新增节点*/ + /** + * 新增节点 + * + * @param ${entityName?uncap_first} + */ void add${entityName}(${entityName} ${entityName?uncap_first}); - /**修改节点*/ + /** + * 修改节点 + * + * @param ${entityName?uncap_first} + * @throws JeecgBootException + */ void update${entityName}(${entityName} ${entityName?uncap_first}) throws JeecgBootException; - /**删除节点*/ + /** + * 删除节点 + * + * @param id + * @throws JeecgBootException + */ void delete${entityName}(String id) throws JeecgBootException; - /**查询所有数据,无分页*/ + /** + * 查询所有数据,无分页 + * + * @param queryWrapper + * @return List<${entityName}> + */ List<${entityName}> queryTreeListNoPage(QueryWrapper<${entityName}> queryWrapper); + /** + * 【vue3专用】根据父级编码加载分类字典的数据 + * + * @param parentCode + * @return + */ + List queryListByCode(String parentCode); + + /** + * 【vue3专用】根据pid查询子节点集合 + * + * @param pid + * @return + */ + List queryListByPid(String pid); + } diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai index 9dd2f019..33ef42f5 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai +++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai @@ -1,7 +1,9 @@ package ${bussiPackage}.${entityPackage}.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.util.oConvertUtils; +import org.jeecg.common.system.vo.SelectTreeModel; import ${bussiPackage}.${entityPackage}.entity.${entityName}; import ${bussiPackage}.${entityPackage}.mapper.${entityName}Mapper; import ${bussiPackage}.${entityPackage}.service.I${entityName}Service; @@ -84,8 +86,8 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $ String pidVal = ${entityName?uncap_first}.get${pidFieldName?cap_first}(); //查询此节点上一级是否还有其他子节点 List<${entityName}> dataList = baseMapper.selectList(new QueryWrapper<${entityName}>().eq("${tableVo.extendParams.pidField}", pidVal).notIn("id",Arrays.asList(idArr))); - if((dataList == null || dataList.size()==0) && !Arrays.asList(idArr).contains(pidVal) - && !sb.toString().contains(pidVal)){ + boolean flag = (dataList == null || dataList.size() == 0) && !Arrays.asList(idArr).contains(pidVal) && !sb.toString().contains(pidVal); + if(flag){ //如果当前节点原本有子节点 现在木有了,更新状态 sb.append(pidVal).append(","); } @@ -115,7 +117,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $ for(${entityName} data : dataList){ String pidVal = data.get${pidFieldName?cap_first}(); //递归查询子节点的根节点 - if(pidVal != null && !"0".equals(pidVal)){ + if(pidVal != null && !I${entityName}Service.NOCHILD.equals(pidVal)){ ${entityName} rootVal = this.getTreeRoot(pidVal); if(rootVal != null && !mapList.contains(rootVal)){ mapList.add(rootVal); @@ -128,7 +130,33 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $ } return mapList; } - + + @Override + public List queryListByCode(String parentCode) { + String pid = ROOT_PID_VALUE; + if (oConvertUtils.isNotEmpty(parentCode)) { + LambdaQueryWrapper<${entityName}> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(${entityName}::get${pidFieldName?cap_first}, parentCode); + List<${entityName}> list = baseMapper.selectList(queryWrapper); + if (list == null || list.size() == 0) { + throw new JeecgBootException("该编码【" + parentCode + "】不存在,请核实!"); + } + if (list.size() > 1) { + throw new JeecgBootException("该编码【" + parentCode + "】存在多个,请核实!"); + } + pid = list.get(0).getId(); + } + return baseMapper.queryListByPid(pid, null); + } + + @Override + public List queryListByPid(String pid) { + if (oConvertUtils.isEmpty(pid)) { + pid = ROOT_PID_VALUE; + } + return baseMapper.queryListByPid(pid, null); + } + /** * 根据所传pid查询旧的父级节点的子节点并修改相应状态值 * @param pid @@ -149,7 +177,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $ */ private ${entityName} getTreeRoot(String pidVal){ ${entityName} data = baseMapper.selectById(pidVal); - if(data != null && !"0".equals(data.get${pidFieldName?cap_first}())){ + if(data != null && !I${entityName}Service.ROOT_PID_VALUE.equals(data.get${pidFieldName?cap_first}())){ return this.getTreeRoot(data.get${pidFieldName?cap_first}()); }else{ return data; diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei index f1bbd7a3..7b1c4221 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei +++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/${entityName}List.vuei @@ -1,3 +1,13 @@ +<#assign pidFieldName = ""> +<#assign hasChildrenField = ""> +<#list originalColumns as po> + <#if po.fieldDbName == tableVo.extendParams.pidField> + <#assign pidFieldName = po.fieldName> + + <#if po.fieldDbName == tableVo.extendParams.hasChildren> + <#assign hasChildrenField = po.fieldName> + +