关于博客中使用的Guns版本问题请先阅读 Guns二次开发目录
紧接上一篇博客 Guns二次开发(七):商品分类管理之【查】字诀(1)
3、状态字段的字典解析
(1)添加字典
(2)包装列表查询类,对状态字段进行包装
涉及到的类文件的目录结构:
CategoryController.java 类中修改的内容:
/**
* 获取分类管理列表
*/
@RequestMapping(value = "/list")
@ResponseBody
public Object list(String condition) {
List<Map<String, Object>> list = categoryService.selectMaps(null);
return new CategoryWrapper(list).wrap();
}
CategoryWrapper.java 类
package cn.stylefeng.guns.elephish.wrapper;
import cn.stylefeng.guns.core.common.constant.factory.ConstantFactory;
import cn.stylefeng.guns.elephish.constants.WrapperDictNameConstant;
import cn.stylefeng.roses.core.base.warpper.BaseControllerWrapper;
import java.util.List;
import java.util.Map;
/**
* 商品分类管理的包装类
*/
public class CategoryWrapper extends BaseControllerWrapper {
public CategoryWrapper(List<Map<String, Object>> multi) {
super(multi);
}
/**
* 此处自定义添加需要包装的字段的字典信息
*/
@Override
protected void wrapTheMap(Map<String, Object> map) {
//状态名称
map.put("statusName", ConstantFactory.me().getDictById(
WrapperDictNameConstant.MALL_CATEGORY_STATUS_ID, map.get("status").toString()));
}
}
WrapperDictNameConstant.java 类
package cn.stylefeng.guns.elephish.constants;
/**
*
* 字典包装类的字典名称常量
*
*/
public interface WrapperDictNameConstant {
/**
* sys_user 表中 sex 字段对应的字典名称 的ID
*/
int SYS_USER_SEX_ID = 127;
/**
* mall_category 表中status字段对应的 字典ID
*/
int MALL_CATEGORY_STATUS_ID = 130;
}
category.js 文件也要修改
重新运行项目,查看效果:
(3)时间字段要格式化成本地时间显示
这是 category.js 的部分代码:
然后去 https://cdnjs.com/libraries/moment.js 下载monent.js ,Moment.js 官方文档
并引入到项目中:
下载步骤是:
鼠标先点击页面,然后 ctrl+a全选本页内容,再 ctrl+c 复制本页内容
上面的这种引入方式,只能在category.html 页面中使用,为了能够在以后的所有代码生成的模板中都成功引入这个 moment.js文件,我们可以在公共的页面中引入这个js文件。
引入文件之后,以上步骤完成后,测试效果:
4、分页实现
先上逾期实现的效果图:
分页逻辑:在做多级菜单列表的分页时,首先要确定分页的对象。简单点说,一个父菜单可能会有很多子菜单,子菜单下可能还有子菜单,假设我要做分页查询,每次查询10条,那么这10条数据是不是要包含子菜单呢?我们可以分析,如果子菜单也计算进查询的条数,那么就有可能出现无法完全查出一级菜单下的所有子菜单详情,因为我们永远无法确定一个一级菜单下,有多少二级和三级菜单,如此一来,不管你每页定义的查询数据是多少条,都无法完整的将某个一级菜单下的所有子菜单都查询出来。鉴于此,我们的分页应该是相对同级别的菜单而言的。比如可能是对所有的一级菜单分页查询,每页查询10条(一级菜单),同时将他们的子菜单也查询出来,虽然每次查询出的总数量(包括一级菜单及他们子菜单)可能不同,但我可以确定的是,我每页查询出的都是10条一级菜单及他们所有的子菜单,这样的设计勉强说得过去吧。
因为Guns中没有针对树形菜单栏的分页的实现案例,所以我这边自己写了一个。一开始本来是使用session存取分页信息的,但是发现session缓存导致数据更新不及时,影响了效果。后来通过一步一步解剖bootstrap源码(望天,我原本只是个Java开发啊,原本Jquery用起来都很生疏,居然被逼的不得不去读bootstrap源码!!!),对bootstrap的部分原理有所了解后,再在原来的bootstrap-treetable.js 基础上做了部分修改(修改后并不会影响原来的调用者的使用),最终实现功能。下面分析一下代码结果,此处只是截图,完整的代码我会在博客结尾处贴出。
(1)在不影响其它使用者使用的基础上,修改Guns中的bootstrap-treetable.js ,自定义树形菜单分页功能
(2)自定义分页的js函数
(3)需要引入分页功能的html页面和js函数需要做如下修改:
category.html页面:
category.js文件做的修改:
(4)列表查询接口返回值需要用固定格式封装
5、条件查询
为了设计一个足够合理的条件查询,我也是花绞尽脑汁了。
A、默认查询一级菜单和一级菜单下的所有所有子菜单
B、当选择分类名称查询,不选择层级查询时,默认无法查询子类菜单,这样是为了防止查重和查出不必要的数据
C、当不选择分类名称查询,选择层级查询时,可以选择是否查询子类菜单
D、当选择分类名称查询,选择层级查询时,可以选择是否查询子类菜单
同样的,详细的代码在下一篇博客贴出。
我逾期实现的效果这样的:
(1)在页面上添加对应的标签,这是从guns其它模块中扣过来的。
(2)将请求参数赋值到要调用的后端接口上:
(3)后端接口要接收这些参数
(4)重置查询条件
对应的html:
对应的js:
由于篇幅太大,具体的代码都将在下一篇博客展示,点击 Guns二次开发(七):商品分类管理之【查】字诀(3) 查看
该系列更多文章请前往 Guns二次开发目录