流水查询、字典、treeSelect
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html
index a959451..5128026 100755
--- a/src/main/resources/templates/index.html
+++ b/src/main/resources/templates/index.html
@@ -33,8 +33,11 @@
         </ul>

         <ul class="layui-nav layui-layout-right">

             <li class="layui-nav-item" lay-unselect>

-                <a id="btnMessage" title="消息"><i class="layui-icon layui-icon-notice"></i></a>

+                <a ew-event="refreshDict" title="刷新字典"><i class="layui-icon layui-icon-read"></i></a>

             </li>

+            <!--<li class="layui-nav-item" lay-unselect>-->

+                <!--<a id="btnMessage" title="消息"><i class="layui-icon layui-icon-notice"></i></a>-->

+            <!--</li>-->

             <li class="layui-nav-item layui-hide-xs" lay-unselect>

                 <a ew-event="fullScreen" title="全屏"><i class="layui-icon layui-icon-screen-full"></i></a>

             </li>

@@ -130,12 +133,15 @@
 <script type="text/javascript" th:src="@{/static/libs/q.js}"></script>

 <script type="text/javascript" th:src="@{/static/libs/layui/layui.js}"></script>

 <script type="text/javascript" th:src="@{/static/libs/zTree/js/jquery.ztree.all-3.5.min.js}"></script>

+<script type="text/javascript" th:src="@{/static/libs/custom.js}"></script>

+

 <script>

     layui.config({

         base: 'static/custom/module/'

     }).extend({

         formSelects: 'formSelects/formSelects-v4',

-        treetable: 'treetable-lay/treetable'

+        treetable: 'treetable-lay/treetable',

+        treeSelect: 'treeSelect/treeSelect'

     }).use(['admin'], function () {

         var admin = layui.admin;

     });

@@ -148,6 +154,8 @@
         index.initRouter();  // 导航栏和tab联动

         index.bindEvent();  // 绑定事件

 

+        var dictpool = DictPoolToolkit();

+        dictpool.initAll("/dictpool"); //加载字典

     });

 </script>

 </body>

diff --git a/src/main/resources/templates/system/dtl/shopdtl.html b/src/main/resources/templates/system/dtl/shopdtl.html
index 9fc1cc3..94fc668 100644
--- a/src/main/resources/templates/system/dtl/shopdtl.html
+++ b/src/main/resources/templates/system/dtl/shopdtl.html
@@ -7,13 +7,265 @@
         </span>
     </div>
     <div class="layui-card-body">
-        <div class="layui-form toolbar">
-            搜索:
-            <input id="search-shopdtl-shopname" class="layui-input search-input" type="text" maxlength="30" placeholder="输入名称"/>&emsp;
-            <button id="btn-search-shopdtl" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+        <div class="layui-form" lay-filter="shopdtl-search-form">
+            <div class="layui-form-item" style="margin-bottom: 0;">
+                <div class="layui-inline">
+                    <label class="layui-form-label">记账日期</label>
+                    <div class="layui-input-inline" style="width: 120px;">
+                        <input type="text" name="startAccdate" id="shopdtl-search-startAccdate" placeholder="开始日期"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                    <div class="layui-form-mid">-</div>
+                    <div class="layui-input-inline" style="width: 120px;">
+                        <input type="text" name="endAccdate" id="shopdtl-search-endAccdate" placeholder="结束日期"
+                               autocomplete="off"
+                               class="layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline" style="width: 298px;">
+                    <label class="layui-form-label">商户名称</label>
+                    <div class="layui-input-block">
+                        <input type="text" name="shopname" id="shopdtl-search-shopname" placeholder="商户名称"
+                               autocomplete="off" class="layui-input" maxlength="20"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">支付方式</label>
+                    <div class="layui-input-block">
+                        <select name="sourcetype" id="shopdtl-search-sourcetype" class="layui-select">
+                            <option value=""> 全部</option>
+                            <option th:each="pt:${paytypelist}" th:value="${pt.sourceType}"
+                                    th:text="${pt.paydesc}"></option>
+                        </select>&emsp;
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">状态</label>
+                    <div class="layui-input-block">
+                        <select name="status" id="shopdtl-search-status" class="layui-select">
+                            <option value=""> 全部</option>
+                            <option th:each="st:${dtlstatuslist}" th:value="${st.dictval}"
+                                    th:text="${st.dictcaption}"></option>
+                        </select>&emsp;
+                    </div>
+                </div>
+            </div>
+
+            <div class="layui-form-item" style="margin-bottom: 0;">
+                <div class="layui-inline">
+                    <label class="layui-form-label">交易日期</label>
+                    <div class="layui-input-inline" style="width: 120px;">
+                        <input type="text" name="startTransdate" id="shopdtl-search-startTransdate" placeholder="开始日期"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                    <div class="layui-form-mid">-</div>
+                    <div class="layui-input-inline" style="width: 120px;">
+                        <input type="text" name="endTransdate" id="shopdtl-search-endTransdate" placeholder="结束日期"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">选择商户</label>
+                    <div class="layui-input-block">
+                        <input type="text" name="shopaccno" id="shopdtl-search-shopaccno" placeholder="选择商户" lay-filter="shopdtl-search-shopaccno-filter"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">类型</label>
+                    <div class="layui-input-block">
+                        <select name="tradeflag" id="shopdtl-search-tradeflag" class="layui-select">
+                            <option value=""> 全部</option>
+                            <option value="in">收入</option>
+                            <option value="out">支出</option>
+                        </select>&emsp;
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">交易码</label>
+                    <div class="layui-input-block">
+                        <select name="transcode" id="shopdtl-search-transcode" class="layui-select">
+                            <option value=""> 全部</option>
+                            <option th:each="tc:${transcodelist}" th:value="${tc.transcode}"
+                                    th:text="${tc.transname}"></option>
+                        </select>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="layui-card-body">
+        <div class="toolbar">
+            <button id="btn-search-shopdtl" class="layui-btn icon-btn" data-type="search"><i
+                    class="layui-icon">&#xe615;</i>搜索
             </button>
