diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
index 1254d32..7fc2400 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
@@ -90,8 +90,10 @@
       if (StringUtil.isEmpty(person.getStatus())) {
         person.setStatus(TradeDict.STATUS_NORMAL);
       }
+      person.setLastsaved(systemUtilService.getSysdatetime().getHostdatetime());
       person.setTenantid(TenantContext.getTenantSchema());
       personDao.save(person);
+      return JsonResult.ok("修改成功");
     } else {
       TPerson has = personDao.findByIdentity(person.getIdtype(), person.getIdno());
       if (has != null) {
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
index c2d2a32..8632b7f 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
@@ -6,6 +6,8 @@
 import org.springframework.boot.autoconfigure.SpringBootApplication
 import org.springframework.boot.autoconfigure.data.redis.RedisProperties
 import org.springframework.boot.builder.SpringApplicationBuilder
+import org.springframework.boot.runApplication
+import org.springframework.boot.web.servlet.ServletComponentScan
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer
 import org.springframework.cache.annotation.EnableCaching
 import org.springframework.cloud.client.discovery.EnableDiscoveryClient
@@ -64,6 +66,7 @@
 @EnableDiscoveryClient
 @EnableScheduling
 @EnableCaching
+@ServletComponentScan
 class PayApiApplication : SpringBootServletInitializer() {
 
     override fun configure(builder: SpringApplicationBuilder): SpringApplicationBuilder {
diff --git a/payapi/src/main/resources/application.properties b/payapi/src/main/resources/application.properties
index cee20f1..17217f9 100644
--- a/payapi/src/main/resources/application.properties
+++ b/payapi/src/main/resources/application.properties
@@ -23,6 +23,11 @@
 spring.thymeleaf.mode=HTML5
 spring.thymeleaf.cache=false
 spring.thymeleaf.enabled=true
+################## 全局字符编码设置 ######################
+spring.http.encoding.force=true
+spring.http.encoding.charset=UTF-8
+spring.http.encoding.enabled=true
+server.tomcat.uri-encoding=UTF-8
 ##################################################
 ## quartz task scheduler
 shopbalance.updater.cron=10/* * * * *
diff --git a/payapi/src/main/resources/static/custom/module/admin.js b/payapi/src/main/resources/static/custom/module/admin.js
index cbdbc36..1694286 100755
--- a/payapi/src/main/resources/static/custom/module/admin.js
+++ b/payapi/src/main/resources/static/custom/module/admin.js
@@ -1,387 +1,399 @@
-layui.define(['layer'], function (exports) {
-    var layer = layui.layer;
-    var popupRightIndex, popupCenterIndex, popupCenterParam;
-    var baseUrl = window.location.pathname;
-
-    var admin = {
-        isRefresh: false,
-        // 设置侧栏折叠
-        flexible: function (expand) {
-            var isExapnd = $('.layui-layout-admin').hasClass('admin-nav-mini');
-            if (isExapnd == !expand) {
-                return;
-            }
-            if (expand) {
-                $('.layui-layout-admin').removeClass('admin-nav-mini');
-            } else {
-                $('.layui-layout-admin').addClass('admin-nav-mini');
-            }
-        },
-        // 设置导航栏选中
-        activeNav: function (url) {
-            $('.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child dd').removeClass('layui-this');
-            $('.layui-layout-admin .layui-side .layui-nav .layui-nav-item').removeClass('layui-this');
-            if (url && url != '') {
-                $('.layui-layout-admin .layui-side .layui-nav .layui-nav-item').removeClass('layui-nav-itemed');
-                var $a = $('.layui-layout-admin .layui-side .layui-nav a[href="#!' + url + '"]');
-                $a.parent('li').addClass('layui-this');
-                $a.parent('dd').addClass('layui-this');
-                $a.parent('dd').parent('.layui-nav-child').parent('.layui-nav-item').addClass('layui-nav-itemed');
-            }
-        },
-        // 右侧弹出
-        popupRight: function (path) {
-            var param = new Object();
-            param.path = path;
-            param.id = 'adminPopupR';
-            param.title = false;
-            param.anim = 2;
-            param.isOutAnim = false;
-            param.closeBtn = false;
-            param.offset = 'r';
-            param.shadeClose = true;
-            param.area = '336px';
-            param.skin = 'layui-layer-adminRight';
-            param.end = function () {
-                layer.closeAll('tips');
-            };
-            popupRightIndex = admin.open(param);
-            return popupRightIndex;
-        },
-        // 关闭右侧弹出
-        closePopupRight: function () {
-            layer.close(popupRightIndex);
-        },
-        // 中间弹出
-        popupCenter: function (param) {
-            param.id = 'adminPopupC';
-            popupCenterParam = param;
-            popupCenterIndex = admin.open(param);
-            return popupCenterIndex;
-        },
-        // 关闭中间弹出并且触发finish回调
-        finishPopupCenter: function () {
-            layer.close(popupCenterIndex);
-            popupCenterParam.finish ? popupCenterParam.finish() : '';
-        },
-        // 关闭中间弹出
-        closePopupCenter: function () {
-            layer.close(popupCenterIndex);
-        },
-        // 封装layer.open
-        open: function (param) {
-            var sCallBack = param.success;
-            param.type = 1;
-            param.area = param.area ? param.area : '450px';
-            param.offset = param.offset ? param.offset : '120px';
-            param.resize ? param.resize : false;
-            param.shade ? param.shade : .2;
-            param.success = function (layero, index) {
-                sCallBack ? sCallBack(layero, index) : '';
-                admin.ajax({
-                    url: param.path,
-                    type: 'GET',
-                    dataType: 'html',
-                    success: function (result, status, xhr) {
-                        $(layero).children('.layui-layer-content').html(result);
-                    }
-                });
-            };
-            return layer.open(param);
-        },
-        
-        go:function(url,data,success,error){
-        	  $.ajax({
-        		  url: url,
-        		  data: data,
-        		  async: false,
-        		  dataType: 'json',
-        		  type: 'post',
-        		  success: success,
-                  error:error
-        	  })
-        },
-        dgo:function(url,data,success,error){
-      	  $.ajax({
-      		  url: url,
-      		  data: data,
-      		  async: false,
-      		  dataType: 'json',
-      		  type: 'get',
-      		  success: success,
-              error:error
-      	  })
-      },
-        // 封装ajax请求，返回数据类型为json
-        req: function (url, data, success, method) {
-            admin.ajax({
-                url: url,
-                data: data,
-                async: false,
-                type: method,
-                dataType: 'json',
-                success: success
-            });
-        },
-        // 封装ajax请求
-        ajax: function (param) {
-        	console.log(param);
-            var successCallback = param.success;
-            param.success = function (result, status, xhr) {
-                // 判断登录过期和没有权限
-                var jsonRs;
-                if ('json' == param.dataType.toLowerCase()) {
-                    jsonRs = result;
-                } else if ('html' == param.dataType.toLowerCase() || 'text' == param.dataType.toLowerCase()) {
-                    jsonRs = admin.parseJSON(result);
-                }
-                if (jsonRs) {
-                    if (jsonRs.code == 401) {
-                        layer.msg(jsonRs.msg, {icon: 2, time: 1500}, function () {
-                            location.replace('/login');
-                        }, 1000);
-                        return;
-                    } else if ('html' == param.dataType.toLowerCase() && jsonRs.code == 403) {
-                        layer.msg(jsonRs.msg, {icon: 2});
-                    }
-                }
-                successCallback(result, status, xhr);
-            };
-            param.error = function (xhr) {
-                //{code: xhr.status, msg: xhr.statusText}
-                param.success(xhr.responseText,xhr.status,xhr);
-            };
-            $.ajax(param);
-        },
-        // 显示加载动画
-        showLoading: function (element) {
-            $(element).append('<i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop admin-loading"></i>');
-        },
-        // 移除加载动画
-        removeLoading: function (element) {
-            $(element + '>.admin-loading').remove();
-        },
-        // 缓存临时数据
-        putTempData: function (key, value) {
-            if (value) {
-                layui.sessionData('tempData', {key: key, value: value});
-            } else {
-                layui.sessionData('tempData', {key: key, remove: true});
-            }
-        },
-        // 获取缓存临时数据
-        getTempData: function (key) {
-            return layui.sessionData('tempData')[key];
-        },
-        // 滑动选项卡
-        rollPage: function (d) {
-            var $tabTitle = $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title');
-            var left = $tabTitle.scrollLeft();
-            if ('left' === d) {
-                $tabTitle.scrollLeft(left - 120);
-            } else if ('auto' === d) {
-                var autoLeft = 0;
-                $tabTitle.children("li").each(function () {
-                    if ($(this).hasClass('layui-this')) {
-                        return false;
-                    } else {
-                        autoLeft += $(this).outerWidth();
-                    }
-                });
-                $tabTitle.scrollLeft(autoLeft - 47);
-            } else {
-                $tabTitle.scrollLeft(left + 120);
-            }
-        },
-        // 刷新主题部分
-        refresh: function () {
-            admin.isRefresh = true;
-            Q.refresh();
-        },
-        // 判断是否为json
-        parseJSON: function (str) {
-            if (typeof str == 'string') {
-                try {
-                    var obj = JSON.parse(str);
-                    if (typeof obj == 'object' && obj) {
-                        return obj;
-                    }
-                } catch (e) {
-                }
-            }
-        },
-        formatDate:function (str) {
-            if (str == null || str == "") {
-                return;
-            }
-            switch (str.length) {
-                case 8:
-                    str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8);
-                    return str;
-                case 12:
-                    str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8) + " " + str.substring(8, 10)
-                        + ":" + str.substring(10, 12);
-                    return str;
-                case 14:
-                    str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8) + " " + str.substring(8, 10)
-                        + ":" + str.substring(10, 12) + ":" + str.substring(12, 14);
-                    return str;
-                default:
-                    return str;
-            }
-        },
-        errorBack: function (err) {
-            layer.closeAll('loading');
-            if (403 == err.status) {
-                layer.msg("无资源权限！", {icon: 2, time: 1500});
-                return;
-            }
-            if (200 == err.status) {
-                layer.msg("请求异常，请刷新页面重新操作", {icon: 2, time: 1500});
-                return;
-            } else {
-                layer.msg("请求服务器失败！", {icon: 2});
-            }
-        }
-    };
-
-    // ewAdmin提供的事件
-    admin.events = {
-        // 折叠侧导航
-        flexible: function (e) {
-            var expand = $('.layui-layout-admin').hasClass('admin-nav-mini');
-            admin.flexible(expand);
-        },
-        // 刷新主体部分
-        refresh: function () {
-            admin.refresh();
-        },
-        //后退
-        back: function () {
-            history.back();
-        },
-        // 设置主题
-        theme: function () {
-            admin.popupRight(baseUrl+'home/theme');
-        },
-        // 全屏
-        fullScreen: function (e) {
-            var ac = 'layui-icon-screen-full', ic = 'layui-icon-screen-restore';
-            var ti = $(this).find('i');
-
-            var isFullscreen = document.fullscreenElement || document.msFullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || false;
-            if (isFullscreen) {
-                var efs = document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen;
-                if (efs) {
-                    efs.call(document);
-                } else if (window.ActiveXObject) {
-                    var ws = new ActiveXObject('WScript.Shell');
-                    ws && ws.SendKeys('{F11}');
-                }
-                ti.addClass(ac).removeClass(ic);
-            } else {
-                var el = document.documentElement;
-                var rfs = el.requestFullscreen || el.webkitRequestFullscreen || el.mozRequestFullScreen || el.msRequestFullscreen;
-                if (rfs) {
-                    rfs.call(el);
-                } else if (window.ActiveXObject) {
-                    var ws = new ActiveXObject('WScript.Shell');
-                    ws && ws.SendKeys('{F11}');
-                }
-                ti.addClass(ic).removeClass(ac);
-            }
-        },
-        // 左滑动tab
-        leftPage: function () {
-            admin.rollPage("left");
-        },
-        // 右滑动tab
-        rightPage: function () {
-            admin.rollPage();
-        },
-        // 关闭当前选项卡
-        closeThisTabs: function () {
-            var $title = $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title');
-            if ($title.find('li').first().hasClass('layui-this')) {
-                return;
-            }
-            $title.find('li.layui-this').find(".layui-tab-close").trigger("click");
-        },
-        // 关闭其他选项卡
-        closeOtherTabs: function () {
-            $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title li:gt(0):not(.layui-this)').find('.layui-tab-close').trigger('click');
-        },
-        // 关闭所有选项卡
-        closeAllTabs: function () {
-            $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title li:gt(0)').find('.layui-tab-close').trigger('click');
-        },
-        // 关闭所有弹窗
-        closeDialog: function () {
-            layer.closeAll('page');
-        },
-        //刷新字典
-        refreshDict: function (){
-            layer.confirm('确定要刷新数据字典吗?', {
-                    btn: ['确定', '取消']
-                }, function (index, layero) {
-                    layer.closeAll('dialog');  //加入这个信息点击确定 会关闭这个消息框
-                    admin.dgo(baseUrl+"dictrefresh", {}, function (data) {
-                        if (data.code == 200) {
-                            layer.msg("刷新数据字典成功！", {icon: 1, time: 1000});
-                            DictPoolToolkit().initAll(baseUrl+"dictpool");
-                        } else if (data.code == 401) {
-                            layer.msg(data.msg, {icon: 2, time: 1500}, function () {
-                                location.replace('/login');
-                            }, 1000);
-                            return;
-                        } else {
-                            layer.msg(data.msg, {icon: 2, time: 1500});
-                        }
-                    }, function () {
-                        layer.msg("数据字典刷新失败，访问服务器失败！", {icon: 2, time: 1500});
-                    });
-                });
-        }
-    };
-
-    // 所有ew-event
-    $('body').on('click', '*[ew-event]', function () {
-        var event = $(this).attr('ew-event');
-        var te = admin.events[event];
-        te && te.call(this, $(this));
-    });
-
-    // 移动设备遮罩层点击事件
-    $('.site-mobile-shade').click(function () {
-        admin.flexible(true);
-    });
-
-    // 侧导航折叠状态下鼠标经过显示提示
-    $('body').on('mouseenter', '.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a', function () {
-        var tipText = $(this).find('cite').text();
-        if (document.body.clientWidth > 750) {
-            layer.tips(tipText, this);
-        }
-    }).on('mouseleave', '.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a', function () {
-        layer.closeAll('tips');
-    });
-
-    // 侧导航折叠状态下点击展开
-    $('body').on('click', '.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a', function () {
-        if (document.body.clientWidth > 750) {
-            layer.closeAll('tips');
-            admin.flexible(true);
-        }
-    });
-
-    // 所有lay-tips处理
-    $('body').on('mouseenter', '*[lay-tips]', function () {
-        var tipText = $(this).attr('lay-tips');
-        var dt = $(this).attr('lay-direction');
-        layer.tips(tipText, this, {tips: dt || 1, time: -1});
-    }).on('mouseleave', '*[lay-tips]', function () {
-        layer.closeAll('tips');
-    });
-
-    exports('admin', admin);
-});
+layui.define(['layer'], function (exports) {
+    var layer = layui.layer;
+    var popupRightIndex, popupCenterIndex, popupCenterParam;
+    var baseUrl = window.location.pathname;
+
+    var admin = {
+        isRefresh: false,
+        // 设置侧栏折叠
+        flexible: function (expand) {
+            var isExapnd = $('.layui-layout-admin').hasClass('admin-nav-mini');
+            if (isExapnd == !expand) {
+                return;
+            }
+            if (expand) {
+                $('.layui-layout-admin').removeClass('admin-nav-mini');
+            } else {
+                $('.layui-layout-admin').addClass('admin-nav-mini');
+            }
+        },
+        // 设置导航栏选中
+        activeNav: function (url) {
+            $('.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child dd').removeClass('layui-this');
+            $('.layui-layout-admin .layui-side .layui-nav .layui-nav-item').removeClass('layui-this');
+            if (url && url != '') {
+                $('.layui-layout-admin .layui-side .layui-nav .layui-nav-item').removeClass('layui-nav-itemed');
+                var $a = $('.layui-layout-admin .layui-side .layui-nav a[href="#!' + url + '"]');
+                $a.parent('li').addClass('layui-this');
+                $a.parent('dd').addClass('layui-this');
+                $a.parent('dd').parent('.layui-nav-child').parent('.layui-nav-item').addClass('layui-nav-itemed');
+            }
+        },
+        // 右侧弹出
+        popupRight: function (path) {
+            var param = new Object();
+            param.path = path;
+            param.id = 'adminPopupR';
+            param.title = false;
+            param.anim = 2;
+            param.isOutAnim = false;
+            param.closeBtn = false;
+            param.offset = 'r';
+            param.shadeClose = true;
+            param.area = '336px';
+            param.skin = 'layui-layer-adminRight';
+            param.end = function () {
+                layer.closeAll('tips');
+            };
+            popupRightIndex = admin.open(param);
+            return popupRightIndex;
+        },
+        // 关闭右侧弹出
+        closePopupRight: function () {
+            layer.close(popupRightIndex);
+        },
+        // 中间弹出
+        popupCenter: function (param) {
+            param.id = 'adminPopupC';
+            popupCenterParam = param;
+            popupCenterIndex = admin.open(param);
+            return popupCenterIndex;
+        },
+        // 关闭中间弹出并且触发finish回调
+        finishPopupCenter: function () {
+            layer.close(popupCenterIndex);
+            popupCenterParam.finish ? popupCenterParam.finish() : '';
+        },
+        // 关闭中间弹出
+        closePopupCenter: function () {
+            layer.close(popupCenterIndex);
+        },
+        // 封装layer.open
+        open: function (param) {
+            var sCallBack = param.success;
+            param.type = 1;
+            param.area = param.area ? param.area : '450px';
+            param.offset = param.offset ? param.offset : '120px';
+            param.resize ? param.resize : false;
+            param.shade ? param.shade : .2;
+            param.success = function (layero, index) {
+                sCallBack ? sCallBack(layero, index) : '';
+                admin.ajax({
+                    url: param.path,
+                    type: 'GET',
+                    dataType: 'html',
+                    success: function (result, status, xhr) {
+                        $(layero).children('.layui-layer-content').html(result);
+                    }
+                });
+            };
+            return layer.open(param);
+        },
+        
+        go:function(url,data,success,error){
+        	  $.ajax({
+        		  url: url,
+        		  data: data,
+        		  async: false,
+        		  dataType: 'json',
+        		  type: 'post',
+        		  success: success,
+                  error:error
+        	  })
+        },
+        dgo:function(url,data,success,error){
+      	  $.ajax({
+      		  url: url,
+      		  data: data,
+      		  async: false,
+      		  dataType: 'json',
+      		  type: 'get',
+      		  success: success,
+              error:error
+      	  })
+      },
+        // 封装ajax请求，返回数据类型为json
+        req: function (url, data, success, method) {
+            admin.ajax({
+                url: url,
+                data: data,
+                async: false,
+                type: method,
+                dataType: 'json',
+                success: success
+            });
+        },
+        // 封装ajax请求
+        ajax: function (param) {
+        	console.log(param);
+            var successCallback = param.success;
+            param.success = function (result, status, xhr) {
+                // 判断登录过期和没有权限
+                var jsonRs;
+                if ('json' == param.dataType.toLowerCase()) {
+                    jsonRs = result;
+                } else if ('html' == param.dataType.toLowerCase() || 'text' == param.dataType.toLowerCase()) {
+                    jsonRs = admin.parseJSON(result);
+                }
+                if (jsonRs) {
+                    if (jsonRs.code == 401) {
+                        layer.msg(jsonRs.msg, {icon: 2, time: 1500}, function () {
+                            location.replace('/login');
+                        }, 1000);
+                        return;
+                    } else if ('html' == param.dataType.toLowerCase() && jsonRs.code == 403) {
+                        layer.msg(jsonRs.msg, {icon: 2});
+                    }
+                }
+
+                if(result.indexOf("<title>统一身份认证</title>")!=-1){
+                    layer.msg("登录过期，请重新登录！", {icon: 2, time: 1500}, function () {
+                        location.replace(baseUrl + 'login');
+                    }, 500);
+                    return;
+                }else if(result.indexOf("<title>403 无权限</title>")!=-1){
+                    layer.close(popupCenterIndex);
+                    layer.msg("无资源权限", {icon: 2, time:2000});
+                    return;
+                }
+
+                successCallback(result, status, xhr);
+            };
+            param.error = function (xhr) {
+                //{code: xhr.status, msg: xhr.statusText}
+                param.success(xhr.responseText,xhr.status,xhr);
+            };
+            $.ajax(param);
+        },
+        // 显示加载动画
+        showLoading: function (element) {
+            $(element).append('<i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop admin-loading"></i>');
+        },
+        // 移除加载动画
+        removeLoading: function (element) {
+            $(element + '>.admin-loading').remove();
+        },
+        // 缓存临时数据
+        putTempData: function (key, value) {
+            if (value) {
+                layui.sessionData('tempData', {key: key, value: value});
+            } else {
+                layui.sessionData('tempData', {key: key, remove: true});
+            }
+        },
+        // 获取缓存临时数据
+        getTempData: function (key) {
+            return layui.sessionData('tempData')[key];
+        },
+        // 滑动选项卡
+        rollPage: function (d) {
+            var $tabTitle = $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title');
+            var left = $tabTitle.scrollLeft();
+            if ('left' === d) {
+                $tabTitle.scrollLeft(left - 120);
+            } else if ('auto' === d) {
+                var autoLeft = 0;
+                $tabTitle.children("li").each(function () {
+                    if ($(this).hasClass('layui-this')) {
+                        return false;
+                    } else {
+                        autoLeft += $(this).outerWidth();
+                    }
+                });
+                $tabTitle.scrollLeft(autoLeft - 47);
+            } else {
+                $tabTitle.scrollLeft(left + 120);
+            }
+        },
+        // 刷新主题部分
+        refresh: function () {
+            admin.isRefresh = true;
+            Q.refresh();
+        },
+        // 判断是否为json
+        parseJSON: function (str) {
+            if (typeof str == 'string') {
+                try {
+                    var obj = JSON.parse(str);
+                    if (typeof obj == 'object' && obj) {
+                        return obj;
+                    }
+                } catch (e) {
+                }
+            }
+        },
+        formatDate:function (str) {
+            if (str == null || str == "") {
+                return;
+            }
+            switch (str.length) {
+                case 8:
+                    str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8);
+                    return str;
+                case 12:
+                    str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8) + " " + str.substring(8, 10)
+                        + ":" + str.substring(10, 12);
+                    return str;
+                case 14:
+                    str = str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8) + " " + str.substring(8, 10)
+                        + ":" + str.substring(10, 12) + ":" + str.substring(12, 14);
+                    return str;
+                default:
+                    return str;
+            }
+        },
+        errorBack: function (err) {
+            layer.closeAll('loading');
+            if (403 == err.status) {
+                layer.msg("无资源权限！", {icon: 2, time: 1500});
+                return;
+            }
+            if (200 == err.status) {
+                layer.msg("请求异常，请刷新页面重新操作", {icon: 2, time: 1500});
+                return;
+            } else {
+                layer.msg("请求服务器失败！", {icon: 2});
+            }
+        }
+    };
+
+    // ewAdmin提供的事件
+    admin.events = {
+        // 折叠侧导航
+        flexible: function (e) {
+            var expand = $('.layui-layout-admin').hasClass('admin-nav-mini');
+            admin.flexible(expand);
+        },
+        // 刷新主体部分
+        refresh: function () {
+            admin.refresh();
+        },
+        //后退
+        back: function () {
+            history.back();
+        },
+        // 设置主题
+        theme: function () {
+            admin.popupRight(baseUrl+'home/theme');
+        },
+        // 全屏
+        fullScreen: function (e) {
+            var ac = 'layui-icon-screen-full', ic = 'layui-icon-screen-restore';
+            var ti = $(this).find('i');
+
+            var isFullscreen = document.fullscreenElement || document.msFullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || false;
+            if (isFullscreen) {
+                var efs = document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen;
+                if (efs) {
+                    efs.call(document);
+                } else if (window.ActiveXObject) {
+                    var ws = new ActiveXObject('WScript.Shell');
+                    ws && ws.SendKeys('{F11}');
+                }
+                ti.addClass(ac).removeClass(ic);
+            } else {
+                var el = document.documentElement;
+                var rfs = el.requestFullscreen || el.webkitRequestFullscreen || el.mozRequestFullScreen || el.msRequestFullscreen;
+                if (rfs) {
+                    rfs.call(el);
+                } else if (window.ActiveXObject) {
+                    var ws = new ActiveXObject('WScript.Shell');
+                    ws && ws.SendKeys('{F11}');
+                }
+                ti.addClass(ic).removeClass(ac);
+            }
+        },
+        // 左滑动tab
+        leftPage: function () {
+            admin.rollPage("left");
+        },
+        // 右滑动tab
+        rightPage: function () {
+            admin.rollPage();
+        },
+        // 关闭当前选项卡
+        closeThisTabs: function () {
+            var $title = $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title');
+            if ($title.find('li').first().hasClass('layui-this')) {
+                return;
+            }
+            $title.find('li.layui-this').find(".layui-tab-close").trigger("click");
+        },
+        // 关闭其他选项卡
+        closeOtherTabs: function () {
+            $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title li:gt(0):not(.layui-this)').find('.layui-tab-close').trigger('click');
+        },
+        // 关闭所有选项卡
+        closeAllTabs: function () {
+            $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title li:gt(0)').find('.layui-tab-close').trigger('click');
+        },
+        // 关闭所有弹窗
+        closeDialog: function () {
+            layer.closeAll('page');
+        },
+        //刷新字典
+        refreshDict: function (){
+            layer.confirm('确定要刷新数据字典吗?', {
+                    btn: ['确定', '取消']
+                }, function (index, layero) {
+                    layer.closeAll('dialog');  //加入这个信息点击确定 会关闭这个消息框
+                    admin.dgo(baseUrl+"dictrefresh", {}, function (data) {
+                        if (data.code == 200) {
+                            layer.msg("刷新数据字典成功！", {icon: 1, time: 1000});
+                            DictPoolToolkit().initAll(baseUrl+"dictpool");
+                        } else if (data.code == 401) {
+                            layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                                location.replace('/login');
+                            }, 1000);
+                            return;
+                        } else {
+                            layer.msg(data.msg, {icon: 2, time: 1500});
+                        }
+                    }, function () {
+                        layer.msg("数据字典刷新失败，访问服务器失败！", {icon: 2, time: 1500});
+                    });
+                });
+        }
+    };
+
+    // 所有ew-event
+    $('body').on('click', '*[ew-event]', function () {
+        var event = $(this).attr('ew-event');
+        var te = admin.events[event];
+        te && te.call(this, $(this));
+    });
+
+    // 移动设备遮罩层点击事件
+    $('.site-mobile-shade').click(function () {
+        admin.flexible(true);
+    });
+
+    // 侧导航折叠状态下鼠标经过显示提示
+    $('body').on('mouseenter', '.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a', function () {
+        var tipText = $(this).find('cite').text();
+        if (document.body.clientWidth > 750) {
+            layer.tips(tipText, this);
+        }
+    }).on('mouseleave', '.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a', function () {
+        layer.closeAll('tips');
+    });
+
+    // 侧导航折叠状态下点击展开
+    $('body').on('click', '.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a', function () {
+        if (document.body.clientWidth > 750) {
+            layer.closeAll('tips');
+            admin.flexible(true);
+        }
+    });
+
+    // 所有lay-tips处理
+    $('body').on('mouseenter', '*[lay-tips]', function () {
+        var tipText = $(this).attr('lay-tips');
+        var dt = $(this).attr('lay-direction');
+        layer.tips(tipText, this, {tips: dt || 1, time: -1});
+    }).on('mouseleave', '*[lay-tips]', function () {
+        layer.closeAll('tips');
+    });
+
+    exports('admin', admin);
+});
\ No newline at end of file
diff --git a/payapi/src/main/resources/templates/index.html b/payapi/src/main/resources/templates/index.html
index bfea46b..302af3a 100755
--- a/payapi/src/main/resources/templates/index.html
+++ b/payapi/src/main/resources/templates/index.html
@@ -3,8 +3,8 @@
 
 <head>
     <title>首页</title>
-    <meta name="_csrf_header" th:content="${_csrf.headerName}" />
-    <meta name="_csrf_token" th:content="${_csrf.parameterName}" th:value="${_csrf.token}" />
+    <meta name="_csrf_header" th:content="${_csrf.headerName}"/>
+    <meta name="_csrf_token" th:content="${_csrf.parameterName}" th:value="${_csrf.token}"/>
     <meta charset="utf-8"/>
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
@@ -36,7 +36,7 @@
                 <a ew-event="refreshDict" title="刷新字典"><i class="layui-icon layui-icon-read"></i></a>
             </li>
             <!--<li class="layui-nav-item" lay-unselect>-->
-                <!--<a id="btnMessage" title="消息"><i class="layui-icon layui-icon-notice"></i></a>-->
+            <!--<a id="btnMessage" title="消息"><i class="layui-icon layui-icon-notice"></i></a>-->
             <!--</li>-->
             <li class="layui-nav-item layui-hide-xs" lay-unselect>
                 <a ew-event="fullScreen" title="全屏"><i class="layui-icon layui-icon-screen-full"></i></a>
@@ -50,7 +50,7 @@
                     <dd ay-unselect><a lay-href="/operator/userinfor">基本资料</a></dd>
                     <dd ay-unselect><a lay-href="/operator/setpwd">修改密码</a></dd>
                     <hr>
-                    <dd layadmin-event="logout" style="text-align: center;" ><a th:href="@{/logout}">退出</a></dd>
+                    <dd layadmin-event="logout" style="text-align: center;"><a th:href="@{/logout}">退出</a></dd>
                 </dl>
             </li>
             <li class="layui-nav-item" lay-unselect>
@@ -73,7 +73,7 @@
                                 <dd th:each="temp : ${subMenu.subMenus}"><a th:lay-href="${temp.menuUrl}">
                                     <i th:class="'layui-icon '+${temp.menuIcon}"></i>
                                     [[${temp.menuName}]]
-                                  </a>
+                                </a>
                                 </dd>
                             </dl>
                         </dd>
@@ -81,16 +81,16 @@
                 </li>
 
                 <!--<li class="layui-nav-item">-->
-                    <!--<a href="javascript:;"><i class="layui-icon layui-icon-unlink"></i>&emsp;<cite>多级菜单</cite></a>-->
-                    <!--<dl class="layui-nav-child">-->
-                        <!--<dd>-->
-                            <!--<a href="javascript:;">二级菜单</a>-->
-                            <!--<dl class="layui-nav-child">-->
-                                <!--<dd><a href="javascript:;">三级菜单</a></dd>-->
-                                <!--<dd><a href="javascript:;">三级菜单</a></dd>-->
-                            <!--</dl>-->
-                        <!--</dd>-->
-                    <!--</dl>-->
+                <!--<a href="javascript:;"><i class="layui-icon layui-icon-unlink"></i>&emsp;<cite>多级菜单</cite></a>-->
+                <!--<dl class="layui-nav-child">-->
+                <!--<dd>-->
+                <!--<a href="javascript:;">二级菜单</a>-->
+                <!--<dl class="layui-nav-child">-->
+                <!--<dd><a href="javascript:;">三级菜单</a></dd>-->
+                <!--<dd><a href="javascript:;">三级菜单</a></dd>-->
+                <!--</dl>-->
+                <!--</dd>-->
+                <!--</dl>-->
                 <!--</li>-->
             </ul>
         </div>
@@ -122,7 +122,8 @@
     </div>
 
     <!-- 底部 -->
-    <div class="layui-footer">Copyright © 2018 supwisdom All rights reserved. <span class="pull-right" th:text="${payapiVersion}">Version 1.0</span>
+    <div class="layui-footer">Copyright © 2018 supwisdom All rights reserved. <span class="pull-right"
+                                                                                    th:text="${payapiVersion}">Version 1.0</span>
     </div>
 
     <!-- 手机屏幕遮罩层 -->
@@ -133,6 +134,7 @@
 <script type="text/javascript" th:src="@{/static/libs/q.js}"></script>
 <script type="text/javascript" th:src="@{/static/libs/layui/layui.js}"></script>
 <script type="text/javascript" th:src="@{/static/libs/zTree/js/jquery.ztree.all-3.5.min.js}"></script>
+<script type="text/javascript" th:src="@{/static/libs/moment.js}"></script>
 <script type="text/javascript" th:src="@{/static/libs/custom.js}"></script>
 
 <script>
diff --git a/payapi/src/main/resources/templates/system/shop/index.html b/payapi/src/main/resources/templates/system/shop/index.html
index 5e441ae..0da8653 100644
--- a/payapi/src/main/resources/templates/system/shop/index.html
+++ b/payapi/src/main/resources/templates/system/shop/index.html
@@ -10,8 +10,11 @@
         <div class="layui-row">
             <div class="layui-col-xs5 layui-col-md3">
                 <div class="layui-card">
-                    <div class="layui-card-body layui-show">
-                        <ul id="shoptree" class="ztree" style="background-color: #D7F9F7;max-height: 560px;overflow:auto;"></ul>
+                    <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>
                 </div>
             </div>
@@ -19,61 +22,62 @@
                 <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="0">商户组</option>
+                                    <option value="1">结算商户</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" style="width: 40%;">
+                                <div class="layui-inline">
                                     <label class="layui-form-label">商户号</label>
                                     <div class="layui-input-inline">
-                                        <input type="text" name="shopid" class="layui-input"
+                                        <input type="text" name="shopid" class="layui-input" style="background-color: #f1f1f1;"
                                                readonly="readonly"/>
                                     </div>
                                 </div>
-                                <div class="layui-inline" style="width: 55%;">
-                                    <label class="layui-form-label">商户名</label>
-                                    <div class="layui-input-inline" style="width: 65%;">
-                                        <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" style="width: 40%;">
-                                    <label class="layui-form-label">上级商户号</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" style="width: 55%;">
+                                <div class="layui-inline">
                                     <label class="layui-form-label">商户账号</label>
-                                    <div class="layui-input-inline" style="width: 65%;">
-                                        <input type="text" name="shopaccno" autocomplete="off"
+                                    <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">
-                                <label class="layui-form-label" style="color: red;">商户类型</label>
-                                <div class="layui-input-inline">
-                                    <select name="shoptype" id="shoptype" lay-filter="shoptype-filter" lay-verify="required">
-                                        <option value="0">商户组</option>
-                                        <option value="1">结算商户</option>
-                                    </select>
+                                <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-form-mid layui-word-aux">
-                                    注意：商户组无商户账号，且能创建下级商户。结算商户是叶子商户，会创建商户账号。保存后无法修改！！！
+                                <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" style="width: 40%;">
+                                <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" style="width: 55%;">
+                                <div class="layui-inline">
                                     <label class="layui-form-label">地址</label>
-                                    <div class="layui-input-inline" style="width: 65%;">
+                                    <div class="layui-input-inline">
                                         <input type="text" name="addr" class="layui-input" maxlength="40" autocomplete="off" />
                                     </div>
                                 </div>
@@ -82,22 +86,22 @@
                         <div class="layui-card-header">商户联系人信息</div>
                         <div class="layui-card-body">
                             <div class="layui-form-item">
-                                <div class="layui-inline" style="width: 40%;">
+                                <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" style="width: 55%;">
+                                <div class="layui-inline">
                                     <label class="layui-form-label">手机号</label>
-                                    <div class="layui-input-inline" style="width: 65%;">
+                                    <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" style="width: 40%;">
+                                <div class="layui-inline" >
                                     <label class="layui-form-label">证件类型</label>
                                     <div class="layui-input-inline">
                                         <select name="idtype" lay-filter="idtype-filter">
@@ -110,23 +114,23 @@
                                         </select>
                                     </div>
                                 </div>
-                                <div class="layui-inline" style="width: 55%;">
+                                <div class="layui-inline">
                                     <label class="layui-form-label">证件号</label>
-                                    <div class="layui-input-inline" style="width: 65%;">
+                                    <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" style="width: 40%;">
+                                <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" style="width: 55%;">
+                                <div class="layui-inline">
                                     <label class="layui-form-label">电话</label>
-                                    <div class="layui-input-inline" style="width: 65%;">
+                                    <div class="layui-input-inline">
                                         <input type="text" name="tel" class="layui-input" maxlength="20" autocomplete="off" />
                                     </div>
                                 </div>
@@ -136,6 +140,9 @@
                         <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">保存</button>
                             <button class="layui-btn layui-btn-primary" type="button" id="cancelbtn">取消</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>
                         </div>
                     </div>
                 </div>
@@ -149,6 +156,8 @@
         var form = layui.form;
         var table = layui.table;
         var admin = layui.admin;
+        var $ = layui.jquery;
+
         form.render('select');
         form.verify({
             "mobile": function (e) {
@@ -287,7 +296,9 @@
                             zTree.addNodes(ftreeNode, newNode); //新加树节点
                         }
                         layer.msg(result.msg, {icon: 1});
-                        $("#shop-info").hide();
+                        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}]]');
@@ -333,6 +344,8 @@
                     $("#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;
                 });
@@ -350,6 +363,8 @@
                     $("#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 () {
diff --git a/payapi/src/main/resources/templates/system/user/account.html b/payapi/src/main/resources/templates/system/user/account.html
index 988fa72..8dfc988 100644
--- a/payapi/src/main/resources/templates/system/user/account.html
+++ b/payapi/src/main/resources/templates/system/user/account.html
@@ -31,11 +31,10 @@
             page: true,
             cols: [
                 [
-                    {field: 'accno', title: '账号', fixed: 'left', width: 100},
+                    {field: 'accno', title: '账号', fixed: 'left', width: 300},
                     {
                         field: 'person',
                         title: '名称',
-                        width: 80,
                         fixed: 'left',
                         sort: true,
                         templet: function (item) {
@@ -48,8 +47,9 @@
                     {
                         field: 'transStatus',
                         title: '状态',
-                        fixed: 'left',
-                        width: 80,
+                        align: 'center',
+                        width: 100,
+                        sort: true,
                         templet: function (item) {
                             let desc = getTempDictValue('accountStatusList', item.transStatus)
                             if (item.transStatus === 'normal') {
@@ -63,16 +63,26 @@
                             }
                         }
                     },
-                    {field: 'availbal', title: '可用余额', width: 100, fixed: 'left', sort: true},
-                    {field: 'balance', title: '总余额', width: 100, fixed: 'left', sort: true},
-                    {field: 'frozebal', title: '冻结余额', width: 100, fixed: 'left', sort: true},
-                    {field: 'lasttranstime', title: '最后交易日期', width: 120, fixed: 'left', sort: true},
-                    {field: 'opendate', title: '开户日期', width: 100, fixed: 'left', sort: true},
+                    {field: 'availbal', title: '可用余额', width: 100,  sort: true},
+                    {field: 'balance', title: '总余额', width: 100,  sort: true},
+                    {field: 'frozebal', title: '冻结余额', width: 100,  sort: true},
+                    {
+                        field: 'lasttranstime', title: '最后交易日期', sort: true, templet: function (item) {
+                            var dt = moment(item.lasttranstime);
+                            return dt.format("YYYY-MM-DD HH:mm:ss");
+                        }
+                    },
+                    {
+                        field: 'opendate', title: '开户日期',  width: 120, sort: true, templet: function (item) {
+                            return admin.formatDate(item.opendate);
+                        }
+                    },
                     {
                         field: 'accno',
                         align: 'center',
                         title: '操作',
                         fixed: 'right',
+                        width: 150,
                         templet: function (item) {
                             if (item.transStatus !== 'closed') {
                                 let html = ' <a class="layui-btn  layui-btn-danger layui-btn-xs" lay-event="del"><i class="layui-icon layui-icon-delete"></i>注销</a> ';
diff --git a/payapi/src/main/resources/templates/system/user/add.html b/payapi/src/main/resources/templates/system/user/add.html
index 7badc58..f886aca 100755
--- a/payapi/src/main/resources/templates/system/user/add.html
+++ b/payapi/src/main/resources/templates/system/user/add.html
@@ -2,7 +2,7 @@
 <form id="user-form" lay-filter="user-form" class="layui-form model-form">
     <input name="userid" id="userid" type="hidden"/>
     <div class="layui-form-item">
-        <label class="layui-form-label">姓名*</label>
+        <label class="layui-form-label"><span style="color: red;">*</span>姓名</label>
         <div class="layui-input-block">
             <input name="name" placeholder="请输入名称" type="text" class="layui-input" maxlength="100"
                    lay-verify="required" required/>
@@ -16,7 +16,7 @@
         </div>
     </div>
     <div class="layui-form-item">
-        <label class="layui-form-label">证件类型*</label>
+        <label class="layui-form-label"><span style="color: red;">*</span>证件类型</label>
         <div class="layui-input-block">
             <select name="idtype" id="idtype" lay-verify="required">
                 <option th:each="bean : ${idtypeList}" th:value="${bean.dictval}">[[${bean.dictcaption}]]</option>
@@ -24,7 +24,7 @@
         </div>
     </div>
     <div class="layui-form-item">
-        <label class="layui-form-label">证件号*</label>
+        <label class="layui-form-label"><span style="color: red;">*</span>证件号</label>
         <div class="layui-input-block">
             <input name="idno" placeholder="请输入证件号" type="text" class="layui-input" maxlength="100"
                    lay-verify="required" required/>
@@ -32,7 +32,7 @@
     </div>
 
     <div class="layui-form-item">
-        <label class="layui-form-label">手机号*</label>
+        <label class="layui-form-label"><span style="color: red;">*</span>手机号</label>
         <div class="layui-input-block">
             <input name="mobile" placeholder="请输入手机号" type="text" class="layui-input" maxlength="11"
                    lay-verify="required" required/>
