使用jeesite框架写一个树结构的列表页面(一般的数据表结构)_asxyd58229的博客-程序员秘密

技术标签: ViewUI  前端  数据库  

先上图,看一下需要完成的列表页的效果:

以区域树结构列表为例子,大致就是要完成这个效果

 

  做这个需求之前,我大致阅读了jeesite官方文档( https://jeesite.gitee.io/docs/)关于树表结构的文档(带有树表两个字的都看了看),查看了jeesite框架中自带的页面实例,又查看了项目中一些运用了树结构的页面以及后台代码。

按照文档走,我搞不出来这个东西。。。,为什么别的页面用得好好的呢???最后发现,我的数据表结构有点问题,jeesite的这个树结构如果要直接使用的话,需要数据库表结构是符合jeesite所规定的结构。

直接上图:这是区域表的表结构,其他运用了树结构的表也跟它的结构一样

 

而我的表:

 那这可如何是好。

 

 

我向公司丽姐请教了这个问题,很快丽姐有了一个方案,那就是模仿数据库表结构建立相似的实体类,并且写一个方法为属性赋值

把这些树表结构中的关键字段全都声明到你自己的实体类中,然后写一个获取树表数据列表的方法:

/**
 * 查询树表数据
 */
@RequiresPermissions("article:articleCategory:view")
@RequestMapping(value = "listData")
@ResponseBody
public List<ArticleCategory> listData(ArticleCategory articleCategory,HttpServletRequest request, HttpServletResponse response) {
   /*模拟树结构表的数据*/
   if (StringUtils.isBlank(articleCategory.getParentCode())) {
      articleCategory.setParentId(0);
   }
   if(StringUtils.isNotBlank(articleCategory.getParentCode())){
      articleCategory.setParentId(Integer.parseInt(articleCategory.getParentCode()));
   }
   if (StringUtils.isNotBlank(articleCategory.getId())
         || StringUtils.isNotBlank(articleCategory.getTitle())){
      articleCategory.setParentId(null);//setParentId(null)
   }
   List<ArticleCategory> list = articleCategoryService.findList(articleCategory);
   if(list!=null&&list.size()>0){
      for(ArticleCategory category:list){
         category.setTreeLevel(category.getClassLayer()-1);
         category.setTreeSort(category.getSortId());
         //查询是否有子节点
         ArticleCategory where = new ArticleCategory();
         where.setParentId(Integer.parseInt(category.getId()));
         List<ArticleCategory> child = articleCategoryService.findList(where);
         if(child==null||child.size()<=0){
            category.setTreeLeaf("1");
         }else{
            category.setTreeLeaf("0");
         }
         ArticleCategory parent = articleCategoryService.get(category.getParentId().toString());
         category.setParent(parent);
         if(parent==null){
            category.setParentCodes("0,");
         }else{
            category.setParentCodes("0"+parent.getClassList());
         }
         category.setParentCode(category.getParentId().toString());
      }
   }
   return list;
}

 前端列表页面:

<script>
    // 初始化DataGrid对象
    $('#dataGrid').dataGrid({
        searchForm: $("#searchForm"),

        columnModel: [

            {header:'类别名称', name:'title', index:'a.title', width:150, align:"left", frozen:true, formatter: function(val, obj, row, act){
                return '( '+row.id+' ) '+'<a href="${ctx}/article/articleCategory/form?id='+row.id+'" class="btnList" data-title="编辑区域">'+(val||row.id)+'</a>';
            }},
         {header:'调用别名', name:'callIndex', index:'a.callIndex', width:200, align:"left"},
            {header:'主键', name:'id', editable:true, hidden:true,edittype:'text',},
            {header:'排序', name:'sortId', width:63, align:"center", formatter: function(val, obj, row, act){
                var html = [];
                <% if(hasPermi('sys:menu:edit')){ %>
                    html.push('<input type="hidden" name="ids" value="'+row.id+'"/>');
                    html.push('<input name="sorts" type="text" value="'+row.sortId+'" style="width:50px;height:19px;margin:0;padding:0;text-align:center;border:1px solid #ddd">');
                <% }else{ %>
                    html.push(row.sortId);
                <% } %>
                return html.join('');
            }},

         {header:'操作', name:'actions', width:130, sortable:false, title:false, formatter: function(val, obj, row, act){
                var actions = [];
                <% if(hasPermi('sys:area:edit')){ %>
                    actions.push('<a href="${ctx}/article/articleCategory/form?channelId='+row.channelId+'&parentId='+row.id+'" class="btnList" title="添加子类">添加子类</a>&nbsp;&nbsp;|&nbsp;&nbsp;');
                    actions.push('<a href="${ctx}/article/articleCategory/form?channelId='+row.channelId+'&id='+row.id+'" class="btnList" title="修改">修改&nbsp;|&nbsp;');
                    actions.push('<a href="${ctx}/article/articleCategory/delete?id='+row.id+'" class="btnList" title="删除" data-confirm="${text("本操作会删除本类别及下属子类别,是否继续?")}">删除&nbsp;');
                <% } %>
                return actions.join('');
            }}
        ],

        treeGrid: true,          // 启用树结构表格
        defaultExpandLevel: 0, // 默认展开的层次
        expandNodeClearPostData: 'title', // 展开节点清理请求参数数据(一般设置查询条件的字段属性,否则在查询后,不能展开子节点数据)  // 加载成功后执行事件

        ajaxSuccess: function(data){

        }
    });
</script>
最后,这样的思路虽然大致实现了树结构列表,但是会有一个错误,至今没有解决:

本来应该上级父类是箭头,最下级子类是圆圈,而我的全部都是箭头,点一下之后发送到后台controller方法中进行赋值之后才显示出来圆圈,问题大概知道出在哪但是不知道如何解决,
如果大家有好的方案,可以评论区留言给我


转载于:https://www.cnblogs.com/changingLife/p/11347699.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/asxyd58229/article/details/101662115

智能推荐

在linux上使用相机雷达标定程序-https://github.com/yuzhou42/camera-laser-calibration_可可~浩浩的博客-程序员秘密

按照readme.md的说明:# Usage## 1. camera calibtationIgnore this step if you are using the test data.```$rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.061 image:=/camera/image_col...

[CSU1806]Toll_weixin_30639719的博客-程序员秘密

题目:Toll传送门:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1806题目简述:给定n个点m条有向边的有向图,每条边的花费是$b_i * t +d_i$,设f(t)表示给定t的时候1-n的最小花费,求:${\frac{\int_0^T{f(t)dt}}{T}}$分析:(1)f(t)可用最短路求出来。(2)积分值可...

Allegro PCB典型设计流程_allegro设计流程_zbatp的博客-程序员秘密

PCB设计的初学者应该了解PCB设计的整个过程,这样有利于学习PCB设计,一般PCB设计可分为以下三个骤:1、前期准备(1)明确设计目标,规划PCB结构。(2)准备器件原理图库、PCB库和仿真模型库等。2、PCB设计(1)原理图设计PCB设计的最终目标是制作出满足使用要求的PCB电路板,原理图设计为这一目标服务。从某种意义上说,原理图设计是整个PCB设计成功与否的关键。原理

protel99se原理图的元件符号和封装符号大全_weixin_33688840的博客-程序员秘密

protel99se原理图的元件符号和封装符号大全protel99se常用元器件符号和封装符号晶振Crystal电容capttl门电路74XX发光二极管led运放LM339开关按钮SW-fb1.电阻固定电阻:RES半导体电阻:RESSEMT电位计;POT变电阻;RVAR可调电阻;res12.电容定值无极性电容;CAP...

MSDN for VB6.0 正常安装后仍然不能显示帮助的处理_vb6.0帮助文档_klima的博客-程序员秘密

操作系统:WIN10 64位VB6.0 安装完成后,安装MSDN可以正常完成,但是在编程环境下按F1,提示“不能显示帮助”。在网上搜索了一下,有VC下的处理方式,依样画葫芦,成功解决问题,实际是VSHELP.DLL没有注册的问题。1、搜索看系统是否有VSHELP.DLL文件 → 没有,在VB安装源文件目录下\OS\SYSTEM\中有, 还没有则去网站下载一个2、若是32位操作系统直接将下载的文件放在\Windows\System32若是64位操作系统则放在\Windows...

deepin 使用时遇到的问题与解决方案_driver 'pcspkr' e编辑_大卫不加班的博客-程序员秘密

第一次启动 出现 error :Driver ‘pcspkr’ is already registered解决:临时解决:按 E 进入编辑然后做出如图修改后F10 重启永久解决:进入系统后,打开 /boot/grub/grub.cfg,添加红框中代码sudo vi /boot/grub/grub.cfg搜索 quiet ,/quiet在第一个quiet 处做如下修改...

随便推点

论程序员成长的正确姿势,下载量瞬秒百万_普通网友的博客-程序员秘密

个人背景如标题所示,我的个人背景非常简单,Java开发经验1年半,学历普通,2本本科毕业,毕业后出来就一直在Crud,在公司每天重复的工作对我的技术提升并没有什么帮助,但小镇出来的我也深知自我努力的重要性,想要改变“命运”,没有背景没有资本的人,只能通过勤奋获得。幸运女神往往会眷顾努力的人,所以当好运降临到我头上,我并不诧异,目前拿到了美团30K的offer,下文也不说废话,主要分享我这次“美团面试经历”和“个人学习方法”,希望能帮助到你们。蚂蚁金服一面:分布式架构 50分钟个人介绍加项目介绍2

Android下拉刷新上拉加载控件,对所有View通用!_尼古拉斯.坦-全栈开发工程师的博客-程序员秘密

这个是我目前用的比较不错的Veiw刷新的Demo 推荐给大家,这里索性把原文评论一起粘贴过来方便大家学习 下面有原文链接  转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/38868463     前面写过一篇关于下拉刷新控件的博客下拉刷新控件终结者:PullToRefreshLayout,后来看到

C++自定义String类(简单的实现功能)_金戋小铺的博客-程序员秘密

#pragma once#include "targetver.h"#include#include #include #includeusing namespace std;#pragma onceclass MyString{public:MyString(char *s);MyString();MyString(MyString &

北大ACM - POJ试题分类(转自EXP)_weixin_38169562的博客-程序员秘密

北大ACM - POJ试题分类—— By EXP 2017-12-03转载请注明出处:by EXPhttp://exp-blog.com/2018/06/28/pid-38/相关推荐文:旧版POJ分类目录:http://exp-blog.com/2018/06/10/pid-136/ACM绝版资源公开( 参考书、模...

DoJa平台手机游戏的开发与移植_溺水的鱼的博客-程序员秘密

一,DoJa技术简介       简单的说,DoJa是日本最大的移动通讯公司NTT DoCoMo的专利技术。而i-mode是该公司对于移动通讯2.5G阶段的一种应用模式,这个技术覆盖很多方面。i-mode初始于1999年,而i-mode与JAVA结合诞生的i-appli服务初始于2001年,以JAVA为开发语言的i-mode被称为DoJa技术,DoJa技术实际上是基于CLDC规范之上的平台技术

MYSQL 获取当前时间加上一个月_mysql 月份+1_linybo2008的博客-程序员秘密

MYSQL 获取当前时间加上一个月(用于自动开通会员)update user set leverstart=now(),leverover=date_add(NOW(), interval 1 MONTH) where id=1;date_add() 增加date_sub()减少month 月份minute 分钟second 秒

推荐文章

热门文章

相关标签