-            <button id="btn-reset-shopdtl" class="layui-btn layui-btn-primary" data-type="reset"><i class="layui-icon"></i>清 空</button>
+            <button id="btn-reset-shopdtl" class="layui-btn layui-btn-primary" data-type="reset"><i
+                    class="layui-icon"></i>清 空
+            </button>
         </div>
         <table class="layui-table" id="shopdtlSearchTable" lay-filter="shopdtlSearchTable-filter"></table>
     </div>
-</div>
\ No newline at end of file
+</div>
+
+
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element', 'laydate', 'treeSelect'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+        var laydate = layui.laydate;
+        var treeSelect = layui.treeSelect;
+
+        form.render("select");
+
+        laydate.render({
+            elem: '#shopdtl-search-startAccdate'
+        });
+        laydate.render({
+            elem: '#shopdtl-search-endAccdate'
+        });
+        laydate.render({
+            elem: '#shopdtl-search-startTransdate'
+        });
+        laydate.render({
+            elem: '#shopdtl-search-endTransdate'
+        });
+
+        treeSelect.render({
+            elem: '#shopdtl-search-shopaccno',
+            data: '/dtl/shoptreeselect',
+            type: 'get',
+            placeholder: '选择商户',
+            search: false,
+            style: {
+                folder: {
+                    enable: false
+                },
+                line: {
+                    enable: true
+                }
+            },
+            // 点击回调
+            click: function (d) {
+                var treeNode = d.current;
+                console.log(treeNode);
+                if(undefined == treeNode.accno || null == treeNode.accno){
+                    layer.msg("请选择结算商户", {icon: 2, time:1500});
+                    $("#shopdtl-search-shopaccno").val("");
+                    treeSelect.revokeNode('shopdtl-search-shopaccno-filter');
+                    return false;
+                }
+                return true;
+            },
+            success: function (d) {
+                console.log(d); // 加载完成后的回调函数
+            }
+        });
+
+
+        $("#btn-search-shopdtl").click(function () {
+            table.reload('shopdtlSearchTable', {
+                where: {
+                    startAccdate: $("#shopdtl-search-startAccdate").val(),
+                    endAccdate: $("#shopdtl-search-endAccdate").val(),
+                    startTransdate: $("#shopdtl-search-startTransdate").val(),
+                    endTransdate: $("#shopdtl-search-endTransdate").val(),
+                    personname: $("#shopdtl-search-personname").val(),
+                    shopaccno: $("#shopdtl-search-shopaccno").val(),
+                    sourcetype: $("#shopdtl-search-sourcetype").val(),
+                    tradeflag: $("#shopdtl-search-tradeflag").val(),
+                    transcode: $("#shopdtl-search-transcode").val(),
+                    status: $("#shopdtl-search-status").val()
+                }, page: {curr: 1}
+            });
+        });
+
+        $("#btn-reset-shopdtl").click(function () {
+            form.val("shopdtl-search-form", {
+                "startAccdate": "",
+                "endAccdate": "",
+                "startTransdate": "",
+                "endTransdate": "",
+                "shopname": "",
+                "shopaccno": "",
+                "sourcetype": "",
+                "tradeflag": "",
+                "transcode": "",
+                "status": ""
+            });
+            form.render("select");
+            treeSelect.revokeNode('shopdtl-search-shopaccno-filter');
+        });
+
+        // 渲染表格
+        table.render({
+            elem: '#shopdtlSearchTable',
+            url: '/dtl/shopdtllist',
+            page: true,
+            cols: [
+                [
+                    {field: 'refno', title: '参考号', align: 'center', width: 200, sort: true},
+                    {field: 'accdate', title: '记账日期', align: 'center', width: 100, sort: true},
+                    {field: 'transdesc', title: '交易描述', align: 'center', width: 175},
+                    {field: 'shopname', title: '商户名称', align: 'center', width: 250},
+                    {field: 'amount', title: '交易金额', align: 'center', width: 120, sort: true},
+                    {
+                        field: 'status', title: '状态', align: 'center', width: 90, templet: function (item) {
+                            if (item.status == 'init') {
+                                return '<span class="layui-badge layui-bg-gray">初始化</span>';
+                            } else if (item.status == 'success') {
+                                return '<span class="layui-badge layui-bg-green">成功</span>';
+                            } else if (item.status == 'fail') {
+                                return '<span class="layui-badge">失败</span>';
+                            } else if (item.status == 'wip') {
+                                return '<span class="layui-badge layui-bg-orange">待支付</span>';
+                            } else {
+                                return item.status;
+                            }
+                        }
+                    },
+                    {
+                        field: 'tradeflag', title: '类型', align: 'center', width: 60, templet: function (item) {
+                            if (item.tradeflag == 'in') {
+                                return '<span style="color: green;">收入</span>';
+                            } else if (item.tradeflag == 'out') {
+                                return '<span style="color: red;">支出</span>';
+                            } else {
+                                return item.tradeflag;
+                            }
+                        }
+                    },
+                    {field: 'transdate', title: '交易日期', align: 'center', width: 100, sort: true},
+                    {field: 'transtime', title: '交易时间', align: 'center', width: 100, sort: true},
+                    {
+                        field: 'sourceType',
+                        title: '支付方式',
+                        align: 'center',
+                        width: 130,
+                        sort: true,
+                        templet: function (item) {
+                            return getTempDictValue('allSourcetypeList', item.sourceType);
+                        }
+                    },
+                    {
+                        field: 'reverseFlag', title: '冲正状态', align: 'center', width: 100, templet: function (item) {
+                            return getTempDictValue('allReverseflagList', item.reverseFlag);
+                        }
+                    },
+                    {field: 'oppositeAccName', title: '交易对象', align: 'center', width: 150},
+                    // {field: 'outtradeno', title: '子系统订单号', align: 'center', width: 200},
+                    {field: 'transcode', title: '交易码', align: 'center', width: 100},
+                    {field: 'remark', title: '备注信息', align: 'center', width: 200}
+                ]
+            ]
+        });
+
+
+    });
+</script>
diff --git a/src/main/resources/templates/system/dtl/userdtl.html b/src/main/resources/templates/system/dtl/userdtl.html
index 987e869..e7ebaff 100644
--- a/src/main/resources/templates/system/dtl/userdtl.html
+++ b/src/main/resources/templates/system/dtl/userdtl.html
@@ -6,54 +6,231 @@
           <a><cite>个人流水查询</cite></a>
         </span>
     </div>
