当前位置:   article > 正文

[PrimeVue] 自定义分类树(TreeTable)-分类树构建_primevue tree 缩进

primevue tree 缩进

构建自定义分类树,本篇以构建区域分类树(area)为例:

一.area数据库表:

以下列举主要字段:主键id;区域唯一编码code; 区域名称name; 级别grade; 上级区域编码up_code(无上级填'0'); 短代码shorcode; 区域全名fullname.

二.前端样例

1.展示部分页面(分类树结构)

 2.前端PrimeVue代码(TreeTable部分)

  1. <div class="card" v-if="isreloaddata">
  2. <TreeTable :value="nodes" selectionMode="single" v-model:selectionKeys="selectedKey" @nodeSelect="onNodeSelect"
  3. v-model:expandedKeys="expandedKeys" :filters="filters" filterMode="lenient"
  4. :paginator="true"
  5. class="p-datatable-customers" :rows="10"
  6. paginatorTemplate="FirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink CurrentPageReport RowsPerPageDropdown"
  7. :rowsPerPageOptions="[10,25,50]">
  8. <Column field="code" header="区域编码" :expander="true">
  9. <template #filter>
  10. <InputText type="text" v-model="filters['code']" class="p-column-filter" placeholder="Filter by code"/>
  11. </template>
  12. </Column>
  13. <Column field="name" header="区域名称">
  14. <template #filter>
  15. <InputText type="text" v-model="filters['name']" class="p-column-filter" placeholder="Filter by name"/>
  16. </template>
  17. </Column>
  18. <Column field="fullname" header="区域全名">
  19. <template #filter>
  20. <InputText type="text" v-model="filters['fullname']" class="p-column-filter"
  21. placeholder="Filter by fullname"/>
  22. </template>
  23. </Column>
  24. <Column field="remark" header="备注">
  25. <template #filter>
  26. <InputText type="text" v-model="filters['remark']" class="p-column-filter"
  27. placeholder="Filter by remark"/>
  28. </template>
  29. </Column>
  30. </TreeTable>
  31. </div>

三.实体类定义

1.实体类(部分字段)

  1. @Data
  2. @TableName("t_area")
  3. public class Area{
  4. @TableId(value = "id",type = IdType.AUTO)
  5. private Long id;
  6. private String code;
  7. private String name;
  8. private Integer grade;
  9. private String upCode;
  10. private String shorcode;
  11. private String fullname;
  12. private String remark;
  13. }

2.VO类(部分字段)

  1. @Data
  2. public class AreaVO {
  3. private Long id;
  4. private String code;
  5. private String name;
  6. private String upCode;
  7. private Integer grade;
  8. private String fullname;
  9. private String shorcode;
  10. private String remark;
  11. private String key;
  12. // 详情对象
  13. private AreaDetail data;
  14. // 子对象
  15. private List<AreaVO> children =new ArrayList<>();
  16. public void add(AreaVO nodeVo){
  17. children.add(nodeVo);
  18. }
  19. }

3.详情对象(前台需要展示的内容)

  1. @Data
  2. public class AreaDetail {
  3. private String code;
  4. private String name;
  5. private String fullname;
  6. private String remark;
  7. }

四.后端代码

后端controller层,service层和dao层,使用Mybatis-puls.

1.后端层次

 2.controller层(获取分类树列表部分,简化判断)

  1. /**
  2. * 获取区域档案列表的控制器方法
  3. * @return 区域档案列表/0:查询失败
  4. */
  5. @PostMapping("get_list")
  6. public ResponseVo getAreaList(){
  7. List<AreaVO> areaList = areaService.getAreaList();
  8. return ResponseVo.ok(areaList);
  9. }

2.service层

  1. /**
  2. * 获取区域档案列表的业务逻辑
  3. * @return 区域档案列表
  4. */
  5. public List<AreaVO> getAreaList() {
  6. // 调用Mapper层原始数据查询
  7. List<AreaVO> nodeVoList = areaMapper.selectList(null).stream()
  8. // 过滤掉 code == upCode 的数据
  9. .filter(area -> !area.getCode().equals(area.getUpCode()))
  10. .map(areaInfo -> {
  11. AreaVO nodeVo = new AreaVO();
  12. // 同名属性赋值
  13. BeanUtils.copyProperties(areaInfo, nodeVo);
  14. nodeVo.setKey(areaInfo.getCode());
  15. AreaDetail data = new AreaDetail();
  16. BeanUtils.copyProperties(nodeVo, data);
  17. nodeVo.setData(data);
  18. return nodeVo;
  19. }).collect(Collectors.toList());
  20. return createTree(nodeVoList, "0");
  21. }

3.构建分类树的方法

  1. /**
  2. * 构建区域档案树的方法
  3. * @param nodeVoList 区域档案集合
  4. * @param root 构建根节点
  5. * @return 构建完成的区域档案集合
  6. */
  7. private List<AreaVO> createTree(List<AreaVO> nodeVoList, String root) {
  8. List<AreaVO> areaVOList = new ArrayList<>();
  9. for (AreaVO areaVO : nodeVoList) {
  10. if (areaVO.getUpCode().equals(root)) {
  11. areaVO.setChildren(createTree(nodeVoList, areaVO.getCode()));
  12. areaVOList.add(areaVO);
  13. }
  14. }
  15. return areaVOList;
  16. }

4.dao层

  1. /**
  2. * 区域 dao 层
  3. */
  4. @Mapper
  5. public interface AreaMapper extends BaseMapper<Area>{
  6. }

5.请求及返回样例

测试发起请求:

 请求地址:http://127.0.0.1:8080/easycharge/area/get_list

返回格式:

  1. {
  2. "flag": true,
  3. "code": 200,
  4. "data": [
  5. {
  6. "key": "1",
  7. "data": {
  8. "code": "1",
  9. "name": "山东",
  10. "fullname": "山东",
  11. "remark": ""
  12. },
  13. "id": 1,
  14. "children": [
  15. {
  16. "key": "1.1",
  17. "data": {
  18. "code": "1.1",
  19. "name": "济南",
  20. "fullname": "山东-济南",
  21. "remark": ""
  22. },
  23. "id": 2,
  24. "children": [
  25. {
  26. "key": "1.1.1",
  27. "data": {
  28. "code": "1.1.1",
  29. "name": "槐荫",
  30. "fullname": "山东-济南-槐荫",
  31. "remark": ""
  32. },
  33. "id": 3,
  34. "children": [
  35. {
  36. "key": "1.1.1.1",
  37. "data": {
  38. "code": "1.1.1.1",
  39. "name": "龙湖",
  40. "fullname": "山东-济南-槐荫-龙湖",
  41. "remark": ""
  42. },
  43. "id": 4,
  44. "children": []
  45. }
  46. ]
  47. }
  48. ]
  49. },
  50. {
  51. "key": "1.2",
  52. "data": {
  53. "code": "1.2",
  54. "name": "聊城",
  55. "fullname": "山东-聊城",
  56. "remark": ""
  57. },
  58. "id": 5,
  59. "children": [
  60. {
  61. "key": "1.2.1",
  62. "data": {
  63. "code": "1.2.1",
  64. "name": "东昌府",
  65. "fullname": "山东-聊城-东昌府",
  66. "remark": ""
  67. },
  68. "id": 6,
  69. "children": []
  70. }
  71. ]
  72. }
  73. ]
  74. }
  75. ]
  76. }

下期更新分类树的修改:分类树节点的修改会关联下级的修改,也需要考虑现有节点条件.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/179447
推荐阅读
相关标签
  

闽ICP备14008679号