商户审批
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index d218c43..32cfd2f 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -50,7 +50,7 @@
 INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
 VALUES (22, NULL, 1, NULL, '', '/user/acc', '账户管理', 2, 19, '{tenantid}');
 INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
-VALUES (25, NULL, 1, NULL, '', '/shop/config', '商户支付能力配置', 2, 7, '{tenantid}');
+VALUES (25, NULL, 1, NULL, '', '/shop/config', '商户支付能力配置', 3, 7, '{tenantid}');
 INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
 VALUES (26, NULL, 0, NULL, 'layui-icon-tabs', '#', '流水管理', 3, -1, '{tenantid}');
 INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
@@ -71,8 +71,8 @@
 VALUES (34, NULL, 1, NULL, '', '/thirdchk/chkstatus', '对账状态查询', 331, 33, '{tenantid}');
 INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
 VALUES (35, NULL, 1, NULL, '', '/thirdchk/chkfile', '对账明细查询', 332, 33, '{tenantid}');
-
-
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (36, NULL, 1, NULL, '', '/shop/shopcheck', '商户审批', 2, 7, '{tenantid}');
 
 INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
 VALUES ('ff8080816b7947ed016b7955772c0032', 1, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
@@ -134,6 +134,9 @@
 VALUES ('ff8082816c8468e8016c846d7a570017', 34, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
 VALUES ('ff8083816c8468e8016c846d7a570017', 35, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
+VALUES ('ff8080816db87e27016db88be41a0014', 36, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+
 
 INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
 VALUES (4, '1', 4, '添加功能', '/function/add', '{tenantid}');
@@ -224,11 +227,11 @@
 INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
 VALUES (54, '', 21, '添加', '/user/add', '{tenantid}');
 INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
-VALUES (56, '', 23, '查询', '/shop/getshopinfo', '{tenantid}');
+VALUES (56, '', 23, '商户详情', '/shop/getshopinfo', '{tenantid}');
 INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
-VALUES (57, '', 23, '商户树', '/shop/index', '{tenantid}');
+VALUES (57, '', 23, '查询', '/shop/index', '{tenantid}');
 INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
-VALUES (58, '', 23, '新增修改', '/shop/saveorupdate', '{tenantid}');
+VALUES (58, '', 23, '新增跳转', '/shop/load4addshop', '{tenantid}');
 INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
 VALUES (59, '', 21, '删除', '/user/del', '{tenantid}');
 INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
@@ -273,6 +276,20 @@
 VALUES (81, '', 35, '查询', '/thirdchk/chkfile', '{tenantid}');
 INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
 VALUES (82, '', 35, '查看详情', '/thirdchk/chkdtl', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (83, '', 23, '新增商户', '/shop/addshop', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (84, '', 23, '修改跳转', '/shop/load4updateshop', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (85, '', 23, '修改', '/shop/updateshop', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (86, '', 23, '审批意见', '/shop/getshopchk', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (87, '', 36, '查询', '/shop/shopcheck', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (88, '', 36, '审核跳转', '/shop/opercheck', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (89, '', 36, '审核', '/shop/docheckshop', '{tenantid}');
 
 
 INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid", tenantid)
@@ -413,6 +430,20 @@
 VALUES ('ff8080816c985e76016c98659ad10017', 81, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
 VALUES ('ff8080816c99abee016c99b1cb1c0004', 82, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('402868516daf75de016dafb36670002a', 83, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816db54261016db543aad40009', 84, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('402868516daf15d2016daf1fcb290017', 85, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816db36bbd016db36ff8580010', 86, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816db36bbd016db36ff8580011', 87, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816db87e27016db94468da0089', 88, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816db87e27016db94468da008a', 89, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 
 
 INSERT INTO "tb_subject" ("subjid","subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
@@ -547,6 +578,8 @@
 VALUES (3, 'yes', 1, '20190514165658', '默认日累计额度', '元', '200.0', '账户余额支付时默认的日累计额度', 'amount', '{tenantid}');
 INSERT INTO "tb_syspara" ("paraid", "displayflag", "editflag", "lastsaved", "paraname", "paraunit", "paraval", "remark", "valuetype", "tenantid")
 VALUES (4, 'yes', 1, '20190514165658', '手机端用户过期时间', '秒', null, '手机端用户过期时间(秒)', 'decimal', '{tenantid}');
+INSERT INTO "tb_syspara" ("paraid", "displayflag", "editflag", "lastsaved", "paraname", "paraunit", "paraval", "remark", "valuetype", "tenantid")
+VALUES (5, 'yes', 1, '20190514165658', '商户信息维护是否需要审核', '', '0', '商户的新增、修改、删除是否需要审核:1-需要;0-不需要', 'switch', '{tenantid}');
 
 INSERT INTO "tb_syspara" ("paraid", "displayflag", "editflag", "lastsaved", "paraname", "paraunit", "paraval", "remark", "valuetype", "tenantid")
 VALUES (2019, 'yes', 1, '20190514165658', '与卡管系统对接的应用ID', null, null, '与卡管系统对接的app_id', 'string', '{tenantid}');
@@ -559,8 +592,8 @@
 INSERT INTO "tb_task_lock" ("taskcode", "remark", "taskstatus", "tasktime", "tenantid")
 VALUES ('DAYENDSETTLETASK', '日终结算', '0', '20190619100600', '{tenantid}');
 
-INSERT INTO "tb_shop" ("shopid", "shopname", "shoptype", "fshopid", "status", "opendate", "tenantid")
-VALUES (1, '支付中心', 'root', 0, 'normal', '20190517', '{tenantid}');
+INSERT INTO "tb_shop" ("shopid", "shopname", "shoptype", "fshopid", "status", "check_status", "opendate", "tenantid")
+VALUES (1, '支付中心', 'root', 0, 'normal', 'normal', '20190517', '{tenantid}');
 
 INSERT INTO "tb_transcode" ("transcode_id", "transcode", "transname", "tenantid")
 VALUES (1, 3010, '市民卡代扣', '{tenantid}');
diff --git a/payapi/src/main/resources/static/custom/module/admin.js b/payapi/src/main/resources/static/custom/module/admin.js
index 1694286..e557e6c 100755
--- a/payapi/src/main/resources/static/custom/module/admin.js
+++ b/payapi/src/main/resources/static/custom/module/admin.js
@@ -224,7 +224,7 @@
         },

         formatDate:function (str) {

             if (str == null || str == "") {

-                return;

+                return '';

             }

             switch (str.length) {

                 case 8:

diff --git a/payapi/src/main/resources/static/libs/custom.js b/payapi/src/main/resources/static/libs/custom.js
index c2b560a..d034401 100644
--- a/payapi/src/main/resources/static/libs/custom.js
+++ b/payapi/src/main/resources/static/libs/custom.js
@@ -102,4 +102,10 @@
     root.dateFormat = function (str) {
         return str.replace(/^(\d{4})(\d{2})(\d{2})$/, '$1-$2-$3'); //yyyyMMdd --> yyyy-MM-dd
     }
+
+    root.isempty = function (s) {
+        if (s == null || s.length == 0)
+            return true;
+        return /\s/.test(s);
+    }
 }(window));
\ No newline at end of file
diff --git a/payapi/src/main/resources/templates/system/shop/addshop.html b/payapi/src/main/resources/templates/system/shop/addshop.html
new file mode 100644
index 0000000..1a1bd62
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/shop/addshop.html
@@ -0,0 +1,329 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">新增商户</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#!_shop_index">商户管理</a>
+          <a><cite>新增商户</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div id="shop-add-info" class="layui-form toolbar" lay-filter="shop-add-info-form">
+            <div class="layui-card-header">商户基本信息</div>
+            <div class="layui-form-item" style="margin-left: 15px;margin-top: 15px;">
+                <label class="layui-form-label" style="color: red;width: 100px;"><span
+                        style="color: red;">*</span>商户类型</label>
+                <div class="layui-input-inline">
+                    <select name="shoptype" id="shop-add-shoptype" lay-filter="shop-add-shoptype-filter"
+                            lay-verify="required">
+                        <option value="group">商户组</option>
+                        <option value="normal">结算商户</option>
+                    </select>
+                </div>
+                <div class="layui-form-mid layui-word-aux">
+                    注意:商户组无商户账号,且能创建下级商户。结算商户是叶子商户,会创建商户账号。保存后无法修改!!!
+                </div>
+            </div>
+            <div class="layui-card-body">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">商户号</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="shopid" class="layui-input" style="background-color: #f1f1f1;"
+                                   value="0"
+                                   readonly="readonly"/>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">商户账号</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="shopaccno" autocomplete="off" style="background-color: #f1f1f1;"
+                                   class="layui-input" readonly="readonly"/>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;"><span
+                                style="color: red;">*</span>上级商户号</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="fshopid" id="shop-add-fshopid" class="layui-input"
+                                   autocomplete="off" placeholder="请选择"
+                                   lay-verify="required|number"/>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;"><span
+                                style="color: red;">*</span>商户名</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="shopname" id="shop-add-shopname" autocomplete="off"
+                                   class="layui-input" maxlength="30" lay-verify="required"/>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="layui-card-header">商户营业信息</div>
+            <div class="layui-card-body">
+                <div class="layui-form-item" style="margin-left: 15px;margin-top: 15px;">
+                    <label class="layui-form-label" style="width: 90px;"><span
+                            style="color: red;">*</span>营业执照编号</label>
+                    <div class="layui-input-inline" style="width: 525px;">
+                        <input name="businessLicenseNo" id="shop-add-businessLicenseNo" class="layui-input"
+                               autocomplete="off"/>
+                    </div>
+                </div>
+
+                <div class="layui-form-item" style="margin-left: 15px;">
+                    <label class="layui-form-label" style="width: 90px;"><span
+                            style="color: red;">*</span>税务登记证号</label>
+                    <div class="layui-input-inline" style="width: 525px;">
+                        <input name="taxRegistrationNo" id="shop-add-taxRegistrationNo" class="layui-input"
+                               autocomplete="off"/>
+                    </div>
+                </div>
+
+                <div class="layui-form-item" style="margin-left: 15px;">
+                    <label class="layui-form-label" style="width: 90px;"><span
+                            style="color: red;">*</span>商户经营地址</label>
+                    <div class="layui-input-inline" style="width: 525px;">
+                        <input name="addr" id="shop-add-addr" class="layui-input" autocomplete="off"/>
+                    </div>
+                </div>
+
+                <div class="layui-form-item" style="margin-left: 15px;">
+                    <label class="layui-form-label" style="width: 90px;"><span style="color: red;">*</span>法人姓名</label>
+                    <div class="layui-input-inline" style="width: 525px;">
+                        <input name="legalPersonName" id="shop-add-legalPersonName" class="layui-input"
+                               autocomplete="off"/>
+                    </div>
+                </div>
+
+                <div class="layui-form-item" style="margin-left: 15px;">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 90px;"><span
+                                style="color: red;">*</span>法人证件类型</label>
+                        <div class="layui-input-inline">
+                            <select name="legalPersonIdtype" id="shop-add-legalPersonIdtype" lay-filter="shop-add-legalPersonIdtype-filter" class="layui-select">
+                                <option th:each="bean : ${idtypeList}" th:value="${bean.dictval}">[[${bean.dictcaption}]]</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 90px;"><span
+                                style="color: red;">*</span>法人证件号</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="legalPersonIdno" id="shop-add-legalPersonIdno" class="layui-input"
+                                   maxlength="20"
+                                   autocomplete="off"/>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="layui-card-header">商户联系人信息</div>
+            <div class="layui-card-body">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">姓名</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="contactman" id="shop-add-contactman" class="layui-input"
+                                   autocomplete="off"/>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">手机号</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="mobile" id="shop-add-mobile" class="layui-input" maxlength="20"
+                                   autocomplete="off"
+                                   lay-verify="mobile"/>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">邮箱</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="email" class="layui-input" autocomplete="off" id="shop-add-email"
+                                   lay-verify="swEmail"/>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">电话</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="tel" id="shop-add-tel" class="layui-input" maxlength="20"
+                                   autocomplete="off"/>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <div class="layui-form-item" style="padding-bottom: 20px;text-align: center;">
+                <button class="layui-btn" lay-filter="form-submit-shop-add-btn-filter" lay-submit
+                        id="submitbtn-shop-add-btn">保存
+                </button>
+                <button class="layui-btn layui-btn-primary" type="button" id="submitbtn-shop-return-btn">返回
+                </button>
+                <div class="layui-inline" style="margin-left: 10px;">
+                    <input type="checkbox" id="shop-add-continue-flag" lay-skin="primary"
+                           title="继续新增"/>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script>
+    layui.use(['form', 'table', 'admin', 'jquery', 'element', 'treeSelect'], function () {
+        var form = layui.form;
+        var admin = layui.admin;
+        var $ = layui.jquery;
+        var element = layui.element;
+        var treeSelect = layui.treeSelect;
+
+        $("#shop-add-legalPersonIdtype").val("idcard");
+        form.render("select");
+        form.render("checkbox");
+        form.verify({
+            "mobile": function (e) {
+                if (null != e && e.length > 0 && !(/^1\d{10}$/.test(e))) {
+                    return "请输入正确的手机号";
+                }
+            },
+            "swEmail": function (e) {
+                if (null != e && e.length > 0 && !(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(e))) {
+                    return "邮箱格式不正确";
+                }
+            }
+        });
+
+        treeSelect.render({
+            elem: '#shop-add-fshopid',
+            data: '[[@{/shop/selectshopgroup}]]',
+            type: 'get',
+            placeholder: '请选择',
+            search: false,
+            style: {
+                folder: {
+                    enable: false
+                },
+                line: {
+                    enable: true
+                }
+            },
+            // 点击回调
+            click: function (d) {
+                var treeNode = d.current;
+                return true;
+            },
+            success: function (d) {
+                console.log(d); // 加载完成后的回调函数
+            }
+        });
+
+        $("#submitbtn-shop-return-btn").click(function(){
+            element.tabDelete('admin-pagetabs', '_shop_manager_add'); //关闭现有详情
+            element.tabChange('admin-pagetabs','_shop_index');
+            admin.refresh();
+        });
+
+        $("#submitbtn-shop-add-btn").click(function () {
+            var shoptype = $("#shop-add-shoptype").val();
+            var fshopid = $("#shop-add-fshopid").val();
+            var shopname = $("#shop-add-shopname").val();
+            var businessLicenseNo = $("#shop-add-businessLicenseNo").val();
+            var taxRegistrationNo = $("#shop-add-taxRegistrationNo").val();
+            var addr = $("#shop-add-addr").val();
+            var legalPersonName = $("#shop-add-legalPersonName").val();
+            var legalPersonIdtype = $("#shop-add-legalPersonIdtype").val();
+            var legalPersonIdno = $("#shop-add-legalPersonIdno").val();
+            var contactman = $("#shop-add-contactman").val();
+            var mobile = $("#shop-add-mobile").val();
+            var email = $("#shop-add-email").val();
+            var tel = $("#shop-add-tel").val();
+            var token = $("meta[name='_csrf_token']").attr("value");
+            if (isempty(shoptype)) {
+                layer.msg("请选择商户类型", {icon: 2, time: 1000});
+                $("#shop-add-shoptype").focus();
+                return;
+            }
+            if (isempty(fshopid)) {
+                layer.msg("请选择上级商户", {icon: 2, time: 1000});
+                $("#shop-add-fshopid").focus();
+                return;
+            }
+            if (isempty(shopname)) {
+                layer.msg("请填写商户名称", {icon: 2, time: 1000});
+                $("#shop-add-shopname").focus();
+                return;
+            }
+            if ("normal" == shoptype) {
+                if (isempty(businessLicenseNo)) {
+                    layer.msg("请填写商户营业执照编号", {icon: 2, time: 1000});
+                    $("#shop-add-businessLicenseNo").focus();
+                    return;
+                }
+                if (isempty(taxRegistrationNo)) {
+                    layer.msg("请填写商户税务登记证号", {icon: 2, time: 1000});
+                    $("#shop-add-taxRegistrationNo").focus();
+                    return;
+                }
+                if (isempty(addr)) {
+                    layer.msg("请填写商户经营地址", {icon: 2, time: 1000});
+                    $("#shop-add-addr").focus();
+                    return;
+                }
+                if (isempty(legalPersonName)) {
+                    layer.msg("请填写商户法人姓名", {icon: 2, time: 1000});
+                    $("#shop-add-legalPersonName").focus();
+                    return;
+                }
+                if (isempty(legalPersonIdtype)) {
+                    layer.msg("请选择法人证件类型", {icon: 2, time: 1000});
+                    $("#shop-add-legalPersonIdtype").focus();
+                    return;
+                }
+                if (isempty(legalPersonIdno)) {
+                    layer.msg("请填写法人证件号", {icon: 2, time: 1000});
+                    $("#shop-add-legalPersonIdno").focus();
+                    return;
+                }
+            }
+
+            var str = $("#shop-add-shoptype").find("option:selected").text();
+            layer.confirm("确定要新增【" + str + " - " + shopname + " 】吗?", function () {
+                admin.go('[[@{/shop/addshop}]]', {
+                    shoptype: shoptype,
+                    fshopid: fshopid,
+                    shopname: shopname,
+                    businessLicenseNo: businessLicenseNo,
+                    taxRegistrationNo: taxRegistrationNo,
+                    addr: addr,
+                    legalPersonName: legalPersonName,
+                    legalPersonIdtype: legalPersonIdtype,
+                    legalPersonIdno: legalPersonIdno,
+                    contactman: contactman,
+                    mobile: mobile,
+                    email: email,
+                    tel: tel,
+                    _csrf: token
+                }, function (data) {
+                    if (data.code === 200) {
+                        layer.msg(data.msg, {icon: 1, time: 1000});
+                        if (!$("#shop-add-continue-flag").is(":checked")) {
+                            element.tabDelete('admin-pagetabs', '_shop_manager_add'); //关闭现有详情
+                            element.tabChange('admin-pagetabs','_shop_index');
+                            admin.refresh();
+                        }
+                    } else if (data.code === 401) {
+                        layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('[[@{/login}]]');
+                        }, 1000);
+                    } else {
+                        layer.msg(data.msg, {icon: 2});
+                        return;
+                    }
+                }, function (err) {
+                    admin.errorBack(err);
+                });
+            });
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/payapi/src/main/resources/templates/system/shop/index.html b/payapi/src/main/resources/templates/system/shop/index.html
index 78ef8af..61e7cc7 100644
--- a/payapi/src/main/resources/templates/system/shop/index.html
+++ b/payapi/src/main/resources/templates/system/shop/index.html
@@ -13,153 +13,38 @@
                     <div class="layui-card-header">
                         商户树<span style="font-size: 12px;">(双击商户进行修改)</span>
                     </div>
-                    <div class="layui-card-body layui-show" style="margin-bottom: 15px;">
-                        <ul id="shoptree" class="ztree"
-                            style="background-color: #D7F9F7;max-height: 527px;overflow:auto;"></ul>
+                    <div class="layui-card-body layui-show"
+                         style="border: 1px solid #ddd;padding: 10px;min-height: 520px;overflow: auto;margin-top: 16px;"
+                         id="shop-manager-ztree">
                     </div>
                 </div>
             </div>
             <div class="layui-col-xs7 layui-col-md9">
                 <div class="layui-card" style="min-height: 600px;">
-                    <div id="shop-info" class="layui-form toolbar" lay-filter="shop-info-form"
-                         style="display: none;">
-                        <div class="layui-card-header">商户基本信息</div>
-                        <div class="layui-form-item" style="margin-left: 15px;">
-                            <label class="layui-form-label" style="color: red;"><span
-                                    style="color: red;">*</span>商户类型</label>
-                            <div class="layui-input-inline">
-                                <select name="shoptype" id="shoptype" lay-filter="shoptype-filter"
-                                        lay-verify="required">
-                                    <option value="root">根商户</option>
-                                    <option value="group">商户组</option>
-                                    <option value="normal">结算商户</option>
-                                </select>
-                            </div>
-                            <div class="layui-form-mid layui-word-aux">
-                                注意:商户组无商户账号,且能创建下级商户。结算商户是叶子商户,会创建商户账号。保存后无法修改!!!
-                            </div>
-                        </div>
-                        <div class="layui-card-body">
-                            <div class="layui-form-item">
-                                <div class="layui-inline">
-                                    <label class="layui-form-label">商户号</label>
-                                    <div class="layui-input-inline">
-                                        <input type="text" name="shopid" class="layui-input"
-                                               style="background-color: #f1f1f1;"
-                                               readonly="readonly"/>
-                                    </div>
-                                </div>
-                                <div class="layui-inline">
-                                    <label class="layui-form-label">商户账号</label>
-                                    <div class="layui-input-inline">
-                                        <input type="text" name="shopaccno" autocomplete="off"
-                                               style="background-color: #f1f1f1;"
-                                               class="layui-input" readonly="readonly"/>
-                                    </div>
-                                </div>
-                            </div>
-                            <div class="layui-form-item">
-                                <div class="layui-inline">
-                                    <label class="layui-form-label"><span
-                                            style="color: red;">*</span>上级商户号</label>
-                                    <div class="layui-input-inline">
-                                        <input type="text" name="fshopid" id="fshopid" class="layui-input"
-                                               autocomplete="off"
-                                               lay-verify="required|number"/>
-                                    </div>
-                                </div>
-                                <div class="layui-inline">
-                                    <label class="layui-form-label"><span
-                                            style="color: red;">*</span>商户名</label>
-                                    <div class="layui-input-inline">
-                                        <input type="text" name="shopname" autocomplete="off"
-                                               class="layui-input" maxlength="30" lay-verify="required"/>
-                                    </div>
-                                </div>
-                            </div>
-
-                            <div class="layui-form-item">
-                                <div class="layui-inline">
-                                    <label class="layui-form-label">邮编</label>
-                                    <div class="layui-input-inline">
-                                        <input type="text" name="zipcode" class="layui-input"
-                                               autocomplete="off"/>
-                                    </div>
-                                </div>
-                                <div class="layui-inline">
-                                    <label class="layui-form-label">地址</label>
-                                    <div class="layui-input-inline">
-                                        <input type="text" name="addr" class="layui-input" maxlength="40"
-                                               autocomplete="off"/>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="layui-card-header">商户联系人信息</div>
-                        <div class="layui-card-body">
-                            <div class="layui-form-item">
-                                <div class="layui-inline">
-                                    <label class="layui-form-label">姓名</label>
-                                    <div class="layui-input-inline">
-                                        <input type="text" name="contactman" class="layui-input"
-                                               autocomplete="off"/>
-                                    </div>
-                                </div>
-                                <div class="layui-inline">
-                                    <label class="layui-form-label">手机号</label>
-                                    <div class="layui-input-inline">
-                                        <input type="text" name="mobile" class="layui-input" maxlength="20"
-                                               autocomplete="off"
-                                               lay-verify="mobile"/>
-                                    </div>
-                                </div>
-                            </div>
-                            <div class="layui-form-item">
-                                <div class="layui-inline">
-                                    <label class="layui-form-label">证件类型</label>
-                                    <div class="layui-input-inline">
-                                        <select name="idtype" lay-filter="idtype-filter">
-                                            <option th:each="bean : ${idtypeList}" th:value="${bean.dictval}">[[${bean.dictcaption}]]</option>
-                                        </select>
-                                    </div>
-                                </div>
-                                <div class="layui-inline">
-                                    <label class="layui-form-label">证件号</label>
-                                    <div class="layui-input-inline">
-                                        <input type="text" name="idno" class="layui-input" maxlength="20"
-                                               autocomplete="off"/>
-                                    </div>
-                                </div>
-                            </div>
-                            <div class="layui-form-item">
-                                <div class="layui-inline">
-                                    <label class="layui-form-label">邮箱</label>
-                                    <div class="layui-input-inline">
-                                        <input type="text" name="email" class="layui-input" autocomplete="off"
-                                               lay-verify="swEmail"/>
-                                    </div>
-                                </div>
-                                <div class="layui-inline">
-                                    <label class="layui-form-label">电话</label>
-                                    <div class="layui-input-inline">
-                                        <input type="text" name="tel" class="layui-input" maxlength="20"
-                                               autocomplete="off"/>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-
-                        <div class="layui-form-item" style="padding-bottom: 20px;text-align: center;">
-                            <button class="layui-btn" lay-filter="form-submit-shop-btn" lay-submit
-                                    id="submitbtn-shop-btn">保存
+                    <div class="layui-card-body">
+                        <div class="layui-form toolbar">
+                            商户状态:
+                            <select id="shop-manager-search-status">
+                                <option value=""> 全部</option>
+                                <option value="normal">正常</option>
+                                <option value="closed">注销</option>
+                                <option value="uncheck">待审核</option>
+                                <option value="reject">驳回</option>
+                            </select>
+                            <input id="shop-manager-search-shopname" class="layui-input search-input" type="text"
+                                   placeholder="商户名称"/>&emsp;
+                            <button id="shop-manager-search-btn" class="layui-btn icon-btn" data-type="search"><i
+                                    class="layui-icon">&#xe615;</i>搜索
                             </button>
-                            <button class="layui-btn layui-btn-primary" type="button" id="cancelbtn">取消
+                            <button id="shop-manager-search-add-btn" class="layui-btn icon-btn" data-type="add"><i
+                                    class="layui-icon">&#xe654;</i>新增
                             </button>
-                            <div class="layui-inline" style="margin-left: 10px;" id="shop-add-hid-div">
-                                <input type="checkbox" id="shop-add-continue-flag" lay-skin="primary"
-                                       title="继续新增"/>
-                            </div>
+                            <button id="shop-manager-search-reset-btn" class="layui-btn layui-btn-primary"
+                                    data-type="reset"><i class="layui-icon"></i>清 空
+                            </button>
+                            <input type="hidden" id="shop-manager-global-needcheck" th:value="${shopNeedCheck}" />
                         </div>
+                        <table class="layui-table" id="shopManagerTable" lay-filter="shopManagerTable-filter"></table>
                     </div>
                 </div>
             </div>
@@ -167,245 +52,47 @@
     </div>
 </div>
 
+<!-- 表格操作列 -->
+<script type="text/html" id="shop-manager-table-bar">
+    <a class="layui-btn layui-bg-blue layui-btn-xs" lay-event="showShop">查看详情</a>
+    {{# if(d.status !='closed') { }}
+        <a class="layui-btn layui-btn-xs" lay-event="editShop">修改</a>
+        <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="delShop">删除</a>
+    {{# } }}
+    {{# if($("#shop-manager-global-needcheck").val() == 'true'){ }}
+        <a class="layui-btn layui-bg-orange layui-btn-xs" lay-event="showShopCheck">审批意见</a>
+    {{# } }}
+</script>
+
 <script>
-    layui.use(['form', 'table', 'layer', 'admin', 'element'], function () {
+    layui.use(['form', 'table', 'layer', 'admin', 'element', 'tree', 'index'], function () {
         var form = layui.form;
         var table = layui.table;
         var admin = layui.admin;
+        var tree = layui.tree;
         var $ = layui.jquery;
+        var index = layui.index;
+        var element = layui.element;
 
         form.render('select');
-        form.verify({
-            "mobile": function (e) {
-                if (null != e && e.length > 0 && !(/^1\d{10}$/.test(e))) {
-                    return "请输入正确的手机号";
-                }
-            },
-            "swEmail": function (e) {
-                if (null != e && e.length > 0 && !(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(e))) {
-                    return "邮箱格式不正确";
-                }
-            }
-        });
-
-        var initTree = function (nodes) {
-            var menuSetting = {
-                view: {
-                    dblClickExpand: false,
-                    showLine: true,
-                    showIcon: true,
-                    selectedMulti: false,
-                    addHoverDom: addHoverDom,
-                    removeHoverDom: removeHoverDom
-                },
-                data: {
-                    simpleData: {
-                        enable: true
-                    }
-                },
-                edit: {
-                    enable: true,
-                    showRemoveBtn: true,
-                    removeTitle: "删除商户",
-                    showRenameBtn: false,
-                    drag: {
-                        isCopy: false,
-                        isMove: false
-                    }
-                },
-                callback: {
-                    beforeRemove: beforeRemove,
-                    onDblClick: ondblclick
-                }
-            };
-            $.fn.zTree.init($("#shoptree"), menuSetting, nodes);
-        }
-
-        function beforeRemove(treeId, treeNode) {
-            var zTree = $.fn.zTree.getZTreeObj("shoptree");
-            if (treeNode.isParent) {
-                var childrenNodes = treeNode.children;
-                if (childrenNodes && childrenNodes.length !== 0) {
-                    layer.msg("请先删除下级商户", {icon: 2, time: 2000});
-                    return false;
-                }
-            }
-            zTree.selectNode(treeNode);
-            var flag = false;
-            if (confirm("确认删除商户【" + treeNode.name + "】吗?")) {
-                layer.load(2);
-                $.ajax({
-                    type: "POST",
-                    dataType: "json",
-                    url: '[[@{/shop/deleteshop}]]',
-                    async: false,  //必须同步
-                    data: {
-                        shopid: treeNode.id,
-                        _csrf: $("meta[name='_csrf_token']").attr("value")
-                    },
-                    success: function (result) {
-                        console.log(result);
-                        layer.closeAll('loading');
-                        if (result.code === 200) {
-                            layer.msg(result.msg, {icon: 1});
-                            flag = true;
-                        } else if (result.code === 401) {
-                            layer.msg(result.msg, {icon: 2, time: 1500}, function () {
-                                location.replace('[[@{/login}]]');
-                            }, 1000);
-                        } else {
-                            console.log('err:' + result.code);
-                            layer.msg(result.msg, {icon: 2});
-                        }
-                    },
-                    error: function () {
-                        console.log(ret);
-                        layer.closeAll('loading');
-                        layer.msg("请求服务器失败!", {icon: 2});
-                    }
-                });
-            }
-            return flag;
-        }
-
-        function removeHoverDom(treeId, treeNode) {
-            $("#addBtn_" + treeNode.tId).unbind().remove();
-        }
-
-        $('#cancelbtn').click(function () {
-            $("#shop-info").hide();
-        });
-
-        form.on('submit(form-submit-shop-btn)', function (data) {
-            layer.load(2);
-            var vdata = data.field;
-            vdata["_csrf"] = $("meta[name='_csrf_token']").attr("value");
-            $.ajax({
-                type: "POST",
-                dataType: "json",
-                url: '[[@{/shop/saveorupdate}]]',
-                data: vdata,
-                success: function (result) {
-                    layer.closeAll('loading');
-                    debugger
-                    if (result.code === 200) {
-                        var zTree = $.fn.zTree.getZTreeObj("shoptree");
-                        var treeNode = zTree.getNodeByParam("id", '' + result.shop.shopid, null);
-                        if (undefined !== treeNode && treeNode != null) {
-                            treeNode.id = '' + result.shop.shopid;
-                            treeNode.pId = '' + result.shop.fshopid;
-                            treeNode.name = '' + result.shop.shopid + '_' + result.shop.shopname;
-                            zTree.updateNode(treeNode); //修改节点
-                        } else {
-                            var ftreeNode = zTree.getNodeByParam("id", '' + result.shop.fshopid, null);
-                            var newNode = {
-                                id: '' + result.shop.shopid,
-                                pId: '' + result.shop.fshopid,
-                                name: '' + result.shop.shopid + '_' + result.shop.shopname,
-                                shoptype: result.shop.shoptype
-                            }
-                            if (result.shop.shoptype === 'normal') {
-                                newNode["iconSkin"] = "pIcon02";
-                            } else {
-                                newNode["iconSkin"] = "pIcon01";
-                            }
-                            zTree.addNodes(ftreeNode, newNode); //新加树节点
-                        }
-                        layer.msg(result.msg, {icon: 1});
-                        if (!$("#shop-add-continue-flag").is(":checked")) {
-                            $("#shop-info").hide();
-                        }
-                    } else if (result.code === 401) {
-                        layer.msg(result.msg, {icon: 2, time: 1500}, function () {
-                            location.replace('[[@{/login}]]');
-                        }, 1000);
-                    } else {
-                        console.log('err:' + result.code);
-                        layer.msg(result.msg, {icon: 2});
-                    }
-                },
-                error: function () {
-                    layer.closeAll('loading');
-                    layer.msg("请求服务器失败!", {icon: 2});
-                }
-            });
-        });
-
-        function addHoverDom(treeId, treeNode) {
-            if (treeNode.shoptype !== 'normal') {
-                var sObj = $("#" + treeNode.tId + "_span");
-                if (treeNode.editNameFlag || $("#addBtn_" + treeNode.tId).length > 0) return;
-                var addStr = "<span class='button add' id='addBtn_" + treeNode.tId
-                    + "' title='新增下级商户' onfocus='this.blur();'></span>";
-                sObj.after(addStr);
-                var btn = $("#addBtn_" + treeNode.tId);
-                if (btn) btn.bind("click", function () {
-                    form.val("shop-info-form", {
-                        "shopid": "0",
-                        "shopname": "",
-                        "shopaccno": "",
-                        "fshopid": treeNode.id,
-                        "shoptype": "normal",
-                        "zipcode": "",
-                        "addr": "",
-                        "contactman": "",
-                        "idtype": "idcard",
-                        "idno": "",
-                        "mobile": "",
-                        "email": "",
-                        "tel": ""
+        var renderShopTree = function (nodes) {
+            tree.render({
+                elem: '#shop-manager-ztree',
+                data: nodes,
+                showCheckbox: false,
+                accordion: true,
+                click: function (obj) {
+                    var nd = obj.data;
+                    table.reload('shopManagerTable', {
+                        where: {status: '', shopname: '', shopid: nd.id},
+                        page: {curr: 1}
                     });
-                    $("#fshopid").attr("readonly", "readonly");
-                    $("#shoptype option[value='root']").remove();
-                    $("#shoptype").removeAttr("disabled");
-                    form.render('select');
-                    $("#submitbtn-shop-btn").text("新增");
-                    $("#shop-add-continue-flag").prop("checked", false);
-                    $("#shop-add-hid-div").show();
-                    $("#shop-info").show();
-                    return false;
-                });
-            }
-        }
-
-        function ondblclick(event, treeId, treeNode) {
-            admin.dgo('[[@{/shop/getshopinfo}]]', {
-                "shopid": treeNode.id
-            }, function (data) {
-                console.log("getshopinfo返回", data);
-                if (data.code === 200) {
-                    debugger
-                    var root_index = $("#shoptype option[value='root']").attr("index");
-                    if(undefined == root_index){
-                        $("#shoptype").append("<option value=\"root\">根商户</option>");
-                    }
-                    if(null==data.shop.idtype){
-                        data.shop["idtype"]="idcard"
-                    }
-                    form.val("shop-info-form", data.shop);
-                    $("#fshopid").removeAttr("readonly");
-                    $("#shoptype").attr('disabled', 'disabled');
-                    form.render('select');
-                    $("#submitbtn-shop-btn").text("保存");
-                    $("#shop-add-continue-flag").prop("checked", false);
-                    $("#shop-add-hid-div").hide();
-                    $("#shop-info").show();
-                } else if (data.code === 401) {
-                    layer.msg(data.msg, {icon: 2, time: 1500}, function () {
-                        location.replace('[[@{/login}]]');
-                    }, 1000);
-                } else {
-                    layer.msg(data.msg, {icon: 2, time: 2000});
                 }
-            }, function (ret) {
-                console.log(ret);
-                layer.msg('查询商户失败了,请求服务器异常', {icon: 2});
             });
         }
-
         admin.dgo('[[@{/shop/shoptree}]]', {}, function (data) {
             if (data.code === 200) {
-                initTree(data.data);
+                renderShopTree(data.data);
             } else if (data.code === 401) {
                 layer.msg(data.msg, {icon: 2, time: 1500}, function () {
                     location.replace('[[@{/login}]]');
@@ -417,5 +104,151 @@
             console.log(ret);
             layer.msg('查询商户树失败了,请稍后再试', {icon: 2});
         });
+
+        $('#shop-manager-search-reset-btn').click(function () {
+            $("#shop-manager-search-status").val("");
+            $("#shop-manager-search-shopname").val("");
+            form.render('select');
+        });
+
+        $('#shop-manager-search-btn').click(function () {
+            table.reload('shopManagerTable', {
+                where: {
+                    status: $("#shop-manager-search-status").val(),
+                    shopname: $("#shop-manager-search-shopname").val(),
+                    shopid: null
+                }, page: {curr: 1}
+            });
+        });
+
+        $("#shop-manager-search-add-btn").click(function () {
+            // element.tabDelete('admin-pagetabs', '_shop_manager_add');
+            index.openNewTab({
+                url: "[[@{/shop/load4addshop}]]",
+                menuId: '_shop_manager_add',
+                title: '新增商户'
+            });
+        });
+
+        // 渲染表格
+        table.render({
+            elem: '#shopManagerTable',
+            url: '[[@{/shop/shoplist}]]',
+            page: true,
+            width: 1010,
+            cols: [
+                [   {align: 'center', title: '操作', align: 'center', width: 260, fixed: 'left', toolbar: '#shop-manager-table-bar'},
+                    {
+                        field: 'shopid',
+                        title: '商户号',
+                        width: 100,
+                        align: 'center',
+                        sort: true
+                    },
+                    {field: 'shopname', title: '商户名称', align: 'center', sort: true},
+                    {
+                        field: 'status', title: '商户状态', width: 110, align: 'center', sort: true, templet: function (e) {
+                            if (e.status == 'uncheck') {
+                                return '<span class="layui-badge layui-bg-orange">待审核</span>';
+                            } else if (e.status == 'normal') {
+                                return '<span class="layui-badge layui-bg-green">正常</span>';
+                            } else if (e.status == 'closed') {
+                                return '<span class="layui-badge layui-bg-gray">注销</span>';
+                            } else if (e.status == 'reject') {
+                                return '<span class="layui-badge">驳回</span>';
+                            } else {
+                                return e.status;
+                            }
+                        }
+                    },
+                    {
+                        field: 'shoptype',
+                        title: '商户类型',
+                        align: 'center',
+                        width: 110,
+                        sort: true,
+                        templet: function (e) {
+                            if (e.shoptype == 'root') {
+                                return '根节点';
+                            } else if (e.shoptype == 'group') {
+                                return '商户组';
+                            } else if (e.shoptype == 'normal') {
+                                return '结算商户';
+                            } else {
+                                return e.shoptype
+                            }
+                        }
+                    },
+                    {
+                        field: 'shopaccno',
+                        title: '商户账号',
+                        align: 'center',
+                        width: 120,
+                        sort: true,
+                        templet: function (e) {
+                            if (null != e.shopaccno && '' != e.shopaccno) {
+                                return e.shopaccno;
+                            } else {
+                                return '-';
+                            }
+                        }
+                    }
+                ]
+            ]
+        });
+
+        //监听单元格
+        table.on('tool(shopManagerTable-filter)', function (obj) {
+            var data = obj.data;
+            if('showShop' == obj.event){
+                //查看详情
+                element.tabDelete('admin-pagetabs', '_shop_manager_detail');
+                index.openNewTab({
+                    url: "[[@{/shop/getshopinfo}]]?shopid="+data.shopid,
+                    menuId: '_shop_manager_detail',
+                    title: '商户详情'
+                });
+            }else if('editShop' == obj.event){
+                //修改
+                element.tabDelete('admin-pagetabs', '_shop_manager_update');
+                index.openNewTab({
+                    url: "[[@{/shop/load4updateshop}]]?shopid="+data.shopid,
+                    menuId: '_shop_manager_update',
+                    title: '修改商户'
+                });
+            }else if('delShop' == obj.event){
+                //删除
+                layer.confirm("确定要删除该商户吗?", function () {
+                    var token = $("meta[name='_csrf_token']").attr("value");
+                    admin.go('[[@{/shop/deleteshop}]]', {
+                        shopid: data.shopid,
+                        _csrf: token
+                    }, function (data) {
+                        if (data.code === 200) {
+                            layer.msg(data.msg, {icon: 1, time: 1000});
+                            // table.reload('shopManagerTable');
+                            admin.refresh();
+                        } else if (data.code === 401) {
+                            layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                                location.replace('[[@{/login}]]');
+                            }, 1000);
+                        } else {
+                            layer.msg(data.msg, {icon: 2});
+                            return;
+                        }
+                    }, function (err) {
+                        admin.errorBack(err);
+                    });
+                });
+            }else if('showShopCheck' == obj.event){
+                //审核意见
+                element.tabDelete('admin-pagetabs', '_shop_manager_chkdtl');
+                index.openNewTab({
+                    url: "[[@{/shop/getshopchk}]]?shopid="+data.shopid,
+                    menuId: '_shop_manager_chkdtl',
+                    title: '审批意见'
+                });
+            }
+        });
     });
 </script>
\ No newline at end of file
diff --git a/payapi/src/main/resources/templates/system/shop/opercheck.html b/payapi/src/main/resources/templates/system/shop/opercheck.html
new file mode 100644
index 0000000..c9450e7
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/shop/opercheck.html
@@ -0,0 +1,239 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">审核商户</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#!_shop_shopcheck">商户审批</a>
+          <a><cite>审核商户</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar" lay-filter="shop-check-info-form">
+            <div class="layui-card-header">商户基本信息</div>
+            <div class="layui-form-item" style="margin-left: 15px;margin-top: 15px;">
+                <label class="layui-form-label" style="color: red;width: 100px;"><span
+                        style="color: red;">*</span>商户类型</label>
+                <div class="layui-input-inline">
+                    <div th:if="${shop.shoptype} eq 'root' " class="layui-input" style="padding-top: 8px;">根节点</div>
+                    <div th:if="${shop.shoptype} eq 'group' " class="layui-input" style="padding-top: 8px;">商户组</div>
+                    <div th:if="${shop.shoptype} eq 'normal' " class="layui-input" style="padding-top: 8px;">结算商户</div>
+                </div>
+                <div class="layui-form-mid layui-word-aux">
+                    注意:商户组无商户账号,且能创建下级商户。结算商户是叶子商户,会创建商户账号。保存后无法修改!!!
+                </div>
+            </div>
+            <div class="layui-card-body">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">商户号</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${shop.shopid}]]</div>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">商户账号</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${shop.shopaccno}]]</div>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;"><span
+                                style="color: red;">*</span>上级商户号</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${shop.fshopname}]]</div>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;"><span
+                                style="color: red;">*</span>商户名</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${shop.shopname}]]</div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="layui-card-header">商户营业信息</div>
+            <div class="layui-card-body">
+                <div class="layui-form-item" style="margin-left: 15px;margin-top: 15px;">
+                    <label class="layui-form-label" style="width: 90px;"><span
+                            style="color: red;">*</span>营业执照编号</label>
+                    <div class="layui-input-inline" style="width: 525px;">
+                        <div class="layui-input" style="padding-top: 8px;">[[${shop.businessLicenseNo}]]</div>
+                    </div>
+                </div>
+
+                <div class="layui-form-item" style="margin-left: 15px;">
+                    <label class="layui-form-label" style="width: 90px;"><span
+                            style="color: red;">*</span>税务登记证号</label>
+                    <div class="layui-input-inline" style="width: 525px;">
+                        <div class="layui-input" style="padding-top: 8px;">[[${shop.taxRegistrationNo}]]</div>
+                    </div>
+                </div>
+
+                <div class="layui-form-item" style="margin-left: 15px;">
+                    <label class="layui-form-label" style="width: 90px;"><span
+                            style="color: red;">*</span>商户经营地址</label>
+                    <div class="layui-input-inline" style="width: 525px;">
+                        <div class="layui-input" style="padding-top: 8px;">[[${shop.addr}]]</div>
+                    </div>
+                </div>
+
+                <div class="layui-form-item" style="margin-left: 15px;">
+                    <label class="layui-form-label" style="width: 90px;"><span style="color: red;">*</span>法人姓名</label>
+                    <div class="layui-input-inline" style="width: 525px;">
+                        <div class="layui-input" style="padding-top: 8px;">[[${shop.legalPersonName}]]</div>
+                    </div>
+                </div>
+
+                <div class="layui-form-item" style="margin-left: 15px;">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 90px;"><span
+                                style="color: red;">*</span>法人证件类型</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${shop.legalPersonIdtype}]]</div>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 90px;"><span
+                                style="color: red;">*</span>法人证件号</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${shop.legalPersonIdno}]]</div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="layui-card-header">商户联系人信息</div>
+            <div class="layui-card-body">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">姓名</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${shop.contactman}]]</div>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">手机号</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${shop.mobile}]]</div>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">邮箱</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${shop.email}]]</div>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">电话</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${shop.tel}]]</div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <div class="layui-card-header">商户审核</div>
+            <div class="layui-card-body" style="padding-left: 0;margin-bottom: 15px;">
+                <div style="padding: 20px 0;background-color: #f8f8f8;">
+                    <div class="layui-form-item" style="margin-left: 15px;">
+                        <label class="layui-form-label" style="width: 90px;">审批流程号:</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${operChkdtl.chkNo}]]</div>
+                            <input type="hidden" id="hidden-shop-oper-check-chkno" th:value="${operChkdtl.chkNo}"/>
+                        </div>
+                    </div>
+                    <div class="layui-form-item" style="margin-left: 15px;">
+                        <label class="layui-form-label" style="width: 90px;">操作类型:</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;color: red;">[[${operChkdtl.chkMode}]]商户
+                            </div>
+                        </div>
+                    </div>
+                    <div class="layui-form-item" style="margin-left: 15px;">
+                        <label class="layui-form-label" style="width: 90px;color: red;">审核意见:</label>
+                        <div class="layui-input-inline" style="width: 525px;">
+                            <textarea placeholder="请输入意见" class="layui-textarea" id="shop-oper-check-chkmsg" maxlength="200"></textarea>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <div class="layui-form-item" style="padding-bottom: 20px;text-align: center;">
+                <button class="layui-btn" type="button" id="submitbtn-shop-check-pass-btn">同 意
+                </button>
+                <button class="layui-btn layui-btn-danger" type="button" id="submitbtn-shop-check-reject-btn">驳 回
+                </button>
+                <button class="layui-btn layui-btn-primary" type="button" id="submitbtn-shop-check-return-btn">返 回
+                </button>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script>
+    layui.use(['form', 'table', 'admin', 'jquery', 'element'], function () {
+        var form = layui.form;
+        var admin = layui.admin;
+        var $ = layui.jquery;
+        var element = layui.element;
+
+        $("#submitbtn-shop-check-return-btn").click(function () {
+            element.tabDelete('admin-pagetabs', '_shop_operchk_check'); //关闭现有详情
+            element.tabChange('admin-pagetabs', '_shop_shopcheck');
+            admin.refresh();
+        });
+
+        $("#submitbtn-shop-check-pass-btn").click(function () {
+            var chkmsg = $("#shop-oper-check-chkmsg").val();
+            // layer.confirm("确定同意吗?", function () {
+                doShopCheck('normal', chkmsg);
+            // });
+        });
+
+        $("#submitbtn-shop-check-reject-btn").click(function () {
+            var chkmsg = $("#shop-oper-check-chkmsg").val();
+            if(isempty(chkmsg)){
+                layer.msg("驳回时必须填写审核意见", {icon: 2, time: 1500});
+                return;
+            }
+             // layer.confirm("确定驳回吗?", function () {
+                doShopCheck('reject', chkmsg);
+            // });
+        });
+
+        function doShopCheck(type, msg) {
+            var chkno = $("#hidden-shop-oper-check-chkno").val();
+            var token = $("meta[name='_csrf_token']").attr("value");
+            admin.go('[[@{/shop/docheckshop}]]', {
+                chkno: chkno,
+                chkresult: type,
+                chkmsg: msg,
+                _csrf: token
+            }, function (data) {
+                if (data.code === 200) {
+                    layer.msg(data.msg, {icon: 1, time: 1000});
+                    element.tabDelete('admin-pagetabs', '_shop_operchk_check'); //关闭现有详情
+                    element.tabChange('admin-pagetabs', '_shop_shopcheck');
+                    admin.refresh();
+                } else if(data.code === 299){
+                    layer.msg('审核操作成功,但必须驳回! '+data.msg, {icon: 2, time: 1000});
+                    element.tabDelete('admin-pagetabs', '_shop_operchk_check'); //关闭现有详情
+                    element.tabChange('admin-pagetabs', '_shop_shopcheck');
+                    admin.refresh();
+                } else if (data.code === 401) {
+                    layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                        location.replace('[[@{/login}]]');
+                    }, 1000);
+                } else {
+                    layer.msg(data.msg, {icon: 2});
+                    return;
+                }
+            }, function (err) {
+                admin.errorBack(err);
+            });
+        }
+    });
+</script>
\ No newline at end of file
diff --git a/payapi/src/main/resources/templates/system/shop/shopcheck.html b/payapi/src/main/resources/templates/system/shop/shopcheck.html
new file mode 100644
index 0000000..270c86a
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/shop/shopcheck.html
@@ -0,0 +1,134 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">商户审批</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#">商户中心</a>
+          <a><cite>商户审批</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            搜索:
+            <input id="search-shop-operchk-searchkey" class="layui-input search-input" type="text" maxlength="30"
+                   style="width: 280px;" placeholder="输入审批流程编号,申请人,审核人查询"/>
+            <select id="search-shop-operchk-status" class="layui-select search-input">
+                <option value="">选择状态</option>
+                <option value="uncheck">待审核</option>
+                <option value="normal">同意</option>
+                <option value="reject">驳回</option>
+            </select>
+            <button id="btn-search-shop-operchk" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            </button>
+            <button id="btn-reset-shop-operchk" class="layui-btn layui-btn-primary" data-type="reset"><i
+                    class="layui-icon"></i>清 空
+            </button>
+        </div>
+        <table class="layui-table" id="shopOperchkTable" lay-filter="shopOperchkTable-filter"></table>
+    </div>
+</div>
+
+<!-- 表格操作列 -->
+<script type="text/html" id="shop-operchk-table-bar">
+    {{# if(d.chkResult =='uncheck') { }}
+        <a class="layui-btn layui-btn-xs" lay-event="checkShop">审核</a>
+    {{# } }}
+</script>
+
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element', 'index'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+        var element = layui.element;
+        var index = layui.index;
+
+        form.render("select");
+        // 渲染表格
+        table.render({
+            elem: '#shopOperchkTable',
+            url: '[[@{/shop/shopchecklist}]]',
+            page: true,
+            cols: [
+                [
+                    {align: 'center', title: '操作', align: 'center', width: 80, fixed: 'left', toolbar: '#shop-operchk-table-bar'},
+                    {field: 'chkNo', title: '审批流程编号', align: 'center', width: 140, fixed: 'left', sort: true},
+                    {
+                        field: 'createOpername',
+                        title: '申请人',
+                        width: 150,
+                        align: 'center'
+                    },
+                    {
+                        field: 'createtime',
+                        title: '申请时间',
+                        align: 'center',
+                        width: 190,
+                        sort: true,
+                        templet: function (e) {
+                            return admin.formatDate(e.createtime);
+                        }
+                    },
+                    {
+                        field: 'chkMode', title: '操作类型', align: 'center', width: 100, templet: function (e) {
+                            return e.chkMode + '商户';
+                        }
+                    },
+                    {
+                        field: 'chkResult', title: '状态', align: 'center', width: 100, templet: function (e) {
+                            if ("uncheck" == e.chkResult) {
+                                return '<span class="layui-badge layui-bg-orange">待审核</span>';
+                            } else if ("normal" == e.chkResult) {
+                                return '<span class="layui-badge layui-bg-green">同意</span>';
+                            } else if ("reject" == e.chkResult) {
+                                return '<span class="layui-badge">驳回</span>';
+                            } else {
+                                return e.chkResult;
+                            }
+                        }
+                    },
+                    {field: 'chkMsg', title: '审核意见', align: 'center'},
+                    {field: 'checkOpername', title: '审核人', align: 'center', width: 150},
+                    {
+                        field: 'checktime',
+                        title: '审核时间',
+                        align: 'center',
+                        width: 190,
+                        sort: true,
+                        templet: function (e) {
+                            return admin.formatDate(e.checktime);
+                        }
+                    }
+                ]
+            ]
+        });
+
+        // 搜索按钮点击事件
+        $('#btn-search-shop-operchk').click(function () {
+            table.reload('shopOperchkTable', {
+                where: {
+                    status: $("#search-shop-operchk-status").val(),
+                    searchkey: $("#search-shop-operchk-searchkey").val()
+                }, page: {curr: 1}
+            });
+        });
+
+        $('#btn-reset-shop-operchk').click(function () {
+            $("#search-shop-operchk-status").val("");
+            $("#search-shop-operchk-searchkey").val("");
+        });
+
+        //监听单元格
+        table.on('tool(shopOperchkTable-filter)', function (obj) {
+            var data = obj.data;
+            if('checkShop' == obj.event){
+                //查看详情
+                element.tabDelete('admin-pagetabs', '_shop_operchk_check');
+                index.openNewTab({
+                    url: "[[@{/shop/opercheck}]]?chkno="+data.chkNo,
+                    menuId: '_shop_operchk_check',
+                    title: '审核商户'
+                });
+            }
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/payapi/src/main/resources/templates/system/shop/shopchk.html b/payapi/src/main/resources/templates/system/shop/shopchk.html
new file mode 100644
index 0000000..ed8e62d
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/shop/shopchk.html
@@ -0,0 +1,144 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">审批意见</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#!_shop_index">商户管理</a>
+          <a><cite>审批意见</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form" lay-filter="shop-manager-chkdtl-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-block" style="width: 300px;">
+                        <input type="text" name="searchkey" id="shop-manager-chkdtl-search--searchkey"
+                               class="layui-input"
+                               placeholder="输入审批流程编号,申请人,审核人查询"/>
+                    </div>
+                </div>
+                <div class="layui-inline">
+                    <label class="layui-form-label">审核状态</label>
+                    <div class="layui-input-block" style="width: 260px;">
+                        <select name="status" id="shop-manager-chkdtl-search-status" class="layui-select">
+                            <option value="">请选择</option>
+                            <option value="uncheck">待审核</option>
+                            <option value="normal">同意</option>
+                            <option value="reject">驳回</option>
+                        </select>
+                    </div>
+                </div>
+                <div class="layui-inline">
+                    <input type="hidden" name="shopid" id="shop-manager-chkdtl-search-shopid"
+                           th:value="${selectShopid}"/>
+                </div>
+                <div class="layui-inline" style="margin-left: 20px;">
+                    <button id="shop-manager-chkdtl-search-btn" class="layui-btn icon-btn" data-type="search"><i
+                            class="layui-icon">&#xe615;</i>搜索
+                    </button>
+                    <button id="shop-manager-chkdtl-return-btn" class="layui-btn layui-btn-warm">返回</button>
+                    <button id="shop-manager-chkdtl-reset-btn" class="layui-btn layui-btn-primary" data-type="reset">清空
+                    </button>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="layui-card-body">
+        <table class="layui-table" id="shopManagerChkdtlTable" lay-filter="shopManagerChkdtlTable-filter"></table>
+    </div>
+</div>
+
+<!--<script type="text/html" id="shop-manager-chkdtl-toolbar">-->
+<!--<div class="layui-btn-container"></div>-->
+<!--</script>-->
+
+<script>
+    layui.use(['form', 'table', 'admin', 'element'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+        var element = layui.element;
+
+        form.render("select");
+
+        // 渲染表格
+        var renderTable = function (obj) {
+            table.render({
+                id: 'shopManagerChkdtlTable',
+                title: '审批意见',
+                elem: '#shopManagerChkdtlTable',
+                url: '[[@{/shop/getshopchklist}]]',
+                page: true,
+                where: obj,
+                // toolbar: '#shop-manager-chkdtl-toolbar',
+                cols: [
+                    [
+                        {field: 'chkNo', title: '审批流程编号', align: 'center', width: 140, fixed: 'left', sort: true},
+                        {
+                            field: 'createOpername',
+                            title: '申请人',
+                            width: 150,
+                            align: 'center'
+                        },
+                        {
+                            field: 'createtime',
+                            title: '申请时间',
+                            align: 'center',
+                            width: 190,
+                            sort: true,
+                            templet: function (e) {
+                                return admin.formatDate(e.createtime);
+                            }
+                        },
+                        {field: 'chkMode', title: '操作类型', align: 'center', width: 100},
+                        {
+                            field: 'chkResult', title: '状态', align: 'center', width: 100, templet: function (e) {
+                                if ("uncheck" == e.chkResult) {
+                                    return '<span class="layui-badge layui-bg-orange">待审核</span>';
+                                } else if ("normal" == e.chkResult) {
+                                    return '<span class="layui-badge layui-bg-green">同意</span>';
+                                } else if ("reject" == e.chkResult) {
+                                    return '<span class="layui-badge">驳回</span>';
+                                } else {
+                                    return e.chkResult;
+                                }
+                            }
+                        },
+                        {field: 'chkMsg', title: '审核意见', align: 'center'},
+                        {field: 'checkOpername', title: '审核人', align: 'center', width: 150},
+                        {
+                            field: 'checktime', title: '审核时间', align: 'center', width: 190, sort: true, templet: function (e) {
+                                return admin.formatDate(e.checktime);
+                            }
+                        }
+                    ]
+                ]
+            });
+        }
+        renderTable({
+            shopid: $("#shop-manager-chkdtl-search-shopid").val()
+        });
+
+        $("#shop-manager-chkdtl-search-btn").click(function () {
+            table.reload('shopManagerChkdtlTable', {
+                where: {
+                    shopid: $("#shop-manager-chkdtl-search-shopid").val(),
+                    status: $("#shop-manager-chkdtl-search-status").val(),
+                    searchkey: $("#shop-manager-chkdtl-search--searchkey").val(),
+                }, page: {curr: 1}
+            });
+        });
+
+        $("#shop-manager-chkdtl-reset-btn").click(function () {
+            $("#shop-manager-chkdtl-search-status").val("");
+            $("#shop-manager-chkdtl-search--searchkey").val("");
+            form.render("select");
+        });
+
+        $("#shop-manager-chkdtl-return-btn").click(function () {
+            element.tabDelete('admin-pagetabs', '_shop_manager_chkdtl'); //关闭现有详情
+            element.tabChange('admin-pagetabs', '_shop_index');
+            // admin.refresh();
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/payapi/src/main/resources/templates/system/shop/shopdetail.html b/payapi/src/main/resources/templates/system/shop/shopdetail.html
new file mode 100644
index 0000000..148225a
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/shop/shopdetail.html
@@ -0,0 +1,209 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">商户详情</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#!_shop_index">商户管理</a>
+          <a><cite>商户详情</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div id="shop-detail-info" class="layui-form toolbar" lay-filter="shop-detail-info-form">
+            <div class="layui-card-header">商户基本信息</div>
+            <div class="layui-form-item" style="margin-left: 15px;margin-top: 15px;">
+                <label class="layui-form-label" style="color: red;width: 100px;"><span
+                        style="color: red;">*</span>商户类型</label>
+                <div class="layui-input-inline">
+                    <select name="shoptype" id="shop-detail-shoptype" lay-filter="shop-detail-shoptype-filter"
+                            lay-verify="required" disabled="disabled">
+                        <option value="root" th:selected="${shop.shoptype=='root'}">根节点</option>
+                        <option value="group" th:selected="${shop.shoptype=='group'}">商户组</option>
+                        <option value="normal" th:selected="${shop.shoptype=='normal'}">结算商户</option>
+                    </select>
+                </div>
+                <div class="layui-form-mid layui-word-aux">
+                    注意:商户组无商户账号,且能创建下级商户。结算商户是叶子商户,会创建商户账号。保存后无法修改!!!
+                </div>
+            </div>
+            <div class="layui-card-body">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">商户号</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${shop.shopid}]]</div>
+                            <input type="hidden" id="hidden-shop-detail-fshopid" th:value="${shop.fshopid}"/>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">商户账号</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${shop.shopaccno}]]</div>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;"><span
+                                style="color: red;">*</span>上级商户号</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="fshopid" id="shop-detail-fshopid" lay-filter="shop-detail-fshopid"
+                                   class="layui-input" autocomplete="off" placeholder="请选择"
+                                   lay-verify="required|number"/>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;"><span
+                                style="color: red;">*</span>商户名</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${shop.shopname}]]</div>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;color: red;">商户状态</label>
+                        <div class="layui-input-inline">
+                            <div th:if="${shop.status} eq 'uncheck' " class="layui-input" style="padding-top: 8px;color: orange;font-weight: bold;font-size: 16px;">待审核</div>
+                            <div th:if="${shop.status} eq 'normal' " class="layui-input" style="padding-top: 8px;color: green;font-weight: bold;font-size: 16px;">正 常</div>
+                            <div th:if="${shop.status} eq 'closed' " class="layui-input" style="padding-top: 8px;color: #ddd;font-weight: bold;font-size: 16px;">注 销</div>
+                            <div th:if="${shop.status} eq 'reject' " class="layui-input" style="padding-top: 8px;color: red;font-weight: bold;font-size: 16px;">驳 回</div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="layui-card-header">商户营业信息</div>
+            <div class="layui-card-body">
+                <div class="layui-form-item" style="margin-left: 15px;margin-top: 15px;">
+                    <label class="layui-form-label" style="width: 90px;"><span
+                            style="color: red;">*</span>营业执照编号</label>
+                    <div class="layui-input-inline" style="width: 525px;">
+                        <div class="layui-input" style="padding-top: 8px;">[[${shop.businessLicenseNo}]]</div>
+                    </div>
+                </div>
+
+                <div class="layui-form-item" style="margin-left: 15px;">
+                    <label class="layui-form-label" style="width: 90px;"><span
+                            style="color: red;">*</span>税务登记证号</label>
+                    <div class="layui-input-inline" style="width: 525px;">
+                        <div class="layui-input" style="padding-top: 8px;">[[${shop.taxRegistrationNo}]]</div>
+                    </div>
+                </div>
+
+                <div class="layui-form-item" style="margin-left: 15px;">
+                    <label class="layui-form-label" style="width: 90px;"><span
+                            style="color: red;">*</span>商户经营地址</label>
+                    <div class="layui-input-inline" style="width: 525px;">
+                        <div class="layui-input" style="padding-top: 8px;">[[${shop.addr}]]</div>
+                    </div>
+                </div>
+
+                <div class="layui-form-item" style="margin-left: 15px;">
+                    <label class="layui-form-label" style="width: 90px;"><span style="color: red;">*</span>法人姓名</label>
+                    <div class="layui-input-inline" style="width: 525px;">
+                        <div class="layui-input" style="padding-top: 8px;">[[${shop.legalPersonName}]]</div>
+                    </div>
+                </div>
+
+                <div class="layui-form-item" style="margin-left: 15px;">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 90px;"><span
+                                style="color: red;">*</span>法人证件类型</label>
+                        <div class="layui-input-inline">
+                            <select name="legalPersonIdtype" id="shop-detail-legalPersonIdtype" th:field="*{shop.legalPersonIdtype}"
+                                    lay-filter="shop-detail-legalPersonIdtype-filter" class="layui-select" disabled="disabled">
+                                <option th:each="bean : ${idtypeList}" th:value="${bean.dictval}">[[${bean.dictcaption}]]</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 90px;"><span
+                                style="color: red;">*</span>法人证件号</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${shop.legalPersonIdno}]]</div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="layui-card-header">商户联系人信息</div>
+            <div class="layui-card-body">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">姓名</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${shop.contactman}]]</div>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">手机号</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${shop.mobile}]]</div>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">邮箱</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${shop.email}]]</div>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">电话</label>
+                        <div class="layui-input-inline">
+                            <div class="layui-input" style="padding-top: 8px;">[[${shop.tel}]]</div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <div class="layui-form-item" style="padding-bottom: 20px;text-align: center;">
+                <button class="layui-btn layui-btn-primary" type="button" id="submitbtn-shop-detail-return-btn">返回
+                </button>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script>
+    layui.use(['form', 'table', 'admin', 'jquery', 'element', 'treeSelect'], function () {
+        var form = layui.form;
+        var admin = layui.admin;
+        var $ = layui.jquery;
+        var element = layui.element;
+        var treeSelect = layui.treeSelect;
+
+        form.render("select");
+
+        treeSelect.render({
+            elem: '#shop-detail-fshopid',
+            data: '[[@{/shop/selectshopgroup}]]',
+            type: 'get',
+            placeholder: '请选择',
+            search: false,
+            style: {
+                folder: {
+                    enable: false
+                },
+                line: {
+                    enable: true
+                }
+            },
+            // 点击回调
+            click: function (d) {
+                var treeNode = d.current;
+                return true;
+            },
+            success: function (d) {
+                console.log(d); // 加载完成后的回调函数
+                var df = $("#hidden-shop-detail-fshopid").val();
+                treeSelect.checkNode('shop-detail-fshopid', df);
+                treeSelect.disabled();
+            }
+        });
+
+        $("#submitbtn-shop-detail-return-btn").click(function () {
+            element.tabDelete('admin-pagetabs', '_shop_manager_detail'); //关闭现有详情
+            element.tabChange('admin-pagetabs', '_shop_index');
+            admin.refresh();
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/payapi/src/main/resources/templates/system/shop/updateshop.html b/payapi/src/main/resources/templates/system/shop/updateshop.html
new file mode 100644
index 0000000..da90dc3
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/shop/updateshop.html
@@ -0,0 +1,333 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">修改商户</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#!_shop_index">商户管理</a>
+          <a><cite>修改商户</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div id="shop-update-info" class="layui-form toolbar" lay-filter="shop-update-info-form">
+            <div class="layui-card-header">商户基本信息</div>
+            <div class="layui-form-item" style="margin-left: 15px;margin-top: 15px;">
+                <label class="layui-form-label" style="color: red;width: 100px;"><span
+                        style="color: red;">*</span>商户类型</label>
+                <div class="layui-input-inline">
+                    <select name="shoptype" id="shop-update-shoptype" lay-filter="shop-update-shoptype-filter"
+                            lay-verify="required" disabled="disabled">
+                        <option value="root" th:selected="${shop.shoptype=='root'}">根节点</option>
+                        <option value="group" th:selected="${shop.shoptype=='group'}">商户组</option>
+                        <option value="normal" th:selected="${shop.shoptype=='normal'}">结算商户</option>
+                    </select>
+                </div>
+                <div class="layui-form-mid layui-word-aux">
+                    注意:商户组无商户账号,且能创建下级商户。结算商户是叶子商户,会创建商户账号。保存后无法修改!!!
+                </div>
+            </div>
+            <div class="layui-card-body">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">商户号</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="shopid" class="layui-input" style="background-color: #f1f1f1;"
+                                   id="shop-update-shopid" th:value="${shop.shopid}"
+                                   readonly="readonly"/>
+                            <input type="hidden" id="hidden-shop-update-fshopid" th:value="${shop.fshopid}"/>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">商户账号</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="shopaccno" autocomplete="off" style="background-color: #f1f1f1;"
+                                   class="layui-input" readonly="readonly" th:value="${shop.shopaccno}" />
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;"><span
+                                style="color: red;">*</span>上级商户号</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="fshopid" id="shop-update-fshopid" lay-filter="shop-update-fshopid"
+                                   class="layui-input" autocomplete="off" placeholder="请选择"
+                                   lay-verify="required|number"/>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;"><span
+                                style="color: red;">*</span>商户名</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="shopname" id="shop-update-shopname" autocomplete="off" th:value="${shop.shopname}"
+                                   class="layui-input" maxlength="30" lay-verify="required"/>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="layui-card-header">商户营业信息</div>
+            <div class="layui-card-body">
+                <div class="layui-form-item" style="margin-left: 15px;margin-top: 15px;">
+                    <label class="layui-form-label" style="width: 90px;"><span
+                            style="color: red;">*</span>营业执照编号</label>
+                    <div class="layui-input-inline" style="width: 525px;">
+                        <input name="businessLicenseNo" id="shop-update-businessLicenseNo" class="layui-input"
+                               autocomplete="off" th:value="${shop.businessLicenseNo}" />
+                    </div>
+                </div>
+
+                <div class="layui-form-item" style="margin-left: 15px;">
+                    <label class="layui-form-label" style="width: 90px;"><span
+                            style="color: red;">*</span>税务登记证号</label>
+                    <div class="layui-input-inline" style="width: 525px;">
+                        <input name="taxRegistrationNo" id="shop-update-taxRegistrationNo" class="layui-input"
+                               autocomplete="off" th:value="${shop.taxRegistrationNo}" />
+                    </div>
+                </div>
+
+                <div class="layui-form-item" style="margin-left: 15px;">
+                    <label class="layui-form-label" style="width: 90px;"><span
+                            style="color: red;">*</span>商户经营地址</label>
+                    <div class="layui-input-inline" style="width: 525px;">
+                        <input name="addr" id="shop-update-addr" class="layui-input" autocomplete="off" th:value="${shop.addr}" />
+                    </div>
+                </div>
+
+                <div class="layui-form-item" style="margin-left: 15px;">
+                    <label class="layui-form-label" style="width: 90px;"><span style="color: red;">*</span>法人姓名</label>
+                    <div class="layui-input-inline" style="width: 525px;">
+                        <input name="legalPersonName" id="shop-update-legalPersonName" class="layui-input"
+                               autocomplete="off" th:value="${shop.legalPersonName}" />
+                    </div>
+                </div>
+
+                <div class="layui-form-item" style="margin-left: 15px;">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 90px;"><span
+                                style="color: red;">*</span>法人证件类型</label>
+                        <div class="layui-input-inline">
+                            <select name="legalPersonIdtype" id="shop-update-legalPersonIdtype" th:field="*{shop.legalPersonIdtype}"
+                                    lay-filter="shop-update-legalPersonIdtype-filter" class="layui-select">
+                                <option th:each="bean : ${idtypeList}" th:value="${bean.dictval}">[[${bean.dictcaption}]]</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 90px;"><span
+                                style="color: red;">*</span>法人证件号</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="legalPersonIdno" id="shop-update-legalPersonIdno"
+                                   class="layui-input" th:value="${shop.legalPersonIdno}"
+                                   maxlength="20"
+                                   autocomplete="off"/>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="layui-card-header">商户联系人信息</div>
+            <div class="layui-card-body">
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">姓名</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="contactman" id="shop-update-contactman" class="layui-input"
+                                   autocomplete="off" th:value="${shop.contactman}" />
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">手机号</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="mobile" id="shop-update-mobile" class="layui-input" maxlength="20"
+                                   autocomplete="off" th:value="${shop.mobile}"
+                                   lay-verify="mobile"/>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-form-item">
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">邮箱</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="email" class="layui-input" autocomplete="off"
+                                   id="shop-update-email" th:value="${shop.email}" />
+                        </div>
+                    </div>
+                    <div class="layui-inline">
+                        <label class="layui-form-label" style="width: 100px;">电话</label>
+                        <div class="layui-input-inline">
+                            <input type="text" name="tel" id="shop-update-tel" class="layui-input" maxlength="20"
+                                   autocomplete="off" th:value="${shop.tel}" />
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <div class="layui-form-item" style="padding-bottom: 20px;text-align: center;">
+                <button class="layui-btn" lay-filter="form-submit-shop-update-btn-filter" lay-submit
+                        id="submitbtn-shop-update-btn">保存
+                </button>
+                <button class="layui-btn layui-btn-primary" type="button" id="submitbtn-shop-update-return-btn">返回
+                </button>
+            </div>
+        </div>
+    </div>
+</div>
+
+<script>
+    layui.use(['form', 'table', 'admin', 'jquery', 'element', 'treeSelect'], function () {
+        var form = layui.form;
+        var admin = layui.admin;
+        var $ = layui.jquery;
+        var element = layui.element;
+        var treeSelect = layui.treeSelect;
+
+        form.render("select");
+        form.verify({
+            "mobile": function (e) {
+                if (null != e && e.length > 0 && !(/^1\d{10}$/.test(e))) {
+                    return "请输入正确的手机号";
+                }
+            },
+            "swEmail": function (e) {
+                if (null != e && e.length > 0 && !(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(e))) {
+                    return "邮箱格式不正确";
+                }
+            }
+        });
+
+        treeSelect.render({
+            elem: '#shop-update-fshopid',
+            data: '[[@{/shop/selectshopgroup}]]',
+            type: 'get',
+            placeholder: '请选择',
+            search: false,
+            style: {
+                folder: {
+                    enable: false
+                },
+                line: {
+                    enable: true
+                }
+            },
+            // 点击回调
+            click: function (d) {
+                var treeNode = d.current;
+                return true;
+            },
+            success: function (d) {
+                console.log(d); // 加载完成后的回调函数
+                var df = $("#hidden-shop-update-fshopid").val();
+                treeSelect.checkNode('shop-update-fshopid', df);
+            }
+        });
+
+
+
+        $("#submitbtn-shop-update-return-btn").click(function () {
+            element.tabDelete('admin-pagetabs', '_shop_manager_update'); //关闭现有详情
+            element.tabChange('admin-pagetabs', '_shop_index');
+            admin.refresh();
+        });
+
+        $("#submitbtn-shop-update-btn").click(function () {
+            var shopid = $("#shop-update-shopid").val();
+            var shoptype = $("#shop-update-shoptype").val();
+            var fshopid = $("#shop-update-fshopid").val();
+            var shopname = $("#shop-update-shopname").val();
+            var businessLicenseNo = $("#shop-update-businessLicenseNo").val();
+            var taxRegistrationNo = $("#shop-update-taxRegistrationNo").val();
+            var addr = $("#shop-update-addr").val();
+            var legalPersonName = $("#shop-update-legalPersonName").val();
+            var legalPersonIdtype = $("#shop-update-legalPersonIdtype").val();
+            var legalPersonIdno = $("#shop-update-legalPersonIdno").val();
+            var contactman = $("#shop-update-contactman").val();
+            var mobile = $("#shop-update-mobile").val();
+            var email = $("#shop-update-email").val();
+            var tel = $("#shop-update-tel").val();
+            var token = $("meta[name='_csrf_token']").attr("value");
+            if (isempty(shopid)) {
+                layer.msg("商户ID为空,请返回重新操作", {icon: 2, time: 1000});
+                $("#shop-update-shoptype").focus();
+                return;
+            }
+            if (isempty(fshopid)) {
+                layer.msg("请选择上级商户", {icon: 2, time: 1000});
+                $("#shop-update-fshopid").focus();
+                return;
+            }else if(shopid == fshopid){
+                layer.msg("上级商户不能是本身", {icon: 2, time: 1000});
+                $("#shop-update-fshopid").focus();
+                return;
+            }
+            if (isempty(shopname)) {
+                layer.msg("请填写商户名称", {icon: 2, time: 1000});
+                $("#shop-update-shopname").focus();
+                return;
+            }
+            if ("normal" == shoptype) {
+                if (isempty(businessLicenseNo)) {
+                    layer.msg("请填写商户营业执照编号", {icon: 2, time: 1000});
+                    $("#shop-update-businessLicenseNo").focus();
+                    return;
+                }
+                if (isempty(taxRegistrationNo)) {
+                    layer.msg("请填写商户税务登记证号", {icon: 2, time: 1000});
+                    $("#shop-update-taxRegistrationNo").focus();
+                    return;
+                }
+                if (isempty(addr)) {
+                    layer.msg("请填写商户经营地址", {icon: 2, time: 1000});
+                    $("#shop-update-addr").focus();
+                    return;
+                }
+                if (isempty(legalPersonName)) {
+                    layer.msg("请填写商户法人姓名", {icon: 2, time: 1000});
+                    $("#shop-update-legalPersonName").focus();
+                    return;
+                }
+                if (isempty(legalPersonIdtype)) {
+                    layer.msg("请选择法人证件类型", {icon: 2, time: 1000});
+                    $("#shop-update-legalPersonIdtype").focus();
+                    return;
+                }
+                if (isempty(legalPersonIdno)) {
+                    layer.msg("请填写法人证件号", {icon: 2, time: 1000});
+                    $("#shop-update-legalPersonIdno").focus();
+                    return;
+                }
+            }
+
+            layer.confirm("确定要保存吗?", function () {
+                admin.go('[[@{/shop/updateshop}]]', {
+                    shopid: shopid,
+                    fshopid: fshopid,
+                    shopname: shopname,
+                    businessLicenseNo: businessLicenseNo,
+                    taxRegistrationNo: taxRegistrationNo,
+                    addr: addr,
+                    legalPersonName: legalPersonName,
+                    legalPersonIdtype: legalPersonIdtype,
+                    legalPersonIdno: legalPersonIdno,
+                    contactman: contactman,
+                    mobile: mobile,
+                    email: email,
+                    tel: tel,
+                    _csrf: token
+                }, function (data) {
+                    if (data.code === 200) {
+                        layer.msg(data.msg, {icon: 1, time: 1000});
+                        element.tabDelete('admin-pagetabs', '_shop_manager_update'); //关闭现有详情
+                        element.tabChange('admin-pagetabs', '_shop_index');
+                        admin.refresh();
+                    } else if (data.code === 401) {
+                        layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('[[@{/login}]]');
+                        }, 1000);
+                    } else {
+                        layer.msg(data.msg, {icon: 2});
+                        return;
+                    }
+                }, function (err) {
+                    admin.errorBack(err);
+                });
+            });
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/payapi/src/main/resources/templates/system/thirdchk/chkdtl.html b/payapi/src/main/resources/templates/system/thirdchk/chkdtl.html
index fbc2b4e..dba78cb 100644
--- a/payapi/src/main/resources/templates/system/thirdchk/chkdtl.html
+++ b/payapi/src/main/resources/templates/system/thirdchk/chkdtl.html
@@ -65,7 +65,7 @@
     layui.use(['form', 'table', 'admin'], function () {
         var form = layui.form;
         var table = layui.table;
-        var admin = layui.admin
+        var admin = layui.admin;
 
         form.render("select");
         form.render("checkbox");