-    <div class="layui-form layui-card-header layuiadmin-card-header-auto">
-        <div class="layui-form-item">
-            <div class="layui-inline">
-                <label class="layui-form-label">ID</label>
-                <div class="layui-input-block">
-                    <input type="text" name="id" placeholder="请输入" autocomplete="off" class="layui-input">
+    <div class="layui-card-body">
+        <div class="layui-form" lay-filter="userdtl-search-form">
+            <div class="layui-form-item" style="margin-bottom: 0;">
+                <div class="layui-inline">
+                    <label class="layui-form-label">记账日期</label>
+                    <div class="layui-input-inline" style="width: 120px;">
+                        <input type="text" name="startAccdate" id="userdtl-search-startAccdate" placeholder="开始日期"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                    <div class="layui-form-mid">-</div>
+                    <div class="layui-input-inline" style="width: 120px;">
+                        <input type="text" name="endAccdate" id="userdtl-search-endAccdate" placeholder="结束日期"
+                               autocomplete="off"
+                               class="layui-input"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">姓名</label>
+                    <div class="layui-input-block">
+                        <input type="text" name="personname" id="userdtl-search-personname" placeholder="姓名"
+                               autocomplete="off" class="layui-input" maxlength="20"/>
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">支付方式</label>
+                    <div class="layui-input-block">
+                        <select name="sourcetype" id="userdtl-search-sourcetype" class="layui-select">
+                            <option value=""> 全部</option>
+                            <option th:each="pt:${paytypelist}" th:value="${pt.sourceType}"
+                                    th:text="${pt.paydesc}"></option>
+                        </select>&emsp;
+                    </div>
+                </div>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">状态</label>
+                    <div class="layui-input-block">
+                        <select name="status" id="userdtl-search-status" class="layui-select">
+                            <option value=""> 全部</option>
+                            <option th:each="st:${dtlstatuslist}" th:value="${st.dictval}"
+                                    th:text="${st.dictcaption}"></option>
+                        </select>&emsp;
+                    </div>
                 </div>
             </div>
