關於博客中使用的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頁面需要做的修改:
(4)列表查詢接口返回值需要用固定格式封裝
5、條件查詢
爲了設計一個足夠合理的條件查詢,我也是花絞盡腦汁了。
A、默認查詢一級菜單和一級菜單下的所有所有子菜單
B、當選擇分類名稱查詢,不選擇層級查詢時,默認無法查詢子類菜單,這樣是爲了防止查重和查出不必要的數據
C、當不選擇分類名稱查詢,選擇層級查詢時,可以選擇是否查詢子類菜單
D、當選擇分類名稱查詢,選擇層級查詢時,可以選擇是否查詢子類菜單
同樣的,詳細的代碼在下一篇博客貼出。
我逾期實現的效果這樣的:
(1)在頁面上添加對應的標籤,這是從guns其它模塊中扣過來的。
(2)將請求參數賦值到要調用單後端接口上:
(3)後端接口要接收這些參數
由於篇幅太大,具體的代碼都將在下一篇博客展示,點擊 查看
該系列更多文章請前往 Guns二次開發目錄