css
Junjie
2023-05-13 bca039d328ce70e4e15c15f83460af2c60226c89
css
1个文件已修改
49个文件已添加
10061 ■■■■■ 已修改文件
src/main/webapp/static/css/admin.css 445 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/bg.css 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/cool.css 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/loader.css 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/login.css 473 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/main.min.css 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/optimize.css 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/originTable.css 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/pda.css 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/print.css 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/road.css 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/tree.css 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/Excel.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/bg.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/favicon.ico 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/instancing/cubemap_nx.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/instancing/cubemap_ny.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/instancing/cubemap_nz.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/instancing/cubemap_px.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/instancing/cubemap_py.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/instancing/cubemap_pz.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/login_bg.jpg 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/nav/bg_1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/nav/fn_1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/nav/fn_1_h.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/nav/fn_2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/nav/fn_2_h.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/nav/fn_3.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/nav/fn_3_h.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/image/nav/icon.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/images/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/layui/lay/modules/admin.js 1667 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/layui/lay/modules/contextMenu.js 228 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/layui/lay/modules/dropdown/dropdown.css 618 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/layui/lay/modules/dropdown/dropdown.js 250 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/layui/lay/modules/index.js 302 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/layui/lay/modules/notice/1.wav 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/layui/lay/modules/notice/2.wav 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/layui/lay/modules/notice/3.wav 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/layui/lay/modules/notice/4.wav 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/layui/lay/modules/notice/5.wav 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/layui/lay/modules/notice/6.wav 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/layui/lay/modules/notice/notice.css 1929 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/layui/lay/modules/notice/notice.js 1241 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/home/console.html 440 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/home/map.html 1118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/home/map_edit.html 368 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/home/navigation.html 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/index.html 203 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/admin.css
New file
@@ -0,0 +1,445 @@
/** EasyWeb iframe v3.1.8 date:2020-05-04 License By http://easyweb.vip */
*{font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif}body{color:#595959;background-color:#f5f7f9}.layui-layout-body{overflow:auto}.layui-layout-admin{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden;-webkit-transition:left .3s,right .3s;transition:left .3s,right .3s}.layui-layout-admin .layui-header{position:absolute;top:0;left:0;right:0;height:50px;background-color:#fff;box-shadow:0 1px 0 0 rgba(0,0,0,.03);z-index:999}.layui-layout-admin .layui-header .layui-logo{color:#ddd;width:235px;line-height:50px;background-color:#191a23;box-shadow:1px 2px 2px 0 rgba(0,0,0,.05);position:relative;vertical-align:top;white-space:nowrap;display:inline-block;-webkit-transition:width .3s;transition:width .3s;overflow:hidden}.layui-layout-admin .layui-header .layui-logo img{height:28px;vertical-align:middle}.layui-layout-admin .layui-header .layui-logo cite{font-style:normal;vertical-align:middle}.layui-layout-admin .layui-header .layui-layout-left{padding:0;vertical-align:top;display:inline-block;position:static!important}.layui-layout-admin .layui-header .layui-layout-right{padding:0}.layui-layout-admin .layui-header .layui-nav .layui-this:after,.layui-layout-admin .layui-header .layui-nav-bar{height:2px;top:0!important;background-color:#191a23}.layui-layout-admin .layui-header .layui-nav .layui-nav-item{line-height:50px;vertical-align:top}.layui-layout-admin .layui-header .layui-nav .layui-nav-item .layui-nav-child{top:55px}.layui-layout-admin .layui-header .layui-nav-item .layui-icon{font-size:16px}.layui-layout-admin .layui-header a{color:#595959;padding:0 15px;cursor:pointer}.layui-layout-admin .layui-header a:hover{color:#595959}.layui-layout-admin .layui-header .layui-nav-child a{color:#595959;text-align:center}.layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-color:#8c8c8c transparent transparent}.layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color:transparent transparent #8c8c8c}.layui-layout-admin .layui-header .layui-nav-img{width:26px;height:26px;margin-right:2px;vertical-align:middle}.layui-layout-admin .layui-header .layui-nav-img+cite{margin-right:3px;vertical-align:middle}.layui-layout-admin .layui-header .layui-badge-dot{right:8px;margin:-10px 0 0 0}.layui-layout-admin .layui-body{position:absolute;left:235px;top:50px;z-index:auto;overflow:auto;-webkit-transition:left .3s;transition:left .3s;-webkit-overflow-scrolling:touch}.admin-iframe{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%}.layui-fluid{padding:15px}.layui-layout-admin .layui-footer{position:absolute;left:235px;background:#fff;box-sizing:border-box;border-top:1px solid #f5f7f9;-webkit-transition:left .3s;transition:left .3s;overflow:hidden}.close-footer .layui-layout-admin .layui-footer{display:none}.close-footer .layui-layout-admin .layui-body{bottom:0}.layui-layout-admin .layui-side{position:absolute;top:50px;width:235px;background-color:#191a23;box-shadow:1px 2px 2px 0 rgba(0,0,0,.05);-webkit-transition:width .3s;transition:width .3s;-webkit-user-select:none;user-select:none;z-index:1000}.layui-layout-admin .layui-side .layui-side-scroll{width:255px;-webkit-transition:width .3s;transition:width .3s}.layui-layout-admin .layui-side .layui-nav{width:235px;background-color:transparent;-webkit-transition:width .3s;transition:width .3s}.layui-layout-admin .layui-side>.layui-side-scroll>.layui-nav:first-child{margin-top:10px}.layui-layout-admin .layui-side .layui-nav .layui-nav-item>a{cursor:pointer;padding-top:5px;padding-bottom:5px}.layui-layout-admin .layui-side .layui-nav .layui-nav-item a{-webkit-transition:color .3s,background-color .3s;transition:color .3s,background-color .3s}.layui-layout-admin .layui-side .layui-nav .layui-nav-more{right:15px}.layui-layout-admin .layui-side .layui-nav .layui-nav-item>.layui-nav-child{position:static}.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child a{padding-left:50px;cursor:pointer}.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child a{padding-left:70px}.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left:90px}.layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left:110px}@media screen and (min-width:769px){.layui-layout-admin.admin-nav-mini .layui-header .layui-logo{width:60px}.layui-layout-admin.admin-nav-mini .layui-header .layui-logo cite{display:none}.layui-layout-admin.admin-nav-mini .layui-header .layui-icon-shrink-right:before{content:"\e66b"}.layui-layout-admin.admin-nav-mini .layui-body,.layui-layout-admin.admin-nav-mini .layui-footer{left:60px}.layui-layout-admin.admin-nav-mini .layui-side,.layui-layout-admin.admin-nav-mini .layui-side .layui-nav{width:60px}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a{overflow:visible}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a>cite,.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a .layui-nav-more,.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-itemed>.layui-nav-child{display:none!important}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav li.layui-nav-itemed>a{background:rgba(0,0,0,.3)}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .layui-nav-item>a>.layui-icon{font-size:16px;-webkit-transition:font-size .3s;transition:font-size .3s}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child{position:fixed;top:60px;left:60px;padding:5px;min-width:150px;display:block!important;background:transparent!important}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{content:'';position:absolute;right:5px;left:5px;bottom:0;top:0;border-radius:4px;background:#191a23;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child dd:first-child>.layui-nav-child{margin-top:-5px}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child dd:last-child>.layui-nav-child.show-top{margin-top:5px}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child>dd>a{padding:0 20px!important}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more{border-color:transparent transparent transparent rgba(255,255,255,.7);right:7px;margin-top:-6px}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav.arrow2 .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more,.layui-layout-admin.admin-nav-mini .layui-side .layui-nav.arrow3 .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more{-o-transform:rotate(0deg);-ms-transform:rotate(0deg);-moz-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg);width:6px;height:10px;right:10px;margin-top:-5px;font-weight:600}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav.arrow2 .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more:before,.layui-layout-admin.admin-nav-mini .layui-side .layui-nav.arrow3 .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more:before{content:"\e602";left:-4px;top:-2px}.layui-layout-admin.admin-nav-mini .layui-side .layui-nav.arrow3 .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more:before{-o-transform:rotate(0deg);-ms-transform:rotate(0deg);-moz-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@media screen and (max-width:768px){.layui-layout-admin{left:-235px}.layui-layout-admin .layui-side,.layui-layout-admin .layui-header .layui-logo{box-shadow:none!important}.layui-layout-admin .layui-header .layui-icon-shrink-right:before{content:"\e66b"}.layui-layout-admin.admin-nav-mini{left:0;right:-235px;position:fixed}.layui-layout-admin.admin-nav-mini .layui-header .layui-icon-shrink-right:before{content:"\e668"}.layui-layout-admin.admin-nav-mini .layui-side,.layui-layout-admin.admin-nav-mini .layui-header .layui-logo{box-shadow:1px 0 2px 0 rgba(0,0,0,.05)}.layui-layout-admin.admin-nav-mini .site-mobile-shade{position:absolute;top:0;right:0;bottom:0;left:235px;background-color:rgba(0,0,0,.25);-webkit-transition:background-color .3s;transition:background-color .3s;cursor:pointer;z-index:1000}}.ew-anim-drop-in{-webkit-animation:ewTransitionDropIn .3s ease-in-out;animation:ewTransitionDropIn .3s ease-in-out;-webkit-transform-origin:0 0;transform-origin:0 0}@-webkit-keyframes ewTransitionDropIn{from{opacity:0;-webkit-transform:scale(0.8)}to{opacity:1;-webkit-transform:scale(1)}}@keyframes ewTransitionDropIn{from{opacity:0;transform:scale(0.8)}to{opacity:1;transform:scale(1)}}.layui-nav-tree .layui-nav-bar{display:none}.layui-nav-tree>.layui-nav-item>a:before{content:"";position:absolute;top:0;left:0;bottom:100%;width:4px;background-color:#009688;-webkit-transition:all .3s ease;transition:all .3s ease}.layui-nav-tree>.layui-nav-item:hover>a:before{bottom:0}.layui-nav-tree .layui-nav-item a:hover{background-color:transparent}.layui-nav-tree .layui-this>a:hover{background-color:#009688}.layui-nav-tree .layui-nav-child dd.layui-this,.layui-nav-tree .layui-this{background:transparent}.layui-nav-tree .layui-nav-item .layui-nav-child{padding:5px 0;background-color:rgba(0,0,0,.3)!important}.layui-nav-tree.arrow2 .layui-nav-more{font-family:layui-icon!important;font-size:12px;font-weight:600;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow:hidden;line-height:normal;border:0;margin:-3px 0 0 0;padding:0;width:10px;height:6px;top:50%;display:inline-block;-webkit-transition:all .3s ease;transition:all .3s ease}.layui-nav-tree.arrow2 .layui-nav-more:before{content:"\e61a";position:absolute;right:-1px;top:-4px}.layui-nav-tree.arrow2 .layui-nav-itemed>a>.layui-nav-more{-ms-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-webkit-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}.layui-nav-tree.arrow3 .layui-nav-more{font-family:layui-icon!important;font-size:12px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow:hidden;line-height:normal;border:0;margin:-5px 0 0 0;padding:0;width:10px;height:10px;top:50%;display:inline-block;-webkit-transition:all .3s ease;transition:all .3s ease}.layui-nav-tree.arrow3 .layui-nav-more:before{content:"\e654";position:absolute;top:-2px;left:-1px}.layui-nav-tree.arrow3 .layui-nav-itemed>a>.layui-nav-more{-ms-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-webkit-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)}.layui-nav-tree.arrow3 .layui-nav-itemed>a>.layui-nav-more:before{content:'';width:8px;height:2px;background-color:rgba(255,255,255,.7);top:4px;left:1px;-ms-transform:rotate(45deg);-moz-transform:rotate(45deg);-webkit-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.layui-layout-admin .layui-body>.layui-tab{position:absolute;top:0;left:0;right:0;bottom:0;margin:0}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-content{position:absolute;left:0;right:0;bottom:0;top:40px;padding:0}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-content>.layui-tab-item{position:absolute;bottom:0;right:0;top:0;left:0;overflow:auto;-webkit-overflow-scrolling:touch;display:block;visibility:hidden;opacity:0;filter:Alpha(opacity=0)}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-content>.layui-tab-item.layui-show{visibility:visible;opacity:1;filter:Alpha(opacity=100)}.layui-layout-admin.admin-side-flexible .layui-body>.layui-tab>.layui-tab-content>.layui-tab-item{display:none}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title{height:40px;line-height:40px;padding:0 80px 0 40px;background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.1);position:absolute;top:0;left:0;right:0;border:0;overflow:hidden;-webkit-transition:none;transition:none;z-index:998}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li{min-width:auto;max-width:160px;line-height:40px;padding:0 30px 0 15px;border-right:1px solid #f6f6f6;overflow:hidden;text-overflow:ellipsis;vertical-align:top;-webkit-transition:background-color .2s;transition:background-color .2s}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this,.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li:hover{background-color:#f6f6f6}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{height:2px;border:0;border-radius:0;background-color:#191a23}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li:first-child{padding:0 15px}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li cite{font-style:normal}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title .layui-tab-bar{display:none}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close{width:16px;height:16px;line-height:16px;font-size:12px;border-radius:50%;position:absolute;top:12px;right:8px;-webkit-transition:background-color .2s,color .2s;transition:background-color .2s,color .2s}.layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li:first-child .layui-tab-close{display:none}.admin-tabs-control{position:absolute;top:0;width:40px;height:40px;line-height:40px;background-color:#fff;border-left:1px solid #f6f6f6;-webkit-transition:background-color .2s;transition:background-color .2s;text-align:center;cursor:pointer;z-index:998}.admin-tabs-control:hover{background-color:#f6f6f6}.admin-tabs-control.layui-icon-prev{left:0;border-left:none;border-right:1px solid #f6f6f6}.admin-tabs-control.layui-icon-next{right:40px}.admin-tabs-control.layui-icon-down{right:0}.admin-tabs-control>.layui-nav,.admin-tabs-control>.layui-nav .layui-nav-item{position:absolute;top:0;left:0;padding:0;width:100%;height:100%;background:transparent}.admin-tabs-control>.layui-nav .layui-nav-child{right:0;top:40px;left:auto}.admin-tabs-control>.layui-nav .layui-nav-child a{color:#595959}.admin-tabs-control>.layui-nav .layui-nav-bar,.admin-tabs-control>.layui-nav .layui-nav-more{display:none}.layui-body-header{padding:0 20px;height:40px;line-height:40px;background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.1);box-sizing:border-box;position:absolute;left:0;right:0;z-index:998;display:none}.layui-body-header.show{display:block}.layui-body-header-title{padding-left:6px;border-left:4px solid #009688}.layui-body-header.show+div{position:absolute;left:0;right:0;top:40px;bottom:0;overflow:auto;-webkit-overflow-scrolling:touch}.hide-body-title .layui-body-header.show{display:none}.hide-body-title .layui-body-header.show+div{top:0}.layui-layout-admin .layui-body>.page-loading,.layui-layout-admin .layui-body>.layui-tab>.layui-tab-content>.layui-tab-item>.page-loading,.layui-layout-admin .layui-body>div>iframe[lay-id]+.page-loading{z-index:997}.layui-layer.layui-layer-adminRight{bottom:0;top:50px!important;border:none!important;box-shadow:1px 1px 50px rgba(0,0,0,.3)!important;overflow:auto}.layui-layer.layui-layer-adminRight0{bottom:0;top:0!important;border:none!important;box-shadow:1px 1px 50px rgba(0,0,0,.3)!important;overflow:auto}.layui-layer.layui-layer-adminRight>.layui-layer-content,.layui-layer.layui-layer-adminRight>.layui-layer-content>iframe{height:100%!important}.layui-layer.layui-layer-adminRight>.layui-layer-title+.layui-layer-content{position:absolute;top:43px;left:0;right:0;bottom:0;height:auto!important}.layui-anim-rl{-webkit-animation-name:layui-rl;animation-name:layui-rl}@-webkit-keyframes layui-rl{from{-webkit-transform:translate3d(100%,0,0)}to{-webkit-transform:translate3d(0,0,0)}}@keyframes layui-rl{from{transform:translate3d(100%,0,0)}to{transform:translate3d(0,0,0)}}.layui-anim-lr,.layui-anim-rl.layer-anim-close{-webkit-animation-name:layui-lr;animation-name:layui-lr}@-webkit-keyframes layui-lr{from{-webkit-transform:translate3d(0,0,0);opacity:1}to{-webkit-transform:translate3d(100%,0,0);opacity:1}}@keyframes layui-lr{from{transform:translate3d(0,0,0)}to{transform:translate3d(100%,0,0)}}.layui-layer.layui-layer-admin{border:none!important;box-shadow:1px 1px 50px rgba(0,0,0,.3)!important}.layui-layer.layui-layer-admin .layui-layer-title{color:#fff;height:50px;line-height:50px;background-color:#191a23;border:0}.layui-layer.layui-layer-admin .layui-layer-setwin{top:17px}.layui-layer.layui-layer-admin .layui-layer-setwin a{color:#fff;font-size:16px;font-style:normal;font-family:layui-icon!important;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-close1{background:0;margin-top:-1px}.layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-close1:before{content:"\1006"}.layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-min cite{background-color:#ddd}.layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-max{font-size:14px;padding-top:1px;background:0}.layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-max:before{content:"\e622"}.layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-maxmin:before{content:"\e758"}.layui-layer.layui-layer-admin .layui-layer-btn{padding-bottom:15px}.layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#009688;background-color:#009688}.layui-layer.layui-layer-admin .layui-layer-btn a{height:34px;line-height:34px}.layui-layer-admin{max-width:100%}.layui-layer-iframe .layui-layer-content{overflow:auto;-webkit-overflow-scrolling:touch}@media screen and (max-width:768px){.layui-layer-admin{max-width:98%;max-width:-webkit-calc(100% - 30px);max-width:-moz-calc(100% - 30px);max-width:calc(100% - 30px);width:max-content;left:0!important;right:0!important;margin:auto!important;margin-bottom:15px!important}.layui-layer-admin[area]{max-width:100%;margin-bottom:0!important}}body .layui-layer-msg{border:0;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,0.1)}body .layui-layer-load{background:transparent}.page-loading{position:absolute;display:block;width:100%;height:100%;top:0;left:0;right:0;bottom:0;z-index:19891017;background-color:#fff}body>.page-loading{position:fixed;background-color:#f5f7f9}.layui-layout-admin>.layui-body>.layui-tab>.layui-tab-content>.layui-tab-item>.page-loading,.layui-layout-admin>.layui-body>.page-loading,.layui-layout-admin>.layui-body>div>iframe[lay-id]+.page-loading{background-color:#f5f7f9}.layui-layout-admin>.layui-body>.layui-body-header.show+div+.page-loading{top:40px;height:auto}.page-no-scroll{overflow-x:hidden!important;overflow-y:hidden!important;min-height:80px}.rubik-loader,.ball-loader,.signal-loader,.layui-loader{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.ball-loader>span,.signal-loader>span{background-color:#4aca85;display:inline-block}.ball-loader>span:nth-child(1),.ball-loader.sm>span:nth-child(1),.signal-loader>span:nth-child(1),.signal-loader.sm>span:nth-child(1){-webkit-animation-delay:0s;animation-delay:0s}.ball-loader>span:nth-child(2),.ball-loader.sm>span:nth-child(2),.signal-loader>span:nth-child(2),.signal-loader.sm>span:nth-child(2){-webkit-animation-delay:.1s;animation-delay:.1s}.ball-loader>span:nth-child(3),.ball-loader.sm>span:nth-child(3),.signal-loader>span:nth-child(3),.signal-loader.sm>span:nth-child(3){-webkit-animation-delay:.15s;animation-delay:.15s}.ball-loader>span:nth-child(4),.ball-loader.sm>span:nth-child(4),.signal-loader>span:nth-child(4),.signal-loader.sm>span:nth-child(4){-webkit-animation-delay:.2s;animation-delay:.2s}.rubik-loader{width:64px;height:64px;background-image:url(img/ic_loading.gif);background-repeat:no-repeat;background-position:center;background-size:contain}.rubik-loader.sm{width:50px;height:50px}.ball-loader>span{width:20px;height:20px;margin:0 3px;border-radius:50%;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);-webkit-animation:1s ball-load ease-in-out infinite;animation:ball-load 1s ease-in-out infinite}@-webkit-keyframes ball-load{0%{-webkit-transform:scale(0)}50%{-webkit-transform:scale(1)}100%{-webkit-transform:scale(0)}}@keyframes ball-load{0%{transform:scale(0)}50%{transform:scale(1)}100%{transform:scale(0)}}.ball-loader.sm>span{width:15px;height:15px;margin:0 2px}.signal-loader{width:50px;height:22px}.signal-loader>span{width:8px;height:0;position:absolute;bottom:0;left:0;margin:0;-webkit-animation:signal-load 1s infinite;animation:signal-load 1s infinite}.signal-loader>span:nth-child(2){left:14px}.signal-loader>span:nth-child(3){left:28px}.signal-loader>span:nth-child(4){left:42px}@-webkit-keyframes signal-load{0%{height:0}50%{height:22px}100%{height:0}}@keyframes signal-load{0%{height:0}50%{height:22px}100%{height:0}}.signal-loader.sm{width:32px;height:15px}.signal-loader.sm>span{width:5px;-webkit-animation:signal-load-sm 1s infinite;animation:signal-load-sm 1s infinite}.signal-loader.sm>span:nth-child(2){left:9px}.signal-loader.sm>span:nth-child(3){left:18px}.signal-loader.sm>span:nth-child(4){left:27px}@-webkit-keyframes signal-load-sm{0%{height:0}50%{height:15px}100%{height:0}}@keyframes signal-load-sm{0%{height:0}50%{height:15px}100%{height:0}}.layui-loader .layui-icon{font-size:36px;color:#bbb}.layui-loader.sm .layui-icon{font-size:30px}.layui-form.toolbar .layui-form-item,.layui-form.toolbar .layui-form-item .layui-inline>.layui-input-inline{margin-bottom:0}.layui-form.toolbar .layui-form-item .layui-inline{margin-bottom:10px}.toolbar+.layui-table,.layui-card-body>.layui-table,.toolbar+table+.layui-table-view,.layui-card-body>.layui-table-view,.toolbar+table+.ew-tree-table{margin:0}.mr0,.layui-form.toolbar .layui-form-item .layui-inline>.layui-input-inline{margin-right:0!important}.w-auto{width:auto!important}.model-form{padding:25px 30px 0 0}.model-form.no-padding{padding:0}.model-form .model-form-body{overflow-y:auto;padding:25px 30px 0 0;max-height:calc(100vh - 180px)}.model-form.no-padding .model-form-footer{padding-top:10px;padding-right:30px}.layui-form.model-form>.layui-form-item:last-child{margin-bottom:0;padding-bottom:20px}.layui-form-required:before{content:"*";display:inline-block;font-family:SimSun;margin-right:4px;font-size:14px;line-height:1;color:#ed4014}.layui-input,.layui-textarea{color:#595959}.layui-form-select .layui-input{padding-right:0}.layui-form-select-top .layui-form-select>dl{top:auto;bottom:42px}.ew-select-fixed .layui-form-selected dl{position:fixed;min-width:auto;bottom:auto;right:auto}body .layui-form-checked[lay-skin=primary] i,body .layui-form-checked[lay-skin=primary]:hover i{color:#fff}body .layui-form-checkbox[lay-skin=primary] span,body .layui-form-checkbox[lay-skin=primary]:hover span{background-color:transparent}body .layui-form-danger+.layui-form-select .layui-input,body .layui-input.layui-form-danger:focus,body .layui-textarea.layui-form-danger:focus{border-color:#ff5722!important}body .layui-laypage input.layui-input{height:30px;line-height:30px}body .layui-table-page .layui-laypage input.layui-input{height:26px;line-height:26px}body .layui-form-onswitch em{margin-left:3px;margin-right:18px}.layui-btn{-webkit-transition:background-color .2s;transition:background-color .2s}body .layui-btn.layui-btn-radius{border-radius:100px}.layui-btn-primary{color:#595959;border-color:#e6e6e6}.layui-btn-primary:hover{border-color:#bbb}.layui-btn-group .layui-btn-primary:hover{border-color:#e6e6e6}.layui-btn-group .layui-btn-primary:first-child{border-left:1px solid #e6e6e6}body .layui-btn.layui-btn-disabled,body .layui-transfer-active .layui-btn.layui-btn-disabled{background-color:#fbfbfb!important;border-color:#e6e6e6!important;color:#c9c9c9!important}body .layui-btn.layui-btn-primary{background-color:#fff}body .layui-btn.layui-btn-normal{background-color:#1e9fff}body .layui-btn.layui-btn-warm{background-color:#ffb800}body .layui-btn.layui-btn-danger{background-color:#ff5722}.layui-btn-group>.layui-btn+.layui-btn{border-radius:0}.layui-btn-group>.layui-btn:last-child{border-top-right-radius:2px;border-bottom-right-radius:2px}body .layui-transfer-active .layui-btn{background-color:#5fb878!important;border-color:#5fb878!important;color:#fff!important}.btn-circle{width:50px;height:50px;line-height:50px;border-radius:50%;background:#009688;position:fixed;right:15px;bottom:15px;color:#fff;text-align:center;box-shadow:0 0 8px rgba(0,0,0,.2);cursor:pointer}.btn-circle:hover{color:#fff;opacity:.8}.btn-circle .layui-icon{font-size:24px}.icon-date,.date-icon{background-image:url(img/icon_date.png);background-repeat:no-repeat;background-position:right center;padding-right:28px}.icon-search{background-image:url(img/icon_search.png);background-repeat:no-repeat;background-position:right center;padding-right:26px}span.icon-text>.layui-icon,a.icon-text>.layui-icon,.layui-form-label.icon-text>.layui-icon{font-size:14px;margin:0 2px}.layui-btn.icon-btn{padding:0 10px}.layui-btn.layui-btn-sm.icon-btn{padding:0 6px}.bg-white,html.bg-white>body{background-color:white}[ew-href],[lay-tips]{cursor:pointer}.inline-block{display:inline-block}.pull-right{float:right}.pull-left{float:left}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-primary,.layui-link{color:#009688!important}.text-success{color:#5fb878!important}.text-warning{color:#ffb800!important}.text-danger{color:#ff5722!important}.text-info{color:#01aaed!important}.text-muted{color:#c2c2c2!important}.layui-text a:not(.layui-btn){color:#2d8cf0;cursor:pointer}.layui-text a:not(.layui-btn):hover{text-decoration:none}.ew-console-wrapper .layui-card{box-shadow:none;border-radius:4px}.layui-card-header{color:#595959}.lay-big-font{font-size:36px;line-height:36px;padding:5px 0 10px;overflow:hidden;white-space:nowrap;word-break:break-all;text-overflow:ellipsis}.no-scrollbar{overflow-x:hidden!important;overflow-y:hidden!important}input.layui-disabled,input.layui-disabled:hover,textarea.layui-disabled,textarea.layui-disabled:hover{color:#595959!important;background-color:#f6f6f6}.layui-input::-webkit-input-placeholder,.layui-textarea::-webkit-input-placeholder{color:#ccc}.layui-input::-moz-placeholder,.layui-textarea::-moz-placeholder{color:#ccc}.layui-input::-ms-input-placeholder,.layui-textarea::-ms-input-placeholder{color:#ccc}.dropdown-menu{display:inline-block}.dropdown-menu .dropdown-menu-nav{display:none}.dropdown-menu+.dropdown-menu,.layui-btn+.dropdown-menu,.dropdown-menu+.layui-btn{margin-left:10px}::-webkit-scrollbar{width:10px;height:10px;background:transparent}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{border-radius:5px;background-color:#c1c1c1}::-webkit-scrollbar-thumb:hover{background-color:#a8a8a8}.mini-bar::-webkit-scrollbar{width:6px;height:6px}.mini-bar::-webkit-scrollbar-thumb{border-radius:3px}@media screen and (max-width:768px){::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-thumb{border-radius:0}}#ew-map-select-map{height:450px}#ew-map-select-pois{height:450px;overflow-x:hidden;overflow-y:auto}.ew-map-select-search-list-item{padding:10px 30px 10px 15px;border-bottom:1px solid #e8e8e8;cursor:pointer;position:relative}.ew-map-select-search-list-item:hover{background:#f2f2f2}.ew-map-select-search-list-item:last-child{border-bottom:0}.ew-map-select-search-list-item .ew-map-select-search-list-item-title{font-size:14px;color:#262626}.ew-map-select-search-list-item .ew-map-select-search-list-item-address{font-size:12px;color:#595959;padding-top:5px}.ew-map-select-search-list-item-icon-ok{position:absolute;right:15px;top:50%;transform:translateY(-50%)}.ew-map-select-search-list-item-icon-ok .layui-icon{color:#3b74ff}.ew-map-select-tool{padding:5px 15px;box-shadow:0 1px 0 0 rgba(0,0,0,.05)}#ew-map-select-center-img{position:absolute;bottom:50%;left:50%;width:26px;margin-left:-13px}#ew-map-select-center-img2{position:absolute;left:50%;top:50%;font-size:12px;display:inline-block;margin-left:-6px;margin-top:-7px;color:#3b74ff}.bounceInDown{animation:bounceInDown 500ms;animation-direction:alternate;-webkit-animation:bounceInDown 500ms;-webkit-animation-direction:alternate}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1)}0%,to{-webkit-transform:translate3d(0,0,0)}25%{-webkit-transform:translate3d(0,-30px,0)}50%{-webkit-transform:translate3d(0,-15px,0)}75%{-webkit-transform:translate3d(0,-4px,0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{transition-timing-function:cubic-bezier(.215,.61,.355,1)}0%,to{transform:translate3d(0,0,0)}25%{transform:translate3d(0,-10px,0)}50%{transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,-10px,0)}}#ew-map-select-tips{position:absolute;z-index:999;background:#fff;max-height:430px;overflow:auto;top:48px;left:56px;width:280px;box-shadow:0 2px 4px rgba(0,0,0,.12);border:1px solid #d2d2d2}#ew-map-select-tips .ew-map-select-search-list-item{padding:10px 15px 10px 35px}.ew-map-select-search-list-item-icon-search{position:absolute;left:10px;top:50%;transform:translateY(-50%)}.ew-map-select-search-list-item-icon-search .layui-icon{color:#8c8c8c}.table-tool-mini .layui-table-view{position:relative}.table-tool-mini .layui-table-tool{position:absolute;min-height:unset;height:auto;padding:3px 10px;width:auto;top:-38px;right:-1px;border-top-right-radius:8px;border-top-left-radius:8px;border:1px solid #e6e6e6;border-bottom:0}.table-tool-mini .layui-table-tool .layui-table-tool-temp{padding-right:0;display:inline-block}.table-tool-mini .layui-table-tool .layui-table-tool-self{position:static;display:inline-block}.table-tool-mini .layui-table-tool .layui-table-tool-self .layui-inline[lay-event]:first-child{margin:0}.table-tool-mini.full-table .layui-table-tool{top:-35px;height:1px;padding:0 10px;background:transparent;border:0}.table-tool-mini.full-table .layui-table-tool:before{content:"";position:absolute;top:-3px;right:0;left:0;height:36px;background-color:#f2f2f2;border-top-right-radius:8px;border-top-left-radius:8px;border:1px solid #e6e6e6;border-bottom:0}@media screen and (max-width:768px){.layui-laydate-range{left:0!important;top:0!important;right:0!important;margin:10px auto!important;max-width:95%}.layui-laydate-range .layui-laydate-main,.layui-laydate-range .layui-laydate-content table{width:100%}.layui-laydate-range .laydate-main-list-0 .laydate-next-m,.layui-laydate-range .laydate-main-list-0 .laydate-next-y,.layui-laydate-range .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range .laydate-main-list-1 .laydate-prev-y{display:inline-block!important}.layui-laydate-range .laydate-main-list-1 .layui-laydate-header{border-top:1px solid #e2e2e2}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content{border-left:none!important}.layui-laydate-range .laydate-time-list ol li{padding-left:0!important;text-align:center}.layui-laydate-range .laydate-time-list ol{overflow:auto!important}}.layui-tree-spread>div>div>span>.layui-tree-iconArrow:after{border-color:#c0c4cc transparent transparent transparent;top:6px;left:0}.layui-tree .layui-tree-iconArrow:after{transition:none}.ew-tb-cell-ck .layui-form-checkbox[lay-skin=primary]{padding-left:22px}.ew-tb-cell-ck .layui-form-checkbox[lay-skin=primary] span{padding-right:5px}.ew-field-group>.layui-elem-field{border-bottom:0;margin:0}.ew-field-group>.ew-field-box{border:1px solid #e6e6e6;padding:10px 15px;border-top:0}body .layui-elem-quote.layui-quote-nm{border-color:#e6e6e6}.layui-card>.layui-tab-brief>.layui-tab-title li{padding:0 5px;margin:0 10px;line-height:43px;height:43px;transition:color .2s;-webkit-transition:color .2s}.layui-card>.layui-tab-brief>.layui-tab-title li:after{height:43px}.layui-card>.layui-tab-brief>.layui-tab-title{border-bottom-color:#f6f6f6;height:42px;transition:none;-webkit-transition:none}.layui-card>.layui-tab-brief>.layui-tab-content{padding:10px 15px}.layui-tab.layui-tab-vertical{position:relative}.layui-tab.layui-tab-vertical:after{content:"";clear:both;display:block}.layui-tab.layui-tab-vertical>.layui-tab-title{width:130px;height:auto;border:0;border-right:1px solid #e9e9e9;box-sizing:border-box;padding:10px 0;float:left}.layui-tab.layui-tab-vertical>.layui-tab-title>li{display:block;margin-right:-1px;border-right:2px solid transparent;white-space:normal;line-height:normal;padding:10px 20px;text-align:right}.layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-right:2px solid #5fb878;color:#5fb878}.layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this:after{display:none}.layui-tab.layui-tab-vertical>.layui-tab-title>li>.layui-icon{font-size:14px;margin-right:5px}.layui-tab.layui-tab-vertical>.layui-tab-content{margin-left:130px}.layui-tab.layui-tab-vertical.layui-tab-vertical-right>.layui-tab-title{float:right;border-right:0;border-left:1px solid #e9e9e9}.layui-tab.layui-tab-vertical.layui-tab-vertical-right>.layui-tab-content{margin-left:0;margin-right:130px}.layui-tab.layui-tab-vertical.layui-tab-vertical-right>.layui-tab-title>li{text-align:left;border-left:2px solid transparent;border-right:0}.layui-tab.layui-tab-vertical.layui-tab-vertical-right>.layui-tab-title>li.layui-this{border-left:2px solid #5fb878}.layui-tab.layui-tab-vertical.layui-tab-vertical-full>.layui-tab-title{position:absolute;top:0;left:0;right:auto;min-height:100%}.layui-tab.layui-tab-vertical.layui-tab-vertical-right.layui-tab-vertical-full>.layui-tab-title{right:0;left:auto}.ew-btn-loading{opacity:.8;pointer-events:none;font-size:0!important}.ew-btn-loading *{display:none!important}.ew-btn-loading>.ew-btn-loading-text{font-size:14px!important;display:inline-block!important}.ew-btn-loading.layui-btn-sm>.ew-btn-loading-text,.ew-btn-loading.layui-btn-xs>.ew-btn-loading-text{font-size:12px!important}.ew-btn-loading.layui-btn-lg>.ew-btn-loading-text{font-size:16px!important}.ew-btn-loading>.ew-btn-loading-text *{display:inline-block!important}.form-search-expand,.form-search-expand:hover{padding:0!important;color:#2d8cf0!important;border:none!important;box-shadow:none!important;background-color:transparent!important}.form-search-expand .layui-icon{font-size:12px!important;font-weight:600!important}.form-search-show-expand{display:none!important}.layui-badge-green{color:#52c41a;background:#f6ffed;border:1px solid #b7eb8f}.layui-badge-blue{color:#1890ff;background:#e6f7ff;border:1px solid #91d5ff}.layui-badge-red{color:#f5222d;background:#fff1f0;border:1px solid #ffa39e}.layui-badge-yellow{color:#faad14;background:#fffbe6;border:1px solid #ffe58f}.layui-badge-gray{color:#8c8c8c;background:#fafafa;border:1px solid #ccc}.layui-badge{height:20px;line-height:19px;box-sizing:border-box}.layui-badge-list .layui-badge{height:23px;line-height:22px;margin:0 6px 8px 0}.layui-badge-list .layui-badge.layui-bg-gray{border:1px solid #ccc;background-color:#fafafa!important}.layui-card .layui-card-header .layui-badge.pull-right{top:50%;margin-top:-10px}#ew-lock-screen-group{position:fixed;top:0;left:0;right:0;bottom:0;z-index:19891099}.ios-iframe-body{position:absolute;top:0;left:0;right:0;bottom:0}xm-select>.xm-body{margin-left:-2px}xm-select>.xm-body .xm-option{background-color:transparent!important}xm-select>.xm-body .xm-option.hide-icon.selected{background-color:#5fb878!important}xm-select>.xm-body .xm-option:hover{background-color:#f2f2f2!important}.xm-body .xm-tree{min-width:200px}.xm-body .xm-tree .xm-option-content{padding-left:6px}xm-select{border-color:#e6e6e6!important}xm-select:hover{border-color:#d2d2d2!important}xm-select[style="border-color: rgb(229, 77, 66);"]{border-color:#e54d42!important}body .ew-xmselect-tree xm-select .xm-body .xm-option .xm-option-icon{position:absolute;left:30px;top:0;right:0;bottom:0;width:auto;height:auto;border:none!important;z-index:1}body .ew-xmselect-tree xm-select .xm-body .xm-option .xm-option-icon:before{display:none}body .ew-xmselect-tree xm-select .xm-body .xm-option.selected{background-color:#f2f2f2!important}body .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#5fb878!important}.theme-blue .layui-layout-admin .layui-header .layui-logo{color:#fff;box-shadow:none;background-color:transparent}.theme-blue .layui-layout-admin .layui-header{background-color:#3c8dbc}.theme-blue .layui-layout-admin .layui-header a{color:#fff}.theme-blue .layui-layout-admin .layui-header a:hover{color:#fff}.theme-blue .layui-layout-admin .layui-header .layui-nav-child a{color:#595959}.theme-blue .layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-color:#eee transparent transparent}.theme-blue .layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color:transparent transparent #eee}.theme-blue .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-blue .layui-layout-admin .layui-header .layui-nav-bar{background-color:#fff}.theme-blue .layui-layout-admin .layui-side{background-color:#222d32}.theme-blue .layui-side .layui-nav .layui-nav-item a{color:#b8c7ce}.theme-blue .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-blue .layui-nav-tree .layui-this>a,.theme-blue .layui-nav-tree .layui-this>a:hover{color:#fff;background-color:#3c8dbc}.theme-blue .layui-nav-tree>.layui-nav-item>a:before{background-color:#3c8dbc}.theme-blue .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#222d32!important}.theme-blue .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{background-color:#3c8dbc;top:38px}.theme-blue .layui-body-header-title{border-left-color:#3c8dbc}.theme-blue .layui-layer.layui-layer-admin .layui-layer-title{background-color:#3c8dbc}.theme-blue .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#3c8dbc;background-color:#3c8dbc}.theme-blue .ball-loader>span,.theme-blue .signal-loader>span{background-color:#3c8dbc}.theme-blue .btn-circle{background:#3c8dbc}.theme-blue .more-theme-item:hover,.theme-blue .more-theme-item.active{border-color:#3c8dbc}.theme-blue .text-primary,.theme-blue .layui-link{color:#3c8dbc!important}.theme-blue .layui-btn{background-color:#3c8dbc}.theme-blue .layui-form-onswitch{border-color:#3c8dbc;background-color:#3c8dbc}.theme-blue .layui-form-radio>i:hover,.theme-blue .layui-form-radioed>i,.theme-blue .layui-form-checked i,.theme-blue .layui-form-checked:hover i{color:#3c8dbc}.theme-blue .layui-form-checked[lay-skin=primary] i,.theme-blue .layui-form-checked span,.theme-blue .layui-form-checked:hover span{border-color:#3c8dbc!important;background-color:#3c8dbc}.theme-blue .layui-form-checked[lay-skin=primary] i:hover,.theme-blue .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#3c8dbc!important}.theme-blue .layui-form-select dl dd.layui-this{background-color:#3c8dbc}.theme-blue .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#3c8dbc}.theme-blue .layui-laypage input:focus,.theme-blue .layui-laypage select:focus{border-color:#3c8dbc!important}.theme-blue .layui-laypage a:hover{color:#3c8dbc}.theme-blue .layui-tab-brief>.layui-tab-title .layui-this{color:#3c8dbc}.theme-blue .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-blue .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#3c8dbc!important}.theme-blue .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#3c8dbc;color:#3c8dbc}.theme-blue .layui-breadcrumb a:hover{color:#3c8dbc!important}.theme-blue .layui-laydate-footer span:hover,.theme-blue .layui-laydate-header i:hover,.theme-blue .layui-laydate-header span:hover{color:#3c8dbc}.theme-blue .layui-laydate .layui-this{background-color:#3c8dbc!important}.theme-blue .layui-laydate-content td.laydate-selected{background-color:rgba(60,141,188,.1)}.theme-blue .laydate-selected:hover{background-color:rgba(60,141,188,.1)!important}.theme-blue .layui-timeline-axis{color:#3c8dbc}.theme-blue .layui-transfer-active .layui-btn{background-color:#3c8dbc!important;border-color:#3c8dbc!important}.theme-blue .layui-progress-bar{background-color:#3c8dbc}.theme-blue .layui-slider-bar{background-color:#3c8dbc!important}.theme-blue .layui-slider-wrap-btn{border-color:#3c8dbc!important}.theme-blue .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#3c8dbc}.theme-blue .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-blue .layui-elem-quote{border-color:#3c8dbc}.theme-blue .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-blue .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#3c8dbc}.theme-blue .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#9dc6dd}.theme-blue .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#3c8dbc}.theme-blue .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#9dc6dd!important}.theme-blue .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#3c8dbc!important}.theme-blue .ew-cascader-dropdown-list-item.active,.theme-blue .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#3c8dbc}.theme-blue div.tagsinput span.tag{background:#3c8dbc}.theme-blue xm-select .xm-body .xm-option .xm-option-icon{border-color:#3c8dbc!important}.theme-blue xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-blue xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-blue .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#3c8dbc!important}.theme-blue xm-select .xm-label .xm-label-block,.theme-blue xm-select .xm-body .xm-option.hide-icon.selected{background-color:#3c8dbc!important}.theme-blue .city-select a.active{color:#fff!important;background-color:#3c8dbc!important}.theme-blue .city-select a:hover,.theme-blue .city-select a:focus{background-color:rgba(60,141,188,.1);color:#3c8dbc}.theme-blue .city-picker-span>.title>span:hover{background-color:rgba(60,141,188,.1)}.theme-blue .city-select-tab>a.active{color:#3c8dbc}.theme-green .layui-layout-admin .layui-header .layui-logo{color:#fff;box-shadow:none;background-color:transparent}.theme-green .layui-layout-admin .layui-header{background-color:#00a65a}.theme-green .layui-layout-admin .layui-header a{color:#fff}.theme-green .layui-layout-admin .layui-header a:hover{color:#fff}.theme-green .layui-layout-admin .layui-header .layui-nav-child a{color:#595959}.theme-green .layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-color:#eee transparent transparent}.theme-green .layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color:transparent transparent #eee}.theme-green .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-green .layui-layout-admin .layui-header .layui-nav-bar{background-color:#fff}.theme-green .layui-layout-admin .layui-side{background-color:#222d32}.theme-green .layui-side .layui-nav .layui-nav-item a{color:#b8c7ce}.theme-green .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-green .layui-nav-tree .layui-this>a,.theme-green .layui-nav-tree .layui-this>a:hover{color:#fff;background-color:#00a65a}.theme-green .layui-nav-tree>.layui-nav-item>a:before{background-color:#00a65a}.theme-green .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#222d32!important}.theme-green .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{background-color:#00a65a;top:38px}.theme-green .layui-body-header-title{border-left-color:#00a65a}.theme-green .layui-layer.layui-layer-admin .layui-layer-title{background-color:#00a65a}.theme-green .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#00a65a;background-color:#00a65a}.theme-green .more-theme-item:hover,.theme-green .more-theme-item.active{border-color:#00a65a}.theme-green .btn-circle{background:#00a65a}.theme-green .ball-loader>span,.theme-green .signal-loader>span{background-color:#00a65a}.theme-green .text-primary,.theme-green .layui-link{color:#00a65a!important}.theme-green .layui-btn{background-color:#00a65a}.theme-green .layui-form-onswitch{border-color:#00a65a;background-color:#00a65a}.theme-green .layui-form-radio>i:hover,.theme-green .layui-form-radioed>i,.theme-green .layui-form-checked i,.theme-green .layui-form-checked:hover i{color:#00a65a}.theme-green .layui-form-checked[lay-skin=primary] i,.theme-green .layui-form-checked span,.theme-green .layui-form-checked:hover span{border-color:#00a65a!important;background-color:#00a65a}.theme-green .layui-form-checked[lay-skin=primary] i:hover,.theme-green .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#00a65a!important}.theme-green .layui-form-select dl dd.layui-this{background-color:#00a65a}.theme-green .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#00a65a}.theme-green .layui-laypage input:focus,.theme-green .layui-laypage select:focus{border-color:#00a65a!important}.theme-green .layui-laypage a:hover{color:#00a65a}.theme-green .layui-tab-brief>.layui-tab-title .layui-this{color:#00a65a}.theme-green .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-green .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#00a65a!important}.theme-green .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#00a65a;color:#00a65a}.theme-green .layui-breadcrumb a:hover{color:#00a65a!important}.theme-green .layui-laydate-footer span:hover,.theme-green .layui-laydate-header i:hover,.theme-green .layui-laydate-header span:hover{color:#00a65a}.theme-green .layui-laydate .layui-this{background-color:#00a65a!important}.theme-green .layui-laydate-content td.laydate-selected{background-color:rgba(0,166,90,.1)}.theme-green .laydate-selected:hover{background-color:rgba(0,166,90,.1)!important}.theme-green .layui-timeline-axis{color:#00a65a}.theme-green .layui-transfer-active .layui-btn{background-color:#00a65a!important;border-color:#00a65a!important}.theme-green .layui-progress-bar{background-color:#00a65a}.theme-green .layui-slider-bar{background-color:#00a65a!important}.theme-green .layui-slider-wrap-btn{border-color:#00a65a!important}.theme-green .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#00a65a}.theme-green .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-green .layui-elem-quote{border-color:#00a65a}.theme-green .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-green .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#00a65a}.theme-green .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#7fd2ac}.theme-green .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#00a65a}.theme-green .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#7fd2ac!important}.theme-green .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#00a65a!important}.theme-green .ew-cascader-dropdown-list-item.active,.theme-green .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#00a65a}.theme-green div.tagsinput span.tag{background:#00a65a}.theme-green xm-select .xm-body .xm-option .xm-option-icon{border-color:#00a65a!important}.theme-green xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-green xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-green .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#00a65a!important}.theme-green xm-select .xm-label .xm-label-block,.theme-green xm-select .xm-body .xm-option.hide-icon.selected{background-color:#00a65a!important}.theme-green .city-select a.active{color:#fff!important;background-color:#00a65a!important}.theme-green .city-select a:hover,.theme-green .city-select a:focus{background-color:rgba(0,166,90,.1);color:#00a65a}.theme-green .city-picker-span>.title>span:hover{background-color:rgba(0,166,90,.1)}.theme-green .city-select-tab>a.active{color:#00a65a}.theme-purple .layui-layout-admin .layui-header .layui-logo{color:#fff;box-shadow:none;background-color:transparent}.theme-purple .layui-layout-admin .layui-header{background-color:#722ed1}.theme-purple .layui-layout-admin .layui-header a{color:#fff}.theme-purple .layui-layout-admin .layui-header a:hover{color:#fff}.theme-purple .layui-layout-admin .layui-header .layui-nav-child a{color:#595959}.theme-purple .layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-color:#eee transparent transparent}.theme-purple .layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color:transparent transparent #eee}.theme-purple .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-purple .layui-layout-admin .layui-header .layui-nav-bar{background-color:#fff}.theme-purple .layui-layout-admin .layui-side{background-color:#222d32}.theme-purple .layui-side .layui-nav .layui-nav-item a{color:#b8c7ce}.theme-purple .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-purple .layui-nav-tree .layui-this>a,.theme-purple .layui-nav-tree .layui-this>a:hover{color:#fff;background-color:#722ed1}.theme-purple .layui-nav-tree>.layui-nav-item>a:before{background-color:#722ed1}.theme-purple .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#222d32!important}.theme-purple .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{background-color:#722ed1;top:38px}.theme-purple .layui-body-header-title{border-left-color:#722ed1}.theme-purple .layui-layer.layui-layer-admin .layui-layer-title{background-color:#722ed1}.theme-purple .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#722ed1;background-color:#722ed1}.theme-purple .more-theme-item:hover,.theme-purple .more-theme-item.active{border-color:#722ed1}.theme-purple .btn-circle{background:#722ed1}.theme-purple .ball-loader>span,.theme-purple .signal-loader>span{background-color:#722ed1}.theme-purple .text-primary,.theme-purple .layui-link{color:#722ed1!important}.theme-purple .layui-btn{background-color:#722ed1}.theme-purple .layui-form-onswitch{border-color:#722ed1;background-color:#722ed1}.theme-purple .layui-form-radio>i:hover,.theme-purple .layui-form-radioed>i,.theme-purple .layui-form-checked i,.theme-purple .layui-form-checked:hover i{color:#722ed1}.theme-purple .layui-form-checked[lay-skin=primary] i,.theme-purple .layui-form-checked span,.theme-purple .layui-form-checked:hover span{border-color:#722ed1!important;background-color:#722ed1}.theme-purple .layui-form-checked[lay-skin=primary] i:hover,.theme-purple .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#722ed1!important}.theme-purple .layui-form-select dl dd.layui-this{background-color:#722ed1}.theme-purple .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#722ed1}.theme-purple .layui-laypage input:focus,.theme-purple .layui-laypage select:focus{border-color:#722ed1!important}.theme-purple .layui-laypage a:hover{color:#722ed1}.theme-purple .layui-tab-brief>.layui-tab-title .layui-this{color:#722ed1}.theme-purple .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-purple .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#722ed1!important}.theme-purple .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#722ed1;color:#722ed1}.theme-purple .layui-breadcrumb a:hover{color:#722ed1!important}.theme-purple .layui-laydate-footer span:hover,.theme-purple .layui-laydate-header i:hover,.theme-purple .layui-laydate-header span:hover{color:#722ed1}.theme-purple .layui-laydate .layui-this{background-color:#722ed1!important}.theme-purple .layui-laydate-content td.laydate-selected{background-color:rgba(114,46,209,.1)}.theme-purple .laydate-selected:hover{background-color:rgba(114,46,209,.1)!important}.theme-purple .layui-timeline-axis{color:#722ed1}.theme-purple .layui-transfer-active .layui-btn{background-color:#722ed1!important;border-color:#722ed1!important}.theme-purple .layui-progress-bar{background-color:#722ed1}.theme-purple .layui-slider-bar{background-color:#722ed1!important}.theme-purple .layui-slider-wrap-btn{border-color:#722ed1!important}.theme-purple .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#722ed1}.theme-purple .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-purple .layui-elem-quote{border-color:#722ed1}.theme-purple .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-purple .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#722ed1}.theme-purple .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#b896e8}.theme-purple .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#722ed1}.theme-purple .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#b896e8!important}.theme-purple .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#722ed1!important}.theme-purple .ew-cascader-dropdown-list-item.active,.theme-purple .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#722ed1}.theme-purple div.tagsinput span.tag{background:#722ed1}.theme-purple xm-select .xm-body .xm-option .xm-option-icon{border-color:#722ed1!important}.theme-purple xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-purple xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-purple .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#722ed1!important}.theme-purple xm-select .xm-label .xm-label-block,.theme-purple xm-select .xm-body .xm-option.hide-icon.selected{background-color:#722ed1!important}.theme-purple .city-select a.active{color:#fff!important;background-color:#722ed1!important}.theme-purple .city-select a:hover,.theme-purple .city-select a:focus{background-color:rgba(114,46,209,.1);color:#722ed1}.theme-purple .city-picker-span>.title>span:hover{background-color:rgba(114,46,209,.1)}.theme-purple .city-select-tab>a.active{color:#722ed1}.theme-red .layui-layout-admin .layui-header .layui-logo{color:#fff;box-shadow:none;background-color:transparent}.theme-red .layui-layout-admin .layui-header{background-color:#dd4b39}.theme-red .layui-layout-admin .layui-header a{color:#fff}.theme-red .layui-layout-admin .layui-header a:hover{color:#fff}.theme-red .layui-layout-admin .layui-header .layui-nav-child a{color:#595959}.theme-red .layui-layout-admin .layui-header .layui-nav .layui-nav-more{border-color:#eee transparent transparent}.theme-red .layui-layout-admin .layui-header .layui-nav .layui-nav-mored{border-color:transparent transparent #eee}.theme-red .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-red .layui-layout-admin .layui-header .layui-nav-bar{background-color:#fff}.theme-red .layui-layout-admin .layui-side{background-color:#28333e}.theme-red .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-red .layui-nav-tree .layui-this>a,.theme-red .layui-nav-tree .layui-this>a:hover{background-color:#dd4b39}.theme-red .layui-nav-tree>.layui-nav-item>a:before{background-color:#dd4b39}.theme-red .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#28333e!important}.theme-red .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{background-color:#dd4b39;top:38px}.theme-red .layui-body-header-title{border-left-color:#dd4b39}.theme-red .layui-layer.layui-layer-admin .layui-layer-title{background-color:#dd4b39}.theme-red .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#dd4b39;background-color:#dd4b39}.theme-red .more-theme-item:hover,.theme-red .more-theme-item.active{border-color:#dd4b39}.theme-red .btn-circle{background:#dd4b39}.theme-red .ball-loader>span,.theme-red .signal-loader>span{background-color:#dd4b39}.theme-red .text-primary,.theme-red .layui-link{color:#dd4b39!important}.theme-red .layui-btn{background-color:#dd4b39}.theme-red .layui-form-onswitch{border-color:#dd4b39;background-color:#dd4b39}.theme-red .layui-form-radio>i:hover,.theme-red .layui-form-radioed>i,.theme-red .layui-form-checked i,.theme-red .layui-form-checked:hover i{color:#dd4b39}.theme-red .layui-form-checked[lay-skin=primary] i,.theme-red .layui-form-checked span,.theme-red .layui-form-checked:hover span{border-color:#dd4b39!important;background-color:#dd4b39}.theme-red .layui-form-checked[lay-skin=primary] i:hover,.theme-red .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#dd4b39!important}.theme-red .layui-form-select dl dd.layui-this{background-color:#dd4b39}.theme-red .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#dd4b39}.theme-red .layui-laypage input:focus,.theme-red .layui-laypage select:focus{border-color:#dd4b39!important}.theme-red .layui-laypage a:hover{color:#dd4b39}.theme-red .layui-tab-brief>.layui-tab-title .layui-this{color:#dd4b39}.theme-red .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-red .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#dd4b39!important}.theme-red .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#dd4b39;color:#dd4b39}.theme-red .layui-breadcrumb a:hover{color:#dd4b39!important}.theme-red .layui-laydate-footer span:hover,.theme-red .layui-laydate-header i:hover,.theme-red .layui-laydate-header span:hover{color:#dd4b39}.theme-red .layui-laydate .layui-this{background-color:#dd4b39!important}.theme-red .layui-laydate-content td.laydate-selected{background-color:rgba(221,75,57,.1)}.theme-red .laydate-selected:hover{background-color:rgba(221,75,57,.1)!important}.theme-red .layui-timeline-axis{color:#dd4b39}.theme-red .layui-transfer-active .layui-btn{background-color:#dd4b39!important;border-color:#dd4b39!important}.theme-red .layui-progress-bar{background-color:#dd4b39}.theme-red .layui-slider-bar{background-color:#dd4b39!important}.theme-red .layui-slider-wrap-btn{border-color:#dd4b39!important}.theme-red .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#dd4b39}.theme-red .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-red .layui-elem-quote{border-color:#dd4b39}.theme-red .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-red .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#dd4b39}.theme-red .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#eea39a}.theme-red .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#dd4b39}.theme-red .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#eea39a!important}.theme-red .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#dd4b39!important}.theme-red .ew-cascader-dropdown-list-item.active,.theme-red .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#dd4b39}.theme-red div.tagsinput span.tag{background:#dd4b39}.theme-red xm-select .xm-body .xm-option .xm-option-icon{border-color:#dd4b39!important}.theme-red xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-red xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-red .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#dd4b39!important}.theme-red xm-select .xm-label .xm-label-block,.theme-red xm-select .xm-body .xm-option.hide-icon.selected{background-color:#dd4b39!important}.theme-red .city-select a.active{color:#fff!important;background-color:#dd4b39!important}.theme-red .city-select a:hover,.theme-red .city-select a:focus{background-color:rgba(221,75,57,.1);color:#dd4b39}.theme-red .city-picker-span>.title>span:hover{background-color:rgba(221,75,57,.1)}.theme-red .city-select-tab>a.active{color:#dd4b39}.theme-cyan .layui-layout-admin .layui-header .layui-logo{background-color:#001529}.theme-cyan .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-cyan .layui-layout-admin .layui-header .layui-nav-bar{background-color:#001529}.theme-cyan .layui-layout-admin .layui-side{background-color:#001529}.theme-cyan .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-cyan .layui-nav-tree .layui-this>a,.theme-cyan .layui-nav-tree .layui-this>a:hover{background-color:#1890ff}.theme-cyan .layui-nav-tree>.layui-nav-item>a:before{background-color:#1890ff}.theme-cyan .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#001529!important}.theme-cyan .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{background-color:#001529}.theme-cyan .layui-body-header-title{border-left-color:#1890ff}.theme-cyan .layui-layer.layui-layer-admin{border-radius:4px}.theme-cyan .layui-layer.layui-layer-admin .layui-layer-title{color:#333;font-size:16px;padding-left:23px;background-color:#fff;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom:1px solid #f1f1f1}.theme-cyan .layui-layer.layui-layer-admin .layui-layer-setwin a{color:#8c8c8c;font-weight:600}.theme-cyan .layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-min cite{background-color:#8c8c8c}.theme-cyan .layui-layer.layui-layer-admin .layui-layer-btn a{height:32px;line-height:32px;border-radius:4px;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-cyan .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#1890ff;background-color:#1890ff}.theme-cyan .more-theme-item:hover,.theme-cyan .more-theme-item.active{border-color:#1890ff}.theme-cyan .btn-circle{background:#1890ff}.theme-cyan .ball-loader>span,.theme-cyan .signal-loader>span{background-color:#1890ff}.theme-cyan .text-primary,.theme-cyan .layui-link{color:#1890ff!important}.theme-cyan .layui-btn{height:36px;line-height:36px;border-radius:4px;background-color:#1890ff;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-cyan .layui-btn-lg{height:42px;line-height:42px}.theme-cyan .layui-btn-sm{height:28px;line-height:28px}.theme-cyan .layui-btn-xs{height:22px;line-height:22px}.theme-cyan .layui-input,.theme-cyan .layui-select,.theme-cyan .layui-textarea,.theme-cyan xm-select{height:36px;border-radius:4px}.theme-cyan .layui-input:focus,.theme-cyan .layui-textarea:focus,.theme-cyan xm-select:hover{border-color:#40a9ff!important}.theme-cyan .layui-form-label,.theme-cyan .layui-form-mid{padding-top:8px;padding-bottom:8px}.theme-cyan .layui-input-block{min-height:36px}.theme-cyan .layui-form-radio{margin-top:4px}.theme-cyan .layui-form-onswitch{border-color:#1890ff;background-color:#1890ff}.theme-cyan .layui-form-radio>i:hover,.theme-cyan .layui-form-radioed>i,.theme-cyan .layui-form-checked i,.theme-cyan .layui-form-checked:hover i{color:#1890ff}.theme-cyan .layui-form-checked[lay-skin=primary] i,.theme-cyan .layui-form-checked span,.theme-cyan .layui-form-checked:hover span{border-color:#1890ff!important;background-color:#1890ff}.theme-cyan .layui-form-checked[lay-skin=primary] i:hover,.theme-cyan .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#1890ff!important}.theme-cyan .layui-form-select dl dd.layui-this{background-color:#1890ff}.theme-cyan .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#1890ff}.theme-cyan .layui-laypage input:focus,.theme-cyan .layui-laypage select:focus{border-color:#1890ff!important}.theme-cyan .layui-laypage a:hover{color:#1890ff}.theme-cyan .layui-tab-brief>.layui-tab-title .layui-this{color:#1890ff}.theme-cyan .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-cyan .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#1890ff!important}.theme-cyan .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#2d8cf0;color:#2d8cf0}.theme-cyan .layui-breadcrumb a:hover{color:#1890ff!important}.theme-cyan .layui-laydate-footer span:hover,.theme-cyan .layui-laydate-header i:hover,.theme-cyan .layui-laydate-header span:hover{color:#1890ff}.theme-cyan .layui-laydate .layui-this{background-color:#1890ff!important}.theme-cyan .layui-laydate-content td.laydate-selected{background-color:rgba(24,144,255,.1)}.theme-cyan .laydate-selected:hover{background-color:rgba(24,144,255,.1)!important}.theme-cyan .layui-timeline-axis{color:#1890ff}.theme-cyan .layui-transfer-active .layui-btn{background-color:#1890ff!important;border-color:#1890ff!important}.theme-cyan .layui-progress-bar{background-color:#1890ff}.theme-cyan .layui-slider-bar{background-color:#1890ff!important}.theme-cyan .layui-slider-wrap-btn{border-color:#1890ff!important}.theme-cyan .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#1890ff}.theme-cyan .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-cyan .layui-elem-quote{border-color:#1890ff}.theme-cyan .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-cyan .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#1890ff}.theme-cyan .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#89c6ff}.theme-cyan .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#1890ff}.theme-cyan .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#89c6ff!important}.theme-cyan .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#1890ff!important}.theme-cyan .ew-cascader-dropdown-list-item.active,.theme-cyan .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#1890ff}.theme-cyan div.tagsinput span.tag{background:#1890ff}.theme-cyan xm-select .xm-body .xm-option .xm-option-icon{border-color:#1890ff!important}.theme-cyan xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-cyan xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-cyan .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#1890ff!important}.theme-cyan xm-select .xm-label .xm-label-block,.theme-cyan xm-select .xm-body .xm-option.hide-icon.selected{background-color:#1890ff!important}.theme-cyan .city-select a.active{color:#fff!important;background-color:#1890ff!important}.theme-cyan .city-select a:hover,.theme-cyan .city-select a:focus{background-color:#f0faff;color:#1890ff}.theme-cyan .city-picker-span>.title>span:hover{background-color:#f0faff}.theme-cyan .city-select-tab>a.active{color:#1890ff}.theme-white .layui-layout-admin .layui-header .layui-logo{color:#262626;background-color:transparent;box-shadow:2px 8px 8px 0 rgba(29,35,41,.05)}.theme-white .layui-layout-admin .layui-header{box-shadow:0 1px 4px rgba(0,21,41,.08)}.theme-white .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-white .layui-layout-admin .layui-header .layui-nav-bar{background-color:#2d8cf0}.theme-white .layui-layout-admin .layui-side{background-color:#fff;box-shadow:2px 8px 8px 0 rgba(29,35,41,.05)}.theme-white .layui-side .layui-nav .layui-nav-item a{color:#595959}.theme-white .layui-side .layui-nav .layui-nav-item a:hover{color:#2d8cf0}.theme-white .layui-side .layui-nav-itemed>a,.theme-white .layui-side .layui-nav-tree .layui-nav-title a,.theme-white .layui-side .layui-nav-tree .layui-nav-title a:hover{color:#595959!important}.theme-white .layui-side .layui-nav-itemed>a:hover{color:#2d8cf0!important}.theme-white .layui-side .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-white .layui-side .layui-nav-tree .layui-this>a,.theme-white .layui-side .layui-nav-tree .layui-this>a:hover{color:#2d8cf0;background:#f0faff;border-right:2px solid #2d8cf0}.theme-white .layui-side .layui-nav-tree .layui-nav-item .layui-nav-child{background-color:transparent!important}.theme-white .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#fff!important}@media screen and (min-width:769px){.theme-white .layui-layout-admin.admin-nav-mini .layui-side .layui-nav li.layui-nav-itemed>a{background:#f0faff;color:#2d8cf0!important}}.theme-white .layui-nav-tree>.layui-nav-item>a:before{display:none}.theme-white .layui-side .layui-nav .layui-nav-more{border-color:rgba(89,89,89,.7) transparent transparent}.theme-white .layui-side .layui-nav .layui-nav-mored,.theme-white .layui-side .layui-nav-itemed>a .layui-nav-more{border-color:transparent transparent rgba(89,89,89,.7)}.theme-white .layui-side .layui-nav-tree.arrow3 .layui-nav-itemed>a>.layui-nav-more:before{background-color:rgba(89,89,89,.7)}@media screen and (min-width:769px){.theme-white .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more{border-color:transparent transparent transparent rgba(89,89,89,.7)}}.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title{top:8px;right:8px;height:32px;line-height:32px;box-sizing:border-box;background-color:transparent;box-shadow:-4px 4px 0 #f5f7f9;padding-right:70px}.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li{border:0;margin-right:6px;border-radius:4px;background-color:#fff;line-height:32px;height:32px}.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this{color:#2d8cf0;background-color:#fff}.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li:hover{background-color:#fff}.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{display:none}.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close,.theme-white .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close:hover{top:8px;color:#8c8c8c;background-color:transparent}.theme-white .layui-layout-admin .layui-body .admin-tabs-control,.theme-white .layui-layout-admin .layui-body .admin-tabs-control:hover{top:8px;height:32px;line-height:32px;background-color:#f5f7f9;border:0}.theme-white .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-down{border-radius:4px;background-color:#fff;width:32px;right:8px}.theme-white .admin-tabs-control>.layui-nav .layui-nav-item{line-height:32px}.theme-white .admin-tabs-control>.layui-nav .layui-nav-item>a{height:32px;width:32px;padding:0}.theme-white .admin-tabs-control>.layui-nav .layui-nav-child{top:36px;border:0;border-radius:4px;box-shadow:0 1px 6px rgba(0,0,0,.2)}.theme-white .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-prev:before{content:"\e603"}.theme-white .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-next:before{content:"\e602"}.theme-white .layui-body-header-title{border-left-color:#2d8cf0}.theme-white .layui-body-header{box-shadow:0 1px 4px rgba(0,21,41,.08)}.theme-white .layui-layer.layui-layer-admin{border-radius:4px}.theme-white .layui-layer.layui-layer-admin .layui-layer-title{color:#262626;font-size:16px;padding-left:23px;background-color:#fff;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom:1px solid #f1f1f1}.theme-white .layui-layer.layui-layer-admin .layui-layer-setwin a{color:#8c8c8c;font-weight:600}.theme-white .layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-min cite{background-color:#8c8c8c}.theme-white .layui-layer.layui-layer-admin .layui-layer-btn a{height:32px;line-height:32px;border-radius:4px;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-white .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#2d8cf0;background-color:#2d8cf0}.theme-white .more-theme-item:hover,.theme-white .more-theme-item.active{border-color:#2d8cf0}.theme-white .btn-circle{background:#2d8cf0}.theme-white .ball-loader>span,.theme-white .signal-loader>span{background-color:#2d8cf0}.theme-white .text-primary,.theme-white .layui-link{color:#2d8cf0!important}.theme-white .layui-card{border-radius:4px;box-shadow:none}.theme-white .layui-btn{height:36px;line-height:36px;border-radius:4px;background-color:#2d8cf0;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-white .layui-btn-lg{height:42px;line-height:42px}.theme-white .layui-btn-sm{height:28px;line-height:28px}.theme-white .layui-btn-xs{height:22px;line-height:22px}.theme-white .layui-input,.theme-white .layui-select,.theme-white .layui-textarea,.theme-white xm-select{height:36px;border-radius:4px}.theme-white .layui-input:focus,.theme-white .layui-textarea:focus,.theme-white xm-select:hover{border-color:#2d8cf0!important}.theme-white .layui-form-label,.theme-white .layui-form-mid{padding-top:8px;padding-bottom:8px}.theme-white .layui-input-block{min-height:36px}.theme-white .layui-form-radio{margin-top:4px}.theme-white .layui-form-onswitch{border-color:#2d8cf0;background-color:#2d8cf0}.theme-white .layui-form-radio>i:hover,.theme-white .layui-form-radioed>i,.theme-white .layui-form-checked i,.theme-white .layui-form-checked:hover i{color:#2d8cf0}.theme-white .layui-form-checked[lay-skin=primary] i,.theme-white .layui-form-checked span,.theme-white .layui-form-checked:hover span{border-color:#2d8cf0!important;background-color:#2d8cf0}.theme-white .layui-form-checked[lay-skin=primary] i:hover,.theme-white .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#2d8cf0!important}.theme-white .layui-form-select dl dd.layui-this{background-color:#2d8cf0}.theme-white .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#2d8cf0}.theme-white .layui-laypage input:focus,.theme-white .layui-laypage select:focus{border-color:#2d8cf0!important}.theme-white .layui-laypage a:hover{color:#2d8cf0}.theme-white .layui-tab-brief>.layui-tab-title .layui-this{color:#2d8cf0}.theme-white .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-white .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#2d8cf0!important}.theme-white .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#2d8cf0;color:#2d8cf0}.theme-white .layui-breadcrumb a:hover{color:#2d8cf0!important}.theme-white .layui-laydate-footer span:hover,.theme-white .layui-laydate-header i:hover,.theme-white .layui-laydate-header span:hover{color:#2d8cf0}.theme-white .layui-laydate .layui-this{background-color:#2d8cf0!important}.theme-white .layui-laydate-content td.laydate-selected{background-color:rgba(45,140,240,.1)}.theme-white .laydate-selected:hover{background-color:rgba(45,140,240,.1)!important}.theme-white .layui-timeline-axis{color:#2d8cf0}.theme-white .layui-transfer-active .layui-btn{background-color:#2d8cf0!important;border-color:#2d8cf0!important}.theme-white .layui-progress-bar{background-color:#2d8cf0}.theme-white .layui-slider-bar{background-color:#2d8cf0!important}.theme-white .layui-slider-wrap-btn{border-color:#2d8cf0!important}.theme-white .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#2d8cf0}.theme-white .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-white .layui-elem-quote{border-color:#2d8cf0}.theme-white .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-white .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#2d8cf0}.theme-white .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#95c5f7}.theme-white .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#2d8cf0}.theme-white .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#95c5f7!important}.theme-white .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#2d8cf0!important}.theme-white .ew-cascader-dropdown-list-item.active,.theme-white .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#2d8cf0}.theme-white div.tagsinput span.tag{background:#2d8cf0}.theme-white xm-select .xm-body .xm-option .xm-option-icon{border-color:#2d8cf0!important}.theme-white xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-white xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-white .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#2d8cf0!important}.theme-white xm-select .xm-label .xm-label-block,.theme-white xm-select .xm-body .xm-option.hide-icon.selected{background-color:#2d8cf0!important}.theme-white .city-select a.active{color:#fff!important;background-color:#2d8cf0!important}.theme-white .city-select a:hover,.theme-white .city-select a:focus{background-color:#f0faff;color:#2d8cf0}.theme-white .city-picker-span>.title>span:hover{background-color:#f0faff}.theme-white .city-select-tab>a.active{color:#2d8cf0}.theme-pink .layui-layout-admin .layui-header .layui-logo{color:#262626;background-color:transparent;box-shadow:2px 8px 8px 0 rgba(29,35,41,.05)}.theme-pink .layui-layout-admin .layui-header{box-shadow:0 1px 4px rgba(0,21,41,.08)}.theme-pink .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-pink .layui-layout-admin .layui-header .layui-nav-bar{background-color:#fb7299}.theme-pink .layui-layout-admin .layui-side{background-color:#fff;box-shadow:2px 8px 8px 0 rgba(29,35,41,.05)}.theme-pink .layui-side .layui-nav .layui-nav-item a{color:#595959}.theme-pink .layui-side .layui-nav .layui-nav-item a:hover{color:#fb7299}.theme-pink .layui-side .layui-nav-itemed>a,.theme-pink .layui-side .layui-nav-tree .layui-nav-title a,.theme-pink .layui-side .layui-nav-tree .layui-nav-title a:hover{color:#595959!important}.theme-pink .layui-side .layui-nav-itemed>a:hover{color:#fb7299!important}.theme-pink .layui-side .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-pink .layui-side .layui-nav-tree .layui-this>a,.theme-pink .layui-side .layui-nav-tree .layui-this>a:hover{color:#fb7299;background:#fff7f9;border-right:2px solid #fb7299}.theme-pink .layui-side .layui-nav-tree .layui-nav-item .layui-nav-child{background-color:transparent!important}.theme-pink .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#fff!important}@media screen and (min-width:769px){.theme-pink .layui-layout-admin.admin-nav-mini .layui-side .layui-nav li.layui-nav-itemed>a{background:#fff1f5;color:#fb7299!important}}.theme-pink .layui-nav-tree>.layui-nav-item>a:before{display:none}.theme-pink .layui-side .layui-nav .layui-nav-more{border-color:rgba(89,89,89,.7) transparent transparent}.theme-pink .layui-side .layui-nav .layui-nav-mored,.theme-pink .layui-side .layui-nav-itemed>a .layui-nav-more{border-color:transparent transparent rgba(89,89,89,.7)}.theme-pink .layui-side .layui-nav-tree.arrow3 .layui-nav-itemed>a>.layui-nav-more:before{background-color:rgba(89,89,89,.7)}@media screen and (min-width:769px){.theme-pink .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more{border-color:transparent transparent transparent rgba(89,89,89,.7)}}.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title{top:8px;right:8px;height:32px;line-height:32px;box-sizing:border-box;background-color:transparent;box-shadow:-4px 4px 0 #f5f7f9;padding-right:70px}.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li{border:0;margin-right:6px;border-radius:4px;background-color:#fff;line-height:32px;height:32px}.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this{color:#fb7299;background-color:#fff}.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li:hover{background-color:#fff}.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{display:none}.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close,.theme-pink .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close:hover{top:8px;color:#8c8c8c;background-color:transparent}.theme-pink .layui-layout-admin .layui-body .admin-tabs-control,.theme-pink .layui-layout-admin .layui-body .admin-tabs-control:hover{top:8px;height:32px;line-height:32px;background-color:#f5f7f9;border:0}.theme-pink .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-down{border-radius:4px;background-color:#fff;width:32px;right:8px}.theme-pink .admin-tabs-control>.layui-nav .layui-nav-item{line-height:32px}.theme-pink .admin-tabs-control>.layui-nav .layui-nav-item>a{height:32px;width:32px;padding:0}.theme-pink .admin-tabs-control>.layui-nav .layui-nav-child{top:36px;border:0;border-radius:4px;box-shadow:0 1px 6px rgba(0,0,0,.2)}.theme-pink .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-prev:before{content:"\e603"}.theme-pink .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-next:before{content:"\e602"}.theme-pink .layui-body-header-title{border-left-color:#fb7299}.theme-pink .layui-body-header{box-shadow:0 1px 4px rgba(0,21,41,.08)}.theme-pink .layui-layer.layui-layer-admin{border-radius:4px}.theme-pink .layui-layer.layui-layer-admin .layui-layer-title{color:#262626;font-size:16px;padding-left:23px;background-color:#fff;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom:1px solid #f1f1f1}.theme-pink .layui-layer.layui-layer-admin .layui-layer-setwin a{color:#8c8c8c;font-weight:600}.theme-pink .layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-min cite{background-color:#8c8c8c}.theme-pink .layui-layer.layui-layer-admin .layui-layer-btn a{height:32px;line-height:32px;border-radius:4px;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-pink .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#fb7299;background-color:#fb7299}.theme-pink .more-theme-item:hover,.theme-pink .more-theme-item.active{border-color:#fb7299}.theme-pink .btn-circle{background:#fb7299}.theme-pink .ball-loader>span,.theme-pink .signal-loader>span{background-color:#fb7299}.theme-pink .text-primary,.theme-pink .layui-link{color:#fb7299!important}.theme-pink .layui-card{border-radius:4px;box-shadow:none}.theme-pink .layui-btn{height:36px;line-height:36px;border-radius:4px;background-color:#fb7299;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-pink .layui-btn-lg{height:42px;line-height:42px}.theme-pink .layui-btn-sm{height:28px;line-height:28px}.theme-pink .layui-btn-xs{height:22px;line-height:22px}.theme-pink .layui-input,.theme-pink .layui-select,.theme-pink .layui-textarea,.theme-pink xm-select{height:36px;border-radius:4px}.theme-pink .layui-input:focus,.theme-pink .layui-textarea:focus,.theme-pink xm-select:hover{border-color:#fb7299!important}.theme-pink .layui-form-label,.theme-pink .layui-form-mid{padding-top:8px;padding-bottom:8px}.theme-pink .layui-input-block{min-height:36px}.theme-pink .layui-form-radio{margin-top:4px}.theme-pink .layui-form-onswitch{border-color:#fb7299;background-color:#fb7299}.theme-pink .layui-form-radio>i:hover,.theme-pink .layui-form-radioed>i,.theme-pink .layui-form-checked i,.theme-pink .layui-form-checked:hover i{color:#fb7299}.theme-pink .layui-form-checked[lay-skin=primary] i,.theme-pink .layui-form-checked span,.theme-pink .layui-form-checked:hover span{border-color:#fb7299!important;background-color:#fb7299}.theme-pink .layui-form-checked[lay-skin=primary] i:hover,.theme-pink .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#fb7299!important}.theme-pink .layui-form-select dl dd.layui-this{background-color:#fb7299}.theme-pink .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#fb7299}.theme-pink .layui-laypage input:focus,.theme-pink .layui-laypage select:focus{border-color:#fb7299!important}.theme-pink .layui-laypage a:hover{color:#fb7299}.theme-pink .layui-tab-brief>.layui-tab-title .layui-this{color:#fb7299}.theme-pink .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-pink .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#fb7299!important}.theme-pink .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#fb7299;color:#fb7299}.theme-pink .layui-breadcrumb a:hover{color:#fb7299!important}.theme-pink .layui-laydate-footer span:hover,.theme-pink .layui-laydate-header i:hover,.theme-pink .layui-laydate-header span:hover{color:#fb7299}.theme-pink .layui-laydate .layui-this{background-color:#fb7299!important}.theme-pink .layui-laydate-content td.laydate-selected{background-color:#fff1f5}.theme-pink .laydate-selected:hover{background-color:#fff1f5!important}.theme-pink .layui-timeline-axis{color:#fb7299}.theme-pink .layui-transfer-active .layui-btn{background-color:#fb7299!important;border-color:#fb7299!important}.theme-pink .layui-progress-bar{background-color:#fb7299}.theme-pink .layui-slider-bar{background-color:#fb7299!important}.theme-pink .layui-slider-wrap-btn{border-color:#fb7299!important}.theme-pink .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#fb7299}.theme-pink .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-pink .layui-elem-quote{border-color:#fb7299}.theme-pink .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-pink .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#fb7299}.theme-pink .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#fdb8cc}.theme-pink .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#fb7299}.theme-pink .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#fdb8cc!important}.theme-pink .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#fb7299!important}.theme-pink .ew-cascader-dropdown-list-item.active,.theme-pink .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#fb7299}.theme-pink div.tagsinput span.tag{background:#fb7299}.theme-pink xm-select .xm-body .xm-option .xm-option-icon{border-color:#fb7299!important}.theme-pink xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-pink xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-pink .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#fb7299!important}.theme-pink xm-select .xm-label .xm-label-block,.theme-pink xm-select .xm-body .xm-option.hide-icon.selected{background-color:#fb7299!important}.theme-pink .city-select a.active{color:#fff!important;background-color:#fb7299!important}.theme-pink .city-select a:hover,.theme-pink .city-select a:focus{background-color:#fff1f5;color:#fb7299}.theme-pink .city-picker-span>.title>span:hover{background-color:#fff1f5}.theme-pink .city-select-tab>a.active{color:#fb7299}.theme-colorful .layui-layout-admin .layui-header .layui-logo{color:#262626;background-color:transparent;box-shadow:2px 8px 8px 0 rgba(29,35,41,.05)}.theme-colorful .layui-layout-admin .layui-header{box-shadow:0 1px 4px rgba(0,21,41,.08)}.theme-colorful .layui-layout-admin .layui-header .layui-nav .layui-this:after,.theme-colorful .layui-layout-admin .layui-header .layui-nav-bar{background-color:#2d8cf0}.theme-colorful .layui-layout-admin .layui-side{background-color:#fff;box-shadow:2px 8px 8px 0 rgba(29,35,41,.05)}.theme-colorful .layui-side .layui-nav .layui-nav-item a{color:#595959}.theme-colorful .layui-side .layui-nav .layui-nav-item a:hover{color:#2d8cf0}.theme-colorful .layui-side .layui-nav-itemed>a,.theme-colorful .layui-side .layui-nav-tree .layui-nav-title a,.theme-colorful .layui-side .layui-nav-tree .layui-nav-title a:hover{color:#595959!important}.theme-colorful .layui-side .layui-nav-itemed>a:hover{color:#2d8cf0!important}.theme-colorful .layui-side .layui-nav-tree .layui-nav-child dd.layui-this a,.theme-colorful .layui-side .layui-nav-tree .layui-this>a,.theme-colorful .layui-side .layui-nav-tree .layui-this>a:hover{color:#2d8cf0;background:#f0faff;border-right:2px solid #2d8cf0}.theme-colorful .layui-side .layui-nav-tree .layui-nav-item .layui-nav-child{background-color:transparent!important}.theme-colorful .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child:before{background:#fff!important}@media screen and (min-width:769px){.theme-colorful .layui-layout-admin.admin-nav-mini .layui-side .layui-nav li.layui-nav-itemed>a{background:#f0faff;color:#2d8cf0!important}}.theme-colorful .layui-nav-tree>.layui-nav-item>a:before{display:none}.theme-colorful .layui-side .layui-nav .layui-nav-more{border-color:rgba(89,89,89,.7) transparent transparent}.theme-colorful .layui-side .layui-nav .layui-nav-mored,.theme-colorful .layui-side .layui-nav-itemed>a .layui-nav-more{border-color:transparent transparent rgba(89,89,89,.7)}.theme-colorful .layui-side .layui-nav-tree.arrow3 .layui-nav-itemed>a>.layui-nav-more:before{background-color:rgba(89,89,89,.7)}@media screen and (min-width:769px){.theme-colorful .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover>.layui-nav-child>dd>a .layui-nav-more{border-color:transparent transparent transparent rgba(89,89,89,.7)}}.theme-colorful .layui-side .layui-nav .layui-nav-item a cite{vertical-align:middle}.theme-colorful .layui-side .layui-nav-item>a>.layui-icon{color:#fff;width:28px;height:28px;font-size:12px!important;line-height:28px;text-align:center;border-radius:50%;display:inline-block;vertical-align:middle;background-color:#61b2fc}.theme-colorful .layui-side .layui-nav-item:nth-child(even)>a>.layui-icon{background-color:#7dd733}.theme-colorful .layui-side .layui-nav-item:nth-child(3)>a>.layui-icon{background-color:#32a2d4}.theme-colorful .layui-side .layui-nav-item:nth-child(4)>a>.layui-icon{background-color:#2bccce}.theme-colorful .layui-side .layui-nav-item:nth-child(5)>a>.layui-icon{background-color:#7383cf}@media screen and (min-width:768px){.theme-colorful .admin-nav-mini .layui-side .layui-nav-item>a{padding-left:16px}}.theme-colorful .layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child a{padding-left:63px}.theme-colorful .layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child a{padding-left:83px}.theme-colorful .layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left:103px}.theme-colorful .layui-layout-admin .layui-side .layui-nav .layui-nav-item .layui-nav-child .layui-nav-child .layui-nav-child .layui-nav-child a{padding-left:123px}.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title{top:8px;right:8px;height:32px;line-height:32px;box-sizing:border-box;background-color:transparent;box-shadow:-4px 4px 0 #f5f7f9;padding-right:70px}.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li{border:0;margin-right:6px;border-radius:4px;background-color:#fff;line-height:32px;height:32px}.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this{color:#2d8cf0;background-color:#fff}.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li:hover{background-color:#fff}.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li.layui-this:after{display:none}.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close,.theme-colorful .layui-layout-admin .layui-body>.layui-tab>.layui-tab-title li .layui-tab-close:hover{top:8px;color:#8c8c8c;background-color:transparent}.theme-colorful .layui-layout-admin .layui-body .admin-tabs-control,.theme-colorful .layui-layout-admin .layui-body .admin-tabs-control:hover{top:8px;height:32px;line-height:32px;background-color:#f5f7f9;border:0}.theme-colorful .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-down{border-radius:4px;background-color:#fff;width:32px;right:8px}.theme-colorful .admin-tabs-control>.layui-nav .layui-nav-item{line-height:32px}.theme-colorful .admin-tabs-control>.layui-nav .layui-nav-item>a{height:32px;width:32px;padding:0}.theme-colorful .admin-tabs-control>.layui-nav .layui-nav-child{top:36px;border:0;border-radius:4px;box-shadow:0 1px 6px rgba(0,0,0,.2)}.theme-colorful .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-prev:before{content:"\e603"}.theme-colorful .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-next:before{content:"\e602"}.theme-colorful .layui-body-header-title{border-left-color:#2d8cf0}.theme-colorful .layui-body-header{box-shadow:0 1px 4px rgba(0,21,41,.08)}.theme-colorful .layui-layer.layui-layer-admin{border-radius:4px}.theme-colorful .layui-layer.layui-layer-admin .layui-layer-title{color:#262626;font-size:16px;padding-left:23px;background-color:#fff;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom:1px solid #f1f1f1}.theme-colorful .layui-layer.layui-layer-admin .layui-layer-setwin a{color:#8c8c8c;font-weight:600}.theme-colorful .layui-layer.layui-layer-admin .layui-layer-setwin .layui-layer-min cite{background-color:#8c8c8c}.theme-colorful .layui-layer.layui-layer-admin .layui-layer-btn a{height:32px;line-height:32px;border-radius:4px;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-colorful .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0{border-color:#2d8cf0;background-color:#2d8cf0}.theme-colorful .more-theme-item:hover,.theme-colorful .more-theme-item.active{border-color:#2d8cf0}.theme-colorful .btn-circle{background:#2d8cf0}.theme-colorful .ball-loader>span,.theme-colorful .signal-loader>span{background-color:#2d8cf0}.theme-colorful .text-primary,.theme-colorful .layui-link{color:#2d8cf0!important}.theme-colorful .layui-card{border-radius:4px;box-shadow:none}.theme-colorful .layui-btn{height:36px;line-height:36px;border-radius:4px;background-color:#2d8cf0;box-shadow:0 1px 0 rgba(0,0,0,.03)}.theme-colorful .layui-btn-lg{height:42px;line-height:42px}.theme-colorful .layui-btn-sm{height:28px;line-height:28px}.theme-colorful .layui-btn-xs{height:22px;line-height:22px}.theme-colorful .layui-input,.theme-colorful .layui-select,.theme-colorful .layui-textarea,.theme-colorful xm-select{height:36px;border-radius:4px}.theme-colorful .layui-input:focus,.theme-colorful .layui-textarea:focus,.theme-colorful xm-select:hover{border-color:#2d8cf0!important}.theme-colorful .layui-form-label,.theme-colorful .layui-form-mid{padding-top:8px;padding-bottom:8px}.theme-colorful .layui-input-block{min-height:36px}.theme-colorful .layui-form-radio{margin-top:4px}.theme-colorful .layui-form-onswitch{border-color:#2d8cf0;background-color:#2d8cf0}.theme-colorful .layui-form-radio>i:hover,.theme-colorful .layui-form-radioed>i,.theme-colorful .layui-form-checked i,.theme-colorful .layui-form-checked:hover i{color:#2d8cf0}.theme-colorful .layui-form-checked[lay-skin=primary] i,.theme-colorful .layui-form-checked span,.theme-colorful .layui-form-checked:hover span{border-color:#2d8cf0!important;background-color:#2d8cf0}.theme-colorful .layui-form-checkbox[lay-skin=primary] i:hover,.theme-colorful .layui-form-checkbox[lay-skin=primary]:hover i{border-color:#2d8cf0}.theme-colorful .layui-form-select dl dd.layui-this{background-color:#2d8cf0}.theme-colorful .layui-laypage .layui-laypage-curr .layui-laypage-em{background-color:#2d8cf0}.theme-colorful .layui-laypage input:focus,.theme-colorful .layui-laypage select:focus{border-color:#2d8cf0!important}.theme-colorful .layui-laypage a:hover{color:#2d8cf0}.theme-colorful .layui-tab-brief>.layui-tab-title .layui-this{color:#2d8cf0}.theme-colorful .layui-tab-brief>.layui-tab-more li.layui-this:after,.theme-colorful .layui-tab-brief>.layui-tab-title .layui-this:after{border-color:#2d8cf0!important}.theme-colorful .layui-tab.layui-tab-vertical>.layui-tab-title>li.layui-this{border-color:#2d8cf0;color:#2d8cf0}.theme-colorful .layui-breadcrumb a:hover{color:#2d8cf0!important}.theme-colorful .layui-laydate-footer span:hover,.theme-colorful .layui-laydate-header i:hover,.theme-colorful .layui-laydate-header span:hover{color:#2d8cf0}.theme-colorful .layui-laydate .layui-this{background-color:#2d8cf0!important}.theme-colorful .layui-laydate-content td.laydate-selected{background-color:rgba(45,140,240,.1)}.theme-colorful .laydate-selected:hover{background-color:rgba(45,140,240,.1)!important}.theme-colorful .layui-timeline-axis{color:#2d8cf0}.theme-colorful .layui-transfer-active .layui-btn{background-color:#2d8cf0!important;border-color:#2d8cf0!important}.theme-colorful .layui-progress-bar{background-color:#2d8cf0}.theme-colorful .layui-slider-bar{background-color:#2d8cf0!important}.theme-colorful .layui-slider-wrap-btn{border-color:#2d8cf0!important}.theme-colorful .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon{color:#2d8cf0}.theme-colorful .layui-tab.layui-steps>.layui-tab-title>li>.layui-icon.layui-icon-ok,.theme-colorful .layui-elem-quote{border-color:#2d8cf0}.theme-colorful .layui-tab.layui-steps>.layui-tab-title>li:before,.theme-colorful .layui-tab.layui-steps>.layui-tab-title>li.layui-this>.layui-icon.layui-icon-ok{background-color:#2d8cf0}.theme-colorful .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li{background-color:#96c6f8}.theme-colorful .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this{background-color:#2d8cf0}.theme-colorful .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li:after{border-left-color:#96c6f8!important}.theme-colorful .layui-tab.layui-steps.layui-steps-simple>.layui-tab-title>li.layui-this+li:after{border-left-color:#2d8cf0!important}.theme-colorful .ew-cascader-dropdown-list-item.active,.theme-colorful .ew-cascader-dropdown-list-item.active .ew-icon-right{color:#2d8cf0}.theme-colorful div.tagsinput span.tag{background:#2d8cf0}.theme-colorful xm-select .xm-body .xm-option .xm-option-icon{border-color:#2d8cf0!important}.theme-colorful xm-select .xm-body .xm-option.selected .xm-option-icon,.theme-colorful xm-select>.xm-body .xm-toolbar .toolbar-tag:hover,.theme-colorful .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content{color:#2d8cf0!important}.theme-colorful xm-select .xm-label .xm-label-block,.theme-colorful xm-select .xm-body .xm-option.hide-icon.selected{background-color:#2d8cf0!important}.theme-colorful .city-select a.active{color:#fff!important;background-color:#2d8cf0!important}.theme-colorful .city-select a:hover,.theme-colorful .city-select a:focus{background-color:#f0faff;color:#2d8cf0}.theme-colorful .city-picker-span>.title>span:hover{background-color:#f0faff}.theme-colorful .city-select-tab>a.active{color:#2d8cf0}
/** ---------------------------theme-my主题start----------------------------------- */
/* logo */
.theme-my .layui-layout-admin .layui-header .layui-logo {
    color: #dddddd;
    background-color: #191a23;
}
/* header */
.theme-my .layui-layout-admin .layui-header {
    background-color: #191a23;
}
.theme-my .layui-layout-admin .layui-header a {
    color: #dddddd;
}
.theme-my .layui-layout-admin .layui-header a:hover {
    color: #dddddd;
}
.theme-my .layui-layout-admin .layui-header .layui-nav-child a {
    color: #595959;
}
.theme-my .layui-layout-admin .layui-header .layui-nav .layui-nav-more {
    border-color: #dddddd transparent transparent;
}
.theme-my .layui-layout-admin .layui-header .layui-nav .layui-nav-mored {
    border-color: transparent transparent #dddddd;
}
.theme-my .layui-layout-admin .layui-header .layui-nav .layui-this:after,
.theme-my .layui-layout-admin .layui-header .layui-nav-bar {
    background-color: #191a23;
}
/* side */
.theme-my .layui-layout-admin .layui-side {
    background-color: #191a23;
}
.theme-my .layui-nav-tree .layui-nav-child dd.layui-this a,
.theme-my .layui-nav-tree .layui-this > a,
.theme-my .layui-nav-tree .layui-this > a:hover {
    background-color: #009688;
}
.theme-my .layui-nav-tree > .layui-nav-item > a:before {
    background-color: #009688;
}
.theme-my .layui-layout-admin.admin-nav-mini .layui-side .layui-nav .admin-nav-hover > .layui-nav-child:before {
    background: #191a23 !important;
}
/* body tab */
.theme-my .layui-layout-admin .layui-body > .layui-tab > .layui-tab-title {
    top: 8px;
    right: 8px;
    height: 32px;
    line-height: 32px;
    box-sizing: border-box;
    background-color: transparent;
    box-shadow: -4px 4px 0 #f5f7f9;
    padding-right: 70px;
}
.theme-my .layui-layout-admin .layui-body > .layui-tab > .layui-tab-content {
    top: 40px;
}
.theme-my .layui-layout-admin .layui-body > .layui-tab > .layui-tab-title li {
    border: none;
    margin-right: 6px;
    border-radius: 4px;
    background-color: #fff;
    line-height: 32px;
    height: 32px;
}
.theme-my .layui-layout-admin .layui-body > .layui-tab > .layui-tab-title li.layui-this {
    color: #2d8cf0;
    background-color: #fff;
}
.theme-my .layui-layout-admin .layui-body > .layui-tab > .layui-tab-title li:hover {
    background-color: #fff;
}
.theme-my .layui-layout-admin .layui-body > .layui-tab > .layui-tab-title li.layui-this:after {
    display: none;
}
.theme-my .layui-layout-admin .layui-body > .layui-tab > .layui-tab-title li .layui-tab-close,
.theme-my .layui-layout-admin .layui-body > .layui-tab > .layui-tab-title li .layui-tab-close:hover {
    top: 8px;
    color: #8c8c8c;
    background-color: transparent;
}
.theme-my .layui-layout-admin .layui-body .admin-tabs-control,
.theme-my .layui-layout-admin .layui-body .admin-tabs-control:hover {
    top: 8px;
    height: 32px;
    line-height: 32px;
    background-color: #f5f7f9;
    border: none;
}
.theme-my .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-down {
    border-radius: 4px;
    background-color: #fff;
    width: 32px;
    right: 8px;
}
.theme-my .admin-tabs-control > .layui-nav .layui-nav-item {
    line-height: 32px;
}
.theme-my .admin-tabs-control > .layui-nav .layui-nav-item > a {
    height: 32px;
    width: 32px;
    padding: 0;
}
.theme-my .admin-tabs-control > .layui-nav .layui-nav-child {
    top: 36px;
    border: none;
    border-radius: 4px;
    box-shadow: 0 1px 6px rgba(0, 0, 0, .2);
}
.theme-my .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-prev:before {
    content: "\e603";
}
.theme-my .layui-layout-admin .layui-body .admin-tabs-control.layui-icon-next:before {
    content: "\e602";
}
/* body title */
.theme-my .layui-body-header-title {
    border-left-color: #009688;
}
/* admin dialog */
.theme-my .layui-layer.layui-layer-admin .layui-layer-title {
    color: #ffffff;
    background-color: #191a23;
    border-top-left-radius: 4px;
    border-top-right-radius: 4px;
}
.theme-my .layui-layer.layui-layer-admin .layui-layer-btn .layui-layer-btn0 {
    border-color: #009688;
    background-color: #009688;
}
.theme-my .layui-layer.layui-layer-admin .layui-layer-btn a {
    box-shadow: 0 1px 0 rgba(0, 0, 0, .03);
}
.theme-my .layui-layer.layui-layer-admin {
    border-radius: 4px;
}
/* other */
.theme-my .more-theme-item:hover,
.theme-my .more-theme-item.active {
    border-color: #009688;
}
.theme-my .btn-circle {
    background: #009688;
}
.theme-my .ball-loader > span,
.theme-my .signal-loader > span {
    background-color: #009688;
}
.theme-my .text-primary,
.theme-my .layui-link {
    color: #009688 !important;;
}
.theme-my .layui-card {
    border-radius: 4px;
    box-shadow: none;
}
.theme-my .layui-fluid {
    padding-top: 10px;
}
/* button */
.theme-my .layui-btn {
    background-color: #009688;
    box-shadow: 0 1px 0 rgba(0, 0, 0, .03);
}
/* input */
.theme-my .layui-input:focus,
.theme-my .layui-textarea:focus,
.theme-my xm-select:hover {
    border-color: #009688 !important;
}
/* switch */
.theme-my .layui-form-onswitch {
    border-color: #009688;
    background-color: #009688;
}
/* radio */
.theme-my .layui-form-radio > i:hover,
.theme-my .layui-form-radioed > i,
.theme-my .layui-form-checked i,
.theme-my .layui-form-checked:hover i {
    color: #009688;
}
/* checkbox */
.theme-my .layui-form-checked[lay-skin=primary] i,
.theme-my .layui-form-checked span,
.theme-my .layui-form-checked:hover span {
    border-color: #009688 !important;
    background-color: #009688;
}
.theme-my .layui-form-checkbox[lay-skin=primary] i:hover,
.theme-my .layui-form-checkbox[lay-skin=primary]:hover i {
    border-color: #009688;
}
/* select */
.theme-my .layui-form-select dl dd.layui-this {
    background-color: #009688;
}
/* laypage */
.theme-my .layui-laypage .layui-laypage-curr .layui-laypage-em {
    background-color: #009688;
}
.theme-my .layui-laypage input:focus,
.theme-my select:focus {
    border-color: #009688 !important;
}
.theme-my .layui-laypage a:hover {
    color: #009688;
}
/* tab */
.theme-my .layui-tab-brief > .layui-tab-title .layui-this {
    color: #009688;
}
.theme-my .layui-tab-brief > .layui-tab-more li.layui-this:after,
.theme-my .layui-tab-brief > .layui-tab-title .layui-this:after {
    border-color: #009688 !important;
}
.theme-my .layui-tab.layui-tab-vertical > .layui-tab-title > li.layui-this {
    border-color: #009688;
    color: #009688;
}
/* breadcrumb */
.theme-my .layui-breadcrumb a:hover {
    color: #009688 !important;
}
/* laydate */
.theme-my .layui-laydate-footer span:hover,
.theme-my .layui-laydate-header i:hover,
.theme-my .layui-laydate-header span:hover {
    color: #009688;
}
.theme-my .layui-laydate .layui-this {
    background-color: #009688 !important;
}
.theme-my .layui-laydate-content td.laydate-selected {
    background-color: rgba(0,150,136,.1);
}
.theme-my .laydate-selected:hover {
    background-color: rgba(0,150,136,.1) !important;
}
/* timeline */
.theme-my .layui-timeline-axis {
    color: #009688;
}
/* transfer */
.theme-my .layui-transfer-active .layui-btn {
    background-color: #009688 !important;
    border-color: #009688 !important;
}
/* progress-bar */
.theme-my .layui-progress-bar {
    background-color: #009688;
}
/* slider */
.theme-my .layui-slider-bar {
    background-color: #009688 !important;
}
.theme-colorful .layui-slider-wrap-btn {
    border-color: #009688 !important;
}
/* steps */
.theme-my .layui-tab.layui-steps > .layui-tab-title > li > .layui-icon {
    color: #009688;
}
.theme-my .layui-tab.layui-steps > .layui-tab-title > li > .layui-icon.layui-icon-ok,
.theme-my .layui-elem-quote {
    border-color: #009688;
}
.theme-my .layui-tab.layui-steps > .layui-tab-title > li:before,
.theme-my .layui-tab.layui-steps > .layui-tab-title > li.layui-this > .layui-icon.layui-icon-ok {
    background-color: #009688;
}
.theme-my .layui-tab.layui-steps.layui-steps-simple > .layui-tab-title > li {
    background-color: rgba(0,150,136,.5);
}
.theme-my .layui-tab.layui-steps.layui-steps-simple > .layui-tab-title > li.layui-this {
    background-color: #009688;
}
.theme-my .layui-tab.layui-steps.layui-steps-simple > .layui-tab-title > li:after {
    border-left-color: rgba(0,150,136,.5) !important;
}
.theme-my .layui-tab.layui-steps.layui-steps-simple > .layui-tab-title > li.layui-this + li:after {
    border-left-color: #009688 !important;
}
/* xmSelect */
.theme-my xm-select .xm-body .xm-option .xm-option-icon {
    border-color: #009688 !important;
}
.theme-my xm-select .xm-body .xm-option.selected .xm-option-icon,
.theme-my xm-select > .xm-body .xm-toolbar .toolbar-tag:hover,
.theme-my .ew-xmselect-tree xm-select .xm-body .xm-option.selected .xm-option-content {
    color: #009688 !important;
}
.theme-my xm-select .xm-label .xm-label-block,
.theme-my xm-select > .xm-body .xm-option.hide-icon.selected {
    background-color: #009688 !important;
}
/* tagsinput */
.theme-my div.tagsinput span.tag {
    background: #009688;
}
/* cascader */
.theme-my .ew-cascader-dropdown-list-item.active,
.theme-my .ew-cascader-dropdown-list-item.active .ew-icon-right {
    color: #009688;
}
/* city-select */
.theme-my .city-select a.active {
    color: #fff !important;
    background-color: #009688 !important;
}
.theme-my .city-select a:hover,
.theme-my .city-select a:focus {
    background-color: rgba(0,150,136,.07);
    color: #009688;
}
.theme-my .city-picker-span > .title > span:hover {
    background-color: rgba(0,150,136,.07);
}
.theme-my .city-select-tab > a.active {
    color: #009688;
}
.theme-my .layui-layer.layui-layer-admin {
    border-radius: 4px;
}
.theme-my .layui-btn {
    border-radius: 4px;
}
/** ---------------------------theme-my主题end----------------------------------- */
src/main/webapp/static/css/bg.css
New file
@@ -0,0 +1,175 @@
* {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
    font-weight: 300;
}
.wrapper {
    background: #50a3a2;
    background: -webkit-linear-gradient(top left, #50a3a2 0%, #53e3a6 100%);
    background: linear-gradient(to bottom right, #50a3a2 0%, #53e3a6 100%);
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    overflow: hidden;
    z-index:998;
}
.wrapper.form-success .container h1 {
    -webkit-transform: translateY(85px);
    transform: translateY(85px);
}
/*.container h1 {*/
    /*font-size: 40px;*/
    /*-webkit-transition-duration: 1s;*/
    /*transition-duration: 1s;*/
    /*-webkit-transition-timing-function: ease-in-put;*/
    /*transition-timing-function: ease-in-put;*/
    /*font-weight: 200;*/
/*}*/
.bg-bubbles {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 1;
    background: url(../../static/image/bg.jpg);
}
.bg-bubbles li {
    position: absolute;
    list-style: none;
    display: block;
    width: 40px;
    height: 40px;
    background-color: rgba(255, 255, 255, 0.15);
    bottom: -160px;
    -webkit-animation: square 35s infinite;
    animation: square 35s infinite;
    -webkit-transition-timing-function: linear;
    transition-timing-function: linear;
}
.bg-bubbles li:nth-child(1) {
    left: 10%;
    background: rgba(135, 208, 104, 0.53);
  }
  .bg-bubbles li:nth-child(2) {
    left: 20%;
    width: 80px;
    height: 80px;
    animation-duration: 15s;
    background: rgba(91, 192, 222, 0.5);
  }
  .bg-bubbles li:nth-child(3) {
    left: 25%;
    background: rgba(238, 238, 238, 0.81);
  }
  .bg-bubbles li:nth-child(4) {
    left: 40%;
    width: 60px;
    height: 60px;
    animation-duration: 20s;
    background: rgba(255, 170, 0, 0.7);
  }
  .bg-bubbles li:nth-child(7) {
    left: 32%;
    width: 160px;
    height: 160px;
    animation-delay: 3s;
    background: #afdddf;
  }
  .bg-bubbles li:nth-child(9) {
    left: 25%;
    width: 20px;
    height: 20px;
    animation-delay: 1s;
    animation-duration: 10s;
    background: rgba(239, 22, 15, 0.67);
  }
  .bg-bubbles li:nth-child(11) {
    left: 22%;
    width: 60px;
    height: 60px;
    animation-delay: 3s;
    background: rgba(239, 22, 15, 0.5);
  }
  .bg-bubbles li:nth-child(12) {
    left: 5%;
    width: 20px;
    height: 20px;
    animation-delay: 3s;
    animation-duration: 10s;
    background: rgba(245, 183, 59, 0.76);
  }
  .bg-bubbles li:nth-child(5) {
    left: 70%;
    background: rgba(255, 170, 0, 0.8);
  }
  .bg-bubbles li:nth-child(6) {
    left: 80%;
    width: 120px;
    height: 120px;
    background: rgba(245, 183, 59, 0.76);
  }
  .bg-bubbles li:nth-child(8) {
    left: 55%;
    width: 20px;
    height: 20px;
    animation-delay: 2s;
    animation-duration: 10s;
    background: rgba(135, 208, 104, 0.7);
  }
  .bg-bubbles li:nth-child(10) {
    left: 90%;
    width: 160px;
    height: 160px;
    animation-delay: 3s;
    background: rgba(238, 238, 238, 0.5);
  }
  .bg-bubbles li:nth-child(13) {
    left: 85%;
    width: 50px;
    height: 50px;
    animation-delay: 5s;
    animation-duration: 10s;
    background: rgba(239, 22, 15, 0.6);
  }
  .bg-bubbles li:nth-child(14) {
    left: 70%;
    width: 30px;
    height: 30px;
    animation-delay: 6s;
    background: #afdddf;
  }
@-webkit-keyframes square {
    0% {
        -webkit-transform: translateY(0);
        transform: translateY(0);
    }
    100% {
       /*-1080px代表从下向上移动多少   600deg代表从下向上移动过程中旋转600度*/
        -webkit-transform: translateY(-1080px) rotate(600deg);
        transform: translateY(-1080px) rotate(600deg);
    }
}
@keyframes square {
    0% {
        -webkit-transform: translateY(0);
        transform: translateY(0);
    }
    100% {
        -webkit-transform: translateY(-1080px) rotate(600deg);
        transform: translateY(-1080px) rotate(600deg);
    }
}
src/main/webapp/static/css/cool.css
New file
@@ -0,0 +1,48 @@
/*自动补全*/
.cool-auto-complete .layui-unselect.layui-form-select {
    display: none;
}
.cool-auto-complete-div {
    cursor: pointer;
}
.cool-auto-complete-window {
    width: 100%;
    display: none;
    position: absolute;
    line-height: normal;
    z-index: 999;
}
.cool-auto-complete-window-input {
    height: 28px;
    box-sizing: border-box;
    border: 1px solid #dedede;
    width: 100%;
}
.cool-auto-complete-window-input:focus {
    border-color: #007bff !important;
}
.cool-auto-complete-window-select {
    width: 100%;
    border: 1px solid #dedede;
    margin: 0;
    height: 142px;
}
.cool-auto-complete-window-select option:hover {
    background-color: #f1f1f1;
}
.cool-auto-complete-window-select option{
    padding: 3px 2px;
}
.cool-auto-complete-window-select option:first-child{
    color:#aaaaaa;
}
/*.layui-table-grid-down {*/
/*    display: none;*/
/*}*/
src/main/webapp/static/css/loader.css
New file
@@ -0,0 +1,59 @@
/**初始化加载层*/
.layuimini-loader {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: #ffffff;
    z-index: 999999;
}
.layuimini-loader .layuimini-loader-inner {
    display: block;
    position: relative;
    left: 50%;
    top: 50%;
    width: 150px;
    height: 150px;
    margin: -75px 0 0 -75px;
    border-radius: 50%;
    border: 3px solid transparent;
    border-top-color: #1E9FFF;
    animation: spin 2s linear infinite;
}
.layuimini-loader .layuimini-loader-inner:before {
    content: "";
    position: absolute;
    top: 5px;
    left: 5px;
    right: 5px;
    bottom: 5px;
    border-radius: 50%;
    border: 3px solid transparent;
    border-top-color: #1E9FFF;
    animation: spin 3s linear infinite;
}
.layuimini-loader .layuimini-loader-inner:after {
    content: "";
    position: absolute;
    top: 15px;
    left: 15px;
    right: 15px;
    bottom: 15px;
    border-radius: 50%;
    border: 3px solid transparent;
    border-top-color: #1E9FFF;
    animation: spin 1.5s linear infinite;
}
@keyframes spin {
    0% {
        transform: rotate(0deg);
    }
    to {
        transform: rotate(1turn);
    }
}
src/main/webapp/static/css/login.css
New file
@@ -0,0 +1,473 @@
/*//////////////////////////////////////////////////////////////////
[ FONT ]*/
@font-face {
  font-family: Montserrat-Regular;
  src: url('font/montserrat/Montserrat-Regular.ttf');
}
@font-face {
  font-family: Montserrat-ExtraBold;
  src: url('font/montserrat/Montserrat-ExtraBold.ttf');
}
@font-face {
  font-family: Montserrat-Bold;
  src: url('font/montserrat/Montserrat-Bold.ttf');
}
/*//////////////////////////////////////////////////////////////////
[ RESTYLE TAG ]*/
/*---------------------------------------------*/
input {
    outline: none;
    border: none;
}
input:focus::-webkit-input-placeholder { color:transparent; }
input:focus:-moz-placeholder { color:transparent; }
input:focus::-moz-placeholder { color:transparent; }
input:focus:-ms-input-placeholder { color:transparent; }
input::-webkit-input-placeholder { color: #999999; }
input:-moz-placeholder { color: #999999; }
input::-moz-placeholder { color: #999999; }
input:-ms-input-placeholder { color: #999999; }
/*---------------------------------------------*/
button {
    outline: none !important;
    border: none;
    background: transparent;
}
button:hover {
    cursor: pointer;
}
/*//////////////////////////////////////////////////////////////////
[ Utility ]*/
.txt1 {
  font-family: Montserrat-Regular;
  font-size: 16px;
  color: #cccccc;
  line-height: 1.4;
}
.bo1 {
  border-bottom: 1px solid #999999;
}
.hov1:hover {
  border-color: #d33f8d;
}
/*//////////////////////////////////////////////////////////////////
[ login ]*/
.limiter {
  width: 100%;
  margin: 0 auto;
}
.container-login100 {
  width: 100%;
  min-height: 100vh;
  display: -webkit-box;
  display: -webkit-flex;
  display: -moz-box;
  display: -ms-flexbox;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  padding: 15px;
  background-repeat: no-repeat;
  background-size: cover;
  background-position: center;
  position: relative;
  z-index: 1;
}
.container-login100::before {
  content: "";
  display: block;
  position: absolute;
  z-index: -1;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  background: #005bea;
  background: -webkit-linear-gradient(bottom, #005bea, #00c6fb);
  background: -o-linear-gradient(bottom, #005bea, #00c6fb);
  background: -moz-linear-gradient(bottom, #005bea, #00c6fb);
  background: linear-gradient(bottom, #005bea, #00c6fb);
  opacity: 0.9;
}
.wrap-login100 {
  width: 390px;
  background: transparent;
}
/*------------------------------------------------------------------
[  ]*/
.login100-form {
  width: 100%;
  display: -webkit-box;
  display: -webkit-flex;
  display: -moz-box;
  display: -ms-flexbox;
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;
}
.login100-form-title {
  font-family: "微软雅黑";
  font-size: 48px;
  line-height: 1.2;
  text-align: center;
  font-weight: bold;
  letter-spacing: 10px;
  width: 100%;
  display: block;
  color: #3660c9;
  margin-top: 10px;
  /*margin-bottom: 30px;*/
}
/*---------------------------------------------*/
.login100-form-avatar {
  width: 120px;
  height: 120px;
  border-radius: 50%;
  overflow: hidden;
  margin: 0 auto;
}
.login100-form-avatar img {
  width: 100%;
}
/*---------------------------------------------*/
.wrap-input100 {
  display: inline-block;
  position: relative;
  width: 80%;
  z-index: 1;
  margin-top: 10px;
}
.input100::placeholder {
  font-family: Montserrat-Bold;
  font-size: 15px;
  line-height: 1.2;
  color: #c9c9c9;
}
.input100 {
  font-family: Montserrat-Bold;
  font-size: 15px;
  line-height: 1.2;
  color: #333333;
  box-sizing: border-box;
  display: block;
  width: 100%;
  background: #fff;
  height: 50px;
  border-radius: 25px;
  padding: 0 30px 0 53px;
}
/*------------------------------------------------------------------
[ Focus ]*/
.focus-input100 {
  display: block;
  position: absolute;
  border-radius: 25px;
  bottom: 0;
  left: 0;
  z-index: -1;
  width: 100%;
  height: 100%;
  box-shadow: 0px 0px 0px 0px;
  color: rgba(193, 193, 193, 0.6);
}
.input100:focus + .focus-input100 {
  -webkit-animation: anim-shadow 0.5s ease-in-out forwards;
  animation: anim-shadow 0.5s ease-in-out forwards;
}
@-webkit-keyframes anim-shadow {
  to {
    box-shadow: 0px 0px 80px 30px;
    opacity: 0;
  }
}
@keyframes anim-shadow {
  to {
    box-shadow: 0px 0px 80px 30px;
    opacity: 0;
  }
}
.symbol-input100 {
  font-size: 15px;
  color: #999999;
  display: -webkit-box;
  display: -webkit-flex;
  display: -moz-box;
  display: -ms-flexbox;
  display: flex;
  align-items: center;
  position: absolute;
  border-radius: 25px;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 100%;
  padding-left: 30px;
  pointer-events: none;
  -webkit-transition: all 0.4s;
  -o-transition: all 0.4s;
  -moz-transition: all 0.4s;
  transition: all 0.4s;
}
.input100:focus + .focus-input100 + .symbol-input100 {
  color: #99C1C1C1;
  padding-left: 23px;
}
/*------------------------------------------------------------------
[ Button ]*/
.container-login100-form-btn {
  width: 80%;
  display: -webkit-box;
  display: -webkit-flex;
  display: -moz-box;
  display: -ms-flexbox;
  flex-wrap: wrap;
  justify-content: center;
  display: inline-block;
  margin-top: 15px;
}
.login100-form-btn {
  font-family: Montserrat-Bold;
  font-size: 15px;
  line-height: 1.5;
  color: #e0e0e0;
  width: 100%;
  height: 50px;
  border-radius: 25px;
  background: #333333;
  display: -webkit-box;
  display: -webkit-flex;
  display: -moz-box;
  display: -ms-flexbox;
  display: flex;
  justify-content: center;
  align-items: center;
  padding: 0 25px;
  -webkit-transition: all 0.4s;
  -o-transition: all 0.4s;
  -moz-transition: all 0.4s;
  transition: all 0.4s;
  position: relative;
  z-index: 1;
}
.login100-form-btn::before {
  content: "";
  display: block;
  position: absolute;
  z-index: -1;
  width: 100%;
  height: 100%;
  border-radius: 25px;
  top: 0;
  left: 0;
  background: #005bea;
  background: -webkit-linear-gradient(left, #005bea, #00c6fb);
  background: -o-linear-gradient(left, #005bea, #00c6fb);
  background: -moz-linear-gradient(left, #005bea, #00c6fb);
  background: linear-gradient(left, #005bea, #00c6fb);
  -webkit-transition: all 0.4s;
  -o-transition: all 0.4s;
  -moz-transition: all 0.4s;
  transition: all 0.4s;
  opacity: 0;
}
.login100-form-btn:hover {
  background: transparent;
  color: #fff;
}
.login100-form-btn:hover:before {
  opacity: 1;
}
/*------------------------------------------------------------------
[ Button sign in with ]*/
.btn-face,
.btn-google {
  font-family: Raleway-Bold;
  font-size: 16px;
  line-height: 1.2;
  display: -webkit-box;
  display: -webkit-flex;
  display: -moz-box;
  display: -ms-flexbox;
  display: flex;
  justify-content: center;
  align-items: center;
  width: calc((100% - 10px) / 2);
  height: 40px;
  border-radius: 3px;
  border: 1px solid #e6e6e6;
  background-color: #fff;
  -webkit-transition: all 0.4s;
  -o-transition: all 0.4s;
  -moz-transition: all 0.4s;
  transition: all 0.4s;
}
.btn-face {
  color: #3b5998;
}
.btn-face i {
  font-size: 20px;
  margin-right: 10px;
  padding-bottom: 1px;
}
.btn-google {
  color: #555555;
}
.btn-google img {
  width: 19px;
  margin-right: 10px;
  padding-bottom: 1px;
}
.btn-face:hover,
.btn-google:hover {
  border-color: #d33f8d;
}
/*------------------------------------------------------------------
[ Alert validate ]*/
.validate-input {
  position: relative;
}
.alert-validate::before {
  content: attr(data-validate);
  position: absolute;
  max-width: 70%;
  background-color: white;
  border: 1px solid #c80000;
  border-radius: 14px;
  padding: 4px 25px 4px 10px;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -moz-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  -o-transform: translateY(-50%);
  transform: translateY(-50%);
  right: 8px;
  pointer-events: none;
  font-family: Montserrat-Bold;
  color: #c80000;
  font-size: 13px;
  line-height: 1.4;
  text-align: left;
  visibility: hidden;
  opacity: 0;
  -webkit-transition: opacity 0.4s;
  -o-transition: opacity 0.4s;
  -moz-transition: opacity 0.4s;
  transition: opacity 0.4s;
}
.alert-validate::after {
  content: "\f06a";
  font-family: FontAwesome;
  display: block;
  position: absolute;
  color: #c80000;
  font-size: 15px;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -moz-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  -o-transform: translateY(-50%);
  transform: translateY(-50%);
  right: 13px;
}
.alert-validate:hover:before {
  visibility: visible;
  opacity: 1;
}
@media (max-width: 992px) {
  .alert-validate::before {
    visibility: visible;
    opacity: 1;
  }
}
/*//////////////////////////////////////////////////////////////////
[ responsive ]*/
@media (max-width: 576px) {
  .wrap-login100 {
    padding-top: 80px;
    padding-left: 15px;
    padding-right: 15px;
  }
}
src/main/webapp/static/css/main.min.css
New file
@@ -0,0 +1 @@
@import url(https://fonts.googleapis.com/css?family=Homenaje);@import url(https://fonts.googleapis.com/css?family=Noto+Serif+JP);@-webkit-keyframes animateSsplashStr{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}20%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}30%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes animateSsplashStr{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}20%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}30%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}html{height:100%}body{min-height:100%;font-family:Homenaje,sans-serif;letter-spacing:.15em;background-color:#111}@media all and (min-width:569px) and (max-width:1366px){body{font-size:14px;font-size:.875rem}}@media all and (max-width:568px){body{font-size:12px;font-size:.75rem}}body.is-opened-index{overflow:auto}body.is-picked{cursor:pointer}a{text-decoration:none}::-moz-selection{color:#fff;background:rgba(0,0,0,.5)}::selection{color:#fff;background:rgba(0,0,0,.5)}.l-contents{position:relative;z-index:10}.l-contents.is-fixed{position:fixed;top:0;right:0;left:0}.l-page--white{color:#fff}.l-page--white a{color:#fff}.l-page--white svg{fill:#fff}.l-page--black{color:#222}.l-page--black a{color:#222}.l-page--black svg{fill:#222}.c-btn-circle{width:60px;height:60px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;margin-top:5px;border-radius:50%}.c-btn-circle svg{width:30px;height:30px}.c-btn-circle--white{background-color:#fff}.c-btn-circle--white .path-fill{fill:#222}.c-btn-circle--black{background-color:#222}.c-btn-circle--black .path-fill{fill:#fff}.c-button{height:2em;-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-right:1.25em;padding-left:1.25em;border-radius:1em;border-width:2px;border-style:solid}.c-button--white{border-color:#fff}.c-button--black{border-color:#222}.c-button__icon{display:block;margin-right:.7em}.c-button__icon--back{width:.3em;height:.3em;border-top:2px solid #fff;border-left:2px solid #fff;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.c-button__icon--white{border-color:#fff}.c-button__icon--black{border-color:#222}.c-button__label{font-weight:700}.c-button__label .js-split-str{display:inline-block}.c-button__icon{-webkit-transition-duration:.4s;transition-duration:.4s}.c-button:hover .c-button__icon{-webkit-transform:translateX(-5px) rotate(-45deg);transform:translateX(-5px) rotate(-45deg)}.c-button:hover .c-button__label .js-split-str{-webkit-animation-name:animateSsplashStr;animation-name:animateSsplashStr;-webkit-animation-duration:.6s;animation-duration:.6s}.c-button:hover .c-button__label .js-split-str:nth-of-type(1){-webkit-animation-delay:0s;animation-delay:0s}.c-button:hover .c-button__label .js-split-str:nth-of-type(2){-webkit-animation-delay:20ms;animation-delay:20ms}.c-button:hover .c-button__label .js-split-str:nth-of-type(3){-webkit-animation-delay:40ms;animation-delay:40ms}.c-button:hover .c-button__label .js-split-str:nth-of-type(4){-webkit-animation-delay:60ms;animation-delay:60ms}.c-button:hover .c-button__label .js-split-str:nth-of-type(5){-webkit-animation-delay:80ms;animation-delay:80ms}.c-button:hover .c-button__label .js-split-str:nth-of-type(6){-webkit-animation-delay:.1s;animation-delay:.1s}.c-button:hover .c-button__label .js-split-str:nth-of-type(7){-webkit-animation-delay:.12s;animation-delay:.12s}.c-button:hover .c-button__label .js-split-str:nth-of-type(8){-webkit-animation-delay:.14s;animation-delay:.14s}.c-button:hover .c-button__label .js-split-str:nth-of-type(9){-webkit-animation-delay:.16s;animation-delay:.16s}.c-button:hover .c-button__label .js-split-str:nth-of-type(10){-webkit-animation-delay:.18s;animation-delay:.18s}.c-button:hover .c-button__label .js-split-str:nth-of-type(11){-webkit-animation-delay:.2s;animation-delay:.2s}.c-button:hover .c-button__label .js-split-str:nth-of-type(12){-webkit-animation-delay:.22s;animation-delay:.22s}.c-button:hover .c-button__label .js-split-str:nth-of-type(13){-webkit-animation-delay:.24s;animation-delay:.24s}.c-button:hover .c-button__label .js-split-str:nth-of-type(14){-webkit-animation-delay:.26s;animation-delay:.26s}.c-button:hover .c-button__label .js-split-str:nth-of-type(15){-webkit-animation-delay:.28s;animation-delay:.28s}.c-button:hover .c-button__label .js-split-str:nth-of-type(16){-webkit-animation-delay:.3s;animation-delay:.3s}.c-button:hover .c-button__label .js-split-str:nth-of-type(17){-webkit-animation-delay:.32s;animation-delay:.32s}.c-button:hover .c-button__label .js-split-str:nth-of-type(18){-webkit-animation-delay:.34s;animation-delay:.34s}.c-button:hover .c-button__label .js-split-str:nth-of-type(19){-webkit-animation-delay:.36s;animation-delay:.36s}.c-button:hover .c-button__label .js-split-str:nth-of-type(20){-webkit-animation-delay:.38s;animation-delay:.38s}.c-button:hover .c-button__label .js-split-str:nth-of-type(21){-webkit-animation-delay:.4s;animation-delay:.4s}.c-button:hover .c-button__label .js-split-str:nth-of-type(22){-webkit-animation-delay:.42s;animation-delay:.42s}.c-button:hover .c-button__label .js-split-str:nth-of-type(23){-webkit-animation-delay:.44s;animation-delay:.44s}.c-button:hover .c-button__label .js-split-str:nth-of-type(24){-webkit-animation-delay:.46s;animation-delay:.46s}.c-button:hover .c-button__label .js-split-str:nth-of-type(25){-webkit-animation-delay:.48s;animation-delay:.48s}.c-button:hover .c-button__label .js-split-str:nth-of-type(26){-webkit-animation-delay:.5s;animation-delay:.5s}.c-button:hover .c-button__label .js-split-str:nth-of-type(27){-webkit-animation-delay:.52s;animation-delay:.52s}.c-button:hover .c-button__label .js-split-str:nth-of-type(28){-webkit-animation-delay:.54s;animation-delay:.54s}.c-button:hover .c-button__label .js-split-str:nth-of-type(29){-webkit-animation-delay:.56s;animation-delay:.56s}.c-button:hover .c-button__label .js-split-str:nth-of-type(30){-webkit-animation-delay:.58s;animation-delay:.58s}.c-text-link{display:inline-block;position:relative}.c-text-link__label{display:inline-block;position:relative;z-index:2}.c-text-link__bg{height:2px;display:block;position:absolute;top:50%;right:0;left:0}.c-text-link__bg--white{background-color:#fff}.c-text-link__bg--black{background-color:#222}@-webkit-keyframes openTextLinkBar{0%{-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:left;transform-origin:left}100%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:left;transform-origin:left}}@keyframes openTextLinkBar{0%{-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:left;transform-origin:left}100%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:left;transform-origin:left}}@-webkit-keyframes closeTextLinkBar{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:right;transform-origin:right}100%{-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:right;transform-origin:right}}@keyframes closeTextLinkBar{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:right;transform-origin:right}100%{-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:right;transform-origin:right}}.c-text-link__label{-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-timing-function:cubic-bezier(.075,.82,.165,1);transition-timing-function:cubic-bezier(.075,.82,.165,1)}.c-text-link__bg{-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-animation-name:closeTextLinkBar;animation-name:closeTextLinkBar;-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-timing-function:cubic-bezier(.075,.82,.165,1);animation-timing-function:cubic-bezier(.075,.82,.165,1);-webkit-animation-fill-mode:both;animation-fill-mode:both}.c-text-link:hover .c-text-link__bg{-webkit-animation-name:openTextLinkBar;animation-name:openTextLinkBar}.p-badges{position:fixed;z-index:100;bottom:20px;right:20px}@media all and (max-width:568px){.p-badges{width:90px}}.p-badges img{width:100%}.p-canvas-webgl{position:fixed;z-index:1;top:0;left:0}.p-dummy-scroll{position:relative;z-index:1}.p-hold-button{width:60px;height:60px;opacity:0;position:fixed;z-index:10;pointer-events:none}.p-hold-button.is-pc{opacity:1;top:0;left:0}.p-hold-button.is-smartphone{cursor:pointer;bottom:35px;right:0;left:0;opacity:1;margin-right:auto;margin-left:auto}.p-hold-button__border{-webkit-box-sizing:border-box;box-sizing:border-box;display:block;position:absolute}.p-hold-button__border--out{width:60px;height:60px;top:0;left:0;border:1px solid #fff}.p-hold-button__border--in{width:54px;height:54px;top:3px;left:3px;border:1px solid #fff}.p-hold-button__label{width:100%;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:absolute;top:0;left:0;z-index:2;mix-blend-mode:difference;padding-left:.15em}.p-hold-button__progress{width:54px;height:54px;overflow:hidden;position:absolute;top:3px;left:3px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.p-hold-button__progress-in{width:108px;height:54px;background-color:#fff;-webkit-transform:skewX(-45deg) translateX(50%);transform:skewX(-45deg) translateX(50%);-webkit-transform-origin:right bottom;transform-origin:right bottom}.p-hold-button__label{opacity:0;font-size:14px;font-size:.875rem}.p-hold-button__border{opacity:0;-webkit-transform:rotate(45deg) scale(.6);transform:rotate(45deg) scale(.6)}.p-hold-button.is-enabled{pointer-events:auto}.p-hold-button.is-shown .p-hold-button__label{opacity:1;-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-delay:.3s;transition-delay:.3s;-webkit-transition-property:opacity;transition-property:opacity}.p-hold-button.is-shown .p-hold-button__border{opacity:1;-webkit-transform:rotate(45deg) scale(1);transform:rotate(45deg) scale(1);-webkit-transition-duration:.8s;transition-duration:.8s;-webkit-transition-timing-function:cubic-bezier(.075,.82,.165,1);transition-timing-function:cubic-bezier(.075,.82,.165,1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.p-hold-button.is-shown .p-hold-button__border--out{-webkit-transition-delay:.1s;transition-delay:.1s}.p-hold-button.is-shown .p-hold-button__border--in{-webkit-transition-delay:.2s;transition-delay:.2s}.p-hold-button.is-shown .p-hold-button__progress{opacity:1;-webkit-transform:rotate(45deg) scale(1);transform:rotate(45deg) scale(1);-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-delay:.3s;transition-delay:.3s;-webkit-transition-timing-function:cubic-bezier(.075,.82,.165,1);transition-timing-function:cubic-bezier(.075,.82,.165,1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.p-hold-button.is-hidden .p-hold-button__label{opacity:0;-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-property:opacity;transition-property:opacity}.p-hold-button.is-hidden .p-hold-button__border{opacity:0;-webkit-transform:rotate(45deg) scale(.8);transform:rotate(45deg) scale(.8);-webkit-transition-duration:.8s;transition-duration:.8s;-webkit-transition-timing-function:cubic-bezier(.075,.82,.165,1);transition-timing-function:cubic-bezier(.075,.82,.165,1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.p-hold-button.is-hidden .p-hold-button__progress{opacity:0;-webkit-transform:rotate(45deg) scale(.5);transform:rotate(45deg) scale(.5);-webkit-transition-duration:.8s;transition-duration:.8s;-webkit-transition-timing-function:cubic-bezier(.075,.82,.165,1);transition-timing-function:cubic-bezier(.075,.82,.165,1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.p-hold-button.is-pressed .p-hold-button__border--out{-webkit-transform:rotate(45deg) scale(1.12);transform:rotate(45deg) scale(1.12);-webkit-transition-delay:0s;transition-delay:0s}.p-hold-button.is-released .p-hold-button__border--out{-webkit-transform:rotate(45deg) scale(1);transform:rotate(45deg) scale(1);-webkit-transition-delay:0s;transition-delay:0s}@-webkit-keyframes loopFollow{0%{-webkit-transform:translateY(-100.5%);transform:translateY(-100.5%)}100%{-webkit-transform:translateY(100.5%);transform:translateY(100.5%)}}@keyframes loopFollow{0%{-webkit-transform:translateY(-100.5%);transform:translateY(-100.5%)}100%{-webkit-transform:translateY(100.5%);transform:translateY(100.5%)}}.p-introduction{width:100%;height:100vh;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:1.5;position:relative;z-index:10;color:#fff;text-align:center;letter-spacing:.2em}.p-introduction__wrap{position:absolute;right:0;bottom:0;left:0}.p-introduction__row{opacity:0;-webkit-transform:translateY(-10px);transform:translateY(-10px);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.p-introduction__row.is-shown{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-duration:1s;transition-duration:1s;-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1)}.p-introduction__row.is-shown:nth-of-type(1){-webkit-transition-delay:5s;transition-delay:5s}.p-introduction__row.is-shown:nth-of-type(2){-webkit-transition-delay:5.25s;transition-delay:5.25s}.p-introduction__row.is-shown:nth-of-type(3){-webkit-transition-delay:5.5s;transition-delay:5.5s}.p-introduction__row.is-shown:nth-of-type(4){-webkit-transition-delay:5.75s;transition-delay:5.75s}.p-introduction__row.is-shown:nth-of-type(5){-webkit-transition-delay:6s;transition-delay:6s}.p-introduction__links{margin-top:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.p-introduction__link{width:18px;height:18px;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;opacity:0;-webkit-transform:scale(1.8);transform:scale(1.8);margin:0 12px;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.p-introduction__link svg{width:18px}.p-introduction__link.is-shown{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-duration:1s;transition-duration:1s;-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1)}.p-introduction__link.is-shown:nth-of-type(1){-webkit-transition-delay:5.6s;transition-delay:5.6s}.p-introduction__link.is-shown:nth-of-type(2){-webkit-transition-delay:5.7s;transition-delay:5.7s}.p-introduction__link.is-shown:nth-of-type(3){-webkit-transition-delay:5.8s;transition-delay:5.8s}.p-introduction__link.is-shown:nth-of-type(4){-webkit-transition-delay:5.9s;transition-delay:5.9s}.p-introduction__link.is-shown:nth-of-type(5){-webkit-transition-delay:6s;transition-delay:6s}.p-introduction__follow{width:15px;height:10vh;overflow:hidden;position:relative;margin:6vh auto 0;opacity:0;-webkit-transition-property:opacity;transition-property:opacity}.p-introduction__follow.is-shown{opacity:1;-webkit-transition-duration:1s;transition-duration:1s;-webkit-transition-delay:3s;transition-delay:3s}.p-introduction__follow-in{width:1px;height:100%;position:absolute;top:0;background-color:#fff;-webkit-animation-name:loopFollow;animation-name:loopFollow;-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.p-introduction__follow-in--1{left:0}.p-introduction__follow-in--2{left:50%;margin-left:-1px;-webkit-animation-delay:.3s;animation-delay:.3s}.p-introduction__follow-in--3{right:0;-webkit-animation-delay:.15s;animation-delay:.15s}.p-preloader{position:fixed;top:50%;left:50%;z-index:100;pointer-events:none}@media all and (min-width:569px){.p-preloader{width:60px;height:60px;margin-top:-30px;margin-left:-30px}}@media all and (max-width:568px){.p-preloader{width:30px;height:30px;margin-top:-15px;margin-left:-15px}}.p-preloader.is-hidden{opacity:0;-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-property:opacity;transition-property:opacity}.p-preloader__box{width:100%;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:absolute;top:0;left:0;border-style:solid;-webkit-animation-name:rotatePreloaderBox;animation-name:rotatePreloaderBox;-webkit-animation-duration:3s;animation-duration:3s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-fill-mode:both;animation-fill-mode:both}@media all and (min-width:569px){.p-preloader__box{border-width:3px}}@media all and (max-width:568px){.p-preloader__box{border-width:2px}}.p-preloader__box--blank{border-color:#111}.p-preloader__box--white{border-color:#fff}.p-preloader__box--02{-webkit-animation-delay:1s;animation-delay:1s}.p-preloader__box--03{-webkit-animation-delay:2s;animation-delay:2s}@-webkit-keyframes rotatePreloaderBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(0);transform:scale(.1) rotate(0)}12.5%{opacity:1}25%{-webkit-transform:scale(1) rotate(180deg);transform:scale(1) rotate(180deg)}37.5%{opacity:1;-webkit-transform:scale(1) rotate(270deg);transform:scale(1) rotate(270deg)}50%{opacity:0;-webkit-transform:scale(1.2) rotate(360deg);transform:scale(1.2) rotate(360deg)}100%{opacity:0}}@keyframes rotatePreloaderBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(0);transform:scale(.1) rotate(0)}12.5%{opacity:1}25%{-webkit-transform:scale(1) rotate(180deg);transform:scale(1) rotate(180deg)}37.5%{opacity:1;-webkit-transform:scale(1) rotate(270deg);transform:scale(1) rotate(270deg)}50%{opacity:0;-webkit-transform:scale(1.2) rotate(360deg);transform:scale(1.2) rotate(360deg)}100%{opacity:0}}.p-config-menu{position:fixed;bottom:20px;right:20px;z-index:100}.p-sketch-index{max-width:1366px;-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;top:0;right:0;left:0;z-index:100000;margin-right:auto;margin-left:auto}@media all and (min-width:1025px){.p-sketch-index{padding-top:100px;padding-bottom:50px;padding-right:7.5%;padding-left:7.5%}}@media all and (min-width:569px) and (max-width:1024px){.p-sketch-index{padding-top:100px;padding-bottom:50px;padding-right:7.5%;padding-left:7.5%}}@media all and (max-width:568px){.p-sketch-index{padding-top:70px;padding-bottom:40px;padding-right:10px;padding-left:10px}}.p-sketch-index__item{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}@media all and (min-width:1025px){.p-sketch-index__item{width:33.3%;margin-bottom:60px;padding-right:15px;padding-left:15px}}@media all and (min-width:569px) and (max-width:1024px){.p-sketch-index__item{width:50%;margin-bottom:40px;padding-right:10px;padding-left:10px}}@media all and (max-width:568px){.p-sketch-index__item{width:100%;margin-bottom:30px;padding-right:10px;padding-left:10px}}.p-sketch-index__item-wrap{display:block}.p-sketch-index__item-thumb{width:100%;position:relative;margin-bottom:10px;padding-top:52.5%;background-color:#fff;background-size:cover}.p-sketch-index__item-thumb:after,.p-sketch-index__item-thumb:before{content:"";display:block;position:absolute;top:0;right:0;bottom:0;left:0}.p-sketch-index__item-thumb:before{background-color:#fff}.p-sketch-index__item-thumb:after{background-color:rgba(0,0,0,.7)}.p-sketch-index__item-thumb-label{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:absolute;top:0;left:0;z-index:10;letter-spacing:.2em}@media all and (min-width:1025px){.p-sketch-index__item-thumb-label{font-size:24px;font-size:1.5rem}}@media all and (min-width:569px) and (max-width:1024px){.p-sketch-index__item-thumb-label{font-size:21px;font-size:1.3125rem}}@media all and (max-width:568px){.p-sketch-index__item-thumb-label{font-size:18px;font-size:1.125rem}}.p-sketch-index__item-title{letter-spacing:.1em}@media all and (min-width:1025px){.p-sketch-index__item-title{font-size:32px;font-size:2rem}}@media all and (min-width:569px) and (max-width:1024px){.p-sketch-index__item-title{font-size:28px;font-size:1.75rem}}@media all and (max-width:568px){.p-sketch-index__item-title{font-size:24px;font-size:1.5rem}}.p-sketch-index__item-title .js-split-str{display:inline-block}.p-sketch-index__item-date{margin-top:5px;font-size:12px;font-size:.75rem}.p-sketch-index__item-thumb{-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition-duration:.6s;transition-duration:.6s;-webkit-transition-delay:.4s;transition-delay:.4s;-webkit-transition-timing-function:cubic-bezier(.075,.82,.165,1);transition-timing-function:cubic-bezier(.075,.82,.165,1)}.p-sketch-index__item-thumb:before{-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-delay:.6s;transition-delay:.6s}.p-sketch-index__item-thumb:after{opacity:0;-webkit-transition-duration:.4s;transition-duration:.4s}.p-sketch-index__item-thumb-label .js-split-str{opacity:0;-webkit-transform:scale(.5);transform:scale(.5);-webkit-transition-duration:.6s;transition-duration:.6s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(1){-webkit-transition-delay:0s;transition-delay:0s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(2){-webkit-transition-delay:20ms;transition-delay:20ms}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(3){-webkit-transition-delay:40ms;transition-delay:40ms}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(4){-webkit-transition-delay:60ms;transition-delay:60ms}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(5){-webkit-transition-delay:80ms;transition-delay:80ms}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(6){-webkit-transition-delay:.1s;transition-delay:.1s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(7){-webkit-transition-delay:.12s;transition-delay:.12s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(8){-webkit-transition-delay:.14s;transition-delay:.14s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(9){-webkit-transition-delay:.16s;transition-delay:.16s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(10){-webkit-transition-delay:.18s;transition-delay:.18s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(11){-webkit-transition-delay:.2s;transition-delay:.2s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(12){-webkit-transition-delay:.22s;transition-delay:.22s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(13){-webkit-transition-delay:.24s;transition-delay:.24s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(14){-webkit-transition-delay:.26s;transition-delay:.26s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(15){-webkit-transition-delay:.28s;transition-delay:.28s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(16){-webkit-transition-delay:.3s;transition-delay:.3s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(17){-webkit-transition-delay:.32s;transition-delay:.32s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(18){-webkit-transition-delay:.34s;transition-delay:.34s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(19){-webkit-transition-delay:.36s;transition-delay:.36s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(20){-webkit-transition-delay:.38s;transition-delay:.38s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(21){-webkit-transition-delay:.4s;transition-delay:.4s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(22){-webkit-transition-delay:.42s;transition-delay:.42s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(23){-webkit-transition-delay:.44s;transition-delay:.44s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(24){-webkit-transition-delay:.46s;transition-delay:.46s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(25){-webkit-transition-delay:.48s;transition-delay:.48s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(26){-webkit-transition-delay:.5s;transition-delay:.5s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(27){-webkit-transition-delay:.52s;transition-delay:.52s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(28){-webkit-transition-delay:.54s;transition-delay:.54s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(29){-webkit-transition-delay:.56s;transition-delay:.56s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(30){-webkit-transition-delay:.58s;transition-delay:.58s}.p-sketch-index__item-title .js-split-str{opacity:0;-webkit-transform:scale(.5);transform:scale(.5);-webkit-transition-duration:.6s;transition-duration:.6s}.p-sketch-index__item-title .js-split-str:nth-of-type(1){-webkit-transition-delay:.6s;transition-delay:.6s}.p-sketch-index__item-title .js-split-str:nth-of-type(2){-webkit-transition-delay:.62s;transition-delay:.62s}.p-sketch-index__item-title .js-split-str:nth-of-type(3){-webkit-transition-delay:.64s;transition-delay:.64s}.p-sketch-index__item-title .js-split-str:nth-of-type(4){-webkit-transition-delay:.66s;transition-delay:.66s}.p-sketch-index__item-title .js-split-str:nth-of-type(5){-webkit-transition-delay:.68s;transition-delay:.68s}.p-sketch-index__item-title .js-split-str:nth-of-type(6){-webkit-transition-delay:.7s;transition-delay:.7s}.p-sketch-index__item-title .js-split-str:nth-of-type(7){-webkit-transition-delay:.72s;transition-delay:.72s}.p-sketch-index__item-title .js-split-str:nth-of-type(8){-webkit-transition-delay:.74s;transition-delay:.74s}.p-sketch-index__item-title .js-split-str:nth-of-type(9){-webkit-transition-delay:.76s;transition-delay:.76s}.p-sketch-index__item-title .js-split-str:nth-of-type(10){-webkit-transition-delay:.78s;transition-delay:.78s}.p-sketch-index__item-title .js-split-str:nth-of-type(11){-webkit-transition-delay:.8s;transition-delay:.8s}.p-sketch-index__item-title .js-split-str:nth-of-type(12){-webkit-transition-delay:.82s;transition-delay:.82s}.p-sketch-index__item-title .js-split-str:nth-of-type(13){-webkit-transition-delay:.84s;transition-delay:.84s}.p-sketch-index__item-title .js-split-str:nth-of-type(14){-webkit-transition-delay:.86s;transition-delay:.86s}.p-sketch-index__item-title .js-split-str:nth-of-type(15){-webkit-transition-delay:.88s;transition-delay:.88s}.p-sketch-index__item-title .js-split-str:nth-of-type(16){-webkit-transition-delay:.9s;transition-delay:.9s}.p-sketch-index__item-title .js-split-str:nth-of-type(17){-webkit-transition-delay:.92s;transition-delay:.92s}.p-sketch-index__item-title .js-split-str:nth-of-type(18){-webkit-transition-delay:.94s;transition-delay:.94s}.p-sketch-index__item-title .js-split-str:nth-of-type(19){-webkit-transition-delay:.96s;transition-delay:.96s}.p-sketch-index__item-title .js-split-str:nth-of-type(20){-webkit-transition-delay:.98s;transition-delay:.98s}.p-sketch-index__item-title .js-split-str:nth-of-type(21){-webkit-transition-delay:1s;transition-delay:1s}.p-sketch-index__item-title .js-split-str:nth-of-type(22){-webkit-transition-delay:1.02s;transition-delay:1.02s}.p-sketch-index__item-title .js-split-str:nth-of-type(23){-webkit-transition-delay:1.04s;transition-delay:1.04s}.p-sketch-index__item-title .js-split-str:nth-of-type(24){-webkit-transition-delay:1.06s;transition-delay:1.06s}.p-sketch-index__item-title .js-split-str:nth-of-type(25){-webkit-transition-delay:1.08s;transition-delay:1.08s}.p-sketch-index__item-title .js-split-str:nth-of-type(26){-webkit-transition-delay:1.1s;transition-delay:1.1s}.p-sketch-index__item-title .js-split-str:nth-of-type(27){-webkit-transition-delay:1.12s;transition-delay:1.12s}.p-sketch-index__item-title .js-split-str:nth-of-type(28){-webkit-transition-delay:1.14s;transition-delay:1.14s}.p-sketch-index__item-title .js-split-str:nth-of-type(29){-webkit-transition-delay:1.16s;transition-delay:1.16s}.p-sketch-index__item-title .js-split-str:nth-of-type(30){-webkit-transition-delay:1.18s;transition-delay:1.18s}.p-sketch-index__item-date{opacity:0;-webkit-transition-duration:1s;transition-duration:1s;-webkit-transition-delay:.8s;transition-delay:.8s}.p-sketch-index__item.is-shown .p-sketch-index__item-thumb{-webkit-transform:scaleY(1);transform:scaleY(1)}.p-sketch-index__item.is-shown .p-sketch-index__item-thumb:before{opacity:0}.p-sketch-index__item.is-shown .p-sketch-index__item-title .js-split-str{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.p-sketch-index__item.is-shown .p-sketch-index__item-date{opacity:1}.p-sketch-index__item:hover .p-sketch-index__item-thumb:after{opacity:1}.p-sketch-index__item:hover .p-sketch-index__item-thumb-label .js-split-str{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.p-sketch-outline{position:fixed;z-index:100;bottom:22px;left:20px}@media all and (max-width:568px){.p-sketch-outline{right:20px}}.p-sketch-outline__title{line-height:1;margin-top:0;margin-bottom:.075em;margin-left:-.05em;font-weight:100;letter-spacing:.05em}@media all and (min-width:1367px){.p-sketch-outline__title{font-size:80px}}@media all and (min-width:569px) and (max-width:1366px){.p-sketch-outline__title{font-size:6vw}}@media all and (max-width:568px){.p-sketch-outline__title{font-size:62.48px}}.p-sketch-outline__date{line-height:1;margin:0}.p-sketch-outline__description{line-height:1.5;margin:10px 0 0}.p-sketch-outline__assets{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:8px;margin-bottom:0}.p-sketch-outline__assets dd{margin:0}.p-sketch-outline__assets ul{display:-webkit-box;display:-ms-flexbox;display:flex;list-style-type:none;margin:0;padding:0}.p-sketch-outline__assets li{margin-left:12px}.p-utility-menu{position:fixed;z-index:100;top:25px;right:20px}.p-website-outline{position:fixed;z-index:100;top:20px;left:20px}.p-website-outline__title{margin:0 0 5px;font-size:18px;font-size:1.125rem}.p-website-outline__description{line-height:1.25;margin:0}.p-website-outline__links{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:15px}.p-website-outline__link{width:18px;height:18px;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-right:20px}.p-website-outline__link svg{width:18px}
src/main/webapp/static/css/optimize.css
src/main/webapp/static/css/originTable.css
New file
@@ -0,0 +1,29 @@
#originTable + .layui-table-view .layui-table-tool-temp {
    padding-right: 0;
}
#originTable + .layui-table-view .layui-table-body tbody > tr td {
    cursor: pointer;
}
#originTable + .layui-table-view .layui-table-body tbody > tr.layui-table-click {
    background-color: #fff3e0;
}
#originTable + .layui-table-view .layui-table-body tbody > tr.layui-table-click td:last-child > div:before {
    position: absolute;
    right: 6px;
    content: "\e602";
    font-size: 12px;
    font-style: normal;
    font-family: layui-icon,serif !important;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}
#left-table .layui-table-grid-down {
    display: none;
}
.layui-form.layui-border-box.layui-table-view {
    border-width: 1px;
}
#left-table .layui-table thead th {
    /* font-weight: bold; */
    text-align: left;
}
src/main/webapp/static/css/pda.css
New file
@@ -0,0 +1,98 @@
* {
    font-family: microsoft yahei,serif;
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    font-size: 16px;
}
html {
    height: 100%;
    background-color: #f1f1f1;
    padding: 5px;
}
body {
    height: 100%;
    background-color: #fff;
    border-radius: 5px;
    box-shadow: 0 0 3px rgba(0,0,0,.3);
    padding: 5px;
    position: relative;
}
/* 头部 */
header {
    padding: 5px 0;
}
.layui-form-label {
    width: initial;
    padding: 6px 10px;
    line-height: 30px;
}
#code {
    width: 75%;
    height: 40px;
    margin-right: 0;
}
header button {
    height: 20px;
    width: 70px;
}
#mat-btn:focus {
}
/* layer */
.layui-layer-title {
    font-size: 11px;
    height: 20px;
    line-height: 20px;
}
/* 主体 */
main {
    height: 235px;
    overflow: auto;
}
.layui-table, .layui-table-view {
    margin: 0;
}
.layui-table-view .layui-table td, .layui-table-view .layui-table th {
    padding: 0;
}
.layui-table-cell {
    height: 32px;
    line-height: 32px;
    padding: 0;
}
.layui-table-grid-down {
    display: none;
}
.layui-table-body .layui-none {
    /*height: 144px;*/
}
/* 尾部 */
footer {
    margin-top: 20px;
    width: 100%;
}
.layui-btn-container .layui-btn {
    margin-left: 10px;
    margin-bottom: 2px;
}
#tips {
    display: inline-block;
    width: 90px;
    color: #666;
    margin-left: 5px;
    margin-bottom: 5px;
    vertical-align: middle;
    overflow:hidden;
    white-space:nowrap;
    text-overflow:ellipsis;
    font-size: 12px;
}
.layui-btn-primary:hover {
    border-color: #C9C9C9
}
src/main/webapp/static/css/print.css
New file
@@ -0,0 +1,7 @@
@media print {
    @page {
        /*A4: 210mm × 297mm,size: 794px × 1123px,0边距*/
        /*171.9mm × 258.9mm,size:649px × 978px,19.05mm边距(ie浏览器默认打印边距) */
        margin: 0.3cm
    }
}
src/main/webapp/static/css/road.css
New file
@@ -0,0 +1,146 @@
/* CSS Document */
/**
* +----------------------------------------------------------
* 主样式
* +----------------------------------------------------------
*/
.layui-form-checkbox[lay-skin=primary]:hover i{
  border-color: #407CD5;
}
.layui-form-checked[lay-skin=primary] i{
  background-color: #407CD5;
  border-color: #407CD5;
}
.layui-btn{
    height: 45px;
    line-height: 45px;
}
.layui-btn-normal{
  background-color: #407CD5;
}
/*流星*/
.liuxing{
  width: 85px;
    height: 85px;
    position: absolute;
    background-size: contain;
}
.liuxing1 {
  top: 200px;
    left: 200px;
}
.liuxing2 {
  top: 200px;
    left: 50%;
    margin-left: 200px;
}
.liuxing3 {
  top: 100px;
    right: 300px;
}
.liuxing4 {
  top: 150px;
    right: 300px;
}
.liuxingFla {
    animation: liuxing 5s ease-in infinite;
}
.liuxingFla2 {
    animation: liuxing2 4s ease-in infinite;
}
.liuxingFla3 {
    animation: liuxing3 3s linear infinite;
}
.liuxingFla4 {
    animation: liuxing4 2s linear infinite;
}
/* 流星动画 */
@keyframes liuxing {
    0% {
        transform: translate(200px, -200px)
    }
    90% {
        transform: translate(-180px, 180px);
        opacity: 1;
    }
    100% {
        transform: translate(-200px, 200px);
        opacity: 0;
    }
}
@keyframes liuxing2 {
    0% {
        transform: translate(200px, -200px)
    }
    90% {
        transform: translate(-480px, 480px);
        opacity: 1;
    }
    100% {
        transform: translate(-500px, 500px);
        opacity: 0;
    }
}
@keyframes liuxing3 {
    0% {
        transform: translate(200px, -200px)
    }
    90% {
        transform: translate(-480px, 480px);
        opacity: 1;
    }
    100% {
        transform: translate(-500px, 500px);
        opacity: 0;
    }
}
@keyframes liuxing4 {
    0% {
        transform: translate(200px, -200px)
    }
    90% {
        transform: translate(-180px, 180px);
        opacity: 1;
    }
    100% {
        transform: translate(-200px, 200px);
        opacity: 0;
    }
}
/*菜单*/
.moveUpDownFla1 {
    animation: moveUpDown 5s ease infinite;
}
.moveUpDownFla2 {
    animation: moveUpDown 4s linear infinite;
}
/* 菜单动画 */
@keyframes moveUpDown {
    0% {
        transform: translate(0px, -20px)
    }
    50% {
        transform: translate(0px, 20px)
    }
    100% {
        transform: translate(0px, -20px);
    }
}
src/main/webapp/static/css/tree.css
New file
@@ -0,0 +1,70 @@
#organizationTreeBar {
    padding: 10px 15px;
    border: 1px solid #e6e6e6;
    background-color: #f2f2f2;
}
#organizationTree {
    border: 1px solid #e6e6e6;
    border-top: none;
    padding: 10px 5px;
    overflow: auto;
    height: -webkit-calc(100vh - 125px);
    height: -moz-calc(100vh - 125px);
    height: calc(100vh - 125px);
}
.layui-tree-entry .layui-tree-txt {
    padding: 0 5px;
    border: 1px transparent solid;
    text-decoration: none !important;
}
.layui-tree-entry.ew-tree-click .layui-tree-txt {
    background-color: #fff3e0;
    border: 1px #FFE6B0 solid;
}
#organizationEditForm.layui-form {
    padding: 25px 30px 0 0;
}
#organizationEditForm .layui-form-label {
    padding: 8px 15px;
    box-sizing: content-box;
    -webkit-box-sizing: content-box;
}
#organizationEditForm .layui-form-required:before {
    content: "*";
    display: inline-block;
    font-family: SimSun,serif;
    margin-right: 4px;
    font-size: 14px;
    line-height: 1;
    color: #ed4014;
}
#organizationEditForm .layui-input {
    height: 36px;
    border-radius: 4px;
}
#organizationEditForm .cool-button-contain {
    text-align: right;
    margin: 20px 0;
}
#organizationEditForm .layui-form-radio>i:hover, .layui-form-radioed>i {
    color: #007bff;
}
#organizationEditForm .layui-btn {
    height: 36px;
    line-height: 36px;
    border-radius: 4px;
    box-shadow: 0 1px 0 rgba(0,0,0,.03);
}
#organizationEditForm .layui-btn-primary:hover {
    border-color: #777777;
}
/* 自定义 */
#condition {
    height: 30px;
}
src/main/webapp/static/image/Excel.png
src/main/webapp/static/image/bg.jpg
src/main/webapp/static/image/favicon.ico
src/main/webapp/static/image/instancing/cubemap_nx.png
src/main/webapp/static/image/instancing/cubemap_ny.png
src/main/webapp/static/image/instancing/cubemap_nz.png
src/main/webapp/static/image/instancing/cubemap_px.png
src/main/webapp/static/image/instancing/cubemap_py.png
src/main/webapp/static/image/instancing/cubemap_pz.png
src/main/webapp/static/image/login_bg.jpg
src/main/webapp/static/image/logo.png
src/main/webapp/static/image/nav/bg_1.png
src/main/webapp/static/image/nav/fn_1.png
src/main/webapp/static/image/nav/fn_1_h.png
src/main/webapp/static/image/nav/fn_2.png
src/main/webapp/static/image/nav/fn_2_h.png
src/main/webapp/static/image/nav/fn_3.png
src/main/webapp/static/image/nav/fn_3_h.png
src/main/webapp/static/image/nav/icon.png
src/main/webapp/static/images/logo.png
src/main/webapp/static/layui/lay/modules/admin.js
New file
@@ -0,0 +1,1667 @@
/** EasyWeb iframe v3.1.8 date:2020-05-04 License By http://easyweb.vip */
layui.define(['layer'], function (exports) {
    var $ = layui.jquery;
    var layer = layui.layer;
    var setter = layui.cache;
    var bodyDOM = '.layui-layout-admin>.layui-body';
    var tabDOM = bodyDOM + '>.layui-tab';
    var sideDOM = '.layui-layout-admin>.layui-side>.layui-side-scroll';
    var headerDOM = '.layui-layout-admin>.layui-header';
    var navFilter = 'admin-side-nav';
    var admin = {version: '3.1.8', layerData: {}};
    /** 设置侧栏折叠 */
    admin.flexible = function (expand) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.flexible(expand);
        var $layout = $('.layui-layout-admin');
        var isExapnd = $layout.hasClass('admin-nav-mini');
        if (expand === undefined) expand = isExapnd;
        if (isExapnd === expand) {
            if (window.sideFlexTimer) clearTimeout(window.sideFlexTimer);
            $layout.addClass('admin-side-flexible');
            window.sideFlexTimer = setTimeout(function () {
                $layout.removeClass('admin-side-flexible');
            }, 600);
            if (expand) {
                admin.hideTableScrollBar();
                $layout.removeClass('admin-nav-mini');
            } else {
                $layout.addClass('admin-nav-mini');
            }
            layui.event.call(this, 'admin', 'flexible({*})', {expand: expand});
        }
    };
    /** 设置导航栏选中 */
    admin.activeNav = function (url) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.activeNav(url);
        if (!url) return console.warn('active url is null');
        $(sideDOM + '>.layui-nav .layui-nav-item .layui-nav-child dd.layui-this').removeClass('layui-this');
        $(sideDOM + '>.layui-nav .layui-nav-item.layui-this').removeClass('layui-this');
        var $a = $(sideDOM + '>.layui-nav a[lay-href="' + url + '"]');
        if ($a.length === 0) return console.warn(url + ' not found');
        var isMini = $('.layui-layout-admin').hasClass('admin-nav-mini');
        if ($(sideDOM + '>.layui-nav').attr('lay-shrink') === '_all') {  // 手风琴效果
            var $pChilds = $a.parent('dd').parents('.layui-nav-child');
            if (!isMini) {
                $(sideDOM + '>.layui-nav .layui-nav-itemed>.layui-nav-child').not($pChilds)
                    .css('display', 'block').slideUp('fast', function () {
                    $(this).css('display', '');
                });
            }
            $(sideDOM + '>.layui-nav .layui-nav-itemed').not($pChilds.parent()).removeClass('layui-nav-itemed');
        }
        $a.parent().addClass('layui-this');  // 选中当前
        // 展开所有父级
        var $asParents = $a.parent('dd').parents('.layui-nav-child').parent();
        if (!isMini) {
            var $childs = $asParents.not('.layui-nav-itemed').children('.layui-nav-child');
            $childs.slideDown('fast', function () {
                if ($(this).is($childs.last())) {
                    $childs.css('display', '');
                    // 菜单超出屏幕自动滚动
                    var topBeyond = $a.offset().top + $a.outerHeight() + 30 - admin.getPageHeight();
                    var topDisparity = 50 + 65 - $a.offset().top;
                    if (topBeyond > 0) {
                        $(sideDOM).animate({'scrollTop': $(sideDOM).scrollTop() + topBeyond}, 300);
                    } else if (topDisparity > 0) {
                        $(sideDOM).animate({'scrollTop': $(sideDOM).scrollTop() - topDisparity}, 300);
                    }
                }
            });
        }
        $asParents.addClass('layui-nav-itemed');
        // 适配多系统模式
        $('ul[lay-filter="' + navFilter + '"]').addClass('layui-hide');
        var $aUl = $a.parents('.layui-nav');
        $aUl.removeClass('layui-hide');
        $(headerDOM + '>.layui-nav>.layui-nav-item').removeClass('layui-this');
        $(headerDOM + '>.layui-nav>.layui-nav-item>a[nav-bind="' + $aUl.attr('nav-id') + '"]').parent().addClass('layui-this');
    };
    /** 右侧弹出 */
    admin.popupRight = function (param) {
        param.anim = -1;
        param.offset = 'r';
        param.move = false;
        param.fixed = true;
        if (param.area === undefined) param.area = '336px';
        if (param.title === undefined) param.title = false;
        if (param.closeBtn === undefined) param.closeBtn = false;
        if (param.shadeClose === undefined) param.shadeClose = true;
        if (param.skin === undefined) param.skin = 'layui-anim layui-anim-rl layui-layer-adminRight';
        return admin.open(param);
    };
    /** 封装layer.open */
    admin.open = function (param) {
        if (param.content && param.type === 2) param.url = undefined;  // 参数纠正
        if (param.url && (param.type === 2 || param.type === undefined)) param.type = 1;  // 参数纠正
        if (param.area === undefined) param.area = param.type === 2 ? ['360px', '300px'] : '360px';
        if (param.offset === undefined) param.offset = '70px';
        if (param.shade === undefined) param.shade = .1;
        if (param.fixed === undefined) param.fixed = false;
        if (param.resize === undefined) param.resize = false;
        if (param.skin === undefined) param.skin = 'layui-layer-admin';
        var eCallBack = param.end;
        param.end = function () {
            layer.closeAll('tips');  // 关闭表单验证的tips
            eCallBack && eCallBack();
        };
        if (param.url) {
            var sCallBack = param.success;
            param.success = function (layero, index) {
                $(layero).data('tpl', param.tpl || '');
                admin.reloadLayer(index, param.url, sCallBack);
            };
        } else if (param.tpl && param.content) {
            param.content = admin.util.tpl(param.content, param.data, setter.tplOpen, setter.tplClose);
        }
        var layIndex = layer.open(param);
        if (param.data) admin.layerData['d' + layIndex] = param.data;
        return layIndex;
    };
    /** 获取弹窗数据 */
    admin.getLayerData = function (index, key) {
        if (index === undefined) {
            index = parent.layer.getFrameIndex(window.name);
            if (index === undefined) return null;
            else return parent.layui.admin.getLayerData(parseInt(index), key);
        } else if (isNaN(index)) {
            index = admin.getLayerIndex(index);
        }
        if (index === undefined) return;
        var layerData = admin.layerData['d' + index];
        if (key && layerData) return layerData[key];
        return layerData;
    };
    /** 放入弹窗数据 */
    admin.putLayerData = function (key, value, index) {
        if (index === undefined) {
            index = parent.layer.getFrameIndex(window.name);
            if (index === undefined) return;
            else return parent.layui.admin.putLayerData(key, value, parseInt(index));
        } else if (isNaN(index)) {
            index = admin.getLayerIndex(index);
        }
        if (index === undefined) return;
        var layerData = admin.getLayerData(index);
        if (!layerData) layerData = {};
        layerData[key] = value;
        admin.layerData['d' + index] = layerData;
    };
    /** 刷新url方式的layer */
    admin.reloadLayer = function (index, url, success) {
        if (typeof url === 'function') {
            success = url;
            url = undefined;
        }
        if (isNaN(index)) index = admin.getLayerIndex(index);
        if (index === undefined) return;
        var $layero = $('#layui-layer' + index);
        if (url === undefined) url = $layero.data('url');
        if (!url) return;
        $layero.data('url', url);
        admin.showLoading($layero);
        admin.ajax({
            url: url,
            dataType: 'html',
            success: function (res) {
                admin.removeLoading($layero, false);
                if (typeof res !== 'string') res = JSON.stringify(res);
                var tpl = $layero.data('tpl');
                // 模板解析
                if (tpl === true || tpl === 'true') {
                    var data = admin.getLayerData(index) || {};
                    data.layerIndex = index;
                    // 模板里面有动态模板处理
                    var $html = $('<div>' + res + '</div>'), tplAll = {};
                    $html.find('script,[tpl-ignore]').each(function (i) {
                        var $this = $(this);
                        tplAll['temp_' + i] = $this[0].outerHTML;
                        $this.after('${temp_' + i + '}').remove();
                    });
                    res = admin.util.tpl($html.html(), data, setter.tplOpen, setter.tplClose);
                    for (var f in tplAll) res = res.replace('${' + f + '}', tplAll[f]);
                }
                $layero.children('.layui-layer-content').html(res);
                admin.renderTpl('#layui-layer' + index + ' [ew-tpl]');
                success && success($layero[0], index);
            }
        });
    };
    /** 封装layer.alert */
    admin.alert = function (content, options, yes) {
        if (typeof options === 'function') {
            yes = options;
            options = {};
        }
        if (options.skin === undefined) options.skin = 'layui-layer-admin';
        if (options.shade === undefined) options.shade = .1;
        return layer.alert(content, options, yes);
    };
    /** 封装layer.confirm */
    admin.confirm = function (content, options, yes, cancel) {
        if (typeof options === 'function') {
            cancel = yes;
            yes = options;
            options = {};
        }
        if (options.skin === undefined) options.skin = 'layui-layer-admin';
        if (options.shade === undefined) options.shade = .1;
        return layer.confirm(content, options, yes, cancel);
    };
    /** 封装layer.prompt */
    admin.prompt = function (options, yes) {
        if (typeof options === 'function') {
            yes = options;
            options = {};
        }
        if (options.skin === undefined) options.skin = 'layui-layer-admin layui-layer-prompt';
        if (options.shade === undefined) options.shade = .1;
        return layer.prompt(options, yes);
    };
    /** 封装ajax请求,返回数据类型为json */
    admin.req = function (url, data, success, method, option) {
        if (typeof data === 'function') {
            option = method;
            method = success;
            success = data;
            data = {};
        }
        if (method !== undefined && typeof method !== 'string') {
            option = method;
            method = undefined;
        }
        if (!method) method = 'GET';
        if (typeof data === 'string') {
            if (!option) option = {};
            if (!option.contentType) option.contentType = 'application/json;charset=UTF-8';
        } else if (setter.reqPutToPost) {
            if ('put' === method.toLowerCase()) {
                method = 'POST';
                data._method = 'PUT';
            } else if ('delete' === method.toLowerCase()) {
                method = 'GET';
                data._method = 'DELETE';
            }
        }
        return admin.ajax($.extend({
            url: (setter.baseServer || '') + url, data: data, type: method, dataType: 'json', success: success
        }, option));
    };
    /** 封装ajax请求 */
    admin.ajax = function (param) {
        var oldParam = admin.util.deepClone(param);
        if (!param.dataType) param.dataType = 'json';
        if (!param.headers) param.headers = {};
        // 统一设置header
        var headers = setter.getAjaxHeaders(param.url);
        if (headers) {
            for (var i = 0; i < headers.length; i++) {
                if (param.headers[headers[i].name] === undefined) param.headers[headers[i].name] = headers[i].value;
            }
        }
        // success预处理
        var success = param.success;
        param.success = function (result, status, xhr) {
            var before = setter.ajaxSuccessBefore(admin.parseJSON(result), param.url, {
                param: oldParam, reload: function (p) {
                    admin.ajax($.extend(true, oldParam, p));
                }, update: function (r) {
                    result = r;
                }, xhr: xhr
            });
            if (before !== false) success && success(result, status, xhr);
            else param.cancel && param.cancel();
        };
        param.error = function (xhr, status) {
            param.success({code: xhr.status, msg: xhr.statusText}, status, xhr);
        };
        // 解决缓存问题
        if (layui.cache.version && (!setter.apiNoCache || param.dataType.toLowerCase() !== 'json')) {
            if (param.url.indexOf('?') === -1) param.url += '?v=';
            else param.url += '&v=';
            if (layui.cache.version === true) param.url += new Date().getTime();
            else param.url += layui.cache.version;
        }
        return $.ajax(param);
    };
    /** 解析json */
    admin.parseJSON = function (str) {
        if (typeof str === 'string') {
            try {
                return JSON.parse(str);
            } catch (e) {
            }
        }
        return str;
    };
    /** 显示加载动画 */
    admin.showLoading = function (elem, type, opacity, size) {
        if (elem !== undefined && (typeof elem !== 'string') && !(elem instanceof $)) {
            type = elem.type;
            opacity = elem.opacity;
            size = elem.size;
            elem = elem.elem;
        }
        if (type === undefined) type = setter.defaultLoading || 1;
        if (size === undefined) size = 'sm';
        if (elem === undefined) elem = 'body';
        var loader = [
            '<div class="ball-loader ' + size + '"><span></span><span></span><span></span><span></span></div>',
            '<div class="rubik-loader ' + size + '"></div>',
            '<div class="signal-loader ' + size + '"><span></span><span></span><span></span><span></span></div>',
            '<div class="layui-loader ' + size + '"><i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i></div>'
        ];
        $(elem).addClass('page-no-scroll');  // 禁用滚动条
        $(elem).scrollTop(0);
        var $loading = $(elem).children('.page-loading');
        if ($loading.length <= 0) {
            $(elem).append('<div class="page-loading">' + loader[type - 1] + '</div>');
            $loading = $(elem).children('.page-loading');
        }
        if (opacity !== undefined) $loading.css('background-color', 'rgba(255,255,255,' + opacity + ')');
        $loading.show();
    };
    /** 移除加载动画 */
    admin.removeLoading = function (elem, fade, del) {
        if (elem === undefined) elem = 'body';
        if (fade === undefined) fade = true;
        var $loading = $(elem).children('.page-loading');
        if (del) $loading.remove();
        else if (fade) $loading.fadeOut('fast');
        else $loading.hide();
        $(elem).removeClass('page-no-scroll');
    };
    /** 缓存临时数据 */
    admin.putTempData = function (key, value, local) {
        var tableName = local ? setter.tableName : setter.tableName + '_tempData';
        if (value === undefined || value === null) {
            if (local) layui.data(tableName, {key: key, remove: true});
            else layui.sessionData(tableName, {key: key, remove: true});
        } else {
            if (local) layui.data(tableName, {key: key, value: value});
            else layui.sessionData(tableName, {key: key, value: value});
        }
    };
    /** 获取缓存临时数据 */
    admin.getTempData = function (key, local) {
        if (typeof key === 'boolean') {
            local = key;
            key = undefined;
        }
        var tableName = local ? setter.tableName : setter.tableName + '_tempData';
        var tempData = local ? layui.data(tableName) : layui.sessionData(tableName);
        if (!key) return tempData;
        return tempData ? tempData[key] : undefined;
    };
    /** 滑动选项卡 */
    admin.rollPage = function (d) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.rollPage(d);
        var $tabTitle = $(tabDOM + '>.layui-tab-title');
        var left = $tabTitle.scrollLeft();
        if ('left' === d) {
            $tabTitle.animate({'scrollLeft': left - 120}, 100);
        } else if ('auto' === d) {
            var autoLeft = 0;
            $tabTitle.children("li").each(function () {
                if ($(this).hasClass('layui-this')) return false;
                else autoLeft += $(this).outerWidth();
            });
            $tabTitle.animate({'scrollLeft': autoLeft - 120}, 100);
        } else {
            $tabTitle.animate({'scrollLeft': left + 120}, 100);
        }
    };
    /** 刷新当前选项卡 */
    admin.refresh = function (url, isIndex) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.refresh(url);
        var $iframe;
        if (!url) {
            $iframe = $(tabDOM + '>.layui-tab-content>.layui-tab-item.layui-show>.admin-iframe');
            if (!$iframe || $iframe.length <= 0) $iframe = $(bodyDOM + '>div>.admin-iframe');
        } else {
            $iframe = $(tabDOM + '>.layui-tab-content>.layui-tab-item>.admin-iframe[lay-id="' + url + '"]');
            if (!$iframe || $iframe.length <= 0) $iframe = $(bodyDOM + '>.admin-iframe');
        }
        if (!$iframe || !$iframe[0]) return console.warn(url + ' is not found');
        try {
            if (isIndex && $iframe[0].contentWindow.refreshTab) {
                $iframe[0].contentWindow.refreshTab();
            } else {
                admin.showLoading({elem: $iframe.parent(), size: ''});
                $iframe[0].contentWindow.location.reload();
            }
        } catch (e) {
            console.warn(e);
            $iframe.attr('src', $iframe.attr('src'));
        }
    };
    /** 关闭当前选项卡 */
    admin.closeThisTabs = function (url) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.closeThisTabs(url);
        admin.closeTabOperNav();
        var $title = $(tabDOM + '>.layui-tab-title');
        if (!url) {
            if ($title.find('li').first().hasClass('layui-this')) return layer.msg('主页不能关闭', {icon: 2});
            $title.find('li.layui-this').find('.layui-tab-close').trigger('click');
        } else {
            if (url === $title.find('li').first().attr('lay-id')) return layer.msg('主页不能关闭', {icon: 2});
            $title.find('li[lay-id="' + url + '"]').find('.layui-tab-close').trigger('click');
        }
    };
    /** 关闭其他选项卡 */
    admin.closeOtherTabs = function (url) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.closeOtherTabs(url);
        if (!url) {
            $(tabDOM + '>.layui-tab-title li:gt(0):not(.layui-this)').find('.layui-tab-close').trigger('click');
        } else {
            $(tabDOM + '>.layui-tab-title li:gt(0)').each(function () {
                if (url !== $(this).attr('lay-id')) $(this).find('.layui-tab-close').trigger('click');
            });
        }
        admin.closeTabOperNav();
    };
    /** 关闭所有选项卡 */
    admin.closeAllTabs = function () {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.closeAllTabs();
        $(tabDOM + '>.layui-tab-title li:gt(0)').find('.layui-tab-close').trigger('click');
        $(tabDOM + '>.layui-tab-title li:eq(0)').trigger('click');
        admin.closeTabOperNav();
    };
    /** 关闭选项卡操作菜单 */
    admin.closeTabOperNav = function () {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.closeTabOperNav();
        $('.layui-icon-down .layui-nav .layui-nav-child').removeClass('layui-show');
    };
    /** 设置主题 */
    admin.changeTheme = function (theme, win, noCache, noChild) {
        if (!noCache) admin.putSetting('defaultTheme', theme);
        if (!win) win = top;
        admin.removeTheme(win);
        if (theme) {
            try {
                var $body = win.layui.jquery('body');
                $body.addClass(theme);
                $body.data('theme', theme);
            } catch (e) {
            }
        }
        if (noChild) return;
        var ifs = win.frames;
        for (var i = 0; i < ifs.length; i++) admin.changeTheme(theme, ifs[i], true, false);
    };
    /** 移除主题 */
    admin.removeTheme = function (w) {
        if (!w) w = window;
        try {
            var $body = w.layui.jquery('body');
            var theme = $body.data('theme');
            if (theme) $body.removeClass(theme);
            $body.removeData('theme');
        } catch (e) {
        }
    };
    /** 关闭当前iframe层弹窗 */
    admin.closeThisDialog = function () {
        return admin.closeDialog();
    };
    /** 关闭elem所在的页面层弹窗 */
    admin.closeDialog = function (elem) {
        if (elem) layer.close(admin.getLayerIndex(elem));
        else parent.layer.close(parent.layer.getFrameIndex(window.name));
    };
    /** 获取页面层弹窗的index */
    admin.getLayerIndex = function (elem) {
        if (!elem) return parent.layer.getFrameIndex(window.name);
        var id = $(elem).parents('.layui-layer').first().attr('id');
        if (id && id.length >= 11) return id.substring(11);
    };
    /** 让当前的iframe弹层自适应高度 */
    admin.iframeAuto = function () {
        return parent.layer.iframeAuto(parent.layer.getFrameIndex(window.name));
    };
    /** 获取浏览器高度 */
    admin.getPageHeight = function () {
        return document.documentElement.clientHeight || document.body.clientHeight;
    };
    /** 获取浏览器宽度 */
    admin.getPageWidth = function () {
        return document.documentElement.clientWidth || document.body.clientWidth;
    };
    /** 绑定表单弹窗 */
    admin.modelForm = function (layero, btnFilter, formFilter) {
        var $layero = $(layero);
        $layero.addClass('layui-form');
        if (formFilter) $layero.attr('lay-filter', formFilter);
        // 确定按钮绑定submit
        var $btnSubmit = $layero.find('.layui-layer-btn .layui-layer-btn0');
        $btnSubmit.attr('lay-submit', '');
        $btnSubmit.attr('lay-filter', btnFilter);
    };
    /** loading按钮 */
    admin.btnLoading = function (elem, text, loading) {
        if (text !== undefined && (typeof text === 'boolean')) {
            loading = text;
            text = undefined;
        }
        if (text === undefined) text = '&nbsp;加载中';
        if (loading === undefined) loading = true;
        var $elem = $(elem);
        if (loading) {
            $elem.addClass('ew-btn-loading');
            $elem.prepend('<span class="ew-btn-loading-text"><i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i>' + text + '</span>');
            $elem.attr('disabled', 'disabled').prop('disabled', true);
        } else {
            $elem.removeClass('ew-btn-loading');
            $elem.children('.ew-btn-loading-text').remove();
            $elem.removeProp('disabled').removeAttr('disabled');
        }
    };
    /** 鼠标移入侧边栏自动展开 */
    admin.openSideAutoExpand = function () {
        var $side = $('.layui-layout-admin>.layui-side');
        $side.off('mouseenter.openSideAutoExpand').on("mouseenter.openSideAutoExpand", function () {
            if (!$(this).parent().hasClass('admin-nav-mini')) return;
            admin.flexible(true);
            $(this).addClass('side-mini-hover');
        });
        $side.off('mouseleave.openSideAutoExpand').on("mouseleave.openSideAutoExpand", function () {
            if (!$(this).hasClass('side-mini-hover')) return;
            admin.flexible(false);
            $(this).removeClass('side-mini-hover');
        });
    };
    /** 表格单元格超出内容自动展开 */
    admin.openCellAutoExpand = function () {
        var $body = $('body');
        $body.off('mouseenter.openCellAutoExpand').on('mouseenter.openCellAutoExpand', '.layui-table-view td', function () {
            $(this).find('.layui-table-grid-down').trigger('click');
        });
        $body.off('mouseleave.openCellAutoExpand').on('mouseleave.openCellAutoExpand', '.layui-table-tips>.layui-layer-content', function () {
            $('.layui-table-tips-c').trigger('click');
        });
    };
    /** open事件解析layer参数 */
    admin.parseLayerOption = function (option) {
        // 数组类型进行转换
        for (var f in option) {
            if (!option.hasOwnProperty(f)) continue;
            if (option[f] && option[f].toString().indexOf(',') !== -1) option[f] = option[f].toString().split(',');
        }
        // function类型参数转换
        var fs = {'success': 'layero,index', 'cancel': 'index,layero', 'end': '', 'full': '', 'min': '', 'restore': ''};
        for (var k in fs) {
            if (!fs.hasOwnProperty(k) || !option[k]) continue;
            try {
                if (/^[a-zA-Z_]+[a-zA-Z0-9_]+$/.test(option[k])) option[k] += '()';
                option[k] = new Function(fs[k], option[k]);
            } catch (e) {
                option[k] = undefined;
            }
        }
        // content取内容
        if (option.content && (typeof option.content === 'string') && option.content.indexOf('#') === 0) {
            if ($(option.content).is('script')) option.content = $(option.content).html();
            else option.content = $(option.content);
        }
        if (option.type === undefined && option.url === undefined) option.type = 2;  // 默认为iframe类型
        return option;
    };
    /** 字符串形式的parent.parent转window对象 */
    admin.strToWin = function (str) {
        var win = window;
        if (!str) return win;
        var ws = str.split('.');
        for (var i = 0; i < ws.length; i++) win = win[ws[i]];
        return win;
    };
    /** 解决折叠侧边栏表格滚动条闪现 */
    admin.hideTableScrollBar = function (win) {
        if (admin.getPageWidth() <= 768) return;
        if (!win) {
            var $iframe = $(tabDOM + '>.layui-tab-content>.layui-tab-item.layui-show>.admin-iframe');
            if ($iframe.length <= 0) $iframe = $(bodyDOM + '>div>.admin-iframe');
            if ($iframe.length > 0) win = $iframe[0].contentWindow;
        }
        try {  // 可能会跨域
            if (window.hsbTimer) clearTimeout(window.hsbTimer);
            win.layui.jquery('.layui-table-body.layui-table-main').addClass('no-scrollbar');
            window.hsbTimer = setTimeout(function () {
                win.layui.jquery('.layui-table-body.layui-table-main').removeClass('no-scrollbar');
            }, 800);
        } catch (e) {
        }
    };
    /** 判断是否是主框架 */
    admin.isTop = function () {
        return $(bodyDOM).length > 0;
    };
    /** admin提供的事件 */
    admin.events = {
        /* 折叠侧导航 */
        flexible: function () {
            admin.strToWin($(this).data('window')).layui.admin.flexible();
        },
        /* 刷新主体部分 */
        refresh: function () {
            admin.strToWin($(this).data('window')).layui.admin.refresh();
        },
        /* 后退 */
        back: function () {
            admin.strToWin($(this).data('window')).history.back();
        },
        /* 设置主题 */
        theme: function () {
            var option = admin.util.deepClone($(this).data());
            admin.strToWin(option.window).layui.admin.popupRight($.extend({
                id: 'layer-theme', url: option.url || 'tpl/tpl-theme.html'
            }, admin.parseLayerOption(option)));
        },
        /* 打开便签 */
        note: function () {
            var option = admin.util.deepClone($(this).data());
            admin.strToWin(option.window).layui.admin.popupRight($.extend({
                id: 'layer-note', url: option.url || 'tpl/tpl-note.html'
            }, admin.parseLayerOption(option)));
        },
        /* 打开消息 */
        message: function () {
            var option = admin.util.deepClone($(this).data());
            admin.strToWin(option.window).layui.admin.popupRight($.extend({
                id: 'layer-notice', url: option.url || 'tpl/tpl-message.html'
            }, admin.parseLayerOption(option)));
        },
        /* 打开修改密码弹窗 */
        psw: function () {
            var option = admin.util.deepClone($(this).data());
            admin.strToWin(option.window).layui.admin.open($.extend({
                id: 'layer-psw', title: '修改密码', shade: 0, url: option.url || 'tpl/tpl-password.html'
            }, admin.parseLayerOption(option)));
        },
        /* 退出登录 */
        logout: function () {
            var option = admin.util.deepClone($(this).data());
            admin.unlockScreen();
            function doLogout() {
                if (option.ajax) {
                    var loadIndex = layer.load(2);
                    admin.req(option.ajax, function (res) {
                        layer.close(loadIndex);
                        if (option.parseData) {
                            try {
                                var parseData = new Function('res', option.parseData);
                                res = parseData(res);
                            } catch (e) {
                                console.error(e);
                            }
                        }
                        if (res.code == (option.code || 0)) {
                            setter.removeToken && setter.removeToken();
                            location.replace(option.url || '/');
                        } else {
                            layer.msg(res.msg, {icon: 2});
                        }
                    }, option.method || 'delete');
                } else {
                    setter.removeToken && setter.removeToken();
                    location.replace(option.url || '/');
                }
            }
            if (false === option.confirm || 'false' === option.confirm) return doLogout();
            admin.strToWin(option.window).layui.layer.confirm(option.content || '确定要退出登录吗?', $.extend({
                title: '温馨提示', skin: 'layui-layer-admin', shade: .1
            }, admin.parseLayerOption(option)), function () {
                doLogout();
            });
        },
        /* 打开弹窗 */
        open: function () {
            var option = admin.util.deepClone($(this).data());
            admin.strToWin(option.window).layui.admin.open(admin.parseLayerOption(option));
        },
        /* 打开右侧弹窗 */
        popupRight: function () {
            var option = admin.util.deepClone($(this).data());
            admin.strToWin(option.window).layui.admin.popupRight(admin.parseLayerOption(option));
        },
        /* 全屏 */
        fullScreen: function () {
            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 wss = new ActiveXObject('WScript.Shell');
                    wss && wss.SendKeys('{F11}');
                }
                $ti.addClass(ic).removeClass(ac);
            }
        },
        /* 左滑动tab */
        leftPage: function () {
            admin.strToWin($(this).data('window')).layui.admin.rollPage('left');
        },
        /* 右滑动tab */
        rightPage: function () {
            admin.strToWin($(this).data('window')).layui.admin.rollPage();
        },
        /* 关闭当前选项卡 */
        closeThisTabs: function () {
            var url = $(this).data('url');
            admin.strToWin($(this).data('window')).layui.admin.closeThisTabs(url);
        },
        /* 关闭其他选项卡 */
        closeOtherTabs: function () {
            admin.strToWin($(this).data('window')).layui.admin.closeOtherTabs();
        },
        /* 关闭所有选项卡 */
        closeAllTabs: function () {
            admin.strToWin($(this).data('window')).layui.admin.closeAllTabs();
        },
        /* 关闭当前弹窗(智能) */
        closeDialog: function () {
            if ($(this).parents('.layui-layer').length > 0) admin.closeDialog(this);
            else admin.closeDialog();
        },
        /* 关闭当前iframe弹窗 */
        closeIframeDialog: function () {
            admin.closeDialog();
        },
        /* 关闭当前页面层弹窗 */
        closePageDialog: function () {
            admin.closeDialog(this);
        },
        /* 锁屏 */
        lockScreen: function () {
            admin.strToWin($(this).data('window')).layui.admin.lockScreen($(this).data('url'));
        }
    };
    /** 选择位置 */
    admin.chooseLocation = function (param) {
        var dialogTitle = param.title;  // 弹窗标题
        var onSelect = param.onSelect;  // 选择回调
        var needCity = param.needCity;  // 是否返回行政区
        var mapCenter = param.center;  // 地图中心
        var defaultZoom = param.defaultZoom;  // 地图默认缩放级别
        var pointZoom = param.pointZoom;  // 选中时地图缩放级别
        var searchKeywords = param.keywords;  // poi检索关键字
        var searchPageSize = param.pageSize;  // poi检索最大数量
        var mapJsUrl = param.mapJsUrl;  // 高德地图js的url
        if (dialogTitle === undefined) dialogTitle = '选择位置';
        if (defaultZoom === undefined) defaultZoom = 11;
        if (pointZoom === undefined) pointZoom = 17;
        if (searchKeywords === undefined) searchKeywords = '';
        if (searchPageSize === undefined) searchPageSize = 30;
        if (mapJsUrl === undefined) mapJsUrl = 'https://webapi.amap.com/maps?v=1.4.14&key=006d995d433058322319fa797f2876f5';
        var isSelMove = false, selLocation;
        // 搜索附近
        var searchNearBy = function (lat, lng) {
            AMap.service(['AMap.PlaceSearch'], function () {
                var placeSearch = new AMap.PlaceSearch({
                    type: '', pageSize: searchPageSize, pageIndex: 1
                });
                var cpoint = [lng, lat];
                placeSearch.searchNearBy(searchKeywords, cpoint, 1000, function (status, result) {
                    if (status === 'complete') {
                        var pois = result.poiList.pois;
                        var htmlList = '';
                        for (var i = 0; i < pois.length; i++) {
                            var poiItem = pois[i];
                            if (poiItem.location !== undefined) {
                                htmlList += '<div data-lng="' + poiItem.location.lng + '" data-lat="' + poiItem.location.lat + '" class="ew-map-select-search-list-item">';
                                htmlList += '     <div class="ew-map-select-search-list-item-title">' + poiItem.name + '</div>';
                                htmlList += '     <div class="ew-map-select-search-list-item-address">' + poiItem.address + '</div>';
                                htmlList += '     <div class="ew-map-select-search-list-item-icon-ok layui-hide"><i class="layui-icon layui-icon-ok-circle"></i></div>';
                                htmlList += '</div>';
                            }
                        }
                        $('#ew-map-select-pois').html(htmlList);
                    }
                });
            });
        };
        // 渲染地图
        var renderMap = function () {
            var mapOption = {
                resizeEnable: true, // 监控地图容器尺寸变化
                zoom: defaultZoom  // 初缩放级别
            };
            mapCenter && (mapOption.center = mapCenter);
            var map = new AMap.Map('ew-map-select-map', mapOption);
            // 地图加载完成
            map.on('complete', function () {
                var center = map.getCenter();
                searchNearBy(center.lat, center.lng);
            });
            // 地图移动结束事件
            map.on('moveend', function () {
                if (isSelMove) {
                    isSelMove = false;
                } else {
                    $('#ew-map-select-tips').addClass('layui-hide');
                    $('#ew-map-select-center-img').removeClass('bounceInDown');
                    setTimeout(function () {
                        $('#ew-map-select-center-img').addClass('bounceInDown');
                    });
                    var center = map.getCenter();
                    searchNearBy(center.lat, center.lng);
                }
            });
            // poi列表点击事件
            $('#ew-map-select-pois').off('click').on('click', '.ew-map-select-search-list-item', function () {
                $('#ew-map-select-tips').addClass('layui-hide');
                $('#ew-map-select-pois .ew-map-select-search-list-item-icon-ok').addClass('layui-hide');
                $(this).find('.ew-map-select-search-list-item-icon-ok').removeClass('layui-hide');
                $('#ew-map-select-center-img').removeClass('bounceInDown');
                setTimeout(function () {
                    $('#ew-map-select-center-img').addClass('bounceInDown');
                });
                var lng = $(this).data('lng');
                var lat = $(this).data('lat');
                var name = $(this).find('.ew-map-select-search-list-item-title').text();
                var address = $(this).find('.ew-map-select-search-list-item-address').text();
                selLocation = {name: name, address: address, lat: lat, lng: lng};
                isSelMove = true;
                map.setZoomAndCenter(pointZoom, [lng, lat]);
            });
            // 确定按钮点击事件
            $('#ew-map-select-btn-ok').click(function () {
                if (selLocation === undefined) {
                    layer.msg('请点击位置列表选择', {icon: 2, anim: 6});
                } else if (onSelect) {
                    if (needCity) {
                        var loadIndex = layer.load(2);
                        map.setCenter([selLocation.lng, selLocation.lat]);
                        map.getCity(function (result) {
                            layer.close(loadIndex);
                            selLocation.city = result;
                            admin.closeDialog('#ew-map-select-btn-ok');
                            onSelect(selLocation);
                        });
                    } else {
                        admin.closeDialog('#ew-map-select-btn-ok');
                        onSelect(selLocation);
                    }
                } else {
                    admin.closeDialog('#ew-map-select-btn-ok');
                }
            });
            // 搜索提示
            var $inputSearch = $('#ew-map-select-input-search');
            $inputSearch.off('input').on('input', function () {
                var keywords = $(this).val();
                var $selectTips = $('#ew-map-select-tips');
                if (!keywords) {
                    $selectTips.html('');
                    $selectTips.addClass('layui-hide');
                }
                AMap.plugin('AMap.Autocomplete', function () {
                    var autoComplete = new AMap.Autocomplete({city: '全国'});
                    autoComplete.search(keywords, function (status, result) {
                        if (result.tips) {
                            var tips = result.tips;
                            var htmlList = '';
                            for (var i = 0; i < tips.length; i++) {
                                var tipItem = tips[i];
                                if (tipItem.location !== undefined) {
                                    htmlList += '<div data-lng="' + tipItem.location.lng + '" data-lat="' + tipItem.location.lat + '" class="ew-map-select-search-list-item">';
                                    htmlList += '     <div class="ew-map-select-search-list-item-icon-search"><i class="layui-icon layui-icon-search"></i></div>';
                                    htmlList += '     <div class="ew-map-select-search-list-item-title">' + tipItem.name + '</div>';
                                    htmlList += '     <div class="ew-map-select-search-list-item-address">' + tipItem.address + '</div>';
                                    htmlList += '</div>';
                                }
                            }
                            $selectTips.html(htmlList);
                            if (tips.length === 0) $('#ew-map-select-tips').addClass('layui-hide');
                            else $('#ew-map-select-tips').removeClass('layui-hide');
                        } else {
                            $selectTips.html('');
                            $selectTips.addClass('layui-hide');
                        }
                    });
                });
            });
            $inputSearch.off('blur').on('blur', function () {
                var keywords = $(this).val();
                var $selectTips = $('#ew-map-select-tips');
                if (!keywords) {
                    $selectTips.html('');
                    $selectTips.addClass('layui-hide');
                }
            });
            $inputSearch.off('focus').on('focus', function () {
                var keywords = $(this).val();
                if (keywords) $('#ew-map-select-tips').removeClass('layui-hide');
            });
            // tips列表点击事件
            $('#ew-map-select-tips').off('click').on('click', '.ew-map-select-search-list-item', function () {
                $('#ew-map-select-tips').addClass('layui-hide');
                var lng = $(this).data('lng');
                var lat = $(this).data('lat');
                selLocation = undefined;
                map.setZoomAndCenter(pointZoom, [lng, lat]);
            });
        };
        // 显示弹窗
        var htmlStr = [
            '<div class="ew-map-select-tool" style="position: relative;">',
            '     搜索:<input id="ew-map-select-input-search" class="layui-input icon-search inline-block" style="width: 190px;" placeholder="输入关键字搜索" autocomplete="off" />',
            '     <button id="ew-map-select-btn-ok" class="layui-btn icon-btn pull-right" type="button"><i class="layui-icon">&#xe605;</i>确定</button>',
            '     <div id="ew-map-select-tips" class="ew-map-select-search-list layui-hide">',
            '     </div>',
            '</div>',
            '<div class="layui-row ew-map-select">',
            '     <div class="layui-col-sm7 ew-map-select-map-group" style="position: relative;">',
            '          <div id="ew-map-select-map"></div>',
            '          <i id="ew-map-select-center-img2" class="layui-icon layui-icon-add-1"></i>',
            '          <img id="ew-map-select-center-img" src="https://3gimg.qq.com/lightmap/components/locationPicker2/image/marker.png" alt=""/>',
            '     </div>',
            '     <div id="ew-map-select-pois" class="layui-col-sm5 ew-map-select-search-list">',
            '     </div>',
            '</div>'].join('');
        admin.open({
            id: 'ew-map-select', type: 1, title: dialogTitle, area: '750px', content: htmlStr,
            success: function (layero, dIndex) {
                var $content = $(layero).children('.layui-layer-content');
                $content.css('overflow', 'visible');
                admin.showLoading($content);
                if (undefined === window.AMap) {
                    $.getScript(mapJsUrl, function () {
                        renderMap();
                        admin.removeLoading($content);
                    });
                } else {
                    renderMap();
                    admin.removeLoading($content);
                }
            }
        });
    };
    /** 裁剪图片 */
    admin.cropImg = function (param) {
        var uploadedImageType = 'image/jpeg';  // 当前图片的类型
        var aspectRatio = param.aspectRatio;  // 裁剪比例
        var imgSrc = param.imgSrc;  // 裁剪图片
        var imgType = param.imgType;  // 图片类型
        var onCrop = param.onCrop;  // 裁剪完成回调
        var limitSize = param.limitSize;  // 限制选择的图片大小
        var acceptMime = param.acceptMime;  // 限制选择的图片类型
        var imgExts = param.exts;  // 限制选择的图片类型
        var dialogTitle = param.title;  // 弹窗的标题
        if (aspectRatio === undefined) aspectRatio = 1;
        if (dialogTitle === undefined) dialogTitle = '裁剪图片';
        if (imgType) uploadedImageType = imgType;
        layui.use(['Cropper', 'upload'], function () {
            var Cropper = layui.Cropper, upload = layui.upload;
            // 渲染组件
            function renderElem() {
                var imgCropper, $cropImg = $('#ew-crop-img');
                // 上传文件按钮绑定事件
                var uploadOptions = {
                    elem: '#ew-crop-img-upload', auto: false, drag: false,
                    choose: function (obj) {
                        obj.preview(function (index, file, result) {
                            uploadedImageType = file.type;
                            $cropImg.attr('src', result);
                            if (!imgSrc || !imgCropper) {
                                imgSrc = result;
                                renderElem();
                            } else {
                                imgCropper.destroy();
                                imgCropper = new Cropper($cropImg[0], options);
                            }
                        });
                    }
                };
                if (limitSize !== undefined) uploadOptions.size = limitSize;
                if (acceptMime !== undefined) uploadOptions.acceptMime = acceptMime;
                if (imgExts !== undefined) uploadOptions.exts = imgExts;
                upload.render(uploadOptions);
                // 没有传图片触发上传图片
                if (!imgSrc) return $('#ew-crop-img-upload').trigger('click');
                // 渲染裁剪组件
                var options = {aspectRatio: aspectRatio, preview: '#ew-crop-img-preview'};
                imgCropper = new Cropper($cropImg[0], options);
                // 操作按钮绑定事件
                $('.ew-crop-tool').on('click', '[data-method]', function () {
                    var data = $(this).data(), cropped, result;
                    if (!imgCropper || !data.method) return;
                    data = $.extend({}, data);
                    cropped = imgCropper.cropped;
                    switch (data.method) {
                        case 'rotate':
                            if (cropped && options.viewMode > 0) imgCropper.clear();
                            break;
                        case 'getCroppedCanvas':
                            if (uploadedImageType === 'image/jpeg') {
                                if (!data.option) data.option = {};
                                data.option.fillColor = '#fff';
                            }
                            break;
                    }
                    result = imgCropper[data.method](data.option, data.secondOption);
                    switch (data.method) {
                        case 'rotate':
                            if (cropped && options.viewMode > 0) imgCropper.crop();
                            break;
                        case 'scaleX':
                        case 'scaleY':
                            $(this).data('option', -data.option);
                            break;
                        case 'getCroppedCanvas':
                            if (result) {
                                onCrop && onCrop(result.toDataURL(uploadedImageType));
                                admin.closeDialog('#ew-crop-img');
                            } else {
                                layer.msg('裁剪失败', {icon: 2, anim: 6});
                            }
                            break;
                    }
                });
            }
            // 显示弹窗
            var htmlStr = [
                '<div class="layui-row">',
                '     <div class="layui-col-sm8" style="min-height: 9rem;">',
                '          <img id="ew-crop-img" src="', imgSrc || '', '" style="max-width:100%;" alt=""/>',
                '     </div>',
                '     <div class="layui-col-sm4 layui-hide-xs" style="padding: 15px;text-align: center;">',
                '          <div id="ew-crop-img-preview" style="width: 100%;height: 9rem;overflow: hidden;display: inline-block;border: 1px solid #dddddd;"></div>',
                '     </div>',
                '</div>',
                '<div class="text-center ew-crop-tool" style="padding: 15px 10px 5px 0;">',
                '     <div class="layui-btn-group" style="margin-bottom: 10px;margin-left: 10px;">',
                '          <button title="放大" data-method="zoom" data-option="0.1" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-add-1"></i></button>',
                '          <button title="缩小" data-method="zoom" data-option="-0.1" class="layui-btn icon-btn" type="button"><span style="display: inline-block;width: 12px;height: 2.5px;background: rgba(255, 255, 255, 0.9);vertical-align: middle;margin: 0 4px;"></span></button>',
                '     </div>',
                '     <div class="layui-btn-group layui-hide-xs" style="margin-bottom: 10px;">',
                '          <button title="向左旋转" data-method="rotate" data-option="-45" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-refresh-1" style="transform: rotateY(180deg) rotate(40deg);display: inline-block;"></i></button>',
                '          <button title="向右旋转" data-method="rotate" data-option="45" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-refresh-1" style="transform: rotate(30deg);display: inline-block;"></i></button>',
                '     </div>',
                '     <div class="layui-btn-group" style="margin-bottom: 10px;">',
                '          <button title="左移" data-method="move" data-option="-10" data-second-option="0" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-left"></i></button>',
                '          <button title="右移" data-method="move" data-option="10" data-second-option="0" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-right"></i></button>',
                '          <button title="上移" data-method="move" data-option="0" data-second-option="-10" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-up"></i></button>',
                '          <button title="下移" data-method="move" data-option="0" data-second-option="10" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-down"></i></button>',
                '     </div>',
                '     <div class="layui-btn-group" style="margin-bottom: 10px;">',
                '          <button title="左右翻转" data-method="scaleX" data-option="-1" class="layui-btn icon-btn" type="button" style="position: relative;width: 41px;"><i class="layui-icon layui-icon-triangle-r" style="position: absolute;left: 9px;top: 0;transform: rotateY(180deg);font-size: 16px;"></i><i class="layui-icon layui-icon-triangle-r" style="position: absolute; right: 3px; top: 0;font-size: 16px;"></i></button>',
                '          <button title="上下翻转" data-method="scaleY" data-option="-1" class="layui-btn icon-btn" type="button" style="position: relative;width: 41px;"><i class="layui-icon layui-icon-triangle-d" style="position: absolute;left: 11px;top: 6px;transform: rotateX(180deg);line-height: normal;font-size: 16px;"></i><i class="layui-icon layui-icon-triangle-d" style="position: absolute; left: 11px; top: 14px;line-height: normal;font-size: 16px;"></i></button>',
                '     </div>',
                '     <div class="layui-btn-group" style="margin-bottom: 10px;">',
                '          <button title="重新开始" data-method="reset" class="layui-btn icon-btn" type="button"><i class="layui-icon layui-icon-refresh"></i></button>',
                '          <button title="选择图片" id="ew-crop-img-upload" class="layui-btn icon-btn" type="button" style="border-radius: 0 2px 2px 0;"><i class="layui-icon layui-icon-upload-drag"></i></button>',
                '     </div>',
                '     <button data-method="getCroppedCanvas" data-option="{ &quot;maxWidth&quot;: 4096, &quot;maxHeight&quot;: 4096 }" class="layui-btn icon-btn" type="button" style="margin-left: 10px;margin-bottom: 10px;"><i class="layui-icon">&#xe605;</i>完成</button>',
                '</div>'].join('');
            admin.open({
                title: dialogTitle, area: '665px', type: 1, content: htmlStr,
                success: function (layero, dIndex) {
                    $(layero).children('.layui-layer-content').css('overflow', 'visible');
                    renderElem();
                }
            });
        });
    };
    /** 工具类 */
    admin.util = {
        /* 百度地图坐标转高德地图坐标 */
        Convert_BD09_To_GCJ02: function (point) {
            var x_pi = (3.14159265358979324 * 3000.0) / 180.0;
            var x = point.lng - 0.0065, y = point.lat - 0.006;
            var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
            var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
            return {lng: z * Math.cos(theta), lat: z * Math.sin(theta)};
        },
        /* 高德地图坐标转百度地图坐标 */
        Convert_GCJ02_To_BD09: function (point) {
            var x_pi = (3.14159265358979324 * 3000.0) / 180.0;
            var x = point.lng, y = point.lat;
            var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
            var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
            return {lng: z * Math.cos(theta) + 0.0065, lat: z * Math.sin(theta) + 0.006};
        },
        /* 动态数字 */
        animateNum: function (elem, isThd, delay, grain) {
            isThd = isThd === null || isThd === undefined || isThd === true || isThd === 'true';  // 是否是千分位
            delay = isNaN(delay) ? 500 : delay;   // 动画延迟
            grain = isNaN(grain) ? 100 : grain;   // 动画粒度
            var getPref = function (str) {
                var pref = '';
                for (var i = 0; i < str.length; i++) if (!isNaN(str.charAt(i))) return pref; else pref += str.charAt(i);
            }, getSuf = function (str) {
                var suf = '';
                for (var i = str.length - 1; i >= 0; i--) if (!isNaN(str.charAt(i))) return suf; else suf = str.charAt(i) + suf;
            }, toThd = function (num, isThd) {
                if (!isThd) return num;
                if (!/^[0-9]+.?[0-9]*$/.test(num)) return num;
                num = num.toString();
                return num.replace(num.indexOf('.') > 0 ? /(\d)(?=(\d{3})+(?:\.))/g : /(\d)(?=(\d{3})+(?:$))/g, '$1,');
            };
            $(elem).each(function () {
                var $this = $(this);
                var num = $this.data('num');
                if (!num) {
                    num = $this.text().replace(/,/g, '');  // 内容
                    $this.data('num', num);
                }
                var flag = 'INPUT,TEXTAREA'.indexOf($this.get(0).tagName) >= 0;  // 是否是输入框
                var pref = getPref(num.toString()), suf = getSuf(num.toString());
                var strNum = num.toString().replace(pref, '').replace(suf, '');
                if (isNaN(strNum * 1) || strNum === '0') {
                    flag ? $this.val(num) : $this.html(num);
                    return console.error('not a number');
                }
                var int_dec = strNum.split('.');
                var deciLen = int_dec[1] ? int_dec[1].length : 0;
                var startNum = 0.0, endNum = strNum;
                if (Math.abs(endNum * 1) > 10) startNum = parseFloat(int_dec[0].substring(0, int_dec[0].length - 1) + (int_dec[1] ? '.0' + int_dec[1] : ''));
                var oft = (endNum - startNum) / grain, temp = 0;
                var mTime = setInterval(function () {
                    var str = pref + toThd(startNum.toFixed(deciLen), isThd) + suf;
                    flag ? $this.val(str) : $this.html(str);
                    startNum += oft;
                    temp++;
                    if (Math.abs(startNum) >= Math.abs(endNum * 1) || temp > 5000) {
                        str = pref + toThd(endNum, isThd) + suf;
                        flag ? $this.val(str) : $this.html(str);
                        clearInterval(mTime);
                    }
                }, delay / grain);
            });
        },
        /* 深度克隆对象 */
        deepClone: function (obj) {
            var result;
            var oClass = admin.util.isClass(obj);
            if (oClass === 'Object') result = {};
            else if (oClass === 'Array') result = [];
            else return obj;
            for (var key in obj) {
                if (!obj.hasOwnProperty(key)) continue;
                var copy = obj[key], cClass = admin.util.isClass(copy);
                if (cClass === 'Object') result[key] = arguments.callee(copy); // 递归调用
                else if (cClass === 'Array') result[key] = arguments.callee(copy);
                else result[key] = obj[key];
            }
            return result;
        },
        /* 获取变量类型 */
        isClass: function (o) {
            if (o === null) return 'Null';
            if (o === undefined) return 'Undefined';
            return Object.prototype.toString.call(o).slice(8, -1);
        },
        /* 判断富文本是否为空 */
        fullTextIsEmpty: function (text) {
            if (!text) return true;
            var noTexts = ['img', 'audio', 'video', 'iframe', 'object'];
            for (var i = 0; i < noTexts.length; i++) {
                if (text.indexOf('<' + noTexts[i]) > -1) return false;
            }
            var str = text.replace(/\s*/g, '');  // 去掉所有空格
            if (!str) return true;
            str = str.replace(/&nbsp;/ig, '');  // 去掉所有&nbsp;
            if (!str) return true;
            str = str.replace(/<[^>]+>/g, '');   // 去掉所有html标签
            return !str;
        },
        /* 移除元素的style */
        removeStyle: function (elem, names) {
            if (typeof names === 'string') names = [names];
            for (var i = 0; i < names.length; i++) $(elem).css(names[i], '');
        },
        /* 滚动到顶部 */
        scrollTop: function (elem) {
            $(elem || 'html,body').animate({scrollTop: 0}, 300);
        },
        /* 模板解析 */
        tpl: function (html, data, openCode, closeCode) {
            if (html === undefined || html === null || typeof html !== 'string') return html;
            if (!data) data = {};
            if (!openCode) openCode = '{{';
            if (!closeCode) closeCode = '}}';
            var tool = {
                exp: function (str) {
                    return new RegExp(str, 'g');
                },
                // 匹配满足规则内容
                query: function (type, _, __) {
                    var types = ['#([\\s\\S])+?', '([^{#}])*?'][type || 0];
                    return tool.exp((_ || '') + openCode + types + closeCode + (__ || ''));
                },
                escape: function (str) {
                    return String(str || '').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&amp;')
                        .replace(/</g, '&lt;').replace(/>/g, '&gt;')
                        .replace(/'/g, '&#39;').replace(/"/g, '&quot;');
                },
                error: function (e, tplog) {
                    console.error('Laytpl Error:' + e + '\n' + (tplog || ''));
                },
                parse: function (tpl, data) {
                    var tplog = tpl;
                    try {
                        var jss = tool.exp('^' + openCode + '#'), jsse = tool.exp(closeCode + '$');
                        tpl = tpl.replace(tool.exp(openCode + '#'), openCode + '# ')
                            .replace(tool.exp(closeCode + '}'), '} ' + closeCode).replace(/\\/g, '\\\\')
                            // 不匹配指定区域的内容
                            .replace(tool.exp(openCode + '!(.+?)!' + closeCode), function (str) {
                                str = str.replace(tool.exp('^' + openCode + '!'), '')
                                    .replace(tool.exp('!' + closeCode), '')
                                    .replace(tool.exp(openCode + '|' + closeCode), function (tag) {
                                        return tag.replace(/(.)/g, '\\$1')
                                    });
                                return str
                            })
                            // 匹配JS规则内容
                            .replace(/(?="|')/g, '\\').replace(tool.query(), function (str) {
                                str = str.replace(jss, '').replace(jsse, '');
                                return '";' + str.replace(/\\/g, '') + ';view+="';
                            })
                            // 匹配普通字段
                            .replace(tool.query(1), function (str) {
                                var start = '"+(';
                                if (str.replace(/\s/g, '') === openCode + closeCode) return '';
                                str = str.replace(tool.exp(openCode + '|' + closeCode), '');
                                if (/^=/.test(str)) {
                                    str = str.replace(/^=/, '');
                                    start = '"+_escape_(';
                                }
                                return start + str.replace(/\\/g, '') + ')+"';
                            })
                            // 换行符处理
                            .replace(/\r\n/g, '\\r\\n" + "').replace(/\n/g, '\\n" + "').replace(/\r/g, '\\r" + "');
                        tpl = '"use strict";var view = "' + tpl + '";return view;';
                        tpl = new Function('d, _escape_', tpl);
                        return tpl(data, tool.escape);
                    } catch (e) {
                        tool.error(e, tplog);
                        return tplog;
                    }
                }
            };
            return tool.parse(html, data);
        },
        /* 渲染动态模板 */
        render: function (option) {
            if (typeof option.url === 'string') {
                option.success = function (res) {
                    admin.util.render($.extend({}, option, {url: res}));
                };
                if (option.ajax === 'ajax') admin.ajax(option);
                else admin.req(option.url, option.where, option.success, option.method, option);
                return;
            }
            var html = admin.util.tpl(option.tpl, option.url,
                option.open || setter.tplOpen, option.close || setter.tplClose);
            $(option.elem).next('[ew-tpl-rs]').remove();
            $(option.elem).after(html);
            $(option.elem).next().attr('ew-tpl-rs', '');
            option.done && option.done(option.url);
        }
    };
    /** 锁屏功能 */
    admin.lockScreen = function (url) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.lockScreen(url);
        if (!url) url = 'tpl/tpl-lock-screen.html';
        var $lock = $('#ew-lock-screen-group');
        if ($lock.length > 0) {
            $lock.fadeIn('fast');
            admin.isLockScreen = true;
            admin.putTempData('isLockScreen', admin.isLockScreen, true);
        } else {
            var loadIndex = layer.load(2);
            admin.ajax({
                url: url, dataType: 'html',
                success: function (res) {
                    layer.close(loadIndex);
                    if (typeof res === 'string') {
                        $('body').append('<div id="ew-lock-screen-group">' + res + '</div>');
                        admin.isLockScreen = true;
                        admin.putTempData('isLockScreen', admin.isLockScreen, true);
                        admin.putTempData('lockScreenUrl', url, true);
                    } else {
                        console.error(res);
                        layer.msg(JSON.stringify(res), {icon: 2, anim: 6});
                    }
                }
            });
        }
    };
    /** 解除锁屏 */
    admin.unlockScreen = function (isRemove) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.admin) return top.layui.admin.unlockScreen(isRemove);
        var $lock = $('#ew-lock-screen-group');
        isRemove ? $lock.remove() : $lock.fadeOut('fast');
        admin.isLockScreen = false;
        admin.putTempData('isLockScreen', null, true);
    };
    /** tips方法封装 */
    admin.tips = function (option) {
        return layer.tips(option.text, option.elem, {
            tips: [option.direction || 1, option.bg || '#191a23'],
            tipsMore: option.tipsMore, time: option.time || -1,
            success: function (layero) {
                var $content = $(layero).children('.layui-layer-content');
                if (option.padding || option.padding === 0) $content.css('padding', option.padding);
                if (option.color) $content.css('color', option.color);
                if (option.bgImg) $content.css('background-image', option.bgImg).children('.layui-layer-TipsG').css('z-index', '-1');
                if (option.fontSize) $content.css('font-size', option.fontSize);
                if (!option.offset) return;
                var offset = option.offset.split(',');
                var top = offset[0], left = offset.length > 1 ? offset[1] : undefined;
                if (top) $(layero).css('margin-top', top);
                if (left) $(layero).css('margin-left', left);
            }
        });
    };
    /** 渲染动态模板 */
    admin.renderTpl = function (elem) {
        if (!layui.admin) layui.admin = admin;
        // 解析数据
        function parseData(data) {
            if (!data) return;
            try {
                return new Function('return ' + data + ';')();
            } catch (e) {
                console.error(e + '\nlay-data: ' + data);
            }
        }
        $(elem || '[ew-tpl]').each(function () {
            var $this = $(this);
            var option = admin.util.deepClone($(this).data());
            option.elem = $this;
            option.tpl = $this.html();
            option.url = parseData($this.attr('ew-tpl'));
            option.headers = parseData(option.headers);
            option.where = parseData(option.where);
            if (option.done) {
                try {
                    option.done = new Function('res', option.done);
                } catch (e) {
                    console.error(e + '\nlay-data:' + option.done);
                    option.done = undefined;
                }
            }
            admin.util.render(option);
        });
    };
    /** 事件监听 */
    admin.on = function (events, callback) {
        return layui.onevent.call(this, 'admin', events, callback);
    };
    /** 修改配置信息 */
    admin.putSetting = function (key, value) {
        setter[key] = value;
        admin.putTempData(key, value, true);
    };
    /** 恢复配置信息 */
    admin.recoverState = function () {
        // 恢复锁屏状态
        if (admin.getTempData('isLockScreen', true)) admin.lockScreen(admin.getTempData('lockScreenUrl', true));
        // 恢复配置的主题
        if (setter.defaultTheme) admin.changeTheme(setter.defaultTheme, window, true, true);
        // 恢复页脚状态、导航箭头
        if (setter.closeFooter) $('body').addClass('close-footer');
        if (setter.navArrow !== undefined) {
            var $nav = $(sideDOM + '>.layui-nav-tree');
            $nav.removeClass('arrow2 arrow3');
            if (setter.navArrow) $nav.addClass(setter.navArrow);
        }
        // 恢复tab自动刷新
        if (setter.pageTabs && setter.tabAutoRefresh == 'true') $(tabDOM).attr('lay-autoRefresh', 'true');
    };
    /* 事件监听 */
    admin.on = function (events, callback) {
        return layui.onevent.call(this, 'admin', events, callback);
    };
    /** 侧导航折叠状态下鼠标经过无限悬浮效果 */
    var navItemDOM = '.layui-layout-admin.admin-nav-mini>.layui-side .layui-nav .layui-nav-item';
    $(document).on('mouseenter', navItemDOM + ',' + navItemDOM + ' .layui-nav-child>dd', function () {
        if (admin.getPageWidth() > 768) {
            var $that = $(this), $navChild = $that.find('>.layui-nav-child');
            if ($navChild.length > 0) {
                $that.addClass('admin-nav-hover');
                $navChild.css('left', $that.offset().left + $that.outerWidth());
                var top = $that.offset().top;
                if (top + $navChild.outerHeight() > admin.getPageHeight()) {
                    top = top - $navChild.outerHeight() + $that.outerHeight();
                    if (top < 60) top = 60;
                    $navChild.addClass('show-top');
                }
                $navChild.css('top', top);
                $navChild.addClass('ew-anim-drop-in');
            } else if ($that.hasClass('layui-nav-item')) {
                admin.tips({elem: $that, text: $that.find('cite').text(), direction: 2, offset: '12px'});
            }
        }
    }).on('mouseleave', navItemDOM + ',' + navItemDOM + ' .layui-nav-child>dd', function () {
        layer.closeAll('tips');
        var $this = $(this);
        $this.removeClass('admin-nav-hover');
        var $child = $this.find('>.layui-nav-child');
        $child.removeClass('show-top ew-anim-drop-in');
        $child.css({'left': 'auto', 'top': 'auto'});
    });
    /** 所有ew-event */
    $(document).on('click', '*[ew-event]', function () {
        var te = admin.events[$(this).attr('ew-event')];
        te && te.call(this, $(this));
    });
    /** 所有lay-tips处理 */
    $(document).on('mouseenter', '*[lay-tips]', function () {
        var $this = $(this);
        admin.tips({
            elem: $this, text: $this.attr('lay-tips'), direction: $this.attr('lay-direction'),
            bg: $this.attr('lay-bg'), offset: $this.attr('lay-offset'),
            padding: $this.attr('lay-padding'), color: $this.attr('lay-color'),
            bgImg: $this.attr('lay-bgImg'), fontSize: $this.attr('lay-fontSize')
        });
    }).on('mouseleave', '*[lay-tips]', function () {
        layer.closeAll('tips');
    });
    /** 表单搜索展开更多 */
    $(document).on('click', '.form-search-expand,[search-expand]', function () {
        var $this = $(this);
        var $form = $this.parents('.layui-form').first();
        var expand = $this.data('expand');
        var change = $this.attr('search-expand');
        if (expand === undefined || expand === true) {
            expand = true;
            $this.data('expand', false);
            $this.html('收起 <i class="layui-icon layui-icon-up"></i>');
            var $elem = $form.find('.form-search-show-expand');
            $elem.attr('expand-show', '');
            $elem.removeClass('form-search-show-expand');
        } else {
            expand = false;
            $this.data('expand', true);
            $this.html('展开 <i class="layui-icon layui-icon-down"></i>');
            $form.find('[expand-show]').addClass('form-search-show-expand');
        }
        if (!change) return;
        new Function('d', change)({expand: expand, elem: $this});
    });
    /** select使用fixed定位显示 */
    $(document).on('click.ew-sel-fixed', '.ew-select-fixed .layui-form-select .layui-select-title', function () {
        var $this = $(this), $dl = $this.parent().children('dl'), tTop = $this.offset().top;
        var tWidth = $this.outerWidth(), tHeight = $this.outerHeight(), scrollT = $(document).scrollTop();
        var dWidth = $dl.outerWidth(), dHeight = $dl.outerHeight();
        var top = tTop + tHeight + 5 - scrollT, left = $this.offset().left;
        if (top + dHeight > admin.getPageHeight()) top = top - dHeight - tHeight - 10;
        if (left + dWidth > admin.getPageWidth()) left = left - dWidth + tWidth;
        $dl.css({'left': left, 'top': top, 'min-width': tWidth});
    });
    /** 用于滚动时关闭一些fixed的组件 */
    admin.hideFixedEl = function () {
        $('.ew-select-fixed .layui-form-select').removeClass('layui-form-selected layui-form-selectup');  // select
        $('body>.layui-laydate').remove();  // laydate
    };
    /** 垂直导航栏展开折叠增加过渡效果 */
    $(document).on('click', '.layui-nav-tree>.layui-nav-item a', function () {
        var $this = $(this), $child = $this.siblings('.layui-nav-child'), $parent = $this.parent();
        if ($child.length === 0) return;
        if ($parent.hasClass('admin-nav-hover')) return;
        if ($parent.hasClass('layui-nav-itemed')) {  // 因为layui会处理一遍所以这里状态是相反的
            $child.css('display', 'none').slideDown('fast', function () {
                $(this).css('display', '');
            });
        } else {
            $child.css('display', 'block').slideUp('fast', function () {
                $(this).css('display', '');
            });
        }
        if ($this.parents('.layui-nav').attr('lay-shrink') === '_all') {  // 手风琴效果
            var $siblings = $this.parent().siblings('.layui-nav-itemed');
            $siblings.children('.layui-nav-child').css('display', 'block').slideUp('fast', function () {
                $(this).css('display', '');
            });
            $siblings.removeClass('layui-nav-itemed');
        }
    });
    $('.layui-nav-tree[lay-shrink="all"]').attr('lay-shrink', '_all');  // 让layui不处理手风琴效果
    /** 折叠面板展开折叠增加过渡效果 */
    $(document).on('click', '.layui-collapse>.layui-colla-item>.layui-colla-title', function () {
        var $this = $(this), $content = $this.siblings('.layui-colla-content')
            , $collapse = $this.parent().parent(), isNone = $content.hasClass('layui-show');
        if (isNone) {  // 因为layui会处理一遍所以这里状态是相反的
            $content.removeClass('layui-show').slideDown('fast').addClass('layui-show');
        } else {
            $content.css('display', 'block').slideUp('fast', function () {
                $(this).css('display', '');
            });
        }
        $this.children('.layui-colla-icon').html('&#xe602;')
            .css({'transition': 'all .3s', 'transform': 'rotate(' + (isNone ? '90deg' : '0deg') + ')'});
        if ($collapse.attr('lay-shrink') === '_all') {  // 手风琴效果
            var $show = $collapse.children('.layui-colla-item').children('.layui-colla-content.layui-show').not($content);
            $show.css('display', 'block').slideUp('fast', function () {
                $(this).css('display', '');
            });
            $show.removeClass('layui-show');
            $show.siblings('.layui-colla-title').children('.layui-colla-icon').html('&#xe602;')
                .css({'transition': 'all .3s', 'transform': 'rotate(0deg)'});
        }
    });
    $('.layui-collapse[lay-accordion]').attr('lay-shrink', '_all').removeAttr('lay-accordion');  // 让layui不处理手风琴效果
    /** 表单验证tips提示样式修改 */
    layer.oldTips = layer.tips;
    layer.tips = function (content, follow, options) {
        var $fFip;  // 判断是否是表单验证调用的tips
        if ($(follow).length > 0 && $(follow).parents('.layui-form').length > 0) {
            if ($(follow).is('input') || $(follow).is('textarea')) {
                $fFip = $(follow);
            } else if ($(follow).hasClass('layui-form-select') || $(follow).hasClass('layui-form-radio')
                || $(follow).hasClass('layui-form-checkbox') || $(follow).hasClass('layui-form-switch')) {
                $fFip = $(follow).prev();
            }
        }
        if (!$fFip) return layer.oldTips(content, follow, options);
        options.tips = [$fFip.attr('lay-direction') || 3, $fFip.attr('lay-bg') || '#ff4c4c'];
        setTimeout(function () {
            options.success = function (layero) {
                $(layero).children('.layui-layer-content').css('padding', '6px 12px');
            };
            layer.oldTips(content, follow, options);
        }, 100);
    };
    /** 所有ew-href处理 */
    $(document).on('click', '*[ew-href]', function () {
        var $this = $(this);
        var href = $this.attr('ew-href');
        if (!href || href === '#') return;
        if (href.indexOf('javascript:') === 0) return new Function(href.substring(11))();
        var title = $this.attr('ew-title') || $this.text();
        var win = $this.data('window');
        win ? (win = admin.strToWin(win)) : (win = top);
        var end = $this.attr('ew-end');
        try {
            if (end) end = new Function(end);
            else end = undefined;
        } catch (e) {
            console.error(e);
        }
        if (win.layui && win.layui.index) win.layui.index.openTab({title: title || '', url: href, end: end});
        else location.href = href;
    });
    /** 帮助鼠标右键菜单完成点击空白关闭的功能 */
    if (!layui.contextMenu) {
        $(document).off('click.ctxMenu').on('click.ctxMenu', function () {
            try {
                var ifs = top.window.frames;
                for (var i = 0; i < ifs.length; i++) {
                    var tif = ifs[i];
                    try {  // 可能会跨域
                        if (tif.layui && tif.layui.jquery) tif.layui.jquery('body>.ctxMenu').remove();
                    } catch (e) {
                    }
                }
                try {  // 可能会跨域
                    if (top.layui && top.layui.jquery) top.layui.jquery('body>.ctxMenu').remove();
                } catch (e) {
                }
            } catch (e) {
            }
        });
    }
    /** 读取缓存的配置信息 */
    setter = $.extend({
        pageTabs: true, cacheTab: true, openTabCtxMenu: true, maxTabNum: 20, tableName: 'easyweb-iframe',
        apiNoCache: true, ajaxSuccessBefore: function (res, url, obj) {
            return admin.ajaxSuccessBefore ? admin.ajaxSuccessBefore(res, url, obj) : true;
        }, getAjaxHeaders: function (res, url, obj) {
            return admin.getAjaxHeaders ? admin.getAjaxHeaders(res, url, obj) : [];
        }
    }, setter);
    var cache = admin.getTempData(true);
    if (cache) {
        var keys = ['pageTabs', 'cacheTab', 'defaultTheme', 'navArrow', 'closeFooter', 'tabAutoRefresh'];
        for (var i = 0; i < keys.length; i++) if (cache[keys[i]] !== undefined) setter[keys[i]] = cache[keys[i]];
    }
    admin.recoverState();  // 恢复本地配置
    admin.renderTpl();  // 渲染动态模板
    admin.setter = setter;
    if (layui.device().ios) $('body').addClass('ios-iframe-body');  // ios浏览器iframe兼容
    exports('admin', admin);
});
src/main/webapp/static/layui/lay/modules/contextMenu.js
New file
@@ -0,0 +1,228 @@
/** 右键菜单模块 date:2019-02-08   License By http://easyweb.vip */
layui.define(["jquery"], function (exports) {
    var $ = layui.jquery;
    var contextMenu = {
        // 绑定元素
        bind: function (elem, items) {
            $(elem).bind('contextmenu', function (e) {
                contextMenu.show(items, e.clientX, e.clientY, e);
                return false;
            });
        },
        // 在指定坐标显示菜单
        show: function (items, x, y, e) {
            var xy = 'left: ' + x + 'px; top: ' + y + 'px;';
            var htmlStr = '<div class="ctxMenu" style="' + xy + '">';
            htmlStr += contextMenu.getHtml(items, '');
            htmlStr += '   </div>';
            contextMenu.remove();
            $('body').append(htmlStr);
            // 调整溢出位置
            var $ctxMenu = $('.ctxMenu');
            if (x + $ctxMenu.outerWidth() > contextMenu.getPageWidth()) {
                x -= $ctxMenu.outerWidth();
            }
            if (y + $ctxMenu.outerHeight() > contextMenu.getPageHeight()) {
                y = y - $ctxMenu.outerHeight();
                if (y < 0) {
                    y = 0;
                }
            }
            $ctxMenu.css({'top': y, 'left': x});
            // 添加item点击事件
            contextMenu.setEvents(items, e);
            // 显示子菜单事件
            $('.ctxMenu-item').on('mouseenter', function (e) {
                e.stopPropagation();
                $(this).parent().find('.ctxMenu-sub').css('display', 'none');
                if (!$(this).hasClass('haveMore')) return;
                var $item = $(this).find('>a');
                var $sub = $(this).find('>.ctxMenu-sub');
                var top = $item.offset().top - $('body,html').scrollTop();
                var left = $item.offset().left + $item.outerWidth() - $('body,html').scrollLeft();
                if (left + $sub.outerWidth() > contextMenu.getPageWidth()) {
                    left = $item.offset().left - $sub.outerWidth();
                }
                if (top + $sub.outerHeight() > contextMenu.getPageHeight()) {
                    top = top - $sub.outerHeight() + $item.outerHeight();
                    if (top < 0) {
                        top = 0;
                    }
                }
                $(this).find('>.ctxMenu-sub').css({
                    'top': top,
                    'left': left,
                    'display': 'block'
                });
            })/*.on('mouseleave', function () {
                $(this).find('>.ctxMenu-sub').css('display', 'none');
            })*/;
        },
        // 移除所有
        remove: function () {
            var ifs = parent.window.frames;
            for (var i = 0; i < ifs.length; i++) {
                var tif = ifs[i];
                try {
                    tif.layui.jquery('body>.ctxMenu').remove();
                } catch (e) {
                }
            }
            try {
                parent.layui.jquery('body>.ctxMenu').remove();
            } catch (e) {
            }
        },
        // 设置事件监听
        setEvents: function (items, event) {
            $('.ctxMenu').off('click').on('click', '[lay-id]', function (e) {
                var itemId = $(this).attr('lay-id');
                var item = getItemById(itemId, items);
                item.click && item.click(e, event);
            });
            function getItemById(id, list) {
                for (var i = 0; i < list.length; i++) {
                    var one = list[i];
                    if (id == one.itemId) {
                        return one;
                    } else if (one.subs && one.subs.length > 0) {
                        var temp = getItemById(id, one.subs);
                        if (temp) {
                            return temp;
                        }
                    }
                }
            }
        },
        // 构建无限级
        getHtml: function (items, pid) {
            var htmlStr = '';
            for (var i = 0; i < items.length; i++) {
                var item = items[i];
                item.itemId = 'ctxMenu-' + pid + i;
                if (item.subs && item.subs.length > 0) {
                    htmlStr += '<div class="ctxMenu-item haveMore" lay-id="' + item.itemId + '">';
                    htmlStr += '<a>';
                    if (item.icon) {
                        htmlStr += '<i class="' + item.icon + ' ctx-icon"></i>';
                    }
                    htmlStr += item.name;
                    htmlStr += '<i class="layui-icon layui-icon-right icon-more"></i>';
                    htmlStr += '</a>';
                    htmlStr += '<div class="ctxMenu-sub" style="display: none;">';
                    htmlStr += contextMenu.getHtml(item.subs, pid + i);
                    htmlStr += '</div>';
                } else {
                    htmlStr += '<div class="ctxMenu-item" lay-id="' + item.itemId + '">';
                    htmlStr += '<a>';
                    if (item.icon) {
                        htmlStr += '<i class="' + item.icon + ' ctx-icon"></i>';
                    }
                    htmlStr += item.name;
                    htmlStr += '</a>';
                }
                htmlStr += '</div>';
                if (item.hr == true) {
                    htmlStr += '<hr/>';
                }
            }
            return htmlStr;
        },
        // 获取css代码
        getCommonCss: function () {
            var cssStr = '.ctxMenu, .ctxMenu-sub {';
            cssStr += '        max-width: 250px;';
            cssStr += '        min-width: 110px;';
            cssStr += '        background: white;';
            cssStr += '        border-radius: 2px;';
            cssStr += '        padding: 5px 0;';
            cssStr += '        white-space: nowrap;';
            cssStr += '        position: fixed;';
            cssStr += '        z-index: 2147483647;';
            cssStr += '        box-shadow: 0 2px 4px rgba(0, 0, 0, .12);';
            cssStr += '        border: 1px solid #d2d2d2;';
            cssStr += '        overflow: visible;';
            cssStr += '   }';
            cssStr += '   .ctxMenu-item {';
            cssStr += '        position: relative;';
            cssStr += '   }';
            cssStr += '   .ctxMenu-item > a {';
            cssStr += '        font-size: 14px;';
            cssStr += '        color: #666;';
            cssStr += '        padding: 0 26px 0 35px;';
            cssStr += '        cursor: pointer;';
            cssStr += '        display: block;';
            cssStr += '        line-height: 36px;';
            cssStr += '        text-decoration: none;';
            cssStr += '        position: relative;';
            cssStr += '   }';
            cssStr += '   .ctxMenu-item > a:hover {';
            cssStr += '        background: #f2f2f2;';
            cssStr += '        color: #666;';
            cssStr += '   }';
            cssStr += '   .ctxMenu-item > a > .icon-more {';
            cssStr += '        position: absolute;';
            cssStr += '        right: 5px;';
            cssStr += '        top: 0;';
            cssStr += '        font-size: 12px;';
            cssStr += '        color: #666;';
            cssStr += '   }';
            cssStr += '   .ctxMenu-item > a > .ctx-icon {';
            cssStr += '        position: absolute;';
            cssStr += '        left: 12px;';
            cssStr += '        top: 0;';
            cssStr += '        font-size: 15px;';
            cssStr += '        color: #666;';
            cssStr += '   }';
            cssStr += '   .ctxMenu hr {';
            cssStr += '        background-color: #e6e6e6;';
            cssStr += '        clear: both;';
            cssStr += '        margin: 5px 0;';
            cssStr += '        border: 0;';
            cssStr += '        height: 1px;';
            cssStr += '   }';
            cssStr += '   .ctx-ic-lg {';
            cssStr += '        font-size: 18px !important;';
            cssStr += '        left: 11px !important;';
            cssStr += '    }';
            return cssStr;
        },
        // 获取浏览器高度
        getPageHeight: function () {
            return document.documentElement.clientHeight || document.body.clientHeight;
        },
        // 获取浏览器宽度
        getPageWidth: function () {
            return document.documentElement.clientWidth || document.body.clientWidth;
        },
    };
    // 点击任意位置关闭菜单
    $(document).off('click.ctxMenu').on('click.ctxMenu', function () {
        contextMenu.remove();
    });
    // 点击有子菜单的节点不关闭菜单
    $(document).off('click.ctxMenuMore').on('click.ctxMenuMore', '.ctxMenu-item', function (e) {
        if ($(this).hasClass('haveMore')) {
            if (e !== void 0) {
                e.preventDefault();
                e.stopPropagation();
            }
        } else {
            contextMenu.remove();
        }
    });
    $('head').append('<style id="ew-css-ctx">' + contextMenu.getCommonCss() + '</style>');
    exports("contextMenu", contextMenu);
});
src/main/webapp/static/layui/lay/modules/dropdown/dropdown.css
New file
@@ -0,0 +1,618 @@
/** 下拉菜单模块 date:2020-05-04   License By http://easyweb.vip */
.dropdown-no-scroll {
    overflow: hidden;
}
.dropdown-fix-parent {
    z-index: auto !important;
}
/** 遮罩层 */
.dropdown-menu-shade {
    position: fixed;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    z-index: 9998;
    background-color: rgba(0, 0, 0, .1);
}
.dropdown-menu-shade.no-shade {
    background-color: transparent;
}
/** 夜间主题 */
.dropdown-menu-nav.dark, .dropdown-menu-nav.dark .dropdown-menu-nav-child {
    background: #32363F;
    border-color: #484e58;
}
.dropdown-menu-nav.dark > li > a, .dropdown-menu-nav.dark .dropdown-menu-nav-child > li > a {
    color: #a1a8b8;
}
.dropdown-menu-nav.dark > li > a:hover, .dropdown-menu-nav.dark .dropdown-menu-nav-child > li > a:hover {
    background-color: #272b34;
}
.dropdown-menu-nav.dark > li.disabled > a, .dropdown-menu-nav > li.disabled > a:hover,
.dropdown-menu-nav.dark .dropdown-menu-nav-child > li.disabled > a, .dropdown-menu-nav .dropdown-menu-nav-child > li.disabled > a:hover {
    color: #7a8191;
}
.dropdown-menu-nav.dark > hr, .dropdown-menu-nav.dark .dropdown-menu-nav-child > hr {
    background-color: #484e58;
}
.dropdown-menu-nav.dark > li.title, .dropdown-menu-nav.dark .dropdown-menu-nav-child > li.title {
    color: #868b9a;
}
.dropdown-menu-nav.dark .dropdown-anchor {
    border-color: #484e58;
}
.dropdown-menu-nav.dark .dropdown-anchor::after {
    border-color: #32363F;
}
/** 白色主题 */
.dropdown-menu {
    position: relative;
    display: inline-block;
    vertical-align: bottom;
}
.dropdown-menu-nav, .dropdown-menu-nav .dropdown-menu-nav-child {
    position: absolute;
    padding: 5px 0;
    margin: 0;
    overflow: visible;
    min-width: 110px;
    background: #fff;
    border-radius: 2px;
    box-shadow: 0 1px 4px rgba(0, 0, 0, .12);
    border: 1px solid #e4e4e4;
    line-height: initial;
    text-align: left;
    z-index: 9999;
}
.dropdown-menu .dropdown-menu-nav {
    display: none;
}
.dropdown-menu.dropdown-open .dropdown-menu-nav {
    display: block;
}
.dropdown-menu-nav.fixed {
    position: fixed;
}
.dropdown-menu-nav > li, .dropdown-menu-nav-child > li {
    padding: 0;
    margin: 0;
    line-height: 18px;
    user-select: none;
    list-style: none;
    position: relative;
}
.dropdown-menu-nav > li > a, .dropdown-menu-nav-child > li > a {
    display: block;
    color: #555;
    font-size: 14px;
    padding: 10px 15px;
    text-decoration: none;
    white-space: nowrap;
    cursor: pointer;
    user-select: none;
}
.dropdown-menu-nav > li > a:hover, .dropdown-menu-nav-child > li > a:hover {
    background-color: #eeeeee;
}
.dropdown-menu-nav > li .layui-icon, .dropdown-menu-nav-child > li .layui-icon {
    font-size: 14px;
    margin-right: 5px;
}
.dropdown-menu-nav > hr, .dropdown-menu-nav-child > hr {
    height: 1px;
    margin: 3px 0;
    background-color: #e6e6e6;
}
/** 禁用样式 */
.dropdown-menu-nav > li.disabled, .dropdown-menu-nav-child > li.disabled {
    cursor: not-allowed;
}
.dropdown-menu-nav > li.disabled > a, .dropdown-menu-nav > li.disabled > a:hover,
.dropdown-menu-nav-child > li.disabled > a, .dropdown-menu-nav-child > li.disabled > a:hover {
    color: #999;
    cursor: not-allowed;
    pointer-events: none;
    background-color: transparent;
}
/** 标题样式 */
.dropdown-menu-nav > li.title, .dropdown-menu-nav-child > li.title {
    color: #999;
    font-size: 12px;
    padding: 3px 15px;
}
/* nav子菜单 */
.dropdown-menu-nav .dropdown-menu-nav-child {
    left: 100%;
    top: 0;
    display: none;
}
.dropdown-menu-nav .show-left .dropdown-menu-nav-child {
    left: auto;
    right: 100%;
}
.dropdown-menu-nav > li.active > .dropdown-menu-nav-child, .dropdown-menu-nav-child > li.active > .dropdown-menu-nav-child {
    display: block;
}
.dropdown-menu-nav > li.have-more:after, .dropdown-menu-nav-child > li.have-more:after {
    content: "\e602";
    font-family: layui-icon !important;
    font-size: 14px;
    font-style: normal;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    position: absolute;
    right: 4px;
    color: #666;
    top: 50%;
    margin-top: -8px;
}
/** 小箭头 */
.dropdown-menu-nav .dropdown-anchor, .dropdown-menu-nav .dropdown-anchor:after {
    border: 8px solid #e4e4e4;
    position: absolute;
    display: inline-block;
}
.dropdown-menu-nav .dropdown-anchor:after {
    content: '';
    border: 7px solid #fff;
}
/** 下左位置 */
.dropdown-menu-nav.dropdown-bottom-left {
    top: 100%;
}
.dropdown-menu-nav.dropdown-bottom-left {
    margin-top: 8px;
}
.dropdown-menu-nav.dropdown-bottom-left .dropdown-anchor, .dropdown-menu-nav.dropdown-bottom-left .dropdown-anchor:after {
    border-top-color: transparent;
    border-right-color: transparent;
    border-left-color: transparent;
    top: -16px;
}
.dropdown-menu-nav.dropdown-bottom-left .dropdown-anchor:after {
    top: -6px;
    left: -7px;
}
.dropdown-menu-nav.dropdown-bottom-left .dropdown-anchor {
    left: 12px;
}
/** 下右位置 */
.dropdown-menu-nav.dropdown-bottom-right {
    right: 0;
}
.dropdown-menu-nav.dropdown-bottom-right {
    margin-top: 8px;
}
.dropdown-menu-nav.dropdown-bottom-right .dropdown-anchor, .dropdown-menu-nav.dropdown-bottom-right .dropdown-anchor:after {
    border-top-color: transparent;
    border-right-color: transparent;
    border-left-color: transparent;
    top: -16px;
}
.dropdown-menu-nav.dropdown-bottom-right .dropdown-anchor:after {
    top: -6px;
    left: -7px;
}
.dropdown-menu-nav.dropdown-bottom-right .dropdown-anchor {
    right: 12px;
}
/** 下中位置 */
.dropdown-menu-nav.dropdown-bottom-center {
    left: 50%;
    /*transform: translateX(-50%);*/
}
.dropdown-menu-nav.dropdown-bottom-center {
    margin-top: 8px;
}
.dropdown-menu-nav.dropdown-bottom-center .dropdown-anchor, .dropdown-menu-nav.dropdown-bottom-center .dropdown-anchor:after {
    border-top-color: transparent;
    border-right-color: transparent;
    border-left-color: transparent;
    top: -16px;
}
.dropdown-menu-nav.dropdown-bottom-center .dropdown-anchor:after {
    top: -6px;
    left: -7px;
}
.dropdown-menu-nav.dropdown-bottom-center .dropdown-anchor {
    left: calc(50% - 8px);
}
/** 上左位置 */
.dropdown-menu-nav.dropdown-top-left {
    bottom: 100%;
}
.dropdown-menu-nav.dropdown-top-left {
    margin-bottom: 8px;
}
.dropdown-menu-nav.dropdown-top-left .dropdown-anchor, .dropdown-menu-nav.dropdown-top-left .dropdown-anchor:after {
    border-bottom-color: transparent;
    border-right-color: transparent;
    border-left-color: transparent;
    bottom: -16px;
}
.dropdown-menu-nav.dropdown-top-left .dropdown-anchor:after {
    top: -8px;
    left: -7px;
    bottom: auto;
}
.dropdown-menu-nav.dropdown-top-left .dropdown-anchor {
    left: 12px;
}
/** 上右位置 */
.dropdown-menu-nav.dropdown-top-right {
    bottom: 100%;
    right: 0;
}
.dropdown-menu-nav.dropdown-top-right {
    margin-bottom: 8px;
}
.dropdown-menu-nav.dropdown-top-right .dropdown-anchor, .dropdown-menu-nav.dropdown-top-right .dropdown-anchor:after {
    border-bottom-color: transparent;
    border-right-color: transparent;
    border-left-color: transparent;
    bottom: -16px;
}
.dropdown-menu-nav.dropdown-top-right .dropdown-anchor:after {
    top: -8px;
    left: -7px;
    bottom: auto;
}
.dropdown-menu-nav.dropdown-top-right .dropdown-anchor {
    right: 12px;
}
/** 上中位置 */
.dropdown-menu-nav.dropdown-top-center {
    bottom: 100%;
    left: 50%;
    /*transform: translateX(-50%);*/
}
.dropdown-menu-nav.dropdown-top-center {
    margin-bottom: 8px;
}
.dropdown-menu-nav.dropdown-top-center .dropdown-anchor, .dropdown-menu-nav.dropdown-top-center .dropdown-anchor:after {
    border-bottom-color: transparent;
    border-right-color: transparent;
    border-left-color: transparent;
    bottom: -16px;
}
.dropdown-menu-nav.dropdown-top-center .dropdown-anchor:after {
    top: -8px;
    left: -7px;
    bottom: auto;
}
.dropdown-menu-nav.dropdown-top-center .dropdown-anchor {
    left: calc(50% - 8px);
}
/** 左上位置 */
.dropdown-menu-nav.dropdown-left-top {
    right: 100%;
    bottom: 0;
}
.dropdown-menu-nav.dropdown-left-top {
    margin-right: 8px;
}
.dropdown-menu-nav.dropdown-left-top .dropdown-anchor, .dropdown-menu-nav.dropdown-left-top .dropdown-anchor:after {
    border-bottom-color: transparent;
    border-right-color: transparent;
    border-top-color: transparent;
    right: -16px;
}
.dropdown-menu-nav.dropdown-left-top .dropdown-anchor:after {
    top: -7px;
    left: -8px;
    right: auto;
}
.dropdown-menu-nav.dropdown-left-top .dropdown-anchor {
    bottom: 12px;
}
/** 左下位置 */
.dropdown-menu-nav.dropdown-left-bottom {
    right: 100%;
    top: 0;
}
.dropdown-menu-nav.dropdown-left-bottom {
    margin-right: 8px;
}
.dropdown-menu-nav.dropdown-left-bottom .dropdown-anchor, .dropdown-menu-nav.dropdown-left-bottom .dropdown-anchor:after {
    border-bottom-color: transparent;
    border-right-color: transparent;
    border-top-color: transparent;
    right: -16px;
}
.dropdown-menu-nav.dropdown-left-bottom .dropdown-anchor:after {
    top: -7px;
    left: -8px;
    right: auto;
}
.dropdown-menu-nav.dropdown-left-bottom .dropdown-anchor {
    top: 12px;
}
/** 左中位置 */
.dropdown-menu-nav.dropdown-left-center {
    right: 100%;
    top: 50%;
    /*transform: translateY(-50%);*/
}
.dropdown-menu-nav.dropdown-left-center {
    margin-right: 8px;
}
.dropdown-menu-nav.dropdown-left-center .dropdown-anchor, .dropdown-menu-nav.dropdown-left-center .dropdown-anchor:after {
    border-bottom-color: transparent;
    border-right-color: transparent;
    border-top-color: transparent;
    right: -16px;
}
.dropdown-menu-nav.dropdown-left-center .dropdown-anchor:after {
    top: -7px;
    left: -8px;
    right: auto;
}
.dropdown-menu-nav.dropdown-left-center .dropdown-anchor {
    top: calc(50% - 8px);
}
/** 右上位置 */
.dropdown-menu-nav.dropdown-right-top {
    left: 100%;
    bottom: 0;
}
.dropdown-menu-nav.dropdown-right-top {
    margin-left: 8px;
}
.dropdown-menu-nav.dropdown-right-top .dropdown-anchor, .dropdown-menu-nav.dropdown-right-top .dropdown-anchor:after {
    border-bottom-color: transparent;
    border-left-color: transparent;
    border-top-color: transparent;
    left: -16px;
}
.dropdown-menu-nav.dropdown-right-top .dropdown-anchor:after {
    top: -7px;
    left: -6px;
}
.dropdown-menu-nav.dropdown-right-top .dropdown-anchor {
    bottom: 12px;
}
/** 右下位置 */
.dropdown-menu-nav.dropdown-right-bottom {
    left: 100%;
    top: 0;
}
.dropdown-menu-nav.dropdown-right-bottom {
    margin-left: 8px;
}
.dropdown-menu-nav.dropdown-right-bottom .dropdown-anchor, .dropdown-menu-nav.dropdown-right-bottom .dropdown-anchor:after {
    border-bottom-color: transparent;
    border-left-color: transparent;
    border-top-color: transparent;
    left: -16px;
}
.dropdown-menu-nav.dropdown-right-bottom .dropdown-anchor:after {
    top: -7px;
    left: -6px;
}
.dropdown-menu-nav.dropdown-right-bottom .dropdown-anchor {
    top: 12px;
}
/** 右中位置 */
.dropdown-menu-nav.dropdown-right-center {
    left: 100%;
    top: 50%;
    /*transform: translateY(-50%);*/
}
.dropdown-menu-nav.dropdown-right-center {
    margin-left: 8px;
}
.dropdown-menu-nav.dropdown-right-center .dropdown-anchor, .dropdown-menu-nav.dropdown-right-center .dropdown-anchor:after {
    border-bottom-color: transparent;
    border-left-color: transparent;
    border-top-color: transparent;
    left: -16px;
}
.dropdown-menu-nav.dropdown-right-center .dropdown-anchor:after {
    top: -7px;
    left: -6px;
}
.dropdown-menu-nav.dropdown-right-center .dropdown-anchor {
    top: calc(50% - 8px);
}
/** 按钮里面三角形样式 */
.icon-btn .layui-icon-drop {
    margin-right: 0;
    font-size: 14px;
}
.layui-icon-drop:before {
    content: "\e625";
}
.layui-icon-drop.top {
    transform: rotate(180deg);
    display: inline-table;
}
.layui-icon-drop.left {
    transform: rotate(90deg);
    display: inline-table;
}
.layui-icon-drop.right {
    transform: rotate(-90deg);
    display: inline-table;
}
/** 适配btn-container */
.layui-btn-container .dropdown-menu .layui-btn {
    margin: 0;
}
.layui-btn-container .dropdown-menu {
    margin-right: 10px;
    margin-bottom: 10px;
}
.dropdown-menu + .dropdown-menu, .layui-btn + .dropdown-menu, .dropdown-menu + .layui-btn {
    margin-left: 10px;
}
.layui-btn-container input {
    font-size: 14px;
}
/** 气泡确认框 */
.dropdown-popconfirm {
    color: #555;
    font-size: 14px;
    max-width: 230px;
    min-width: 200px;
    width: max-content;
    padding: 15px 15px;
    box-sizing: border-box;
    border: none;
    border-radius: 4px;
    box-shadow: 0 1px 6px rgba(0, 0, 0, .2);
}
.dropdown-popconfirm .layui-icon-help, .dropdown-popconfirm .layui-icon-about {
    font-size: 12px;
    color: #fff;
    height: 16px;
    width: 16px;
    line-height: 16px;
    text-align: center;
    display: inline-block;
    box-sizing: border-box;
    background-color: #FF9900;
    border-radius: 50%;
    margin: -2px 3px 0 0;
    overflow: hidden;
    vertical-align: middle;
}
.dropdown-popconfirm .layui-icon-about {
    background-color: #FF0000;
    position: relative;
}
.dropdown-popconfirm .layui-icon-about:before {
    font-size: 28px;
    position: absolute;
    left: -6px;
    top: 0;
}
.dropdown-popconfirm .dropdown-popconfirm-title > span {
    display: inline-block;
    vertical-align: middle;
}
.dropdown-popconfirm .dropdown-popconfirm-btn {
    margin-top: 12px;
    text-align: right;
}
.dropdown-popconfirm .dropdown-popconfirm-btn .layui-btn {
    height: 24px;
    min-width: 45px;
    line-height: 24px;
    padding: 0;
    font-size: 12px;
    border-radius: 3px;
}
.dropdown-popconfirm .dropdown-popconfirm-btn .layui-btn[btn-cancel] {
    color: #333;
    background: transparent;
}
src/main/webapp/static/layui/lay/modules/dropdown/dropdown.js
New file
@@ -0,0 +1,250 @@
/** 下拉菜单模块 date:2020-05-04   License By http://easyweb.vip */
layui.define(['jquery'], function (exports) {
    var $ = layui.jquery;
    var openClass = 'dropdown-open';
    var disableClass = 'dropdown-disabled';
    var noScrollClass = 'dropdown-no-scroll';
    var shadeClass = 'dropdown-menu-shade';
    var dropdownClass = 'dropdown-menu';
    var dropNavClass = 'dropdown-menu-nav';
    var hoverClass = 'dropdown-hover';
    var fixedClass = 'fixed';
    var noShadeClass = 'no-shade';
    var animClass = 'layui-anim layui-anim-upbit';
    var popAnimClass = 'layui-anim layui-anim-fadein';
    var dropDirect = ['bottom-left', 'bottom-right', 'bottom-center', 'top-left', 'top-right', 'top-center', 'left-top', 'left-bottom', 'left-center', 'right-top', 'right-bottom', 'right-center'];
    if ($('#ew-css-dropdown').length <= 0) {
        layui.link(layui.cache.base + 'dropdown/dropdown.css');
    }
    var dropdown = {
        // 绑定事件
        init: function () {
            // 点击触发
            $(document).off('click.dropdown').on('click.dropdown', '.' + dropdownClass + '>*:first-child', function (event) {
                var $drop = $(this).parent();
                if (!$drop.hasClass(hoverClass)) {
                    if ($drop.hasClass(openClass)) {
                        $drop.removeClass(openClass);
                    } else {
                        dropdown.hideAll();
                        dropdown.show($(this).parent().find('.' + dropNavClass));
                    }
                }
                event.stopPropagation();
            });
            // 点击任何位置关闭所有
            $(document).off('click.dropHide').on('click.dropHide', function (event) {
                dropdown.hideAll();
            });
            // 点击下拉菜单内容部分不关闭
            $(document).off('click.dropNav').on('click.dropNav', '.' + dropNavClass, function (event) {
                event.stopPropagation();
            });
            // hover触发
            var timer, lastDrop, hoverSelector = '.' + dropdownClass + '.' + hoverClass;
            $(document).off('mouseenter.dropdown').on('mouseenter.dropdown', hoverSelector, function (event) {
                if (lastDrop && lastDrop == event.currentTarget) {
                    clearTimeout(timer);
                }
                dropdown.show($(this).find('.' + dropNavClass));
            });
            $(document).off('mouseleave.dropdown').on('mouseleave.dropdown', hoverSelector, function (event) {
                lastDrop = event.currentTarget;
                timer = setTimeout(function () {
                    $(event.currentTarget).removeClass(openClass);
                }, 300);
            });
            // 分离式绑定
            $(document).off('click.dropStand').on('click.dropStand', '[data-dropdown]', function (event) {
                dropdown.showFixed($(this));
                event.stopPropagation();
            });
            // 无限级子菜单
            var hoverNavSelector = '.' + dropNavClass + ' li';
            $(document).off('mouseenter.dropdownNav').on('mouseenter.dropdownNav', hoverNavSelector, function (event) {
                $(this).children('.dropdown-menu-nav-child').addClass(animClass);
                $(this).addClass('active');
            });
            $(document).off('mouseleave.dropdownNav').on('mouseleave.dropdownNav', hoverNavSelector, function (event) {
                $(this).removeClass('active');
                $(this).find('li.active').removeClass('active');
            });
            // 气泡确认弹窗
            $(document).off('click.popconfirm').on('click.popconfirm', '.dropdown-menu-nav [btn-cancel]', function (event) {
                dropdown.hideAll();
                event.stopPropagation();
            });
        },
        // 点击菜单关闭
        openClickNavClose: function () {
            $(document).off('click.dropNavA').on('click.dropNavA', '.' + dropNavClass + '>li>a', function (event) {
                dropdown.hideAll();
                $(this).parentsUntil('.' + dropdownClass).last().parent().removeClass(openClass);
                event.stopPropagation();
            });
        },
        // 关闭所有
        hideAll: function () {
            $('.' + dropdownClass).removeClass(openClass);
            // 隐藏分离式菜单
            $('.' + dropNavClass + '.' + fixedClass).addClass('layui-hide');  // 隐藏分离式菜单
            $('.' + shadeClass).remove();  // 移除遮罩层
            $('body').removeClass(noScrollClass);  // 移除禁止页面滚动
            $('.dropdown-fix-parent').removeClass('dropdown-fix-parent');
            $('[data-dropdown]').removeClass(openClass);
        },
        // 展开非分离式下拉菜单
        show: function ($dropNav) {
            if ($dropNav && $dropNav.length > 0 && !$dropNav.hasClass(disableClass)) {
                if ($dropNav.hasClass('dropdown-popconfirm')) {
                    $dropNav.removeClass(animClass);
                    $dropNav.addClass(popAnimClass);
                } else {
                    $dropNav.removeClass(popAnimClass);
                    $dropNav.addClass(animClass);
                }
                var position;  // 获取位置
                for (var i = 0; i < dropDirect.length; i++) {
                    if ($dropNav.hasClass('dropdown-' + dropDirect[i])) {
                        position = dropDirect[i];
                        break;
                    }
                }
                if (!position) {  // 没有设置位置添加默认位置
                    $dropNav.addClass('dropdown-' + dropDirect[0]);
                    position = dropDirect[0];
                }
                dropdown.forCenter($dropNav, position);
                $dropNav.parent('.' + dropdownClass).addClass(openClass);
                return position;
            }
            return false;
        },
        // 展开分离式菜单
        showFixed: function ($trigger) {
            var $dropNav = $($trigger.data('dropdown')), position;
            if (!$dropNav.hasClass('layui-hide')) {
                dropdown.hideAll();  // 已经展开则隐藏
                return;
            }
            dropdown.hideAll();  // 已经展开则隐藏
            position = dropdown.show($dropNav);  // 获取弹出位置
            if (position) {
                $dropNav.addClass(fixedClass);  // 设置为固定定位
                $dropNav.removeClass('layui-hide');  // 显示下拉菜单
                var topLeft = dropdown.getTopLeft($trigger, $dropNav, position);  // 计算坐标
                topLeft = dropdown.checkPosition($dropNav, $trigger, position, topLeft); // 是否溢出屏幕
                $dropNav.css(topLeft);  // 设置坐标
                $('body').addClass(noScrollClass); // 禁止页面滚动
                var hideShade = ($trigger.attr('no-shade') == 'true');  // 是否隐藏遮罩层
                $('body').append('<div class="' + (hideShade ? (shadeClass + ' ' + noShadeClass) : shadeClass) + ' layui-anim layui-anim-fadein"></div>');  // 添加遮罩层
                // 重置父元素z-index
                $trigger.parentsUntil('body').each(function () {
                    var zIndex = $(this).css('z-index');
                    if (/[0-9]+/.test(zIndex)) {
                        $(this).addClass('dropdown-fix-parent');
                    }
                });
                $trigger.addClass(openClass);
            }
        },
        // 解决绝对定位因动画导致平移失效
        forCenter: function ($dropNav, position) {
            if (!$dropNav.hasClass(fixedClass)) {
                var wTrigger = $dropNav.parent().outerWidth(), hTrigger = $dropNav.parent().outerHeight();
                var wDrop = $dropNav.outerWidth(), hDrop = $dropNav.outerHeight();
                var pParts = position.split('-'), dropSide = pParts[0], dropPosition = pParts[1];  // 显示方向
                if ((dropSide == 'top' || dropSide == 'bottom') && dropPosition == 'center') {
                    $dropNav.css('left', (wTrigger - wDrop) / 2);
                }
                if ((dropSide == 'left' || dropSide == 'right') && dropPosition == 'center') {
                    $dropNav.css('top', (hTrigger - hDrop) / 2);
                }
            }
        },
        // 计算固定定位坐标
        getTopLeft: function ($trigger, $dropdown, position) {
            var widthTrigger = $trigger.outerWidth();
            var heightTrigger = $trigger.outerHeight();
            var widthDropdown = $dropdown.outerWidth();
            var heightDropdown = $dropdown.outerHeight();
            var topTrigger = $trigger.offset().top - $(document).scrollTop();
            var leftTrigger = $trigger.offset().left;
            var rightTrigger = leftTrigger + widthTrigger;
            var top = 0, left = 0;
            var positionParts = position.split('-');
            var anchorSide = positionParts[0];  // 箭头位置
            var anchorPosition = positionParts[1];  // 箭头方向
            if (anchorSide == 'top' || anchorSide == 'bottom') {
                heightDropdown += 8; // 加上margin距离
                switch (anchorPosition) {
                    case 'left':
                        left = leftTrigger;
                        break;
                    case 'center':
                        left = leftTrigger - widthDropdown / 2 + widthTrigger / 2;
                        break;
                    case 'right':
                        left = rightTrigger - widthDropdown;
                }
            }
            if (anchorSide == 'left' || anchorSide == 'right') {
                widthDropdown += 8;  // 加上margin距离
                switch (anchorPosition) {
                    case 'top':
                        top = topTrigger + heightTrigger - heightDropdown;
                        break;
                    case 'center':
                        top = topTrigger - heightDropdown / 2 + heightTrigger / 2;
                        break;
                    case 'bottom':
                        top = topTrigger;
                }
            }
            switch (anchorSide) {
                case 'top':
                    top = topTrigger - heightDropdown;
                    break;
                case 'right':
                    left = leftTrigger + widthTrigger;
                    break;
                case 'bottom':
                    top = topTrigger + heightTrigger;
                    break;
                case 'left':
                    left = leftTrigger - widthDropdown;
            }
            return {top: top, left: left, right: 'auto', bottom: 'auto'};
        },
        // 检查是否溢出屏幕
        checkPosition: function ($dropNav, $trigger, position, topLeft) {
            var aps = position.split('-');
            if ('bottom' == aps[0]) {
                if ((topLeft.top + $dropNav.outerHeight()) > dropdown.getPageHeight()) {
                    topLeft = dropdown.getTopLeft($trigger, $dropNav, 'top-' + aps[1]);
                    $dropNav.removeClass('dropdown-' + position);
                    $dropNav.addClass('dropdown-top-' + aps[1]);
                }
            } else if ('top' == aps[0]) {
                if (topLeft.top < 0) {
                    topLeft = dropdown.getTopLeft($trigger, $dropNav, 'bottom-' + aps[1]);
                    $dropNav.removeClass('dropdown-' + position);
                    $dropNav.addClass('dropdown-bottom-' + aps[1]);
                }
            }
            return topLeft;
        },
        // 获取浏览器高度
        getPageHeight: function () {
            return document.documentElement.clientHeight || document.body.clientHeight;
        },
        // 获取浏览器宽度
        getPageWidth: function () {
            return document.documentElement.clientWidth || document.body.clientWidth;
        }
    };
    dropdown.init();
    exports('dropdown', dropdown);
});
src/main/webapp/static/layui/lay/modules/index.js
New file
@@ -0,0 +1,302 @@
/** EasyWeb iframe v3.1.8 date:2020-05-04 License By http://easyweb.vip */
layui.define(['layer', 'element', 'admin'], function (exports) {
    var $ = layui.jquery;
    var layer = layui.layer;
    var element = layui.element;
    var admin = layui.admin;
    var setter = admin.setter;
    var headerDOM = '.layui-layout-admin>.layui-header';
    var sideDOM = '.layui-layout-admin>.layui-side>.layui-side-scroll';
    var bodyDOM = '.layui-layout-admin>.layui-body';
    var tabDOM = bodyDOM + '>.layui-tab';
    var titleDOM = bodyDOM + '>.layui-body-header';
    var tabFilter = 'admin-pagetabs';
    var navFilter = 'admin-side-nav';
    var tabEndCall = {};  // Tab关闭的事件回调
    var mIsAddTab = false;  // 是否是添加Tab,添加Tab的时候切换不自动刷新
    var index = {homeUrl: undefined, mTabPosition: undefined, mTabList: []};
    /** 渲染主体部分 */
    index.loadView = function (param) {
        if (!param.menuPath) return layer.msg('url不能为空', {icon: 2, anim: 6});
        if (setter.pageTabs) {  // 多标签模式
            var flag;  // 选项卡是否已添加
            $(tabDOM + '>.layui-tab-title>li').each(function () {
                if ($(this).attr('lay-id') === param.menuPath) flag = true;
            });
            if (!flag) {  // 添加选项卡
                if (index.mTabList.length + 1 >= setter.maxTabNum) {
                    layer.msg('最多打开' + setter.maxTabNum + '个选项卡', {icon: 2, anim: 6});
                    return admin.activeNav(index.mTabPosition);
                }
                mIsAddTab = true;
                element.tabAdd(tabFilter, {
                    id: param.menuPath, title: '<span class="title">' + (param.menuName || '') + '</span>',
                    content: '<iframe class="admin-iframe" lay-id="' + param.menuPath + '" src="' + param.menuPath +
                        '" onload="layui.index.hideLoading(this);" frameborder="0"></iframe>'
                });
                admin.showLoading({elem: $('iframe[lay-id="' + param.menuPath + '"]').parent(), size: ''});
                if (param.menuPath !== index.homeUrl) index.mTabList.push(param);  // 记录tab
                if (setter.cacheTab) admin.putTempData('indexTabs', index.mTabList);  // 缓存tab
            }
            if (!param.noChange) element.tabChange(tabFilter, param.menuPath);  // 切换到此tab
        } else {  // 单标签模式
            admin.activeNav(param.menuPath);
            var $contentDom = $(bodyDOM + '>div>.admin-iframe');
            if ($contentDom.length === 0) {
                $(bodyDOM).html([
                    '<div class="layui-body-header">',
                    '   <span class="layui-body-header-title"></span>',
                    '   <span class="layui-breadcrumb pull-right" lay-filter="admin-body-breadcrumb" style="visibility: visible;"></span>',
                    '</div>',
                    '<div style="-webkit-overflow-scrolling: touch;">',
                    '   <iframe class="admin-iframe" lay-id="', param.menuPath, '" src="', param.menuPath, '"',
                    '      onload="layui.index.hideLoading(this);" frameborder="0"></iframe>',
                    '</div>'].join(''));
                admin.showLoading({elem: $('iframe[lay-id="' + param.menuPath + '"]').parent(), size: ''});
            } else {
                admin.showLoading({elem: $contentDom.parent(), size: ''});
                $contentDom.attr('lay-id', param.menuPath).attr('src', param.menuPath);
            }
            $('[lay-filter="admin-body-breadcrumb"]').html(index.getBreadcrumbHtml(param.menuPath));
            index.mTabList.splice(0, index.mTabList.length);
            if (param.menuPath === index.homeUrl) {
                index.mTabPosition = undefined;
                index.setTabTitle($(param.menuName).text() || $(sideDOM + ' [lay-href="' + index.homeUrl + '"]').text() || '主页');
            } else {
                index.mTabPosition = param.menuPath;
                index.mTabList.push(param);
                index.setTabTitle(param.menuName);
            }
            if (!setter.cacheTab) return;
            admin.putTempData('indexTabs', index.mTabList);
            admin.putTempData('tabPosition', index.mTabPosition);
        }
        if (admin.getPageWidth() <= 768) admin.flexible(true); // 移动端自动收起侧导航
    };
    /** 加载主页 */
    index.loadHome = function (param) {
        var cacheTabs = admin.getTempData('indexTabs');  // 获取缓存tab
        var cachePosition = admin.getTempData('tabPosition');
        var recover = (param.loadSetting === undefined || param.loadSetting) && (setter.cacheTab && cacheTabs && cacheTabs.length > 0);
        index.homeUrl = param.menuPath;
        param.noChange = cachePosition ? recover : false;
        if (setter.pageTabs || !recover) index.loadView(param);
        if (recover) {  // 恢复缓存tab
            for (var i = 0; i < cacheTabs.length; i++) {
                cacheTabs[i].noChange = cacheTabs[i].menuPath !== cachePosition;
                if (!cacheTabs[i].noChange || (setter.pageTabs && !param.onlyLast)) index.loadView(cacheTabs[i]);
            }
        }
        admin.removeLoading(undefined, false);
    };
    /** 打开tab */
    index.openTab = function (param) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.index) return top.layui.index.openTab(param);
        if (param.end) tabEndCall[param.url] = param.end;
        index.loadView({menuPath: param.url, menuName: param.title});
    };
    /** 关闭tab */
    index.closeTab = function (url) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.index) return top.layui.index.closeTab(url);
        element.tabDelete(tabFilter, url);
    };
    /** 设置是否记忆Tab */
    index.setTabCache = function (isCache) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.index) return top.layui.index.setTabCache(isCache);
        admin.putSetting('cacheTab', isCache);
        if (!isCache) return index.clearTabCache();
        admin.putTempData('indexTabs', index.mTabList);
        admin.putTempData('tabPosition', index.mTabPosition);
    };
    /** 清除tab记忆 */
    index.clearTabCache = function () {
        admin.putTempData('indexTabs', null);
        admin.putTempData('tabPosition', null);
    };
    /** 设置tab标题 */
    index.setTabTitle = function (title, tabId) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.index) return top.layui.index.setTabTitle(title, tabId);
        if (setter.pageTabs) {
            if (!tabId) tabId = $(tabDOM + '>.layui-tab-title>li.layui-this').attr('lay-id');
            if (tabId) $(tabDOM + '>.layui-tab-title>li[lay-id="' + tabId + '"] .title').html(title || '');
        } else if (title) {
            $(titleDOM + '>.layui-body-header-title').html(title);
            $(titleDOM).addClass('show');
            $(headerDOM).css('box-shadow', '0 1px 0 0 rgba(0, 0, 0, .03)');
        } else {
            $(titleDOM).removeClass('show');
            $(headerDOM).css('box-shadow', '');
        }
    };
    /** 自定义tab标题 */
    index.setTabTitleHtml = function (html) {
        if (window !== top && !admin.isTop() && top.layui && top.layui.index) return top.layui.index.setTabTitleHtml(html);
        if (setter.pageTabs) return;
        if (!html) return $(titleDOM).removeClass('show');
        $(titleDOM).html(html);
        $(titleDOM).addClass('show');
    };
    /** 获取面包屑 */
    index.getBreadcrumb = function (tabId) {
        if (!tabId) tabId = $(bodyDOM + '>div>.admin-iframe').attr('lay-id');
        var breadcrumb = [];
        var $href = $(sideDOM).find('[lay-href="' + tabId + '"]');
        if ($href.length > 0) breadcrumb.push($href.text().replace(/(^\s*)|(\s*$)/g, ''));
        while (true) {
            $href = $href.parent('dd').parent('dl').prev('a');
            if ($href.length === 0) break;
            breadcrumb.unshift($href.text().replace(/(^\s*)|(\s*$)/g, ''));
        }
        return breadcrumb;
    };
    /** 获取面包屑结构 */
    index.getBreadcrumbHtml = function (tabId) {
        var breadcrumb = index.getBreadcrumb(tabId);
        var htmlStr = tabId === index.homeUrl ? '' : ('<a ew-href="' + index.homeUrl + '">首页</a>');
        for (var i = 0; i < breadcrumb.length - 1; i++) {
            if (htmlStr) htmlStr += '<span lay-separator="">/</span>';
            htmlStr += ('<a><cite>' + breadcrumb[i] + '</cite></a>');
        }
        return htmlStr;
    };
    /** 关闭loading */
    index.hideLoading = function (url) {
        if (typeof url !== 'string') url = $(url).attr('lay-id');
        admin.removeLoading($('iframe[lay-id="' + url + '"],' + bodyDOM + ' iframe[lay-id]').parent(), false);
    };
    /** 移动设备遮罩层 */
    var siteShadeDom = '.layui-layout-admin .site-mobile-shade';
    if ($(siteShadeDom).length === 0) $('.layui-layout-admin').append('<div class="site-mobile-shade"></div>');
    $(siteShadeDom).click(function () {
        admin.flexible(true);
    });
    /** 补充tab的dom */
    if (setter.pageTabs && $(tabDOM).length === 0) {
        $(bodyDOM).html([
            '<div class="layui-tab" lay-allowClose="true" lay-filter="', tabFilter, '" lay-autoRefresh="', setter.tabAutoRefresh == 'true', '">',
            '   <ul class="layui-tab-title"></ul><div class="layui-tab-content"></div>',
            '</div>',
            '<div class="layui-icon admin-tabs-control layui-icon-prev" ew-event="leftPage"></div>',
            '<div class="layui-icon admin-tabs-control layui-icon-next" ew-event="rightPage"></div>',
            '<div class="layui-icon admin-tabs-control layui-icon-down">',
            '   <ul class="layui-nav" lay-filter="admin-pagetabs-nav">',
            '      <li class="layui-nav-item" lay-unselect>',
            '         <dl class="layui-nav-child layui-anim-fadein">',
            '            <dd ew-event="closeThisTabs" lay-unselect><a>关闭当前标签页</a></dd>',
            '            <dd ew-event="closeOtherTabs" lay-unselect><a>关闭其它标签页</a></dd>',
            '            <dd ew-event="closeAllTabs" lay-unselect><a>关闭全部标签页</a></dd>',
            '         </dl>',
            '      </li>',
            '   </ul>',
            '</div>'
        ].join(''));
        element.render('nav', 'admin-pagetabs-nav');
    }
    /** 侧导航点击监听 */
    element.on('nav(' + navFilter + ')', function (elem) {
        var $that = $(elem);
        var href = $that.attr('lay-href');
        if (!href || href === '#') return;
        if (href.indexOf('javascript:') === 0) return new Function(href.substring(11))();
        var name = $that.attr('ew-title') || $that.text().replace(/(^\s*)|(\s*$)/g, '');
        var end = $that.attr('ew-end');
        try {
            if (end) end = new Function(end);
            else end = undefined;
        } catch (e) {
            console.error(e);
        }
        index.openTab({url: href, title: name, end: end});
        layui.event.call(this, 'admin', 'side({*})', {href: href});
    });
    /** tab切换监听 */
    element.on('tab(' + tabFilter + ')', function () {
        var layId = $(this).attr('lay-id');
        index.mTabPosition = (layId !== index.homeUrl ? layId : undefined);  // 记录当前Tab位置
        if (setter.cacheTab) admin.putTempData('tabPosition', index.mTabPosition);
        admin.activeNav(layId);
        admin.rollPage('auto');
        if ($(tabDOM).attr('lay-autoRefresh') == 'true' && !mIsAddTab) admin.refresh(layId, true);  // 切换tab刷新
        mIsAddTab = false;
        layui.event.call(this, 'admin', 'tab({*})', {layId: layId});
    });
    /** tab删除监听 */
    element.on('tabDelete(' + tabFilter + ')', function (data) {
        var mTab = index.mTabList[data.index - 1];
        if (mTab) {
            index.mTabList.splice(data.index - 1, 1);
            if (setter.cacheTab) admin.putTempData('indexTabs', index.mTabList);
            tabEndCall[mTab.menuPath] && tabEndCall[mTab.menuPath].call();
            layui.event.call(this, 'admin', 'tabDelete({*})', {layId: mTab.menuPath});
        }
        if ($(tabDOM + '>.layui-tab-title>li.layui-this').length === 0)
            $(tabDOM + '>.layui-tab-title>li:last').trigger('click');  // 解决删除后可能无选中bug
    });
    /** 多系统切换事件 */
    $(document).off('click.navMore').on('click.navMore', '[nav-bind]', function () {
        var navId = $(this).attr('nav-bind');
        $('ul[lay-filter="' + navFilter + '"]').addClass('layui-hide');
        $('ul[nav-id="' + navId + '"]').removeClass('layui-hide');
        $(headerDOM + '>.layui-nav .layui-nav-item').removeClass('layui-this');
        $(this).parent('.layui-nav-item').addClass('layui-this');
        if (admin.getPageWidth() <= 768) admin.flexible(false);  // 展开侧边栏
        layui.event.call(this, 'admin', 'nav({*})', {navId: navId});
    });
    /** 开启Tab右键菜单 */
    if (setter.openTabCtxMenu && setter.pageTabs) {
        layui.use('contextMenu', function () {
            if (!layui.contextMenu) return;
            $(tabDOM + '>.layui-tab-title').off('contextmenu.tab').on('contextmenu.tab', 'li', function (e) {
                var layId = $(this).attr('lay-id');
                layui.contextMenu.show([{
                    icon: 'layui-icon layui-icon-refresh',
                    name: '刷新当前',
                    click: function () {
                        element.tabChange(tabFilter, layId);
                        if ('true' != $(tabDOM).attr('lay-autoRefresh')) admin.refresh(layId);
                    }
                }, {
                    icon: 'layui-icon layui-icon-close-fill ctx-ic-lg',
                    name: '关闭当前',
                    click: function () {
                        admin.closeThisTabs(layId);
                    }
                }, {
                    icon: 'layui-icon layui-icon-unlink',
                    name: '关闭其他',
                    click: function () {
                        admin.closeOtherTabs(layId);
                    }
                }, {
                    icon: 'layui-icon layui-icon-close ctx-ic-lg',
                    name: '关闭全部',
                    click: function () {
                        admin.closeAllTabs();
                    }
                }], e.clientX, e.clientY);
                return false;
            });
        });
    }
    exports('index', index);
});
src/main/webapp/static/layui/lay/modules/notice/1.wav
Binary files differ
src/main/webapp/static/layui/lay/modules/notice/2.wav
Binary files differ
src/main/webapp/static/layui/lay/modules/notice/3.wav
Binary files differ
src/main/webapp/static/layui/lay/modules/notice/4.wav
Binary files differ
src/main/webapp/static/layui/lay/modules/notice/5.wav
Binary files differ
src/main/webapp/static/layui/lay/modules/notice/6.wav
Binary files differ
src/main/webapp/static/layui/lay/modules/notice/notice.css
New file
@@ -0,0 +1,1929 @@
.iziToast-capsule {
    font-size: 0;
    height: 0;
    width: 100%;
    transform: translateZ(0);
    backface-visibility: hidden;
    transition: transform 0.5s cubic-bezier(0.25, 0.8, 0.25, 1), height 0.5s cubic-bezier(0.25, 0.8, 0.25, 1);
}
.iziToast-capsule, .iziToast-capsule * {
    box-sizing: border-box;
}
.iziToast-overlay {
    display: block;
    position: fixed;
    top: -100px;
    left: 0;
    right: 0;
    bottom: -100px;
    z-index: 19891100;
}
.iziToast {
    display: inline-block;
    clear: both;
    position: relative;
    font-family: 'Lato', Tahoma, Arial;
    font-size: 14px;
    padding: 8px 45px 9px 0;
    background: #fff;
    border-color: #fff;
    width: 100%;
    pointer-events: all;
    cursor: default;
    transform: translateX(0);
    -webkit-touch-callout: none /* iOS Safari */;
    -webkit-user-select: none /* Chrome/Safari/Opera */;
    -khtml-user-select: none /* Konqueror */;
    -moz-user-select: none /* Firefox */;
    -ms-user-select: none /* Internet Explorer/Edge */;
    user-select: none;
    min-height: 45px;
    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
    max-width: 90%;
    margin: 5px 0;
    border-radius: 4px;
}
.iziToast > .iziToast-progressbar {
    position: absolute;
    left: 0;
    bottom: 0;
    width: 100%;
    z-index: 1;
    background: rgba(255, 255, 255, 0.5);
}
.iziToast > .iziToast-progressbar > div {
    height: 2px;
    width: 100%;
    background: #dddddd;
    border-radius: 0 0 3px 3px;
}
.iziToast.iziToast-theme-dark > .iziToast-progressbar > div {
    background: #fff;
}
.iziToast.iziToast-balloon:before {
    content: '';
    position: absolute;
    right: 8px;
    left: auto;
    width: 0px;
    height: 0px;
    top: 100%;
    border-right: 0px solid transparent;
    border-left: 15px solid transparent;
    border-top: 10px solid #000;
    border-top-color: inherit;
    border-radius: 0;
}
.iziToast.iziToast-balloon .iziToast-progressbar {
    top: 0;
    bottom: auto;
}
.iziToast.iziToast-balloon > div {
    border-radius: 0 0 0 3px;
}
.iziToast > .iziToast-cover {
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    height: 100%;
    margin: 0;
    background-size: 100%;
    background-position: 50% 50%;
    background-repeat: no-repeat;
}
.iziToast > .iziToast-close {
    position: absolute;
    right: 0;
    top: 0;
    border: 0;
    padding: 0;
    opacity: 0.6;
    width: 42px;
    height: 100%;
    background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAJPAAACTwBcGfW0QAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAD3SURBVFiF1ZdtDoMgDEBfdi4PwAX8vLFn0qT7wxantojKupmQmCi8R4tSACpgjC2ICCUbEBa8ingjsU1AXRBeR8aLN64FiknswN8CYefBBDQ3whuFESy7WyQMeC0ipEI0A+0FeBvHUFN8xPaUhAH/iKoWsnXHGegy4J0yxialOfaHJAz4bhRzQzgDvdGnz4GbAonZbCQMuBm1K/kcFu8Mp1N2cFFpsxsMuJqqbIGExGl4loARajU1twskJLLhIsID7+tvUoDnIjTg5T9DPH9EBrz8rxjPzciAl9+O8SxI8CzJ8CxKFfh3ynK8Dyb8wNHM/XDqejx/AtNyPO87tNybAAAAAElFTkSuQmCC") no-repeat 50% 50%;
    background-size: 8px;
    cursor: pointer;
    outline: none;
}
.iziToast > .iziToast-close:hover {
    opacity: 1;
}
.iziToast > .iziToast-body {
    position: relative;
    padding: 0 0 0 10px;
    height: auto;
    min-height: 28px;
    margin: 0 0 0 15px;
    text-align: left;
}
.iziToast > .iziToast-body:after {
    content: "";
    display: table;
    clear: both;
}
.iziToast > .iziToast-body .iziToast-texts {
    margin: 6px 0;
    padding-right: 2px;
    display: inline-block;
    float: left;
}
.iziToast > .iziToast-body .iziToast-inputs {
    min-height: 19px;
    float: left;
    margin: 3px -2px;
}
.iziToast > .iziToast-body .iziToast-inputs > input:not([type=checkbox]):not([type=radio]),
.iziToast > .iziToast-body .iziToast-inputs > select {
    position: relative;
    display: inline-block;
    margin: 2px;
    border-radius: 2px;
    border: 0;
    padding: 4px 7px;
    font-size: 13px;
    letter-spacing: 0.02em;
    background: rgba(0, 0, 0, 0.1);
    color: #000;
    box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2);
    min-height: 26px;
}
.iziToast > .iziToast-body .iziToast-inputs > input:not([type=checkbox]):not([type=radio]):focus,
.iziToast > .iziToast-body .iziToast-inputs > select:focus {
    box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.6);
}
.iziToast > .iziToast-body .iziToast-buttons {
    min-height: 17px;
    float: left;
    margin: 4px 0 0 0;
}
.iziToast > .iziToast-body .iziToast-buttons > a,
.iziToast > .iziToast-body .iziToast-buttons > button,
.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]) {
    position: relative;
    display: inline-block;
    margin: 2px;
    border-radius: 2px;
    border: 0;
    padding: 5px 10px;
    font-size: 12px;
    letter-spacing: 0.02em;
    cursor: pointer;
    background: rgba(0, 0, 0, 0.1);
    color: #555;
}
.iziToast > .iziToast-body .iziToast-buttons > a:hover,
.iziToast > .iziToast-body .iziToast-buttons > button:hover,
.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]):hover {
    background: rgba(0, 0, 0, 0.15);
}
.iziToast > .iziToast-body .iziToast-buttons > a:focus,
.iziToast > .iziToast-body .iziToast-buttons > button:focus,
.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]):focus {
    box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.6);
}
.iziToast > .iziToast-body .iziToast-buttons > a:active,
.iziToast > .iziToast-body .iziToast-buttons > button:active,
.iziToast > .iziToast-body .iziToast-buttons > input:not([type=checkbox]):not([type=radio]):active {
    top: 1px;
}
.iziToast > .iziToast-body .iziToast-icon {
    height: 100%;
    position: absolute;
    left: 0;
    top: 50%;
    display: table;
    font-size: 23px;
    line-height: 24px;
    margin-top: -11px;
    color: #000;
    width: 24px;
    height: 24px;
}
.iziToast > .iziToast-body .iziToast-icon.ico-info {
    background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTU1NzcxMTk5MzYwIiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEwODAzIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTUxMiAyOC40MTZjLTI2Ny40Njg4IDAtNDg0LjI0OTYgMjE2LjgzMi00ODQuMjQ5NiA0ODQuMjQ5NiAwIDI2Ny40MTc2IDIxNi44MzIgNDg0LjI0OTYgNDg0LjI0OTYgNDg0LjI0OTYgMjY3LjQxNzYgMCA0ODQuMzAwOC0yMTYuODMyIDQ4NC4zMDA4LTQ4NC4yNDk2Qzk5Ni4zMDA4IDI0NS4yNDggNzc5LjQxNzYgMjguNDE2IDUxMiAyOC40MTZ6TTQ1NS41MjY0IDI0NS4wOTQ0QzQ3MC4zMjMyIDIyOS44ODggNDkwLjcwMDggMjIxLjMzNzYgNTExLjc5NTIgMjIxLjY0NDhjMjEuMTk2OC0wLjIwNDggNDEuNzc5MiA4LjI0MzIgNTYuNTI0OCAyMy40NDk2IDE1LjAwMTYgMTQuNzk2OCAyMy4yOTYgMzUuMTIzMiAyMy4wOTEyIDU2LjExNTIgMC4yMDQ4IDIxLjE5NjgtOC4yOTQ0IDQxLjU3NDQtMjMuMzk4NCA1Ni4yMTc2LTE0LjY5NDQgMTQuNjk0NC0zNC43MTM2IDIzLjA0LTU1LjM5ODQgMjMuMDRMNTExLjc5NTIgMzgwLjQ2NzJjLTIwLjk5MiAwLjIwNDgtNDEuMzY5Ni04LjE0MDgtNTYuMDY0LTIzLjE0MjRDNDQwLjY3ODQgMzQyLjY4MTYgNDMyLjMzMjggMzIyLjMwNCA0MzIuNTM3NiAzMDEuMjA5NiA0MzIuMzMyOCAyODAuMjE3NiA0NDAuNjc4NCAyNTkuODkxMiA0NTUuNTI2NCAyNDUuMDk0NHpNNjI3LjYwOTYgNzY4LjE1MzZsMCAxMy40MTQ0IDAgMjIuMjIwOEwzOTYuMjg4IDgwMy43ODg4bDAtNTcuMTM5MiAyMS42MDY0LTAuNzY4YzEwLjI0LTAuNDYwOCAxNC41OTItMi43MTM2IDE2Ljk5ODQtNC43NjE2bDEuMjI4OC01LjQyNzJjMC45NzI4LTUuNTgwOCAxLjYzODQtMTQuNDM4NCAxLjU4NzItMjUuOTA3Mkw0MzcuNzA4OCA1MDcuOTA0YzAuMjU2LTE3Ljc2NjQtMi4zNTUyLTI5LjkwMDgtMy40ODE2LTMyLjU2MzJsMCAwTDQzMS42MTYgNDc0LjA2MDhDNDI4Ljg1MTIgNDczLjA4OCA0MjMuOTM2IDQ3Mi4wNjQgNDE3LjE3NzYgNDcxLjY1NDRMMzk2LjI4OCA0NzAuMzc0NCAzOTYuMjg4IDQxMy40OTEybDE4OS40OTEyIDAgMCAyOTYuMjk0NGMtMC4zMDcyIDE3LjcxNTIgMi40MDY0IDI5Ljc5ODQgMy40MzA0IDMyLjU2MzJsMC4wNTEyIDAgMi43MTM2IDEuMTc3NmMyLjgxNiAwLjk3MjggNy43ODI0IDEuOTk2OCAxNC42OTQ0IDIuMzU1MmwyMC44ODk2IDEuMjhMNjI3LjU1ODQgNzY4LjE1MzZ6IiBwLWlkPSIxMDgwNCIgZmlsbD0iIzQwOUVGRiI+PC9wYXRoPjwvc3ZnPg==") no-repeat 50% 50%;
    background-size: 85%;
}
.iziToast > .iziToast-body .iziToast-icon.ico-warning {
    background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTU1NzcwODczNzUzIiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjUxMTgiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNTEyLjAyMzI3MyAxMDI0Qzc5NC43NjM2MzYgMTAyNCAxMDI0IDc5NC43ODY5MDkgMTAyNCA1MTEuOTc2NzI3IDEwMjQgMjI5LjIzNjM2NCA3OTQuNzg2OTA5LTAuMDIzMjczIDUxMi4wMjMyNzMtMC4wMjMyNzNTMCAyMjkuMjEzMDkxIDAgNTExLjk3NjcyN0MwIDc5NC43ODY5MDkgMjI5LjIzNjM2NCAxMDI0IDUxMi4wMjMyNzMgMTAyNE00NjkuMzQxMDkxIDc2OGMwLTIzLjU1MiAxOC45MjA3MjctNDIuNjU4OTA5IDQyLjcwNTQ1NS00Mi42NTg5MDkgMjMuNTUyIDAgNDIuNjU4OTA5IDE4LjkyMDcyNyA0Mi42NTg5MDkgNDIuNjU4OTA5IDAgMjMuNTc1MjczLTE4LjkyMDcyNyA0Mi43MDU0NTUtNDIuNjU4OTA5IDQyLjcwNTQ1NUM0ODguNDcxMjczIDgxMC43MDU0NTUgNDY5LjM0MTA5MSA3OTEuNzM4MTgyIDQ2OS4zNDEwOTEgNzY4TTQ2OS4zNDEwOTEgMjU1LjgxMzgxOGMwLTIzLjQ1ODkwOSAxOC45MjA3MjctNDIuNDcyNzI3IDQyLjcwNTQ1NS00Mi40NzI3MjcgMjMuNTUyIDAgNDIuNjU4OTA5IDE5LjQzMjcyNyA0Mi42NTg5MDkgNDIuNDcyNzI3bDAgMzQxLjczNjcyN2MwIDIzLjQ1ODkwOS0xOC45MjA3MjcgNDIuNDcyNzI3LTQyLjY1ODkwOSA0Mi40NzI3MjctMjMuNTc1MjczIDAtNDIuNzA1NDU1LTE5LjQzMjcyNy00Mi43MDU0NTUtNDIuNDcyNzI3TDQ2OS4zNDEwOTEgMjU1LjgxMzgxOHoiIHAtaWQ9IjUxMTkiIGZpbGw9IiNmZjk5MDAiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%;
    background-size: 85%;
}
.iziToast > .iziToast-body .iziToast-icon.ico-error {
    background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTU1NzcwNDI1NDkwIiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjEyNjUiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNTExLjk5NjQxOCAyMy41MjA2OTNjLTI2OS43NjcwNSAwLTQ4OC40NTQ3NDggMjE4LjY4ODcyMS00ODguNDU0NzQ4IDQ4OC40NTQ3NDggMCAyNjkuNzY4MDczIDIxOC42ODg3MjEgNDg4LjQ1MzcyNCA0ODguNDU0NzQ4IDQ4OC40NTM3MjQgMjY5Ljc2NjAyNyAwIDQ4OC40NTQ3NDgtMjE4LjY4NTY1MSA0ODguNDU0NzQ4LTQ4OC40NTM3MjRDMTAwMC40NTExNjYgMjQyLjIwOTQxNCA3ODEuNzYyNDQ1IDIzLjUyMDY5MyA1MTEuOTk2NDE4IDIzLjUyMDY5M3pNNzY5LjMzNDM5MSA3MTUuMTU1OTU2bC01NC4xNTY0MzQgNTQuMTU2NDM0TDUxMS45OTY0MTggNTY2LjEyOTgyOCAzMDguODEzODU2IDc2OS4zMTIzOWwtNTQuMTU1NDExLTU0LjE1NjQzNEw0NTcuODQxMDA4IDUxMS45NzU0NDEgMjU0LjY1ODQ0NiAzMDguNzkyODc4bDU0LjE1NTQxMS01NC4xNTU0MTFMNTExLjk5NjQxOCA0NTcuODIwMDNsMjAzLjE4MjU2Mi0yMDMuMTgyNTYyIDU0LjE1NjQzNCA1NC4xNTU0MTFMNTY2LjE1MTgyOSA1MTEuOTc1NDQxIDc2OS4zMzQzOTEgNzE1LjE1NTk1NnoiIHAtaWQ9IjEyNjYiIGZpbGw9IiNGNTZDNkMiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%;
    background-size: 80%;
}
.iziToast > .iziToast-body .iziToast-icon.ico-success {
    background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTU1NzcwNTI2MjA3IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQ5NjUiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNMTAyNCA1MTEuOTk5NTAyYzAgMjgyLjc3MDU1Ny0yMjkuMjI5OTQxIDUxMi4wMDA0OTgtNTExLjk5OTUwMiA1MTIuMDAwNDk4LTI4Mi43Njk1NjEgMC01MTIuMDAwNDk4LTIyOS4yMjk5NDEtNTEyLjAwMDQ5OC01MTIuMDAwNDk4IDAtMjgyLjc2ODU2NiAyMjkuMjMwOTM2LTUxMS45OTk1MDIgNTEyLjAwMDQ5OC01MTEuOTk5NTAyQzc5NC43NjkwNjQgMCAxMDI0IDIyOS4yMzA5MzYgMTAyNCA1MTEuOTk5NTAyek03OTYuNTc3MDgxIDM3OC4zMTc3MTNsLTQ4LjQ1OTA1MS00OC40NTkwNTEtMjk3LjA3ODM4NyAyOTcuMDc3MzkyTDI3Ny4yNjc4NTIgNDUzLjE2NTI1OGwtNDguNDU4MDU2IDQ4LjQ1ODA1NiAyMjIuMjI4ODUxIDIyMi4yMzA4NDJMNzk2LjU3NzA4MSAzNzguMzE3NzEzeiIgcC1pZD0iNDk2NiIgZmlsbD0iIzY3YzIzYSI+PC9wYXRoPjwvc3ZnPg==") no-repeat 50% 50%;
    background-size: 85%;
}
.iziToast > .iziToast-body .iziToast-icon.ico-question {
    background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfhCQkUEhFovxTxAAAEDklEQVRo3s2ZTWgTQRTHf03ipTRUqghNSgsRjHgQrFUQC6JgD1Kak3gQUUoPqRdBglf1oBehBws9Cn4cGk+1SOmh2upBxAYVoeJHrR9tgq0i1Cq0lqYeks7MbpPdmU00/c8hm9n33v/t7Nt5M2+qMEWQI0QIibZKRrQpHvLL2KI2wnQzzBKrDm2RIeKEy01dTYKUI7G1ZRknQXV5yP10kTYgly1NF/5S6duZ8ES+1iZodyaocrjXxE0OFeifYYgp0mRIkwFChAkRJsIxGgrIP+I0n82fvZW5dc/zkss0O2o1c5mX6/TmaDWl77RFe5YkUW3tKEmyFv0lOvXJ/fTYnmCEFuMRbGHEZqVHLyT9DFjUJmkzJl9DG5MWWwM6Llif/gF1nukB6nhgGwUXdFrE+wiURA8QoM9i0zEWWpXQW+ZsyeRrOMuyEo5Fv4gmy4dXPvqcC+pH2VRYaMwy+OWG+iLGCgm0W0Kv9HdvR8ASjmKCXpuK/bxiV/76A/v5UdDIZuKcJGjrnec5KZ7wwsWFOp6xPX/9mt2sqDe7FO+Kf/fXHBPPDWpdXGhTpLvUG9VKwh1xMDDjkvu+cNDFBTk7ptX1QkKZ850m3duu6fcrWxwdaFFyREJ2j4vOpKP6Du6z4uJCv8sYJIVkCnJBGGZaBONO3roY2EqNrSfIPi7SKP4fdXyNUd6I6wbSAHEl33tFLe+FlSsusnK90A0+oEPcuufZgXnOi+u9LrKSJQZQw6LwqBnv2CKsfHORbFbyQhA6xN/pEuihSdj56Co7LWRjPiKie6gkB2LiKuUqK5kiPkLiz1QJ9K1cNXBAMoUCigNpQ9IqDtMI1HKA4/jyvUsaoSyZLA5kjOjDPFZen8Ql5TsvBskUgjciIPSX3QAXC86DT7VWvlEh/xZ+ij9BDVWJ0QL0SbZq6QaFxoLPcXPmBLveLCc4wXdDK6s+6/vwhCSniFLPXW0NJe5UB8zKCsviqpc7vGPVQFcyZbyPwGD+d5ZnxmNWlhG4xSBZZjivjIWHEQgoDkSMjMwTo54569JSE5IpA7EyJSMTyGTUAUFlO1ZKOtaHTMeL1PhYYFTcihmY2cQ5+ullj7EDkiVfVez2sCTz8yiv84djhg7IJVk81xFWJlPdfHBG0flkRC/zQFZ+DSllNtfDdUsOMCliyGX5uOzU3ZhIXFDof4m1gDuKbEx0t2YS25gVGpcMnr/I1kx3c6piB8P8ZoqEwfMX3ZyCXynJTmq/U7NUXqfUzCbWL1wqVKBQUeESzQYoUlW8TAcVL1RCxUu1G6BYXfFyfQ4VPbDI4T8d2WzgQ6sc/vmxnTsqfHCZQzUJxm1h5dxS5Tu6lQgTZ0ipqRVqSwzTbbLHMt+c19iO76tsx/cLZub+Ali+tYC93olEAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTA5LTA5VDIwOjE4OjE3KzAyOjAwjKtfjgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0wOS0wOVQyMDoxODoxNyswMjowMP325zIAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC") no-repeat 50% 50%;
    background-size: 85%;
}
.iziToast > .iziToast-body .iziToast-icon.ico-load {
    background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQ1NTUyMzAyOTE3IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQyNDAiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNTEyIDY0YzI0Ny4yIDAgNDQ4IDIwMC44IDQ0OCA0NDhoLTY0YzAtMjEyLTE3Mi0zODQtMzg0LTM4NFY2NHogbTAgODMyYy0yMTIgMC0zODQtMTcyLTM4NC0zODRINjRjMCAyNDcuMiAyMDAuOCA0NDggNDQ4IDQ0OHYtNjR6IiBwLWlkPSI0MjQxIiBmaWxsPSIjMUU5RkZGIj48L3BhdGg+PC9zdmc+') no-repeat 50% 50%;
    background-size: 85%;
    animation: rotating 1.2s linear infinite
}
@keyframes rotating {
    from {
        transform: rotate(0)
    }
    to {
        transform: rotate(360deg)
    }
}
.iziToast > .iziToast-body .iziToast-title {
    padding: 0;
    margin: 0 0 10px 0;
    line-height: 16px;
    font-size: 14px;
    text-align: left;
    float: left;
    color: #303133;
    white-space: normal;
}
.iziToast > .iziToast-body .iziToast-message {
    padding: 0;
    margin: 0;
    font-size: 14px;
    line-height: 16px;
    text-align: left;
    float: left;
    color: #606266;
    white-space: normal;
}
.iziToast.iziToast-animateInside .iziToast-title,
.iziToast.iziToast-animateInside .iziToast-message,
.iziToast.iziToast-animateInside .iziToast-icon,
.iziToast.iziToast-animateInside .iziToast-buttons-child,
.iziToast.iziToast-animateInside .iziToast-inputs-child {
    opacity: 0;
}
.iziToast-target {
    position: relative;
    width: 100%;
    margin: 0 auto;
}
.iziToast-target .iziToast-capsule {
    overflow: hidden;
}
.iziToast-target .iziToast-capsule:after {
    visibility: hidden;
    display: block;
    font-size: 0;
    content: " ";
    clear: both;
    height: 0;
}
.iziToast-target .iziToast-capsule .iziToast {
    width: 100%;
    float: left;
}
.iziToast-wrapper {
    z-index: 19891101;
    position: fixed;
    width: 100%;
    pointer-events: none;
    display: flex;
    flex-direction: column;
}
.iziToast-wrapper .iziToast.iziToast-balloon:before {
    border-right: 0 solid transparent;
    border-left: 15px solid transparent;
    border-top: 10px solid #000;
    border-top-color: inherit;
    right: 8px;
    left: auto;
}
.iziToast-wrapper-bottomLeft {
    left: 0;
    bottom: 0;
    text-align: left;
}
.iziToast-wrapper-bottomLeft .iziToast.iziToast-balloon:before {
    border-right: 15px solid transparent;
    border-left: 0 solid transparent;
    right: auto;
    left: 8px;
}
.iziToast-wrapper-bottomRight {
    right: 0;
    bottom: 0;
    text-align: right;
}
.iziToast-wrapper-topLeft {
    left: 0;
    top: 0;
    text-align: left;
}
.iziToast-wrapper-topLeft .iziToast.iziToast-balloon:before {
    border-right: 15px solid transparent;
    border-left: 0 solid transparent;
    right: auto;
    left: 8px;
}
.iziToast-wrapper-topRight {
    top: 0;
    right: 0;
    text-align: right;
}
.iziToast-wrapper-topCenter {
    top: 0;
    left: 0;
    right: 0;
    text-align: center;
}
.iziToast-wrapper-bottomCenter {
    bottom: 0;
    left: 0;
    right: 0;
    text-align: center;
}
.iziToast-wrapper-center {
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    text-align: center;
    justify-content: center;
    flex-flow: column;
    align-items: center;
}
.iziToast-rtl {
    direction: rtl;
    padding: 8px 0 9px 45px;
    font-family: Tahoma, 'Lato', Arial;
}
.iziToast-rtl .iziToast-cover {
    left: auto;
    right: 0;
}
.iziToast-rtl .iziToast-close {
    right: auto;
    left: 0;
}
.iziToast-rtl .iziToast-body {
    padding: 0 10px 0 0;
    margin: 0 16px 0 0;
    text-align: right;
}
.iziToast-rtl .iziToast-body .iziToast-buttons,
.iziToast-rtl .iziToast-body .iziToast-inputs,
.iziToast-rtl .iziToast-body .iziToast-texts,
.iziToast-rtl .iziToast-body .iziToast-title,
.iziToast-rtl .iziToast-body .iziToast-message {
    float: right;
    text-align: right;
}
.iziToast-rtl .iziToast-body .iziToast-icon {
    left: auto;
    right: 0;
}
@media only screen and (min-width: 568px) {
    .iziToast-wrapper {
        padding: 10px 15px;
    }
    .iziToast {
        width: auto;
    }
    .iziToast:not(.iziToast-rtl) .iziToast-cover {
        border-radius: 3px 0 0 3px;
    }
    .iziToast.iziToast-rtl .iziToast-cover {
        border-radius: 0 3px 3px 0;
    }
    .iziToast.iziToast-color-dark:after {
        box-shadow: inset 0 -10px 20px -10px rgba(255, 255, 255, 0.3), 0 10px 10px -5px rgba(0, 0, 0, 0.25);
    }
    .iziToast.iziToast-balloon .iziToast-progressbar {
        background: transparent;
    }
    .iziToast.iziToast-balloon:after {
        box-shadow: 0 10px 10px -5px rgba(0, 0, 0, 0.25), inset 0 10px 20px -5px rgba(0, 0, 0, 0.25);
    }
    .iziToast-target .iziToast:after {
        box-shadow: inset 0 -10px 20px -10px rgba(0, 0, 0, 0.2), inset 0 0 5px rgba(0, 0, 0, 0.1);
    }
}
.iziToast.iziToast-theme-dark {
    background: #565c70;
    border-color: #565c70;
}
.iziToast.iziToast-theme-dark .iziToast-title {
    color: #fff;
}
.iziToast.iziToast-theme-dark .iziToast-message {
    color: rgba(255, 255, 255, 0.9);
    font-weight: 300;
}
.iziToast.iziToast-theme-dark .iziToast-close {
    background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfgCR4OIQIPSao6AAAAwElEQVRIx72VUQ6EIAwFmz2XB+AConhjzqTJ7JeGKhLYlyx/BGdoBVpjIpMJNjgIZDKTkQHYmYfwmR2AfAqGFBcO2QjXZCd24bEggvd1KBx+xlwoDpYmvnBUUy68DYXD77ESr8WDtYqvxRex7a8oHP4Wo1Mkt5I68Mc+qYqv1h5OsZmZsQ3gj/02h6cO/KEYx29hu3R+VTTwz6D3TymIP1E8RvEiiVdZfEzicxYLiljSxKIqlnW5seitTW6uYnv/Aqh4whX3mEUrAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA5LTMwVDE0OjMzOjAyKzAyOjAwl6RMVgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wOS0zMFQxNDozMzowMiswMjowMOb59OoAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC") no-repeat 50% 50%;
    background-size: 8px;
}
.iziToast.iziToast-theme-dark .iziToast-icon {
    color: #fff;
}
.iziToast.iziToast-theme-dark .iziToast-icon.ico-info {
    background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQxNjQ5NjA1MTc2IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjM1MzIiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNODUxLjE3MTU1NiA3MTcuOTM3Nzc4YzMuMjQyNjY3IDExLjk0NjY2NyAyLjg0NDQ0NCAyNC40NjIyMjItMS40MjIyMjMgMzYuNDA4ODg5YTYyLjkxOTExMSA2Mi45MTkxMTEgMCAwIDEtMjEuOTU5MTExIDI5LjUyNTMzMyA2NS4yNTE1NTYgNjUuMjUxNTU2IDAgMCAxLTM4LjkxMiAxMi41MTU1NTZIMTc4LjExOTExMWE2NC44NTMzMzMgNjQuODUzMzMzIDAgMCAxLTM4Ljc5ODIyMi0xMi41NzI0NDUgNjIuMjM2NDQ0IDYyLjIzNjQ0NCAwIDAgMS0yMi4wMTYtMjkuNTI1MzMzIDYwLjY0MzU1NiA2MC42NDM1NTYgMCAwIDEtMS4zNjUzMzMtMzYuNDA4ODg5YzMuNTg0LTEzLjE0MTMzMyAxMS40MzQ2NjctMjQuNTc2IDIyLjY5ODY2Ni0zMy4xMDkzMzNsNTguNDgxNzc4LTQ0LjAzMmE0MC43MzI0NDQgNDAuNzMyNDQ0IDAgMCAwIDE2LjQ5Nzc3OC0zMi43MTExMTJ2LTIwMy4wOTMzMzNjMC0zNS4yMTQyMjIgNy4xNjgtNjkuNTE4MjIyIDIxLjIxOTU1NS0xMDEuNzE3MzMzIDEzLjY1MzMzMy0zMS4xNzUxMTEgMzMuMTA5MzMzLTU5LjE2NDQ0NCA1Ny44NTYtODMuMTE0NjY3QTI2OC44NTY4ODkgMjY4Ljg1Njg4OSAwIDAgMSA0MTQuNzIgMTUyLjA2NHYtMjguNTAxMzMzQzQxNC43MiA4Ni44MTI0NDQgNDQ1LjYxMDY2NyA1Ni44ODg4ODkgNDgzLjU1NTU1NiA1Ni44ODg4ODljMzcuOTQ0ODg5IDAgNjguODM1NTU2IDI5LjkyMzU1NiA2OC44MzU1NTUgNjYuNjczNzc4djI4LjUwMTMzM2MxMi4zNDQ4ODkgMy4xODU3NzggMjQuNDYyMjIyIDcuMTY4IDM2LjIzODIyMiAxMi4wMDM1NTZhMjY4LjY4NjIyMiAyNjguNjg2MjIyIDAgMCAxIDg1Ljc4ODQ0NSA1Ni4wMzU1NTVjMjQuNzQ2NjY3IDI0LjAwNzExMSA0NC4yMDI2NjcgNTEuOTM5NTU2IDU3Ljc5OTExMSA4My4wNTc3NzggMTQuMTA4NDQ0IDMyLjMxMjg4OSAyMS4yMTk1NTYgNjYuNTYgMjEuMjE5NTU1IDEwMS44MzExMTF2MjAzLjA5MzMzM2MwIDEyLjg1Njg4OSA2LjAzMDIyMiAyNC44NjA0NDQgMTYuNTU0NjY3IDMyLjcxMTExMWw1OC40ODE3NzggNDQuMDMyYzExLjIwNzExMSA4LjUzMzMzMyAxOS4wNTc3NzggMTkuOTExMTExIDIyLjc1NTU1NSAzMy4wNTI0NDV6TTM5OC4yMjIyMjIgODU2LjE3Nzc3OFY4NTMuMzMzMzMzaDE3MC42NjY2Njd2Mi44NDQ0NDVDNTY4Ljg4ODg4OSA5MzUuOTM2IDUzMC42MDI2NjcgOTY3LjExMTExMSA0ODMuNTU1NTU2IDk2Ny4xMTExMTFTMzk4LjIyMjIyMiA5MzUuOTM2IDM5OC4yMjIyMjIgODU2LjE3Nzc3OHoiIHAtaWQ9IjM1MzMiIGZpbGw9IiNmZmZmZmYiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%;
    background-size: 85%;
}
.iziToast.iziToast-theme-dark .iziToast-icon.ico-warning {
    background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQxNjUxMTE1OTQ4IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjUgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjUwOTYiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4LjEyNSIgaGVpZ2h0PSIxMjgiPjxkZWZzPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+PC9zdHlsZT48L2RlZnM+PHBhdGggZD0iTTk4NC4wMjI5NTAwMiA3NDYuODc1NDk3NUw2NDEuOTY0NjA3NTIgMTMwLjM4MDY1Yy0zMC40OTE4NDI1LTU0Ljg2MTUwMjUtNzcuOTMxMzE1LTg2LjMzNTY3MjUtMTMwLjE0MzUxLTg2LjMzNTY3MjUtNTIuMjkxNTc1IDAtOTkuNzQwOTcgMzEuNTEzODYtMTMwLjE0MzUxIDg2LjQzNDg5NzVMMzkuOTc2NDU1MDIgNzQ2LjgyNTg4NUM5Ljk2MDg5MjUyIDgwMC45NjMwNDUgNy45MTY4NTc1MiA4NTguMDE3NDIgMzQuMzUwMzk3NTIgOTAzLjM1MzMyMjVjMjYuNTEyOTIgNDUuNDc0ODE3NSA3Ny4xOTcwNSA3MS41NjEwNyAxMzkuMDczNzYgNzEuNTYxMDdoNjc3LjIyMDU0NzVjNjEuOTA2NDc3NSAwIDExMi41OTA2MDc1LTI2LjA4NjI1MjUgMTM5LjAxNDIyNS03MS40OTE2MTI1IDI2LjQ4MzE1MjUtNDUuMjc2MzY3NSAyNC40MjkxOTUtMTAyLjM0MDY2NS01LjYzNTk4LTE1Ni41NDcyODI1ek05MTEuNzU3MzgyNTIgODU3Ljk5NzU3NWMtOS44OTI3MzI1IDE2Ljk4NzMyLTMyLjE1ODgyMjUgMjYuNzMxMjE1LTYxLjExMjY3NzUgMjYuNzMxMjE1SDE3My40MjQxNTc1MmMtMjguOTQzOTMyNSAwLTUxLjIyOTg2NzUtOS43NjM3NC02MS4xNjIyOS0yNi43OTA3NS0xMC4wMjE3MjUtMTcuMTg1NzctNy42MTA1NTc1LTQxLjc0Mzk1NzUgNi41ODg1NC02Ny4zNzM3NzVsMzQxLjcxMTA1NS02MTYuMzY1ODU1YzE0LjA2MDE4MjUtMjUuMzkxNjc3NSAzMi43NTQxNzI1LTM5Ljk1NzkwNzUgNTEuMjU5NjM1LTM5Ljk1NzkwNzUgMTguNDk1NTQgMCAzNy4xOTk0NTI1IDE0LjU2NjIzIDUxLjMwOTI0NzUgMzkuOTM4MDYyNWwzNDIuMDI4NTc1IDYxNi40NDUyMzVjMTQuMjI4ODY1IDI1LjY0OTY2MjUgMTYuNjQwMDMyNSA1MC4xODgwMDUgNi41OTg0NjI1IDY3LjM3Mzc3NXoiIGZpbGw9IiNmZmZmZmYiIHAtaWQ9IjUwOTciPjwvcGF0aD48cGF0aCBkPSJNNTEyLjAxOTU0NzUyIDYzMC4yODYxMjI1YTQ1LjA4Nzg0IDQ1LjA4Nzg0IDAgMCAwIDQ1LjA5Nzc2MjUtNDUuMDA4NDZWMzc0LjY1Mjc1NWE0NS4wNzc5MTc1IDQ1LjA3NzkxNzUgMCAwIDAtNDUuMDk3NzYyNS00NS4wMDg0NiA0NS4wODc4NCA0NS4wODc4NCAwIDAgMC00NS4wOTc3NjI1IDQ1LjAwODQ2djIxMC42MTQ5ODVhNDUuMDg3ODQgNDUuMDg3ODQgMCAwIDAgNDUuMDk3NzYyNSA0NS4wMTgzODI1ek01MTIuMDE5NTQ3NTIgNjc1LjM3Mzk2MjVhNjAuMTcwMDQgNjAuMTcwMDQgMCAwIDAtNjAuMTMwMzUgNjAuMTMwMzVjMCAzMy4xNDExNSAyNi45MTk3NDI1IDYwLjEzMDM1IDYwLjEzMDM1IDYwLjEzMDM1IDMzLjE0MTE1IDAgNjAuMTMwMzUtMjYuOTE5NzQyNSA2MC4xMzAzNS02MC4xMzAzNSAwLTMzLjE0MTE1LTI2LjkxOTc0MjUtNjAuMTMwMzUtNjAuMTMwMzUtNjAuMTMwMzV6IiBmaWxsPSIjZmZmZmZmIiBwLWlkPSI1MDk4Ij48L3BhdGg+PC9zdmc+") no-repeat 50% 50%;
    background-size: 85%;
}
.iziToast.iziToast-theme-dark .iziToast-icon.ico-error {
    background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQxNjUxMzE1NTQ3IiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjY4MDYiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNzcyLjI2NjY2NyA4ODMuMmMyNS42IDI1LjYgNjQgMjUuNiA4OS42IDAgMjUuNi0yNS42IDI1LjYtNjQgMC04OS42TDIzMC40IDE2Mi4xMzMzMzNjLTI1LjYtMjUuNi02NC0yNS42LTg5LjYgMC0yNS42IDI1LjYtMjUuNiA2NCAwIDg5LjZsNjMxLjQ2NjY2NyA2MzEuNDY2NjY3eiIgcC1pZD0iNjgwNyIgZmlsbD0iI2ZmZmZmZiI+PC9wYXRoPjxwYXRoIGQ9Ik04NjEuODY2NjY3IDI1MS43MzMzMzNjMjUuNi0yNS42IDI1LjYtNjQgMC04OS42LTI1LjYtMjUuNi02NC0yNS42LTg5LjYgMEwxNDAuOCA3OTMuNmMtMjUuNiAyNS42LTI1LjYgNjQgMCA4OS42czY0IDI1LjYgODkuNiAwbDYzMS40NjY2NjctNjMxLjQ2NjY2N3oiIHAtaWQ9IjY4MDgiIGZpbGw9IiNmZmZmZmYiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%;
    background-size: 80%;
}
.iziToast.iziToast-theme-dark .iziToast-icon.ico-success {
    background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNTQxNjUxMjQyNTMxIiBjbGFzcz0iaWNvbiIgc3R5bGU9IiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjYwMjMiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNNDA0LjI1MTQyOCA4MDkuNjEwN2MtMTEuNjY0MTAyIDAtMjMuMzI3MTc5LTQuNDQ4NzgyLTMyLjIyNTc2Ny0xMy4zNDczNjlMODMuOTgwMDk4IDUwOC4yMTk4MTVjLTE3Ljc5ODE5OS0xNy43OTcxNzUtMTcuNzk4MTk5LTQ2LjY1MzMzNSAwLTY0LjQ1MTUzM3M0Ni42NTMzMzUtMTcuNzk4MTk5IDY0LjQ1MTUzNCAwbDI4OC4wNDQ1MzkgMjg4LjA0MjQ5MWMxNy43OTgxOTkgMTcuNzk4MTk5IDE3Ljc5ODE5OSA0Ni42NTQzNTkgMCA2NC40NTI1NTgtOC44OTc1NjMgOC44OTg1ODctMjAuNTYxNjY1IDEzLjM0NzM2OS0zMi4yMjQ3NDMgMTMuMzQ3MzY5eiIgcC1pZD0iNjAyNCIgZmlsbD0iI2ZmZmZmZiI+PC9wYXRoPjxwYXRoIGQ9Ik00MDQuMjczOTUzIDgwOS42MTE3MjNjLTExLjY2NDEwMiAwLTIzLjMyNjE1NS00LjQ0OTgwNi0zMi4yMjU3NjYtMTMuMzQ4MzkyLTE3Ljc5ODE5OS0xNy43OTcxNzUtMTcuNzk5MjIyLTQ2LjY1MzMzNS0wLjAwMTAyNC02NC40NTE1MzRMODc2LjEwMTgxMyAyMjcuNzM1NjQ2YzE3Ljc5NjE1MS0xNy43OTgxOTkgNDYuNjUzMzM1LTE3Ljc5OTIyMiA2NC40NTE1MzMtMC4wMDEwMjQgMTcuNzk4MTk5IDE3Ljc5NzE3NSAxNy43OTkyMjIgNDYuNjUzMzM1IDAuMDAxMDI0IDY0LjQ1MTUzM0w0MzYuNTAwNzQ0IDc5Ni4yNjIzMDdjLTguODk4NTg3IDguODk4NTg3LTIwLjU2MjY4OSAxMy4zNDk0MTctMzIuMjI2NzkxIDEzLjM0OTQxNnoiIHAtaWQ9IjYwMjUiIGZpbGw9IiNmZmZmZmYiPjwvcGF0aD48L3N2Zz4=") no-repeat 50% 50%;
    background-size: 85%;
}
.iziToast.iziToast-theme-dark .iziToast-icon.ico-question {
    background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADdcAAA3XAUIom3gAAAAHdElNRQfhCQkUEg18vki+AAAETUlEQVRo3s1ZTWhbRxD+VlIuxsLFCYVIIQYVopBDoK5bKDWUBupDMNbJ5FBKg/FBziUQdE9yaC+FHBrwsdCfQ9RTGoLxwWl+DqHEojUFFydxnB9bInZDqOsErBrr6yGvs/ueX97bldTKo4Pe7puZb3Z33s7srIIjMY1jyCEjP6ImvyX8pF64arSHznKC06wzijY5xSKz7YbuYokV2lODsyyxqz3gSY6z6gCuqcpxJluFH+Z8U+D/0jyHoxFUBHgfvsGHIS9WMIUlVFFDFTUAGWSRQRY5HMeBEP6b+Ew9dh/7INd2jGeO59kfKdXP85zbIbfGQVf4sYC3N1hm3lo6zzIbPvk6x+zBk7wQGMEMB5xncIAzAS0XrFySSV72iS1yyBVcdA1x0afrsoUJgdFfY2+z8ADAXl7zz0KcwJiPfZKpVuABgClO+nRG+QIHDdfb4qlWwUXvKW4Z7vi6L4J9vg+vbfCeCeZH2RfOdMOc/HbCA4BvIW6EMQz7XK/ltd+hP+VzR9mgva2YSfyGI17fA7ynnocqeQNFfIJ0oHsdv6CC2+rXGBN6cQdveY3fcVRtmy/HDete+93zy8jA8zV7YkwYMrjHzRddRsCdiVCwwmh6wg9iTNC7Y9XIF1iS7kbUpsvvGEdPuTfSgAEjRpR096x0liPFD/Eqt2NMuBQzB2XhrACAApjFsuQFh9XdGAX70B3oSuNdnMVBaX+sopYxjwVpHFBVACyKTXNoktjD+6Ll8xhenS9MAAkAI/Lux2YNUOs4I413Ypg1SgEAu7kpFvWjaeJe0fJHDGe/cNaZBkekudw8PMA+0fMwlndZeAsJ5KR/qhUDUJCnSiyvRsolkJHGUgvjH8QXDgZopEzKMKDqCKrwEQ4C6MH7GEXC665buLJG8hlQc4LP4paxfJrOqYVYYY2UARfEIazTbgDg2dB98GebzJd54b8L/iWNdLyooeR6CHyZ+6xk0yKxkYg6nEVSUG4VJ9QJ9cxRCxO+9WiOyvgUeexXP1hLGH5nGuBWVtiSp4vqe3VP0UFWI9Wan4Er3v8q7jjPWVtm4FtcQQMrOKO2nOQCM5AyDMi56FDrKHA/1nyppS1ppBpYaE8wciEjGI2AaeM41kI4doDX4XiT3Qm1gevyruCgZg9P8xIv8m1nCzTKq6oiJ9xTMiZ505P5m8cdZ0CnZMVXHVljM7WMBzxpyDxygtdxoCEFTaMIWbZU85UvBjgUMYy0fBaAF8V1Lj9qWQ1aMZ5f4k9r+AGMSkMP1vZoZih6k6sicc5h/OFHM9vDqU/VIU7zJZdYYsKGH4g4nAJMGiXZRds1pVMoZ69RM5vfkbh0qkBhsnS2RLMLilQdL9MBHS9UAh0v1e6CYnXHy/WeeCcvLDwl/9OVze69tPKM+M+v7eJN6OzFpWdEF0ucDbhVNFXadnVrmJFlkVNGTS2M6pzmhMvltfPhnN2B63sVuL7fcNP3D1TSk2ihosPrAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTA5LTA5VDIwOjE4OjEzKzAyOjAweOR7nQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0wOS0wOVQyMDoxODoxMyswMjowMAm5wyEAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC") no-repeat 50% 50%;
    background-size: 85%;
}
.iziToast.iziToast-theme-dark .iziToast-buttons > a,
.iziToast.iziToast-theme-dark .iziToast-buttons > button,
.iziToast.iziToast-theme-dark .iziToast-buttons > input {
    color: #fff;
    background: rgba(255, 255, 255, 0.1);
}
.iziToast.iziToast-theme-dark .iziToast-buttons > a:hover,
.iziToast.iziToast-theme-dark .iziToast-buttons > button:hover,
.iziToast.iziToast-theme-dark .iziToast-buttons > input:hover {
    background: rgba(255, 255, 255, 0.2);
}
.iziToast.iziToast-theme-dark .iziToast-buttons > a:focus,
.iziToast.iziToast-theme-dark .iziToast-buttons > button:focus,
.iziToast.iziToast-theme-dark .iziToast-buttons > input:focus {
    box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.6);
}
.iziToast.iziToast-theme-dark.iziToast-color-red {
    background: #F56C6C;
    border-color: #F56C6C;
}
.iziToast.iziToast-theme-dark.iziToast-color-orange {
    background: #E6A23C;
    border-color: #E6A23C;
}
.iziToast.iziToast-theme-dark.iziToast-color-yellow {
    background: rgba(255, 249, 178, 0.9);
    border-color: rgba(255, 249, 178, 0.9);
}
.iziToast.iziToast-theme-dark.iziToast-color-blue {
    background: #409EFF;
    border-color: #409EFF;
}
.iziToast.iziToast-theme-dark.iziToast-color-green {
    background: #67C23A;
    border-color: #67C23A;
}
.iziToast.iziToast-layout2 .iziToast-body .iziToast-texts,
.iziToast.iziToast-layout2 .iziToast-body .iziToast-message {
    width: 100%;
}
.iziToast.iziToast-layout3 {
    border-radius: 2px;
}
.iziToast.iziToast-layout3::after {
    display: none;
}
.iziToast.revealIn,
.iziToast .revealIn {
    -webkit-animation: iziT-revealIn 1s cubic-bezier(0.25, 1.6, 0.25, 1) both;
    -moz-animation: iziT-revealIn 1s cubic-bezier(0.25, 1.6, 0.25, 1) both;
    animation: iziT-revealIn 1s cubic-bezier(0.25, 1.6, 0.25, 1) both;
}
.iziToast.slideIn,
.iziToast .slideIn {
    -webkit-animation: iziT-slideIn 1s cubic-bezier(0.16, 0.81, 0.32, 1) both;
    -moz-animation: iziT-slideIn 1s cubic-bezier(0.16, 0.81, 0.32, 1) both;
    animation: iziT-slideIn 1s cubic-bezier(0.16, 0.81, 0.32, 1) both;
}
.iziToast.bounceInLeft {
    -webkit-animation: iziT-bounceInLeft 0.7s ease-in-out both;
    animation: iziT-bounceInLeft 0.7s ease-in-out both;
}
.iziToast.bounceInRight {
    -webkit-animation: iziT-bounceInRight 0.85s ease-in-out both;
    animation: iziT-bounceInRight 0.85s ease-in-out both;
}
.iziToast.bounceInDown {
    -webkit-animation: iziT-bounceInDown 0.7s ease-in-out both;
    animation: iziT-bounceInDown 0.7s ease-in-out both;
}
.iziToast.bounceInUp {
    -webkit-animation: iziT-bounceInUp 0.7s ease-in-out both;
    animation: iziT-bounceInUp 0.7s ease-in-out both;
}
.iziToast.fadeIn,
.iziToast .fadeIn {
    -webkit-animation: iziT-fadeIn 0.5s ease both;
    animation: iziT-fadeIn 0.5s ease both;
}
.iziToast.fadeInUp {
    -webkit-animation: iziT-fadeInUp 0.7s ease both;
    animation: iziT-fadeInUp 0.7s ease both;
}
.iziToast.fadeInDown {
    -webkit-animation: iziT-fadeInDown 0.7s ease both;
    animation: iziT-fadeInDown 0.7s ease both;
}
.iziToast.fadeInLeft {
    -webkit-animation: iziT-fadeInLeft 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both;
    animation: iziT-fadeInLeft 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both;
}
.iziToast.fadeInRight {
    -webkit-animation: iziT-fadeInRight 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both;
    animation: iziT-fadeInRight 0.85s cubic-bezier(0.25, 0.8, 0.25, 1) both;
}
.iziToast.flipInX {
    -webkit-animation: iziT-flipInX 0.85s cubic-bezier(0.35, 0, 0.25, 1) both;
    animation: iziT-flipInX 0.85s cubic-bezier(0.35, 0, 0.25, 1) both;
}
.iziToast.fadeOut {
    -webkit-animation: iziT-fadeOut 0.7s ease both;
    animation: iziT-fadeOut 0.7s ease both;
}
.iziToast.fadeOutDown {
    -webkit-animation: iziT-fadeOutDown 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both;
    animation: iziT-fadeOutDown 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both;
}
.iziToast.fadeOutUp {
    -webkit-animation: iziT-fadeOutUp 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both;
    animation: iziT-fadeOutUp 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both;
}
.iziToast.fadeOutLeft {
    -webkit-animation: iziT-fadeOutLeft 0.5s ease both;
    animation: iziT-fadeOutLeft 0.5s ease both;
}
.iziToast.fadeOutRight {
    -webkit-animation: iziT-fadeOutRight 0.5s ease both;
    animation: iziT-fadeOutRight 0.5s ease both;
}
.iziToast.flipOutX {
    -webkit-backface-visibility: visible !important;
    backface-visibility: visible !important;
    -webkit-animation: iziT-flipOutX 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both;
    animation: iziT-flipOutX 0.7s cubic-bezier(0.4, 0.45, 0.15, 0.91) both;
}
.iziToast-overlay.fadeIn {
    -webkit-animation: iziT-fadeIn 0.5s ease both;
    animation: iziT-fadeIn 0.5s ease both;
}
.iziToast-overlay.fadeOut {
    -webkit-animation: iziT-fadeOut 0.7s ease both;
    animation: iziT-fadeOut 0.7s ease both;
}
@-webkit-keyframes iziT-revealIn {
    0% {
        opacity: 0;
        -webkit-transform: scale3d(0.3, 0.3, 1);
    }
    100% {
        opacity: 1;
    }
}
@-moz-keyframes iziT-revealIn {
    0% {
        opacity: 0;
        -moz-transform: scale3d(0.3, 0.3, 1);
    }
    100% {
        opacity: 1;
    }
}
@-webkit-keyframes iziT-slideIn {
    0% {
        opacity: 0;
        -webkit-transform: translateX(50px);
    }
    100% {
        opacity: 1;
        -webkit-transform: translateX(0);
    }
}
@-moz-keyframes iziT-slideIn {
    0% {
        opacity: 0;
        -moz-transform: translateX(50px);
    }
    100% {
        opacity: 1;
        -moz-transform: translateX(0);
    }
}
@-webkit-keyframes iziT-bounceInLeft {
    0% {
        opacity: 0;
        -webkit-transform: translateX(280px);
    }
    50% {
        opacity: 1;
        -webkit-transform: translateX(-20px);
    }
    70% {
        -webkit-transform: translateX(10px);
    }
    100% {
        -webkit-transform: translateX(0);
    }
}
@-webkit-keyframes iziT-bounceInRight {
    0% {
        opacity: 0;
        -webkit-transform: translateX(-280px);
    }
    50% {
        opacity: 1;
        -webkit-transform: translateX(20px);
    }
    70% {
        -webkit-transform: translateX(-10px);
    }
    100% {
        -webkit-transform: translateX(0);
    }
}
@-webkit-keyframes iziT-bounceInDown {
    0% {
        opacity: 0;
        -webkit-transform: translateY(-200px);
    }
    50% {
        opacity: 1;
        -webkit-transform: translateY(10px);
    }
    70% {
        -webkit-transform: translateY(-5px);
    }
    100% {
        -webkit-transform: translateY(0);
    }
}
@-webkit-keyframes iziT-bounceInUp {
    0% {
        opacity: 0;
        -webkit-transform: translateY(200px);
    }
    50% {
        opacity: 1;
        -webkit-transform: translateY(-10px);
    }
    70% {
        -webkit-transform: translateY(5px);
    }
    100% {
        -webkit-transform: translateY(0);
    }
}
@-webkit-keyframes iziT-fadeIn {
    from {
        opacity: 0;
    }
    to {
        opacity: 1;
    }
}
@-webkit-keyframes iziT-fadeInUp {
    from {
        opacity: 0;
        -webkit-transform: translate3d(0, 100%, 0);
        transform: translate3d(0, 100%, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@-webkit-keyframes iziT-fadeInDown {
    from {
        opacity: 0;
        -webkit-transform: translate3d(0, -100%, 0);
        transform: translate3d(0, -100%, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@-webkit-keyframes iziT-fadeInLeft {
    from {
        opacity: 0;
        -webkit-transform: translate3d(300px, 0, 0);
        transform: translate3d(300px, 0, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@-webkit-keyframes iziT-fadeInRight {
    from {
        opacity: 0;
        -webkit-transform: translate3d(-300px, 0, 0);
        transform: translate3d(-300px, 0, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@-webkit-keyframes iziT-flipInX {
    from {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        opacity: 0;
    }
    40% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    }
    60% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
        transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
        opacity: 1;
    }
    80% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
        transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
    }
    to {
        -webkit-transform: perspective(400px);
        transform: perspective(400px);
    }
}
@-webkit-keyframes iziT-fadeOut {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
    }
}
@-webkit-keyframes iziT-fadeOutDown {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(0, 100%, 0);
        transform: translate3d(0, 100%, 0);
    }
}
@-webkit-keyframes iziT-fadeOutUp {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(0, -100%, 0);
        transform: translate3d(0, -100%, 0);
    }
}
@-webkit-keyframes iziT-fadeOutLeft {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(-200px, 0, 0);
        transform: translate3d(-200px, 0, 0);
    }
}
@-webkit-keyframes iziT-fadeOutRight {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(200px, 0, 0);
        transform: translate3d(200px, 0, 0);
    }
}
@-webkit-keyframes iziT-flipOutX {
    from {
        -webkit-transform: perspective(400px);
        transform: perspective(400px);
    }
    30% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
        opacity: 1;
    }
    to {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        opacity: 0;
    }
}
@-moz-keyframes iziT-revealIn {
    0% {
        opacity: 0;
        transform: scale3d(0.3, 0.3, 1);
    }
    100% {
        opacity: 1;
    }
}
@-webkit-keyframes iziT-revealIn {
    0% {
        opacity: 0;
        transform: scale3d(0.3, 0.3, 1);
    }
    100% {
        opacity: 1;
    }
}
@-o-keyframes iziT-revealIn {
    0% {
        opacity: 0;
        transform: scale3d(0.3, 0.3, 1);
    }
    100% {
        opacity: 1;
    }
}
@keyframes iziT-revealIn {
    0% {
        opacity: 0;
        transform: scale3d(0.3, 0.3, 1);
    }
    100% {
        opacity: 1;
    }
}
@-moz-keyframes iziT-slideIn {
    0% {
        opacity: 0;
        transform: translateX(50px);
    }
    100% {
        opacity: 1;
        transform: translateX(0);
    }
}
@-webkit-keyframes iziT-slideIn {
    0% {
        opacity: 0;
        transform: translateX(50px);
    }
    100% {
        opacity: 1;
        transform: translateX(0);
    }
}
@-o-keyframes iziT-slideIn {
    0% {
        opacity: 0;
        transform: translateX(50px);
    }
    100% {
        opacity: 1;
        transform: translateX(0);
    }
}
@keyframes iziT-slideIn {
    0% {
        opacity: 0;
        transform: translateX(50px);
    }
    100% {
        opacity: 1;
        transform: translateX(0);
    }
}
@-moz-keyframes iziT-bounceInLeft {
    0% {
        opacity: 0;
        transform: translateX(280px);
    }
    50% {
        opacity: 1;
        transform: translateX(-20px);
    }
    70% {
        transform: translateX(10px);
    }
    100% {
        transform: translateX(0);
    }
}
@-webkit-keyframes iziT-bounceInLeft {
    0% {
        opacity: 0;
        transform: translateX(280px);
    }
    50% {
        opacity: 1;
        transform: translateX(-20px);
    }
    70% {
        transform: translateX(10px);
    }
    100% {
        transform: translateX(0);
    }
}
@-o-keyframes iziT-bounceInLeft {
    0% {
        opacity: 0;
        transform: translateX(280px);
    }
    50% {
        opacity: 1;
        transform: translateX(-20px);
    }
    70% {
        transform: translateX(10px);
    }
    100% {
        transform: translateX(0);
    }
}
@keyframes iziT-bounceInLeft {
    0% {
        opacity: 0;
        transform: translateX(280px);
    }
    50% {
        opacity: 1;
        transform: translateX(-20px);
    }
    70% {
        transform: translateX(10px);
    }
    100% {
        transform: translateX(0);
    }
}
@-moz-keyframes iziT-bounceInRight {
    0% {
        opacity: 0;
        transform: translateX(-280px);
    }
    50% {
        opacity: 1;
        transform: translateX(20px);
    }
    70% {
        transform: translateX(-10px);
    }
    100% {
        transform: translateX(0);
    }
}
@-webkit-keyframes iziT-bounceInRight {
    0% {
        opacity: 0;
        transform: translateX(-280px);
    }
    50% {
        opacity: 1;
        transform: translateX(20px);
    }
    70% {
        transform: translateX(-10px);
    }
    100% {
        transform: translateX(0);
    }
}
@-o-keyframes iziT-bounceInRight {
    0% {
        opacity: 0;
        transform: translateX(-280px);
    }
    50% {
        opacity: 1;
        transform: translateX(20px);
    }
    70% {
        transform: translateX(-10px);
    }
    100% {
        transform: translateX(0);
    }
}
@keyframes iziT-bounceInRight {
    0% {
        opacity: 0;
        transform: translateX(-280px);
    }
    50% {
        opacity: 1;
        transform: translateX(20px);
    }
    70% {
        transform: translateX(-10px);
    }
    100% {
        transform: translateX(0);
    }
}
@-moz-keyframes iziT-bounceInDown {
    0% {
        opacity: 0;
        transform: translateY(-200px);
    }
    50% {
        opacity: 1;
        transform: translateY(10px);
    }
    70% {
        transform: translateY(-5px);
    }
    100% {
        transform: translateY(0);
    }
}
@-webkit-keyframes iziT-bounceInDown {
    0% {
        opacity: 0;
        transform: translateY(-200px);
    }
    50% {
        opacity: 1;
        transform: translateY(10px);
    }
    70% {
        transform: translateY(-5px);
    }
    100% {
        transform: translateY(0);
    }
}
@-o-keyframes iziT-bounceInDown {
    0% {
        opacity: 0;
        transform: translateY(-200px);
    }
    50% {
        opacity: 1;
        transform: translateY(10px);
    }
    70% {
        transform: translateY(-5px);
    }
    100% {
        transform: translateY(0);
    }
}
@keyframes iziT-bounceInDown {
    0% {
        opacity: 0;
        transform: translateY(-200px);
    }
    50% {
        opacity: 1;
        transform: translateY(10px);
    }
    70% {
        transform: translateY(-5px);
    }
    100% {
        transform: translateY(0);
    }
}
@-moz-keyframes iziT-bounceInUp {
    0% {
        opacity: 0;
        transform: translateY(200px);
    }
    50% {
        opacity: 1;
        transform: translateY(-10px);
    }
    70% {
        transform: translateY(5px);
    }
    100% {
        transform: translateY(0);
    }
}
@-webkit-keyframes iziT-bounceInUp {
    0% {
        opacity: 0;
        transform: translateY(200px);
    }
    50% {
        opacity: 1;
        transform: translateY(-10px);
    }
    70% {
        transform: translateY(5px);
    }
    100% {
        transform: translateY(0);
    }
}
@-o-keyframes iziT-bounceInUp {
    0% {
        opacity: 0;
        transform: translateY(200px);
    }
    50% {
        opacity: 1;
        transform: translateY(-10px);
    }
    70% {
        transform: translateY(5px);
    }
    100% {
        transform: translateY(0);
    }
}
@keyframes iziT-bounceInUp {
    0% {
        opacity: 0;
        transform: translateY(200px);
    }
    50% {
        opacity: 1;
        transform: translateY(-10px);
    }
    70% {
        transform: translateY(5px);
    }
    100% {
        transform: translateY(0);
    }
}
@-moz-keyframes iziT-fadeIn {
    from {
        opacity: 0;
    }
    to {
        opacity: 1;
    }
}
@-webkit-keyframes iziT-fadeIn {
    from {
        opacity: 0;
    }
    to {
        opacity: 1;
    }
}
@-o-keyframes iziT-fadeIn {
    from {
        opacity: 0;
    }
    to {
        opacity: 1;
    }
}
@keyframes iziT-fadeIn {
    from {
        opacity: 0;
    }
    to {
        opacity: 1;
    }
}
@-moz-keyframes iziT-fadeInUp {
    from {
        opacity: 0;
        -webkit-transform: translate3d(0, 100%, 0);
        transform: translate3d(0, 100%, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@-webkit-keyframes iziT-fadeInUp {
    from {
        opacity: 0;
        -webkit-transform: translate3d(0, 100%, 0);
        transform: translate3d(0, 100%, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@-o-keyframes iziT-fadeInUp {
    from {
        opacity: 0;
        -webkit-transform: translate3d(0, 100%, 0);
        transform: translate3d(0, 100%, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@keyframes iziT-fadeInUp {
    from {
        opacity: 0;
        -webkit-transform: translate3d(0, 100%, 0);
        transform: translate3d(0, 100%, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@-moz-keyframes iziT-fadeInDown {
    from {
        opacity: 0;
        -webkit-transform: translate3d(0, -100%, 0);
        transform: translate3d(0, -100%, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@-webkit-keyframes iziT-fadeInDown {
    from {
        opacity: 0;
        -webkit-transform: translate3d(0, -100%, 0);
        transform: translate3d(0, -100%, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@-o-keyframes iziT-fadeInDown {
    from {
        opacity: 0;
        -webkit-transform: translate3d(0, -100%, 0);
        transform: translate3d(0, -100%, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@keyframes iziT-fadeInDown {
    from {
        opacity: 0;
        -webkit-transform: translate3d(0, -100%, 0);
        transform: translate3d(0, -100%, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@-moz-keyframes iziT-fadeInLeft {
    from {
        opacity: 0;
        -webkit-transform: translate3d(300px, 0, 0);
        transform: translate3d(300px, 0, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@-webkit-keyframes iziT-fadeInLeft {
    from {
        opacity: 0;
        -webkit-transform: translate3d(300px, 0, 0);
        transform: translate3d(300px, 0, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@-o-keyframes iziT-fadeInLeft {
    from {
        opacity: 0;
        -webkit-transform: translate3d(300px, 0, 0);
        transform: translate3d(300px, 0, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@keyframes iziT-fadeInLeft {
    from {
        opacity: 0;
        -webkit-transform: translate3d(300px, 0, 0);
        transform: translate3d(300px, 0, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@-moz-keyframes iziT-fadeInRight {
    from {
        opacity: 0;
        -webkit-transform: translate3d(-300px, 0, 0);
        transform: translate3d(-300px, 0, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@-webkit-keyframes iziT-fadeInRight {
    from {
        opacity: 0;
        -webkit-transform: translate3d(-300px, 0, 0);
        transform: translate3d(-300px, 0, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@-o-keyframes iziT-fadeInRight {
    from {
        opacity: 0;
        -webkit-transform: translate3d(-300px, 0, 0);
        transform: translate3d(-300px, 0, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@keyframes iziT-fadeInRight {
    from {
        opacity: 0;
        -webkit-transform: translate3d(-300px, 0, 0);
        transform: translate3d(-300px, 0, 0);
    }
    to {
        opacity: 1;
        -webkit-transform: none;
        transform: none;
    }
}
@-moz-keyframes iziT-flipInX {
    from {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        opacity: 0;
    }
    40% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    }
    60% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
        transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
        opacity: 1;
    }
    80% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
        transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
    }
    to {
        -webkit-transform: perspective(400px);
        transform: perspective(400px);
    }
}
@-webkit-keyframes iziT-flipInX {
    from {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        opacity: 0;
    }
    40% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    }
    60% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
        transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
        opacity: 1;
    }
    80% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
        transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
    }
    to {
        -webkit-transform: perspective(400px);
        transform: perspective(400px);
    }
}
@-o-keyframes iziT-flipInX {
    from {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        opacity: 0;
    }
    40% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    }
    60% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
        transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
        opacity: 1;
    }
    80% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
        transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
    }
    to {
        -webkit-transform: perspective(400px);
        transform: perspective(400px);
    }
}
@keyframes iziT-flipInX {
    from {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        opacity: 0;
    }
    40% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    }
    60% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
        transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
        opacity: 1;
    }
    80% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
        transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
    }
    to {
        -webkit-transform: perspective(400px);
        transform: perspective(400px);
    }
}
@-moz-keyframes iziT-fadeOut {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
    }
}
@-webkit-keyframes iziT-fadeOut {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
    }
}
@-o-keyframes iziT-fadeOut {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
    }
}
@keyframes iziT-fadeOut {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
    }
}
@-moz-keyframes iziT-fadeOutDown {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(0, 100%, 0);
        transform: translate3d(0, 100%, 0);
    }
}
@-webkit-keyframes iziT-fadeOutDown {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(0, 100%, 0);
        transform: translate3d(0, 100%, 0);
    }
}
@-o-keyframes iziT-fadeOutDown {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(0, 100%, 0);
        transform: translate3d(0, 100%, 0);
    }
}
@keyframes iziT-fadeOutDown {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(0, 100%, 0);
        transform: translate3d(0, 100%, 0);
    }
}
@-moz-keyframes iziT-fadeOutUp {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(0, -100%, 0);
        transform: translate3d(0, -100%, 0);
    }
}
@-webkit-keyframes iziT-fadeOutUp {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(0, -100%, 0);
        transform: translate3d(0, -100%, 0);
    }
}
@-o-keyframes iziT-fadeOutUp {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(0, -100%, 0);
        transform: translate3d(0, -100%, 0);
    }
}
@keyframes iziT-fadeOutUp {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(0, -100%, 0);
        transform: translate3d(0, -100%, 0);
    }
}
@-moz-keyframes iziT-fadeOutLeft {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(-200px, 0, 0);
        transform: translate3d(-200px, 0, 0);
    }
}
@-webkit-keyframes iziT-fadeOutLeft {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(-200px, 0, 0);
        transform: translate3d(-200px, 0, 0);
    }
}
@-o-keyframes iziT-fadeOutLeft {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(-200px, 0, 0);
        transform: translate3d(-200px, 0, 0);
    }
}
@keyframes iziT-fadeOutLeft {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(-200px, 0, 0);
        transform: translate3d(-200px, 0, 0);
    }
}
@-moz-keyframes iziT-fadeOutRight {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(200px, 0, 0);
        transform: translate3d(200px, 0, 0);
    }
}
@-webkit-keyframes iziT-fadeOutRight {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(200px, 0, 0);
        transform: translate3d(200px, 0, 0);
    }
}
@-o-keyframes iziT-fadeOutRight {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(200px, 0, 0);
        transform: translate3d(200px, 0, 0);
    }
}
@keyframes iziT-fadeOutRight {
    from {
        opacity: 1;
    }
    to {
        opacity: 0;
        -webkit-transform: translate3d(200px, 0, 0);
        transform: translate3d(200px, 0, 0);
    }
}
@-moz-keyframes iziT-flipOutX {
    from {
        -webkit-transform: perspective(400px);
        transform: perspective(400px);
    }
    30% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
        opacity: 1;
    }
    to {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        opacity: 0;
    }
}
@-webkit-keyframes iziT-flipOutX {
    from {
        -webkit-transform: perspective(400px);
        transform: perspective(400px);
    }
    30% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
        opacity: 1;
    }
    to {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        opacity: 0;
    }
}
@-o-keyframes iziT-flipOutX {
    from {
        -webkit-transform: perspective(400px);
        transform: perspective(400px);
    }
    30% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
        opacity: 1;
    }
    to {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        opacity: 0;
    }
}
@keyframes iziT-flipOutX {
    from {
        -webkit-transform: perspective(400px);
        transform: perspective(400px);
    }
    30% {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
        transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
        opacity: 1;
    }
    to {
        -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
        opacity: 0;
    }
}
src/main/webapp/static/layui/lay/modules/notice/notice.js
New file
@@ -0,0 +1,1241 @@
layui.define([], function (exports) {
    var PLUGIN_NAME = 'iziToast';  // 样式类名
    var BODY = document.querySelector('body');
    var ISMOBILE = (/Mobi/.test(navigator.userAgent)) ? true : false;
    var MOBILEWIDTH = 568;
    var ISCHROME = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
    var ISFIREFOX = typeof InstallTrigger !== 'undefined';
    var ACCEPTSTOUCH = 'ontouchstart' in document.documentElement;
    // 显示区域
    var POSITIONS = ['bottomRight', 'bottomLeft', 'bottomCenter', 'topRight', 'topLeft', 'topCenter', 'center'];
    // 默认主题
    var THEMES = {
        info: {
            color: 'blue',
            icon: 'ico-info'
        },
        success: {
            color: 'green',
            icon: 'ico-success'
        },
        warning: {
            color: 'orange',
            icon: 'ico-warning'
        },
        error: {
            color: 'red',
            icon: 'ico-error'
        },
        question: {
            color: 'yellow',
            icon: 'ico-question'
        }
    };
    var CONFIG = {};  // 全局配置
    // 默认配置
    var defaults = {
        id: null,
        className: '',  // 自定义class,用空格分割
        title: '',  // 标题
        titleColor: '',  // 标题文字颜色
        titleSize: '',  // 标题文字大小
        titleLineHeight: '',  // 标题高度
        message: '',  // 内容
        messageColor: '',  // 内容文字颜色
        messageSize: '',  // 内容文字大小
        messageLineHeight: '',  // 内容高度
        backgroundColor: '',  // 背景颜色
        theme: 'light', // dark
        color: '', // 背景颜色
        icon: '',  // 图标
        iconText: '',  // 图标文字
        iconColor: '',  // 图标颜色
        iconUrl: null,  // 图标地址
        image: '',  // 是否显示图片
        imageWidth: 60,  // 图片宽度
        maxWidth: null,  // 最大宽度
        zindex: null,  //
        layout: 2,  // 布局类型
        balloon: false,  // 气泡
        close: true,  // 是否显示关闭按钮
        closeOnEscape: false,
        closeOnClick: false,  // 点击关闭
        displayMode: 0,  // 0无限制,1存在就不发出,2销毁之前
        position: 'topRight', // bottomRight, bottomLeft, topRight, topLeft, topCenter, bottomCenter, center
        target: '',  // 显示位置
        targetFirst: null,  // 插入顺序
        timeout: 5000,  // 关闭时间,false不自动关闭
        rtl: false,  // 内容居右
        animateInside: false,  // 进入动画效果
        drag: true,  // 是否可滑动移除
        pauseOnHover: true,  // 鼠标移入暂停进度条时间
        resetOnHover: false,  // 鼠标移入重置进度条时间
        progressBar: true,  // 是否显示进度条
        progressBarColor: '',  // 进度条颜色
        progressBarEasing: 'linear',  // 进度条动画效果
        overlay: false,  // 是否显示遮罩层
        overlayClose: false,  // 点击遮罩层是否关闭
        overlayColor: 'rgba(0, 0, 0, 0.1)',  // 遮罩层颜色
        transitionIn: 'fadeInLeft', // bounceInLeft, bounceInRight, bounceInUp, bounceInDown, fadeIn, fadeInDown, fadeInUp, fadeInLeft, fadeInRight, flipInX
        transitionOut: 'fadeOutRight', // fadeOut, fadeOutUp, fadeOutDown, fadeOutLeft, fadeOutRight, flipOutX
        transitionInMobile: 'bounceInDown',  // 移动端进入动画
        transitionOutMobile: 'fadeOutUp',  // 移动端退出动画
        buttons: {},  // 操作按钮
        inputs: {},  // 输入框
        audio: '',  // 音效
        onOpening: function () {
        },
        onOpened: function () {
        },
        onClosing: function () {
        },
        onClosed: function () {
        }
    };
    var $iziToast = {
        children: {},
        setSetting: function (ref, option, value) {
            $iziToast.children[ref][option] = value;
        },
        getSetting: function (ref, option) {
            return $iziToast.children[ref][option];
        },
        // 全局设置
        settings: function (options) {
            $iziToast.destroy();  // 全部销毁之前的通知
            CONFIG = options;
            defaults = extend(defaults, options || {});
        },
        // 关闭所有通知
        destroy: function () {
            forEach(document.querySelectorAll('.' + PLUGIN_NAME + '-overlay'), function (element, index) {
                element.remove();
            });
            forEach(document.querySelectorAll('.' + PLUGIN_NAME + '-wrapper'), function (element, index) {
                element.remove();
            });
            forEach(document.querySelectorAll('.' + PLUGIN_NAME), function (element, index) {
                element.remove();
            });
            this.children = {};
            // 移除事件监听
            document.removeEventListener(PLUGIN_NAME + '-opened', {}, false);
            document.removeEventListener(PLUGIN_NAME + '-opening', {}, false);
            document.removeEventListener(PLUGIN_NAME + '-closing', {}, false);
            document.removeEventListener(PLUGIN_NAME + '-closed', {}, false);
            document.removeEventListener('keyup', {}, false);
            CONFIG = {};  // 移除全局配置
        },
        // msg类型
        msg: function (msg, options) {
            if (options.icon == 4) {
                options.overlay = true;
                options.timeout = false;
                options.drag = false;
                options.displayMode = 0;
            }
            var icons = ['ico-success', 'ico-error', 'ico-warning', 'ico-load', 'ico-info'];
            options.icon = icons[options.icon - 1];
            var theme = {
                message: msg,
                position: 'topCenter',
                transitionIn: 'bounceInDown',
                transitionOut: 'fadeOut',
                transitionOutMobile: 'fadeOut',
                progressBar: false,
                close: false,
                layout: 1,
                audio: ''
            };
            var settings = extend(CONFIG, options || {});
            settings = extend(theme, settings || {});
            this.show(settings);
        }
    };
    // 关闭指定的通知
    $iziToast.hide = function (options, $toast, closedBy) {
        if (typeof $toast != 'object') {
            $toast = document.querySelector($toast);
        }
        var that = this;
        var settings = extend(this.children[$toast.getAttribute('data-iziToast-ref')], options || {});
        settings.closedBy = closedBy || null;
        delete settings.time.REMAINING;
        $toast.classList.add(PLUGIN_NAME + '-closing');
        // 移除遮罩层
        (function () {
            var $overlay = document.querySelector('.' + PLUGIN_NAME + '-overlay');
            if ($overlay !== null) {
                var refs = $overlay.getAttribute('data-iziToast-ref');
                refs = refs.split(',');
                var index = refs.indexOf(String(settings.ref));
                if (index !== -1) {
                    refs.splice(index, 1);
                }
                $overlay.setAttribute('data-iziToast-ref', refs.join());
                if (refs.length === 0) {
                    $overlay.classList.remove('fadeIn');
                    $overlay.classList.add('fadeOut');
                    setTimeout(function () {
                        $overlay.remove();
                    }, 700);
                }
            }
        })();
        // 移除动画
        if (settings.transitionIn) {
            $toast.classList.remove(settings.transitionIn);
        }
        if (settings.transitionInMobile) {
            $toast.classList.remove(settings.transitionInMobile);
        }
        if (ISMOBILE || window.innerWidth <= MOBILEWIDTH) {
            if (settings.transitionOutMobile)
                $toast.classList.add(settings.transitionOutMobile);
        } else {
            if (settings.transitionOut)
                $toast.classList.add(settings.transitionOut);
        }
        var H = $toast.parentNode.offsetHeight;
        $toast.parentNode.style.height = H + 'px';
        $toast.style.pointerEvents = 'none';
        if (!ISMOBILE || window.innerWidth > MOBILEWIDTH) {
            $toast.parentNode.style.transitionDelay = '0.2s';
        }
        try {
            var event = new CustomEvent(PLUGIN_NAME + '-closing', {detail: settings, bubbles: true, cancelable: true});
            document.dispatchEvent(event);
        } catch (ex) {
            console.warn(ex);
        }
        setTimeout(function () {
            $toast.parentNode.style.height = '0px';
            $toast.parentNode.style.overflow = '';
            setTimeout(function () {
                delete that.children[settings.ref];
                $toast.parentNode.remove();
                try {
                    var event = new CustomEvent(PLUGIN_NAME + '-closed', {
                        detail: settings,
                        bubbles: true,
                        cancelable: true
                    });
                    document.dispatchEvent(event);
                } catch (ex) {
                    console.warn(ex);
                }
                if (typeof settings.onClosed !== 'undefined') {
                    settings.onClosed.apply(null, [settings, $toast, closedBy]);
                }
            }, 1000);
        }, 200);
        // 回调关闭事件
        if (typeof settings.onClosing !== 'undefined') {
            settings.onClosing.apply(null, [settings, $toast, closedBy]);
        }
    };
    // 显示通知
    $iziToast.show = function (options) {
        var that = this;
        // Merge user options with defaults
        var settings = extend(CONFIG, options || {});
        settings = extend(defaults, settings);
        settings.time = {};
        if (settings.id === null) {
            settings.id = generateId(settings.title + settings.message + settings.color);
        }
        if (settings.displayMode == 1 || settings.displayMode == 'once') {
            try {
                if (document.querySelectorAll('.' + PLUGIN_NAME + '#' + settings.id).length > 0) {
                    return false;
                }
            } catch (exc) {
                console.warn('[' + PLUGIN_NAME + '] Could not find an element with this selector: ' + '#' + settings.id + '. Try to set an valid id.');
            }
        }
        if (settings.displayMode == 2 || settings.displayMode == 'replace') {
            try {
                forEach(document.querySelectorAll('.' + PLUGIN_NAME + '#' + settings.id), function (element, index) {
                    that.hide(settings, element, 'replaced');
                });
            } catch (exc) {
                console.warn('[' + PLUGIN_NAME + '] Could not find an element with this selector: ' + '#' + settings.id + '. Try to set an valid id.');
            }
        }
        settings.ref = new Date().getTime() + Math.floor((Math.random() * 10000000) + 1);
        $iziToast.children[settings.ref] = settings;
        var $DOM = {
            body: document.querySelector('body'),
            overlay: document.createElement('div'),
            toast: document.createElement('div'),
            toastBody: document.createElement('div'),
            toastTexts: document.createElement('div'),
            toastCapsule: document.createElement('div'),
            cover: document.createElement('div'),
            buttons: document.createElement('div'),
            inputs: document.createElement('div'),
            icon: !settings.iconUrl ? document.createElement('i') : document.createElement('img'),
            wrapper: null
        };
        $DOM.toast.setAttribute('data-iziToast-ref', settings.ref);
        $DOM.toast.appendChild($DOM.toastBody);
        $DOM.toastCapsule.appendChild($DOM.toast);
        // CSS Settings
        (function () {
            $DOM.toast.classList.add(PLUGIN_NAME);
            $DOM.toast.classList.add(PLUGIN_NAME + '-opening');
            $DOM.toastCapsule.classList.add(PLUGIN_NAME + '-capsule');
            $DOM.toastBody.classList.add(PLUGIN_NAME + '-body');
            $DOM.toastTexts.classList.add(PLUGIN_NAME + '-texts');
            if (ISMOBILE || window.innerWidth <= MOBILEWIDTH) {
                if (settings.transitionInMobile)
                    $DOM.toast.classList.add(settings.transitionInMobile);
            } else {
                if (settings.transitionIn)
                    $DOM.toast.classList.add(settings.transitionIn);
            }
            if (settings.className) {
                var classes = settings.className.split(' ');
                forEach(classes, function (value, index) {
                    $DOM.toast.classList.add(value);
                });
            }
            if (settings.id) {
                $DOM.toast.id = settings.id;
            }
            if (settings.rtl) {
                $DOM.toast.classList.add(PLUGIN_NAME + '-rtl');
                $DOM.toast.setAttribute('dir', 'rtl');
            }
            if (settings.layout > 1) {
                $DOM.toast.classList.add(PLUGIN_NAME + '-layout' + settings.layout);
            }
            if (settings.balloon) {
                $DOM.toast.classList.add(PLUGIN_NAME + '-balloon');
            }
            if (settings.maxWidth) {
                if (!isNaN(settings.maxWidth)) {
                    $DOM.toast.style.maxWidth = settings.maxWidth + 'px';
                } else {
                    $DOM.toast.style.maxWidth = settings.maxWidth;
                }
            }
            if (settings.theme !== '' || settings.theme !== 'light') {
                $DOM.toast.classList.add(PLUGIN_NAME + '-theme-' + settings.theme);
            }
            if (settings.color) { //#, rgb, rgba, hsl
                if (isColor(settings.color)) {
                    $DOM.toast.style.background = settings.color;
                } else {
                    $DOM.toast.classList.add(PLUGIN_NAME + '-color-' + settings.color);
                }
            }
            if (settings.backgroundColor) {
                $DOM.toast.style.background = settings.backgroundColor;
                if (settings.balloon) {
                    $DOM.toast.style.borderColor = settings.backgroundColor;
                }
            }
        })();
        // Cover image
        (function () {
            if (settings.image) {
                $DOM.cover.classList.add(PLUGIN_NAME + '-cover');
                $DOM.cover.style.width = settings.imageWidth + 'px';
                if (isBase64(settings.image.replace(/ /g, ''))) {
                    $DOM.cover.style.backgroundImage = 'url(data:image/png;base64,' + settings.image.replace(/ /g, '') + ')';
                } else {
                    $DOM.cover.style.backgroundImage = 'url(' + settings.image + ')';
                }
                if (settings.rtl) {
                    $DOM.toastBody.style.marginRight = (settings.imageWidth) + 'px';
                } else {
                    $DOM.toastBody.style.marginLeft = (settings.imageWidth) + 'px';
                }
                $DOM.toast.appendChild($DOM.cover);
            }
        })();
        // Button close
        (function () {
            if (settings.close) {
                $DOM.buttonClose = document.createElement('button');
                // $DOM.buttonClose.type = 'button';
                $DOM.buttonClose.setAttribute('type', 'button');
                $DOM.buttonClose.classList.add(PLUGIN_NAME + '-close');
                $DOM.buttonClose.addEventListener('click', function (e) {
                    var button = e.target;
                    that.hide(settings, $DOM.toast, 'button');
                });
                $DOM.toast.appendChild($DOM.buttonClose);
            } else {
                if (settings.rtl) {
                    $DOM.toast.style.paddingLeft = '18px';
                } else {
                    $DOM.toast.style.paddingRight = '18px';
                }
            }
        })();
        // Progress Bar & Timeout
        (function () {
            if (settings.progressBar) {
                $DOM.progressBar = document.createElement('div');
                $DOM.progressBarDiv = document.createElement('div');
                $DOM.progressBar.classList.add(PLUGIN_NAME + '-progressbar');
                $DOM.progressBarDiv.style.background = settings.progressBarColor;
                $DOM.progressBar.appendChild($DOM.progressBarDiv);
                $DOM.toast.appendChild($DOM.progressBar);
            }
            if (settings.timeout) {
                if (settings.pauseOnHover && !settings.resetOnHover) {
                    $DOM.toast.addEventListener('mouseenter', function (e) {
                        that.progress(settings, $DOM.toast).pause();
                    });
                    $DOM.toast.addEventListener('mouseleave', function (e) {
                        that.progress(settings, $DOM.toast).resume();
                    });
                }
                if (settings.resetOnHover) {
                    $DOM.toast.addEventListener('mouseenter', function (e) {
                        that.progress(settings, $DOM.toast).reset();
                    });
                    $DOM.toast.addEventListener('mouseleave', function (e) {
                        that.progress(settings, $DOM.toast).start();
                    });
                }
            }
        })();
        // Icon
        (function () {
            if (settings.iconUrl) {
                $DOM.icon.setAttribute('class', PLUGIN_NAME + '-icon');
                $DOM.icon.setAttribute('src', settings.iconUrl);
            } else if (settings.icon) {
                $DOM.icon.setAttribute('class', PLUGIN_NAME + '-icon ' + settings.icon);
                if (settings.iconText) {
                    $DOM.icon.appendChild(document.createTextNode(settings.iconText));
                }
                if (settings.iconColor) {
                    $DOM.icon.style.color = settings.iconColor;
                }
            }
            if (settings.icon || settings.iconUrl) {
                if (settings.rtl) {
                    $DOM.toastBody.style.paddingRight = '33px';
                } else {
                    $DOM.toastBody.style.paddingLeft = '33px';
                }
                $DOM.toastBody.appendChild($DOM.icon);
            }
        })();
        // Title & Message
        (function () {
            if (settings.title.length > 0) {
                $DOM.strong = document.createElement('strong');
                $DOM.strong.classList.add(PLUGIN_NAME + '-title');
                $DOM.strong.appendChild(createFragElem(settings.title));
                $DOM.toastTexts.appendChild($DOM.strong);
                if (settings.titleColor) {
                    $DOM.strong.style.color = settings.titleColor;
                }
                if (settings.titleSize) {
                    if (!isNaN(settings.titleSize)) {
                        $DOM.strong.style.fontSize = settings.titleSize + 'px';
                    } else {
                        $DOM.strong.style.fontSize = settings.titleSize;
                    }
                }
                if (settings.titleLineHeight) {
                    if (!isNaN(settings.titleSize)) {
                        $DOM.strong.style.lineHeight = settings.titleLineHeight + 'px';
                    } else {
                        $DOM.strong.style.lineHeight = settings.titleLineHeight;
                    }
                }
            }
            if (settings.message.length > 0) {
                $DOM.p = document.createElement('p');
                $DOM.p.classList.add(PLUGIN_NAME + '-message');
                $DOM.p.appendChild(createFragElem(settings.message));
                $DOM.toastTexts.appendChild($DOM.p);
                if (settings.messageColor) {
                    $DOM.p.style.color = settings.messageColor;
                }
                if (settings.messageSize) {
                    if (!isNaN(settings.titleSize)) {
                        $DOM.p.style.fontSize = settings.messageSize + 'px';
                    } else {
                        $DOM.p.style.fontSize = settings.messageSize;
                    }
                }
                if (settings.messageLineHeight) {
                    if (!isNaN(settings.titleSize)) {
                        $DOM.p.style.lineHeight = settings.messageLineHeight + 'px';
                    } else {
                        $DOM.p.style.lineHeight = settings.messageLineHeight;
                    }
                }
            }
            if (settings.title.length > 0 && settings.message.length > 0) {
                if (settings.rtl) {
                    $DOM.strong.style.marginLeft = '10px';
                } else if (settings.layout != 2 && !settings.rtl) {
                    $DOM.strong.style.marginRight = '10px';
                    $DOM.strong.style.marginBottom = '0px';
                }
            }
        })();
        $DOM.toastBody.appendChild($DOM.toastTexts);
        // Inputs
        var $inputs;
        (function () {
            if (settings.inputs.length > 0) {
                $DOM.inputs.classList.add(PLUGIN_NAME + '-inputs');
                forEach(settings.inputs, function (value, index) {
                    $DOM.inputs.appendChild(createFragElem(value[0]));
                    $inputs = $DOM.inputs.childNodes;
                    $inputs[index].classList.add(PLUGIN_NAME + '-inputs-child');
                    if (value[3]) {
                        setTimeout(function () {
                            $inputs[index].focus();
                        }, 300);
                    }
                    $inputs[index].addEventListener(value[1], function (e) {
                        var ts = value[2];
                        return ts(that, $DOM.toast, this, e);
                    });
                });
                $DOM.toastBody.appendChild($DOM.inputs);
            }
        })();
        // Buttons
        (function () {
            if (settings.buttons.length > 0) {
                $DOM.buttons.classList.add(PLUGIN_NAME + '-buttons');
                forEach(settings.buttons, function (value, index) {
                    $DOM.buttons.appendChild(createFragElem(value[0]));
                    var $btns = $DOM.buttons.childNodes;
                    $btns[index].classList.add(PLUGIN_NAME + '-buttons-child');
                    if (value[2]) {
                        setTimeout(function () {
                            $btns[index].focus();
                        }, 300);
                    }
                    $btns[index].addEventListener('click', function (e) {
                        e.preventDefault();
                        var ts = value[1];
                        return ts(that, $DOM.toast, this, e, $inputs);
                    });
                });
            }
            $DOM.toastTexts.appendChild($DOM.buttons);
        })();
        if (settings.message.length > 0 && (settings.inputs.length > 0 || settings.buttons.length > 0)) {
            $DOM.p.style.marginBottom = '0';
        }
        if (settings.inputs.length > 0 || settings.buttons.length > 0) {
            if (settings.rtl) {
                $DOM.toastTexts.style.marginLeft = '10px';
            } else {
                $DOM.toastTexts.style.marginRight = '10px';
            }
            if (settings.inputs.length > 0 && settings.buttons.length > 0) {
                if (settings.rtl) {
                    $DOM.inputs.style.marginLeft = '8px';
                } else {
                    $DOM.inputs.style.marginRight = '8px';
                }
            }
        }
        // Wrap
        (function () {
            $DOM.toastCapsule.style.visibility = 'hidden';
            setTimeout(function () {
                var H = $DOM.toast.offsetHeight;
                var style = $DOM.toast.currentStyle || window.getComputedStyle($DOM.toast);
                var marginTop = style.marginTop;
                marginTop = marginTop.split('px');
                marginTop = parseInt(marginTop[0]);
                var marginBottom = style.marginBottom;
                marginBottom = marginBottom.split('px');
                marginBottom = parseInt(marginBottom[0]);
                $DOM.toastCapsule.style.visibility = '';
                $DOM.toastCapsule.style.height = (H + marginBottom + marginTop) + 'px';
                setTimeout(function () {
                    $DOM.toastCapsule.style.height = 'auto';
                    if (settings.target) {
                        $DOM.toastCapsule.style.overflow = 'visible';
                    }
                }, 500);
                if (settings.timeout) {
                    that.progress(settings, $DOM.toast).start();
                }
            }, 100);
        })();
        // Target
        (function () {
            var position = settings.position;
            if (settings.target) {
                $DOM.wrapper = document.querySelector(settings.target);
                $DOM.wrapper.classList.add(PLUGIN_NAME + '-target');
                if (settings.targetFirst) {
                    $DOM.wrapper.insertBefore($DOM.toastCapsule, $DOM.wrapper.firstChild);
                } else {
                    $DOM.wrapper.appendChild($DOM.toastCapsule);
                }
            } else {
                if (POSITIONS.indexOf(settings.position) == -1) {
                    console.warn('[' + PLUGIN_NAME + '] Incorrect position.\nIt can be › ' + POSITIONS);
                    return;
                }
                if (ISMOBILE || window.innerWidth <= MOBILEWIDTH) {
                    if (settings.position == 'bottomLeft' || settings.position == 'bottomRight' || settings.position == 'bottomCenter') {
                        position = PLUGIN_NAME + '-wrapper-bottomCenter';
                    } else if (settings.position == 'topLeft' || settings.position == 'topRight' || settings.position == 'topCenter') {
                        position = PLUGIN_NAME + '-wrapper-topCenter';
                    } else {
                        position = PLUGIN_NAME + '-wrapper-center';
                    }
                } else {
                    position = PLUGIN_NAME + '-wrapper-' + position;
                }
                $DOM.wrapper = document.querySelector('.' + PLUGIN_NAME + '-wrapper.' + position);
                if (!$DOM.wrapper) {
                    $DOM.wrapper = document.createElement('div');
                    $DOM.wrapper.classList.add(PLUGIN_NAME + '-wrapper');
                    $DOM.wrapper.classList.add(position);
                    document.body.appendChild($DOM.wrapper);
                }
                var targetFirst = settings.targetFirst;
                if ((targetFirst == undefined || targetFirst == null) && (settings.position == 'topLeft' || settings.position == 'topCenter' || settings.position == 'topRight')) {
                    targetFirst = true;
                }
                if (targetFirst) {
                    $DOM.wrapper.insertBefore($DOM.toastCapsule, $DOM.wrapper.firstChild);
                } else {
                    $DOM.wrapper.appendChild($DOM.toastCapsule);
                }
            }
            if (!isNaN(settings.zindex)) {
                $DOM.wrapper.style.zIndex = settings.zindex;
            } else {
                console.warn('[' + PLUGIN_NAME + '] Invalid zIndex.');
            }
        })();
        // Overlay
        (function () {
            if (settings.overlay) {
                if (document.querySelector('.' + PLUGIN_NAME + '-overlay.fadeIn') !== null) {
                    $DOM.overlay = document.querySelector('.' + PLUGIN_NAME + '-overlay');
                    $DOM.overlay.setAttribute('data-iziToast-ref', $DOM.overlay.getAttribute('data-iziToast-ref') + ',' + settings.ref);
                    if (!isNaN(settings.zindex) && settings.zindex !== null) {
                        $DOM.overlay.style.zIndex = settings.zindex - 1;
                    }
                } else {
                    $DOM.overlay.classList.add(PLUGIN_NAME + '-overlay');
                    $DOM.overlay.classList.add('fadeIn');
                    $DOM.overlay.style.background = settings.overlayColor;
                    $DOM.overlay.setAttribute('data-iziToast-ref', settings.ref);
                    if (!isNaN(settings.zindex) && settings.zindex !== null) {
                        $DOM.overlay.style.zIndex = settings.zindex - 1;
                    }
                    document.querySelector('body').appendChild($DOM.overlay);
                }
                if (settings.overlayClose) {
                    $DOM.overlay.removeEventListener('click', {});
                    $DOM.overlay.addEventListener('click', function (e) {
                        that.hide(settings, $DOM.toast, 'overlay');
                    });
                } else {
                    $DOM.overlay.removeEventListener('click', {});
                }
            }
        })();
        // Inside animations
        (function () {
            if (settings.animateInside) {
                $DOM.toast.classList.add(PLUGIN_NAME + '-animateInside');
                var animationTimes = [200, 100, 300];
                if (settings.transitionIn == 'bounceInLeft' || settings.transitionIn == 'bounceInRight') {
                    animationTimes = [400, 200, 400];
                }
                if (settings.title.length > 0) {
                    setTimeout(function () {
                        $DOM.strong.classList.add('slideIn');
                    }, animationTimes[0]);
                }
                if (settings.message.length > 0) {
                    setTimeout(function () {
                        $DOM.p.classList.add('slideIn');
                    }, animationTimes[1]);
                }
                if (settings.icon || settings.iconUrl) {
                    setTimeout(function () {
                        $DOM.icon.classList.add('revealIn');
                    }, animationTimes[2]);
                }
                var counter = 150;
                if (settings.buttons.length > 0 && $DOM.buttons) {
                    setTimeout(function () {
                        forEach($DOM.buttons.childNodes, function (element, index) {
                            setTimeout(function () {
                                element.classList.add('revealIn');
                            }, counter);
                            counter = counter + 150;
                        });
                    }, settings.inputs.length > 0 ? 150 : 0);
                }
                if (settings.inputs.length > 0 && $DOM.inputs) {
                    counter = 150;
                    forEach($DOM.inputs.childNodes, function (element, index) {
                        setTimeout(function () {
                            element.classList.add('revealIn');
                        }, counter);
                        counter = counter + 150;
                    });
                }
            }
        })();
        settings.onOpening.apply(null, [settings, $DOM.toast]);
        try {
            var event = new CustomEvent(PLUGIN_NAME + '-opening', {detail: settings, bubbles: true, cancelable: true});
            document.dispatchEvent(event);
        } catch (ex) {
            console.warn(ex);
        }
        setTimeout(function () {
            $DOM.toast.classList.remove(PLUGIN_NAME + '-opening');
            $DOM.toast.classList.add(PLUGIN_NAME + '-opened');
            try {
                var event = new CustomEvent(PLUGIN_NAME + '-opened', {
                    detail: settings,
                    bubbles: true,
                    cancelable: true
                });
                document.dispatchEvent(event);
            } catch (ex) {
                console.warn(ex);
            }
            settings.onOpened.apply(null, [settings, $DOM.toast]);
        }, 1000);
        if (settings.drag) {
            if (ACCEPTSTOUCH) {
                $DOM.toast.addEventListener('touchstart', function (e) {
                    drag.startMoving(this, that, settings, e);
                }, false);
                $DOM.toast.addEventListener('touchend', function (e) {
                    drag.stopMoving(this, e);
                }, false);
            } else {
                $DOM.toast.addEventListener('mousedown', function (e) {
                    e.preventDefault();
                    drag.startMoving(this, that, settings, e);
                }, false);
                $DOM.toast.addEventListener('mouseup', function (e) {
                    e.preventDefault();
                    drag.stopMoving(this, e);
                }, false);
            }
        }
        if (settings.closeOnEscape) {
            document.addEventListener('keyup', function (evt) {
                evt = evt || window.event;
                if (evt.keyCode == 27) {
                    that.hide(settings, $DOM.toast, 'esc');
                }
            });
        }
        if (settings.closeOnClick) {
            $DOM.toast.addEventListener('click', function (evt) {
                that.hide(settings, $DOM.toast, 'toast');
            });
        }
        // 播放声音
        if (settings.audio) {
            that.playSound(settings.audio);
        }
        that.toast = $DOM.toast;
    };
    // 控制进度条
    $iziToast.progress = function (options, $toast, callback) {
        var that = this,
            ref = $toast.getAttribute('data-iziToast-ref'),
            settings = extend(this.children[ref], options || {}),
            $elem = $toast.querySelector('.' + PLUGIN_NAME + '-progressbar div');
        return {
            start: function () {
                if (typeof settings.time.REMAINING == 'undefined') {
                    $toast.classList.remove(PLUGIN_NAME + '-reseted');
                    if ($elem !== null) {
                        $elem.style.transition = 'width ' + settings.timeout + 'ms ' + settings.progressBarEasing;
                        $elem.style.width = '0%';
                    }
                    settings.time.START = new Date().getTime();
                    settings.time.END = settings.time.START + settings.timeout;
                    settings.time.TIMER = setTimeout(function () {
                        clearTimeout(settings.time.TIMER);
                        if (!$toast.classList.contains(PLUGIN_NAME + '-closing')) {
                            that.hide(settings, $toast, 'timeout');
                            if (typeof callback === 'function') {
                                callback.apply(that);
                            }
                        }
                    }, settings.timeout);
                    that.setSetting(ref, 'time', settings.time);
                }
            },
            pause: function () {
                if (typeof settings.time.START !== 'undefined' && !$toast.classList.contains(PLUGIN_NAME + '-paused') && !$toast.classList.contains(PLUGIN_NAME + '-reseted')) {
                    $toast.classList.add(PLUGIN_NAME + '-paused');
                    settings.time.REMAINING = settings.time.END - new Date().getTime();
                    clearTimeout(settings.time.TIMER);
                    that.setSetting(ref, 'time', settings.time);
                    if ($elem !== null) {
                        var computedStyle = window.getComputedStyle($elem),
                            propertyWidth = computedStyle.getPropertyValue('width');
                        $elem.style.transition = 'none';
                        $elem.style.width = propertyWidth;
                    }
                    if (typeof callback === 'function') {
                        setTimeout(function () {
                            callback.apply(that);
                        }, 10);
                    }
                }
            },
            resume: function () {
                if (typeof settings.time.REMAINING !== 'undefined') {
                    $toast.classList.remove(PLUGIN_NAME + '-paused');
                    if ($elem !== null) {
                        $elem.style.transition = 'width ' + settings.time.REMAINING + 'ms ' + settings.progressBarEasing;
                        $elem.style.width = '0%';
                    }
                    settings.time.END = new Date().getTime() + settings.time.REMAINING;
                    settings.time.TIMER = setTimeout(function () {
                        clearTimeout(settings.time.TIMER);
                        if (!$toast.classList.contains(PLUGIN_NAME + '-closing')) {
                            that.hide(settings, $toast, 'timeout');
                            if (typeof callback === 'function') {
                                callback.apply(that);
                            }
                        }
                    }, settings.time.REMAINING);
                    that.setSetting(ref, 'time', settings.time);
                } else {
                    this.start();
                }
            },
            reset: function () {
                clearTimeout(settings.time.TIMER);
                delete settings.time.REMAINING;
                that.setSetting(ref, 'time', settings.time);
                $toast.classList.add(PLUGIN_NAME + '-reseted');
                $toast.classList.remove(PLUGIN_NAME + '-paused');
                if ($elem !== null) {
                    $elem.style.transition = 'none';
                    $elem.style.width = '100%';
                }
                if (typeof callback === 'function') {
                    setTimeout(function () {
                        callback.apply(that);
                    }, 10);
                }
            }
        };
    };
    // 判断是否是ie9以下版本
    var isIE9_ = function () {
        var userAgent = navigator.userAgent;
        if (window.navigator.userAgent.indexOf("MSIE") >= 1) {
            var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
            reIE.test(userAgent);
            var fIEVersion = parseFloat(RegExp["$1"]);
            if (fIEVersion != 10) {
                return true;
            }
        }
        return false;
    };
    // 给Element添加remove方法
    if (!('remove' in Element.prototype)) {
        Element.prototype.remove = function () {
            if (this.parentNode) {
                this.parentNode.removeChild(this);
            }
        };
    }
    // 自定义事件
    if (typeof window.CustomEvent !== 'function') {
        var CustomEventPolyfill = function (event, params) {
            params = params || {bubbles: false, cancelable: false, detail: undefined};
            var evt = document.createEvent('CustomEvent');
            evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
            return evt;
        };
        CustomEventPolyfill.prototype = window.Event.prototype;
        window.CustomEvent = CustomEventPolyfill;
    }
    // 遍历数据
    var forEach = function (collection, callback, scope) {
        if (Object.prototype.toString.call(collection) === '[object Object]') {
            for (var prop in collection) {
                if (Object.prototype.hasOwnProperty.call(collection, prop)) {
                    callback.call(scope, collection[prop], prop, collection);
                }
            }
        } else {
            if (collection) {
                for (var i = 0, len = collection.length; i < len; i++) {
                    callback.call(scope, collection[i], i, collection);
                }
            }
        }
    };
    // 合并自定义参数和默认参数
    var extend = function (defaults, options) {
        var extended = {};
        forEach(defaults, function (value, prop) {
            extended[prop] = defaults[prop];
        });
        forEach(options, function (value, prop) {
            extended[prop] = options[prop];
        });
        return extended;
    };
    // 创建新的文档片段
    var createFragElem = function (htmlStr) {
        var frag = document.createDocumentFragment(),
            temp = document.createElement('div');
        temp.innerHTML = htmlStr;
        while (temp.firstChild) {
            frag.appendChild(temp.firstChild);
        }
        return frag;
    };
    // 生成ID
    var generateId = function (params) {
        var newId = btoa(encodeURIComponent(params));
        return newId.replace(/=/g, "");
    };
    // 判断是否是颜色字符串
    var isColor = function (color) {
        if (color.substring(0, 1) == '#' || color.substring(0, 3) == 'rgb' || color.substring(0, 3) == 'hsl') {
            return true;
        } else {
            return false;
        }
    };
    // 判断是否是base64字符串
    var isBase64 = function (str) {
        try {
            return btoa(atob(str)) == str;
        } catch (err) {
            return false;
        }
    };
    // 拖拽方法
    var drag = function () {
        return {
            move: function (toast, instance, settings, xpos) {
                var opacity,
                    opacityRange = 0.3,
                    distance = 180;
                if (xpos !== 0) {
                    toast.classList.add(PLUGIN_NAME + '-dragged');
                    toast.style.transform = 'translateX(' + xpos + 'px)';
                    if (xpos > 0) {
                        opacity = (distance - xpos) / distance;
                        if (opacity < opacityRange) {
                            instance.hide(extend(settings, {
                                transitionOut: 'fadeOutRight',
                                transitionOutMobile: 'fadeOutRight'
                            }), toast, 'drag');
                        }
                    } else {
                        opacity = (distance + xpos) / distance;
                        if (opacity < opacityRange) {
                            instance.hide(extend(settings, {
                                transitionOut: 'fadeOutLeft',
                                transitionOutMobile: 'fadeOutLeft'
                            }), toast, 'drag');
                        }
                    }
                    toast.style.opacity = opacity;
                    if (opacity < opacityRange) {
                        if (ISCHROME || ISFIREFOX)
                            toast.style.left = xpos + 'px';
                        toast.parentNode.style.opacity = opacityRange;
                        this.stopMoving(toast, null);
                    }
                }
            },
            startMoving: function (toast, instance, settings, e) {
                e = e || window.event;
                var posX = ((ACCEPTSTOUCH) ? e.touches[0].clientX : e.clientX),
                    toastLeft = toast.style.transform.replace('px)', '');
                toastLeft = toastLeft.replace('translateX(', '');
                var offsetX = posX - toastLeft;
                if (settings.transitionIn) {
                    toast.classList.remove(settings.transitionIn);
                }
                if (settings.transitionInMobile) {
                    toast.classList.remove(settings.transitionInMobile);
                }
                toast.style.transition = '';
                if (ACCEPTSTOUCH) {
                    document.ontouchmove = function (e) {
                        e.preventDefault();
                        e = e || window.event;
                        var posX = e.touches[0].clientX,
                            finalX = posX - offsetX;
                        drag.move(toast, instance, settings, finalX);
                    };
                } else {
                    document.onmousemove = function (e) {
                        e.preventDefault();
                        e = e || window.event;
                        var posX = e.clientX,
                            finalX = posX - offsetX;
                        drag.move(toast, instance, settings, finalX);
                    };
                }
            },
            stopMoving: function (toast, e) {
                if (ACCEPTSTOUCH) {
                    document.ontouchmove = function () {
                    };
                } else {
                    document.onmousemove = function () {
                    };
                }
                toast.style.opacity = '';
                toast.style.transform = '';
                if (toast.classList.contains(PLUGIN_NAME + '-dragged')) {
                    toast.classList.remove(PLUGIN_NAME + '-dragged');
                    toast.style.transition = 'transform 0.4s ease, opacity 0.4s ease';
                    setTimeout(function () {
                        toast.style.transition = '';
                    }, 400);
                }
            }
        };
    }();
    // 兼容IE
    var Base64 = {
        _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", encode: function (e) {
            var t = "";
            var n, r, i, s, o, u, a;
            var f = 0;
            e = Base64._utf8_encode(e);
            while (f < e.length) {
                n = e.charCodeAt(f++);
                r = e.charCodeAt(f++);
                i = e.charCodeAt(f++);
                s = n >> 2;
                o = (n & 3) << 4 | r >> 4;
                u = (r & 15) << 2 | i >> 6;
                a = i & 63;
                if (isNaN(r)) {
                    u = a = 64
                } else if (isNaN(i)) {
                    a = 64
                }
                t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
            }
            return t
        }, decode: function (e) {
            var t = "";
            var n, r, i;
            var s, o, u, a;
            var f = 0;
            e = e.replace(/[^A-Za-z0-9+/=]/g, "");
            while (f < e.length) {
                s = this._keyStr.indexOf(e.charAt(f++));
                o = this._keyStr.indexOf(e.charAt(f++));
                u = this._keyStr.indexOf(e.charAt(f++));
                a = this._keyStr.indexOf(e.charAt(f++));
                n = s << 2 | o >> 4;
                r = (o & 15) << 4 | u >> 2;
                i = (u & 3) << 6 | a;
                t = t + String.fromCharCode(n);
                if (u != 64) {
                    t = t + String.fromCharCode(r)
                }
                if (a != 64) {
                    t = t + String.fromCharCode(i)
                }
            }
            t = Base64._utf8_decode(t);
            return t
        }, _utf8_encode: function (e) {
            e = e.replace(/rn/g, "n");
            var t = "";
            for (var n = 0; n < e.length; n++) {
                var r = e.charCodeAt(n);
                if (r < 128) {
                    t += String.fromCharCode(r)
                } else if (r > 127 && r < 2048) {
                    t += String.fromCharCode(r >> 6 | 192);
                    t += String.fromCharCode(r & 63 | 128)
                } else {
                    t += String.fromCharCode(r >> 12 | 224);
                    t += String.fromCharCode(r >> 6 & 63 | 128);
                    t += String.fromCharCode(r & 63 | 128)
                }
            }
            return t
        }, _utf8_decode: function (e) {
            var t = "";
            var n = 0;
            var r = c1 = c2 = 0;
            while (n < e.length) {
                r = e.charCodeAt(n);
                if (r < 128) {
                    t += String.fromCharCode(r);
                    n++
                } else if (r > 191 && r < 224) {
                    c2 = e.charCodeAt(n + 1);
                    t += String.fromCharCode((r & 31) << 6 | c2 & 63);
                    n += 2
                } else {
                    c2 = e.charCodeAt(n + 1);
                    c3 = e.charCodeAt(n + 2);
                    t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63);
                    n += 3
                }
            }
            return t
        }
    };
    if (isIE9_()) {
        // 兼容btoa和atob方法
        window.btoa = function (str) {
            return Base64.encode(str);
        };
        window.atob = function (str) {
            return Base64.decode(str);
        };
        // 兼容classList属性
        if (!("classList" in document.documentElement)) {
            Object.defineProperty(window.Element.prototype, 'classList', {
                get: function () {
                    var self = this;
                    function update(fn) {
                        return function () {
                            var className = self.className.replace(/^\s+|\s+$/g, ''),
                                valArr = arguments;
                            return fn(className, valArr)
                        }
                    }
                    function add_rmv(className, valArr, tag) {
                        for (var i in valArr) {
                            if (typeof valArr[i] !== 'string' || !!~valArr[i].search(/\s+/g)) throw TypeError('the type of value is error')
                            var temp = valArr[i]
                            var flag = !!~className.search(new RegExp('(\\s+)?' + temp + '(\\s+)?'))
                            if (tag === 1) {
                                !flag ? className += ' ' + temp : ''
                            } else if (tag === 2) {
                                flag ? className = className.replace(new RegExp('(\\s+)?' + temp), '') : ''
                            }
                        }
                        self.className = className;
                        return tag;
                    }
                    return {
                        add: update(function (className, valArr) {
                            add_rmv(className, valArr, 1)
                        }),
                        remove: update(function (className, valArr) {
                            add_rmv(className, valArr, 2)
                        }),
                        toggle: function (value) {
                            if (typeof value !== 'string' || arguments.length === 0) throw TypeError("Failed to execute 'toggle' on 'DOMTokenList': 1 argument(string) required, but only 0 present.")
                            if (arguments.length === 1) {
                                this.contains(value) ? this.remove(value) : this.add(value)
                                return
                            }
                            !arguments[1] ? this.remove(value) : this.add(value)
                        },
                        contains: update(function (className, valArr) {
                            if (valArr.length === 0) throw TypeError("Failed to execute 'contains' on 'DOMTokenList': 1 argument required, but only 0 present.")
                            if (typeof valArr[0] !== 'string' || !!~valArr[0].search(/\s+/g)) return false
                            return !!~className.search(new RegExp(valArr[0]))
                        }),
                        item: function (index) {
                            typeof index === 'string' ? index = parseInt(index) : ''
                            if (arguments.length === 0 || typeof index !== 'number') throw TypeError("Failed to execute 'toggle' on 'DOMTokenList': 1 argument required, but only 0 present.")
                            var claArr = self.className.replace(/^\s+|\s+$/, '').split(/\s+/)
                            var len = claArr.length
                            if (index < 0 || index >= len) return null
                            return claArr[index]
                        }
                    }
                }
            });
        }
    }
    // 播放声音
    $iziToast.playSound = function (src) {
        if (!(src.indexOf('http') == 0)) {
            src = layui.cache.base + 'notice/' + src + '.wav';
        }
        if (!!window.ActiveXObject || "ActiveXObject" in window) {  // IE
            var embed = document.noticePlay;
            if (embed) {
                embed.remove();
            }
            embed = document.createElement('embed');
            embed.setAttribute('name', 'noticePlay');
            embed.setAttribute('src', src);
            embed.setAttribute('autostart', true);
            embed.setAttribute('loop', false);
            embed.setAttribute('hidden', true);
            document.body.appendChild(embed);
            embed = document.noticePlay;
            embed.volume = 100;
        } else {   // 非IE
            var audio = document.createElement('audio');
            audio.setAttribute('hidden', true);
            audio.setAttribute('src', src);
            document.body.appendChild(audio);
            audio.addEventListener('ended', function () {
                audio.parentNode.removeChild(audio);
            }, false);
            audio.play();
        }
    };
    // 不同主题的通知
    forEach(THEMES, function (theme, name) {
        $iziToast[name] = function (options) {
            var settings = extend(CONFIG, options || {});
            settings = extend(theme, settings || {});
            this.show(settings);
        };
    });
    layui.link(layui.cache.base + 'notice/notice.css');  // 加载css
    exports('notice', $iziToast);
});
src/main/webapp/views/home/console.html
New file
@@ -0,0 +1,440 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
    <script type="text/javascript" src="../../static/js/common.js"></script>
    <script type="text/javascript" src="../../static/layui/layui.js"></script>
    <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
    <script type="text/javascript" src="../../static/js/echarts/echarts.min.js"></script>
    <script type="text/javascript" src="../../static/js/echarts/highcharts.js"></script>
    <style>
        body {
            background-color: #f1f1f1;
        }
        .home-elem {
            background-color: #fff;
            height: 30%;
            margin: 15px 15px 45px 15px;
            border-radius: 5px;
            box-shadow: 0 0 3px rgba(0,0,0,.3);
        }
        .home-elem:first-child{
            margin-bottom: 0;
        }
        .chart-elem {
            box-sizing: border-box;
            display: inline-block;
            width: 49%;
        }
        .chart-elem div {
            padding-top: 15px;
            padding-bottom: 5px;
        }
        .chart-elem:first-child {
            padding: 0 50px;
        }
        .chart-elem:last-child {
            padding: 0 50px;
            border-left: 1px solid rgba(0,0,0,.1);
        }
        /*表格工具栏*/
        .layui-table-tool {
            display: none;
        }
        /*表格*/
        .layui-table thead th {
            font-weight: bold;
            text-align: center;
        }
        div .layui-table-tool .layui-table-tool-self .layui-inline[title='导出']{
            display: none;
        }
        .layui-form.layui-border-box.layui-table-view{
            margin: 15px 0 35px 0;
            width: 100%;
            border-width: 0;
        }
        .layui-table-box{
            padding-bottom: 10px;
        }
        .layui-table-body.layui-table-main{
            overflow: hidden;
        }
        .layui-table-page{
            border-width: 0;
        }
        .layui-table tbody tr:hover, .layui-table thead tr, .layui-table-click, .layui-table-header, .layui-table-hover, .layui-table-mend, .layui-table-patch, .layui-table-tool, .layui-table-total, .layui-table-total tr, .layui-table[lay-even] tr:nth-child(even) {
            background-color: #f9f9f9;
        }
        .layui-table thead tr {
            background-color: #fff;
        }
        #form-header {
            font-size: 18px;
            color: #377bb5;
            font-weight: bold;
            height: 30px;
            box-sizing: border-box;
            padding: 10px 0 10px 20px;
        }
        .layui-form.layui-border-box.layui-table-view {
            border-top: 1px solid rgba(0,0,0,.1);
        }
        #search-box {
            margin-left: 10px;
            z-index: 999;
            position: relative;
            padding: 0 30px 10px 30px;
        }
    </style>
</head>
<body>
<!--报表数据-->
<div class="home-elem charts-contain">
    <div class="chart-elem">
        <div id="pie"></div>
    </div>
    <div class="chart-elem">
        <div id="line"></div>
    </div>
</div>
<!--表格数据-->
<div class="home-elem loc-retention">
    <div class="layui-form">
        <div id="form-header">库存滞留时间统计表</div>
        <div class="layui-card" style="padding: 0 20px 1px 20px;">
            <fieldset class="layui-elem-field site-demo-button" style="margin: 20px;">
                <legend>搜索栏</legend>
                <div id="search-box" class="layui-form layui-card-header">
                    <div class="layui-inline">
                        <div class="layui-input-inline">
                            <input class="layui-input" type="text" name="matnr" placeholder="商品编号" autocomplete="off">
                        </div>
                    </div>
                    <div class="layui-inline">
                        <div class="layui-input-inline">
                            <input class="layui-input" type="text" name="specs" placeholder="规格" autocomplete="off">
                        </div>
                    </div>
                    <!-- 待添加 -->
                    <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block">
                        <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">搜索</button>
                        <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">重置</button>
                    </div>
                </div>
            </fieldset>
        </div>
        <table class="layui-hide" id="stayTime" lay-filter="stayTime"></table>
    </div>
</div>
</body>
<script>
    pieCharts();
    lineCharts();
    // 饼图
    function pieCharts(){
        $.ajax({
            url:baseUrl+'/console/loc/pie/charts',
            headers: {'token': localStorage.getItem('token')},
            dataType: 'json',
            contentType: 'application/json;charset=UTF-8',
            crossDomain: true,
            method: 'POST',
            success:function(res){
                var data = res.data;
                var dataPie=eval(data.rows);
                var chart = {
                    plotBackgroundColor: null,
                    plotBorderWidth: null,
                    plotShadow: false
                };
                var title = {
                    text: '库位使用比例',
                    margin:1,
                    style: {fontSize: '18px',color: '#777',fontWeight: 'bold'},
                    y: 5
                };
                var tooltip = {
                    pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>'
                };
                var plotOptions = {
                    pie: {
                        allowPointSelect: true,
                        cursor: 'pointer',
                        dataLabels: {
                            enabled: true,
                            format: '<b>{point.name}</b>: {point.percentage:.1f} %',
                            style: {
                                color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'
                            }
                        }
                    }
                };
                var series= [{
                    type: 'pie',
                    name: '库位占比',
                    data: dataPie
                }];
                var loading = {
                    hideDuration: 3,
                    showDuration: 3
                };
                var json = {};
                json.chart = chart;
                json.title = title;
                json.tooltip = tooltip;
                json.series = series;
                json.plotOptions = plotOptions;
                json.loading = loading;
                json.credits = {enabled: false};
                $('#pie').highcharts(json);
            },
            error:function(){
            }
        });
    }
    // 折线图
    function lineCharts() {
        $.ajax({
            url: baseUrl+'/console/locIo/line/charts',
            headers: {'token': localStorage.getItem('token')},
            dataType: 'json',
            contentType: 'application/json;charset=UTF-8',
            method: 'POST',
            success: function (res) {
                var data = res.data;
                var dataPie = eval(data.rows);
                var title = {
                    text: '日入出库数量',
                    margin: 1,
                    style: {fontSize: '18px',color: '#777',fontWeight: 'bold'},
                    y: 5
                };
                var xAxis = {
                    categories: [getDate(-11), getDate(-10), getDate(-9), getDate(-8), getDate(-7), getDate(-6),
                        getDate(-5), getDate(-4), getDate(-3), getDate(-2), getDate(-1), getDate(-0)]
                };
                var yAxis = {
                    title: {
                        text: '入/出库数量'
                    },
                    plotLines: [{
                        value: 0,
                        width: 1,
                        color: '#808080'
                    }]
                };
                var tooltip = {};
                var legend = {
                    layout: 'vertical',
                    align: 'right',
                    verticalAlign: 'middle',
                    borderWidth: 0
                };
                var loading = {
                    hideDuration: 3,
                    showDuration: 3
                }
                var series = dataPie;
                var json = {};
                json.title = title;
                json.xAxis = xAxis;
                json.yAxis = yAxis;
                json.tooltip = tooltip;
                json.legend = legend;
                json.loading = loading;
                json.series = series;
                json.credits = {enabled: false};
                $('#line').highcharts(json);
            }
        });
    }
    // 表格
    var pageCurr;
    function getCol() {
        var cols = [
            //{field: 'appeTime$', title: '入库时间', align: 'center', width: 165}
            {field: 'stay_time', align: 'center',title: '滞留天数',width: 90}
            ,{field: 'store_max_date', align: 'center',title: '库龄上限',width: 90}
            ,{field: 'store_min', title: '库存下限', align: 'center'}
            ,{field: 'sum_qty', title: '库存总数', align: 'center'}
            ,{field: 'store_max', title: '库存上限', align: 'center'}
            ,{field: 'loc_no', align: 'center',title: '库位号',width: 90}
        ];
        cols.push.apply(cols, detlCols);
        //cols.push({field: 'sum_qty', title: '库存总数', align: 'center'})
        return cols;
    }
    layui.use(['table','laydate', 'form'], function() {
        var table = layui.table;
        var $ = layui.jquery;
        var layer = layui.layer;
        var form = layui.form;
        // 数据渲染
        tableIns = table.render({
            elem: '#stayTime',
            headers: {token: localStorage.getItem('token')},
            url: baseUrl+'/report/viewStayTimeList.action',
            page: true,
            limit: 10,
            toolbar: '#toolbar',
            even: true,
            cellMinWidth: 50,
            crossDomain: true,
            cols: [getCol()],
            request: {
                pageName: 'curr',
                pageSize: 'limit'
            },
            parseData: function (res) {
                return {
                    'code': res.code,
                    'msg': res.msg,
                    'count': res.data.total,
                    'data': res.data.records
                }
            },
            response: {
                statusCode: 200
            },
            done: function(res, curr, count) {
                var that = this.elem.next();
                res.data.forEach(function (item, index) {
                    var tr = that.find(".layui-table-box tbody tr[data-index='" + index + "']");
                    if (item.store_max_date != null) {
                        if (item.stay_time > item.store_max_date) {
                            tr.css("background-color", "#ff6f00");
                            tr.css("color", "white");
                            tr.children()[1].style.backgroundColor="#ff0000"
                        }
                    }
                    //低于下限
                    if (item.sum_qty < item.store_min) {
                        tr.css("background-color", "#ff6f00");
                        tr.css("color", "white");
                        tr.children()[2].style.backgroundColor="rgb(255,0,0)"
                        tr.children()[2].style.color="white"
                        tr.children()[3].style.backgroundColor="#ff0000"
                        tr.children()[3].style.color="white"
                    }
                    //高于上限
                    if(item.store_max != null) {
                        if (item.sum_qty > item.store_max) {
                            tr.css("background-color", "#ff6f00");
                            tr.css("color", "white");
                            tr.children()[3].style.backgroundColor="#009c04"
                            tr.children()[3].style.color="white"
                            tr.children()[4].style.backgroundColor="#3da83f"
                            tr.children()[4].style.color="white"
                        }
                    }
                });
                if (res.code === 403) {
                    top.location.href = baseUrl+"/";
                }
                pageCurr=curr;
            }
        });
        // 监听排序事件
        table.on('sort(stayTime)', function (obj) {
            var searchData = {};
            $.each($('#search-box [name]').serializeArray(), function() {
                searchData[this.name] = this.value;
            });
            searchData['orderByField'] = obj.field;
            searchData['orderByType'] = obj.type;
            tableIns.reload({
                where: searchData,
                page: {
                    curr: 1
                },
                done: function (res, curr, count) {
                    var that = this.elem.next();
                    res.data.forEach(function (item, index) {
                        if (item.store_max_date != null) {
                            if (item.stay_time > item.store_max_date) {
                                var tr = that.find(".layui-table-box tbody tr[data-index='" + index + "']");
                                tr.css("background-color", "#FF5722");
                                tr.css("color", "white");
                            }
                        }
                    });
                    if (res.code === 403) {
                        top.location.href = baseUrl+"/";
                    }
                    pageCurr=curr;
                }
            });
        });
        // 搜索栏搜索事件
        form.on('submit(search)', function (data) {
            tableReload();
        });
        // 搜索栏搜索事件
        form.on('submit(reset)', function (data) {
            $(':input', $('#search-box'))
                .val('')
                .removeAttr('checked')
                .removeAttr('selected');
            var searchData = {};
            $.each($('#search-box [name]').serializeArray(), function() {
                searchData[this.name] = this.value;
            });
            tableIns.reload({
                where: searchData
            });
        });
        function tableReload() {
            var searchData = {};
            $.each($('#search-box [name]').serializeArray(), function() {
                searchData[this.name] = this.value;
            });
            tableIns.reload({
                where: searchData
            });
        }
    });
    function getDate(value){
        var date = new Date();// 获取当前时间
        date.setDate(date.getDate() + value);// 设置天数 -1 天
        return date.Format("MM-dd");
    }
    /**
     * 日期格式化
     */
    Date.prototype.Format = function (fmt) {
        var o = {
            "M+": this.getMonth() + 1, //月份
            "d+": this.getDate(), //日
            "h+": this.getHours(), //小时
            "m+": this.getMinutes(), //分
            "s+": this.getSeconds(), //秒
            "q+": Math.floor((this.getMonth() + 3) / 3), //季度
            "S": this.getMilliseconds() //毫秒
        };
        if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
        for (var k in o)
            if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        return fmt;
    }
</script>
</html>
src/main/webapp/views/home/map.html
New file
@@ -0,0 +1,1118 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>库位地图</title>
    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
    <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
    <script type="text/javascript" src="../../static/layui/layui.js"></script>
    <script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
    <script type="text/javascript" src="../../static/js/common.js"></script>
    <script type="text/javascript" src="../../static/js/vue.min.js"></script>
    <style>
        .pointContainer {
            display: flex;
            justify-content: center;
            margin-top: 1px;
        }
        .pointBox {
            background: #bababa;
            width: 40px;
            height: 40px;
            margin-right: 1px;
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 14px;
            user-select: none;
            color: #fff;
        }
        .pointBox:hover{
            background: #00ff7f;
        }
        .pointBoxEmpty {
            background: #c2c934;
        }
        .pointBoxOut {
            background: #f1aa19;
        }
        .pointBoxOutYy {
            background: #618593;
        }
        .pointBoxInYy {
            background: #fa736f;
        }
        .pointBoxGreen {
            background: #00ff7f;
        }
        .pointBoxBlue {
            background: #55aaff;
        }
        .pointBoxRed {
            background: #ff0000;
        }
        .pointBoxStart {
            background: #ffaa00;
        }
        .pointBoxEnd {
            background: #ff55ff;
        }
        .pointBoxStation {
            background: #ffff00;
        }
        .chargeStation {
            background: #ffaa7f;
        }
        .pointBoxDefault {
            background: #86779d;
        }
        .pointBoxSelected {
            background: #00ff7f !important;
        }
        .pointBoxSearch {
            background: #9900ff;
        }
        .crnLine{
            width: auto;
            height: 2px;
            margin: 10px 0;
            background: #000;
            position: relative;
        }
        .popBox {
            position: absolute;
        }
        /*卡片样式start*/
        .apple-card {
            width: 190px;
            height: 254px;
            margin: 0 auto;
            background-color: #011522;
            border-radius: 8px;
            z-index: 1;
            animation:fadeInOut 0.5s 1;
        }
        .apple-card .tools {
            display: flex;
            align-items: center;
            padding: 9px;
        }
        .apple-card .circle {
            padding: 0 4px;
        }
        .apple-card .box {
            display: inline-block;
            align-items: center;
            width: 10px;
            height: 10px;
            padding: 1px;
            border-radius: 50%;
        }
        .apple-card .red {
            background-color: #ff605c;
            position: relative;
        }
        .apple-card .red:hover{
            background-color: #ff0300;
        }
        .apple-card .red:hover::before {
            content: "x";
            font-size: 11px;
            color: #fff;
            width: 10px;
            height: 10px;
            display: flex;
            justify-content: center;
            align-items: center;
            position: absolute;
            animation:fadeInOut 0.5s 1;
        }
        .apple-card .yellow {
            background-color: #ffbd44;
        }
        .apple-card .green {
            background-color: #00ca4e;
        }
        .apple-card .card-content{
            color: #fff;
            padding: 10px;
        }
        /*卡片样式end*/
        /*滑动卡片start*/
        .hoverCard {
            width: 160px;
            height: 224px;
            border-radius: 20px;
            background: #f5f5f5;
            position: relative;
            padding: 1.8rem;
            border: 2px solid #c3c6ce;
            transition: 0.5s ease-out;
            overflow: visible;
            margin-top: 30px;
        }
        .hoverCard .card-details {
            color: black;
            height: 100%;
            gap: .5em;
            display: grid;
            place-content: center;
        }
        .hoverCard .card-button {
            transform: translate(-50%, 125%);
            width: 60%;
            border-radius: 1rem;
            border: none;
            background-color: #008bf8;
            color: #fff;
            font-size: 1rem;
            padding: .5rem 1rem;
            position: absolute;
            left: 50%;
            bottom: 0;
            opacity: 0;
            transition: 0.3s ease-out;
        }
        .hoverCard .text-body {
            color: rgb(134, 134, 134);
        }
        /*Text*/
        .hoverCard .text-title {
            font-size: 1.5em;
            font-weight: bold;
        }
        /*Hover*/
        .hoverCard:hover {
            border-color: #008bf8;
            box-shadow: 0 4px 18px 0 rgba(0, 0, 0, 0.25);
        }
        .hoverCard:hover .card-button {
            transform: translate(-50%, 50%);
            opacity: 1;
        }
        /*滑动卡片end*/
        /*楼层控制start*/
        .floorSelect {
            --text: #414856;
            --radio: #7C96B2;
            --radio-checked: #4F29F0;
            --radio-size: 20px;
            --width: 150px;
            --height: 200px;
            --border-radius: 10px;
            width: var(--width);
            height: var(--height);
            border-radius: var(--border-radius);
            color: var(--text);
            position: relative;
            box-shadow: 0 10px 30px rgba(65, 72, 86, 0.05);
            display: grid;
            grid-template-columns: auto var(--radio-size);
            align-items: center;
        }
        .floorSelect label {
            cursor: pointer;
        }
        .floorSelect input[type="radio"] {
            -webkit-appearance: none;
            -moz-appearance: none;
            position: relative;
            height: var(--radio-size);
            width: var(--radio-size);
            outline: none;
            margin: 0;
            cursor: pointer;
            border: 2px solid var(--radio);
            background: transparent;
            border-radius: 50%;
            display: grid;
            justify-self: end;
            justify-items: center;
            align-items: center;
            overflow: hidden;
            transition: border .5s ease;
        }
        .floorSelect input[type="radio"]::before, .floorSelect input[type="radio"]::after {
            content: "";
            display: flex;
            justify-self: center;
            border-radius: 50%;
        }
        .floorSelect input[type="radio"]::before {
            position: absolute;
            width: 100%;
            height: 100%;
            z-index: 1;
            opacity: var(--opacity, 1);
        }
        .floorSelect input[type="radio"]::after {
            position: relative;
            width: calc(100% /2);
            height: calc(100% /2);
            background: var(--radio-checked);
            top: var(--y, 100%);
            transition: top 0.5s cubic-bezier(0.48, 1.97, 0.5, 0.63);
        }
        .floorSelect input[type="radio"]:checked {
            --radio: var(--radio-checked);
        }
        .floorSelect input[type="radio"]:checked::after {
            --y: 0%;
            animation: stretch-animate .3s ease-out .17s;
        }
        .floorSelect input[type="radio"]:checked::before {
            --opacity: 0;
        }
        .floorSelect input[type="radio"]:checked ~ input[type="radio"]::after {
            --y: -100%;
        }
        .floorSelect input[type="radio"]:not(:checked)::before {
            --opacity: 1;
            transition: opacity 0s linear .5s;
        }
        @keyframes stretch-animate {
            0% {
                transform: scale(1, 1);
            }
            28% {
                transform: scale(1.15, 0.85);
            }
            50% {
                transform: scale(0.9, 1.1);
            }
            100% {
                transform: scale(1, 1);
            }
        }
        /*楼层控制end*/
        /*搜索start*/
        .search-input {
            line-height: 28px;
            border: 2px solid transparent;
            border-bottom-color: #777;
            padding: .2rem 0;
            outline: none;
            background-color: transparent;
            color: #0d0c22;
            transition: .3s cubic-bezier(0.645, 0.045, 0.355, 1);
        }
        .search-input:focus, .search-input:hover {
            outline: none;
            padding: .2rem 1rem;
            border-radius: 1rem;
            border-color: #7a9cc6;
        }
        .search-input::placeholder {
            color: #777;
        }
        .search-input:focus::placeholder {
            opacity: 0;
            transition: opacity .3s;
        }
        /*搜索end*/
        @keyframes fadeInOut {
            0%{
                opacity: 0;
            }
            100%{
                opacity: 1;
            }
        }
    </style>
</head>
<body>
<div id="app" style="display: flex;justify-content: space-around;margin-top: 50px;flex-wrap: wrap;" @click="bgClick()">
    <div style="flex: 12;scale: 0.85;">
        <div style="margin-top: -110px;">
            <div class="pointContainer" v-for="(x,index) in map" :key="index">
                <div v-if="index != 0 && (index != map.length-1)" v-for="(y,idx) in x" :key="idx">
                    <div v-if="idx != 0 && (idx != map[index].length-1)">
                        <div v-if="map[index][idx].value < 0" style="visibility: hidden;" class="pointBox"></div>
                        <!--库位-->
                        <div v-else-if="map[index][idx].value  == 0" @contextmenu.prevent="rightEvent(index,idx,$event)">
                            <div v-if="map[index][idx].locSts == 'O'" class="pointBox pointBoxBlue">{{ map[index][idx].locSts }}</div>
                            <div v-else-if="map[index][idx].locSts == 'F'" @click.left.stop="selectLoc(index,idx)" :class="{'pointBoxSelected':map[index][idx].locOutSelected,'pointBoxSearch':map[index][idx].searchStatus}" class="pointBox pointBoxRed">{{ map[index][idx].locSts }}</div>
                            <div v-else-if="map[index][idx].locSts == 'D'" class="pointBox pointBoxEmpty">{{ map[index][idx].locSts }}</div>
                            <div v-else-if="map[index][idx].locSts == 'P'" class="pointBox pointBoxOut">{{ map[index][idx].locSts }}</div>
                            <div v-else-if="map[index][idx].locSts == 'R'" :class="{'pointBoxSearch':map[index][idx].searchStatus}" class="pointBox pointBoxOutYy">{{ map[index][idx].locSts }}</div>
                            <div v-else-if="map[index][idx].locSts == 'S'" class="pointBox pointBoxInYy">{{ map[index][idx].locSts }}</div>
                            <div v-else class="pointBox pointBoxDefault">{{ map[index][idx].locSts }}</div>
                        </div>
                        <!--母轨道-->
                        <div v-else-if="map[index][idx].value  == 3">
                            <div class="pointBox" style="visibility: hidden;"></div>
                        </div>
                        <!--站点-->
                        <div v-else-if="map[index][idx].value  == 4" class="pointBox pointBoxStation" style="visibility: hidden;"></div>
                        <div v-else-if="map[index][idx].value  == 5" class="pointBox chargeStation"
                             @contextmenu.prevent="rightEvent(index,idx,$event)"></div>
                        <div v-else-if="map[index][idx].value  == 9" class="pointBox pointBoxRed"
                             @contextmenu.prevent="rightEvent(index,idx,$event)"></div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div style="padding: 20px;flex: 5;margin-top: -70px;">
        <div style="display: flex;justify-content: space-between;flex-wrap: wrap;">
            <div class="hoverCard" style="width: 100%;">
                <div class="card-details" style="place-content: normal;height: auto;">
                    <div class="text-body" style="display: flex;flex-wrap: wrap;">
                        <div style="width: 100%;margin-bottom: 20px;">
                            <div style="display: flex;justify-content: space-between;">
                                <div><input v-model="searchMatnr" placeholder="物料号" type="text" class="search-input"></div>
                                <div><input v-model="searchOrderNo" placeholder="订单号" type="text" class="search-input"></div>
                            </div>
                            <div style="display: flex;justify-content: space-between;margin-top: 10px;">
                                <div><input style="width: 110px;" v-model="searchMaktx" placeholder="物料名称" type="text" class="search-input"></div>
                                <div><input style="width: 110px;" v-model="searchSpecs" placeholder="规格" type="text" class="search-input"></div>
                                <div><input style="width: 110px;" v-model="searchLocNo" placeholder="库位号" type="text" class="search-input"></div>
                            </div>
                            <button style="width: 100%;margin-top: 10px;" @click="searchLoc" class="layui-btn layui-btn-sm">搜索</button>
                        </div>
<!--                        <div>-->
<!--                            <button @click="locToLoc2" class="layui-btn layui-btn-sm">侧边移库</button>-->
<!--                        </div>-->
                        <div v-if="!locOutStatus">
                            <button @click="locOutStatus = true" class="layui-btn layui-btn-sm">出库选择</button>
                        </div>
                        <div v-else style="margin-left: 10px;border: 1px red solid;display: flex;">
                            <div>
                                <button @click="cancelSelectLoc" class="layui-btn layui-btn-sm">取消选择</button>
                            </div>
                            <div style="display: flex;justify-content: center;align-items: center;">
                                <select v-model="outSite">
                                    <option v-for="(item,index) in outSites" :key="index" :value="item.siteId">{{ item.desc }}</option>
                                </select>
                            </div>
                            <div>
                                <button @click="locOut" class="layui-btn layui-btn-sm">出库</button>
                            </div>
                        </div>
                    </div>
                </div>
                <button class="card-button">功能区</button>
            </div>
            <div class="hoverCard">
                <div class="card-details">
                    <div class="text-body" style="display: flex;justify-content: space-around;flex-wrap: wrap;">
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">空库位</div><div class="pointBox pointBoxBlue">O</div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">在库</div><div class="pointBox pointBoxRed">F</div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">空板</div><div class="pointBox pointBoxEmpty">D</div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">出库中</div><div class="pointBox pointBoxOut">P</div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">出库预约</div><div class="pointBox pointBoxOutYy">R</div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">入库预约</div><div class="pointBox pointBoxInYy">S</div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">搜索结果</div><div class="pointBox pointBoxSearch"></div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">选择结果</div><div class="pointBox pointBoxSelected"></div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">其他</div><div class="pointBox pointBoxDefault">其他</div>
                        </div>
                    </div>
                </div>
                <button class="card-button">库位状态</button>
            </div>
            <div class="hoverCard">
                <div class="card-details">
                    <p class="text-title" style="text-align: center;">楼层 {{currentLev}}F</p>
                    <div class="text-body" style="display: flex;">
                        <div class="floorSelect">
                            <label for="01">1F</label>
                            <input id="01" type="radio" name="r" v-model="currentLev" value="1" checked="">
                            <label for="02">2F</label>
                            <input id="02" type="radio" v-model="currentLev" name="r" value="2">
                            <label for="03">3F</label>
                            <input id="03" type="radio" v-model="currentLev" name="r" value="3">
                            <label for="04">4F</label>
                            <input id="04" type="radio" v-model="currentLev" name="r" value="4">
                        </div>
                    </div>
                </div>
                <button class="card-button">楼层 {{currentLev}}F</button>
            </div>
        </div>
    </div>
    <div v-if="rightBox" @click.stop="" :style="{left: rightBoxLeft,top: rightBoxTop}" class="popBox">
        <div class="apple-card">
            <div class="tools">
                <div class="circle" @click.stop="rightBox = false">
                    <span class="red box"></span>
                </div>
                <div class="circle">
                    <span class="yellow box"></span>
                </div>
                <div class="circle">
                    <span class="green box"></span>
                </div>
            </div>
            <div class="card-content">
                <div>
                    库位号: {{ map[mapI][mapJ].locNo }}
                </div>
                <div style="margin-top: 10px;">
                    库位状态: {{ map[mapI][mapJ].locSts$ }}
                </div>
                <div style="margin-top: 10px;display: flex;justify-content: space-between;flex-wrap: wrap;">
                    <div style="margin-top: 5px;">
                        <button class="layui-btn layui-btn-sm" @click="openLocDetail(map[mapI][mapJ].locNo)">库位详情</button>
                    </div>
                    <div style="margin-top: 5px;">
                        <button v-if="map[mapI][mapJ].locSts == 'F'" class="layui-btn layui-btn-sm" @click="locMove(map[mapI][mapJ].locNo)">库位移转</button>
                        <button v-else-if="map[mapI][mapJ].locSts == 'D'" class="layui-btn layui-btn-sm" @click="locMove(map[mapI][mapJ].locNo)">库位移转</button>
                        <button v-else class="layui-btn layui-btn-sm layui-btn-disabled" disabled>库位移转</button>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div v-if="crnBox" @click.stop="" :style="{left: crnBoxLeft,top: crnBoxTop}" class="popBox">
        <div class="apple-card">
            <div class="tools">
                <div class="circle" @click.stop="crnBox = false">
                    <span class="red box"></span>
                </div>
                <div class="circle">
                    <span class="yellow box"></span>
                </div>
                <div class="circle">
                    <span class="green box"></span>
                </div>
            </div>
            <div class="card-content">
                <div>堆垛机号:{{crnList[crnBox - 1].crnNo}}</div>
                <div>工作号:{{crnList[crnBox - 1].wrkNo}}</div>
                <div>源库位:{{crnList[crnBox - 1].frmLocno}}</div>
                <div>目标库位:{{crnList[crnBox - 1].toLocno}}</div>
                <div>可入:{{crnList[crnBox - 1].inEnable}}</div>
                <div>可出:{{crnList[crnBox - 1].outEnable}}</div>
                <div>状态:{{crnList[crnBox - 1].crnSts$}}</div>
                <div>异常:{{crnList[crnBox - 1].crnErr$}}</div>
            </div>
        </div>
    </div>
</div>
<script>
    var $layui = layui.config({
        base: baseUrl + "/static/layui/lay/modules/"
    }).use(['layer','form'], function () {})
    var app = new Vue({
        el: '#app',
        data: {
            map: [],
            mapData: "",
            importData: null,
            startPosition: "0500501",
            endPosition: "0802501",
            mapI: 0,
            mapJ: 0,
            rightBox: false,
            rightBoxTop: "0px",
            rightBoxLeft: "0px",
            pointContainerWidth: 0,
            currentLev: 1,
            crnList: null,
            crnBox: false,
            crnBoxTop: "0px",
            crnBoxLeft: "0px",
            locOutStatus: false,
            locOutLocNo: [],
            searchMatnr: "",
            searchOrderNo: "",
            searchSpecs: "",
            searchMaktx: "",
            searchLocNo: "",
            outSite: null,
            outSites: null,
        },
        created(){
            this.init()
            this.getOutSite()
            // setInterval((that) => {
            //     //定时获取堆垛机数据
            //     that.getCrnData()
            // },1000,this)
        },
        watch: {
            map: {
                deep: true,
                handler(val) {
                    this.printData()
                }
            },
            currentLev: {
                deep: true,
                handler(val) {
                    this.init()
                }
            }
        },
        methods: {
            init(){
                let that = this
                $.ajax({
                    url: baseUrl + "/map/getData/" + this.currentLev + "/auth",
                    headers: {'token': localStorage.getItem('token')},
                    method: "get",
                    success: (data) => {
                        that.importDataClick(data)
                    }
                })
                this.locOutStatus = false
                this.locOutLocNo = []
            },
            printData() {
                this.mapData = JSON.stringify(this.map)
            },
            importDataClick(mapData) {
                let tmp = JSON.parse(mapData);
                let data = []
                tmp.forEach((item, index) => {
                    let data2 = []
                    item.forEach((val, idx) => {
                        val.searchStatus = false//搜索标记
                        data2.push(val)
                    })
                    this.pointContainerWidth = item.length * (40+1)
                    data.push(data2)
                })
                this.map = data
                this.printData()
            },
            rightEvent(x, y, e) {
                this.rightBox = true
                this.mapI = x
                this.mapJ = y
                this.rightBoxTop = e.y + "px"
                this.rightBoxLeft = e.x + "px"
            },
            bgClick() {
                this.rightBox = false
                this.crnBox = false
            },
            openLocDetail(locNo) {
                $layui.layer.open({
                    type: 2,
                    title: '库位物料',
                    maxmin: true,
                    area: [top.detailWidth, top.detailHeight],
                    shadeClose: true,
                    content: '../report/locDetl.html?locNo=' + locNo,
                    success: function(layero, index){
                    }
                });
            },
            locMove(locNo) {
                //库位移转
                let that = this
                $.ajax({
                    url: baseUrl + "/loc/move/start",
                    headers: {'token': localStorage.getItem('token')},
                    dataType: 'json',
                    data: {
                        sourceLocNo: locNo
                    },
                    method: 'POST',
                    success: function (res) {
                        if (res.code === 200) {
                            $layui.layer.msg(res.msg);
                            that.init()
                        } else if (res.code === 403) {
                            top.location.href = baseUrl + "/";
                        } else {
                            $layui.layer.msg(res.msg);
                        }
                    }
                })
            },
            getCrnData() {
                //获取堆垛机数据
                let that = this
                $.ajax({
                    url: baseUrl + "/basCrnp/list/auth",
                    headers: {'token': localStorage.getItem('token')},
                    dataType: 'json',
                    data: {},
                    method: 'POST',
                    success: function (res) {
                        if (res.code === 200) {
                            let tmp = [];
                            res.data.records.forEach((item,index) => {
                                if (item.endLoc != null && item.endLoc != "") {
                                    let locNo = item.endLoc
                                    item.bay = parseInt(locNo.substr(2,3))
                                    item.lev = parseInt(locNo.substr(5,2))
                                }else {
                                    item.bay = 0
                                    item.lev = 1
                                }
                                //计算移动路径
                                item.left = item.bay * 41 - 80;
                                item.sameLev = item.lev == that.currentLev ? true : false//是否为同一层
                                tmp[item.crnNo - 1] = item;
                            })
                            console.log(tmp)
                            that.crnList = tmp;
                        } else if (res.code === 403) {
                            top.location.href = baseUrl + "/";
                        } else {
                            $layui.layer.msg(res.msg);
                        }
                    }
                })
            },
            clickCrnBox(e,crnNo) {
                this.crnBox = crnNo
                this.crnBoxTop = e.y + "px"
                this.crnBoxLeft = e.x + "px"
            },
            locToLoc2(){
                //侧边入库
                let that = this
                $.ajax({
                    url: baseUrl + "/loc/locToLoc2/start",
                    headers: {'token': localStorage.getItem('token')},
                    dataType: 'json',
                    data: {},
                    method: 'POST',
                    success: function (res) {
                        if (res.code === 200) {
                            $layui.layer.msg(res.msg);
                            that.init()
                        } else if (res.code === 403) {
                            top.location.href = baseUrl + "/";
                        } else {
                            $layui.layer.msg(res.msg);
                        }
                    }
                })
            },
            locOut() {
                //出库
                let that = this
                let locOutLocNo = this.locOutLocNo
                if (locOutLocNo.length == 0) {
                    $layui.layer.msg("请先选择库位");
                    return;
                }
                let map = this.map
                //巷道list
                let bayList = []
                // 将用户选定的库位通过巷道进行分组
                locOutLocNo.forEach((item,index) => {
                    let obj = {
                        x: item.x,
                        y: item.y,
                        locNo: map[item.x][item.y].locNo
                    }
                    if (bayList[item.y] == undefined) {
                        bayList[item.y] = [obj]
                    }else {
                        bayList[item.y].push(obj)
                    }
                })
                //进行排序
                bayList.forEach((item,index) => {
                    for (var i = 0; i < item.length; i++) {
                        for (var j = i+1; j < item.length; j++) {
                            if (item[i].x > item[j].x) {
                                //交换
                                let tmp = item[j];
                                item[j] = item[i]
                                item[i] = tmp
                            }
                        }
                    }
                })
                // let result = true;//最终结果
                // //检测库位是否缺少选择导致不完整
                // bayList.forEach((item,index) => {
                //     //搜索当前巷道有效在库list
                //     //上半部分,巷道
                //     let topList = []
                //     for (var i = 8; i >= 3; i--) {
                //         let obj = {
                //             x: i,
                //             y: index,
                //             status: false,
                //             locNo: map[i][index].locNo
                //         }
                //
                //         if (map[i][index].locSts == 'F') {
                //             //在库状态,存入巷道在库list
                //             topList.push(obj)
                //         }
                //     }
                //
                //     //下半部分,巷道
                //     let bottomList = []
                //     for (var i = 9; i < 14; i++) {
                //         let obj = {
                //             x: i,
                //             y: index,
                //             status: false,
                //             locNo: map[i][index].locNo
                //         }
                //
                //         if (map[i][index].locSts == 'F') {
                //             //在库状态,存入巷道在库list
                //             bottomList.push(obj)
                //         }
                //     }
                //
                //     // if (topList.length == 0 && bottomList.length == 0) {
                //     //     result = false;
                //     // }
                //
                //     for (var i = 0; i < item.length; i++) {
                //         if (item[i].x > 8) {
                //             //下半部分数据
                //             let index = this.searchDataIndex(item[i],bottomList)
                //             // console.log(item[i],bottomList,index)
                //             if (index == -1) {
                //                 continue
                //             }
                //             bottomList[index].status = true
                //         }else {
                //             //上半部分数据
                //             let index = this.searchDataIndex(item[i],topList)
                //             // console.log(item[i],topList,index)
                //             if (index == -1) {
                //                 continue
                //             }
                //             topList[index].status = true
                //         }
                //
                //     }
                //
                //     let tmp1 = []
                //     let tmp2 = []
                //     for (var i = item.length - 1; i >= 0; i--) {
                //         if (item[i].x < 9) {
                //             tmp1.push(item[i]);
                //         }
                //     }
                //     for (var i = 0; i < item.length; i++) {
                //         if (item[i].x > 8) {
                //             tmp2.push(item[i]);
                //         }
                //     }
                //
                //     if (tmp1.length > 0) {
                //         //判断上半部分出库是否选择完整
                //         let topIndex = this.searchDataIndex(tmp1[0],topList);
                //         if (topIndex != -1) {
                //             for (var i = topIndex; i < topList.length; i++) {
                //                 if (topList[i].status != true) {
                //                     result = false;
                //                 }
                //             }
                //         }
                //     }
                //
                //     if (tmp2.length > 0) {
                //         //判断下半部分出库是否选择完整
                //         let bottomIndex = this.searchDataIndex(tmp2[0],bottomList)
                //         if (bottomIndex != -1) {
                //             for (var i = bottomIndex; i < bottomList.length; i++) {
                //                 if (bottomList[i].status != true) {
                //                     result = false;
                //                 }
                //             }
                //             console.log(tmp2[0],bottomList,bottomIndex)
                //         }
                //     }
                // })
                //
                // if (!result) {
                //     $layui.layer.msg("出库路径选择有误");
                //     return;
                // }
                //准备出库
                if (this.outSite == null) {
                    $layui.layer.msg("请选择出库站点");
                    return;
                }
                let locNos = []
                bayList.forEach((item,index) => {
                    item.forEach((val,idx) => {
                        locNos.push(val.locNo)
                    })
                })
                let locDetls = []
                $.ajax({
                    url: baseUrl+"/locDetl/auth",
                    headers: {'token': localStorage.getItem('token')},
                    data: {locNos:locNos},
                    method: 'POST',
                    async: false,
                    success: function (res) {
                        if (res.code === 200) {
                            locDetls = res.data
                        } else if (res.code === 403) {
                            top.location.href = baseUrl + "/";
                        } else {
                            layer.msg(res.msg)
                        }
                    }
                })
                locDetls.forEach((item,index) => {
                    item.count = item.anfme
                })
                $.ajax({
                    url: baseUrl + "/plate/out/start",
                    headers: {'token': localStorage.getItem('token')},
                    data: JSON.stringify({
                        outSite: this.outSite,
                        locDetls: locDetls
                    }),
                    contentType:'application/json;charset=UTF-8',
                    method: 'POST',
                    success: function (res) {
                        if (res.code === 200){
                            $layui.layer.msg(res.msg);
                            that.init()
                        } else if (res.code === 403){
                            top.location.href = baseUrl+"/";
                        } else {
                            $layui.layer.msg(res.msg)
                        }
                    }
                });
            },
            searchDataIndex(data,dist) {
                //搜索起始点
                let searchStartPoint = -1;
                dist.forEach((val,idx) => {
                    if (val.x == data.x && val.y == data.y) {
                        //找到点位
                        searchStartPoint = idx
                    }
                })
                return searchStartPoint;
            },
            selectLoc(x, y) {
                //选择库位
                if (this.locOutStatus) {
                    let tmp = this.map
                    let selected = tmp[x][y].locOutSelected ? 0 : 1
                    tmp[x][y].locOutSelected = selected
                    if (selected) {
                        this.locOutLocNo.push({
                            x: x,
                            y: y
                        });
                    }else {
                        //剔除掉不选择元素
                        let locOutLocNo = this.locOutLocNo
                        let tmp = []
                        locOutLocNo.forEach((item,index) => {
                            if (item.x !== x || item.y !== y) {
                                tmp.push(item)
                            }
                        })
                        this.locOutLocNo = tmp
                    }
                    this.map = tmp
                    this.$forceUpdate()
                }
            },
            cancelSelectLoc() {
                //取消选择库位
                let data = this.locOutLocNo
                let tmp = this.map
                data.forEach((item,index) => {
                    tmp[item.x][item.y].locOutSelected = 0;
                })
                this.locOutLocNo = []
                this.map = tmp
                this.locOutStatus = false
            },
            searchLoc() {
                //通过物料编号搜索库位号
                // if (this.searchValue == "") {
                //     $layui.layer.msg("请输入物料编号或订单号");
                //     return;
                // }
                let that = this;
                $.ajax({
                    url: baseUrl + "/map/searchData/auth",
                    headers: {'token': localStorage.getItem('token')},
                    dataType: 'json',
                    data: {
                        lev: this.currentLev,
                        locNo: this.searchLocNo,
                        orderNo: this.searchOrderNo,
                        specs: this.searchSpecs,
                        matnr: this.searchMatnr,
                        maktx: this.searchMaktx
                    },
                    method: 'POST',
                    success: function (res) {
                        if (res.code === 200) {
                            let tmp = that.map
                            let data = res.data
                            tmp.forEach((item,index) => {//清空之前的搜索结果
                                item.forEach((val,idx) => {
                                    if (tmp[index][idx].searchStatus != undefined) {
                                        tmp[index][idx].searchStatus = false;//搜索标记
                                    }
                                })
                            })
                            tmp.forEach((item,index) => {//清空之前的搜索结果
                                item.forEach((val,idx) => {
                                    if (tmp[index][idx].searchStatus != undefined) {
                                        tmp[index][idx].searchStatus = false;//搜索标记
                                    }
                                })
                            })
                            data.forEach((item,index) => {
                                let locNo = item.locNo
                                let y = parseInt(locNo.substr(2,3))
                                let x = parseInt(locNo.substr(0,2))
                                if (x >= 2 && x <= 12) {
                                    x += 1;
                                }else if (x == 13) {
                                    x += 2;
                                }
                                tmp[x][y].searchStatus = true//搜索标记
                            })
                            that.map = tmp
                            $layui.layer.msg("搜索成功");
                        } else if (res.code === 403) {
                            top.location.href = baseUrl + "/";
                        } else {
                            $layui.layer.msg(res.msg);
                        }
                    }
                })
            },
            getOutSite() {
                let that = this
                $.ajax({
                    url: baseUrl + "/available/take/site",
                    headers: {'token': localStorage.getItem('token')},
                    dataType: 'json',
                    data: {},
                    method: 'POST',
                    success: function (res) {
                        if (res.code === 200) {
                            that.outSites = res.data
                            that.outSite = res.data[0].siteId
                        } else if (res.code === 403) {
                            top.location.href = baseUrl + "/";
                        } else {
                            $layui.layer.msg(res.msg);
                        }
                    }
                })
            },
        }
    })
</script>
</body>
</html>
src/main/webapp/views/home/map_edit.html
New file
@@ -0,0 +1,368 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>库位地图编辑</title>
    <script type="text/javascript" src="../../static/js/vue.min.js"></script>
    <style>
        .pointContainer {
            display: flex;
            justify-content: center;
            margin-top: 1px;
        }
        .pointBox {
            background: #bababa;
            width: 30px;
            height: 30px;
            margin-right: 1px;
        }
        .pointBoxGreen {
            background: #00ff7f !important;
        }
        .pointBoxBlue {
            background: #55aaff !important;
        }
        .pointBoxRed {
            background: #ff0000 !important;
        }
        .pointBoxStart {
            background: #ffaa00 !important;
        }
        .pointBoxEnd {
            background: #ff55ff !important;
        }
        .pointBoxStation {
            background: #ffff00 !important;
        }
        .chargeStation {
            background: #ffaa7f !important;
        }
    </style>
</head>
<body>
<div id="app" style="display: flex;justify-content: flex-start;" @click="bgClick()">
    <div style="margin-right: 100px;">
        <div>Col:<input type="text" v-model="col" /></div>
        <div>Row:<input type="text" v-model="row" /></div>
        <div>
            <button @click="generate">生成数据</button>
            <button @click="printData">显示数据</button>
        </div>
        <div>
            <div>
                禁止区域:
                <div class="pointBox"></div>
            </div>
            <div>
                库位:
                <div class="pointBox pointBoxBlue"></div>
            </div>
            <div>
                堆垛机:
                <div class="pointBox pointBoxGreen"></div>
            </div>
            <div>
                轨迹:
                <div class="pointBox pointBoxRed"></div>
            </div>
            <div>
                站点:
                <div class="pointBox pointBoxStation"></div>
            </div>
            <div>
                充电桩:
                <div class="pointBox chargeStation"></div>
            </div>
        </div>
        <div>
            <div>起点:<input type="text" v-model="startPosition"></div>
            <div>终点:<input type="text" v-model="endPosition"></div>
            <div><button @click="calcPath">计算路径</button></div>
        </div>
        <div>
            <textarea v-model="importData"></textarea>
            <button @click="importDataClick">导入数据</button>
        </div>
    </div>
    <div>
        <div class="pointContainer" v-for="(x,index) in map" :key="index">
            <div v-for="(y,ind) in x" :key="ind">
                <div v-if="map[index][ind].value < 0" class="pointBox"
                     @contextmenu.prevent="rightEvent(index,ind,$event)" @click.left="switchBox(index,ind)"></div>
                <div v-else-if="map[index][ind].value  == 0" class="pointBox pointBoxBlue"
                     @contextmenu.prevent="rightEvent(index,ind,$event)" @click="switchBox(index,ind)"></div>
                <div v-else-if="map[index][ind].value  == 3" class="pointBox pointBoxGreen"
                     @contextmenu.prevent="rightEvent(index,ind,$event)" @click="switchBox(index,ind)"></div>
                <div v-else-if="map[index][ind].value  == 4" class="pointBox pointBoxStation"
                     @contextmenu.prevent="rightEvent(index,ind,$event)" @click="switchBox(index,ind)"></div>
                <div v-else-if="map[index][ind].value  == 5" class="pointBox chargeStation"
                     @contextmenu.prevent="rightEvent(index,ind,$event)" @click="switchBox(index,ind)"></div>
                <div v-else-if="map[index][ind].value  == 9" class="pointBox pointBoxRed"
                     @contextmenu.prevent="rightEvent(index,ind,$event)" @click="switchBox(index,ind)"></div>
                <div v-else-if="map[index][ind].value  == 10" class="pointBox pointBoxStart"
                     @contextmenu.prevent="rightEvent(index,ind,$event)" @click="switchBox(index,ind)"></div>
                <div v-else-if="map[index][ind].value  == 11" class="pointBox pointBoxEnd"
                     @contextmenu.prevent="rightEvent(index,ind,$event)" @click="switchBox(index,ind)"></div>
            </div>
        </div>
    </div>
    <div>
        {{ mapData }}
    </div>
    <div v-if="rightBox" @click.stop="" :style="{left: rightBoxLeft,top: rightBoxTop}"
         style="position: absolute;height: 270px;width: 200px;background-color: antiquewhite;padding: 10px;">
        <div>
            value:
            <div style="display: flex;justify-content: space-between;">
                <div @click="map[mapI][mapJ].value = -1" class="pointBox"></div>
                <div @click="map[mapI][mapJ].value = 0" class="pointBox pointBoxBlue"></div>
                <div @click="map[mapI][mapJ].value = 3" class="pointBox pointBoxGreen"></div>
                <div @click="map[mapI][mapJ].value = 4" class="pointBox pointBoxStation"></div>
                <div @click="map[mapI][mapJ].value = 5" class="pointBox chargeStation"></div>
            </div>
        </div>
        <div>
            data: <input type="text" v-model="map[mapI][mapJ].data">
        </div>
        <div>
            top: <input type="text" v-model="map[mapI][mapJ].top">
        </div>
        <div>
            bottom: <input type="text" v-model="map[mapI][mapJ].bottom">
        </div>
        <div>
            left: <input type="text" v-model="map[mapI][mapJ].left">
        </div>
        <div>
            right: <input type="text" v-model="map[mapI][mapJ].right">
        </div>
    </div>
</div>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            map: [],
            col: 25,
            row: 15,
            mapData: "",
            importData: null,
            startPosition: "0500501",
            endPosition: "0802501",
            mapI: 0,
            mapJ: 0,
            rightBox: false,
            rightBoxTop: "0px",
            rightBoxLeft: "0px"
        },
        watch: {
            map: {
                deep: true,
                handler(val) {
                    this.printData()
                }
            }
        },
        methods: {
            generate() {
                let tmp = []
                //实际区域增加两行两列禁区
                let rowR = Number(this.row) + Number(2)
                let colR = Number(this.col) + Number(2)
                console.log(rowR, colR)
                for (var i = 0; i < rowR; i++) {
                    let x = []
                    for (var j = 0; j < colR; j++) {
                        if (i == 0 || i == rowR - 1) {
                            // x.push(-1)
                            x.push({
                                value: -1,
                                data: '',
                                top: 1000,
                                bottom: 1000,
                                left: 1000,
                                right: 1000,
                                x: i,
                                y: j
                            })
                            continue
                        }
                        if (j == 0) {
                            // x.push(-1)
                            x.push({
                                value: -1,
                                data: '',
                                top: 1000,
                                bottom: 1000,
                                left: 1000,
                                right: 1000,
                                x: i,
                                y: j
                            })
                            continue
                        }
                        if (j == colR - 1) {
                            let calc = (this.row - i + 1) * -1
                            // x.push(calc == 0 ? -1 : calc)
                            x.push({
                                value: calc == 0 ? -1 : calc,
                                data: '',
                                top: 1000,
                                bottom: 1000,
                                left: 1000,
                                right: 1000,
                                x: i,
                                y: j
                            })
                            continue
                        }
                        // x.push(0)
                        x.push({
                            value: 0,
                            data: '',
                            top: 1000,
                            bottom: 1000,
                            left: 1000,
                            right: 1000,
                            x: i,
                            y: j
                        })
                    }
                    tmp.push(x)
                }
                this.map = tmp
                this.printData()
            },
            switchBox(x, y) {
                let tmp = this.map
                console.log(x, y, tmp[x][y])
                switch (tmp[x][y].value) {
                    case -1:
                        tmp[x][y].value = 0
                        break;
                    case 0:
                        tmp[x][y].value = 3
                        break;
                    case 3:
                        tmp[x][y].value = 4
                        break;
                    case 4:
                        tmp[x][y].value = 5
                        break;
                    case 5:
                        tmp[x][y].value = -1
                        break;
                    default:
                        tmp[x][y].value = -1
                }
                this.map = tmp
                this.$forceUpdate()
                this.printData()
                this.rightBox = false
            },
            printData() {
                // let tmp = this.map
                // let data = []
                // tmp.forEach((item,index) => {
                //  let data2 = []
                //  item.forEach((val,idx) => {
                //   let valJson = {
                //       value: val,
                //       data: '',
                //       top: '',
                //       bottom: '',
                //       left: '',
                //       right: ''
                //   }
                //   data2.push(valJson)
                //  })
                //  data.push(data2)
                // })
                // this.mapData = JSON.stringify(data)
                this.mapData = JSON.stringify(this.map)
            },
            importDataClick() {
                let tmp = JSON.parse(this.importData);
                let data = []
                tmp.forEach((item, index) => {
                    let data2 = []
                    item.forEach((val, idx) => {
                        let json = {
                            value: val.value,
                            data: val.data,
                            top: val.top == null ? 1000: val.top,
                            bottom: val.bottom == null ? 1000:val.bottom,
                            left: val.left == null ? 1000:val.left,
                            right: val.right == null ? 1000:val.right
                        }
                        data2.push(json)
                    })
                    data.push(data2)
                })
                this.map = data
                this.printData()
            },
            calcPath() {
                let that = this
                let param = new URLSearchParams()
                param.append('startPosition', this.startPosition)
                param.append('endPosition', this.endPosition)
                param.append('map', JSON.stringify(this.map))
                this.$axios({
                    method: "post",
                    url: "http://127.0.0.1:8081/calc",
                    data: param
                }).then((res) => {
                    let data = res.data
                    let tmp = that.map
                    console.log(data)
                    data.forEach((item, index) => {
                        let x = item.x
                        let y = item.y
                        tmp[x][y] = 9
                        if (index == 0) {
                            tmp[x][y] = 10
                        }
                        if (index == data.length - 1) {
                            tmp[x][y] = 11
                        }
                        that.map = tmp
                    })
                    this.$forceUpdate()
                    this.printData()
                }).catch((error) => {
                    console.log(error)
                })
            },
            rightEvent(x, y, e) {
                this.rightBox = true
                this.mapI = x
                this.mapJ = y
                this.rightBoxTop = e.y + "px"
                this.rightBoxLeft = e.x + "px"
            },
            bgClick() {
                this.rightBox = false
            }
        }
    })
</script>
</body>
</html>
src/main/webapp/views/home/navigation.html
New file
@@ -0,0 +1,146 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>仓储管理系统</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../static/css/road.css">
    <style media="screen">
        *{
            -webkit-box-sizing: border-box;
            -moz-box-sizing: border-box;
            box-sizing: border-box;
            margin: 0;
            padding: 0;
            font-family: 微软雅黑;
            letter-spacing: 1px;
        }
        body{
            background: url(../../static/image/nav/bg_1.png);
            background-size: cover;
        }
        .fn_1{
            width: 250px; height: 220px;
            background: url(../../static/image/nav/fn_1.png);
            background-size: cover;
        }
        .fn_1:hover{
            background: url(../../static/image/nav/fn_1_h.png);
            background-size: cover;
        }
        .fn_2{
            width: 250px; height: 220px;
            background: url(../../static/image/nav/fn_2.png);
            background-size: cover;
        }
        .fn_2:hover{
            background: url(../../static/image/nav/fn_2_h.png);
            background-size: cover;
        }
        .fn_3{
            width: 250px; height: 220px;
            background: url(../../static/image/nav/fn_3.png);
            background-size: cover;
        }
        .fn_3:hover{
            background: url(../../static/image/nav/fn_3_h.png);
            background-size: cover;
        }
        .sci-wheel{
            position: absolute;
            top: 0;
            right: 0;
            width: 100px;
        }
        .header{
            width: 100%; height: 100px; line-height: 100px;
            padding: 0 40px;
            background:rgba(0,0,0,0.3);
        }
        .header img{
            float: left;
            margin: 10px 10px;
            width: 100px;
        }
        .header p{
            float: left;
            font-size: 30px; color: white;
            letter-spacing: 3px;
        }
        .header .home-btn {
            float: left;
            margin-top: 20px;
            width: 74px;
            height: 74px;
            border: 1px solid #102262;
            border-radius: 5px;
            background: url(../../static/image/nav/icon.png) no-repeat center center;
            background-size: 45% 45%;
            cursor: pointer;
        }
        .center{
            position: absolute;
            top: 0; bottom: 0; left: 0; right: 0;
            margin: auto;
            width: 930px; height: 250px;
            /* bottom: 300px; */
        }
        .center .list{
            display: block;
            float: left;
            margin: 0 30px;
            cursor: pointer;
        }
        .center .list p{
            text-align: center;
            color: #00BAF1;
            font-size: 18px;
            margin-top: 240px;
        }
        /* .center .list img{
          width: 250px;
          margin: 0 30px;
        } */
    </style>
</head>
<body>
<div class="header">
    <p style="margin-left:20px">请选择您要使用的模块</p>
</div>
<div class="center">
    <a class="list fn_1 moveUpDownFla1" ew-href="order/order.html?resourceId=40517">
        <p>单据管理</p>
    </a>
    <a class="list fn_2 moveUpDownFla2" ew-href="wrkMast/wrkMast.html?resourceId=214">
        <p>运行任务</p>
    </a>
    <a class="list fn_3 moveUpDownFla1" ew-href="stoMan/stoQue.html?resourceId=10276">
        <p>库存明细</p>
    </a>
</div>
</body>
<script type="text/javascript" src="../../static/js/common.js"></script>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/layui/layui.js"></script>
<script>
    layui.config({
        base: baseUrl + "/static/layui/lay/modules/"
    }).use(['layer', 'element', 'admin'], function () {
        var element = layui.element;
        var $ = layui.jquery;
        var layer = layui.layer;
        var admin = layui.admin;
    })
</script>
</html>
src/main/webapp/views/index.html
@@ -1,48 +1,179 @@
<!DOCTYPE html>
<html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>自动仓库WCS系统</title>
    <link rel="stylesheet" href="../static/css/index.css">
    <script src="../static/js/jquery/jquery-3.3.1.min.js"></script>
  <meta charset="utf-8">
  <title>浙江中扬 - 自动化立体仓库 - AS / RS</title>
  <meta name="renderer" content="webkit">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
  <link rel="stylesheet" href="../static/layui/css/layui.css" media="all">
  <link rel="stylesheet" href="../static/css/admin.css?v=318" media="all">
  <link rel="stylesheet" href="../static/css/loader.css" media="all">
  <style>
    .layui-logo img {
      width: 25px;
    }
    .layui-logo cite {
      font-size: 18px;
      font-weight: 400;
      /*margin-left: 5px;*/
    }
  </style>
</head>
<body>
<!-- 导航栏 -->
<!--        <div class="nav">-->
<!--            <li class="right">注销<a id="about" class="nav-unselect" onclick="logout()" href="#"></a></li>-->
<!--        </div>-->
<div class="sidebar">
    <div class="nav">
        <ul class="cl-effect-4">
            <li><a id="console" onclick="nav(this.id)" class="nav-select" href="#">主控图</a></li>
            <li><a id="pipeline" onclick="nav(this.id)" class="nav-unselect" href="#">输送设备</a></li>
            <li><a id="crn" onclick="nav(this.id)" class="nav-unselect" href="#">堆垛机</a></li>
        </ul>
<body class="layui-layout-body">
<div class="layui-layout layui-layout-admin">
  <!-- 头部 -->
  <div class="layui-header">
    <div class="layui-logo">
      <img src="../static/image/logo.png" style="display: inline-block; width: 60%;height: auto">
      <!--          <span style="margin-top: 0; letter-spacing: 10px">中扬立库</span>-->
      <!--          <img src="../static/image/logo.svg"/>-->
      <!--          <cite>中扬 - Zoneyung</cite>-->
    </div>
    <ul class="layui-nav layui-layout-left">
      <li class="layui-nav-item" lay-unselect>
        <a ew-event="flexible" title="侧边伸缩"><i class="layui-icon layui-icon-shrink-right"></i></a>
      </li>
      <li class="layui-nav-item" lay-unselect>
        <a ew-event="refresh" title="刷新"><i class="layui-icon layui-icon-refresh-3"></i></a>
      </li>
    </ul>
    <ul class="layui-nav layui-layout-right">
      <li class="layui-nav-item" lay-unselect>
        <a ew-event="note" title="便签"><i class="layui-icon layui-icon-note"></i></a>
      </li>
      <li class="layui-nav-item layui-hide-xs" lay-unselect>
        <a ew-event="fullScreen" title="全屏"><i class="layui-icon layui-icon-screen-full"></i></a>
      </li>
      <li class="layui-nav-item" lay-unselect>
        <a>
          <cite id="username" style="margin-right: 5px">管理员</cite>
        </a>
        <dl class="layui-nav-child">
          <dd lay-unselect><a ew-href="detail.html?resourceId=8">基本资料</a></dd>
          <hr>
          <dd lay-unselect><a id="logout">退出</a></dd>
        </dl>
      </li>
      <li class="layui-nav-item" lay-unselect>
        <a ew-event="theme" title="主题"><i class="layui-icon layui-icon-more-vertical"></i></a>
      </li>
    </ul>
  </div>
  <!-- 侧边栏 -->
  <div class="layui-side">
    <div class="layui-side-scroll">
      <ul id="menu-main" class="layui-nav layui-nav-tree arrow2" lay-filter="admin-side-nav" lay-shrink="_all">
      </ul>
    </div>
  </div>
  <!-- 主体部分 -->
  <div class="layui-body"></div>
  <!-- 底部 -->
  <div class="layui-footer layui-text">
    copyright © 2023 浙江中扬立库技术有限公司 all rights reserved.
    <span class="pull-right">Version 1.0.0</span>
  </div>
</div>
<!--<div style="z-index: 999; position: absolute; top: 250px; left: 900px; width: 200px; height: 200px; opacity: 0.5;background-color: #0000FF">-->
<!--</div>-->
<!-- 主体内容 -->
<iframe id="content" src="console.html"></iframe>
<footer class="footer">
    Copyright © 2015 All Rights Reserved. <a href="http://www.zoneyung.com" target="_blank">浙江中扬立库技术有限公司</a>  保留所有权利
</footer>
</body>
<!--初始化加载层-->
<div class="layuimini-loader">
  <div class="layuimini-loader-inner"></div>
</div>
<script type="text/javascript" src="../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../static/layui/layui.js"></script>
<script type="text/javascript" src="../static/js/handlebars/handlebars-v4.5.3.js"></script>
<script type="text/javascript" src="../static/js/common.js"></script>
<script>
    // 导航栏
    function nav(id) {
        $('.nav-select').attr("class", "nav-unselect");
        $('#'+id).attr("class", "nav-select");
        $('#content').attr("src", id+".html");
  console.log('%c 中扬立库平台 %c 1.0.0','background-color:rgb(53,73,94);color: #fff;border-radius:2px 0 0 2px;padding:2px 4px;','background-color:rgb(25,190,107);color: #fff;border-radius:0 2px 2px 0;padding:2px 4px;font: 9pt "Apercu Regular", Georgia, "Times New Roman", Times, serif;');
  $(function () {
    if ("" === localStorage.getItem('token')) {
      top.location.href = baseUrl + "/login";
    }
  });
  layui.config({
    base: baseUrl + "/static/layui/lay/modules/"
  }).extend({
    notice: 'notice/notice',
  }).use(['index', 'element', 'layer', 'admin', 'notice'], function () {
    var $ = layui.jquery;
    var index = layui.index;
    var element = layui.element;
    var layer = layui.layer;
    var admin = layui.admin;
    var notice = layui.notice;
    var easywebIframeMsg = localStorage.getItem("easyweb-iframe");
    if (!isEmpty(easywebIframeMsg)) {
      var easywebIframeObj = JSON.parse(easywebIframeMsg);
      if (easywebIframeObj.defaultTheme === undefined) {
        admin.changeTheme("theme-colorful");
      }
    }
    function logout() {
        localStorage.removeItem("token");
        window.location.href = baseUrl + "/login";
    }
    $.ajax({
      url: baseUrl + "/menu/auth",
      headers: {'token': localStorage.getItem('token')},
      method: 'POST',
      // async: false,
      success: function (res) {
        // 关闭加载动画
        $('.layuimini-loader').fadeOut();
        if (res.code === 200) {
          var tpl = $('#menuTpl').html();
          var template = Handlebars.compile(tpl);
          var html = template(res);
          $("#menu-main").html(html);
          element.init();
        } else if (res.code === 403) {
          top.location.href = baseUrl + "/login";
        } else {
          layer.msg(res.msg, {icon: 2});
        }
      }
    });
    // 系统运行状态
    var systemRunning = true;
    // 默认加载主页
    index.loadHome({
      menuPath: baseUrl+'/views/home/navigation.html',
      menuName: '<i class="layui-icon layui-icon-home"></i>'
    });
    $('#username').text(localStorage.getItem('username'));
    $(document).on('click','#logout', function () {
      window.location.href = "login.html";
      localStorage.removeItem('token');
      localStorage.removeItem('username');
      admin.closeAllTabs();
    });
    // 替换退出按钮变量
    var logout = document.getElementById('logout');
    var url = logout.getAttribute('href');
    logout.setAttribute('href', baseUrl + "/login");
  });
</script>
<script type="text/html" id="menuTpl">
  {{#each data}}
  <li class="layui-nav-item">
    <a><i class="layui-icon {{this.menuIcon}}"></i>&emsp;<cite>{{this.menu}}</cite></a>
    <dl class="layui-nav-child">
      {{#each this.subMenu}}
      <dd><a lay-href="{{this.code}}?resourceId={{this.id}}">{{this.name}}</a></dd>
      {{/each}}
    </dl>
  </li>
  {{/each}}
</script>
</body>
</html>