-            <div class="layui-inline">
-                <label class="layui-form-label">用户名</label>
-                <div class="layui-input-block">
-                    <input type="text" name="username" placeholder="请输入" autocomplete="off" class="layui-input">
+
+            <div class="layui-form-item" style="margin-bottom: 0;">
+                <div class="layui-inline">
+                    <label class="layui-form-label">交易日期</label>
+                    <div class="layui-input-inline" style="width: 120px;">
+                        <input type="text" name="startTransdate" id="userdtl-search-startTransdate" placeholder="开始日期"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
+                    <div class="layui-form-mid">-</div>
+                    <div class="layui-input-inline" style="width: 120px;">
+                        <input type="text" name="endTransdate" id="userdtl-search-endTransdate" placeholder="结束日期"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
                 </div>
-            </div>
-            <div class="layui-inline">
-                <label class="layui-form-label">邮箱</label>
-                <div class="layui-input-block">
-                    <input type="text" name="email" placeholder="请输入" autocomplete="off" class="layui-input">
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">市民卡号</label>
+                    <div class="layui-input-block">
+                        <input type="text" name="cardno" id="userdtl-search-cardno" placeholder="市民卡号"
+                               autocomplete="off" class="layui-input"/>
+                    </div>
                 </div>
-            </div>
-            <div class="layui-inline">
-                <label class="layui-form-label">性别</label>
-                <div class="layui-input-block">
-                    <select name="sex">
-                        <option value="0">不限</option>
-                        <option value="1">男</option>
-                        <option value="2">女</option>
-                    </select>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">类型</label>
+                    <div class="layui-input-block">
+                        <select name="tradeflag" id="userdtl-search-tradeflag" class="layui-select">
+                            <option value=""> 全部</option>
+                            <option value="in">收入</option>
+                            <option value="out">支出</option>
+                        </select>&emsp;
+                    </div>
                 </div>
-            </div>
-            <div class="layui-inline">
-                <button class="layui-btn layuiadmin-btn-useradmin" lay-submit lay-filter="LAY-user-front-search">
-                    <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
-                </button>
+
+                <div class="layui-inline">
+                    <label class="layui-form-label">交易码</label>
+                    <div class="layui-input-block">
+                        <select name="transcode" id="userdtl-search-transcode" class="layui-select">
+                            <option value=""> 全部</option>
+                            <option th:each="tc:${transcodelist}" th:value="${tc.transcode}"
+                                    th:text="${tc.transname}"></option>
+                        </select>
+                    </div>
+                </div>
             </div>
         </div>
     </div>
     <div class="layui-card-body">
-
-
-
-        <div class="layui-form toolbar">
-            搜索:
-            <input id="search-shopdtl-personname" class="layui-input search-input" type="text" maxlength="30" placeholder="输入名称"/>&emsp;
-            <button id="btn-search-sysparam" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+        <div class="toolbar">
+            <button id="btn-search-userdtl" class="layui-btn icon-btn" data-type="search"><i
+                    class="layui-icon">&#xe615;</i>搜索
             </button>
-            <button id="btn-reset-sysparam" class="layui-btn layui-btn-primary" data-type="reset"><i class="layui-icon"></i>清 空</button>
+            <button id="btn-reset-userdtl" class="layui-btn layui-btn-primary" data-type="reset"><i
+                    class="layui-icon"></i>清 空
+            </button>
         </div>
         <table class="layui-table" id="userdtlSearchTable" lay-filter="userdtlSearchTable-filter"></table>
     </div>
-</div>
\ No newline at end of file
+</div>
+
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element', 'laydate'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+        var laydate = layui.laydate;
+
+        form.render("select");
+
+        laydate.render({
+            elem: '#userdtl-search-startAccdate'
+        });
+        laydate.render({
+            elem: '#userdtl-search-endAccdate'
+        });
+        laydate.render({
+            elem: '#userdtl-search-startTransdate'
+        });
+        laydate.render({
+            elem: '#userdtl-search-endTransdate'
+        });
+
+        $("#btn-search-userdtl").click(function () {
+            table.reload('userdtlSearchTable', {
+                where: {
+                    startAccdate: $("#userdtl-search-startAccdate").val(),
+                    endAccdate: $("#userdtl-search-endAccdate").val(),
+                    startTransdate: $("#userdtl-search-startTransdate").val(),
+                    endTransdate: $("#userdtl-search-endTransdate").val(),
+                    personname: $("#userdtl-search-personname").val(),
+                    cardno: $("#userdtl-search-cardno").val(),
+                    sourcetype: $("#userdtl-search-sourcetype").val(),
+                    tradeflag: $("#userdtl-search-tradeflag").val(),
+                    transcode: $("#userdtl-search-transcode").val(),
+                    status: $("#userdtl-search-status").val()
+                }, page: {curr: 1}
+            });
+        });
+
+        $("#btn-reset-userdtl").click(function () {
+            form.val("userdtl-search-form", {
+                "startAccdate": "",
+                "endAccdate": "",
+                "startTransdate": "",
+                "endTransdate": "",
+                "personname": "",
+                "cardno": "",
+                "sourcetype": "",
+                "tradeflag": "",
+                "transcode": "",
+                "status": ""
+            });
+            form.render("select");
+        });
+
+        // 渲染表格
+        table.render({
+            elem: '#userdtlSearchTable',
+            url: '/dtl/userdtllist',
+            page: true,
+            cols: [
+                [
+                    {field: 'refno', title: '参考号', align: 'center', width: 200, sort: true},
+                    {field: 'accdate', title: '记账日期', align: 'center', width: 100, sort: true},
+                    {field: 'transdesc', title: '交易描述', align: 'center', width: 175},
+                    {field: 'userName', title: '姓名', align: 'center', width: 150},
+                    {field: 'amount', title: '交易金额', align: 'center', width: 120, sort: true},
+                    {
+                        field: 'status', title: '状态', align: 'center', width: 90, templet: function (item) {
+                            if (item.status == 'init') {
+                                return '<span class="layui-badge layui-bg-gray">初始化</span>';
+                            } else if (item.status == 'success') {
+                                return '<span class="layui-badge layui-bg-green">成功</span>';
+                            } else if (item.status == 'fail') {
+                                return '<span class="layui-badge">失败</span>';
+                            } else if (item.status == 'wip') {
+                                return '<span class="layui-badge layui-bg-orange">待支付</span>';
+                            } else {
+                                return item.status;
+                            }
+                        }
+                    },
+                    {
+                        field: 'tradeflag', title: '类型', align: 'center', width: 60, templet: function (item) {
+                            if (item.tradeflag == 'in') {
+                                return '<span style="color: green;">收入</span>';
+                            } else if (item.tradeflag == 'out') {
+                                return '<span style="color: red;">支出</span>';
+                            } else {
+                                return item.tradeflag;
+                            }
+                        }
+                    },
+                    {field: 'transdate', title: '交易日期', align: 'center', width: 100, sort: true},
+                    {field: 'transtime', title: '交易时间', align: 'center', width: 100, sort: true},
+                    {
+                        field: 'sourceType',
+                        title: '支付方式',
+                        align: 'center',
+                        width: 130,
+                        sort: true,
+                        templet: function (item) {
+                            return getTempDictValue('allSourcetypeList', item.sourceType);
+                        }
+                    },
+                    {
+                        field: 'reverseFlag', title: '冲正状态', align: 'center', width: 100, templet: function (item) {
+                            return getTempDictValue('allReverseflagList', item.reverseFlag);
+                        }
+                    },
+                    {field: 'oppositeAccName', title: '交易对象', align: 'center', width: 250},
+                    {field: 'outtradeno', title: '子系统订单号', align: 'center', width: 200},
+                    {field: 'transcode', title: '交易码', align: 'center', width: 100},
+                    {field: 'remark', title: '备注信息', align: 'center', width: 200}
+                ]
+            ]
+        });
+
+
+    });
+</script>