From e64805596d1c203225b72b810c9bb4f004f87f42 Mon Sep 17 00:00:00 2001
From: wojiaoyishang <422880152@qq.com>
Date: Wed, 18 Jan 2023 23:29:14 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=8F=92=E4=BB=B6=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.flaskenv | 35 +-
README.md | 172 +-
app.py | 8 +-
applications/__init__.py | 65 +-
applications/common/admin.py | 2 +-
applications/configs/config.py | 21 +-
applications/dev/__init__.py | 9 +
applications/dev/console.py | 89 +
applications/dev/department.py | 108 +
applications/dev/mail.py | 83 +
applications/dev/power.py | 138 +
applications/dev/role.py | 157 +
applications/dev/user.py | 160 +
applications/extensions/init_debug_tool.py | 7 +
applications/schemas/admin_user.py | 20 +
applications/view/__init__.py | 3 +-
applications/view/admin/mail.py | 30 +-
applications/view/admin/monitor.py | 4 +-
applications/view/plugin/__init__.py | 165 +
applications/view/plugin/init_plugins.py | 0
pear.sql | 769 +-
plugins/helloworld/__init__.json | 9 +
plugins/helloworld/__init__.py | 13 +
plugins/helloworld/main.py | 22 +
.../templates/helloworld_index.html | 1 +
requirement/dev.txt | 3 +-
start.py | 10 +
static/admin/admin/css/admin.css | 12 +-
static/admin/admin/css/loader.css | 2 +-
static/admin/admin/css/other/console2.css | 2 +-
static/admin/admin/css/other/login.css | 11 +-
static/admin/admin/css/other/user.css | 2 +-
static/admin/component/code/css/style.css | 2 +-
static/admin/component/layui/css/layui.css | 2 +-
.../admin/component/layui/font/iconfont.eot | Bin 52080 -> 51676 bytes
.../admin/component/layui/font/iconfont.svg | 4 +-
.../admin/component/layui/font/iconfont.ttf | Bin 51904 -> 51500 bytes
.../admin/component/layui/font/iconfont.woff | Bin 33172 -> 33040 bytes
.../admin/component/layui/font/iconfont.woff2 | Bin 28556 -> 28500 bytes
static/admin/component/layui/layui.js | 6 +-
.../component/pear/css/module/button.css | 10 +-
.../component/pear/css/module/dtree/dtree.css | 4 +-
.../admin/component/pear/css/module/form.css | 19 +-
.../admin/component/pear/css/module/frame.css | 2 +-
.../component/pear/css/module/fullscreen.css | 22 +
.../component/pear/css/module/iconPicker.css | 11 +
.../admin/component/pear/css/module/layer.css | 328 +-
.../component/pear/css/module/layout.css | 1 +
.../admin/component/pear/css/module/link.css | 4 +-
.../admin/component/pear/css/module/menu.css | 59 +-
.../component/pear/css/module/message.css | 63 +-
.../component/pear/css/module/nprogress.css | 73 +
.../component/pear/css/module/popover.min.css | 1 +
.../component/pear/css/module/select.css | 37 +-
.../admin/component/pear/css/module/step.css | 10 +-
.../admin/component/pear/css/module/tab.css | 3 +-
.../admin/component/pear/css/module/table.css | 14 +-
.../admin/component/pear/css/module/tag.css | 4 +-
.../component/pear/css/module/topBar.css | 2 +-
static/admin/component/pear/css/pear.css | 6 +-
static/admin/component/pear/module/admin.js | 497 +-
static/admin/component/pear/module/card.js | 9 +-
static/admin/component/pear/module/common.js | 39 +-
static/admin/component/pear/module/drawer.js | 299 +-
static/admin/component/pear/module/echarts.js | 189025 ++++++++-------
.../component/pear/module/echartsTheme.js | 258 +-
static/admin/component/pear/module/encrypt.js | 1775 +
static/admin/component/pear/module/excel.js | 26 +
static/admin/component/pear/module/frame.js | 133 +-
.../admin/component/pear/module/fullscreen.js | 54 +
static/admin/component/pear/module/http.js | 5 +-
.../admin/component/pear/module/iconPicker.js | 525 +
static/admin/component/pear/module/loading.js | 752 +-
static/admin/component/pear/module/menu.js | 263 +-
static/admin/component/pear/module/message.js | 69 +-
.../admin/component/pear/module/nprogress.js | 503 +
.../component/pear/module/popover/popover.js | 1219 +
static/admin/component/pear/module/popup.js | 4 +-
static/admin/component/pear/module/tab.js | 439 +-
static/admin/component/pear/module/tag.js | 3 -
static/admin/component/pear/module/theme.js | 25 +-
static/admin/component/pear/module/toast.js | 5 -
.../admin/component/pear/module/treetable.js | 18 +-
.../pear/module/watermark/watermark.js | 224 +
static/admin/component/pear/pear.js | 22 +-
static/index/css/load.css | 2 +-
static/index/css/main.css | 68 +-
static/index/images/index_pikachu.png | Bin 0 -> 350285 bytes
static/index/layui/css/layui.css | 2 +-
.../css/modules/laydate/default/laydate.css | 2 +-
static/index/layui/lay/modules/colorpicker.js | 2 +-
static/index/layui/layui.all.js | 2 +-
static/upload/1671970133000.jpg | Bin 0 -> 133818 bytes
templates/admin/dept/main.html | 4 +-
templates/admin/index.html | 240 +-
templates/admin/login.html | 2 +-
templates/admin/mail/main.html | 2 +-
templates/admin/monitor.html | 74 +-
templates/admin/plugin/main.html | 292 +
templates/admin/power/add.html | 15 +-
templates/admin/power/edit.html | 15 +-
templates/admin/user/main.html | 2 +-
102 files changed, 103984 insertions(+), 95750 deletions(-)
create mode 100644 applications/dev/__init__.py
create mode 100644 applications/dev/console.py
create mode 100644 applications/dev/department.py
create mode 100644 applications/dev/mail.py
create mode 100644 applications/dev/power.py
create mode 100644 applications/dev/role.py
create mode 100644 applications/dev/user.py
create mode 100644 applications/extensions/init_debug_tool.py
create mode 100644 applications/schemas/admin_user.py
create mode 100644 applications/view/plugin/__init__.py
create mode 100644 applications/view/plugin/init_plugins.py
create mode 100644 plugins/helloworld/__init__.json
create mode 100644 plugins/helloworld/__init__.py
create mode 100644 plugins/helloworld/main.py
create mode 100644 plugins/helloworld/templates/helloworld_index.html
create mode 100644 start.py
create mode 100644 static/admin/component/pear/css/module/fullscreen.css
create mode 100644 static/admin/component/pear/css/module/iconPicker.css
create mode 100644 static/admin/component/pear/css/module/nprogress.css
create mode 100644 static/admin/component/pear/css/module/popover.min.css
create mode 100644 static/admin/component/pear/module/encrypt.js
create mode 100644 static/admin/component/pear/module/excel.js
create mode 100644 static/admin/component/pear/module/fullscreen.js
create mode 100644 static/admin/component/pear/module/iconPicker.js
create mode 100644 static/admin/component/pear/module/nprogress.js
create mode 100644 static/admin/component/pear/module/popover/popover.js
create mode 100644 static/admin/component/pear/module/watermark/watermark.js
create mode 100644 static/index/images/index_pikachu.png
create mode 100644 static/upload/1671970133000.jpg
create mode 100644 templates/admin/plugin/main.html
diff --git a/.flaskenv b/.flaskenv
index 66006b5..03fa6e2 100644
--- a/.flaskenv
+++ b/.flaskenv
@@ -1,29 +1,32 @@
# flask配置
-FLASK_APP=app.py
-FLASK_ENV=development
-FLASK_DEBUG=1
-FLASK_RUN_HOST = 127.0.0.1
+FLASK_APP = app.py
+FLASK_ENV = production
+FLASK_DEBUG = 1
+FLASK_RUN_HOST = 0.0.0.0
FLASK_RUN_PORT = 5000
# pear admin flask配置
SYSTEM_NAME = Pear Admin
# MySql配置信息
-MYSQL_HOST=127.0.0.1
-# MYSQL_HOST=dbserver
-MYSQL_PORT=3306
-MYSQL_DATABASE=PearAdminFlask
-MYSQL_USERNAME=root
-MYSQL_PASSWORD=root
+MYSQL_HOST = 127.0.0.1
+# MYSQL_HOST = dbserver
+MYSQL_PORT = 3306
+MYSQL_DATABASE = pearadmin
+MYSQL_USERNAME = root
+MYSQL_PASSWORD = root
# Redis 配置
-# REDIS_HOST=127.0.0.1
-# REDIS_PORT=6379
+# REDIS_HOST = 127.0.0.1
+# REDIS_PORT = 6379
# 密钥配置(记得改)
-SECRET_KEY='pear-admin-flask'
+SECRET_KEY = pear-admin-flask
# 邮箱配置
-MAIL_SERVER='smtp.qq.com'
-MAIL_USERNAME='123@qq.com'
-MAIL_PASSWORD='XXXXX' # 生成的授权码
\ No newline at end of file
+MAIL_SERVER = xx.com
+MAIL_USERNAME = xx@xx.com
+MAIL_PASSWORD = xxx # 生成的授权码
+
+# 插件配置 json 格式,填入插件的文件夹名
+PLUGIN_ENABLE_FOLDERS = ["helloworld"]
\ No newline at end of file
diff --git a/README.md b/README.md
index 4582677..97ae559 100644
--- a/README.md
+++ b/README.md
@@ -1,163 +1,9 @@
-
-
-
-
- Pear Admin Flask
-
-
- 开 箱 即 用 的 Flask 快 速 开 发 平 台
-
-
- [预 览](http://flask.pearadmin.com) | [官 网](http://www.pearadmin.com/) | [文档](docs/detail.md)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

-
-
-#### 项目简介
-Pear Admin Flask 基于 Flask 的后台管理系统,拥抱应用广泛的python语言,通过使用本系统,即可快速构建你的功能业务
-
-项目旨在为 python 开发者提供一个后台管理系统的模板,可以快速构建信息管理系统。
-
-Pear Admin Flask 有以下几个版本:
-
-**[master分支版本 ](https://gitee.com/pear-admin/pear-admin-flask/tree/master/)**
-
-flask 2.0.1 + flask-sqlalchemy + 权限验证 + Flask-APScheduler 定时任务 + marshmallow 序列化与数据验证
-
-master 分支为主分支,是功能最全、页面最多的分支。
-
-**[mini 分支版本](https://gitee.com/pear-admin/pear-admin-flask/tree/mini/)**
-
-flask 2.0.1 + flask-sqlalchemy + 权限验证 + flask-restful
-
-此版本主要是提供一个最个简的 pear admin flask 快速开发的模板,可以帮助用户快速搭建一个后台管理系统。
-因为一些历史问题,例如 flask-restful 不再继续更新等,此版本不会也再继续更新,而会将精力投入到 main 分支当中去。
-
-如果想使用这个分支进行开发,可以看 https://www.bilibili.com/video/BV1FF411b7bS 进行学习。
-
-**[main 分支版本](https://gitee.com/pear-admin/pear-admin-flask/tree/main/)**
-
-main 分支是对 mini 分支的后续,目前还在开发中。
-
-#### 内置功能
-
-- [x] 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
-- [x] 权限管理:配置系统菜单,操作权限,按钮权限标识等。
-- [x] 角色管理:角色菜单权限分配。
-- [x] 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
-- [x] 登录日志:系统登录日志记录查询包含登录异常。
-- [x] 服务监控:监视当前系统CPU、内存、磁盘、python版本,运行时长等相关信息。
-- [x] 文件上传: 图片上传示例
-- [x] 定时任务: 简单的定时任务
-- [ ] 代码生成: 构想中....
-
-#### 项目结构
-
-```
-Pear Admin Flask
-├─applications # 应用
-│ ├─configs # 配置文件
-│ │ ├─ common.py # 普通配置
-│ │ └─ config.py # 配置文件对象
-│ ├─extensions # 注册插件
-│ ├─models # 数据模型
-│ ├─static # 静态资源文件
-│ ├─templates # 静态模板文件
-│ └─views # 视图部分
-│ ├─admin # 后台管理视图模块
-│ └─index # 前台视图模块
-├─docs # 文档说明(占坑)
-├─migrations # 迁移文件记录
-├─requirement # 依赖文件
-├─test # 测试文件夹(占坑)
-└─.env # 项目的配置文件
-
-```
-
-#### 项目安装
-
-```bash
-# 下 载
-git clone https://gitee.com/pear-admin/pear-admin-flask
-
-# 安 装
-pip install -r requirement\dev.txt
-
-# 配 置
-.env
-
-```
-
-#### 修改配置
-
-```python
-.env
-# MySql配置信息
-MYSQL_HOST=127.0.0.1
-MYSQL_PORT=3306
-MYSQL_DATABASE=PearAdminFlask
-MYSQL_USERNAME=root
-MYSQL_PASSWORD=root
-
-# Redis 配置
-REDIS_HOST=127.0.0.1
-REDIS_PORT=6379
-
-# 密钥配置
-SECRET_KEY='pear-admin-flask'
-
-# 邮箱配置
-MAIL_SERVER='smtp.qq.com'
-MAIL_USERNAME='123@qq.com'
-MAIL_PASSWORD='XXXXX' # 生成的授权码
-```
-
-#### Venv 安装
-
-```bash
-python -m venv venv
-```
-
-#### 运行项目
-
-```bash
-# 初 始 化 数 据 库
-
-flask init
-```
-
-执行 flask run 命令启动项目
-
-#### 命令行创建视图
-
-```bash
-# 示例
-
-flask new --type view --name test/a
-
-# 自动注册蓝图
-# 访问http://127.0.0.1:5000/test/a/
-```
-
-#### 预览项目
-
-| | |
-|---------------------|---------------------|
-|  |  |
-| |  |
-|  |  |
\ No newline at end of file
+# 二次开发更新日志
+
+- 合并 Pull Requests [FacebookLibra](https://gitee.com/FacebookLibr): [修复反向代理下 IP获取不准确](https://gitee.com/pear-admin/pear-admin-flask/pulls/44/files)
+- 合并 Pull Requests [CHunYenc](https://gitee.com/CHunYenc): [加入 Flask-APScheduler 設定](https://gitee.com/pear-admin/pear-admin-flask/pulls/49/files)
+- 合并 Pull Requests [mengfu188](https://gitee.com/mengfu188): [添加邮件管理模块](https://gitee.com/pear-admin/pear-admin-flask/pulls/51) 并将邮件原文设置为 HTML 格式
+- 修复 用户权限更新时当前登录仍然无法获得权限的BUG
+- 修复 直接使用 app.py 启动时无法将 .flaskenv 环境变量读入的问题
+- 增加 插件功能
+- 增加 程序重启功能 注意:**注意要使用程序重启 必须在主程序启动前设置环境变量 pearppid ,可以参考 start.py**
diff --git a/app.py b/app.py
index a8a7d48..1c7159e 100644
--- a/app.py
+++ b/app.py
@@ -2,9 +2,15 @@ from applications import create_app
from flask_migrate import Migrate
from applications.extensions import db
+from gevent import pywsgi
+
+import os
+
app = create_app()
migrate = Migrate(app, db)
if __name__ == '__main__':
- app.run()
+ # app.run()
+ server = pywsgi.WSGIServer((os.getenv('FLASK_RUN_HOST'), int(os.getenv('FLASK_RUN_PORT'))), app, log=None)
+ server.serve_forever()
diff --git a/applications/__init__.py b/applications/__init__.py
index e24950e..ec1b789 100644
--- a/applications/__init__.py
+++ b/applications/__init__.py
@@ -1,15 +1,78 @@
import os
-from flask import Flask
+from applications.dev import *
+
+from flask import Flask, request
from applications.common.script import init_script
from applications.extensions import init_plugs
from applications.view import init_view
from applications.configs import config
+from logging.config import dictConfig
+
+def get_user_ip(request):
+ """获取用户真实IP 来自 @FacebookLibra"""
+ if 'HTTP_X_FORWARDED_FOR' in request.headers:
+ arr = request.headers['HTTP_X_FORWARDED_FOR'].strip().split(",")
+ i = 0
+ while i < len(arr):
+ if arr[i].find("unknown") != -1:
+ del arr[i]
+ else:
+ i += 1
+ if len(arr) != 0:
+ return arr[0].strip()
+ elif 'HTTP_CLIENT_IP' in request.headers:
+ return request.headers['HTTP_CLIENT_IP']
+ elif 'REMOTE_ADDR' in request.headers:
+ return request.headers['REMOTE_ADDR']
+ elif 'X-Forwarded-For' in request.headers:
+ return request.headers['X-Forwarded-For']
+ return request.remote_addr
+
+dictConfig({
+ 'version': 1,
+ 'formatters': {'default': {
+ 'format': '',
+ }},
+ 'handlers': {'wsgi': {
+ 'class': 'logging.StreamHandler',
+ 'stream': 'ext://flask.logging.wsgi_errors_stream',
+ 'formatter': 'default'
+ }},
+ 'root': {
+ 'level': 'INFO',
+ 'handlers': ['wsgi']
+ }
+})
+
def create_app(config_name=None):
+
app = Flask(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
+ # 移除原有的输出日志
+ app.logger = None
+
+ # 更改IP地址,只有在最新版的flask中才能生效
+ @app.before_request
+ def before_request():
+ request.remote_addr = get_user_ip(request)
+
+
+ # 使用自定义的日志输出
+ @app.after_request
+ def after_request(rep):
+ if rep.status_code == 200:
+ console.success(f"{request.remote_addr} -- {request.full_path} 200")
+ elif rep.status_code == 404:
+ console.error(f"{request.remote_addr} -- {request.full_path} 404")
+ elif rep.status_code == 500:
+ console.warning(f"{request.remote_addr} -- {request.full_path} 500")
+ else:
+ console.info(f"{request.remote_addr} -- {request.full_path} {rep.status_code}")
+ return rep
+
if not config_name:
# 尝试从本地环境中读取
config_name = os.getenv('FLASK_CONFIG', 'development')
diff --git a/applications/common/admin.py b/applications/common/admin.py
index 3d66369..4b59af2 100644
--- a/applications/common/admin.py
+++ b/applications/common/admin.py
@@ -112,7 +112,7 @@ def get_render_config():
},
{
"id": "2",
- "color": "#5FB878"
+ "color": "#2d8cf0"
},
{
"id": "3",
diff --git a/applications/configs/config.py b/applications/configs/config.py
index cafec6b..c2c5168 100644
--- a/applications/configs/config.py
+++ b/applications/configs/config.py
@@ -5,9 +5,20 @@ from urllib.parse import quote_plus as urlquote
from apscheduler.executors.pool import ThreadPoolExecutor
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
+# 读入 flaskenv 中的环境变量
+with open(".flaskenv", "r", encoding='utf-8') as f:
+ for line in f.read().split("\n"):
+ pos = line.find("#")
+ if pos != -1:
+ line = line[:pos]
+ line = line.strip()
+ if line == "":
+ continue
+ _ = line.split("=")
+ key, value = _[0], '='.join(_[1:])
+ os.environ[key.strip()] = value.strip()
class BaseConfig:
-
SYSTEM_NAME = os.getenv('SYSTEM_NAME', 'Pear Admin')
# 主题面板的链接列表配置
SYSTEM_PANEL_LINKS = [
@@ -62,10 +73,11 @@ class BaseConfig:
# 默认发件人的邮箱,这里填写和MAIL_USERNAME一致即可
MAIL_DEFAULT_SENDER = ('pear admin', os.getenv('MAIL_USERNAME') or '123@qq.com')
- # 設置 APSCHEDULER 參數
+ # 設置 APSCHEDULER 參數 @CHunYenc
SCHEDULER_API_ENABLED = os.getenv('SCHEDULER_API_ENABLED') or False
SCHEDULER_JOBSTORES: dict = {
- 'default': SQLAlchemyJobStore(url=f'mysql+pymysql://{MYSQL_USERNAME}:{MYSQL_PASSWORD}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}')
+ 'default': SQLAlchemyJobStore(
+ url=f'mysql+pymysql://{MYSQL_USERNAME}:{MYSQL_PASSWORD}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}')
}
SCHEDULER_EXECUTORS: dict = {
'default': ThreadPoolExecutor(20)
@@ -75,6 +87,9 @@ class BaseConfig:
'max_instances': 3
}
+ # 插件配置
+ PLUGIN_ENABLE_FOLDERS = os.getenv('PLUGIN_ENABLE_FOLDERS')
+
class TestingConfig(BaseConfig):
""" 测试配置 """
diff --git a/applications/dev/__init__.py b/applications/dev/__init__.py
new file mode 100644
index 0000000..4819129
--- /dev/null
+++ b/applications/dev/__init__.py
@@ -0,0 +1,9 @@
+from applications.dev import user
+from applications.dev import role
+from applications.dev import power
+from applications.dev import department
+from applications.dev import console
+from flask import Flask
+
+# 获取app应用实例,会被初始化插件时重新赋值
+app = None # type: Flask
diff --git a/applications/dev/console.py b/applications/dev/console.py
new file mode 100644
index 0000000..b658135
--- /dev/null
+++ b/applications/dev/console.py
@@ -0,0 +1,89 @@
+"""
+输出控制台日志
+"""
+import sys
+import time
+import ctypes
+
+NONE = "\033[m"
+RED = "\033[0;32;31m"
+LIGHT_RED = "\033[1;31m"
+GREEN = "\033[0;32;32m"
+LIGHT_GREEN = "\033[1;32m"
+BLUE = "\033[0;32;34m"
+LIGHT_BLUE = "\033[1;34m"
+DARY_GRAY = "\033[1;30m"
+CYAN = "\033[0;36m"
+LIGHT_CYAN = "\033[1;36m"
+PURPLE = "\033[0;35m"
+LIGHT_PURPLE = "\033[1;35m"
+BROWN = "\033[0;33m"
+YELLOW = "\033[1;33m"
+LIGHT_GRAY = "\033[0;37m"
+WHITE = "\033[1;37m"
+
+# 开启 Windows 下对于 ESC控制符 的支持
+if sys.platform == "win32":
+ kernel32 = ctypes.windll.kernel32
+ kernel32.SetConsoleMode(kernel32.GetStdHandle(-11), 7)
+
+
+def _print(level, msg):
+ time_ = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
+
+ level_name = {10: "Plain",
+ 11: "Log",
+ 12: "Info",
+ 13: "Debug",
+ 14: "Success",
+ 15: "Warning",
+ 16: "Error"}
+
+ color = {10: NONE,
+ 11: LIGHT_CYAN,
+ 12: LIGHT_BLUE,
+ 13: PURPLE,
+ 14: GREEN,
+ 15: YELLOW,
+ 16: RED}
+
+ print(f'{color.get(level, NONE)}[{time_}]({level_name.get(level, "Plain")}):', msg, f"{NONE}")
+
+
+def plain(*args, sep=' '):
+ msg = sep.join(str(_) for _ in args)
+ _print(10, msg)
+
+
+def log(*args, sep=' '):
+ msg = sep.join(str(_) for _ in args)
+ _print(11, msg)
+
+
+def info(*args, sep=' '):
+ msg = sep.join(str(_) for _ in args)
+ _print(12, msg)
+
+
+def debug(*args, sep=' '):
+ msg = sep.join(str(_) for _ in args)
+ _print(13, msg)
+
+
+def success(*args, sep=' '):
+ msg = sep.join(str(_) for _ in args)
+ _print(14, msg)
+
+
+def warn(*args):
+ warning(*args)
+
+
+def warning(*args, sep=' '):
+ msg = sep.join(str(_) for _ in args)
+ _print(15, msg)
+
+
+def error(*args, sep=' '):
+ msg = sep.join(str(_) for _ in args)
+ _print(16, msg)
diff --git a/applications/dev/department.py b/applications/dev/department.py
new file mode 100644
index 0000000..388e0f8
--- /dev/null
+++ b/applications/dev/department.py
@@ -0,0 +1,108 @@
+"""
+集成了对 Pear Admin Flask 的部门的操作,并给了相对应的示例。
+"""
+
+from applications.common import curd
+from applications.extensions import db
+from applications.models import Dept, User
+from applications.schemas import DeptOutSchema
+
+
+def get_all():
+ """
+ 获取全部权限,会返回一个列表,每个列表是一个字典。
+
+ 字典构成如下::
+
+ {
+ "address":"这是总公司", # 地址
+ "deptId":1, # 公司ID
+ "deptName":"总公司", # 公司名
+ "email":"1", # 公司 email
+ "leader":"", # 公司领导人
+ "parentId":0, # 父ID
+ "phone":"", # 联系电话
+ "sort":1, # 排序
+ "status":"1" # 状态 1-开启 0-关闭
+ }
+
+ :return: 列表
+ """
+ dept = Dept.query.order_by(Dept.sort).all()
+ return curd.model_to_dicts(schema=DeptOutSchema, data=dept)
+
+
+def add(parentId, deptName, sort, leader, phone, email, status, address):
+ """
+ 添加一个公司
+
+ :param parentId: 父公司ID,0未总公司
+ :param deptName: 公司名称
+ :param sort: 排序
+ :param leader: 负责人
+ :param phone: 手机
+ :param email: 邮箱
+ :param status: 状态 1-打开 0-关闭
+ :param address: 地址
+ :return: 是否成功
+ """
+ dept = Dept(
+ parent_id=parentId,
+ dept_name=deptName,
+ sort=sort,
+ leader=leader,
+ phone=phone,
+ email=email,
+ status=status,
+ address=address
+ )
+ r = db.session.add(dept)
+ db.session.commit()
+ if r:
+ return True
+ else:
+ return False
+
+
+def update(deptId, data):
+ """
+ 更新公司信息
+
+ 可更新内容如下::
+
+ "dept_name"
+ "sort"
+ "leader"
+ "phone"
+ "email"
+ "status"
+ "address"
+
+ :param deptId: 公司ID
+ :param data: 要更新公司字典
+ :return: 是否成功
+ """
+ d = Dept.query.filter_by(id=deptId).update(data)
+ if not d:
+ return False
+ db.session.commit()
+ return True
+
+
+def delete(deptId):
+ """
+ 删除公司
+
+ :param deptId: 公司ID
+ :return: 是否成功
+ """
+ d = Dept.query.filter_by(id=deptId).delete()
+ if not d:
+ return False
+ res = User.query.filter_by(dept_id=deptId).update({"dept_id": None})
+ db.session.commit()
+ if res:
+ return True
+ else:
+ return False
+
diff --git a/applications/dev/mail.py b/applications/dev/mail.py
new file mode 100644
index 0000000..8c73474
--- /dev/null
+++ b/applications/dev/mail.py
@@ -0,0 +1,83 @@
+"""
+集成了对 Pear Admin Flask 二次开发的的邮件操作,并给了相对应的示例。
+"""
+from flask import current_app
+from flask_mail import Message
+
+from applications.common.curd import model_to_dicts
+from applications.common.helper import ModelFilter
+from applications.extensions import db, flask_mail
+from applications.models import Mail
+from applications.schemas import MailOutSchema
+
+
+def get_all(receiver=None, subject=None, content=None):
+ """
+ 获取邮件
+
+ 返回的列表中的字典构造如下::
+
+ {
+ "content": "", # html内容
+ "create_at": "2022-12-25T10:51:17", # 时间
+ "id": 17, # 邮件ID
+ "realname": "超级管理", # 创建者
+ "receiver": "", # 接收者
+ "subject": "" # 主题
+ }
+
+ :param receiver: 发送者
+ :param subject: 邮件标题
+ :param content: 邮件内容
+ :return: 列表
+ """
+ # 查询参数构造
+ mf = ModelFilter()
+ if receiver:
+ mf.contains(field_name="receiver", value=receiver)
+ if subject:
+ mf.contains(field_name="subject", value=subject)
+ if content:
+ mf.exact(field_name="content", value=content)
+ # orm查询
+ # 使用分页获取data需要.items
+ mail = Mail.query.filter(mf.get_filter(Mail)).layui_paginate()
+ return model_to_dicts(schema=MailOutSchema, data=mail.items)
+
+
+def add(receiver, subject, content, user_id):
+ """
+ 发送一封邮件,若发送成功立刻提交数据库。
+
+ :param receiver: 接收者 多个用英文逗号隔开
+ :param subject: 邮件主题
+ :param content: 邮件 html
+ :param user_id: 发送用户ID(谁发送的?) 可以用 from flask_login import current_user ; current_user.id 来表示当前登录用户
+ :return: 成功与否
+ """
+ try:
+ msg = Message(subject=subject, recipients=receiver.split(";"), html=content)
+ flask_mail.send(msg)
+ except BaseException as e:
+ current_app.log_exception(e)
+ return False
+
+ mail = Mail(receiver=receiver, subject=subject, content=content, user_id=user_id)
+
+ db.session.add(mail)
+ db.session.commit()
+ return True
+
+
+def delete(id):
+ """
+ 删除邮件记录,立刻写入数据库。
+
+ :param id: 邮件ID
+ :return: 成功与否
+ """
+ res = Mail.query.filter_by(id=id).delete()
+ if not res:
+ return False
+ db.session.commit()
+ return True
diff --git a/applications/dev/power.py b/applications/dev/power.py
new file mode 100644
index 0000000..99d2757
--- /dev/null
+++ b/applications/dev/power.py
@@ -0,0 +1,138 @@
+"""
+集成了对 Pear Admin Flask 的权限操作,并给了相对应的示例。
+注意:此权限相当于添加后台菜单。
+"""
+
+from applications.common import curd
+from applications.extensions import db
+from applications.models import Power
+
+from applications.extensions import ma
+from marshmallow import fields
+
+
+class PowerOutSchema2(ma.Schema): # 序列化类
+ powerId = fields.Str(attribute="id")
+ powerName = fields.Str(attribute="name")
+ powerType = fields.Str(attribute="type")
+ powerUrl = fields.Str(attribute="url")
+ powerCode = fields.Str(attribute="code")
+ openType = fields.Str(attribute="open_type")
+ parentId = fields.Str(attribute="parent_id")
+ icon = fields.Str()
+ sort = fields.Integer()
+ create_time = fields.DateTime()
+ update_time = fields.DateTime()
+ enable = fields.Integer()
+
+
+def get_all():
+ """
+ 获取所有权限,会返回一个含有菜单的列表。每个列表都是一个字典。
+
+ 字典构成如下::
+ {
+ "powerType": "0", # 权限类型 0目录 1菜单 2按钮
+ "powerUrl": None, # 路径
+ "powerCode": "", # 权限标识
+ "update_time": None, # 更新时间
+ "sort": 1, # 排序
+ "openType": None, # 打开方式 _iframe框架 _blank新页面
+ "icon": "layui-icon layui-icon-set-fill", # 图标
+ "powerName": "系统管理", # 名称
+ "create_time": None, # 创建时间
+ "parentId": "0", # 父id
+ "powerId": "1", # 自己的id
+ "enable": 1 # 是否启用
+ }
+
+ :return: 菜单列表。
+ """
+ power = Power.query.all()
+ res = curd.model_to_dicts(schema=PowerOutSchema2, data=power)
+ res.append({"powerId": 0, "powerName": "顶级权限", "parentId": -1})
+ return res
+
+
+def add(parentId, powerName, powerType, icon, sort: int, enable: bool, powerCode="", powerUrl="", openType=""):
+ """
+ 新建一个菜单权限。
+
+ 参考代码::
+
+ dev.power.add("0", "测试", "1", "layui-icon-time", 0, True, "testfor", "https://baidu.com", "_iframe")
+
+ :param parentId: 父ID,0为顶级菜单ID
+ :param powerName: 菜单名称
+ :param powerType: 权限类型(状态) 0目录 1菜单 2按钮
+ :param icon: 图标,详细查看layui的图标
+ :param sort: 排序
+ :param enable: 是否启用
+
+ :param powerCode: 权限标识
+ :param powerUrl: 权限URL,菜单打开的网址,或者是路径。可选,菜单和按钮类型必填。
+ :param openType: 打开方式,_iframe框架 _blank新页面。可选,菜单和按钮类型必填。
+
+
+
+ :return: 返回新权限ID
+ """
+ power = Power(
+ icon=icon,
+ open_type=openType,
+ parent_id=parentId,
+ code=powerCode,
+ name=powerName,
+ type=powerType,
+ url=powerUrl,
+ sort=sort,
+ enable=1
+ )
+ r = db.session.add(power)
+ db.session.commit()
+ return power.id
+
+
+def update(powerId, data):
+ """
+ 更新权限。
+
+ data可选::
+
+ "icon"
+ "open_type"
+ "parent_id"
+ "code"
+ "name"
+ "type"
+ "url"
+ "sort"
+
+ :param powerId: 要更新的权限ID
+
+ :return: 是否成功
+ """
+ res = Power.query.filter_by(id=powerId).update(data)
+ db.session.commit()
+ if res:
+ return True
+ else:
+ return False
+
+
+def delete(powerId):
+ """
+ 删除权限。
+
+ :param powerId: 要更新的权限ID
+ :return: 是否成功
+ """
+ power = Power.query.filter_by(id=powerId).first()
+ power.role = []
+
+ r = Power.query.filter_by(id=powerId).delete()
+ db.session.commit()
+ if r:
+ return True
+ else:
+ return False
diff --git a/applications/dev/role.py b/applications/dev/role.py
new file mode 100644
index 0000000..a0cc286
--- /dev/null
+++ b/applications/dev/role.py
@@ -0,0 +1,157 @@
+"""
+集成了对 Pear Admin Flask 的角色操作,并给了相对应的示例。
+"""
+from applications.extensions import db
+from applications.models import Role, Power
+from applications.schemas import PowerOutSchema2
+
+
+def filter_by(**kwargs):
+ """
+ 检索角色字段信息,可用于获取角色ID等。系统中默认管理员角色id为1,普通用户为2。
+ 内部采用的是使用 Role.query.filter_by(**kwargs) 进行数据库查询。
+
+ 注意:此函数返回的结果为构造的 SQL的查询字符串 ,以 role_filter 命名,但是并不是用户数据。
+
+ 返回的字段如下::
+
+ id name code enable remark details sort create_time update_time power
+ 具体参考 applications/models/admin_role.py 中的模型定义。
+
+ 参考调用如下::
+
+ roleinfo = dev.role.filter_by(code='admin').first() # 第一个符合要求的角色信息
+ print(role.id, role.name) # 输出角色名称与角色标识
+
+ # 找出所有角色id
+ for role in dev.role.filter_by().all():
+ print(role.id, role.name)
+
+ :param kwargs: 查询参数
+ :return: 角色SQL的查询字符串
+ """
+ return Role.query.filter_by(**kwargs)
+
+
+def add(roleName, roleCode, enable, sort, details):
+ """
+ 添加一个角色。此函数直接写入数据库。此函数不会检测角色是否已经存在(官方在API接口中也没有检测)。
+
+ :param roleName: 角色名称 (如管理员)
+ :param roleCode: 角色标识 (如admin)
+ :param enable: 是否启用 True or False
+ :param sort: 排序
+ :param details: 描述
+ :return: None
+ """
+ role = Role(
+ details=details,
+ enable=enable,
+ code=roleCode,
+ name=roleName,
+ sort=sort
+ )
+ db.session.add(role)
+ db.session.commit()
+
+
+def get_power(role_filter, detail=False, p=0):
+ """
+ 获取角色的权限。
+
+ 如果是非详细数据,会返回一个含有权限id的列表。
+ 如果是详细数据返回此函数,将会返回一个列表,列表中会包含字典,字典的键如下::
+
+ {
+ "checkArr": "1", # 是否有权限 1 为有 0为无
+ "create_time": null, # 权限创建
+ "enable": 1, # 权限是否启用
+ "icon": "layui-icon layui-icon-set-fill", # 权限图标
+ "openType": null, # 开启状态
+ "parentId": "0", # 父权限ID
+ "powerId": "1", # 权限ID
+ "powerName": "系统管理", # 权限名称
+ "powerType": "0", # 权限类型
+ "powerUrl": null, # 权限URL
+ "sort": 1, # 权限排序
+ "update_time": null # 权限更新时间
+ }
+
+
+ :param role_filter: dev.role.filter_by() 返回结果。
+ :param detail: 返回详细数据
+ :param p: 如果有多个结果被找到,p可以确定使用第几个结果。内部使用 role_filter.all()[p]
+ :return: 用户拥有的权限列表。
+ """
+ role = role_filter.all()[p]
+ check_powers = role.power
+ check_powers_list = []
+ for cp in check_powers:
+ check_powers_list.append(cp.id)
+ if not detail:
+ return check_powers_list
+ powers = Power.query.all()
+ power_schema = PowerOutSchema2(many=True) # 用已继承ma.ModelSchema类的自定制类生成序列化类
+ output = power_schema.dump(powers) # 生成可序列化对象
+ for i in output:
+ if int(i.get("powerId")) in check_powers_list:
+ i["checkArr"] = "1"
+ else:
+ i["checkArr"] = "0"
+ return output
+
+
+def set_power(role_filter, powerIds, p=0):
+ """
+ 保存角色权限。此函数会直接写入数据库。
+
+ :param role_filter: dev.role.filter_by() 返回结果。
+ :param powerIds: 必须是一个包含权限ID的列表。如 [1, 2, 3]
+ :param p: 如果有多个结果被找到,p可以确定使用第几个结果。内部使用 role_filter.all()[p]
+ :return: None
+ """
+ role = role_filter.all()[p]
+ powers = Power.query.filter(Power.id.in_(powerIds)).all()
+ role.power = powers
+
+ db.session.commit()
+
+
+def update(role_filter, data):
+ """
+ 更新角色数据。此功能将直接写入数据库。
+
+ 可更新的字段如下::
+
+ id name code enable remark details sort create_time update_time power
+ 具体参考 applications/models/admin_role.py 中的模型定义。
+
+ 参考调用如下::
+
+ role_filter = dev.role.filter_by(id=0) # 获取指定角色ID的角色,注意不要使用会引起歧义的查询条件,否则会匹配到多个角色。
+ dev.role.update(role_filter, {enable: 0}) # 禁用
+
+ :param role_filter: dev.role.filter_by() 返回结果。
+ :param data: 要更新的数据,必须是字典。
+ :return: None
+ """
+ role_filter.update(data)
+ db.session.commit()
+
+
+def delete(role_filter):
+ """
+ 删除角色。此功能将直接写入数据库。
+
+ :param role_filter: dev.role.filter_by() 返回结果。
+ :return: 是否成功。
+ """
+ role = role_filter.first()
+ # 删除该角色的权限和用户
+ role.power = []
+ role.user = []
+
+ r = role_filter.delete()
+ db.session.commit()
+ return r
+
diff --git a/applications/dev/user.py b/applications/dev/user.py
new file mode 100644
index 0000000..00688a3
--- /dev/null
+++ b/applications/dev/user.py
@@ -0,0 +1,160 @@
+"""
+集成了对 Pear Admin Flask 的用户操作,并给了相对应的示例。
+
+调用示例::
+
+ from applications import dev
+ dev.user.login_required # 用户是否登录
+ dev.user.current_user # 当前登录用户
+ dev.user.authorize("XXX", log=True) # 用户是否有此权限
+
+"""
+
+from applications.extensions import db
+from applications.models import Role
+from applications.models import User
+
+
+def filter_by(**kwargs):
+ """
+ 用于在用户数据中查询用户信息,可以通过用户名、用户id等进行检索。(建议使用id检索)
+ 内部采用的是使用 User.query.filter_by(**kwargs) 进行数据库查询
+
+ 注意:此函数返回的结果为构造的 SQL的查询字符串 ,以 user_filter 命名,但是并不是用户数据。
+
+ 返回的字段如下::
+
+ id username password_hash create_at update_at
+ enable realname remark avatar dept_id
+ 具体参考 applications/models/admin_user.py 中的模型定义。
+
+
+ 参考调用如下::
+
+ userinfo = dev.user.filter_by(username='zsq').first() # 查询符合要求的第一个用户
+ print(userinfo.realname) # 获取用户真实名字
+
+
+ :param kwargs: 查询参数
+ :return: 用户数据SQL的查询字符串
+ """
+ return User.query.filter_by(**kwargs)
+
+
+def update(user_filter, data):
+ """
+ 更新用户数据,修改将直接保存到数据库中。
+ 注意:更新用户角色(role)请使用 dev.user.update_role() 函数。
+
+ 可更新的字段如下::
+
+ id username password_hash create_at update_at
+ enable realname remark avatar dept_id
+ 具体参考 applications/models/admin_user.py 中的模型定义。
+
+ 参考调用如下::
+
+ user_filter = dev.user.filter_by(id=0) # 获取指定用户ID的用户,注意不要使用会引起歧义的查询条件,否则会匹配到多个用户。
+ dev.user.update(user_filter, {username: 'zsq1314'}) # 更新其用户名
+
+
+
+ :param user_filter: dev.user.filter_by() 的结果。
+ :param data: 要更新的数据,必须是字典。
+ :return: None
+ """
+ user_filter.update(data)
+ db.session.commit()
+
+
+def update_role(user_filter, roleIds):
+ """
+ 更新用户角色,修改将直接保存到数据库中。
+
+ 参考调用如下::
+
+ user_filter = dev.user.filter_by(username='zsq') # 获取符合要求的第一个用户
+ roleIds = []
+ roleIds.append(dev.role.filter_by(code='admin').first().id) # 管理员角色ID
+ roleIds.append(dev.role.filter_by(code='common').first().id) # 普通用户角色ID
+ dev.user.update_role(user_filter, roleIds)
+
+
+ :param user_filter: dev.user.filter_by() 的结果。
+ :param roleIds: 要更新的角色ID,作为列表传入。
+ :return: None
+ """
+ user_filter.first().role = Role.query.filter(Role.id.in_(roleIds)).all()
+ db.session.commit()
+
+
+def get_role(user_filter):
+ """
+ 获取用户的所有角色ID,将会返回一个整数列表。
+
+ :param user_filter: dev.user.filter_by() 的结果。
+ :return: 列表 (roleIds)
+ """
+ checked_roles = []
+ for r in user_filter.first().role:
+ checked_roles.append(r.id)
+ return checked_roles
+
+
+def set_password(user_filter, password):
+ """
+ 设置用户密码,此函数不会验证用户原始密码哈希值,直接写入新密码哈希值。
+
+ 参考调用如下::
+
+ user_filter = dev.user.filter_by(username='zsq') # 获取符合要求的用户
+ dev.user.set_password(user_filter, 'zsq1314') # 设置密码
+
+ :param user_filter: dev.user.filter_by() 的结果。
+ :param password: 新密码。
+ :return: None
+ """
+ user = user_filter.first()
+ user.set_password(password)
+ db.session.add(user)
+ db.session.commit()
+
+
+def add(username, realname, password, roleIds):
+ """
+ 添加一个新用户。函数会判断用户名是否已存在,存在返回 False ,成功返回用户数据(userinfo)。此函数会直接写入数据库。
+ 注意:此函数创建出来的用户默认是禁用的,可以使用 enable 启用。
+
+ :param username: 新用户名
+ :param realname: 真实名字
+ :param password: 密码字符串
+ :param roleIds: 角色id列表,如 [1, 2],角色id具体查看 dev.role.get_all() 函数。
+ :return: 是否成功
+ """
+ if bool(User.query.filter_by(username=username).count()):
+ return False
+ user = User(username=username, realname=realname)
+ user.set_password(password)
+ db.session.add(user)
+ roles = Role.query.filter(Role.id.in_(roleIds)).all()
+ for r in roles:
+ user.role.append(r)
+ db.session.commit()
+ return user
+
+
+def delete(user_filter):
+ """
+ 删除一个用户。此函数立刻写入数据库。
+
+ :param user_filter: dev.user.filter_by() 的结果。
+ :return: 是否成功
+ """
+ user = user_filter.first()
+ user.role = []
+ res = user_filter.delete()
+ db.session.commit()
+ return res
+
+
+
diff --git a/applications/extensions/init_debug_tool.py b/applications/extensions/init_debug_tool.py
new file mode 100644
index 0000000..8182457
--- /dev/null
+++ b/applications/extensions/init_debug_tool.py
@@ -0,0 +1,7 @@
+from flask import Flask
+from flask_debugtoolbar import DebugToolbarExtension
+
+
+def init_debug_tool(app: Flask):
+ toolbar = DebugToolbarExtension()
+ toolbar.init_app(app)
diff --git a/applications/schemas/admin_user.py b/applications/schemas/admin_user.py
new file mode 100644
index 0000000..af6ad14
--- /dev/null
+++ b/applications/schemas/admin_user.py
@@ -0,0 +1,20 @@
+from applications.extensions import ma
+from marshmallow import fields
+from applications.models import Dept
+
+
+# 用户models的序列化类
+class UserOutSchema(ma.Schema):
+ id = fields.Integer()
+ username = fields.Str()
+ realname = fields.Str()
+ enable = fields.Integer()
+ create_at = fields.DateTime()
+ update_at = fields.DateTime()
+ dept = fields.Method("get_dept")
+
+ def get_dept(self, obj):
+ if obj.dept_id != None:
+ return Dept.query.filter_by(id=obj.dept_id).first().dept_name
+ else:
+ return None
diff --git a/applications/view/__init__.py b/applications/view/__init__.py
index bec7989..6b5cf78 100644
--- a/applications/view/__init__.py
+++ b/applications/view/__init__.py
@@ -3,7 +3,7 @@ from applications.view.index import register_index_views
from applications.view.passport import register_passport_views
from applications.view.rights import register_rights_view
from applications.view.department import register_dept_views
-
+from applications.view.plugin import register_plugin_views
def init_view(app):
register_admin_views(app)
@@ -11,3 +11,4 @@ def init_view(app):
register_rights_view(app)
register_passport_views(app)
register_dept_views(app)
+ register_plugin_views(app)
diff --git a/applications/view/admin/mail.py b/applications/view/admin/mail.py
index e0e2668..1147739 100644
--- a/applications/view/admin/mail.py
+++ b/applications/view/admin/mail.py
@@ -1,11 +1,11 @@
-from flask import Blueprint, render_template, request, current_app
+from flask import Blueprint, render_template, request, current_app, escape
from flask_login import current_user
from flask_mail import Message
+
from applications.common.curd import model_to_dicts
from applications.common.helper import ModelFilter
from applications.common.utils.http import table_api, fail_api, success_api
from applications.common.utils.rights import authorize
-from applications.common.utils.validate import str_escape
from applications.extensions import db, flask_mail
from applications.models import Mail
from applications.schemas import MailOutSchema
@@ -15,19 +15,19 @@ admin_mail = Blueprint('adminMail', __name__, url_prefix='/admin/mail')
# 用户管理
@admin_mail.get('/')
-@authorize("admin:mail:main")
+@authorize("admin:mail:main", log=True)
def main():
return render_template('admin/mail/main.html')
-# 用户分页查询
+# 邮件分页查询
@admin_mail.get('/data')
-@authorize("admin:mail:main")
+@authorize("admin:mail:main", log=True)
def data():
# 获取请求参数
- receiver = str_escape(request.args.get("receiver"))
- subject = str_escape(request.args.get('subject'))
- content = str_escape(request.args.get('content'))
+ receiver = escape(request.args.get("receiver"))
+ subject = escape(request.args.get('subject'))
+ content = escape(request.args.get('content'))
# 查询参数构造
mf = ModelFilter()
if receiver:
@@ -44,7 +44,7 @@ def data():
return table_api(data=model_to_dicts(schema=MailOutSchema, data=mail.items), count=count)
-# 用户增加
+# 邮件增加
@admin_mail.get('/add')
@authorize("admin:mail:add", log=True)
def add():
@@ -55,15 +55,15 @@ def add():
@authorize("admin:mail:add", log=True)
def save():
req_json = request.json
- receiver = str_escape(req_json.get("receiver"))
- subject = str_escape(req_json.get('subject'))
- content = str_escape(req_json.get('content'))
+ receiver = escape(req_json.get("receiver"))
+ subject = escape(req_json.get('subject'))
+ content = req_json.get('content')
user_id = current_user.id
try:
- msg = Message(subject=subject, recipients=receiver.split(";"), body=content)
+ msg = Message(subject=subject, recipients=receiver.split(";"), html=content)
flask_mail.send(msg)
- except Exception as e:
+ except BaseException as e:
current_app.log_exception(e)
return fail_api(msg="发送失败,请检查邮件配置或发送人邮箱是否写错")
@@ -74,7 +74,7 @@ def save():
return success_api(msg="增加成功")
-# 删除用户
+# 删除邮件
@admin_mail.delete('/remove/')
@authorize("admin:mail:remove", log=True)
def delete(id):
diff --git a/applications/view/admin/monitor.py b/applications/view/admin/monitor.py
index 40f1e9e..b6ccf1e 100644
--- a/applications/view/admin/monitor.py
+++ b/applications/view/admin/monitor.py
@@ -70,8 +70,8 @@ def main():
boot_time=boot_time,
up_time_format=up_time_format,
disk_partitions_list=disk_partitions_list,
- time_now=time_now
-
+ time_now=time_now,
+ pearppid=os.environ.get('pearppid')
)
diff --git a/applications/view/plugin/__init__.py b/applications/view/plugin/__init__.py
new file mode 100644
index 0000000..c9db878
--- /dev/null
+++ b/applications/view/plugin/__init__.py
@@ -0,0 +1,165 @@
+import shutil
+
+from flask import Flask
+from flask import Blueprint, render_template, request, jsonify, escape
+from applications.common.utils.http import table_api, fail_api, success_api
+
+import os
+import json
+import traceback
+import importlib
+
+import applications.dev
+from applications.common.utils.rights import authorize
+
+plugin_bp = Blueprint('plugin', __name__, url_prefix='/plugin')
+PLUGIN_ENABLE_FOLDERS = []
+
+
+def register_plugin_views(app: Flask):
+ global PLUGIN_ENABLE_FOLDERS
+ applications.dev.app = app # 对app重新赋值 便于插件简单调用
+ app.register_blueprint(plugin_bp)
+ # 载入插件过程
+ # plugin_folder 配置的是插件的文件夹名
+ PLUGIN_ENABLE_FOLDERS = json.loads(app.config['PLUGIN_ENABLE_FOLDERS'])
+ for plugin_folder in PLUGIN_ENABLE_FOLDERS:
+ plugin_info = {}
+ try:
+ with open("plugins/" + plugin_folder + "/__init__.json", "r", encoding='utf-8') as f:
+ plugin_info = json.loads(f.read())
+ print(f"-->载入插件 {plugin_info['plugin_name']} 中......")
+ __import__('plugins.' + plugin_folder + '.main')
+ print(f"-->载入插件 {plugin_info['plugin_name']} 成功......")
+ except BaseException as e:
+ info = f"-->载入插件时{plugin_info['plugin_name'] if len(plugin_info) != 0 else ''}出现下列错误:" + "\n"
+ info += 'str(Exception):\t' + str(Exception) + "\n"
+ info += 'str(e):\t\t' + str(e) + "\n"
+ info += 'repr(e):\t' + repr(e) + "\n"
+ info += 'traceback.format_exc():\n%s' + traceback.format_exc()
+ print(info)
+
+
+@plugin_bp.get('/')
+@authorize("admin:plugin:main", log=True)
+def main():
+ """此处渲染管理模板"""
+ return render_template('admin/plugin/main.html')
+
+
+@plugin_bp.get('/data')
+@authorize("admin:plugin:main", log=True)
+def data():
+ """请求插件数据"""
+ plugin_name = escape(request.args.get("plugin_name"))
+ all_plugins = []
+ count = 0
+ for filename in os.listdir("plugins"):
+ try:
+ with open("plugins/" + filename + "/__init__.json", "r", encoding='utf-8') as f:
+ info = json.loads(f.read())
+
+ if plugin_name is None:
+ if info['plugin_name'].find(plugin_name) == -1:
+ continue
+
+ all_plugins.append(
+ {
+ "plugin_name": info["plugin_name"],
+ "plugin_version": info["plugin_version"],
+ "plugin_description": info["plugin_description"],
+ "developer_name": info["developer_name"],
+ "developer_website": info["developer_website"],
+ "developer_email": info["developer_email"],
+ "developer_phone": info["developer_phone"],
+ "plugin_folder_name": filename,
+ "enable": "1" if filename in PLUGIN_ENABLE_FOLDERS else "0"
+ }
+ )
+ count += 1
+ except BaseException as error:
+ print(filename, error)
+ continue
+ return table_api(data=all_plugins, count=count)
+
+
+@plugin_bp.put('/enable')
+@authorize("admin:plugin:enable", log=True)
+def enable():
+ """启用插件"""
+ plugin_folder_name = request.json.get('plugin_folder_name')
+ if plugin_folder_name:
+ try:
+ if plugin_folder_name not in PLUGIN_ENABLE_FOLDERS:
+ PLUGIN_ENABLE_FOLDERS.append(plugin_folder_name)
+ with open(".flaskenv", "r", encoding='utf-8') as f:
+ flaskenv = f.read() # type: str
+ pos1 = flaskenv.find("PLUGIN_ENABLE_FOLDERS")
+ pos2 = flaskenv.find("\n", pos1)
+ with open(".flaskenv", "w", encoding='utf-8') as f:
+ if pos2 == -1:
+ f.write(flaskenv[:pos1] + "PLUGIN_ENABLE_FOLDERS = " + json.dumps(PLUGIN_ENABLE_FOLDERS))
+ else:
+ f.write(
+ flaskenv[:pos1] + "PLUGIN_ENABLE_FOLDERS = " + json.dumps(PLUGIN_ENABLE_FOLDERS) + flaskenv[
+ pos2:])
+ # 启用插件事件
+ try:
+ importlib.import_module('plugins.' + plugin_folder_name).event_enable()
+ except ModuleNotFoundError:
+ pass
+ except BaseException as error:
+ return fail_api(msg="出错啦!错误信息:" + str(error))
+
+ except BaseException as error:
+ return fail_api(msg="出错啦!错误信息:" + str(error))
+ return success_api(msg="启用成功,要使修改生效需要重启程序。")
+ return fail_api(msg="数据错误")
+
+
+@plugin_bp.put('/disable')
+@authorize("admin:plugin:enable", log=True)
+def disable():
+ """禁用插件"""
+ plugin_folder_name = request.json.get('plugin_folder_name')
+ if plugin_folder_name:
+ try:
+ if plugin_folder_name in PLUGIN_ENABLE_FOLDERS:
+ PLUGIN_ENABLE_FOLDERS.remove(plugin_folder_name)
+ with open(".flaskenv", "r", encoding='utf-8') as f:
+ flaskenv = f.read() # type: str
+ pos1 = flaskenv.find("PLUGIN_ENABLE_FOLDERS")
+ pos2 = flaskenv.find("\n", pos1)
+ with open(".flaskenv", "w", encoding='utf-8') as f:
+ if pos2 == -1:
+ f.write(flaskenv[:pos1] + "PLUGIN_ENABLE_FOLDERS = " + json.dumps(PLUGIN_ENABLE_FOLDERS))
+ else:
+ f.write(
+ flaskenv[:pos1] + "PLUGIN_ENABLE_FOLDERS = " + json.dumps(PLUGIN_ENABLE_FOLDERS) + flaskenv[
+ pos2:])
+
+ # 禁用插件事件
+ try:
+ importlib.import_module('plugins.' + plugin_folder_name).event_disable()
+ except ModuleNotFoundError:
+ pass
+ except BaseException as error:
+ return fail_api(msg="出错啦!错误信息:" + str(error))
+
+ except BaseException as error:
+ return fail_api(msg="出错啦!错误信息:" + str(error))
+ return success_api(msg="禁用成功,要使修改生效需要重启程序。")
+ return fail_api(msg="数据错误")
+
+
+# 删除
+@plugin_bp.delete('/remove/')
+@authorize("admin:mail:remove", log=True)
+def delete(plugin_folder_name):
+ if plugin_folder_name in PLUGIN_ENABLE_FOLDERS:
+ return fail_api(msg="您必须先禁用插件!")
+ try:
+ shutil.rmtree(os.path.abspath("plugins/" + plugin_folder_name))
+ return success_api(msg="删除成功")
+ except BaseException as error:
+ return fail_api(msg="删除失败!原因:" + str(error))
diff --git a/applications/view/plugin/init_plugins.py b/applications/view/plugin/init_plugins.py
new file mode 100644
index 0000000..e69de29
diff --git a/pear.sql b/pear.sql
index 6c29bc4..bf61277 100644
--- a/pear.sql
+++ b/pear.sql
@@ -1,364 +1,507 @@
-/*
- Navicat Premium Data Transfer
+-- --------------------------------------------------------
+-- 主机: 127.0.0.1
+-- 服务器版本: 5.7.26 - MySQL Community Server (GPL)
+-- 服务器操作系统: Win64
+-- HeidiSQL 版本: 11.0.0.5919
+-- --------------------------------------------------------
- Source Server : phpmystudy
- Source Server Type : MySQL
- Source Server Version : 50726
- Source Host : localhost:3306
- Source Schema : pearadminflask
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET NAMES utf8 */;
+/*!50503 SET NAMES utf8mb4 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
- Target Server Type : MySQL
- Target Server Version : 50726
- File Encoding : 65001
- Date: 07/07/2021 13:52:10
-*/
+-- 导出 pearadmin 的数据库结构
+CREATE DATABASE IF NOT EXISTS `pearadmin` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;
+USE `pearadmin`;
-SET NAMES utf8mb4;
-SET FOREIGN_KEY_CHECKS = 0;
-
--- ----------------------------
--- Table structure for admin_admin_log
--- ----------------------------
-DROP TABLE IF EXISTS `admin_admin_log`;
-CREATE TABLE `admin_admin_log` (
+-- 导出 表 pearadmin.admin_admin_log 结构
+CREATE TABLE IF NOT EXISTS `admin_admin_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
- `method` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
- `uid` int(11) NULL DEFAULT NULL,
- `url` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
- `desc` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL,
- `ip` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
- `user_agent` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL,
- `create_time` datetime(0) NULL DEFAULT NULL,
- `success` int(11) NULL DEFAULT NULL,
+ `method` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
+ `uid` int(11) DEFAULT NULL,
+ `url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
+ `desc` text COLLATE utf8_unicode_ci,
+ `ip` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
+ `user_agent` text COLLATE utf8_unicode_ci,
+ `create_time` datetime DEFAULT NULL,
+ `success` int(11) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 1485 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
+) ENGINE=InnoDB AUTO_INCREMENT=2644 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;
--- ----------------------------
--- Records of admin_admin_log
--- ----------------------------
+-- 正在导出表 pearadmin.admin_admin_log 的数据:~1,021 rows (大约)
+/*!40000 ALTER TABLE `admin_admin_log` DISABLE KEYS */;
+REPLACE INTO `admin_admin_log` (`id`, `method`, `uid`, `url`, `desc`, `ip`, `user_agent`, `create_time`, `success`) VALUES
+ (2485, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:36:01', 1),
+ (2486, 'GET', 1, '/plugin/data', '{'page': '1', 'limit': '10'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:36:04', 1),
+ (2487, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:37:25', 1),
+ (2488, 'GET', 1, '/plugin/data', '{'page': '1', 'limit': '10'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:37:28', 1),
+ (2489, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:37:34', 1),
+ (2490, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:38:42', 1),
+ (2491, 'GET', 1, '/plugin/data', '{'page': '1', 'limit': '10'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:38:45', 1),
+ (2492, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:38:48', 1),
+ (2493, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:45:24', 1),
+ (2494, 'GET', 1, '/plugin/data', '{'limit': '10', 'page': '1'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:45:27', 1),
+ (2495, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:45:28', 1),
+ (2496, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:47:02', 1),
+ (2497, 'GET', 1, '/plugin/data', '{'limit': '10', 'page': '1'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:47:06', 1),
+ (2498, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:47:08', 1),
+ (2499, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:49:32', 1),
+ (2500, 'GET', 1, '/plugin/data', '{'limit': '10', 'page': '1'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:49:36', 1),
+ (2501, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:49:37', 1),
+ (2502, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:51:40', 1),
+ (2503, 'GET', 1, '/plugin/data', '{'limit': '10', 'page': '1'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:51:43', 1),
+ (2504, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:51:49', 1),
+ (2505, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:52:52', 1),
+ (2506, 'GET', 1, '/plugin/data', '{'page': '1', 'limit': '10'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:52:56', 1),
+ (2507, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:52:59', 1),
+ (2508, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:54:51', 1),
+ (2509, 'GET', 1, '/plugin/data', '{'page': '1', 'limit': '10'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:54:55', 1),
+ (2510, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:54:56', 1),
+ (2511, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:56:16', 1),
+ (2512, 'GET', 1, '/plugin/data', '{'limit': '10', 'page': '1'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:56:19', 1),
+ (2513, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:56:23', 1),
+ (2514, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:57:41', 1),
+ (2515, 'GET', 1, '/plugin/data', '{'page': '1', 'limit': '10'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:57:44', 1),
+ (2516, 'PUT', 1, '/plugin/disable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:57:46', 1),
+ (2517, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:57:51', 1),
+ (2518, 'PUT', 1, '/plugin/disable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 14:57:55', 1),
+ (2519, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 15:04:55', 1),
+ (2520, 'GET', 1, '/plugin/data', '{'page': '1', 'limit': '10'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 15:04:58', 1),
+ (2521, 'DELETE', 1, '/plugin/remove/helloworld1', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 15:05:05', 1),
+ (2522, 'POST', 1, '/passport/login', 'admin', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 18:23:00', 1),
+ (2523, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 18:26:32', 1),
+ (2524, 'GET', 1, '/plugin/data', '{'limit': '10', 'page': '1'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 18:26:34', 1),
+ (2525, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 18:26:37', 1),
+ (2526, 'PUT', 1, '/plugin/disable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 18:26:40', 1),
+ (2527, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 18:32:45', 1),
+ (2528, 'PUT', 1, '/plugin/disable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 18:32:59', 1),
+ (2529, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 18:33:13', 1),
+ (2530, 'PUT', 1, '/plugin/disable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 18:33:14', 1),
+ (2531, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 18:39:10', 1),
+ (2532, 'PUT', 1, '/plugin/disable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 18:39:14', 1),
+ (2533, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 18:39:22', 1),
+ (2534, 'PUT', 1, '/plugin/disable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 18:39:23', 1),
+ (2535, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 18:43:12', 1),
+ (2536, 'PUT', 1, '/plugin/disable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 18:43:13', 1),
+ (2537, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 18:43:16', 1),
+ (2538, 'PUT', 1, '/plugin/disable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 18:43:17', 1),
+ (2539, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 18:50:18', 1),
+ (2540, 'PUT', 1, '/plugin/disable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 19:08:45', 1),
+ (2541, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 19:08:47', 1),
+ (2542, 'PUT', 1, '/plugin/disable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 19:24:13', 1),
+ (2543, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 19:24:16', 1),
+ (2544, 'PUT', 1, '/plugin/disable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 19:30:51', 1),
+ (2545, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 19:30:54', 1),
+ (2546, 'POST', 1, '/admin/file/upload', '{'fileName': '1671970133000.jpg', 'fileToken': '1671970133000'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 20:08:54', 1),
+ (2547, 'GET', 1, '/admin/file/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 20:09:18', 1),
+ (2548, 'GET', 1, '/admin/file/table', '{'page': '1', 'limit': '10'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 20:09:19', 1),
+ (2549, 'PUT', 1, '/plugin/disable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 20:09:25', 1),
+ (2550, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 20:09:27', 1),
+ (2551, 'PUT', 1, '/plugin/disable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 20:09:40', 1),
+ (2552, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 20:09:41', 1),
+ (2553, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-25 20:09:57', 1),
+ (2554, 'POST', 1, '/passport/login', 'admin', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 16:43:04', 1),
+ (2555, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 16:43:12', 1),
+ (2556, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 18:23:14', 1),
+ (2557, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 18:23:39', 1),
+ (2558, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 18:42:46', 1),
+ (2559, 'GET', 1, '/admin/mail/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:02:19', 1),
+ (2560, 'GET', 1, '/admin/mail/data', '{'page': '1', 'limit': '10'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:02:21', 1),
+ (2561, 'GET', 1, '/admin/mail/add', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:02:22', 1),
+ (2562, 'POST', 1, '/admin/mail/save', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:02:34', 1),
+ (2563, 'GET', 1, '/admin/mail/data', '{'page': '1', 'limit': '10'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:02:38', 1),
+ (2564, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:27:14', 1),
+ (2565, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:32:06', 1),
+ (2566, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:33:24', 1),
+ (2567, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:01', 1),
+ (2568, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:17', 1),
+ (2569, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:17', 1),
+ (2570, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:18', 1),
+ (2571, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:19', 1),
+ (2572, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:23', 1),
+ (2573, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:23', 1),
+ (2574, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:25', 1),
+ (2575, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:26', 1),
+ (2576, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:27', 1),
+ (2577, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:29', 1),
+ (2578, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:29', 1),
+ (2579, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:32', 1),
+ (2580, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:32', 1),
+ (2581, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:34', 1),
+ (2582, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:35', 1),
+ (2583, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:36', 1),
+ (2584, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:38', 1),
+ (2585, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:39', 1),
+ (2586, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:40', 1),
+ (2587, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:42', 1),
+ (2588, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:42', 1),
+ (2589, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:44', 1),
+ (2590, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:46', 1),
+ (2591, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:48', 1),
+ (2592, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:49', 1),
+ (2593, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:50', 1),
+ (2594, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:52', 1),
+ (2595, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:52', 1),
+ (2596, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:55', 1),
+ (2597, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:35:56', 1),
+ (2598, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:36:37', 1),
+ (2599, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:38:33', 1),
+ (2600, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:38:35', 1),
+ (2601, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:38:36', 1),
+ (2602, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:38:36', 1),
+ (2603, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:38:36', 1),
+ (2604, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:38:37', 1),
+ (2605, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:41:45', 1),
+ (2606, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:43:40', 1),
+ (2607, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:44:52', 1),
+ (2608, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:46:06', 1),
+ (2609, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:46:35', 1),
+ (2610, 'GET', 1, '/admin/mail/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:54:01', 1),
+ (2611, 'GET', 1, '/admin/mail/data', '{'page': '1', 'limit': '10'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:54:03', 1),
+ (2612, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:54:06', 1),
+ (2613, 'GET', 1, '/plugin/data', '{'page': '1', 'limit': '10'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:54:07', 1),
+ (2614, 'PUT', 1, '/plugin/disable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:54:09', 1),
+ (2615, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:54:22', 1),
+ (2616, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:54:22', 1),
+ (2617, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:54:22', 1),
+ (2618, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:54:22', 1),
+ (2619, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:54:23', 1),
+ (2620, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:54:23', 1),
+ (2621, 'GET', 1, '/plugin/data', '{'limit': '10', 'page': '1'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 19:54:23', 1),
+ (2622, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 20:03:36', 1),
+ (2623, 'GET', 1, '/plugin/data', '{'limit': '10', 'page': '1'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 20:03:38', 1),
+ (2624, 'PUT', 1, '/plugin/enable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 20:03:40', 1),
+ (2625, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 20:03:52', 1),
+ (2626, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 20:03:52', 1),
+ (2627, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 20:03:52', 1),
+ (2628, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 20:03:53', 1),
+ (2629, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 20:03:53', 1),
+ (2630, 'GET', 1, '/plugin/data', '{'page': '1', 'limit': '10'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 20:03:54', 1),
+ (2631, 'PUT', 1, '/plugin/disable', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 20:04:03', 1),
+ (2632, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 20:04:14', 1),
+ (2633, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 20:04:14', 1),
+ (2634, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 20:04:15', 1),
+ (2635, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 20:04:15', 1),
+ (2636, 'GET', 1, '/admin/monitor/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 20:04:15', 1),
+ (2637, 'GET', 1, '/plugin/data', '{'limit': '10', 'page': '1'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-26 20:04:16', 1),
+ (2638, 'POST', 1, '/passport/login', 'admin', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-27 07:35:02', 1),
+ (2639, 'GET', 1, '/admin/user/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-27 07:35:09', 1),
+ (2640, 'GET', 1, '/admin/user/data', '{'page': '1', 'limit': '10'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-27 07:35:11', 1),
+ (2641, 'GET', 1, '/dept/tree', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-27 07:35:11', 1),
+ (2642, 'GET', 1, '/plugin/', '{}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-27 07:35:14', 1),
+ (2643, 'GET', 1, '/plugin/data', '{'page': '1', 'limit': '10'}', '127.0.0.1', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54', '2022-12-27 07:35:15', 1);
+/*!40000 ALTER TABLE `admin_admin_log` ENABLE KEYS */;
--- ----------------------------
--- Table structure for admin_dept
--- ----------------------------
-DROP TABLE IF EXISTS `admin_dept`;
-CREATE TABLE `admin_dept` (
+-- 导出 表 pearadmin.admin_dept 结构
+CREATE TABLE IF NOT EXISTS `admin_dept` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '部门ID',
- `parent_id` int(11) NULL DEFAULT NULL COMMENT '父级编号',
- `dept_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '部门名称',
- `sort` int(11) NULL DEFAULT NULL COMMENT '排序',
- `leader` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '负责人',
- `phone` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '联系方式',
- `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '邮箱',
- `status` int(11) NULL DEFAULT NULL COMMENT '状态(1开启,0关闭)',
- `remark` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL COMMENT '备注',
- `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '详细地址',
- `create_at` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
- `update_at` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
+ `parent_id` int(11) DEFAULT NULL COMMENT '父级编号',
+ `dept_name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '部门名称',
+ `sort` int(11) DEFAULT NULL COMMENT '排序',
+ `leader` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '负责人',
+ `phone` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '联系方式',
+ `email` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '邮箱',
+ `status` int(11) DEFAULT NULL COMMENT '状态(1开启,0关闭)',
+ `remark` text COLLATE utf8_unicode_ci COMMENT '备注',
+ `address` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '详细地址',
+ `create_at` datetime DEFAULT NULL COMMENT '创建时间',
+ `update_at` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 21 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
+) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;
--- ----------------------------
--- Records of admin_dept
--- ----------------------------
-INSERT INTO `admin_dept` VALUES (1, 0, '总公司', 1, '就眠仪式', '12312345679', '123qq.com', 1, NULL, '这是总公司', NULL, '2021-06-01 17:23:20');
-INSERT INTO `admin_dept` VALUES (4, 1, '济南分公司', 2, '就眠仪式', '12312345678', '1234qq.com', 1, NULL, '这是济南', '2021-06-01 17:24:33', '2021-06-01 17:25:19');
-INSERT INTO `admin_dept` VALUES (5, 1, '唐山分公司', 4, 'mkg', '12312345678', '123@qq.com', 1, NULL, '这是唐山', '2021-06-01 17:25:15', '2021-06-01 17:25:20');
-INSERT INTO `admin_dept` VALUES (7, 4, '济南分公司开发部', 5, '就眠仪式', '12312345678', '123@qq.com', 1, NULL, '测试', '2021-06-01 17:27:39', '2021-06-01 17:27:39');
-INSERT INTO `admin_dept` VALUES (8, 5, '唐山测试部', 6, 'mkg', '12312345678', '123@qq.com', 1, NULL, '测试部', '2021-06-01 17:28:27', '2021-06-01 17:28:27');
+-- 正在导出表 pearadmin.admin_dept 的数据:~5 rows (大约)
+/*!40000 ALTER TABLE `admin_dept` DISABLE KEYS */;
+REPLACE INTO `admin_dept` (`id`, `parent_id`, `dept_name`, `sort`, `leader`, `phone`, `email`, `status`, `remark`, `address`, `create_at`, `update_at`) VALUES
+ (1, 0, '总公司', 1, '就眠仪式', '12312345679', '123qq.com', 1, NULL, '这是总公司', NULL, '2021-06-01 17:23:20'),
+ (4, 1, '济南分公司', 2, '就眠仪式', '12312345678', '1234qq.com', 1, NULL, '这是济南', '2021-06-01 17:24:33', '2021-06-01 17:25:19'),
+ (5, 1, '唐山分公司', 4, 'mkg', '12312345678', '123@qq.com', 1, NULL, '这是唐山', '2021-06-01 17:25:15', '2021-06-01 17:25:20'),
+ (7, 4, '济南分公司开发部', 5, '就眠仪式', '12312345678', '123@qq.com', 1, NULL, '测试', '2021-06-01 17:27:39', '2021-06-01 17:27:39'),
+ (8, 5, '唐山测试部', 6, 'mkg', '12312345678', '123@qq.com', 1, NULL, '测试部', '2021-06-01 17:28:27', '2021-06-01 17:28:27');
+/*!40000 ALTER TABLE `admin_dept` ENABLE KEYS */;
--- ----------------------------
--- Table structure for admin_dict_data
--- ----------------------------
-DROP TABLE IF EXISTS `admin_dict_data`;
-CREATE TABLE `admin_dict_data` (
+-- 导出 表 pearadmin.admin_dict_data 结构
+CREATE TABLE IF NOT EXISTS `admin_dict_data` (
`id` int(11) NOT NULL AUTO_INCREMENT,
- `data_label` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '字典类型名称',
- `data_value` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '字典类型标识',
- `type_code` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '字典类型描述',
- `is_default` int(11) NULL DEFAULT NULL COMMENT '是否默认',
- `enable` int(11) NULL DEFAULT NULL COMMENT '是否开启',
- `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '备注',
- `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
- `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
+ `data_label` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '字典类型名称',
+ `data_value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '字典类型标识',
+ `type_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '字典类型描述',
+ `is_default` int(11) DEFAULT NULL COMMENT '是否默认',
+ `enable` int(11) DEFAULT NULL COMMENT '是否开启',
+ `remark` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '备注',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
+) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;
--- ----------------------------
--- Records of admin_dict_data
--- ----------------------------
-INSERT INTO `admin_dict_data` VALUES (8, '男', 'boy', 'user_sex', NULL, 1, '男 : body', '2021-04-16 13:36:34', '2021-04-16 14:05:06');
-INSERT INTO `admin_dict_data` VALUES (9, '女', 'girl', 'user_sex', NULL, 1, '女 : girl', '2021-04-16 13:36:55', '2021-04-16 13:36:55');
+-- 正在导出表 pearadmin.admin_dict_data 的数据:~2 rows (大约)
+/*!40000 ALTER TABLE `admin_dict_data` DISABLE KEYS */;
+REPLACE INTO `admin_dict_data` (`id`, `data_label`, `data_value`, `type_code`, `is_default`, `enable`, `remark`, `create_time`, `update_time`) VALUES
+ (8, '男', 'boy', 'user_sex', NULL, 1, '男 : body', '2021-04-16 13:36:34', '2021-04-16 14:05:06'),
+ (9, '女', 'girl', 'user_sex', NULL, 1, '女 : girl', '2021-04-16 13:36:55', '2021-04-16 13:36:55');
+/*!40000 ALTER TABLE `admin_dict_data` ENABLE KEYS */;
--- ----------------------------
--- Table structure for admin_dict_type
--- ----------------------------
-DROP TABLE IF EXISTS `admin_dict_type`;
-CREATE TABLE `admin_dict_type` (
+-- 导出 表 pearadmin.admin_dict_type 结构
+CREATE TABLE IF NOT EXISTS `admin_dict_type` (
`id` int(11) NOT NULL AUTO_INCREMENT,
- `type_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '字典类型名称',
- `type_code` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '字典类型标识',
- `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '字典类型描述',
- `enable` int(11) NULL DEFAULT NULL COMMENT '是否开启',
- `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
- `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
+ `type_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '字典类型名称',
+ `type_code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '字典类型标识',
+ `description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '字典类型描述',
+ `enable` int(11) DEFAULT NULL COMMENT '是否开启',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;
--- ----------------------------
--- Records of admin_dict_type
--- ----------------------------
-INSERT INTO `admin_dict_type` VALUES (1, '用户性别', 'user_sex', '用户性别', 1, NULL, '2021-04-16 13:37:11');
+-- 正在导出表 pearadmin.admin_dict_type 的数据:~0 rows (大约)
+/*!40000 ALTER TABLE `admin_dict_type` DISABLE KEYS */;
+REPLACE INTO `admin_dict_type` (`id`, `type_name`, `type_code`, `description`, `enable`, `create_time`, `update_time`) VALUES
+ (1, '用户性别', 'user_sex', '用户性别', 1, NULL, '2022-12-03 12:58:12');
+/*!40000 ALTER TABLE `admin_dict_type` ENABLE KEYS */;
--- ----------------------------
--- Table structure for admin_mail
--- ----------------------------
-DROP TABLE IF EXISTS `admin_mail`;
-CREATE TABLE `admin_mail` (
+-- 导出 表 pearadmin.admin_mail 结构
+CREATE TABLE IF NOT EXISTS `admin_mail` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '邮件编号',
- `receiver` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '收件人邮箱',
- `subject` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮件主题',
- `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '邮件正文',
- `user_id` int(11) NULL DEFAULT NULL COMMENT '发送人id',
- `create_at` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
+ `receiver` varchar(1024) NOT NULL COMMENT '收件人邮箱',
+ `subject` varchar(128) DEFAULT NULL COMMENT '邮件主题',
+ `content` text COMMENT '邮件正文',
+ `user_id` int(11) DEFAULT NULL COMMENT '发送人id',
+ `create_at` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 17 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-
--- ----------------------------
--- Records of admin_mail
--- ----------------------------
-INSERT INTO `admin_mail` VALUES (1, '1242733702@qq.com', 'pear-admin-flask', 'pear-admin-flask', 1, '2022-10-11 13:41:21');
-INSERT INTO `admin_mail` VALUES (4, '1242733702@qq.com', '湖人总冠军', '湖人总冠军', 1, '2022-10-11 14:03:30');
-INSERT INTO `admin_mail` VALUES (5, '1242733702@qq.com', '这是flask测试邮箱', '正文', 1, '2022-10-11 14:10:30');
+) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
+-- 正在导出表 pearadmin.admin_mail 的数据:~2 rows (大约)
+/*!40000 ALTER TABLE `admin_mail` DISABLE KEYS */;
+REPLACE INTO `admin_mail` (`id`, `receiver`, `subject`, `content`, `user_id`, `create_at`) VALUES
+ (17, '422880152@qq.com', '123', '123', 1, '2022-12-25 10:51:17'),
+ (18, '422880152@qq.com', 'html邮件测试', '未转义字符
', 1, '2022-12-25 10:58:09'),
+ (19, '422880152@qq.com', '123', ' 未转义字符
', 1, '2022-12-25 11:09:58'),
+ (20, '422880152@qq.com', '11', '1\n', 1, '2022-12-26 19:02:37');
+/*!40000 ALTER TABLE `admin_mail` ENABLE KEYS */;
--- ----------------------------
--- Table structure for admin_photo
--- ----------------------------
-DROP TABLE IF EXISTS `admin_photo`;
-CREATE TABLE `admin_photo` (
+-- 导出 表 pearadmin.admin_photo 结构
+CREATE TABLE IF NOT EXISTS `admin_photo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
- `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
- `href` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,
- `mime` char(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
- `size` char(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
- `create_time` datetime(0) NULL DEFAULT NULL,
+ `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
+ `href` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
+ `mime` char(50) COLLATE utf8_unicode_ci NOT NULL,
+ `size` char(30) COLLATE utf8_unicode_ci NOT NULL,
+ `create_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;
--- ----------------------------
--- Records of admin_photo
--- ----------------------------
-INSERT INTO `admin_photo` VALUES (3, '6958819_pear-admin_1607443454_1.png', 'http://127.0.0.1:5000/_uploads/photos/6958819_pear-admin_1607443454_1.png', 'image/png', '2204', '2021-03-19 18:53:02');
-INSERT INTO `admin_photo` VALUES (17, '1617291580000.jpg', 'http://127.0.0.1:5000/_uploads/photos/1617291580000.jpg', 'image/png', '94211', '2021-04-01 23:39:41');
+-- 正在导出表 pearadmin.admin_photo 的数据:~2 rows (大约)
+/*!40000 ALTER TABLE `admin_photo` DISABLE KEYS */;
+REPLACE INTO `admin_photo` (`id`, `name`, `href`, `mime`, `size`, `create_time`) VALUES
+ (1, '1671970133000.jpg', '/_uploads/photos/1671970133000.jpg', 'image/png', '133818', '2022-12-25 20:08:54');
+/*!40000 ALTER TABLE `admin_photo` ENABLE KEYS */;
--- ----------------------------
--- Table structure for admin_power
--- ----------------------------
-DROP TABLE IF EXISTS `admin_power`;
-CREATE TABLE `admin_power` (
+-- 导出 表 pearadmin.admin_power 结构
+CREATE TABLE IF NOT EXISTS `admin_power` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '权限编号',
- `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '权限名称',
- `type` varchar(1) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '权限类型',
- `code` varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '权限标识',
- `url` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '权限路径',
- `open_type` varchar(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '打开方式',
- `parent_id` varchar(19) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '父类编号',
- `icon` varchar(128) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '图标',
- `sort` int(11) NULL DEFAULT NULL COMMENT '排序',
- `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
- `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
- `enable` int(11) NULL DEFAULT NULL COMMENT '是否开启',
+ `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '权限名称',
+ `type` varchar(1) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '权限类型',
+ `code` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '权限标识',
+ `url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '权限路径',
+ `open_type` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '打开方式',
+ `parent_id` varchar(19) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '父类编号',
+ `icon` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '图标',
+ `sort` int(11) DEFAULT NULL COMMENT '排序',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+ `enable` int(11) DEFAULT NULL COMMENT '是否开启',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 57 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
+) ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;
--- ----------------------------
--- Records of admin_power
--- ----------------------------
-INSERT INTO `admin_power` VALUES (1, '系统管理', '0', '', NULL, NULL, '0', 'layui-icon layui-icon-set-fill', 1, NULL, NULL, 1);
-INSERT INTO `admin_power` VALUES (3, '用户管理', '1', 'admin:user:main', '/admin/user/', '_iframe', '1', 'layui-icon layui-icon layui-icon layui-icon layui-icon-rate', 1, NULL, NULL, 1);
-INSERT INTO `admin_power` VALUES (4, '权限管理', '1', 'admin:power:main', '/admin/power/', '_iframe', '1', NULL, 2, NULL, NULL, 1);
-INSERT INTO `admin_power` VALUES (9, '角色管理', '1', 'admin:role:main', '/admin/role', '_iframe', '1', 'layui-icon layui-icon-username', 2, '2021-03-16 22:24:58', '2021-03-25 19:15:24', 1);
-INSERT INTO `admin_power` VALUES (12, '系统监控', '1', 'admin:monitor:main', '/admin/monitor', '_iframe', '1', 'layui-icon layui-icon-vercode', 5, '2021-03-18 22:05:19', '2021-03-25 19:15:27', 1);
-INSERT INTO `admin_power` VALUES (13, '日志管理', '1', 'admin:log:main', '/admin/log', '_iframe', '1', 'layui-icon layui-icon-read', 4, '2021-03-18 22:37:10', '2021-06-03 11:06:25', 1);
-INSERT INTO `admin_power` VALUES (17, '文件管理', '0', '', '', '', '0', 'layui-icon layui-icon-camera', 2, '2021-03-19 18:56:23', '2021-03-25 19:15:08', 1);
-INSERT INTO `admin_power` VALUES (18, '图片上传', '1', 'admin:file:main', '/admin/file', '_iframe', '17', 'layui-icon layui-icon-camera', 5, '2021-03-19 18:57:19', '2021-03-25 19:15:13', 1);
-INSERT INTO `admin_power` VALUES (21, '权限增加', '2', 'admin:power:add', '', '', '4', 'layui-icon layui-icon-add-circle', 1, '2021-03-22 19:43:52', '2021-03-25 19:15:22', 1);
-INSERT INTO `admin_power` VALUES (22, '用户增加', '2', 'admin:user:add', '', '', '3', 'layui-icon layui-icon-add-circle', 1, '2021-03-22 19:45:40', '2021-03-25 19:15:17', 1);
-INSERT INTO `admin_power` VALUES (23, '用户编辑', '2', 'admin:user:edit', '', '', '3', 'layui-icon layui-icon-rate', 2, '2021-03-22 19:46:15', '2021-03-25 19:15:18', 1);
-INSERT INTO `admin_power` VALUES (24, '用户删除', '2', 'admin:user:remove', '', '', '3', 'layui-icon None', 3, '2021-03-22 19:46:51', '2021-03-25 19:15:18', 1);
-INSERT INTO `admin_power` VALUES (25, '权限编辑', '2', 'admin:power:edit', '', '', '4', 'layui-icon layui-icon-edit', 2, '2021-03-22 19:47:36', '2021-03-25 19:15:22', 1);
-INSERT INTO `admin_power` VALUES (26, '用户删除', '2', 'admin:power:remove', '', '', '4', 'layui-icon layui-icon-delete', 3, '2021-03-22 19:48:17', '2021-03-25 19:15:23', 1);
-INSERT INTO `admin_power` VALUES (27, '用户增加', '2', 'admin:role:add', '', '', '9', 'layui-icon layui-icon-add-circle', 1, '2021-03-22 19:49:09', '2021-03-25 19:15:24', 1);
-INSERT INTO `admin_power` VALUES (28, '角色编辑', '2', 'admin:role:edit', '', '', '9', 'layui-icon layui-icon-edit', 2, '2021-03-22 19:49:41', '2021-03-25 19:15:25', 1);
-INSERT INTO `admin_power` VALUES (29, '角色删除', '2', 'admin:role:remove', '', '', '9', 'layui-icon layui-icon-delete', 3, '2021-03-22 19:50:15', '2021-03-25 19:15:26', 1);
-INSERT INTO `admin_power` VALUES (30, '角色授权', '2', 'admin:role:power', '', '', '9', 'layui-icon layui-icon-component', 4, '2021-03-22 19:50:54', '2021-03-25 19:15:26', 1);
-INSERT INTO `admin_power` VALUES (31, '图片增加', '2', 'admin:file:add', '', '', '18', 'layui-icon layui-icon-add-circle', 1, '2021-03-22 19:58:05', '2021-03-25 19:15:28', 1);
-INSERT INTO `admin_power` VALUES (32, '图片删除', '2', 'admin:file:delete', '', '', '18', 'layui-icon layui-icon-delete', 2, '2021-03-22 19:58:45', '2021-03-25 19:15:29', 1);
-INSERT INTO `admin_power` VALUES (44, '数据字典', '1', 'admin:dict:main', '/admin/dict', '_iframe', '1', 'layui-icon layui-icon-console', 6, '2021-04-16 13:59:49', '2021-04-16 13:59:49', 1);
-INSERT INTO `admin_power` VALUES (45, '字典增加', '2', 'admin:dict:add', '', '', '44', 'layui-icon ', 1, '2021-04-16 14:00:59', '2021-04-16 14:00:59', 1);
-INSERT INTO `admin_power` VALUES (46, '字典修改', '2', 'admin:dict:edit', '', '', '44', 'layui-icon ', 2, '2021-04-16 14:01:33', '2021-04-16 14:01:33', 1);
-INSERT INTO `admin_power` VALUES (47, '字典删除', '2', 'admin:dict:remove', '', '', '44', 'layui-icon ', 3, '2021-04-16 14:02:06', '2021-04-16 14:02:06', 1);
-INSERT INTO `admin_power` VALUES (48, '部门管理', '1', 'admin:dept:main', '/dept', '_iframe', '1', 'layui-icon layui-icon-group', 3, '2021-06-01 16:22:11', '2021-07-07 13:49:39', 1);
-INSERT INTO `admin_power` VALUES (49, '部门增加', '2', 'admin:dept:add', '', '', '48', 'layui-icon None', 1, '2021-06-01 17:35:52', '2021-06-01 17:36:15', 1);
-INSERT INTO `admin_power` VALUES (50, '部门编辑', '2', 'admin:dept:edit', '', '', '48', 'layui-icon ', 2, '2021-06-01 17:36:41', '2021-06-01 17:36:41', 1);
-INSERT INTO `admin_power` VALUES (51, '部门删除', '2', 'admin:dept:remove', '', '', '48', 'layui-icon None', 3, '2021-06-01 17:37:15', '2021-06-01 17:37:26', 1);
-INSERT INTO `admin_power` VALUES (52, '定时任务', '0', '', '', '', '0', 'layui-icon layui-icon-log', 3, '2021-06-22 21:09:01', '2021-06-22 21:09:01', 1);
-INSERT INTO `admin_power` VALUES (53, '任务管理', '1', 'admin:task:main', '/admin/task', '_iframe', '52', 'layui-icon ', 1, '2021-06-22 21:15:00', '2021-06-22 21:15:00', 1);
-INSERT INTO `admin_power` VALUES (54, '任务增加', '2', 'admin:task:add', '', '', '53', 'layui-icon ', 1, '2021-06-22 22:20:54', '2021-06-22 22:20:54', 1);
-INSERT INTO `admin_power` VALUES (55, '任务修改', '2', 'admin:task:edit', '', '', '53', 'layui-icon ', 2, '2021-06-22 22:21:34', '2021-06-22 22:21:34', 1);
-INSERT INTO `admin_power` VALUES (56, '任务删除', '2', 'admin:task:remove', '', '', '53', 'layui-icon ', 3, '2021-06-22 22:22:18', '2021-06-22 22:22:18', 1);
-INSERT INTO `admin_power` VALUES (57, '邮件管理', '1', 'admin:mail:main', '/admin/mail', '_iframe', '1', 'layui-icon layui-icon layui-icon-release', 7, '2022-10-11 11:21:05', '2022-10-11 11:21:22', 1);
-INSERT INTO `admin_power` VALUES (58, '邮件发送', '2', 'admin:mail:add', '', '', '57', 'layui-icon layui-icon-ok-circle', 1, '2022-10-11 11:22:26', '2022-10-11 11:22:26', 1);
-INSERT INTO `admin_power` VALUES (59, '邮件删除', '2', 'admin:mail:remove', '', '', '57', 'layui-icon layui-icon layui-icon-close', 2, '2022-10-11 11:23:06', '2022-10-11 11:23:18', 1);
+-- 正在导出表 pearadmin.admin_power 的数据:~35 rows (大约)
+/*!40000 ALTER TABLE `admin_power` DISABLE KEYS */;
+REPLACE INTO `admin_power` (`id`, `name`, `type`, `code`, `url`, `open_type`, `parent_id`, `icon`, `sort`, `create_time`, `update_time`, `enable`) VALUES
+ (1, '系统管理', '0', '', NULL, NULL, '0', 'layui-icon layui-icon-set-fill', 1, NULL, NULL, 1),
+ (3, '用户管理', '1', 'admin:user:main', '/admin/user/', '_iframe', '1', 'layui-icon layui-icon layui-icon layui-icon layui-icon-rate', 1, NULL, NULL, 1),
+ (4, '权限管理', '1', 'admin:power:main', '/admin/power/', '_iframe', '1', NULL, 2, NULL, NULL, 1),
+ (9, '角色管理', '1', 'admin:role:main', '/admin/role', '_iframe', '1', 'layui-icon layui-icon-username', 2, '2021-03-16 22:24:58', '2021-03-25 19:15:24', 1),
+ (12, '系统监控', '1', 'admin:monitor:main', '/admin/monitor', '_iframe', '1', 'layui-icon layui-icon-vercode', 5, '2021-03-18 22:05:19', '2021-03-25 19:15:27', 1),
+ (13, '日志管理', '1', 'admin:log:main', '/admin/log', '_iframe', '1', 'layui-icon layui-icon-read', 4, '2021-03-18 22:37:10', '2021-06-03 11:06:25', 1),
+ (17, '文件管理', '0', '', '', '', '0', 'layui-icon layui-icon-camera', 2, '2021-03-19 18:56:23', '2021-03-25 19:15:08', 1),
+ (18, '图片上传', '1', 'admin:file:main', '/admin/file', '_iframe', '17', 'layui-icon layui-icon-camera', 5, '2021-03-19 18:57:19', '2021-03-25 19:15:13', 1),
+ (21, '权限增加', '2', 'admin:power:add', '', '', '4', 'layui-icon layui-icon-add-circle', 1, '2021-03-22 19:43:52', '2021-03-25 19:15:22', 1),
+ (22, '用户增加', '2', 'admin:user:add', '', '', '3', 'layui-icon layui-icon-add-circle', 1, '2021-03-22 19:45:40', '2021-03-25 19:15:17', 1),
+ (23, '用户编辑', '2', 'admin:user:edit', '', '', '3', 'layui-icon layui-icon-rate', 2, '2021-03-22 19:46:15', '2021-03-25 19:15:18', 1),
+ (24, '用户删除', '2', 'admin:user:remove', '', '', '3', 'layui-icon None', 3, '2021-03-22 19:46:51', '2021-03-25 19:15:18', 1),
+ (25, '权限编辑', '2', 'admin:power:edit', '', '', '4', 'layui-icon layui-icon-edit', 2, '2021-03-22 19:47:36', '2021-03-25 19:15:22', 1),
+ (26, '用户删除', '2', 'admin:power:remove', '', '', '4', 'layui-icon layui-icon-delete', 3, '2021-03-22 19:48:17', '2021-03-25 19:15:23', 1),
+ (27, '用户增加', '2', 'admin:role:add', '', '', '9', 'layui-icon layui-icon-add-circle', 1, '2021-03-22 19:49:09', '2021-03-25 19:15:24', 1),
+ (28, '角色编辑', '2', 'admin:role:edit', '', '', '9', 'layui-icon layui-icon-edit', 2, '2021-03-22 19:49:41', '2021-03-25 19:15:25', 1),
+ (29, '角色删除', '2', 'admin:role:remove', '', '', '9', 'layui-icon layui-icon-delete', 3, '2021-03-22 19:50:15', '2021-03-25 19:15:26', 1),
+ (30, '角色授权', '2', 'admin:role:power', '', '', '9', 'layui-icon layui-icon-component', 4, '2021-03-22 19:50:54', '2021-03-25 19:15:26', 1),
+ (31, '图片增加', '2', 'admin:file:add', '', '', '18', 'layui-icon layui-icon-add-circle', 1, '2021-03-22 19:58:05', '2021-03-25 19:15:28', 1),
+ (32, '图片删除', '2', 'admin:file:delete', '', '', '18', 'layui-icon layui-icon-delete', 2, '2021-03-22 19:58:45', '2021-03-25 19:15:29', 1),
+ (44, '数据字典', '1', 'admin:dict:main', '/admin/dict', '_iframe', '1', 'layui-icon layui-icon-console', 6, '2021-04-16 13:59:49', '2021-04-16 13:59:49', 1),
+ (45, '字典增加', '2', 'admin:dict:add', '', '', '44', 'layui-icon ', 1, '2021-04-16 14:00:59', '2021-04-16 14:00:59', 1),
+ (46, '字典修改', '2', 'admin:dict:edit', '', '', '44', 'layui-icon ', 2, '2021-04-16 14:01:33', '2021-04-16 14:01:33', 1),
+ (47, '字典删除', '2', 'admin:dict:remove', '', '', '44', 'layui-icon ', 3, '2021-04-16 14:02:06', '2021-04-16 14:02:06', 1),
+ (48, '部门管理', '1', 'admin:dept:main', '/dept', '_iframe', '1', 'layui-icon layui-icon-group', 3, '2021-06-01 16:22:11', '2021-07-07 13:49:39', 1),
+ (49, '部门增加', '2', 'admin:dept:add', '', '', '48', 'layui-icon None', 1, '2021-06-01 17:35:52', '2021-06-01 17:36:15', 1),
+ (50, '部门编辑', '2', 'admin:dept:edit', '', '', '48', 'layui-icon ', 2, '2021-06-01 17:36:41', '2021-06-01 17:36:41', 1),
+ (51, '部门删除', '2', 'admin:dept:remove', '', '', '48', 'layui-icon None', 3, '2021-06-01 17:37:15', '2021-06-01 17:37:26', 1),
+ (52, '定时任务', '0', '', '', '', '0', 'layui-icon layui-icon-log', 3, '2021-06-22 21:09:01', '2021-06-22 21:09:01', 1),
+ (53, '任务管理', '1', 'admin:task:main', '/admin/task', '_iframe', '52', 'layui-icon ', 1, '2021-06-22 21:15:00', '2021-06-22 21:15:00', 1),
+ (54, '任务增加', '2', 'admin:task:add', '', '', '53', 'layui-icon ', 1, '2021-06-22 22:20:54', '2021-06-22 22:20:54', 1),
+ (55, '任务修改', '2', 'admin:task:edit', '', '', '53', 'layui-icon ', 2, '2021-06-22 22:21:34', '2021-06-22 22:21:34', 1),
+ (56, '任务删除', '2', 'admin:task:remove', '', '', '53', 'layui-icon ', 3, '2021-06-22 22:22:18', '2021-06-22 22:22:18', 1),
+ (57, '拓展插件', '0', '', '', '', '0', 'layui-icon layui-icon layui-icon-senior', 2, '2022-12-18 12:28:19', '2022-12-18 12:30:25', 1),
+ (58, '插件管理', '1', 'admin:plugin:main', '/plugin', '_iframe', '57', 'layui-icon layui-icon layui-icon layui-icon ', 1, '2022-12-18 12:30:13', '2022-12-18 13:57:20', 1),
+ (59, '启禁插件', '2', 'admin:plugin:enable', '', '', '58', 'layui-icon ', 1, '2022-12-18 13:25:37', '2022-12-18 13:25:37', 1),
+ (60, '删除插件', '2', 'admin:plugin:remove', '', '', '58', 'layui-icon layui-icon ', 2, '2022-12-18 13:26:30', '2022-12-18 13:27:17', 1),
+ (61, '邮件管理', '1', 'admin:mail:main', '/admin/mail', '_iframe', '1', 'layui-icon layui-icon layui-icon-release', 7, '2022-10-11 11:21:05', '2022-10-11 11:21:22', 1),
+ (62, '邮件发送', '2', 'admin:mail:add', '', '', '61', 'layui-icon layui-icon layui-icon-ok-circle', 1, '2022-10-11 11:22:26', '2022-12-25 10:48:11', 1),
+ (63, '邮件删除', '2', 'admin:mail:remove', '', '', '61', 'layui-icon layui-icon layui-icon layui-icon-close', 2, '2022-10-11 11:23:06', '2022-12-25 10:48:22', 1);
+/*!40000 ALTER TABLE `admin_power` ENABLE KEYS */;
--- ----------------------------
--- Table structure for admin_role
--- ----------------------------
-DROP TABLE IF EXISTS `admin_role`;
-CREATE TABLE `admin_role` (
+-- 导出 表 pearadmin.admin_role 结构
+CREATE TABLE IF NOT EXISTS `admin_role` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '角色ID',
- `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '角色名称',
- `code` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '角色标识',
- `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '备注',
- `details` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '详情',
- `sort` int(11) NULL DEFAULT NULL COMMENT '排序',
- `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
- `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间',
- `enable` int(11) NULL DEFAULT NULL COMMENT '是否启用',
+ `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '角色名称',
+ `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '角色标识',
+ `remark` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '备注',
+ `details` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '详情',
+ `sort` int(11) DEFAULT NULL COMMENT '排序',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+ `enable` int(11) DEFAULT NULL COMMENT '是否启用',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;
--- ----------------------------
--- Records of admin_role
--- ----------------------------
-INSERT INTO `admin_role` VALUES (1, '管理员', 'admin', NULL, '管理员', 1, NULL, NULL, 1);
-INSERT INTO `admin_role` VALUES (2, '普通用户', 'common', NULL, '只有查看,没有增删改权限', 2, '2021-03-22 20:02:38', '2021-04-01 22:29:56', 1);
+-- 正在导出表 pearadmin.admin_role 的数据:~2 rows (大约)
+/*!40000 ALTER TABLE `admin_role` DISABLE KEYS */;
+REPLACE INTO `admin_role` (`id`, `name`, `code`, `remark`, `details`, `sort`, `create_time`, `update_time`, `enable`) VALUES
+ (1, '管理员', 'admin', NULL, '管理员', 1, NULL, NULL, 1);
+/*!40000 ALTER TABLE `admin_role` ENABLE KEYS */;
--- ----------------------------
--- Table structure for admin_role_power
--- ----------------------------
-DROP TABLE IF EXISTS `admin_role_power`;
-CREATE TABLE `admin_role_power` (
+-- 导出 表 pearadmin.admin_role_power 结构
+CREATE TABLE IF NOT EXISTS `admin_role_power` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '标识',
- `power_id` int(11) NULL DEFAULT NULL COMMENT '用户编号',
- `role_id` int(11) NULL DEFAULT NULL COMMENT '角色编号',
+ `power_id` int(11) DEFAULT NULL COMMENT '用户编号',
+ `role_id` int(11) DEFAULT NULL COMMENT '角色编号',
PRIMARY KEY (`id`) USING BTREE,
- INDEX `power_id`(`power_id`) USING BTREE,
- INDEX `role_id`(`role_id`) USING BTREE,
- CONSTRAINT `admin_role_power_ibfk_1` FOREIGN KEY (`power_id`) REFERENCES `admin_power` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
- CONSTRAINT `admin_role_power_ibfk_2` FOREIGN KEY (`role_id`) REFERENCES `admin_role` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 367 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
+ KEY `power_id` (`power_id`) USING BTREE,
+ KEY `role_id` (`role_id`) USING BTREE,
+ CONSTRAINT `admin_role_power_ibfk_1` FOREIGN KEY (`power_id`) REFERENCES `admin_power` (`id`),
+ CONSTRAINT `admin_role_power_ibfk_2` FOREIGN KEY (`role_id`) REFERENCES `admin_role` (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=378 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;
--- ----------------------------
--- Records of admin_role_power
--- ----------------------------
-INSERT INTO `admin_role_power` VALUES (265, 1, 2);
-INSERT INTO `admin_role_power` VALUES (266, 3, 2);
-INSERT INTO `admin_role_power` VALUES (267, 4, 2);
-INSERT INTO `admin_role_power` VALUES (268, 9, 2);
-INSERT INTO `admin_role_power` VALUES (269, 12, 2);
-INSERT INTO `admin_role_power` VALUES (270, 13, 2);
-INSERT INTO `admin_role_power` VALUES (271, 17, 2);
-INSERT INTO `admin_role_power` VALUES (272, 18, 2);
-INSERT INTO `admin_role_power` VALUES (273, 44, 2);
-INSERT INTO `admin_role_power` VALUES (274, 48, 2);
-INSERT INTO `admin_role_power` VALUES (334, 1, 1);
-INSERT INTO `admin_role_power` VALUES (335, 3, 1);
-INSERT INTO `admin_role_power` VALUES (336, 4, 1);
-INSERT INTO `admin_role_power` VALUES (337, 9, 1);
-INSERT INTO `admin_role_power` VALUES (338, 12, 1);
-INSERT INTO `admin_role_power` VALUES (339, 13, 1);
-INSERT INTO `admin_role_power` VALUES (340, 17, 1);
-INSERT INTO `admin_role_power` VALUES (341, 18, 1);
-INSERT INTO `admin_role_power` VALUES (342, 21, 1);
-INSERT INTO `admin_role_power` VALUES (343, 22, 1);
-INSERT INTO `admin_role_power` VALUES (344, 23, 1);
-INSERT INTO `admin_role_power` VALUES (345, 24, 1);
-INSERT INTO `admin_role_power` VALUES (346, 25, 1);
-INSERT INTO `admin_role_power` VALUES (347, 26, 1);
-INSERT INTO `admin_role_power` VALUES (348, 27, 1);
-INSERT INTO `admin_role_power` VALUES (349, 28, 1);
-INSERT INTO `admin_role_power` VALUES (350, 29, 1);
-INSERT INTO `admin_role_power` VALUES (351, 30, 1);
-INSERT INTO `admin_role_power` VALUES (352, 31, 1);
-INSERT INTO `admin_role_power` VALUES (353, 32, 1);
-INSERT INTO `admin_role_power` VALUES (354, 44, 1);
-INSERT INTO `admin_role_power` VALUES (355, 45, 1);
-INSERT INTO `admin_role_power` VALUES (356, 46, 1);
-INSERT INTO `admin_role_power` VALUES (357, 47, 1);
-INSERT INTO `admin_role_power` VALUES (358, 48, 1);
-INSERT INTO `admin_role_power` VALUES (359, 49, 1);
-INSERT INTO `admin_role_power` VALUES (360, 50, 1);
-INSERT INTO `admin_role_power` VALUES (361, 51, 1);
-INSERT INTO `admin_role_power` VALUES (362, 52, 1);
-INSERT INTO `admin_role_power` VALUES (363, 53, 1);
-INSERT INTO `admin_role_power` VALUES (364, 54, 1);
-INSERT INTO `admin_role_power` VALUES (365, 55, 1);
-INSERT INTO `admin_role_power` VALUES (366, 56, 1);
-INSERT INTO `admin_role_power` VALUES (367, 57, 1);
-INSERT INTO `admin_role_power` VALUES (368, 58, 1);
-INSERT INTO `admin_role_power` VALUES (369, 59, 1);
+-- 正在导出表 pearadmin.admin_role_power 的数据:~42 rows (大约)
+/*!40000 ALTER TABLE `admin_role_power` DISABLE KEYS */;
+REPLACE INTO `admin_role_power` (`id`, `power_id`, `role_id`) VALUES
+ (334, 1, 1),
+ (335, 3, 1),
+ (336, 4, 1),
+ (337, 9, 1),
+ (338, 12, 1),
+ (339, 13, 1),
+ (340, 17, 1),
+ (341, 18, 1),
+ (342, 21, 1),
+ (343, 22, 1),
+ (344, 23, 1),
+ (345, 24, 1),
+ (346, 25, 1),
+ (347, 26, 1),
+ (348, 27, 1),
+ (349, 28, 1),
+ (350, 29, 1),
+ (351, 30, 1),
+ (352, 31, 1),
+ (353, 32, 1),
+ (354, 44, 1),
+ (355, 45, 1),
+ (356, 46, 1),
+ (357, 47, 1),
+ (358, 48, 1),
+ (359, 49, 1),
+ (360, 50, 1),
+ (361, 51, 1),
+ (362, 52, 1),
+ (363, 53, 1),
+ (364, 54, 1),
+ (365, 55, 1),
+ (366, 56, 1),
+ (367, 57, 1),
+ (370, 58, 1),
+ (371, 61, 1),
+ (372, 62, 1),
+ (373, 63, 1),
+ (374, 62, 1),
+ (375, 63, 1),
+ (376, 59, 1),
+ (377, 60, 1);
+/*!40000 ALTER TABLE `admin_role_power` ENABLE KEYS */;
--- ----------------------------
--- Table structure for admin_user
--- ----------------------------
-DROP TABLE IF EXISTS `admin_user`;
-CREATE TABLE `admin_user` (
+-- 导出 表 pearadmin.admin_user 结构
+CREATE TABLE IF NOT EXISTS `admin_user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
- `username` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '用户名',
- `password_hash` varchar(128) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '哈希密码',
- `create_at` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
- `update_at` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
- `enable` int(11) NULL DEFAULT NULL COMMENT '启用',
- `realname` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '真实名字',
- `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '备注',
- `avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL COMMENT '头像',
- `dept_id` int(11) NULL DEFAULT NULL COMMENT '部门id',
+ `username` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户名',
+ `password_hash` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '哈希密码',
+ `create_at` datetime DEFAULT NULL COMMENT '创建时间',
+ `update_at` datetime DEFAULT NULL COMMENT '创建时间',
+ `enable` int(11) DEFAULT NULL COMMENT '启用',
+ `realname` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '真实名字',
+ `remark` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '备注',
+ `avatar` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '头像',
+ `dept_id` int(11) DEFAULT NULL COMMENT '部门id',
PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
+) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;
--- ----------------------------
--- Records of admin_user
--- ----------------------------
-INSERT INTO `admin_user` VALUES (1, 'admin', 'pbkdf2:sha256:150000$raM7mDSr$58fe069c3eac01531fc8af85e6fc200655dd2588090530084d182e6ec9d52c85', NULL, '2021-06-01 17:28:55', 1, '超级管理', '要是不能把握时机,就要终身蹭蹬,一事无成!', 'http://127.0.0.1:5000/_uploads/photos/1617291580000.jpg', 1);
-INSERT INTO `admin_user` VALUES (7, 'test', 'pbkdf2:sha256:150000$cRS8bYNh$adb57e64d929863cf159f924f74d0634f1fecc46dba749f1bfaca03da6d2e3ac', '2021-03-22 20:03:42', '2021-06-01 17:29:47', 1, '超级管理', '要是不能把握时机,就要终身蹭蹬,一事无成', '/static/admin/admin/images/avatar.jpg', 1);
-INSERT INTO `admin_user` VALUES (8, 'wind', 'pbkdf2:sha256:150000$skME1obT$6a2c20cd29f89d7d2f21d9e373a7e3445f70ebce3ef1c3a555e42a7d17170b37', '2021-06-01 17:30:39', '2021-06-01 17:30:52', 1, '风', NULL, '/static/admin/admin/images/avatar.jpg', 7);
+-- 正在导出表 pearadmin.admin_user 的数据:~2 rows (大约)
+/*!40000 ALTER TABLE `admin_user` DISABLE KEYS */;
+REPLACE INTO `admin_user` (`id`, `username`, `password_hash`, `create_at`, `update_at`, `enable`, `realname`, `remark`, `avatar`, `dept_id`) VALUES
+ (1, 'admin', 'pbkdf2:sha256:150000$raM7mDSr$58fe069c3eac01531fc8af85e6fc200655dd2588090530084d182e6ec9d52c85', NULL, '2022-12-25 20:09:08', 1, '我叫以赏', '要是不能把握时机,就要终身蹭蹬,一事无成!', '/_uploads/photos/1671970133000.jpg', 1);
+/*!40000 ALTER TABLE `admin_user` ENABLE KEYS */;
--- ----------------------------
--- Table structure for admin_user_role
--- ----------------------------
-DROP TABLE IF EXISTS `admin_user_role`;
-CREATE TABLE `admin_user_role` (
+-- 导出 表 pearadmin.admin_user_role 结构
+CREATE TABLE IF NOT EXISTS `admin_user_role` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '标识',
- `user_id` int(11) NULL DEFAULT NULL COMMENT '用户编号',
- `role_id` int(11) NULL DEFAULT NULL COMMENT '角色编号',
+ `user_id` int(11) DEFAULT NULL COMMENT '用户编号',
+ `role_id` int(11) DEFAULT NULL COMMENT '角色编号',
PRIMARY KEY (`id`) USING BTREE,
- INDEX `role_id`(`role_id`) USING BTREE,
- INDEX `user_id`(`user_id`) USING BTREE,
- CONSTRAINT `admin_user_role_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `admin_role` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
- CONSTRAINT `admin_user_role_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `admin_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
-) ENGINE = InnoDB AUTO_INCREMENT = 25 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
+ KEY `role_id` (`role_id`) USING BTREE,
+ KEY `user_id` (`user_id`) USING BTREE,
+ CONSTRAINT `admin_user_role_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `admin_role` (`id`),
+ CONSTRAINT `admin_user_role_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `admin_user` (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;
--- ----------------------------
--- Records of admin_user_role
--- ----------------------------
-INSERT INTO `admin_user_role` VALUES (21, 1, 1);
-INSERT INTO `admin_user_role` VALUES (22, 7, 2);
-INSERT INTO `admin_user_role` VALUES (24, 8, 2);
+-- 正在导出表 pearadmin.admin_user_role 的数据:~1 rows (大约)
+/*!40000 ALTER TABLE `admin_user_role` DISABLE KEYS */;
+REPLACE INTO `admin_user_role` (`id`, `user_id`, `role_id`) VALUES
+ (21, 1, 1);
+/*!40000 ALTER TABLE `admin_user_role` ENABLE KEYS */;
--- ----------------------------
--- Table structure for alembic_version
--- ----------------------------
-DROP TABLE IF EXISTS `alembic_version`;
-CREATE TABLE `alembic_version` (
- `version_num` varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
+-- 导出 表 pearadmin.alembic_version 结构
+CREATE TABLE IF NOT EXISTS `alembic_version` (
+ `version_num` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`version_num`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=DYNAMIC;
+
+-- 正在导出表 pearadmin.alembic_version 的数据:~0 rows (大约)
+/*!40000 ALTER TABLE `alembic_version` DISABLE KEYS */;
+REPLACE INTO `alembic_version` (`version_num`) VALUES
+ ('7634e028e338');
+/*!40000 ALTER TABLE `alembic_version` ENABLE KEYS */;
+
+-- 导出 表 pearadmin.apscheduler_jobs 结构
+CREATE TABLE IF NOT EXISTS `apscheduler_jobs` (
+ `id` varchar(191) COLLATE utf8_unicode_ci NOT NULL,
+ `next_run_time` double DEFAULT NULL,
+ `job_state` blob NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `ix_apscheduler_jobs_next_run_time` (`next_run_time`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--- ----------------------------
--- Records of alembic_version
--- ----------------------------
-INSERT INTO `alembic_version` VALUES ('7634e028e338');
+-- 正在导出表 pearadmin.apscheduler_jobs 的数据:0 rows
+/*!40000 ALTER TABLE `apscheduler_jobs` DISABLE KEYS */;
+/*!40000 ALTER TABLE `apscheduler_jobs` ENABLE KEYS */;
-SET FOREIGN_KEY_CHECKS = 1;
+/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */;
+/*!40014 SET FOREIGN_KEY_CHECKS=IF(@OLD_FOREIGN_KEY_CHECKS IS NULL, 1, @OLD_FOREIGN_KEY_CHECKS) */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
diff --git a/plugins/helloworld/__init__.json b/plugins/helloworld/__init__.json
new file mode 100644
index 0000000..110f9f7
--- /dev/null
+++ b/plugins/helloworld/__init__.json
@@ -0,0 +1,9 @@
+{
+ "plugin_name": "Hello World",
+ "plugin_version": "1.0.0.1",
+ "plugin_description": "一个测试的插件。",
+ "developer_name": "Yishang",
+ "developer_website": "https://lovepikachu.top",
+ "developer_email": "422880152@qq.com",
+ "developer_phone": "-"
+}
\ No newline at end of file
diff --git a/plugins/helloworld/__init__.py b/plugins/helloworld/__init__.py
new file mode 100644
index 0000000..d81f7a6
--- /dev/null
+++ b/plugins/helloworld/__init__.py
@@ -0,0 +1,13 @@
+"""
+初始化插件
+"""
+
+
+def event_enable():
+ """当插件被启用时会调用此处"""
+ print("启用插件")
+
+
+def event_disable():
+ """当插件被禁用时会调用此处"""
+ print("禁用插件")
diff --git a/plugins/helloworld/main.py b/plugins/helloworld/main.py
new file mode 100644
index 0000000..e51d993
--- /dev/null
+++ b/plugins/helloworld/main.py
@@ -0,0 +1,22 @@
+from applications.dev import *
+
+from flask import render_template, Blueprint
+
+import os
+import psutil
+
+# 获取插件所在的目录(结尾没有分割符号)
+dir_path = os.path.dirname(__file__).replace("\\", "/")
+folder_name = dir_path[dir_path.rfind("/") + 1:] # 插件文件夹名称
+
+# 创建蓝图
+helloworld_blueprint = Blueprint('hello_world', __name__, template_folder='templates', static_folder="static",
+ url_prefix="/hello_world")
+
+@helloworld_blueprint.route("/")
+def index():
+ return render_template("helloworld_index.html")
+
+
+# 绑定蓝图
+app.register_blueprint(helloworld_blueprint)
diff --git a/plugins/helloworld/templates/helloworld_index.html b/plugins/helloworld/templates/helloworld_index.html
new file mode 100644
index 0000000..c062ec2
--- /dev/null
+++ b/plugins/helloworld/templates/helloworld_index.html
@@ -0,0 +1 @@
+Test!
\ No newline at end of file
diff --git a/requirement/dev.txt b/requirement/dev.txt
index 901ad35..4646bfb 100644
--- a/requirement/dev.txt
+++ b/requirement/dev.txt
@@ -12,4 +12,5 @@ Flask-Mail
sqlparse
Pillow
python-dotenv
-webargs
\ No newline at end of file
+webargs
+gevent
\ No newline at end of file
diff --git a/start.py b/start.py
new file mode 100644
index 0000000..21f0f9e
--- /dev/null
+++ b/start.py
@@ -0,0 +1,10 @@
+import os
+import sys
+import subprocess
+
+# 反复执行程序
+env = os.environ.copy()
+env['pearppid'] = str(os.getpid())
+while True:
+ if subprocess.call(args=[sys.executable] + sys.argv[1:], env=env) == 1:
+ break
\ No newline at end of file
diff --git a/static/admin/admin/css/admin.css b/static/admin/admin/css/admin.css
index 60703fe..6041101 100644
--- a/static/admin/admin/css/admin.css
+++ b/static/admin/admin/css/admin.css
@@ -108,7 +108,7 @@ body,
.pear-admin .layui-logo .title {
font-size: 21px;
font-weight: 550;
- color: #5FB878;
+ color: #2D8CF0;
position: relative;
top: 5px;
margin-left: 5px;
@@ -217,7 +217,7 @@ body,
.pear-admin .layui-header .layui-nav .layui-nav-bar {
top: 0px !important;
height: 2px !important;
- background-color: #5FB878;
+ background-color: #2D8CF0;
}
.pear-admin .layui-header .layui-nav .layui-this:after {
@@ -235,7 +235,7 @@ body,
z-index: 400000;
bottom: 30px;
right: 30px;
- background-color: #5FB878 !important;
+ background-color: #2D8CF0 !important;
height: 50px;
line-height: 50px;
text-align: center;
@@ -447,7 +447,7 @@ body,
padding: 4px;
top: -5px;
left: -5px;
- border: #5FB878 2px solid;
+ border: #2D8CF0 2px solid;
opacity: 1;
border-radius: 4px;
}
@@ -545,12 +545,12 @@ body,
}
.menu-search-list li:hover {
- background-color: #5FB878;
+ background-color: #2D8CF0;
color: white;
}
.menu-search-list li.this {
- background-color: #5FB878;
+ background-color: #2D8CF0;
color: white;
}
diff --git a/static/admin/admin/css/loader.css b/static/admin/admin/css/loader.css
index 0f6d247..c5550f2 100644
--- a/static/admin/admin/css/loader.css
+++ b/static/admin/admin/css/loader.css
@@ -31,7 +31,7 @@
width: 50px;
height: 50px;
border-radius: 3px;
- background-color: #5FB878;
+ background-color: #2D8CF0;
position: absolute;
top: 0;
left: 0;
diff --git a/static/admin/admin/css/other/console2.css b/static/admin/admin/css/other/console2.css
index 4aaa7e5..e29ad41 100644
--- a/static/admin/admin/css/other/console2.css
+++ b/static/admin/admin/css/other/console2.css
@@ -118,4 +118,4 @@
margin-top: -30px;
position: absolute;
display: inline-block;
-}
+}
\ No newline at end of file
diff --git a/static/admin/admin/css/other/login.css b/static/admin/admin/css/other/login.css
index 938f05f..db0af3f 100644
--- a/static/admin/admin/css/other/login.css
+++ b/static/admin/admin/css/other/login.css
@@ -9,13 +9,13 @@
height: 44px !important;
line-height: 44px !important;
font-size: 16px !important;
- background-color: #5FB878 !important;
+ background-color: #2D8CF0 !important;
font-weight: 550 !important;
}
.layui-form-checked[lay-skin=primary] i {
- border-color: #5FB878 !important;
- background-color: #5FB878 !important;
+ border-color: #2D8CF0 !important;
+ background-color: #2D8CF0 !important;
color: #fff !important;
}
@@ -37,7 +37,7 @@
}
.layui-input:focus {
- box-shadow: 0px 0px 2px 1px #5FB878 !important;
+ box-shadow: 0px 0px 2px 1px #2D8CF0 !important;
}
.layui-form-danger:focus{
@@ -55,7 +55,7 @@
font-size: 30px !important;
font-weight: 550 !important;
margin-left: 20px !important;
- color: #5FB878 !important;
+ color: #2D8CF0 !important;
display: inline-block !important;
height: 60px !important;
line-height: 60px !important;
@@ -90,6 +90,7 @@ body {
float: right;
height: 42px;
border: #e6e6e6 1px solid;
+ cursor: pointer;
}
@media (max-width:768px){
diff --git a/static/admin/admin/css/other/user.css b/static/admin/admin/css/other/user.css
index 63ec985..2a93a06 100644
--- a/static/admin/admin/css/other/user.css
+++ b/static/admin/admin/css/other/user.css
@@ -32,7 +32,7 @@
box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.15);
}
.button-primary{
- background-color: #5FB878;
+ background-color: #2D8CF0;
color: white;
}
.button-default{
diff --git a/static/admin/component/code/css/style.css b/static/admin/component/code/css/style.css
index 5d460a5..750ba5c 100644
--- a/static/admin/component/code/css/style.css
+++ b/static/admin/component/code/css/style.css
@@ -3,7 +3,7 @@ html,body{background-color: whitesmoke}
.content{min-height: 796px;}
.nav{text-align: center;}
.nav button{margin-bottom: 3px;width: 100%;margin-top: 3px;margin-bottom: 3px;border-radius: 1px;}
-.nav button:hover{background-color: #5FB878;border: 1px solid #5FB878;color: white;}
+.nav button:hover{background-color: #2D8CF0;border: 1px solid #2D8CF0;color: white;}
.layui-card-body .layui-btn+.layui-btn{margin-left: 0px;}
.code-show{min-height: 454px;}
.js-show{min-height: 200px;}
\ No newline at end of file
diff --git a/static/admin/component/layui/css/layui.css b/static/admin/component/layui/css/layui.css
index d635d8f..d8e39b7 100644
--- a/static/admin/component/layui/css/layui.css
+++ b/static/admin/component/layui/css/layui.css
@@ -1 +1 @@
-.layui-inline,img{display:inline-block;vertical-align:middle}h1,h2,h3,h4,h5,h6{font-weight:400}a,body{color:#333}.layui-edge,.layui-header,.layui-inline,.layui-main{position:relative}.layui-edge,hr{height:0;overflow:hidden}.layui-layout-body,.layui-side,.layui-side-scroll{overflow-x:hidden}.layui-edge,.layui-elip,hr{overflow:hidden}.layui-btn,.layui-edge,.layui-inline,img{vertical-align:middle}.layui-btn,.layui-disabled,.layui-icon,.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-elip,.layui-form-checkbox span,.layui-form-pane .layui-form-label{text-overflow:ellipsis;white-space:nowrap}blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}a:active,a:hover{outline:0}img{border:none}li{list-style:none}table{border-collapse:collapse;border-spacing:0}h4,h5,h6{font-size:100%}button,input,optgroup,option,select,textarea{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;outline:0}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}body{line-height:1.6;color:rgba(0,0,0,.85);font:14px Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif}hr{line-height:0;margin:10px 0;padding:0;border:none!important;border-bottom:1px solid #eee!important;clear:both;background:0 0}a{text-decoration:none}a:hover{color:#777}a cite{font-style:normal;*cursor:pointer}.layui-border-box,.layui-border-box *{box-sizing:border-box}.layui-box,.layui-box *{box-sizing:content-box}.layui-clear{clear:both;*zoom:1}.layui-clear:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-inline{*display:inline;*zoom:1}.layui-btn,.layui-btn-group,.layui-edge{display:inline-block}.layui-inline-container>.layui-inline{margin-right:10px;margin-bottom:10px}.layui-edge{width:0;border-width:6px;border-style:dashed;border-color:transparent}.layui-edge-top{top:-4px;border-bottom-color:#999;border-bottom-style:solid}.layui-edge-right{border-left-color:#999;border-left-style:solid}.layui-edge-bottom{top:2px;border-top-color:#999;border-top-style:solid}.layui-edge-left{border-right-color:#999;border-right-style:solid}.layui-disabled,.layui-disabled:hover{color:#d2d2d2!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}.layui-show-v{visibility:visible!important}.layui-hide-v{visibility:hidden!important}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?t=270);src:url(../font/iconfont.eot?t=270#iefix) format('embedded-opentype'),url(../font/iconfont.woff2?t=270) format('woff2'),url(../font/iconfont.woff?t=270) format('woff'),url(../font/iconfont.ttf?t=270) format('truetype'),url(../font/iconfont.svg?t=270#layui-icon) format('svg')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-icon-eye:before{content:"\e695"}.layui-icon-eye-invisible:before{content:"\e696"}.layui-icon-backspace:before{content:"\e694"}.layui-icon-help-circle:before{content:"\e77c"}.layui-icon-tips-fill:before{content:"\eb2e"}.layui-icon-test:before{content:"\e692"}.layui-icon-clear:before{content:"\e788"}.layui-icon-keyboard:before{content:"\e693"}.layui-icon-heart-fill:before{content:"\e68f"}.layui-icon-light:before{content:"\e748"}.layui-icon-music:before{content:"\e690"}.layui-icon-time:before{content:"\e68d"}.layui-icon-ie:before{content:"\e7bb"}.layui-icon-firefox:before{content:"\e686"}.layui-icon-at:before{content:"\e687"}.layui-icon-bluetooth:before{content:"\e689"}.layui-icon-chrome:before{content:"\e68a"}.layui-icon-edge:before{content:"\e68b"}.layui-icon-heart:before{content:"\e68c"}.layui-icon-key:before{content:"\e683"}.layui-icon-android:before{content:"\e684"}.layui-icon-mike:before{content:"\e6dc"}.layui-icon-mute:before{content:"\e685"}.layui-icon-gift:before{content:"\e627"}.layui-icon-windows:before{content:"\e67f"}.layui-icon-ios:before{content:"\e680"}.layui-icon-logout:before{content:"\e682"}.layui-icon-wifi:before{content:"\e7e0"}.layui-icon-rss:before{content:"\e808"}.layui-icon-email:before{content:"\e618"}.layui-icon-reduce-circle:before{content:"\e616"}.layui-icon-transfer:before{content:"\e691"}.layui-icon-service:before{content:"\e626"}.layui-icon-addition:before{content:"\e624"}.layui-icon-subtraction:before{content:"\e67e"}.layui-icon-slider:before{content:"\e714"}.layui-icon-print:before{content:"\e66d"}.layui-icon-export:before{content:"\e67d"}.layui-icon-cols:before{content:"\e610"}.layui-icon-screen-full:before{content:"\e622"}.layui-icon-screen-restore:before{content:"\e758"}.layui-icon-rate-half:before{content:"\e6c9"}.layui-icon-rate-solid:before{content:"\e67a"}.layui-icon-rate:before{content:"\e67b"}.layui-icon-cellphone:before{content:"\e678"}.layui-icon-vercode:before{content:"\e679"}.layui-icon-login-weibo:before{content:"\e675"}.layui-icon-login-qq:before{content:"\e676"}.layui-icon-login-wechat:before{content:"\e677"}.layui-icon-username:before{content:"\e66f"}.layui-icon-password:before{content:"\e673"}.layui-icon-refresh-3:before{content:"\e9aa"}.layui-icon-auz:before{content:"\e672"}.layui-icon-shrink-right:before{content:"\e668"}.layui-icon-spread-left:before{content:"\e66b"}.layui-icon-snowflake:before{content:"\e6b1"}.layui-icon-tips:before{content:"\e702"}.layui-icon-note:before{content:"\e66e"}.layui-icon-senior:before{content:"\e674"}.layui-icon-refresh-1:before{content:"\e666"}.layui-icon-refresh:before{content:"\e669"}.layui-icon-flag:before{content:"\e66c"}.layui-icon-theme:before{content:"\e66a"}.layui-icon-notice:before{content:"\e667"}.layui-icon-console:before{content:"\e665"}.layui-icon-website:before{content:"\e7ae"}.layui-icon-face-surprised:before{content:"\e664"}.layui-icon-set:before{content:"\e716"}.layui-icon-template:before{content:"\e663"}.layui-icon-app:before{content:"\e653"}.layui-icon-template-1:before{content:"\e656"}.layui-icon-home:before{content:"\e68e"}.layui-icon-female:before{content:"\e661"}.layui-icon-male:before{content:"\e662"}.layui-icon-tread:before{content:"\e6c5"}.layui-icon-praise:before{content:"\e6c6"}.layui-icon-rmb:before{content:"\e65e"}.layui-icon-more:before{content:"\e65f"}.layui-icon-camera:before{content:"\e660"}.layui-icon-cart-simple:before{content:"\e698"}.layui-icon-face-cry:before{content:"\e69c"}.layui-icon-face-smile:before{content:"\e6af"}.layui-icon-survey:before{content:"\e6b2"}.layui-icon-read:before{content:"\e705"}.layui-icon-location:before{content:"\e715"}.layui-icon-dollar:before{content:"\e659"}.layui-icon-diamond:before{content:"\e735"}.layui-icon-return:before{content:"\e65c"}.layui-icon-camera-fill:before{content:"\e65d"}.layui-icon-fire:before{content:"\e756"}.layui-icon-more-vertical:before{content:"\e671"}.layui-icon-cart:before{content:"\e657"}.layui-icon-star-fill:before{content:"\e658"}.layui-icon-prev:before{content:"\e65a"}.layui-icon-next:before{content:"\e65b"}.layui-icon-upload:before{content:"\e67c"}.layui-icon-upload-drag:before{content:"\e681"}.layui-icon-user:before{content:"\e770"}.layui-icon-file-b:before{content:"\e655"}.layui-icon-component:before{content:"\e857"}.layui-icon-find-fill:before{content:"\e670"}.layui-icon-loading:before{content:"\e63d"}.layui-icon-loading-1:before{content:"\e63e"}.layui-icon-add-1:before{content:"\e654"}.layui-icon-pause:before{content:"\e651"}.layui-icon-play:before{content:"\e652"}.layui-icon-video:before{content:"\e6ed"}.layui-icon-headset:before{content:"\e6fc"}.layui-icon-voice:before{content:"\e688"}.layui-icon-speaker:before{content:"\e645"}.layui-icon-fonts-del:before{content:"\e64f"}.layui-icon-fonts-html:before{content:"\e64b"}.layui-icon-fonts-code:before{content:"\e64e"}.layui-icon-fonts-strong:before{content:"\e62b"}.layui-icon-unlink:before{content:"\e64d"}.layui-icon-picture:before{content:"\e64a"}.layui-icon-link:before{content:"\e64c"}.layui-icon-face-smile-b:before{content:"\e650"}.layui-icon-align-center:before{content:"\e647"}.layui-icon-align-right:before{content:"\e648"}.layui-icon-align-left:before{content:"\e649"}.layui-icon-fonts-u:before{content:"\e646"}.layui-icon-fonts-i:before{content:"\e644"}.layui-icon-tabs:before{content:"\e62a"}.layui-icon-circle:before{content:"\e63f"}.layui-icon-radio:before{content:"\e643"}.layui-icon-share:before{content:"\e641"}.layui-icon-edit:before{content:"\e642"}.layui-icon-delete:before{content:"\e640"}.layui-icon-engine:before{content:"\e628"}.layui-icon-chart-screen:before{content:"\e629"}.layui-icon-chart:before{content:"\e62c"}.layui-icon-table:before{content:"\e62d"}.layui-icon-tree:before{content:"\e62e"}.layui-icon-upload-circle:before{content:"\e62f"}.layui-icon-templeate-1:before{content:"\e630"}.layui-icon-util:before{content:"\e631"}.layui-icon-layouts:before{content:"\e632"}.layui-icon-prev-circle:before{content:"\e633"}.layui-icon-carousel:before{content:"\e634"}.layui-icon-code-circle:before{content:"\e635"}.layui-icon-water:before{content:"\e636"}.layui-icon-date:before{content:"\e637"}.layui-icon-layer:before{content:"\e638"}.layui-icon-fonts-clear:before{content:"\e639"}.layui-icon-dialogue:before{content:"\e63a"}.layui-icon-cellphone-fine:before{content:"\e63b"}.layui-icon-form:before{content:"\e63c"}.layui-icon-file:before{content:"\e621"}.layui-icon-triangle-r:before{content:"\e623"}.layui-icon-triangle-d:before{content:"\e625"}.layui-icon-set-sm:before{content:"\e620"}.layui-icon-add-circle:before{content:"\e61f"}.layui-icon-layim-download:before{content:"\e61e"}.layui-icon-layim-uploadfile:before{content:"\e61d"}.layui-icon-404:before{content:"\e61c"}.layui-icon-about:before{content:"\e60b"}.layui-icon-layim-theme:before{content:"\e61b"}.layui-icon-down:before{content:"\e61a"}.layui-icon-up:before{content:"\e619"}.layui-icon-circle-dot:before{content:"\e617"}.layui-icon-set-fill:before{content:"\e614"}.layui-icon-search:before{content:"\e615"}.layui-icon-friends:before{content:"\e612"}.layui-icon-group:before{content:"\e613"}.layui-icon-reply-fill:before{content:"\e611"}.layui-icon-menu-fill:before{content:"\e60f"}.layui-icon-face-smile-fine:before{content:"\e60c"}.layui-icon-picture-fine:before{content:"\e60d"}.layui-icon-log:before{content:"\e60e"}.layui-icon-list:before{content:"\e60a"}.layui-icon-release:before{content:"\e609"}.layui-icon-add-circle-fine:before{content:"\e608"}.layui-icon-ok:before{content:"\e605"}.layui-icon-help:before{content:"\e607"}.layui-icon-chat:before{content:"\e606"}.layui-icon-top:before{content:"\e604"}.layui-icon-right:before{content:"\e602"}.layui-icon-left:before{content:"\e603"}.layui-icon-star:before{content:"\e600"}.layui-icon-download-circle:before{content:"\e601"}.layui-icon-close:before{content:"\1006"}.layui-icon-close-fill:before{content:"\1007"}.layui-icon-ok-circle:before{content:"\1005"}.layui-main{width:1140px;margin:0 auto}.layui-header{z-index:1000;height:60px}.layui-header a:hover{transition:all .5s;-webkit-transition:all .5s}.layui-side{position:fixed;left:0;top:0;bottom:0;z-index:999;width:200px}.layui-side-scroll{position:relative;width:220px;height:100%}.layui-body{position:relative;left:200px;right:0;top:0;bottom:0;z-index:900;width:auto;box-sizing:border-box}.layui-layout-admin .layui-header{position:fixed;top:0;left:0;right:0;background-color:#23262E}.layui-layout-admin .layui-side{top:60px;width:200px;overflow-x:hidden}.layui-layout-admin .layui-body{position:absolute;top:60px;padding-bottom:44px}.layui-layout-admin .layui-main{width:auto;margin:0 15px}.layui-layout-admin .layui-footer{position:fixed;left:200px;right:0;bottom:0;z-index:990;height:44px;line-height:44px;padding:0 15px;box-shadow:-1px 0 4px rgb(0 0 0 / 12%);background-color:#FAFAFA}.layui-layout-admin .layui-logo{position:absolute;left:0;top:0;width:200px;height:100%;line-height:60px;text-align:center;color:#009688;font-size:16px;box-shadow:0 1px 2px 0 rgb(0 0 0 / 15%)}.layui-layout-admin .layui-header .layui-nav{background:0 0}.layui-layout-left{position:absolute!important;left:200px;top:0}.layui-layout-right{position:absolute!important;right:0;top:0}.layui-container{position:relative;margin:0 auto;padding:0 15px;box-sizing:border-box}.layui-fluid{position:relative;margin:0 auto;padding:0 15px}.layui-row:after,.layui-row:before{content:"";display:block;clear:both}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9,.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9,.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9,.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{position:relative;display:block;box-sizing:border-box}.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{float:left}.layui-col-xs1{width:8.33333333%}.layui-col-xs2{width:16.66666667%}.layui-col-xs3{width:25%}.layui-col-xs4{width:33.33333333%}.layui-col-xs5{width:41.66666667%}.layui-col-xs6{width:50%}.layui-col-xs7{width:58.33333333%}.layui-col-xs8{width:66.66666667%}.layui-col-xs9{width:75%}.layui-col-xs10{width:83.33333333%}.layui-col-xs11{width:91.66666667%}.layui-col-xs12{width:100%}.layui-col-xs-offset1{margin-left:8.33333333%}.layui-col-xs-offset2{margin-left:16.66666667%}.layui-col-xs-offset3{margin-left:25%}.layui-col-xs-offset4{margin-left:33.33333333%}.layui-col-xs-offset5{margin-left:41.66666667%}.layui-col-xs-offset6{margin-left:50%}.layui-col-xs-offset7{margin-left:58.33333333%}.layui-col-xs-offset8{margin-left:66.66666667%}.layui-col-xs-offset9{margin-left:75%}.layui-col-xs-offset10{margin-left:83.33333333%}.layui-col-xs-offset11{margin-left:91.66666667%}.layui-col-xs-offset12{margin-left:100%}@media screen and (max-width:768px){.layui-hide-xs{display:none!important}.layui-show-xs-block{display:block!important}.layui-show-xs-inline{display:inline!important}.layui-show-xs-inline-block{display:inline-block!important}}@media screen and (min-width:768px){.layui-container{width:750px}.layui-hide-sm{display:none!important}.layui-show-sm-block{display:block!important}.layui-show-sm-inline{display:inline!important}.layui-show-sm-inline-block{display:inline-block!important}.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9{float:left}.layui-col-sm1{width:8.33333333%}.layui-col-sm2{width:16.66666667%}.layui-col-sm3{width:25%}.layui-col-sm4{width:33.33333333%}.layui-col-sm5{width:41.66666667%}.layui-col-sm6{width:50%}.layui-col-sm7{width:58.33333333%}.layui-col-sm8{width:66.66666667%}.layui-col-sm9{width:75%}.layui-col-sm10{width:83.33333333%}.layui-col-sm11{width:91.66666667%}.layui-col-sm12{width:100%}.layui-col-sm-offset1{margin-left:8.33333333%}.layui-col-sm-offset2{margin-left:16.66666667%}.layui-col-sm-offset3{margin-left:25%}.layui-col-sm-offset4{margin-left:33.33333333%}.layui-col-sm-offset5{margin-left:41.66666667%}.layui-col-sm-offset6{margin-left:50%}.layui-col-sm-offset7{margin-left:58.33333333%}.layui-col-sm-offset8{margin-left:66.66666667%}.layui-col-sm-offset9{margin-left:75%}.layui-col-sm-offset10{margin-left:83.33333333%}.layui-col-sm-offset11{margin-left:91.66666667%}.layui-col-sm-offset12{margin-left:100%}}@media screen and (min-width:992px){.layui-container{width:970px}.layui-hide-md{display:none!important}.layui-show-md-block{display:block!important}.layui-show-md-inline{display:inline!important}.layui-show-md-inline-block{display:inline-block!important}.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9{float:left}.layui-col-md1{width:8.33333333%}.layui-col-md2{width:16.66666667%}.layui-col-md3{width:25%}.layui-col-md4{width:33.33333333%}.layui-col-md5{width:41.66666667%}.layui-col-md6{width:50%}.layui-col-md7{width:58.33333333%}.layui-col-md8{width:66.66666667%}.layui-col-md9{width:75%}.layui-col-md10{width:83.33333333%}.layui-col-md11{width:91.66666667%}.layui-col-md12{width:100%}.layui-col-md-offset1{margin-left:8.33333333%}.layui-col-md-offset2{margin-left:16.66666667%}.layui-col-md-offset3{margin-left:25%}.layui-col-md-offset4{margin-left:33.33333333%}.layui-col-md-offset5{margin-left:41.66666667%}.layui-col-md-offset6{margin-left:50%}.layui-col-md-offset7{margin-left:58.33333333%}.layui-col-md-offset8{margin-left:66.66666667%}.layui-col-md-offset9{margin-left:75%}.layui-col-md-offset10{margin-left:83.33333333%}.layui-col-md-offset11{margin-left:91.66666667%}.layui-col-md-offset12{margin-left:100%}}@media screen and (min-width:1200px){.layui-container{width:1170px}.layui-hide-lg{display:none!important}.layui-show-lg-block{display:block!important}.layui-show-lg-inline{display:inline!important}.layui-show-lg-inline-block{display:inline-block!important}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9{float:left}.layui-col-lg1{width:8.33333333%}.layui-col-lg2{width:16.66666667%}.layui-col-lg3{width:25%}.layui-col-lg4{width:33.33333333%}.layui-col-lg5{width:41.66666667%}.layui-col-lg6{width:50%}.layui-col-lg7{width:58.33333333%}.layui-col-lg8{width:66.66666667%}.layui-col-lg9{width:75%}.layui-col-lg10{width:83.33333333%}.layui-col-lg11{width:91.66666667%}.layui-col-lg12{width:100%}.layui-col-lg-offset1{margin-left:8.33333333%}.layui-col-lg-offset2{margin-left:16.66666667%}.layui-col-lg-offset3{margin-left:25%}.layui-col-lg-offset4{margin-left:33.33333333%}.layui-col-lg-offset5{margin-left:41.66666667%}.layui-col-lg-offset6{margin-left:50%}.layui-col-lg-offset7{margin-left:58.33333333%}.layui-col-lg-offset8{margin-left:66.66666667%}.layui-col-lg-offset9{margin-left:75%}.layui-col-lg-offset10{margin-left:83.33333333%}.layui-col-lg-offset11{margin-left:91.66666667%}.layui-col-lg-offset12{margin-left:100%}}.layui-col-space1{margin:-.5px}.layui-col-space1>*{padding:.5px}.layui-col-space2{margin:-1px}.layui-col-space2>*{padding:1px}.layui-col-space4{margin:-2px}.layui-col-space4>*{padding:2px}.layui-col-space5{margin:-2.5px}.layui-col-space5>*{padding:2.5px}.layui-col-space6{margin:-3px}.layui-col-space6>*{padding:3px}.layui-col-space8{margin:-4px}.layui-col-space8>*{padding:4px}.layui-col-space10{margin:-5px}.layui-col-space10>*{padding:5px}.layui-col-space12{margin:-6px}.layui-col-space12>*{padding:6px}.layui-col-space14{margin:-7px}.layui-col-space14>*{padding:7px}.layui-col-space15{margin:-7.5px}.layui-col-space15>*{padding:7.5px}.layui-col-space16{margin:-8px}.layui-col-space16>*{padding:8px}.layui-col-space18{margin:-9px}.layui-col-space18>*{padding:9px}.layui-col-space20{margin:-10px}.layui-col-space20>*{padding:10px}.layui-col-space22{margin:-11px}.layui-col-space22>*{padding:11px}.layui-col-space24{margin:-12px}.layui-col-space24>*{padding:12px}.layui-col-space25{margin:-12.5px}.layui-col-space25>*{padding:12.5px}.layui-col-space26{margin:-13px}.layui-col-space26>*{padding:13px}.layui-col-space28{margin:-14px}.layui-col-space28>*{padding:14px}.layui-col-space30{margin:-15px}.layui-col-space30>*{padding:15px}.layui-btn,.layui-input,.layui-select,.layui-textarea,.layui-upload-button{outline:0;-webkit-appearance:none;transition:all .3s;-webkit-transition:all .3s;box-sizing:border-box}.layui-elem-quote{margin-bottom:10px;padding:15px;line-height:1.6;border-left:5px solid #5FB878;border-radius:0 2px 2px 0;background-color:#FAFAFA}.layui-quote-nm{border-style:solid;border-width:1px 1px 1px 5px;background:0 0}.layui-elem-field{margin-bottom:10px;padding:0;border-width:1px;border-style:solid}.layui-elem-field legend{margin-left:20px;padding:0 10px;font-size:20px;font-weight:300}.layui-field-title{margin:10px 0 20px;border-width:1px 0 0}.layui-field-box{padding:15px}.layui-field-title .layui-field-box{padding:10px 0}.layui-progress{position:relative;height:6px;border-radius:20px;background-color:#eee}.layui-progress-bar{position:absolute;left:0;top:0;width:0;max-width:100%;height:6px;border-radius:20px;text-align:right;background-color:#5FB878;transition:all .3s;-webkit-transition:all .3s}.layui-progress-big,.layui-progress-big .layui-progress-bar{height:18px;line-height:18px}.layui-progress-text{position:relative;top:-20px;line-height:18px;font-size:12px;color:#666}.layui-progress-big .layui-progress-text{position:static;padding:0 10px;color:#fff}.layui-collapse{border-width:1px;border-style:solid;border-radius:2px}.layui-colla-content,.layui-colla-item{border-top-width:1px;border-top-style:solid}.layui-colla-item:first-child{border-top:none}.layui-colla-title{position:relative;height:42px;line-height:42px;padding:0 15px 0 35px;color:#333;background-color:#FAFAFA;cursor:pointer;font-size:14px;overflow:hidden}.layui-colla-content{display:none;padding:10px 15px;line-height:1.6;color:#666}.layui-colla-icon{position:absolute;left:15px;top:0;font-size:14px}.layui-card-body,.layui-card-header,.layui-form-label,.layui-form-mid,.layui-input-block,.layui-input-inline,.layui-input-wrap,.layui-panel,.layui-textarea{position:relative}.layui-card{margin-bottom:15px;border-radius:2px;background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.layui-form-select dl,.layui-panel{box-shadow:1px 1px 4px rgb(0 0 0 / 8%)}.layui-card:last-child{margin-bottom:0}.layui-card-header{height:42px;line-height:42px;padding:0 15px;border-bottom:1px solid #f6f6f6;color:#333;border-radius:2px 2px 0 0;font-size:14px}.layui-card-body{padding:10px 15px;line-height:24px}.layui-card-body[pad15]{padding:15px}.layui-card-body[pad20]{padding:20px}.layui-card-body .layui-table{margin:5px 0}.layui-card .layui-tab{margin:0}.layui-panel{border-width:1px;border-style:solid;border-radius:2px;background-color:#fff;color:#666}.layui-bg-black,.layui-bg-blue,.layui-bg-cyan,.layui-bg-green,.layui-bg-orange,.layui-bg-red{color:#fff!important}.layui-panel-window{position:relative;padding:15px;border-radius:0;border-top:5px solid #eee;background-color:#fff}.layui-border,.layui-border-black,.layui-border-blue,.layui-border-cyan,.layui-border-green,.layui-border-orange,.layui-border-red{border-width:1px;border-style:solid}.layui-auxiliar-moving{position:fixed;left:0;right:0;top:0;bottom:0;width:100%;height:100%;background:0 0;z-index:9999999999}.layui-bg-red{background-color:#FF5722!important}.layui-bg-orange{background-color:#FFB800!important}.layui-bg-green{background-color:#009688!important}.layui-bg-cyan{background-color:#2F4056!important}.layui-bg-blue{background-color:#1E9FFF!important}.layui-bg-black{background-color:#393D49!important}.layui-bg-gray{background-color:#FAFAFA!important;color:#666!important}.layui-badge-rim,.layui-border,.layui-colla-content,.layui-colla-item,.layui-collapse,.layui-elem-field,.layui-form-pane .layui-form-item[pane],.layui-form-pane .layui-form-label,.layui-iconpicker,.layui-iconpicker-main,.layui-input,.layui-input-split,.layui-layedit,.layui-layedit-tool,.layui-panel,.layui-quote-nm,.layui-select,.layui-tab-bar,.layui-tab-card,.layui-tab-title,.layui-tab-title .layui-this:after,.layui-textarea{border-color:#eee}.layui-border-red{border-color:#FF5722!important;color:#FF5722!important}.layui-border-orange{border-color:#FFB800!important;color:#FFB800!important}.layui-border-green{border-color:#009688!important;color:#009688!important}.layui-border-cyan{border-color:#2F4056!important;color:#2F4056!important}.layui-border-blue{border-color:#1E9FFF!important;color:#1E9FFF!important}.layui-border-black{border-color:#393D49!important;color:#393D49!important}.layui-timeline-item:before{background-color:#eee}.layui-text{line-height:1.6;font-size:14px;color:#666}.layui-text h1,.layui-text h2,.layui-text h3{font-weight:500;color:#333}.layui-text h1{font-size:30px}.layui-text h2{font-size:24px}.layui-text h3{font-size:18px}.layui-text a:not(.layui-btn){color:#01AAED}.layui-text a:not(.layui-btn):hover{text-decoration:underline}.layui-text ul{padding:5px 0 5px 15px}.layui-text ul li{margin-top:5px;list-style-type:disc}.layui-text em,.layui-word-aux{color:#999!important;padding-left:5px!important;padding-right:5px!important}.layui-text p{margin:10px 0}.layui-text p:first-child{margin-top:0}.layui-font-12{font-size:12px!important}.layui-font-14{font-size:14px!important}.layui-font-16{font-size:16px!important}.layui-font-18{font-size:18px!important}.layui-font-20{font-size:20px!important}.layui-font-22{font-size:22px!important}.layui-font-24{font-size:24px!important}.layui-font-26{font-size:26px!important}.layui-font-28{font-size:28px!important}.layui-font-30{font-size:30px!important}.layui-font-red{color:#FF5722!important}.layui-font-orange{color:#FFB800!important}.layui-font-green{color:#009688!important}.layui-font-cyan{color:#2F4056!important}.layui-font-blue{color:#01AAED!important}.layui-font-black{color:#000!important}.layui-font-gray{color:#c2c2c2!important}.layui-btn{height:38px;line-height:38px;border:1px solid transparent;padding:0 18px;background-color:#009688;color:#fff;white-space:nowrap;text-align:center;font-size:14px;border-radius:2px;cursor:pointer}.layui-btn:hover{opacity:.8;filter:alpha(opacity=80);color:#fff}.layui-btn:active{opacity:1;filter:alpha(opacity=100)}.layui-btn+.layui-btn{margin-left:10px}.layui-btn-container{font-size:0}.layui-btn-container .layui-btn{margin-right:10px;margin-bottom:10px}.layui-btn-container .layui-btn+.layui-btn{margin-left:0}.layui-table .layui-btn-container .layui-btn{margin-bottom:9px}.layui-btn-radius{border-radius:100px}.layui-btn .layui-icon{padding:0 2px;vertical-align:middle\9;vertical-align:bottom}.layui-btn-primary{border-color:#d2d2d2;background:0 0;color:#666}.layui-btn-primary:hover{border-color:#009688;color:#333}.layui-btn-normal{background-color:#1E9FFF}.layui-btn-warm{background-color:#FFB800}.layui-btn-danger{background-color:#FF5722}.layui-btn-checked{background-color:#5FB878}.layui-btn-disabled,.layui-btn-disabled:active,.layui-btn-disabled:hover{border-color:#eee!important;background-color:#FBFBFB!important;color:#d2d2d2!important;cursor:not-allowed!important;opacity:1}.layui-btn-lg{height:44px;line-height:44px;padding:0 25px;font-size:16px}.layui-btn-sm{height:30px;line-height:30px;padding:0 10px;font-size:12px}.layui-btn-xs{height:22px;line-height:22px;padding:0 5px;font-size:12px}.layui-btn-xs i{font-size:12px!important}.layui-btn-group{vertical-align:middle;font-size:0}.layui-btn-group .layui-btn{margin-left:0!important;margin-right:0!important;border-left:1px solid rgba(255,255,255,.5);border-radius:0}.layui-btn-group .layui-btn-primary{border-left:none}.layui-btn-group .layui-btn-primary:hover{border-color:#d2d2d2;color:#009688}.layui-btn-group .layui-btn:first-child{border-left:none;border-radius:2px 0 0 2px}.layui-btn-group .layui-btn-primary:first-child{border-left:1px solid #d2d2d2}.layui-btn-group .layui-btn:last-child{border-radius:0 2px 2px 0}.layui-btn-group .layui-btn+.layui-btn{margin-left:0}.layui-btn-group+.layui-btn-group{margin-left:10px}.layui-btn-fluid{width:100%}.layui-input,.layui-select,.layui-textarea{height:38px;line-height:1.3;line-height:38px\9;border-width:1px;border-style:solid;background-color:#fff;color:rgba(0,0,0,.85);border-radius:2px}.layui-input::-webkit-input-placeholder,.layui-select::-webkit-input-placeholder,.layui-textarea::-webkit-input-placeholder{line-height:1.3}.layui-input,.layui-textarea{display:block;width:100%;padding-left:10px}.layui-input:hover,.layui-textarea:hover{border-color:#eee!important}.layui-input:focus,.layui-textarea:focus{border-color:#d2d2d2!important}.layui-textarea{min-height:100px;height:auto;line-height:20px;padding:6px 10px;resize:vertical}.layui-select{padding:0 10px}.layui-form input[type=checkbox],.layui-form input[type=radio],.layui-form select{display:none}.layui-form [lay-ignore]{display:initial}.layui-form-item{margin-bottom:15px;clear:both;*zoom:1}.layui-form-item:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-form-label{float:left;display:block;padding:9px 15px;width:80px;font-weight:400;line-height:20px;text-align:right}.layui-form-label-col{display:block;float:none;padding:9px 0;line-height:20px;text-align:left}.layui-form-item .layui-inline{margin-bottom:5px;margin-right:10px}.layui-input-block{margin-left:110px;min-height:36px}.layui-input-inline{display:inline-block;vertical-align:middle}.layui-form-item .layui-input-inline{float:left;width:190px;margin-right:10px}.layui-form-text .layui-input-inline{width:auto}.layui-form-mid{float:left;display:block;padding:9px 0!important;line-height:20px;margin-right:10px}.layui-form-danger+.layui-form-select .layui-input,.layui-form-danger:focus{border-color:#FF5722!important}.layui-input-wrap{height:38px;line-height:38px}.layui-input-wrap .layui-input{padding-right:35px;cursor:pointer}.layui-input-wrap .layui-input::-ms-clear,.layui-input-wrap .layui-input::-ms-reveal{display:none}.layui-input-wrap-prefix .layui-input{padding-left:35px}.layui-input-prefix,.layui-input-split,.layui-input-suffix{position:absolute;right:0;top:0;padding:0 10px;width:35px;height:100%;text-align:center;transition:all .3s;cursor:pointer;pointer-events:none;box-sizing:border-box}.layui-input-prefix{left:0;border-radius:2px 0 0 2px}.layui-input-suffix{right:0;border-radius:0 2px 2px 0}.layui-input-wrap .layui-input:focus+.layui-input-split{border-color:#d2d2d2}.layui-input-prefix .layui-icon,.layui-input-split .layui-icon,.layui-input-suffix .layui-icon{position:relative;font-size:16px;color:rgba(0,0,0,.6);transition:all .3s}.layui-input-wrap .layui-input-prefix.layui-input-split{border-width:0 1px 0 0}.layui-input-wrap-prefix .layui-form-select{position:static}.layui-input-affix-event .layui-icon{color:rgba(0,0,0,.8)}.layui-input-affix-event .layui-icon-clear{color:rgba(0,0,0,.3)}.layui-input-affix-event .layui-icon:hover{color:rgba(0,0,0,.6)}.layui-input-split{border-width:1px;border-style:solid}.layui-input-affix-event{pointer-events:auto}.layui-input-group{position:relative;display:inline-table;cursor:pointer}.layui-input-group>*{display:table-cell;vertical-align:middle;position:relative;cursor:pointer}.layui-input-group .layui-input{padding-right:15px}.layui-input-group .layui-input-prefix{width:auto;border-right:0}.layui-input-group .layui-input-suffix{width:auto;border-left:0}.layui-form-select{position:relative}.layui-form-select .layui-input{padding-right:30px;cursor:pointer}.layui-form-select .layui-edge{position:absolute;right:10px;top:50%;margin-top:-3px;cursor:pointer;border-width:6px;border-top-color:#c2c2c2;border-top-style:solid;transition:all .3s;-webkit-transition:all .3s}.layui-form-select dl{display:none;position:absolute;left:0;top:42px;padding:5px 0;z-index:899;min-width:100%;border:1px solid #eee;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-sizing:border-box}.layui-form-select dl dd,.layui-form-select dl dt{padding:0 10px;line-height:36px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layui-form-select dl dt{font-size:12px;color:#999}.layui-form-select dl dd{cursor:pointer}.layui-form-select dl dd:hover{background-color:#F6F6F6;-webkit-transition:.5s all;transition:.5s all}.layui-form-select .layui-select-group dd{padding-left:20px}.layui-form-select dl dd.layui-select-tips{padding-left:10px!important;color:#999}.layui-form-select dl dd.layui-this{background-color:#F6F6F6;color:#5FB878;font-weight:700}.layui-form-checkbox,.layui-form-select dl dd.layui-disabled{background-color:#fff}.layui-form-selected dl{display:block}.layui-form-checkbox,.layui-form-checkbox *,.layui-form-switch{display:inline-block;vertical-align:middle}.layui-form-selected .layui-edge{margin-top:-9px;-webkit-transform:rotate(180deg);transform:rotate(180deg);margin-top:-3px\9}:root .layui-form-selected .layui-edge{margin-top:-9px\0/IE9}.layui-form-selectup dl{top:auto;bottom:42px}.layui-select-none{margin:5px 0;text-align:center;color:#999}.layui-select-disabled .layui-disabled{border-color:#eee!important}.layui-select-disabled .layui-edge{border-top-color:#d2d2d2}.layui-form-checkbox{position:relative;height:30px;line-height:30px;margin-right:10px;padding-right:30px;cursor:pointer;font-size:0;-webkit-transition:.1s linear;transition:.1s linear;box-sizing:border-box}.layui-form-checkbox span{padding:0 10px;height:100%;font-size:14px;border-radius:2px 0 0 2px;background-color:#d2d2d2;color:#fff;overflow:hidden}.layui-form-checkbox:hover span{background-color:#c2c2c2}.layui-form-checkbox i{position:absolute;right:0;top:0;width:30px;height:28px;border:1px solid #d2d2d2;border-left:none;border-radius:0 2px 2px 0;color:#fff;font-size:20px;text-align:center}.layui-form-checkbox:hover i{border-color:#c2c2c2;color:#c2c2c2}.layui-form-checked,.layui-form-checked:hover{border-color:#5FB878}.layui-form-checked span,.layui-form-checked:hover span{background-color:#5FB878}.layui-form-checked i,.layui-form-checked:hover i{color:#5FB878}.layui-form-item .layui-form-checkbox{margin-top:4px}.layui-form-checkbox[lay-skin=primary]{height:auto!important;line-height:normal!important;min-width:18px;min-height:18px;border:none!important;margin-right:0;padding-left:28px;padding-right:0;background:0 0}.layui-form-checkbox[lay-skin=primary] span{padding-left:0;padding-right:15px;line-height:18px;background:0 0;color:#666}.layui-form-checkbox[lay-skin=primary] i{right:auto;left:0;width:16px;height:16px;line-height:16px;border:1px solid #d2d2d2;font-size:12px;border-radius:2px;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-checkbox[lay-skin=primary]:hover i{border-color:#5FB878;color:#fff}.layui-form-checked[lay-skin=primary] i{border-color:#5FB878!important;background-color:#5FB878;color:#fff}.layui-checkbox-disabled[lay-skin=primary] span{background:0 0!important;color:#c2c2c2!important}.layui-checkbox-disabled[lay-skin=primary]:hover i{border-color:#d2d2d2}.layui-form-item .layui-form-checkbox[lay-skin=primary]{margin-top:10px}.layui-form-switch{position:relative;height:22px;line-height:22px;min-width:35px;padding:0 5px;margin-top:8px;border:1px solid #d2d2d2;border-radius:20px;cursor:pointer;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch i{position:absolute;left:5px;top:3px;width:16px;height:16px;border-radius:20px;background-color:#d2d2d2;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch em{position:relative;top:0;width:25px;margin-left:21px;padding:0!important;text-align:center!important;color:#999!important;font-style:normal!important;font-size:12px}.layui-form-onswitch{border-color:#5FB878;background-color:#5FB878}.layui-checkbox-disabled,.layui-checkbox-disabled i{border-color:#eee!important}.layui-form-onswitch i{left:100%;margin-left:-21px;background-color:#fff}.layui-form-onswitch em{margin-left:5px;margin-right:21px;color:#fff!important}.layui-checkbox-disabled span{background-color:#eee!important}.layui-checkbox-disabled em{color:#d2d2d2!important}.layui-checkbox-disabled:hover i{color:#fff!important}[lay-radio]{display:none}.layui-form-radio,.layui-form-radio *{display:inline-block;vertical-align:middle}.layui-form-radio{line-height:28px;margin:6px 10px 0 0;padding-right:10px;cursor:pointer;font-size:0}.layui-form-radio *{font-size:14px}.layui-form-radio>i{margin-right:8px;font-size:22px;color:#c2c2c2}.layui-form-radio:hover *,.layui-form-radioed,.layui-form-radioed>i{color:#5FB878}.layui-radio-disabled>i{color:#eee!important}.layui-radio-disabled *{color:#c2c2c2!important}.layui-form-pane .layui-form-label{width:110px;padding:8px 15px;height:38px;line-height:20px;border-width:1px;border-style:solid;border-radius:2px 0 0 2px;text-align:center;background-color:#FAFAFA;overflow:hidden;box-sizing:border-box}.layui-form-pane .layui-input-inline{margin-left:-1px}.layui-form-pane .layui-input-block{margin-left:110px;left:-1px}.layui-form-pane .layui-input{border-radius:0 2px 2px 0}.layui-form-pane .layui-form-text .layui-form-label{float:none;width:100%;border-radius:2px;box-sizing:border-box;text-align:left}.layui-form-pane .layui-form-text .layui-input-inline{display:block;margin:0;top:-1px;clear:both}.layui-form-pane .layui-form-text .layui-input-block{margin:0;left:0;top:-1px}.layui-form-pane .layui-form-text .layui-textarea{min-height:100px;border-radius:0 0 2px 2px}.layui-form-pane .layui-form-checkbox{margin:4px 0 4px 10px}.layui-form-pane .layui-form-radio,.layui-form-pane .layui-form-switch{margin-top:6px;margin-left:10px}.layui-form-pane .layui-form-item[pane]{position:relative;border-width:1px;border-style:solid}.layui-form-pane .layui-form-item[pane] .layui-form-label{position:absolute;left:0;top:0;height:100%;border-width:0 1px 0 0}.layui-form-pane .layui-form-item[pane] .layui-input-inline{margin-left:110px}@media screen and (max-width:450px){.layui-form-item .layui-form-label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-form-item .layui-inline{display:block;margin-right:0;margin-bottom:20px;clear:both}.layui-form-item .layui-inline:after{content:'\20';clear:both;display:block;height:0}.layui-form-item .layui-input-inline{display:block;float:none;left:-3px;width:auto!important;margin:0 0 10px 112px}.layui-form-item .layui-input-inline+.layui-form-mid{margin-left:110px;top:-5px;padding:0}.layui-form-item .layui-form-checkbox{margin-right:5px;margin-bottom:5px}}.layui-layedit{border-width:1px;border-style:solid;border-radius:2px}.layui-layedit-tool{padding:3px 5px;border-bottom-width:1px;border-bottom-style:solid;font-size:0}.layedit-tool-fixed{position:fixed;top:0;border-top:1px solid #eee}.layui-layedit-tool .layedit-tool-mid,.layui-layedit-tool .layui-icon{display:inline-block;vertical-align:middle;text-align:center;font-size:14px}.layui-layedit-tool .layui-icon{position:relative;width:32px;height:30px;line-height:30px;margin:3px 5px;color:#777;cursor:pointer;border-radius:2px}.layui-layedit-tool .layui-icon:hover{color:#393D49}.layui-layedit-tool .layui-icon:active{color:#000}.layui-layedit-tool .layedit-tool-active{background-color:#eee;color:#000}.layui-layedit-tool .layui-disabled,.layui-layedit-tool .layui-disabled:hover{color:#d2d2d2;cursor:not-allowed}.layui-layedit-tool .layedit-tool-mid{width:1px;height:18px;margin:0 10px;background-color:#d2d2d2}.layedit-tool-html{width:50px!important;font-size:30px!important}.layedit-tool-b,.layedit-tool-code,.layedit-tool-help{font-size:16px!important}.layedit-tool-d,.layedit-tool-face,.layedit-tool-image,.layedit-tool-unlink{font-size:18px!important}.layedit-tool-image input{position:absolute;font-size:0;left:0;top:0;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-layedit-iframe iframe{display:block;width:100%}#LAY_layedit_code{overflow:hidden}.layui-laypage{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;margin:10px 0;font-size:0}.layui-laypage>a:first-child,.layui-laypage>a:first-child em{border-radius:2px 0 0 2px}.layui-laypage>a:last-child,.layui-laypage>a:last-child em{border-radius:0 2px 2px 0}.layui-laypage>:first-child{margin-left:0!important}.layui-laypage>:last-child{margin-right:0!important}.layui-laypage a,.layui-laypage button,.layui-laypage input,.layui-laypage select,.layui-laypage span{border:1px solid #eee}.layui-laypage a,.layui-laypage span{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding:0 15px;height:28px;line-height:28px;margin:0 -1px 5px 0;background-color:#fff;color:#333;font-size:12px}.layui-laypage a:hover{color:#009688}.layui-laypage em{font-style:normal}.layui-laypage .layui-laypage-spr{color:#999;font-weight:700}.layui-laypage a{text-decoration:none}.layui-laypage .layui-laypage-curr{position:relative}.layui-laypage .layui-laypage-curr em{position:relative;color:#fff}.layui-laypage .layui-laypage-curr .layui-laypage-em{position:absolute;left:-1px;top:-1px;padding:1px;width:100%;height:100%;background-color:#009688}.layui-laypage-em{border-radius:2px}.layui-laypage-next em,.layui-laypage-prev em{font-family:Sim sun;font-size:16px}.layui-laypage .layui-laypage-count,.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh,.layui-laypage .layui-laypage-skip{margin-left:10px;margin-right:10px;padding:0;border:none}.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh{vertical-align:top}.layui-laypage .layui-laypage-refresh i{font-size:18px;cursor:pointer}.layui-laypage select{height:22px;padding:3px;border-radius:2px;cursor:pointer}.layui-laypage .layui-laypage-skip{height:30px;line-height:30px;color:#999}.layui-laypage button,.layui-laypage input{height:30px;line-height:30px;border-radius:2px;vertical-align:top;background-color:#fff;box-sizing:border-box}.layui-laypage input{display:inline-block;width:40px;margin:0 10px;padding:0 3px;text-align:center}.layui-laypage input:focus,.layui-laypage select:focus{border-color:#009688!important}.layui-laypage button{margin-left:10px;padding:0 10px;cursor:pointer}.layui-table,.layui-table-view{margin:10px 0}.layui-flow-more{margin:10px 0;text-align:center;color:#999;font-size:14px}.layui-flow-more a{height:32px;line-height:32px}.layui-flow-more a *{display:inline-block;vertical-align:top}.layui-flow-more a cite{padding:0 20px;border-radius:3px;background-color:#eee;color:#333;font-style:normal}.layui-flow-more a cite:hover{opacity:.8}.layui-flow-more a i{font-size:30px;color:#737383}.layui-table{width:100%;background-color:#fff;color:#666}.layui-table tr{transition:all .3s;-webkit-transition:all .3s}.layui-table th{text-align:left;font-weight:400}.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:#FAFAFA}.layui-table td,.layui-table th,.layui-table-col-set,.layui-table-fixed-r,.layui-table-grid-down,.layui-table-header,.layui-table-page,.layui-table-tips-main,.layui-table-tool,.layui-table-total,.layui-table-view,.layui-table[lay-skin=line],.layui-table[lay-skin=row]{border-width:1px;border-style:solid;border-color:#eee}.layui-table td,.layui-table th{position:relative;padding:9px 15px;min-height:20px;line-height:20px;font-size:14px}.layui-table[lay-skin=line] td,.layui-table[lay-skin=line] th{border-width:0 0 1px}.layui-table[lay-skin=row] td,.layui-table[lay-skin=row] th{border-width:0 1px 0 0}.layui-table[lay-skin=nob] td,.layui-table[lay-skin=nob] th{border:none}.layui-table img{max-width:100px}.layui-table[lay-size=lg] td,.layui-table[lay-size=lg] th{padding:15px 30px}.layui-table-view .layui-table[lay-size=lg] .layui-table-cell{height:40px;line-height:40px}.layui-table[lay-size=sm] td,.layui-table[lay-size=sm] th{font-size:12px;padding:5px 10px}.layui-table-view .layui-table[lay-size=sm] .layui-table-cell{height:20px;line-height:20px}.layui-table[lay-data]{display:none}.layui-table-box{position:relative;overflow:hidden}.layui-table-view .layui-table{position:relative;width:auto;margin:0;border-collapse:separate}.layui-table-view .layui-table[lay-skin=line]{border-width:0 1px 0 0}.layui-table-view .layui-table[lay-skin=row]{border-width:0 0 1px}.layui-table-view .layui-table td,.layui-table-view .layui-table th{padding:5px 0;border-top:none;border-left:none}.layui-table-view .layui-table th.layui-unselect .layui-table-cell span{cursor:pointer}.layui-table-view .layui-table td{cursor:default}.layui-table-view .layui-table td[data-edit=text]{cursor:text}.layui-table-view .layui-form-checkbox[lay-skin=primary] i{width:18px;height:18px}.layui-table-view .layui-form-radio{line-height:0;padding:0}.layui-table-view .layui-form-radio>i{margin:0;font-size:20px}.layui-table-init{position:absolute;left:0;top:0;width:100%;height:100%;text-align:center;z-index:110}.layui-table-init .layui-icon{position:absolute;left:50%;top:50%;margin:-15px 0 0 -15px;font-size:30px;color:#c2c2c2}.layui-table-header{border-width:0 0 1px;overflow:hidden}.layui-table-header .layui-table{margin-bottom:-1px}.layui-table-tool .layui-inline[lay-event]{position:relative;width:26px;height:26px;padding:5px;line-height:16px;margin-right:10px;text-align:center;color:#333;border:1px solid #ccc;cursor:pointer;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool .layui-inline[lay-event]:hover{border:1px solid #999}.layui-table-tool-temp{padding-right:120px}.layui-table-tool-self{position:absolute;right:17px;top:10px}.layui-table-tool .layui-table-tool-self .layui-inline[lay-event]{margin:0 0 0 10px}.layui-table-tool-panel{position:absolute;top:29px;left:-1px;padding:5px 0;min-width:150px;min-height:40px;border:1px solid #d2d2d2;text-align:left;overflow-y:auto;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-table-cell,.layui-table-tool-panel li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layui-table-tool-panel li{padding:0 10px;line-height:30px;-webkit-transition:.5s all;transition:.5s all}.layui-iconpicker-list li,.layui-keyboard-list li,.layui-menu li,.layui-menu-body-title a:hover,.layui-menu-body-title>.layui-icon:hover,.layui-nav .layui-nav-item a{transition:all .3s}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary]{width:100%;padding-left:28px}.layui-table-tool-panel li:hover{background-color:#F6F6F6}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] i{position:absolute;left:0;top:0}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] span{padding:0}.layui-table-tool .layui-table-tool-self .layui-table-tool-panel{left:auto;right:-1px}.layui-table-col-set{position:absolute;right:0;top:0;width:20px;height:100%;border-width:0 0 0 1px;background-color:#fff}.layui-table-sort{width:10px;height:20px;margin-left:5px;cursor:pointer!important}.layui-table-sort .layui-edge{position:absolute;left:5px;border-width:5px}.layui-table-sort .layui-table-sort-asc{top:3px;border-top:none;border-bottom-style:solid;border-bottom-color:#b2b2b2}.layui-table-sort .layui-table-sort-asc:hover{border-bottom-color:#666}.layui-table-sort .layui-table-sort-desc{bottom:5px;border-bottom:none;border-top-style:solid;border-top-color:#b2b2b2}.layui-table-sort .layui-table-sort-desc:hover{border-top-color:#666}.layui-table-sort[lay-sort=asc] .layui-table-sort-asc{border-bottom-color:#000}.layui-table-sort[lay-sort=desc] .layui-table-sort-desc{border-top-color:#000}.layui-table-cell{height:28px;line-height:28px;padding:0 15px;position:relative;box-sizing:border-box}.layui-table-cell .layui-form-checkbox[lay-skin=primary]{top:-1px;padding:0}.layui-table-cell .layui-table-link{color:#01AAED}.laytable-cell-checkbox,.laytable-cell-numbers,.laytable-cell-radio,.laytable-cell-space{padding:0;text-align:center;-webkit-box-pack:center}.layui-table-body{position:relative;overflow:auto;margin-right:-1px;margin-bottom:-1px}.layui-table-body .layui-none{line-height:26px;padding:30px 15px;text-align:center;color:#999}.layui-table-fixed{position:absolute;left:0;top:0;z-index:101}.layui-table-fixed .layui-table-body{overflow:hidden}.layui-table-fixed-l{box-shadow:1px 0 8px rgba(0,0,0,.08)}.layui-table-fixed-r{left:auto;right:-1px;border-width:0 0 0 1px;box-shadow:-1px 0 8px rgba(0,0,0,.08)}.layui-table-fixed-r .layui-table-header{position:relative;overflow:visible}.layui-table-mend{position:absolute;right:-49px;top:0;height:100%;width:50px}.layui-table-tool{position:relative;z-index:890;width:100%;min-height:50px;line-height:30px;padding:10px 15px;border-width:0 0 1px;box-shadow:0 2px 8px rgb(0 0 0 / 8%)}.layui-table-tool .layui-btn-container{margin-bottom:-10px}.layui-table-page,.layui-table-total{border-width:1px 0 0;margin-bottom:-1px;overflow:hidden}.layui-table-page{position:relative;width:100%;padding:7px 7px 0;height:41px;font-size:12px;white-space:nowrap}.layui-table-page>div{height:26px}.layui-table-page .layui-laypage{margin:0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span{height:26px;line-height:26px;margin-bottom:10px;border:none;background:0 0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span.layui-laypage-curr{padding:0 12px}.layui-table-page .layui-laypage span{margin-left:0;padding:0}.layui-table-page .layui-laypage .layui-laypage-prev{margin-left:-7px!important}.layui-table-page .layui-laypage .layui-laypage-curr .layui-laypage-em{left:0;top:0;padding:0}.layui-table-page .layui-laypage button,.layui-table-page .layui-laypage input{height:26px;line-height:26px}.layui-table-page .layui-laypage input{width:40px}.layui-table-page .layui-laypage button{padding:0 10px}.layui-table-page select{height:18px}.layui-table-pagebar{float:right;line-height:26px}.layui-table-view select[lay-ignore]{display:inline-block}.layui-table-patch .layui-table-cell{padding:0;width:30px}.layui-table-edit{position:absolute;left:0;top:0;width:100%;height:100%;padding:0 14px 1px;border-radius:0;box-shadow:1px 1px 20px rgba(0,0,0,.15)}.layui-table-edit:focus{border-color:#5FB878!important}select.layui-table-edit{padding:0 0 0 10px;border-color:#d2d2d2}.layui-table-view .layui-form-checkbox,.layui-table-view .layui-form-radio,.layui-table-view .layui-form-switch{top:0;margin:0;box-sizing:content-box}.layui-colorpicker-alpha-slider,.layui-colorpicker-side-slider,.layui-menu,.layui-menu *,.layui-nav{box-sizing:border-box}.layui-table-view .layui-form-checkbox{top:-1px;height:26px;line-height:26px}.layui-table-view .layui-form-checkbox i{height:26px}.layui-table-grid .layui-table-cell{overflow:visible}.layui-table-grid-down{position:absolute;top:0;right:0;width:26px;height:100%;padding:5px 0;border-width:0 0 0 1px;text-align:center;background-color:#fff;color:#999;cursor:pointer}.layui-table-grid-down .layui-icon{position:absolute;top:50%;left:50%;margin:-8px 0 0 -8px}.layui-table-grid-down:hover{background-color:#fbfbfb}body .layui-table-tips .layui-layer-content{background:0 0;padding:0;box-shadow:0 1px 6px rgba(0,0,0,.12)}.layui-table-tips-main{margin:-44px 0 0 -1px;max-height:150px;padding:8px 15px;font-size:14px;overflow-y:scroll;background-color:#fff;color:#666}.layui-table-tips-c{position:absolute;right:-3px;top:-13px;width:20px;height:20px;padding:3px;cursor:pointer;background-color:#666;border-radius:50%;color:#fff}.layui-table-tips-c:hover{background-color:#777}.layui-table-tips-c:before{position:relative;right:-2px}.layui-upload-file{display:none!important;opacity:.01;filter:Alpha(opacity=1)}.layui-upload-drag,.layui-upload-form,.layui-upload-wrap{display:inline-block}.layui-upload-list{margin:10px 0}.layui-upload-choose{max-width:200px;padding:0 10px;color:#999;font-size:14px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-upload-drag{position:relative;padding:30px;border:1px dashed #e2e2e2;background-color:#fff;text-align:center;cursor:pointer;color:#999}.layui-upload-drag .layui-icon{font-size:50px;color:#009688}.layui-upload-drag[lay-over]{border-color:#009688}.layui-upload-iframe{position:absolute;width:0;height:0;border:0;visibility:hidden}.layui-upload-wrap{position:relative;vertical-align:middle}.layui-upload-wrap .layui-upload-file{display:block!important;position:absolute;left:0;top:0;z-index:10;font-size:100px;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-btn-container .layui-upload-choose{padding-left:0}.layui-menu{position:relative;margin:5px 0;background-color:#fff}.layui-menu li,.layui-menu-body-title a{padding:5px 15px}.layui-menu li{position:relative;margin:1px 0;width:calc(100% + 1px);line-height:26px;color:rgba(0,0,0,.8);font-size:14px;white-space:nowrap;cursor:pointer}.layui-menu li:hover{background-color:#F6F6F6}.layui-menu-item-parent:hover>.layui-menu-body-panel{display:block;animation-name:layui-fadein;animation-duration:.3s;animation-fill-mode:both;animation-delay:.2s}.layui-menu-item-group .layui-menu-body-title,.layui-menu-item-parent .layui-menu-body-title{padding-right:25px}.layui-menu .layui-menu-item-divider:hover,.layui-menu .layui-menu-item-group:hover,.layui-menu .layui-menu-item-none:hover{background:0 0;cursor:default}.layui-menu .layui-menu-item-group>ul{margin:5px 0 -5px}.layui-menu .layui-menu-item-group>.layui-menu-body-title{color:rgba(0,0,0,.35);user-select:none}.layui-menu .layui-menu-item-none{color:rgba(0,0,0,.35);cursor:default;text-align:center}.layui-menu .layui-menu-item-divider{margin:5px 0;padding:0;height:0;line-height:0;border-bottom:1px solid #eee;overflow:hidden}.layui-menu .layui-menu-item-down:hover,.layui-menu .layui-menu-item-up:hover{cursor:pointer}.layui-menu .layui-menu-item-up>.layui-menu-body-title{color:rgba(0,0,0,.8)}.layui-menu .layui-menu-item-up>ul{visibility:hidden;height:0;overflow:hidden}.layui-menu .layui-menu-item-down:hover>.layui-menu-body-title>.layui-icon,.layui-menu .layui-menu-item-up>.layui-menu-body-title:hover>.layui-icon{color:rgba(0,0,0,1)}.layui-menu .layui-menu-item-down>ul{visibility:visible;height:auto}.layui-breadcrumb,.layui-tree-btnGroup{visibility:hidden}.layui-menu .layui-menu-item-checked,.layui-menu .layui-menu-item-checked2{background-color:#F6F6F6!important;color:#5FB878}.layui-menu .layui-menu-item-checked a,.layui-menu .layui-menu-item-checked2 a{color:#5FB878}.layui-menu .layui-menu-item-checked:after{position:absolute;right:0;top:0;bottom:0;border-right:3px solid #5FB878;content:""}.layui-menu-body-title{position:relative;overflow:hidden;text-overflow:ellipsis}.layui-menu-body-title a{display:block;margin:-5px -15px;color:rgba(0,0,0,.8)}.layui-menu-body-title>.layui-icon{position:absolute;right:0;top:0;font-size:14px}.layui-menu-body-title>.layui-icon-right{right:-1px}.layui-menu-body-panel{display:none;position:absolute;top:-7px;left:100%;z-index:1000;margin-left:13px;padding:5px 0}.layui-menu-body-panel:before{content:"";position:absolute;width:20px;left:-16px;top:0;bottom:0}.layui-menu-body-panel-left{left:auto;right:100%;margin:0 13px}.layui-menu-body-panel-left:before{left:auto;right:-16px}.layui-menu-lg li{line-height:32px}.layui-menu-lg .layui-menu-body-title a:hover,.layui-menu-lg li:hover{background:0 0;color:#5FB878}.layui-menu-lg li .layui-menu-body-panel{margin-left:14px}.layui-menu-lg li .layui-menu-body-panel-left{margin:0 15px}.layui-dropdown{position:absolute;left:-999999px;top:-999999px;z-index:66666666;margin:5px 0;min-width:100px}.layui-dropdown:before{content:"";position:absolute;width:100%;height:6px;left:0;top:-6px}.layui-dropdown .layui-none{line-height:26px;color:#999;text-align:center}.layui-iconpicker{position:relative;height:38px;line-height:38px;border-width:1px;border-style:solid;border-radius:2px;cursor:pointer}.layui-iconpicker .layui-inline{height:36px;line-height:36px;vertical-align:top}.layui-iconpicker-title{padding-left:5px}.layui-iconpicker-main{padding:0 10px}.layui-iconpicker-main .layui-icon{font-size:20px}.layui-iconpicker-main .layui-inline{vertical-align:top}.layui-iconpicker-split .layui-iconpicker-main{padding:0 15px;border-right-width:1px;border-right-style:solid}.layui-iconpicker-suffix{position:relative;width:35px;text-align:center}.layui-iconpicker-suffix .layui-icon{font-size:14px;color:rgba(0,0,0,.5);transition:all .3s}.layui-iconpicker-down .layui-iconpicker-suffix .layui-icon-down{transform:rotate(180deg)}.layui-iconpicker-none{color:rgba(0,0,0,.5)}.layui-iconpicker-search{padding:10px;box-shadow:0 2px 8px #f0f1f2;border-bottom:1px solid #eee\9}.layui-iconpicker-list{padding:10px 10px 5px}.layui-iconpicker-list ul{width:262px;margin-right:-6px}.layui-iconpicker-list li{display:inline-block;vertical-align:top;width:60px;margin:0 5px 5px 0;padding:5px;border:1px solid #eee;border-radius:2px;cursor:pointer;text-align:center}.layui-iconpicker-list li:hover{background-color:#FAFAFA;color:rgba(0,0,0,.5)}.layui-iconpicker-list li.layui-this{border-color:#5FB878;color:#5FB878}.layui-iconpicker-list li .layui-icon{font-size:20px}.layui-iconpicker-list li .layui-elip{margin-top:2px;line-height:20px;font-size:12px}.layui-iconpicker-list .layui-none{margin:30px 0 35px}.layui-iconpicker-scroll .layui-iconpicker-list{max-height:194px;overflow:auto}.layui-iconpicker-page{position:relative;padding:10px 10px 5px;border-top:1px solid #eee;text-align:right}.layui-iconpicker-page .layui-laypage{margin:0}.layui-iconpicker-page .layui-laypage a,.layui-iconpicker-page .layui-laypage span{padding:0 10px;color:#666}.layui-iconpicker-page .layui-laypage-count{position:absolute;left:10px}.layui-iconpicker-page .layui-laypage-curr .layui-laypage-em{background:0 0}.layui-iconpicker-page .layui-laypage-curr em{color:#666;color:rgba(0,0,0,.6)}.layui-iconpicker-page .layui-laypage-first,.layui-iconpicker-page .layui-laypage-last,.layui-iconpicker-page .layui-laypage-spr{display:none}.layui-keyboard-header{height:40px;line-height:40px;padding:0 60px;text-align:center;background-color:#fff;box-shadow:0 2px 8px #f0f1f2;border-bottom:1px solid #eee\9}.layui-keyboard-list{padding:10px 10px 5px;text-align:center}.layui-keyboard-header button{position:absolute;right:10px;top:10px;height:20px;line-height:20px;border:none;color:#009688}.layui-keyboard-header button:first-child{left:10px;right:auto;color:#999}.layui-keyboard-list ul{margin-right:-5px}.layui-keyboard-list li{display:inline-block;vertical-align:top;margin:0 5px 5px 0;padding:5px;width:30px;height:36px;line-height:26px;border:1px solid #eee;border-radius:2px;cursor:pointer;text-align:center;background-color:#fff}.layui-keyboard-list li:hover{background-color:#FAFAFA;color:rgba(0,0,0,.5)}.layui-keyboard-list li.layui-this{border-color:#5FB878;color:#5FB878}.layui-nav{position:relative;padding:0 20px;background-color:#393D49;color:#fff;border-radius:2px;font-size:0}.layui-nav *{font-size:14px}.layui-nav .layui-nav-item{position:relative;display:inline-block;*display:inline;*zoom:1;vertical-align:middle;line-height:60px}.layui-nav .layui-nav-item a{display:block;padding:0 20px;color:#fff;color:rgba(255,255,255,.7);-webkit-transition:all .3s}.layui-nav .layui-this:after,.layui-nav-bar{content:"";position:absolute;left:0;top:0;width:0;height:5px;background-color:#5FB878;transition:all .2s;-webkit-transition:all .2s;pointer-events:none}.layui-nav-bar{z-index:1000}.layui-nav[lay-bar=disabled] .layui-nav-bar{display:none}.layui-nav .layui-nav-item a:hover,.layui-nav .layui-this a{color:#fff}.layui-nav .layui-this:after{top:auto;bottom:0;width:100%}.layui-nav-img{width:30px;height:30px;margin-right:5px;border-radius:50%}.layui-nav .layui-nav-more{position:absolute;top:0;right:3px;left:auto!important;margin-top:0;font-size:12.5px!important;cursor:pointer;transition:all .2s;-webkit-transition:all .2s}.layui-nav .layui-nav-mored,.layui-nav-itemed>a .layui-nav-more{transform:rotate(180deg)}.layui-nav-child{display:none;position:absolute;left:0;top:65px;min-width:100%;line-height:36px;padding:5px 0;box-shadow:0 2px 4px rgba(0,0,0,.12);border:1px solid #eee;background-color:#fff;z-index:100;border-radius:2px;white-space:nowrap}.layui-nav .layui-nav-child a{color:#666;color:rgba(0,0,0,.8)}.layui-nav .layui-nav-child a:hover{background-color:#F6F6F6;color:rgba(0,0,0,.8)}.layui-nav-child dd{margin:1px 0;position:relative}.layui-nav-child dd.layui-this{background-color:#F6F6F6;color:#000}.layui-nav-child dd.layui-this:after{display:none}.layui-nav-child-r{left:auto;right:0}.layui-nav-child-c{text-align:center}.layui-nav-tree{width:200px;padding:0}.layui-nav-tree .layui-nav-item{display:block;width:100%;line-height:40px}.layui-nav-tree .layui-nav-item a{position:relative;height:40px;line-height:40px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-nav-tree .layui-nav-item>a{padding-top:5px;padding-bottom:5px}.layui-nav-tree .layui-nav-more{right:15px}.layui-nav-tree .layui-nav-item>a .layui-nav-more{padding:5px 0}.layui-nav-tree .layui-nav-bar{width:5px;height:0;background-color:#009688}.layui-side .layui-nav-tree .layui-nav-bar{width:2px}.layui-nav-tree .layui-nav-child dd.layui-this,.layui-nav-tree .layui-nav-child dd.layui-this a,.layui-nav-tree .layui-this,.layui-nav-tree .layui-this>a,.layui-nav-tree .layui-this>a:hover{background-color:#009688;color:#fff}.layui-nav-tree .layui-this:after{display:none}.layui-nav-itemed>a,.layui-nav-tree .layui-nav-title a,.layui-nav-tree .layui-nav-title a:hover{color:#fff!important}.layui-nav-tree .layui-nav-child{position:relative;z-index:0;top:0;border:none;box-shadow:none}.layui-nav-tree .layui-nav-child dd{margin:0}.layui-nav-tree .layui-nav-child a{color:#fff;color:rgba(255,255,255,.7)}.layui-nav-tree .layui-nav-child,.layui-nav-tree .layui-nav-child a:hover{background:0 0;color:#fff}.layui-nav-itemed>.layui-nav-child{display:block;background-color:rgba(0,0,0,.3)!important}.layui-nav-itemed>.layui-nav-child>.layui-this>.layui-nav-child{display:block}.layui-nav-tree.layui-bg-gray a,.layui-nav.layui-bg-gray .layui-nav-item a{color:#666!important;color:rgba(0,0,0,.8)!important}.layui-nav-tree.layui-bg-gray .layui-nav-itemed>.layui-nav-child{background:0 0!important}.layui-nav-tree.layui-bg-gray .layui-nav-child dd.layui-this,.layui-nav-tree.layui-bg-gray .layui-nav-child dd.layui-this a{background:0 0!important;color:#5FB878!important;font-weight:700}.layui-nav.layui-bg-gray .layui-nav-bar{background-color:#5FB878}.layui-nav-side{position:fixed;top:0;bottom:0;left:0;overflow-x:hidden;z-index:999}.layui-breadcrumb{font-size:0}.layui-breadcrumb>*{font-size:14px}.layui-breadcrumb a:hover{color:#5FB878!important}.layui-breadcrumb a cite{color:#999;font-style:normal}.layui-breadcrumb span[lay-separator]{margin:0 10px;color:#ccc}.layui-tab{margin:10px 0;text-align:left!important}.layui-tab[overflow]>.layui-tab-title{overflow:hidden}.layui-tab-title{position:relative;left:0;height:40px;white-space:nowrap;font-size:0;border-bottom-width:1px;border-bottom-style:solid;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;font-size:14px;transition:all .2s;-webkit-transition:all .2s;position:relative;line-height:40px;min-width:65px;padding:0 15px;text-align:center;cursor:pointer}.layui-tab-title li a{display:block;padding:0 15px;margin:0 -15px}.layui-tab-title .layui-this{color:#000}.layui-tab-title .layui-this:after{position:absolute;left:0;top:0;content:"";width:100%;height:41px;border-width:1px;border-style:solid;border-bottom-color:#fff;border-radius:2px 2px 0 0;box-sizing:border-box;pointer-events:none}.layui-tab-bar{position:absolute;right:0;top:0;z-index:10;width:30px;height:39px;line-height:39px;border-width:1px;border-style:solid;border-radius:2px;text-align:center;background-color:#fff;cursor:pointer}.layui-tab-bar .layui-icon{position:relative;display:inline-block;top:3px;transition:all .3s;-webkit-transition:all .3s}.layui-tab-item{display:none}.layui-tab-more{padding-right:30px;height:auto!important;white-space:normal!important}.layui-tab-more li.layui-this:after{border-bottom-color:#eee;border-radius:2px}.layui-tab-more .layui-tab-bar .layui-icon{top:-2px;top:3px\9;-webkit-transform:rotate(180deg);transform:rotate(180deg)}:root .layui-tab-more .layui-tab-bar .layui-icon{top:-2px\0/IE9}.layui-tab-content{padding:15px 0}.layui-tab-title li .layui-tab-close{position:relative;display:inline-block;width:18px;height:18px;line-height:20px;margin-left:8px;top:1px;text-align:center;font-size:14px;color:#c2c2c2;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li .layui-tab-close:hover{border-radius:2px;background-color:#FF5722;color:#fff}.layui-tab-brief>.layui-tab-title .layui-this{color:#009688}.layui-tab-brief>.layui-tab-more li.layui-this:after,.layui-tab-brief>.layui-tab-title .layui-this:after{border:none;border-radius:0;border-bottom:2px solid #5FB878}.layui-tab-brief[overflow]>.layui-tab-title .layui-this:after{top:-1px}.layui-tab-card{border-width:1px;border-style:solid;border-radius:2px;box-shadow:0 2px 5px 0 rgba(0,0,0,.1)}.layui-tab-card>.layui-tab-title{background-color:#FAFAFA}.layui-tab-card>.layui-tab-title li{margin-right:-1px;margin-left:-1px}.layui-tab-card>.layui-tab-title .layui-this{background-color:#fff}.layui-tab-card>.layui-tab-title .layui-this:after{border-top:none;border-width:1px;border-bottom-color:#fff}.layui-tab-card>.layui-tab-title .layui-tab-bar{height:40px;line-height:40px;border-radius:0;border-top:none;border-right:none}.layui-tab-card>.layui-tab-more .layui-this{background:0 0;color:#5FB878}.layui-tab-card>.layui-tab-more .layui-this:after{border:none}.layui-timeline{padding-left:5px}.layui-timeline-item{position:relative;padding-bottom:20px}.layui-timeline-axis{position:absolute;left:-5px;top:0;z-index:10;width:20px;height:20px;line-height:20px;background-color:#fff;color:#5FB878;border-radius:50%;text-align:center;cursor:pointer}.layui-timeline-axis:hover{color:#FF5722}.layui-timeline-item:before{content:"";position:absolute;left:5px;top:0;z-index:0;width:1px;height:100%}.layui-timeline-item:first-child:before{display:block}.layui-timeline-item:last-child:before{display:none}.layui-timeline-content{padding-left:25px}.layui-timeline-title{position:relative;margin-bottom:10px;line-height:22px}.layui-badge,.layui-badge-dot,.layui-badge-rim{position:relative;display:inline-block;padding:0 6px;font-size:12px;text-align:center;background-color:#FF5722;color:#fff;border-radius:2px}.layui-badge{height:18px;line-height:18px}.layui-badge-dot{width:8px;height:8px;padding:0;border-radius:50%}.layui-badge-rim{height:18px;line-height:18px;border-width:1px;border-style:solid;background-color:#fff;color:#666}.layui-btn .layui-badge,.layui-btn .layui-badge-dot{margin-left:5px}.layui-nav .layui-badge,.layui-nav .layui-badge-dot{position:absolute;top:50%;margin:-5px 6px 0}.layui-nav .layui-badge{margin-top:-10px}.layui-tab-title .layui-badge,.layui-tab-title .layui-badge-dot{left:5px;top:-2px}.layui-carousel{position:relative;left:0;top:0;background-color:#f8f8f8}.layui-carousel>[carousel-item]{position:relative;width:100%;height:100%;overflow:hidden}.layui-carousel>[carousel-item]:before{position:absolute;content:'\e63d';left:50%;top:50%;width:100px;line-height:20px;margin:-10px 0 0 -50px;text-align:center;color:#c2c2c2;font-family:layui-icon!important;font-size:30px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-carousel>[carousel-item]>*{display:none;position:absolute;left:0;top:0;width:100%;height:100%;background-color:#f8f8f8;transition-duration:.3s;-webkit-transition-duration:.3s}.layui-carousel-updown>*{-webkit-transition:.3s ease-in-out up;transition:.3s ease-in-out up}.layui-carousel-arrow{display:none\9;opacity:0;position:absolute;left:10px;top:50%;margin-top:-18px;width:36px;height:36px;line-height:36px;text-align:center;font-size:20px;border:0;border-radius:50%;background-color:rgba(0,0,0,.2);color:#fff;-webkit-transition-duration:.3s;transition-duration:.3s;cursor:pointer}.layui-carousel-arrow[lay-type=add]{left:auto!important;right:10px}.layui-carousel:hover .layui-carousel-arrow[lay-type=add],.layui-carousel[lay-arrow=always] .layui-carousel-arrow[lay-type=add]{right:20px}.layui-carousel[lay-arrow=always] .layui-carousel-arrow{opacity:1;left:20px}.layui-carousel[lay-arrow=none] .layui-carousel-arrow{display:none}.layui-carousel-arrow:hover,.layui-carousel-ind ul:hover{background-color:rgba(0,0,0,.35)}.layui-carousel:hover .layui-carousel-arrow{display:block\9;opacity:1;left:20px}.layui-carousel-ind{position:relative;top:-35px;width:100%;line-height:0!important;text-align:center;font-size:0}.layui-carousel[lay-indicator=outside]{margin-bottom:30px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind{top:10px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind ul{background-color:rgba(0,0,0,.5)}.layui-carousel[lay-indicator=none] .layui-carousel-ind{display:none}.layui-carousel-ind ul{display:inline-block;padding:5px;background-color:rgba(0,0,0,.2);border-radius:10px;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li{display:inline-block;width:10px;height:10px;margin:0 3px;font-size:14px;background-color:#eee;background-color:rgba(255,255,255,.5);border-radius:50%;cursor:pointer;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li:hover{background-color:rgba(255,255,255,.7)}.layui-carousel-ind li.layui-this{background-color:#fff}.layui-carousel>[carousel-item]>.layui-carousel-next,.layui-carousel>[carousel-item]>.layui-carousel-prev,.layui-carousel>[carousel-item]>.layui-this{display:block}.layui-carousel>[carousel-item]>.layui-this{left:0}.layui-carousel>[carousel-item]>.layui-carousel-prev{left:-100%}.layui-carousel>[carousel-item]>.layui-carousel-next{left:100%}.layui-carousel>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel>[carousel-item]>.layui-carousel-prev.layui-carousel-right{left:0}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-left{left:-100%}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-right{left:100%}.layui-carousel[lay-anim=updown] .layui-carousel-arrow{left:50%!important;top:20px;margin:0 0 0 -18px}.layui-carousel[lay-anim=updown]>[carousel-item]>*,.layui-carousel[lay-anim=fade]>[carousel-item]>*{left:0!important}.layui-carousel[lay-anim=updown] .layui-carousel-arrow[lay-type=add]{top:auto!important;bottom:20px}.layui-carousel[lay-anim=updown] .layui-carousel-ind{position:absolute;top:50%;right:20px;width:auto;height:auto}.layui-carousel[lay-anim=updown] .layui-carousel-ind ul{padding:3px 5px}.layui-carousel[lay-anim=updown] .layui-carousel-ind li{display:block;margin:6px 0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next{top:100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-left{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-right{top:100%}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev{opacity:0}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{opacity:1}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-right{opacity:0}.layui-fixbar{position:fixed;right:15px;bottom:15px;z-index:999999}.layui-fixbar li{width:50px;height:50px;line-height:50px;margin-bottom:1px;text-align:center;cursor:pointer;font-size:30px;background-color:#9F9F9F;color:#fff;border-radius:2px;opacity:.95}.layui-fixbar li:hover{opacity:.85}.layui-fixbar li:active{opacity:1}.layui-fixbar .layui-fixbar-top{display:none;font-size:40px}body .layui-util-face{border:none;background:0 0}body .layui-util-face .layui-layer-content{padding:0;background-color:#fff;color:#666;box-shadow:none}.layui-util-face .layui-layer-TipsG{display:none}.layui-transfer-active,.layui-transfer-box{display:inline-block;vertical-align:middle}.layui-util-face ul{position:relative;width:372px;padding:10px;border:1px solid #D9D9D9;background-color:#fff;box-shadow:0 0 20px rgba(0,0,0,.2)}.layui-util-face ul li{cursor:pointer;float:left;border:1px solid #e8e8e8;height:22px;width:26px;overflow:hidden;margin:-1px 0 0 -1px;padding:4px 2px;text-align:center}.layui-util-face ul li:hover{position:relative;z-index:2;border:1px solid #eb7350;background:#fff9ec}.layui-code{position:relative;margin:10px 0;padding:15px;line-height:20px;border:1px solid #eee;border-left-width:6px;background-color:#FAFAFA;color:#333;font-family:Courier New;font-size:12px}.layui-transfer-box,.layui-transfer-header,.layui-transfer-search{border-width:0;border-style:solid;border-color:#eee}.layui-transfer-box{position:relative;border-width:1px;width:200px;height:360px;border-radius:2px;background-color:#fff}.layui-transfer-box .layui-form-checkbox{width:100%;margin:0!important}.layui-transfer-header{height:38px;line-height:38px;padding:0 10px;border-bottom-width:1px}.layui-transfer-search{position:relative;padding:10px;border-bottom-width:1px}.layui-transfer-search .layui-input{height:32px;padding-left:30px;font-size:12px}.layui-transfer-search .layui-icon-search{position:absolute;left:20px;top:50%;margin-top:-8px;color:#666}.layui-transfer-active{margin:0 15px}.layui-transfer-active .layui-btn{display:block;margin:0;padding:0 15px;background-color:#5FB878;border-color:#5FB878;color:#fff}.layui-transfer-active .layui-btn-disabled{background-color:#FBFBFB;border-color:#eee;color:#d2d2d2}.layui-transfer-active .layui-btn:first-child{margin-bottom:15px}.layui-transfer-active .layui-btn .layui-icon{margin:0;font-size:14px!important}.layui-transfer-data{padding:5px 0;overflow:auto}.layui-transfer-data li{height:32px;line-height:32px;padding:0 10px}.layui-transfer-data li:hover{background-color:#F6F6F6;transition:.5s all}.layui-transfer-data .layui-none{padding:15px 10px;text-align:center;color:#999}.layui-rate,.layui-rate *{display:inline-block;vertical-align:middle}.layui-rate{padding:10px 5px 10px 0;font-size:0}.layui-rate li i.layui-icon{font-size:20px;color:#FFB800;margin-right:5px;transition:all .3s;-webkit-transition:all .3s}.layui-rate li i:hover{cursor:pointer;transform:scale(1.12);-webkit-transform:scale(1.12)}.layui-rate[readonly] li i:hover{cursor:default;transform:scale(1)}.layui-colorpicker{width:26px;height:26px;border:1px solid #eee;padding:5px;border-radius:2px;line-height:24px;display:inline-block;cursor:pointer;transition:all .3s;-webkit-transition:all .3s}.layui-colorpicker:hover{border-color:#d2d2d2}.layui-colorpicker.layui-colorpicker-lg{width:34px;height:34px;line-height:32px}.layui-colorpicker.layui-colorpicker-sm{width:24px;height:24px;line-height:22px}.layui-colorpicker.layui-colorpicker-xs{width:22px;height:22px;line-height:20px}.layui-colorpicker-trigger-bgcolor{display:block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);border-radius:2px}.layui-colorpicker-trigger-span{display:block;height:100%;box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:2px;text-align:center}.layui-colorpicker-trigger-i{display:inline-block;color:#FFF;font-size:12px}.layui-colorpicker-trigger-i.layui-icon-close{color:#999}.layui-colorpicker-main{position:absolute;left:-999999px;top:-999999px;z-index:66666666;width:280px;margin:5px 0;padding:7px;background:#FFF;border:1px solid #d2d2d2;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-colorpicker-main-wrapper{height:180px;position:relative}.layui-colorpicker-basis{width:260px;height:100%;position:relative}.layui-colorpicker-basis-white{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(90deg,#FFF,hsla(0,0%,100%,0))}.layui-colorpicker-basis-black{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(0deg,#000,transparent)}.layui-colorpicker-basis-cursor{width:10px;height:10px;border:1px solid #FFF;border-radius:50%;position:absolute;top:-3px;right:-3px;cursor:pointer}.layui-colorpicker-side{position:absolute;top:0;right:0;width:12px;height:100%;background:linear-gradient(red,#FF0,#0F0,#0FF,#00F,#F0F,red)}.layui-colorpicker-side-slider{width:100%;height:5px;box-shadow:0 0 1px #888;background:#FFF;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;left:0}.layui-colorpicker-main-alpha{display:none;height:12px;margin-top:7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-alpha-bgcolor{height:100%;position:relative}.layui-colorpicker-alpha-slider{width:5px;height:100%;box-shadow:0 0 1px #888;background:#FFF;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;top:0}.layui-colorpicker-main-pre{padding-top:7px;font-size:0}.layui-colorpicker-pre{width:20px;height:20px;border-radius:2px;display:inline-block;margin-left:6px;margin-bottom:7px;cursor:pointer}.layui-colorpicker-pre:nth-child(11n+1){margin-left:0}.layui-colorpicker-pre-isalpha{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-pre.layui-this{box-shadow:0 0 3px 2px rgba(0,0,0,.15)}.layui-colorpicker-pre>div{height:100%;border-radius:2px}.layui-colorpicker-main-input{text-align:right;padding-top:7px}.layui-colorpicker-main-input .layui-btn-container .layui-btn{margin:0 0 0 10px}.layui-colorpicker-main-input div.layui-inline{float:left;margin-right:10px;font-size:14px}.layui-colorpicker-main-input input.layui-input{width:150px;height:30px;color:#666}.layui-slider{height:4px;background:#eee;border-radius:3px;position:relative;cursor:pointer}.layui-slider-bar{border-radius:3px;position:absolute;height:100%}.layui-slider-step{position:absolute;top:0;width:4px;height:4px;border-radius:50%;background:#FFF;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.layui-slider-wrap{width:36px;height:36px;position:absolute;top:-16px;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:10;text-align:center}.layui-slider-wrap-btn{width:12px;height:12px;border-radius:50%;background:#FFF;display:inline-block;vertical-align:middle;cursor:pointer;transition:.3s}.layui-slider-wrap:after{content:"";height:100%;display:inline-block;vertical-align:middle}.layui-slider-wrap-btn.layui-slider-hover,.layui-slider-wrap-btn:hover{transform:scale(1.2)}.layui-slider-wrap-btn.layui-disabled:hover{transform:scale(1)!important}.layui-slider-tips{position:absolute;top:-42px;z-index:66666666;white-space:nowrap;display:none;-webkit-transform:translateX(-50%);transform:translateX(-50%);color:#FFF;background:#000;border-radius:3px;height:25px;line-height:25px;padding:0 10px}.layui-slider-tips:after{content:"";position:absolute;bottom:-12px;left:50%;margin-left:-6px;width:0;height:0;border-width:6px;border-style:solid;border-color:#000 transparent transparent}.layui-slider-input{width:70px;height:32px;border:1px solid #eee;border-radius:3px;font-size:16px;line-height:32px;position:absolute;right:0;top:-14px}.layui-slider-input-btn{position:absolute;top:0;right:0;width:20px;height:100%;border-left:1px solid #eee}.layui-slider-input-btn i{cursor:pointer;position:absolute;right:0;bottom:0;width:20px;height:50%;font-size:12px;line-height:16px;text-align:center;color:#999}.layui-slider-input-btn i:first-child{top:0;border-bottom:1px solid #eee}.layui-slider-input-txt{height:100%;font-size:14px}.layui-slider-input-txt input{height:100%;border:none}.layui-slider-input-btn i:hover{color:#009688}.layui-slider-vertical{width:4px;margin-left:33px}.layui-slider-vertical .layui-slider-bar{width:4px}.layui-slider-vertical .layui-slider-step{top:auto;left:0;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-wrap{top:auto;left:-16px;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-tips{top:auto;left:2px}@media \0screen{.layui-slider-wrap-btn{margin-left:-20px}.layui-slider-vertical .layui-slider-wrap-btn{margin-left:0;margin-bottom:-20px}.layui-slider-vertical .layui-slider-tips{margin-left:-8px}.layui-slider>span{margin-left:8px}}.layui-tree{line-height:22px}.layui-tree .layui-form-checkbox{margin:0!important}.layui-tree-set{width:100%;position:relative}.layui-tree-pack{display:none;padding-left:20px;position:relative}.layui-tree-iconClick,.layui-tree-main{display:inline-block;vertical-align:middle}.layui-tree-line .layui-tree-pack{padding-left:27px}.layui-tree-line .layui-tree-set .layui-tree-set:after{content:"";position:absolute;top:14px;left:-9px;width:17px;height:0;border-top:1px dotted #c0c4cc}.layui-tree-entry{position:relative;padding:3px 0;height:20px;white-space:nowrap}.layui-tree-entry:hover{background-color:#eee}.layui-tree-line .layui-tree-entry:hover{background-color:rgba(0,0,0,0)}.layui-tree-line .layui-tree-entry:hover .layui-tree-txt{color:#999;text-decoration:underline;transition:.3s}.layui-tree-main{cursor:pointer;padding-right:10px}.layui-tree-line .layui-tree-set:before{content:"";position:absolute;top:0;left:-9px;width:0;height:100%;border-left:1px dotted #c0c4cc}.layui-tree-line .layui-tree-set.layui-tree-setLineShort:before{height:13px}.layui-tree-line .layui-tree-set.layui-tree-setHide:before{height:0}.layui-tree-iconClick{position:relative;height:20px;line-height:20px;margin:0 10px;color:#c0c4cc}.layui-tree-icon{height:12px;line-height:12px;width:12px;text-align:center;border:1px solid #c0c4cc}.layui-tree-iconClick .layui-icon{font-size:18px}.layui-tree-icon .layui-icon{font-size:12px;color:#666}.layui-tree-iconArrow{padding:0 5px}.layui-tree-iconArrow:after{content:"";position:absolute;left:4px;top:3px;z-index:100;width:0;height:0;border-width:5px;border-style:solid;border-color:transparent transparent transparent #c0c4cc;transition:.5s}.layui-tree-btnGroup,.layui-tree-editInput{position:relative;vertical-align:middle;display:inline-block}.layui-tree-spread>.layui-tree-entry>.layui-tree-iconClick>.layui-tree-iconArrow:after{transform:rotate(90deg) translate(3px,4px)}.layui-tree-txt{display:inline-block;vertical-align:middle;color:#555}.layui-tree-search{margin-bottom:15px;color:#666}.layui-tree-btnGroup .layui-icon{display:inline-block;vertical-align:middle;padding:0 2px;cursor:pointer}.layui-tree-btnGroup .layui-icon:hover{color:#999;transition:.3s}.layui-tree-entry:hover .layui-tree-btnGroup{visibility:visible}.layui-tree-editInput{height:20px;line-height:20px;padding:0 3px;border:none;background-color:rgba(0,0,0,.05)}.layui-tree-emptyText{text-align:center;color:#999}.layui-anim{-webkit-animation-duration:.3s;-webkit-animation-fill-mode:both;animation-duration:.3s;animation-fill-mode:both}.layui-anim.layui-icon{display:inline-block}.layui-anim-loop{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.layui-trans,.layui-trans a{transition:all .2s;-webkit-transition:all .2s}@-webkit-keyframes layui-rotate{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@keyframes layui-rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}.layui-anim-rotate{-webkit-animation-name:layui-rotate;animation-name:layui-rotate;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes layui-up{from{-webkit-transform:translate3d(0,100%,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-up{from{transform:translate3d(0,100%,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-up{-webkit-animation-name:layui-up;animation-name:layui-up}@-webkit-keyframes layui-upbit{from{-webkit-transform:translate3d(0,15px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-upbit{from{transform:translate3d(0,15px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-upbit{-webkit-animation-name:layui-upbit;animation-name:layui-upbit}@keyframes layui-down{0%{opacity:.3;transform:translate3d(0,-100%,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.layui-anim-down{animation-name:layui-down}@keyframes layui-downbit{0%{opacity:.3;transform:translate3d(0,-5px,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.layui-anim-downbit{animation-name:layui-downbit}@-webkit-keyframes layui-scale{0%{opacity:.3;-webkit-transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale{0%{opacity:.3;-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-ms-transform:scale(1);transform:scale(1)}}.layui-anim-scale{-webkit-animation-name:layui-scale;animation-name:layui-scale}@-webkit-keyframes layui-scale-spring{0%{opacity:.5;-webkit-transform:scale(.5)}80%{opacity:.8;-webkit-transform:scale(1.1)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale-spring{0%{opacity:.5;transform:scale(.5)}80%{opacity:.8;transform:scale(1.1)}100%{opacity:1;transform:scale(1)}}.layui-anim-scaleSpring{-webkit-animation-name:layui-scale-spring;animation-name:layui-scale-spring}@keyframes layui-scalesmall{0%{opacity:.3;transform:scale(1.5)}100%{opacity:1;transform:scale(1)}}.layui-anim-scalesmall{animation-name:layui-scalesmall}@keyframes layui-scalesmall-spring{0%{opacity:.3;transform:scale(1.5)}80%{opacity:.8;transform:scale(.9)}100%{opacity:1;transform:scale(1)}}.layui-anim-scalesmall-spring{animation-name:layui-scalesmall-spring}@-webkit-keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}@keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}.layui-anim-fadein{-webkit-animation-name:layui-fadein;animation-name:layui-fadein}@-webkit-keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}.layui-anim-fadeout{-webkit-animation-name:layui-fadeout;animation-name:layui-fadeout}
\ No newline at end of file
+blockquote,body,button,dd,div,dl,dt,form,h1,h2,h3,h4,h5,h6,input,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}a:active,a:hover{outline:0}img{display:inline-block;border:none;vertical-align:middle}li{list-style:none}table{border-collapse:collapse;border-spacing:0}h1,h2,h3{font-weight:400}h4,h5,h6{font-size:100%;font-weight:400}button,input,select,textarea{font-size:100%}button,input,optgroup,option,select,textarea{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;outline:0}pre{white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word}body{line-height:1.6;color:#333;color:rgba(0,0,0,.85);font:14px Helvetica Neue,Helvetica,PingFang SC,Tahoma,Arial,sans-serif}hr{height:0;line-height:0;margin:10px 0;padding:0;border:none!important;border-bottom:1px solid #eee!important;clear:both;overflow:hidden;background:0 0}a{color:#333;text-decoration:none}a:hover{color:#777}a cite{font-style:normal;*cursor:pointer}.layui-border-box,.layui-border-box *{box-sizing:border-box}.layui-box,.layui-box *{box-sizing:content-box}.layui-clear{clear:both;*zoom:1}.layui-clear:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-inline{position:relative;display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.layui-edge{position:relative;display:inline-block;vertical-align:middle;width:0;height:0;border-width:6px;border-style:dashed;border-color:transparent;overflow:hidden}.layui-edge-top{top:-4px;border-bottom-color:#999;border-bottom-style:solid}.layui-edge-right{border-left-color:#999;border-left-style:solid}.layui-edge-bottom{top:2px;border-top-color:#999;border-top-style:solid}.layui-edge-left{border-right-color:#999;border-right-style:solid}.layui-elip{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-disabled,.layui-icon,.layui-unselect{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-disabled,.layui-disabled:hover{color:#d2d2d2!important;cursor:not-allowed!important}.layui-circle{border-radius:100%}.layui-show{display:block!important}.layui-hide{display:none!important}.layui-show-v{visibility:visible!important}.layui-hide-v{visibility:hidden!important}@font-face{font-family:layui-icon;src:url(../font/iconfont.eot?v=256);src:url(../font/iconfont.eot?v=256#iefix) format('embedded-opentype'),url(../font/iconfont.woff2?v=256) format('woff2'),url(../font/iconfont.woff?v=256) format('woff'),url(../font/iconfont.ttf?v=256) format('truetype'),url(../font/iconfont.svg?v=256#layui-icon) format('svg')}.layui-icon{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-icon-eye:before{content:"\e695"}.layui-icon-eye-invisible:before{content:"\e696"}.layui-icon-backspace:before{content:"\e694"}.layui-icon-help-circle:before{content:"\e77c"}.layui-icon-tips-fill:before{content:"\eb2e"}.layui-icon-test:before{content:"\e692"}.layui-icon-clear:before{content:"\e788"}.layui-icon-heart-fill:before{content:"\e68f"}.layui-icon-light:before{content:"\e748"}.layui-icon-music:before{content:"\e690"}.layui-icon-time:before{content:"\e68d"}.layui-icon-ie:before{content:"\e7bb"}.layui-icon-firefox:before{content:"\e686"}.layui-icon-at:before{content:"\e687"}.layui-icon-bluetooth:before{content:"\e689"}.layui-icon-chrome:before{content:"\e68a"}.layui-icon-edge:before{content:"\e68b"}.layui-icon-heart:before{content:"\e68c"}.layui-icon-key:before{content:"\e683"}.layui-icon-android:before{content:"\e684"}.layui-icon-mike:before{content:"\e6dc"}.layui-icon-mute:before{content:"\e685"}.layui-icon-gift:before{content:"\e627"}.layui-icon-windows:before{content:"\e67f"}.layui-icon-ios:before{content:"\e680"}.layui-icon-logout:before{content:"\e682"}.layui-icon-wifi:before{content:"\e7e0"}.layui-icon-rss:before{content:"\e808"}.layui-icon-email:before{content:"\e618"}.layui-icon-reduce-circle:before{content:"\e616"}.layui-icon-transfer:before{content:"\e691"}.layui-icon-service:before{content:"\e626"}.layui-icon-addition:before{content:"\e624"}.layui-icon-subtraction:before{content:"\e67e"}.layui-icon-slider:before{content:"\e714"}.layui-icon-print:before{content:"\e66d"}.layui-icon-export:before{content:"\e67d"}.layui-icon-cols:before{content:"\e610"}.layui-icon-screen-full:before{content:"\e622"}.layui-icon-screen-restore:before{content:"\e758"}.layui-icon-rate-half:before{content:"\e6c9"}.layui-icon-rate-solid:before{content:"\e67a"}.layui-icon-rate:before{content:"\e67b"}.layui-icon-cellphone:before{content:"\e678"}.layui-icon-vercode:before{content:"\e679"}.layui-icon-login-weibo:before{content:"\e675"}.layui-icon-login-qq:before{content:"\e676"}.layui-icon-login-wechat:before{content:"\e677"}.layui-icon-username:before{content:"\e66f"}.layui-icon-password:before{content:"\e673"}.layui-icon-refresh-3:before{content:"\e9aa"}.layui-icon-auz:before{content:"\e672"}.layui-icon-shrink-right:before{content:"\e668"}.layui-icon-spread-left:before{content:"\e66b"}.layui-icon-snowflake:before{content:"\e6b1"}.layui-icon-tips:before{content:"\e702"}.layui-icon-note:before{content:"\e66e"}.layui-icon-senior:before{content:"\e674"}.layui-icon-refresh-1:before{content:"\e666"}.layui-icon-refresh:before{content:"\e669"}.layui-icon-flag:before{content:"\e66c"}.layui-icon-theme:before{content:"\e66a"}.layui-icon-notice:before{content:"\e667"}.layui-icon-console:before{content:"\e665"}.layui-icon-website:before{content:"\e7ae"}.layui-icon-face-surprised:before{content:"\e664"}.layui-icon-set:before{content:"\e716"}.layui-icon-template:before{content:"\e663"}.layui-icon-app:before{content:"\e653"}.layui-icon-template-1:before{content:"\e656"}.layui-icon-home:before{content:"\e68e"}.layui-icon-female:before{content:"\e661"}.layui-icon-male:before{content:"\e662"}.layui-icon-tread:before{content:"\e6c5"}.layui-icon-praise:before{content:"\e6c6"}.layui-icon-rmb:before{content:"\e65e"}.layui-icon-more:before{content:"\e65f"}.layui-icon-camera:before{content:"\e660"}.layui-icon-cart-simple:before{content:"\e698"}.layui-icon-face-cry:before{content:"\e69c"}.layui-icon-face-smile:before{content:"\e6af"}.layui-icon-survey:before{content:"\e6b2"}.layui-icon-read:before{content:"\e705"}.layui-icon-location:before{content:"\e715"}.layui-icon-dollar:before{content:"\e659"}.layui-icon-diamond:before{content:"\e735"}.layui-icon-return:before{content:"\e65c"}.layui-icon-camera-fill:before{content:"\e65d"}.layui-icon-fire:before{content:"\e756"}.layui-icon-more-vertical:before{content:"\e671"}.layui-icon-cart:before{content:"\e657"}.layui-icon-star-fill:before{content:"\e658"}.layui-icon-prev:before{content:"\e65a"}.layui-icon-next:before{content:"\e65b"}.layui-icon-upload:before{content:"\e67c"}.layui-icon-upload-drag:before{content:"\e681"}.layui-icon-user:before{content:"\e770"}.layui-icon-file-b:before{content:"\e655"}.layui-icon-component:before{content:"\e857"}.layui-icon-find-fill:before{content:"\e670"}.layui-icon-loading:before{content:"\e63d"}.layui-icon-loading-1:before{content:"\e63e"}.layui-icon-add-1:before{content:"\e654"}.layui-icon-pause:before{content:"\e651"}.layui-icon-play:before{content:"\e652"}.layui-icon-video:before{content:"\e6ed"}.layui-icon-headset:before{content:"\e6fc"}.layui-icon-voice:before{content:"\e688"}.layui-icon-speaker:before{content:"\e645"}.layui-icon-fonts-del:before{content:"\e64f"}.layui-icon-fonts-html:before{content:"\e64b"}.layui-icon-fonts-code:before{content:"\e64e"}.layui-icon-fonts-strong:before{content:"\e62b"}.layui-icon-unlink:before{content:"\e64d"}.layui-icon-picture:before{content:"\e64a"}.layui-icon-link:before{content:"\e64c"}.layui-icon-face-smile-b:before{content:"\e650"}.layui-icon-align-center:before{content:"\e647"}.layui-icon-align-right:before{content:"\e648"}.layui-icon-align-left:before{content:"\e649"}.layui-icon-fonts-u:before{content:"\e646"}.layui-icon-fonts-i:before{content:"\e644"}.layui-icon-tabs:before{content:"\e62a"}.layui-icon-circle:before{content:"\e63f"}.layui-icon-radio:before{content:"\e643"}.layui-icon-share:before{content:"\e641"}.layui-icon-edit:before{content:"\e642"}.layui-icon-delete:before{content:"\e640"}.layui-icon-engine:before{content:"\e628"}.layui-icon-chart-screen:before{content:"\e629"}.layui-icon-chart:before{content:"\e62c"}.layui-icon-table:before{content:"\e62d"}.layui-icon-tree:before{content:"\e62e"}.layui-icon-upload-circle:before{content:"\e62f"}.layui-icon-templeate-1:before{content:"\e630"}.layui-icon-util:before{content:"\e631"}.layui-icon-layouts:before{content:"\e632"}.layui-icon-prev-circle:before{content:"\e633"}.layui-icon-carousel:before{content:"\e634"}.layui-icon-code-circle:before{content:"\e635"}.layui-icon-water:before{content:"\e636"}.layui-icon-date:before{content:"\e637"}.layui-icon-layer:before{content:"\e638"}.layui-icon-fonts-clear:before{content:"\e639"}.layui-icon-dialogue:before{content:"\e63a"}.layui-icon-cellphone-fine:before{content:"\e63b"}.layui-icon-form:before{content:"\e63c"}.layui-icon-file:before{content:"\e621"}.layui-icon-triangle-r:before{content:"\e623"}.layui-icon-triangle-d:before{content:"\e625"}.layui-icon-set-sm:before{content:"\e620"}.layui-icon-add-circle:before{content:"\e61f"}.layui-icon-layim-download:before{content:"\e61e"}.layui-icon-layim-uploadfile:before{content:"\e61d"}.layui-icon-404:before{content:"\e61c"}.layui-icon-about:before{content:"\e60b"}.layui-icon-layim-theme:before{content:"\e61b"}.layui-icon-down:before{content:"\e61a"}.layui-icon-up:before{content:"\e619"}.layui-icon-circle-dot:before{content:"\e617"}.layui-icon-set-fill:before{content:"\e614"}.layui-icon-search:before{content:"\e615"}.layui-icon-friends:before{content:"\e612"}.layui-icon-group:before{content:"\e613"}.layui-icon-reply-fill:before{content:"\e611"}.layui-icon-menu-fill:before{content:"\e60f"}.layui-icon-face-smile-fine:before{content:"\e60c"}.layui-icon-picture-fine:before{content:"\e60d"}.layui-icon-log:before{content:"\e60e"}.layui-icon-list:before{content:"\e60a"}.layui-icon-release:before{content:"\e609"}.layui-icon-add-circle-fine:before{content:"\e608"}.layui-icon-ok:before{content:"\e605"}.layui-icon-help:before{content:"\e607"}.layui-icon-chat:before{content:"\e606"}.layui-icon-top:before{content:"\e604"}.layui-icon-right:before{content:"\e602"}.layui-icon-left:before{content:"\e603"}.layui-icon-star:before{content:"\e600"}.layui-icon-download-circle:before{content:"\e601"}.layui-icon-close:before{content:"\1006"}.layui-icon-close-fill:before{content:"\1007"}.layui-icon-ok-circle:before{content:"\1005"}.layui-main{position:relative;width:1160px;margin:0 auto}.layui-header{position:relative;z-index:1000;height:60px}.layui-header a:hover{transition:all .5s;-webkit-transition:all .5s}.layui-side{position:fixed;left:0;top:0;bottom:0;z-index:999;width:200px;overflow-x:hidden}.layui-side-scroll{position:relative;width:220px;height:100%;overflow-x:hidden}.layui-body{position:relative;left:200px;right:0;top:0;bottom:0;z-index:900;width:auto;box-sizing:border-box}.layui-layout-body{overflow-x:hidden}.layui-layout-admin .layui-header{position:fixed;top:0;left:0;right:0;background-color:#23262e}.layui-layout-admin .layui-side{top:60px;width:200px;overflow-x:hidden}.layui-layout-admin .layui-body{position:absolute;top:60px;padding-bottom:44px}.layui-layout-admin .layui-main{width:auto;margin:0 15px}.layui-layout-admin .layui-footer{position:fixed;left:200px;right:0;bottom:0;z-index:990;height:44px;line-height:44px;padding:0 15px;box-shadow:-1px 0 4px rgb(0 0 0 / 12%);background-color:#fafafa}.layui-layout-admin .layui-logo{position:absolute;left:0;top:0;width:200px;height:100%;line-height:60px;text-align:center;color:#009688;font-size:16px;box-shadow:0 1px 2px 0 rgb(0 0 0 / 15%)}.layui-layout-admin .layui-header .layui-nav{background:0 0}.layui-layout-left{position:absolute!important;left:200px;top:0}.layui-layout-right{position:absolute!important;right:0;top:0}.layui-container{position:relative;margin:0 auto;box-sizing:border-box}.layui-fluid{position:relative;margin:0 auto;padding:0 15px}.layui-row:after,.layui-row:before{content:"";display:block;clear:both}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9,.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9,.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9,.layui-col-xl1,.layui-col-xl10,.layui-col-xl11,.layui-col-xl12,.layui-col-xl2,.layui-col-xl3,.layui-col-xl4,.layui-col-xl5,.layui-col-xl6,.layui-col-xl7,.layui-col-xl8,.layui-col-xl9,.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{position:relative;display:block;box-sizing:border-box}.layui-col-xs1,.layui-col-xs10,.layui-col-xs11,.layui-col-xs12,.layui-col-xs2,.layui-col-xs3,.layui-col-xs4,.layui-col-xs5,.layui-col-xs6,.layui-col-xs7,.layui-col-xs8,.layui-col-xs9{float:left}.layui-col-xs1{width:8.33333333%}.layui-col-xs2{width:16.66666667%}.layui-col-xs3{width:25%}.layui-col-xs4{width:33.33333333%}.layui-col-xs5{width:41.66666667%}.layui-col-xs6{width:50%}.layui-col-xs7{width:58.33333333%}.layui-col-xs8{width:66.66666667%}.layui-col-xs9{width:75%}.layui-col-xs10{width:83.33333333%}.layui-col-xs11{width:91.66666667%}.layui-col-xs12{width:100%}.layui-col-xs-offset1{margin-left:8.33333333%}.layui-col-xs-offset2{margin-left:16.66666667%}.layui-col-xs-offset3{margin-left:25%}.layui-col-xs-offset4{margin-left:33.33333333%}.layui-col-xs-offset5{margin-left:41.66666667%}.layui-col-xs-offset6{margin-left:50%}.layui-col-xs-offset7{margin-left:58.33333333%}.layui-col-xs-offset8{margin-left:66.66666667%}.layui-col-xs-offset9{margin-left:75%}.layui-col-xs-offset10{margin-left:83.33333333%}.layui-col-xs-offset11{margin-left:91.66666667%}.layui-col-xs-offset12{margin-left:100%}@media screen and (max-width:767.98px){.layui-container{padding:0 15px}.layui-hide-xs{display:none!important}.layui-show-xs-block{display:block!important}.layui-show-xs-inline{display:inline!important}.layui-show-xs-inline-block{display:inline-block!important}}@media screen and (min-width:768px){.layui-container{width:720px}.layui-hide-sm{display:none!important}.layui-show-sm-block{display:block!important}.layui-show-sm-inline{display:inline!important}.layui-show-sm-inline-block{display:inline-block!important}.layui-col-sm1,.layui-col-sm10,.layui-col-sm11,.layui-col-sm12,.layui-col-sm2,.layui-col-sm3,.layui-col-sm4,.layui-col-sm5,.layui-col-sm6,.layui-col-sm7,.layui-col-sm8,.layui-col-sm9{float:left}.layui-col-sm1{width:8.33333333%}.layui-col-sm2{width:16.66666667%}.layui-col-sm3{width:25%}.layui-col-sm4{width:33.33333333%}.layui-col-sm5{width:41.66666667%}.layui-col-sm6{width:50%}.layui-col-sm7{width:58.33333333%}.layui-col-sm8{width:66.66666667%}.layui-col-sm9{width:75%}.layui-col-sm10{width:83.33333333%}.layui-col-sm11{width:91.66666667%}.layui-col-sm12{width:100%}.layui-col-sm-offset1{margin-left:8.33333333%}.layui-col-sm-offset2{margin-left:16.66666667%}.layui-col-sm-offset3{margin-left:25%}.layui-col-sm-offset4{margin-left:33.33333333%}.layui-col-sm-offset5{margin-left:41.66666667%}.layui-col-sm-offset6{margin-left:50%}.layui-col-sm-offset7{margin-left:58.33333333%}.layui-col-sm-offset8{margin-left:66.66666667%}.layui-col-sm-offset9{margin-left:75%}.layui-col-sm-offset10{margin-left:83.33333333%}.layui-col-sm-offset11{margin-left:91.66666667%}.layui-col-sm-offset12{margin-left:100%}}@media screen and (min-width:992px){.layui-container{width:960px}.layui-hide-md{display:none!important}.layui-show-md-block{display:block!important}.layui-show-md-inline{display:inline!important}.layui-show-md-inline-block{display:inline-block!important}.layui-col-md1,.layui-col-md10,.layui-col-md11,.layui-col-md12,.layui-col-md2,.layui-col-md3,.layui-col-md4,.layui-col-md5,.layui-col-md6,.layui-col-md7,.layui-col-md8,.layui-col-md9{float:left}.layui-col-md1{width:8.33333333%}.layui-col-md2{width:16.66666667%}.layui-col-md3{width:25%}.layui-col-md4{width:33.33333333%}.layui-col-md5{width:41.66666667%}.layui-col-md6{width:50%}.layui-col-md7{width:58.33333333%}.layui-col-md8{width:66.66666667%}.layui-col-md9{width:75%}.layui-col-md10{width:83.33333333%}.layui-col-md11{width:91.66666667%}.layui-col-md12{width:100%}.layui-col-md-offset1{margin-left:8.33333333%}.layui-col-md-offset2{margin-left:16.66666667%}.layui-col-md-offset3{margin-left:25%}.layui-col-md-offset4{margin-left:33.33333333%}.layui-col-md-offset5{margin-left:41.66666667%}.layui-col-md-offset6{margin-left:50%}.layui-col-md-offset7{margin-left:58.33333333%}.layui-col-md-offset8{margin-left:66.66666667%}.layui-col-md-offset9{margin-left:75%}.layui-col-md-offset10{margin-left:83.33333333%}.layui-col-md-offset11{margin-left:91.66666667%}.layui-col-md-offset12{margin-left:100%}}@media screen and (min-width:1200px){.layui-container{width:1150px}.layui-hide-lg{display:none!important}.layui-show-lg-block{display:block!important}.layui-show-lg-inline{display:inline!important}.layui-show-lg-inline-block{display:inline-block!important}.layui-col-lg1,.layui-col-lg10,.layui-col-lg11,.layui-col-lg12,.layui-col-lg2,.layui-col-lg3,.layui-col-lg4,.layui-col-lg5,.layui-col-lg6,.layui-col-lg7,.layui-col-lg8,.layui-col-lg9{float:left}.layui-col-lg1{width:8.33333333%}.layui-col-lg2{width:16.66666667%}.layui-col-lg3{width:25%}.layui-col-lg4{width:33.33333333%}.layui-col-lg5{width:41.66666667%}.layui-col-lg6{width:50%}.layui-col-lg7{width:58.33333333%}.layui-col-lg8{width:66.66666667%}.layui-col-lg9{width:75%}.layui-col-lg10{width:83.33333333%}.layui-col-lg11{width:91.66666667%}.layui-col-lg12{width:100%}.layui-col-lg-offset1{margin-left:8.33333333%}.layui-col-lg-offset2{margin-left:16.66666667%}.layui-col-lg-offset3{margin-left:25%}.layui-col-lg-offset4{margin-left:33.33333333%}.layui-col-lg-offset5{margin-left:41.66666667%}.layui-col-lg-offset6{margin-left:50%}.layui-col-lg-offset7{margin-left:58.33333333%}.layui-col-lg-offset8{margin-left:66.66666667%}.layui-col-lg-offset9{margin-left:75%}.layui-col-lg-offset10{margin-left:83.33333333%}.layui-col-lg-offset11{margin-left:91.66666667%}.layui-col-lg-offset12{margin-left:100%}}@media screen and (min-width:1400px){.layui-container{width:1330px}.layui-hide-xl{display:none!important}.layui-show-xl-block{display:block!important}.layui-show-xl-inline{display:inline!important}.layui-show-xl-inline-block{display:inline-block!important}.layui-col-xl1,.layui-col-xl10,.layui-col-xl11,.layui-col-xl12,.layui-col-xl2,.layui-col-xl3,.layui-col-xl4,.layui-col-xl5,.layui-col-xl6,.layui-col-xl7,.layui-col-xl8,.layui-col-xl9{float:left}.layui-col-xl1{width:8.33333333%}.layui-col-xl2{width:16.66666667%}.layui-col-xl3{width:25%}.layui-col-xl4{width:33.33333333%}.layui-col-xl5{width:41.66666667%}.layui-col-xl6{width:50%}.layui-col-xl7{width:58.33333333%}.layui-col-xl8{width:66.66666667%}.layui-col-xl9{width:75%}.layui-col-xl10{width:83.33333333%}.layui-col-xl11{width:91.66666667%}.layui-col-xl12{width:100%}.layui-col-xl-offset1{margin-left:8.33333333%}.layui-col-xl-offset2{margin-left:16.66666667%}.layui-col-xl-offset3{margin-left:25%}.layui-col-xl-offset4{margin-left:33.33333333%}.layui-col-xl-offset5{margin-left:41.66666667%}.layui-col-xl-offset6{margin-left:50%}.layui-col-xl-offset7{margin-left:58.33333333%}.layui-col-xl-offset8{margin-left:66.66666667%}.layui-col-xl-offset9{margin-left:75%}.layui-col-xl-offset10{margin-left:83.33333333%}.layui-col-xl-offset11{margin-left:91.66666667%}.layui-col-xl-offset12{margin-left:100%}}.layui-col-space1{margin:-.5px}.layui-col-space1>*{padding:.5px}.layui-col-space2{margin:-1px}.layui-col-space2>*{padding:1px}.layui-col-space4{margin:-2px}.layui-col-space4>*{padding:2px}.layui-col-space5{margin:-2.5px}.layui-col-space5>*{padding:2.5px}.layui-col-space6{margin:-3px}.layui-col-space6>*{padding:3px}.layui-col-space8{margin:-4px}.layui-col-space8>*{padding:4px}.layui-col-space10{margin:-5px}.layui-col-space10>*{padding:5px}.layui-col-space12{margin:-6px}.layui-col-space12>*{padding:6px}.layui-col-space14{margin:-7px}.layui-col-space14>*{padding:7px}.layui-col-space15{margin:-7.5px}.layui-col-space15>*{padding:7.5px}.layui-col-space16{margin:-8px}.layui-col-space16>*{padding:8px}.layui-col-space18{margin:-9px}.layui-col-space18>*{padding:9px}.layui-col-space20{margin:-10px}.layui-col-space20>*{padding:10px}.layui-col-space22{margin:-11px}.layui-col-space22>*{padding:11px}.layui-col-space24{margin:-12px}.layui-col-space24>*{padding:12px}.layui-col-space25{margin:-12.5px}.layui-col-space25>*{padding:12.5px}.layui-col-space26{margin:-13px}.layui-col-space26>*{padding:13px}.layui-col-space28{margin:-14px}.layui-col-space28>*{padding:14px}.layui-col-space30{margin:-15px}.layui-col-space30>*{padding:15px}.layui-col-space32{margin:-15px}.layui-col-space32>*{padding:15px}.layui-btn,.layui-input,.layui-select,.layui-textarea,.layui-upload-button{outline:0;-webkit-appearance:none;transition:all .3s;-webkit-transition:all .3s;box-sizing:border-box}.layui-elem-quote{margin-bottom:10px;padding:15px;line-height:1.6;border-left:5px solid #2D8CF0;border-radius:0 2px 2px 0;background-color:#fafafa}.layui-quote-nm{border-style:solid;border-width:1px;border-left-width:5px;background:0 0}.layui-elem-field{margin-bottom:10px;padding:0;border-width:1px;border-style:solid}.layui-elem-field legend{margin-left:20px;padding:0 10px;font-size:20px;font-weight:300}.layui-field-title{margin:10px 0 20px;border-width:0;border-top-width:1px}.layui-field-box{padding:15px}.layui-field-title .layui-field-box{padding:10px 0}.layui-progress{position:relative;height:6px;border-radius:20px;background-color:#eee}.layui-progress-bar{position:absolute;left:0;top:0;width:0;max-width:100%;height:6px;border-radius:20px;text-align:right;background-color:#2D8CF0;transition:all .3s;-webkit-transition:all .3s}.layui-progress-big,.layui-progress-big .layui-progress-bar{height:18px;line-height:18px}.layui-progress-text{position:relative;top:-20px;line-height:18px;font-size:12px;color:#5f5f5f}.layui-progress-big .layui-progress-text{position:static;padding:0 10px;color:#fff}.layui-collapse{border-width:1px;border-style:solid;border-radius:2px}.layui-colla-content,.layui-colla-item{border-top-width:1px;border-top-style:solid}.layui-colla-item:first-child{border-top:none}.layui-colla-title{position:relative;height:42px;line-height:42px;padding:0 15px 0 35px;color:#333;background-color:#fafafa;cursor:pointer;font-size:14px;overflow:hidden}.layui-colla-content{display:none;padding:10px 15px;line-height:1.6;color:#5f5f5f}.layui-colla-icon{position:absolute;left:15px;top:0;font-size:14px}.layui-card{margin-bottom:15px;border-radius:2px;background-color:#fff;box-shadow:0 1px 2px 0 rgba(0,0,0,.05)}.layui-card:last-child{margin-bottom:0}.layui-card-header{position:relative;height:42px;line-height:42px;padding:0 15px;border-bottom:1px solid #f6f6f6;color:#333;border-radius:2px 2px 0 0;font-size:14px}.layui-card-body{position:relative;padding:10px 15px;line-height:24px}.layui-card-body[pad15]{padding:15px}.layui-card-body[pad20]{padding:20px}.layui-card-body .layui-table{margin:5px 0}.layui-card .layui-tab{margin:0}.layui-panel{position:relative;border-width:1px;border-style:solid;border-radius:2px;box-shadow:1px 1px 4px rgb(0 0 0 / 8%);background-color:#fff;color:#5f5f5f}.layui-panel-window{position:relative;padding:15px;border-radius:0;border-top:5px solid #eee;background-color:#fff}.layui-auxiliar-moving{position:fixed;left:0;right:0;top:0;bottom:0;width:100%;height:100%;background:0 0;z-index:9999999999}.layui-bg-red{background-color:#ff5722!important;color:#fff!important}.layui-bg-orange{background-color:#ffb800!important;color:#fff!important}.layui-bg-green{background-color:#009688!important;color:#fff!important}.layui-bg-cyan{background-color:#2f4056!important;color:#fff!important}.layui-bg-blue{background-color:#1e9fff!important;color:#fff!important}.layui-bg-black{background-color:#393d49!important;color:#fff!important}.layui-bg-gray{background-color:#fafafa!important;color:#5f5f5f!important}.layui-badge-rim,.layui-border,.layui-colla-content,.layui-colla-item,.layui-collapse,.layui-elem-field,.layui-form-pane .layui-form-item[pane],.layui-form-pane .layui-form-label,.layui-input,.layui-input-split,.layui-panel,.layui-quote-nm,.layui-select,.layui-tab-bar,.layui-tab-card,.layui-tab-title,.layui-tab-title .layui-this:after,.layui-textarea{border-color:#eee}.layui-border{border-width:1px;border-style:solid;color:#5f5f5f!important}.layui-border-red{border-width:1px;border-style:solid;border-color:#ff5722!important;color:#ff5722!important}.layui-border-orange{border-width:1px;border-style:solid;border-color:#ffb800!important;color:#ffb800!important}.layui-border-green{border-width:1px;border-style:solid;border-color:#009688!important;color:#009688!important}.layui-border-cyan{border-width:1px;border-style:solid;border-color:#2f4056!important;color:#2f4056!important}.layui-border-blue{border-width:1px;border-style:solid;border-color:#1e9fff!important;color:#1e9fff!important}.layui-border-black{border-width:1px;border-style:solid;border-color:#393d49!important;color:#393d49!important}.layui-timeline-item:before{background-color:#eee}.layui-text{line-height:1.6;font-size:14px;color:#5f5f5f}.layui-text h1,.layui-text h2,.layui-text h3,.layui-text h4,.layui-text h5,.layui-text h6{font-weight:500;color:#333}.layui-text h1{font-size:32px}.layui-text h2{font-size:24px}.layui-text h3{font-size:18px}.layui-text h4{font-size:16px}.layui-text h5{font-size:14px}.layui-text h6{font-size:13px}.layui-text a:not(.layui-btn){color:#01aaed}.layui-text a:not(.layui-btn):hover{text-decoration:underline}.layui-text ol,.layui-text ul{padding:5px 0 5px 15px}.layui-text ul li{margin-top:5px;list-style-type:disc}.layui-text ol li{margin-top:5px;list-style-type:decimal}.layui-text em,.layui-word-aux{color:#999!important;padding-left:5px!important;padding-right:5px!important}.layui-text p{margin:15px 0}.layui-text p:first-child{margin-top:0}.layui-text p:last-child{margin-bottom:0}.layui-text blockquote:not(.layui-elem-quote){padding:5px 15px;border-left:5px solid #eee}.layui-text pre:not(.layui-code){padding:15px;font-family:Lucida Console,Consolas,Courier New;background-color:#fafafa}.layui-font-12{font-size:12px!important}.layui-font-14{font-size:14px!important}.layui-font-16{font-size:16px!important}.layui-font-18{font-size:18px!important}.layui-font-20{font-size:20px!important}.layui-font-red{color:#ff5722!important}.layui-font-orange{color:#ffb800!important}.layui-font-green{color:#009688!important}.layui-font-cyan{color:#2f4056!important}.layui-font-blue{color:#01aaed!important}.layui-font-black{color:#000!important}.layui-font-gray{color:#c2c2c2!important}.layui-btn{display:inline-block;vertical-align:middle;height:38px;line-height:38px;border:1px solid transparent;padding:0 18px;background-color:#009688;color:#fff;white-space:nowrap;text-align:center;font-size:14px;border-radius:2px;cursor:pointer;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-btn:hover{opacity:.8;filter:alpha(opacity=80);color:#fff}.layui-btn:active{opacity:1;filter:alpha(opacity=100)}.layui-btn+.layui-btn{margin-left:10px}.layui-btn-container{font-size:0}.layui-btn-container .layui-btn{margin-right:10px;margin-bottom:10px}.layui-btn-container .layui-btn+.layui-btn{margin-left:0}.layui-table .layui-btn-container .layui-btn{margin-bottom:9px}.layui-btn-radius{border-radius:100px}.layui-btn .layui-icon{padding:0 2px;vertical-align:middle\0;vertical-align:bottom}.layui-btn-primary{border-color:#d2d2d2;background:0 0;color:#5f5f5f}.layui-btn-primary:hover{border-color:#009688;color:#333}.layui-btn-normal{background-color:#1e9fff}.layui-btn-warm{background-color:#ffb800}.layui-btn-danger{background-color:#ff5722}.layui-btn-checked{background-color:#2D8CF0}.layui-btn-disabled,.layui-btn-disabled:active,.layui-btn-disabled:hover{border-color:#eee!important;background-color:#fbfbfb!important;color:#d2d2d2!important;cursor:not-allowed!important;opacity:1}.layui-btn-lg{height:44px;line-height:44px;padding:0 25px;font-size:16px}.layui-btn-sm{height:30px;line-height:30px;padding:0 10px;font-size:12px}.layui-btn-xs{height:22px;line-height:22px;padding:0 5px;font-size:12px}.layui-btn-xs i{font-size:12px!important}.layui-btn-group{display:inline-block;vertical-align:middle;font-size:0}.layui-btn-group .layui-btn{margin-left:0!important;margin-right:0!important;border-left:1px solid rgba(255,255,255,.5);border-radius:0}.layui-btn-group .layui-btn-primary{border-left:none}.layui-btn-group .layui-btn-primary:hover{border-color:#d2d2d2;color:#009688}.layui-btn-group .layui-btn:first-child{border-left:none;border-radius:2px 0 0 2px}.layui-btn-group .layui-btn-primary:first-child{border-left:1px solid #d2d2d2}.layui-btn-group .layui-btn:last-child{border-radius:0 2px 2px 0}.layui-btn-group .layui-btn+.layui-btn{margin-left:0}.layui-btn-group+.layui-btn-group{margin-left:10px}.layui-btn-fluid{width:100%}.layui-input,.layui-select,.layui-textarea{height:38px;line-height:1.3;line-height:38px\9;border-width:1px;border-style:solid;background-color:#fff;color:rgba(0,0,0,.85);border-radius:2px}.layui-input::-webkit-input-placeholder,.layui-select::-webkit-input-placeholder,.layui-textarea::-webkit-input-placeholder{line-height:1.3}.layui-input,.layui-textarea{display:block;width:100%;padding-left:10px}.layui-input:hover,.layui-textarea:hover{border-color:#eee!important}.layui-input:focus,.layui-textarea:focus{border-color:#d2d2d2!important}.layui-textarea{position:relative;min-height:100px;height:auto;line-height:20px;padding:6px 10px;resize:vertical}.layui-select{padding:0 10px}.layui-form input[type=checkbox],.layui-form input[type=radio],.layui-form select{display:none}.layui-form [lay-ignore]{display:initial}.layui-form-item{margin-bottom:15px;clear:both;*zoom:1}.layui-form-item:after{content:'\20';clear:both;*zoom:1;display:block;height:0}.layui-form-label{position:relative;float:left;display:block;padding:9px 15px;width:80px;font-weight:400;line-height:20px;text-align:right}.layui-form-label-col{display:block;float:none;padding:9px 0;line-height:20px;text-align:left}.layui-form-item .layui-inline{margin-bottom:5px;margin-right:10px}.layui-input-block,.layui-input-inline{position:relative}.layui-input-block{margin-left:110px;min-height:36px}.layui-input-inline{display:inline-block;vertical-align:middle}.layui-form-item .layui-input-inline{float:left;width:190px;margin-right:10px}.layui-form-text .layui-input-inline{width:auto}.layui-form-mid{position:relative;float:left;display:block;padding:9px 0!important;line-height:20px;margin-right:10px}.layui-form-danger+.layui-form-select .layui-input,.layui-form-danger:focus{border-color:#ff5722!important}.layui-input-wrap{position:relative;height:38px;line-height:38px}.layui-input-wrap .layui-input{padding-right:35px}.layui-input-wrap .layui-input::-ms-clear,.layui-input-wrap .layui-input::-ms-reveal{display:none}.layui-input-wrap-prefix .layui-input{padding-left:35px}.layui-input-prefix,.layui-input-split,.layui-input-suffix{position:absolute;right:0;top:0;padding:0 10px;width:35px;height:100%;text-align:center;transition:all .3s;cursor:pointer;pointer-events:none;box-sizing:border-box}.layui-input-prefix{left:0;border-radius:2px 0 0 2px}.layui-input-suffix{right:0;border-radius:0 2px 2px 0}.layui-input-wrap .layui-input:focus+.layui-input-split{border-color:#d2d2d2}.layui-input-prefix .layui-icon,.layui-input-split .layui-icon,.layui-input-suffix .layui-icon{position:relative;font-size:16px;color:#5f5f5f;transition:all .3s}.layui-input-wrap .layui-input-prefix.layui-input-split{border-width:0;border-right-width:1px}.layui-input-wrap-prefix .layui-form-select{position:static}.layui-input-affix-event .layui-icon{color:rgba(0,0,0,.8)}.layui-input-affix-event .layui-icon-clear{color:rgba(0,0,0,.3)}.layui-input-affix-event .layui-icon:hover{color:rgba(0,0,0,.6)}.layui-input-split{border-width:1px;border-style:solid}.layui-input-affix-event{pointer-events:auto}.layui-input-group{position:relative;display:inline-table}.layui-input-group>*{display:table-cell;vertical-align:middle;position:relative}.layui-input-group .layui-input{padding-right:15px}.layui-input-group .layui-input-prefix{width:auto;border-right:0}.layui-input-group .layui-input-suffix{width:auto;border-left:0}.layui-form-select{position:relative;color:#5f5f5f}.layui-form-select .layui-input{padding-right:30px;cursor:pointer}.layui-form-select .layui-edge{position:absolute;right:10px;top:50%;margin-top:-3px;cursor:pointer;border-width:6px;border-top-color:#c2c2c2;border-top-style:solid;transition:all .3s;-webkit-transition:all .3s}.layui-form-select dl{display:none;position:absolute;left:0;top:42px;padding:5px 0;z-index:899;min-width:100%;border:1px solid #eee;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-shadow:1px 1px 4px rgb(0 0 0 / 8%);box-sizing:border-box}.layui-form-select dl dd,.layui-form-select dl dt{padding:0 10px;line-height:36px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layui-form-select dl dt{font-size:12px;color:#999}.layui-form-select dl dd{cursor:pointer}.layui-form-select dl dd:hover{background-color:#f6f6f6;-webkit-transition:.5s all;transition:.5s all}.layui-form-select .layui-select-group dd{padding-left:20px}.layui-form-select dl dd.layui-select-tips{padding-left:10px!important;color:#999}.layui-form-select dl dd.layui-this{background-color:#f7f7f7;color:#2D8CF0;font-weight:700}.layui-form-select dl dd.layui-disabled{background-color:#fff}.layui-form-selected dl{display:block}.layui-form-selected .layui-edge{margin-top:-9px;-webkit-transform:rotate(180deg);transform:rotate(180deg)}.layui-form-selected .layui-edge{margin-top:-3px\0}:root .layui-form-selected .layui-edge{margin-top:-9px\0/IE9}.layui-form-selectup dl{top:auto;bottom:42px}.layui-select-none{margin:5px 0;text-align:center;color:#999}.layui-select-disabled .layui-disabled{border-color:#eee!important}.layui-select-disabled .layui-edge{border-top-color:#d2d2d2}.layui-form-checkbox{position:relative;display:inline-block;vertical-align:middle;height:30px;line-height:30px;margin-right:10px;padding-right:30px;background-color:#fff;cursor:pointer;font-size:0;-webkit-transition:.1s linear;transition:.1s linear;box-sizing:border-box}.layui-form-checkbox *{display:inline-block;vertical-align:middle}.layui-form-checkbox span{padding:0 10px;height:100%;font-size:14px;border-radius:2px 0 0 2px;background-color:#d2d2d2;color:#fff;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.layui-form-checkbox:hover span{background-color:#c2c2c2}.layui-form-checkbox i{position:absolute;right:0;top:0;width:30px;height:28px;border:1px solid #d2d2d2;border-left:none;border-radius:0 2px 2px 0;color:#fff;font-size:20px;text-align:center}.layui-form-checkbox:hover i{border-color:#c2c2c2;color:#c2c2c2}.layui-form-checked,.layui-form-checked:hover{border-color:#2D8CF0}.layui-form-checked span,.layui-form-checked:hover span{background-color:#2D8CF0}.layui-form-checked i,.layui-form-checked:hover i{color:#2D8CF0}.layui-form-item .layui-form-checkbox{margin-top:4px}.layui-form-checkbox[lay-skin=primary]{height:auto!important;line-height:normal!important;min-width:18px;min-height:18px;border:none!important;margin-right:0;padding-left:28px;padding-right:0;background:0 0}.layui-form-checkbox[lay-skin=primary] span{padding-left:0;padding-right:15px;line-height:18px;background:0 0;color:#5f5f5f}.layui-form-checkbox[lay-skin=primary] i{right:auto;left:0;width:16px;height:16px;line-height:16px;border:1px solid #d2d2d2;font-size:12px;border-radius:2px;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-checkbox[lay-skin=primary]:hover i{border-color:#2D8CF0;color:#fff}.layui-form-checked[lay-skin=primary] i{border-color:#2D8CF0!important;background-color:#2D8CF0;color:#fff}.layui-checkbox-disabled[lay-skin=primary] span{background:0 0!important;color:#c2c2c2!important}.layui-form-checked.layui-checkbox-disabled[lay-skin=primary] i{background:#eee!important;border-color:#eee!important}.layui-checkbox-disabled[lay-skin=primary]:hover i{border-color:#d2d2d2}.layui-form-item .layui-form-checkbox[lay-skin=primary]{margin-top:10px}.layui-form-switch{position:relative;display:inline-block;vertical-align:middle;height:22px;line-height:22px;min-width:35px;padding:0 5px;margin-top:8px;border:1px solid #d2d2d2;border-radius:20px;cursor:pointer;background-color:#fff;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch i{position:absolute;left:5px;top:3px;width:16px;height:16px;border-radius:20px;background-color:#d2d2d2;-webkit-transition:.1s linear;transition:.1s linear}.layui-form-switch em{position:relative;top:0;width:25px;margin-left:21px;padding:0!important;text-align:center!important;color:#999!important;font-style:normal!important;font-size:12px}.layui-form-onswitch{border-color:#2D8CF0;background-color:#2D8CF0}.layui-form-onswitch i{left:100%;margin-left:-21px;background-color:#fff}.layui-form-onswitch em{margin-left:5px;margin-right:21px;color:#fff!important}.layui-checkbox-disabled{border-color:#eee!important}.layui-checkbox-disabled span{background-color:#eee!important}.layui-checkbox-disabled i{border-color:#eee!important}.layui-checkbox-disabled em{color:#d2d2d2!important}.layui-checkbox-disabled:hover i{color:#fff!important}[lay-radio]{display:none}.layui-form-radio{display:inline-block;vertical-align:middle;line-height:28px;margin:6px 10px 0 0;padding-right:10px;cursor:pointer;font-size:0}.layui-form-radio *{display:inline-block;vertical-align:middle;font-size:14px}.layui-form-radio>i{margin-right:8px;font-size:22px;color:#c2c2c2}.layui-form-radio:hover *,.layui-form-radioed,.layui-form-radioed>i{color:#2D8CF0}.layui-radio-disabled>i{color:#eee!important}.layui-radio-disabled *{color:#c2c2c2!important}.layui-form-pane .layui-form-label{width:110px;padding:8px 15px;height:38px;line-height:20px;border-width:1px;border-style:solid;border-radius:2px 0 0 2px;text-align:center;background-color:#fafafa;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;box-sizing:border-box}.layui-form-pane .layui-input-inline{margin-left:-1px}.layui-form-pane .layui-input-block{margin-left:110px;left:-1px}.layui-form-pane .layui-input{border-radius:0 2px 2px 0}.layui-form-pane .layui-form-text .layui-form-label{float:none;width:100%;border-radius:2px;box-sizing:border-box;text-align:left}.layui-form-pane .layui-form-text .layui-input-inline{display:block;margin:0;top:-1px;clear:both}.layui-form-pane .layui-form-text .layui-input-block{margin:0;left:0;top:-1px}.layui-form-pane .layui-form-text .layui-textarea{min-height:100px;border-radius:0 0 2px 2px}.layui-form-pane .layui-form-checkbox{margin:4px 0 4px 10px}.layui-form-pane .layui-form-radio,.layui-form-pane .layui-form-switch{margin-top:6px;margin-left:10px}.layui-form-pane .layui-form-item[pane]{position:relative;border-width:1px;border-style:solid}.layui-form-pane .layui-form-item[pane] .layui-form-label{position:absolute;left:0;top:0;height:100%;border-width:0;border-right-width:1px}.layui-form-pane .layui-form-item[pane] .layui-input-inline{margin-left:110px}@media screen and (max-width:450px){.layui-form-item .layui-form-label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-form-item .layui-inline{display:block;margin-right:0;margin-bottom:20px;clear:both}.layui-form-item .layui-inline:after{content:'\20';clear:both;display:block;height:0}.layui-form-item .layui-input-inline{display:block;float:none;left:-3px;width:auto!important;margin:0 0 10px 112px}.layui-form-item .layui-input-inline+.layui-form-mid{margin-left:110px;top:-5px;padding:0}.layui-form-item .layui-form-checkbox{margin-right:5px;margin-bottom:5px}}.layui-laypage{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;margin:10px 0;font-size:0}.layui-laypage>a:first-child,.layui-laypage>a:first-child em{border-radius:2px 0 0 2px}.layui-laypage>a:last-child,.layui-laypage>a:last-child em{border-radius:0 2px 2px 0}.layui-laypage>:first-child{margin-left:0!important}.layui-laypage>:last-child{margin-right:0!important}.layui-laypage a,.layui-laypage button,.layui-laypage input,.layui-laypage select,.layui-laypage span{border:1px solid #eee}.layui-laypage a,.layui-laypage span{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding:0 15px;height:28px;line-height:28px;margin:0 -1px 5px 0;background-color:#fff;color:#333;font-size:12px}.layui-laypage a:hover{color:#009688}.layui-laypage em{font-style:normal}.layui-laypage .layui-laypage-spr{color:#999;font-weight:700}.layui-laypage a{text-decoration:none}.layui-laypage .layui-laypage-curr{position:relative}.layui-laypage .layui-laypage-curr em{position:relative;color:#fff}.layui-laypage .layui-laypage-curr .layui-laypage-em{position:absolute;left:-1px;top:-1px;padding:1px;width:100%;height:100%;background-color:#009688}.layui-laypage-em{border-radius:2px}.layui-laypage-next em,.layui-laypage-prev em{font-family:Sim sun;font-size:16px}.layui-laypage .layui-laypage-count,.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh,.layui-laypage .layui-laypage-skip{margin-left:10px;margin-right:10px;padding:0;border:none}.layui-laypage .layui-laypage-limits,.layui-laypage .layui-laypage-refresh{vertical-align:top}.layui-laypage .layui-laypage-refresh i{font-size:18px;cursor:pointer}.layui-laypage select{height:22px;padding:3px;border-radius:2px;cursor:pointer}.layui-laypage .layui-laypage-skip{height:30px;line-height:30px;color:#999}.layui-laypage button,.layui-laypage input{height:30px;line-height:30px;border-radius:2px;vertical-align:top;background-color:#fff;box-sizing:border-box}.layui-laypage input{display:inline-block;width:40px;margin:0 10px;padding:0 3px;text-align:center}.layui-laypage input:focus,.layui-laypage select:focus{border-color:#009688!important}.layui-laypage button{margin-left:10px;padding:0 10px;cursor:pointer}.layui-flow-more{margin:10px 0;text-align:center;color:#999;font-size:14px;clear:both}.layui-flow-more a{height:32px;line-height:32px}.layui-flow-more a *{display:inline-block;vertical-align:top}.layui-flow-more a cite{padding:0 20px;border-radius:3px;background-color:#eee;color:#333;font-style:normal}.layui-flow-more a cite:hover{opacity:.8}.layui-flow-more a i{font-size:30px;color:#737383}.layui-table{width:100%;margin:10px 0;background-color:#fff;color:#5f5f5f}.layui-table tr{transition:all .3s;-webkit-transition:all .3s}.layui-table th{text-align:left;font-weight:400}.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{background-color:#fafafa}.layui-table td,.layui-table th,.layui-table-col-set,.layui-table-fixed-r,.layui-table-grid-down,.layui-table-header,.layui-table-page,.layui-table-tips-main,.layui-table-tool,.layui-table-total,.layui-table-view,.layui-table[lay-skin=line],.layui-table[lay-skin=row]{border-width:1px;border-style:solid;border-color:#eee}.layui-table td,.layui-table th{position:relative;padding:9px 15px;min-height:20px;line-height:20px;font-size:14px}.layui-table[lay-skin=line] td,.layui-table[lay-skin=line] th{border-width:0;border-bottom-width:1px}.layui-table[lay-skin=row] td,.layui-table[lay-skin=row] th{border-width:0;border-right-width:1px}.layui-table[lay-skin=nob] td,.layui-table[lay-skin=nob] th{border:none}.layui-table img{max-width:100px}.layui-table[lay-size=lg] td,.layui-table[lay-size=lg] th{padding-top:15px;padding-right:30px;padding-bottom:15px;padding-left:30px}.layui-table-view .layui-table[lay-size=lg] .layui-table-cell{height:50px;line-height:40px}.layui-table[lay-size=sm] td,.layui-table[lay-size=sm] th{padding-top:5px;padding-right:10px;padding-bottom:5px;padding-left:10px;font-size:12px}.layui-table-view .layui-table[lay-size=sm] .layui-table-cell{height:30px;line-height:20px;padding-top:5px;padding-left:11px;padding-right:11px}.layui-table[lay-data],.layui-table[lay-options]{display:none}.layui-table-box{position:relative;overflow:hidden}.layui-table-view{margin:10px 0}.layui-table-view .layui-table{position:relative;width:auto;margin:0;border:0;border-collapse:separate}.layui-table-view .layui-table[lay-skin=line]{border-width:0;border-right-width:1px}.layui-table-view .layui-table[lay-skin=row]{border-width:0;border-bottom-width:1px}.layui-table-view .layui-table td,.layui-table-view .layui-table th{padding:0;border-top:none;border-left:none}.layui-table-view .layui-table th.layui-unselect .layui-table-cell span{cursor:pointer}.layui-table-view .layui-table td{cursor:default}.layui-table-view .layui-table td[data-edit=text]{cursor:text}.layui-table-view .layui-form-checkbox[lay-skin=primary] i{width:18px;height:18px}.layui-table-view .layui-form-radio{line-height:0;padding:0}.layui-table-view .layui-form-radio>i{margin:0;font-size:20px}.layui-table-init{position:absolute;left:0;top:0;width:100%;height:100%;text-align:center;z-index:199}.layui-table-init .layui-icon{position:absolute;left:50%;top:50%;margin:-15px 0 0 -15px;font-size:30px;color:#c2c2c2}.layui-table-header{border-width:0;border-bottom-width:1px;overflow:hidden}.layui-table-header .layui-table{margin-bottom:-1px}.layui-table-column{position:relative;width:100%;min-height:41px;padding:8px 16px;border-width:0;border-bottom-width:1px}.layui-table-column .layui-btn-container{margin-bottom:-8px}.layui-table-column .layui-btn-container .layui-btn{margin-right:8px;margin-bottom:8px}.layui-table-tool .layui-inline[lay-event]{position:relative;width:26px;height:26px;padding:5px;line-height:16px;margin-right:10px;text-align:center;color:#333;border:1px solid #ccc;cursor:pointer;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool .layui-inline[lay-event]:hover{border:1px solid #999}.layui-table-tool-temp{padding-right:120px}.layui-table-tool-self{position:absolute;right:17px;top:10px}.layui-table-tool .layui-table-tool-self .layui-inline[lay-event]{margin:0 0 0 10px}.layui-table-tool-panel{position:absolute;top:29px;left:-1px;z-index:399;padding:5px 0;min-width:150px;min-height:40px;border:1px solid #d2d2d2;text-align:left;overflow-y:auto;background-color:#fff;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-table-tool-panel li{padding:0 10px;line-height:30px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-transition:.5s all;transition:.5s all}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary]{width:100%}.layui-table-tool-panel li:hover{background-color:#f6f6f6}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary]{padding-left:28px}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] i{position:absolute;left:0;top:0}.layui-table-tool-panel li .layui-form-checkbox[lay-skin=primary] span{padding:0}.layui-table-tool .layui-table-tool-self .layui-table-tool-panel{left:auto;right:-1px}.layui-table-col-set{position:absolute;right:0;top:0;width:20px;height:100%;border-width:0;border-left-width:1px;background-color:#fff}.layui-table-sort{width:10px;height:20px;margin-left:5px;cursor:pointer!important}.layui-table-sort .layui-edge{position:absolute;left:5px;border-width:5px}.layui-table-sort .layui-table-sort-asc{top:3px;border-top:none;border-bottom-style:solid;border-bottom-color:#b2b2b2}.layui-table-sort .layui-table-sort-asc:hover{border-bottom-color:#5f5f5f}.layui-table-sort .layui-table-sort-desc{bottom:5px;border-bottom:none;border-top-style:solid;border-top-color:#b2b2b2}.layui-table-sort .layui-table-sort-desc:hover{border-top-color:#5f5f5f}.layui-table-sort[lay-sort=asc] .layui-table-sort-asc{border-bottom-color:#000}.layui-table-sort[lay-sort=desc] .layui-table-sort-desc{border-top-color:#000}.layui-table-cell{height:38px;line-height:28px;padding:6px 15px;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;box-sizing:border-box}.layui-table-cell .layui-form-checkbox[lay-skin=primary]{top:-1px;padding:0}.layui-table-cell .layui-table-link{color:#01aaed}.layui-table-cell .layui-btn{vertical-align:inherit}.layui-table-cell[align=center]{-webkit-box-pack:center}.layui-table-cell[align=right]{-webkit-box-pack:end}.laytable-cell-checkbox,.laytable-cell-numbers,.laytable-cell-radio,.laytable-cell-space{text-align:center;-webkit-box-pack:center}.layui-table-body{position:relative;overflow:auto;margin-right:-1px;margin-bottom:-1px}.layui-table-body .layui-none{line-height:26px;padding:30px 15px;text-align:center;color:#999}.layui-table-body .layui-table[lay-even] tr:nth-child(even){background-color:#f2f2f2}.layui-table-fixed{position:absolute;left:0;top:0;z-index:101}.layui-table-fixed .layui-table-body{overflow:hidden}.layui-table-fixed-l{box-shadow:1px 0 8px rgba(0,0,0,.08)}.layui-table-fixed-r{left:auto;right:-1px;border-width:0;border-left-width:1px;box-shadow:-1px 0 8px rgba(0,0,0,.08)}.layui-table-fixed-r .layui-table-header{position:relative;overflow:visible}.layui-table-mend{position:absolute;right:-49px;top:0;height:100%;width:50px}.layui-table-tool{position:relative;width:100%;min-height:50px;line-height:30px;padding:10px 15px;border-width:0;border-bottom-width:1px}.layui-table-tool .layui-btn-container{margin-bottom:-10px}.layui-table-total{margin-bottom:-1px;border-width:0;border-top-width:1px;overflow:hidden}.layui-table-page{border-width:0;border-top-width:1px;margin-bottom:-1px;white-space:nowrap;overflow:hidden}.layui-table-page>div{height:26px}.layui-table-page .layui-laypage{margin:0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span{height:26px;line-height:26px;margin-bottom:10px;border:none;background:0 0}.layui-table-page .layui-laypage a,.layui-table-page .layui-laypage span.layui-laypage-curr{padding:0 12px}.layui-table-page .layui-laypage span{margin-left:0;padding:0}.layui-table-page .layui-laypage .layui-laypage-prev{margin-left:-11px!important}.layui-table-page .layui-laypage .layui-laypage-curr .layui-laypage-em{left:0;top:0;padding:0}.layui-table-page .layui-laypage button,.layui-table-page .layui-laypage input{height:26px;line-height:26px}.layui-table-page .layui-laypage input{width:40px}.layui-table-page .layui-laypage button{padding:0 10px}.layui-table-page select{height:18px}.layui-table-pagebar{float:right;line-height:23px}.layui-table-pagebar .layui-btn-sm{margin-top:-1px}.layui-table-pagebar .layui-btn-xs{margin-top:2px}.layui-table-view select[lay-ignore]{display:inline-block}.layui-table-patch .layui-table-cell{padding:0;width:30px}.layui-table-edit{position:absolute;left:0;top:0;z-index:189;min-width:100%;min-height:100%;padding:5px 14px;border-radius:0;box-shadow:1px 1px 20px rgba(0,0,0,.15);background-color:#fff}.layui-table-edit:focus{border-color:#2D8CF0!important}input.layui-input.layui-table-edit{height:100%}select.layui-table-edit{padding:0 0 0 10px;border-color:#d2d2d2}.layui-table-view .layui-form-checkbox,.layui-table-view .layui-form-radio,.layui-table-view .layui-form-switch{top:0;margin:0;box-sizing:content-box}.layui-table-view .layui-form-checkbox{top:-1px;height:26px;line-height:26px}.layui-table-view .layui-form-checkbox i{height:26px}.layui-table-grid .layui-table-cell{overflow:visible}.layui-table-grid-down{position:absolute;top:0;right:0;width:26px;height:100%;padding:5px 0;border-width:0;border-left-width:1px;text-align:center;background-color:#fff;color:#999;cursor:pointer}.layui-table-grid-down .layui-icon{position:absolute;top:50%;left:50%;margin:-8px 0 0 -8px}.layui-table-grid-down:hover{background-color:#fbfbfb}body .layui-table-tips .layui-layer-content{background:0 0;padding:0;box-shadow:0 1px 6px rgba(0,0,0,.12)}.layui-table-tips-main{margin:-49px 0 0 -1px;max-height:150px;padding:8px 15px;font-size:14px;overflow-y:scroll;background-color:#fff;color:#5f5f5f}.layui-table-tips-c{position:absolute;right:-3px;top:-13px;width:20px;height:20px;padding:3px;cursor:pointer;background-color:#5f5f5f;border-radius:50%;color:#fff}.layui-table-tips-c:hover{background-color:#777}.layui-table-tips-c:before{position:relative;right:-2px}.layui-upload-file{display:none!important;opacity:.01;filter:Alpha(opacity=1)}.layui-upload-list{margin:10px 0}.layui-upload-choose{max-width:200px;padding:0 10px;color:#999;font-size:14px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-upload-drag{position:relative;display:inline-block;padding:30px;border:1px dashed #e2e2e2;background-color:#fff;text-align:center;cursor:pointer;color:#999}.layui-upload-drag .layui-icon{font-size:50px;color:#009688}.layui-upload-drag[lay-over]{border-color:#009688}.layui-upload-form{display:inline-block}.layui-upload-iframe{position:absolute;width:0;height:0;border:0;visibility:hidden}.layui-upload-wrap{position:relative;display:inline-block;vertical-align:middle}.layui-upload-wrap .layui-upload-file{display:block!important;position:absolute;left:0;top:0;z-index:10;font-size:100px;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layui-btn-container .layui-upload-choose{padding-left:0}.layui-menu{position:relative;margin:5px 0;background-color:#fff;box-sizing:border-box}.layui-menu *{box-sizing:border-box}.layui-menu li,.layui-menu-body-title a{padding:5px 15px}.layui-menu li{position:relative;margin:1px 0;width:calc(100% + 1px);line-height:26px;color:rgba(0,0,0,.8);font-size:14px;white-space:nowrap;cursor:pointer;transition:all .3s}.layui-menu li:hover{background-color:#f6f6f6}.layui-menu-item-parent:hover>.layui-menu-body-panel{display:block;animation-name:layui-fadein;animation-duration:.3s;animation-fill-mode:both;animation-delay:.2s}.layui-menu-item-group .layui-menu-body-title,.layui-menu-item-parent .layui-menu-body-title{padding-right:25px}.layui-menu .layui-menu-item-divider:hover,.layui-menu .layui-menu-item-group:hover,.layui-menu .layui-menu-item-none:hover{background:0 0;cursor:default}.layui-menu .layui-menu-item-group>ul{margin:5px 0 -5px}.layui-menu .layui-menu-item-group>.layui-menu-body-title{color:rgba(0,0,0,.35);user-select:none}.layui-menu .layui-menu-item-none{color:rgba(0,0,0,.35);cursor:default}.layui-menu .layui-menu-item-none{text-align:center}.layui-menu .layui-menu-item-divider{margin:5px 0;padding:0;height:0;line-height:0;border-bottom:1px solid #eee;overflow:hidden}.layui-menu .layui-menu-item-down:hover,.layui-menu .layui-menu-item-up:hover{cursor:pointer}.layui-menu .layui-menu-item-up>.layui-menu-body-title{color:rgba(0,0,0,.8)}.layui-menu .layui-menu-item-up>ul{visibility:hidden;height:0;overflow:hidden}.layui-menu .layui-menu-item-down:hover>.layui-menu-body-title>.layui-icon,.layui-menu .layui-menu-item-up>.layui-menu-body-title:hover>.layui-icon{color:#000}.layui-menu .layui-menu-item-down>ul{visibility:visible;height:auto}.layui-menu .layui-menu-item-checked,.layui-menu .layui-menu-item-checked2{background-color:#f6f6f6!important;color:#2D8CF0}.layui-menu .layui-menu-item-checked a,.layui-menu .layui-menu-item-checked2 a{color:#2D8CF0}.layui-menu .layui-menu-item-checked:after{position:absolute;right:0;top:0;bottom:0;border-right:3px solid #2D8CF0;content:""}.layui-menu-body-title{position:relative;overflow:hidden;text-overflow:ellipsis}.layui-menu-body-title a{display:block;margin:-5px -15px;color:rgba(0,0,0,.8)}.layui-menu-body-title a:hover{transition:all .3s}.layui-menu-body-title>.layui-icon{position:absolute;right:0;top:0;font-size:14px}.layui-menu-body-title>.layui-icon:hover{transition:all .3s}.layui-menu-body-title>.layui-icon-right{right:-1px}.layui-menu-body-panel{display:none;position:absolute;top:-7px;left:100%;z-index:1000;margin-left:13px;padding:5px 0}.layui-menu-body-panel:before{content:"";position:absolute;width:20px;left:-16px;top:0;bottom:0}.layui-menu-body-panel-left{left:auto;right:100%;margin:0 13px 0}.layui-menu-body-panel-left:before{left:auto;right:-16px}.layui-menu-lg li{line-height:32px}.layui-menu-lg .layui-menu-body-title a:hover,.layui-menu-lg li:hover{background:0 0;color:#2D8CF0}.layui-menu-lg li .layui-menu-body-panel{margin-left:14px}.layui-menu-lg li .layui-menu-body-panel-left{margin:0 15px 0}.layui-dropdown{position:absolute;left:-999999px;top:-999999px;z-index:77777777;margin:5px 0;min-width:100px}.layui-dropdown:before{content:"";position:absolute;width:100%;height:6px;left:0;top:-6px}.layui-dropdown-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px");position:fixed;_position:absolute;pointer-events:auto}.layui-nav{position:relative;padding:0 20px;background-color:#393d49;color:#fff;border-radius:2px;font-size:0;box-sizing:border-box}.layui-nav *{font-size:14px}.layui-nav .layui-nav-item{position:relative;display:inline-block;*display:inline;*zoom:1;vertical-align:middle;line-height:60px}.layui-nav .layui-nav-item a{display:block;padding:0 20px;color:#fff;color:rgba(255,255,255,.7);transition:all .3s;-webkit-transition:all .3s}.layui-nav .layui-this:after,.layui-nav-bar{content:"";position:absolute;left:0;top:0;width:0;height:5px;background-color:#2D8CF0;transition:all .2s;-webkit-transition:all .2s;pointer-events:none}.layui-nav-bar{z-index:1000}.layui-nav[lay-bar=disabled] .layui-nav-bar{display:none}.layui-nav .layui-nav-item a:hover,.layui-nav .layui-this a{color:#fff}.layui-nav .layui-this:after{top:auto;bottom:0;width:100%}.layui-nav-img{width:30px;height:30px;margin-right:10px;border-radius:50%}.layui-nav .layui-nav-more{position:absolute;top:0;right:3px;left:auto!important;margin-top:0;font-size:12px;cursor:pointer;transition:all .2s;-webkit-transition:all .2s}.layui-nav .layui-nav-mored,.layui-nav-itemed>a .layui-nav-more{transform:rotate(180deg)}.layui-nav-child{display:none;position:absolute;left:0;top:65px;min-width:100%;line-height:36px;padding:5px 0;box-shadow:0 2px 4px rgba(0,0,0,.12);border:1px solid #eee;background-color:#fff;z-index:100;border-radius:2px;white-space:nowrap;box-sizing:border-box}.layui-nav .layui-nav-child a{color:#5f5f5f;color:rgba(0,0,0,.8)}.layui-nav .layui-nav-child a:hover{background-color:#f6f6f6;color:rgba(0,0,0,.8)}.layui-nav-child dd{margin:1px 0;position:relative}.layui-nav-child dd.layui-this{background-color:#f6f6f6;color:#000}.layui-nav-child dd.layui-this:after{display:none}.layui-nav-child-r{left:auto;right:0}.layui-nav-child-c{text-align:center}.layui-nav-tree{width:200px;padding:0}.layui-nav-tree .layui-nav-item{display:block;width:100%;line-height:40px}.layui-nav-tree .layui-nav-item a{position:relative;height:40px;line-height:40px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.layui-nav-tree .layui-nav-item>a{padding-top:5px;padding-bottom:5px}.layui-nav-tree .layui-nav-more{right:15px}.layui-nav-tree .layui-nav-item>a .layui-nav-more{padding:5px 0}.layui-nav-tree .layui-nav-bar{width:5px;height:0}.layui-side .layui-nav-tree .layui-nav-bar{width:2px}.layui-nav-tree .layui-nav-child dd.layui-this,.layui-nav-tree .layui-nav-child dd.layui-this a,.layui-nav-tree .layui-this,.layui-nav-tree .layui-this>a,.layui-nav-tree .layui-this>a:hover{background-color:#009688;color:#fff}.layui-nav-tree .layui-this:after{display:none}.layui-nav-itemed>a,.layui-nav-tree .layui-nav-title a,.layui-nav-tree .layui-nav-title a:hover{color:#fff!important}.layui-nav-tree .layui-nav-bar{background-color:#009688}.layui-nav-tree .layui-nav-child{position:relative;z-index:0;top:0;border:none;box-shadow:none}.layui-nav-tree .layui-nav-child dd{margin:0}.layui-nav-tree .layui-nav-child a{color:#fff;color:rgba(255,255,255,.7)}.layui-nav-tree .layui-nav-child,.layui-nav-tree .layui-nav-child a:hover{background:0 0;color:#fff}.layui-nav-itemed>.layui-nav-child{display:block;background-color:rgba(0,0,0,.3)!important}.layui-nav-itemed>.layui-nav-child>.layui-this>.layui-nav-child{display:block}.layui-nav-side{position:fixed;top:0;bottom:0;left:0;overflow-x:hidden;z-index:999}.layui-nav-tree.layui-bg-gray a,.layui-nav.layui-bg-gray .layui-nav-item a{color:rgba(0,0,0,.8)}.layui-nav-tree.layui-bg-gray{padding:6px 0}.layui-nav-tree.layui-bg-gray .layui-nav-itemed>a{color:#000!important}.layui-nav.layui-bg-gray .layui-this a{color:#2D8CF0}.layui-nav-tree.layui-bg-gray .layui-nav-itemed>.layui-nav-child{padding-left:11px;background:0 0!important}.layui-nav-tree.layui-bg-gray .layui-nav-item>a{padding-top:0;padding-bottom:0}.layui-nav-tree.layui-bg-gray .layui-nav-item>a .layui-nav-more{padding:0}.layui-nav-tree.layui-bg-gray .layui-nav-child dd.layui-this,.layui-nav-tree.layui-bg-gray .layui-nav-child dd.layui-this a,.layui-nav-tree.layui-bg-gray .layui-this,.layui-nav-tree.layui-bg-gray .layui-this>a{background:0 0!important;color:#2D8CF0!important;font-weight:700}.layui-nav-tree.layui-bg-gray .layui-nav-bar{background-color:#2D8CF0}.layui-breadcrumb{visibility:hidden;font-size:0}.layui-breadcrumb>*{font-size:14px}.layui-breadcrumb a{color:#999!important}.layui-breadcrumb a:hover{color:#2D8CF0!important}.layui-breadcrumb a cite{color:#5f5f5f;font-style:normal}.layui-breadcrumb span[lay-separator]{margin:0 10px;color:#999}.layui-tab{margin:10px 0;text-align:left!important}.layui-tab[overflow]>.layui-tab-title{overflow:hidden}.layui-tab-title{position:relative;left:0;height:40px;white-space:nowrap;font-size:0;border-bottom-width:1px;border-bottom-style:solid;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;font-size:14px;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li{position:relative;line-height:40px;min-width:65px;padding:0 15px;text-align:center;cursor:pointer}.layui-tab-title li a{display:block;padding:0 15px;margin:0 -15px}.layui-tab-title .layui-this{color:#000}.layui-tab-title .layui-this:after{position:absolute;left:0;top:0;content:"";width:100%;height:41px;border-width:1px;border-style:solid;border-bottom-color:#fff;border-radius:2px 2px 0 0;box-sizing:border-box;pointer-events:none}.layui-tab-bar{position:absolute;right:0;top:0;z-index:10;width:30px;height:39px;line-height:39px;border-width:1px;border-style:solid;border-radius:2px;text-align:center;background-color:#fff;cursor:pointer}.layui-tab-bar .layui-icon{position:relative;display:inline-block;top:3px;transition:all .3s;-webkit-transition:all .3s}.layui-tab-item{display:none}.layui-tab-more{padding-right:30px;height:auto!important;white-space:normal!important}.layui-tab-more li.layui-this:after{border-bottom-color:#eee;border-radius:2px}.layui-tab-more .layui-tab-bar .layui-icon{top:-2px;top:3px\0;-webkit-transform:rotate(180deg);transform:rotate(180deg)}:root .layui-tab-more .layui-tab-bar .layui-icon{top:-2px\0/IE9}.layui-tab-content{padding:15px 0}.layui-tab-title li .layui-tab-close{position:relative;display:inline-block;width:18px;height:18px;line-height:20px;margin-left:8px;top:1px;text-align:center;font-size:14px;color:#c2c2c2;transition:all .2s;-webkit-transition:all .2s}.layui-tab-title li .layui-tab-close:hover{border-radius:2px;background-color:#ff5722;color:#fff}.layui-tab-brief>.layui-tab-title .layui-this{color:#009688}.layui-tab-brief>.layui-tab-more li.layui-this:after,.layui-tab-brief>.layui-tab-title .layui-this:after{border:none;border-radius:0;border-bottom:2px solid #2D8CF0}.layui-tab-brief[overflow]>.layui-tab-title .layui-this:after{top:-1px}.layui-tab-card{border-width:1px;border-style:solid;border-radius:2px;box-shadow:0 2px 5px 0 rgba(0,0,0,.1)}.layui-tab-card>.layui-tab-title{background-color:#fafafa}.layui-tab-card>.layui-tab-title li{margin-right:-1px;margin-left:-1px}.layui-tab-card>.layui-tab-title .layui-this{background-color:#fff}.layui-tab-card>.layui-tab-title .layui-this:after{border-top:none;border-width:1px;border-bottom-color:#fff}.layui-tab-card>.layui-tab-title .layui-tab-bar{height:40px;line-height:40px;border-radius:0;border-top:none;border-right:none}.layui-tab-card>.layui-tab-more .layui-this{background:0 0;color:#2D8CF0}.layui-tab-card>.layui-tab-more .layui-this:after{border:none}.layui-timeline{padding-left:5px}.layui-timeline-item{position:relative;padding-bottom:20px}.layui-timeline-axis{position:absolute;left:-5px;top:0;z-index:10;width:20px;height:20px;line-height:20px;background-color:#fff;color:#2D8CF0;border-radius:50%;text-align:center;cursor:pointer}.layui-timeline-axis:hover{color:#ff5722}.layui-timeline-item:before{content:"";position:absolute;left:5px;top:0;z-index:0;width:1px;height:100%}.layui-timeline-item:first-child:before{display:block}.layui-timeline-item:last-child:before{display:none}.layui-timeline-content{padding-left:25px}.layui-timeline-title{position:relative;margin-bottom:10px;line-height:22px}.layui-badge,.layui-badge-dot,.layui-badge-rim{position:relative;display:inline-block;padding:0 6px;font-size:12px;text-align:center;background-color:#ff5722;color:#fff;border-radius:2px}.layui-badge{height:18px;line-height:18px}.layui-badge-dot{width:8px;height:8px;padding:0;border-radius:50%}.layui-badge-rim{height:18px;line-height:18px;border-width:1px;border-style:solid;background-color:#fff;color:#5f5f5f}.layui-btn .layui-badge,.layui-btn .layui-badge-dot{margin-left:5px}.layui-nav .layui-badge,.layui-nav .layui-badge-dot{position:absolute;top:50%;margin:-5px 6px 0}.layui-nav .layui-badge{margin-top:-10px}.layui-tab-title .layui-badge,.layui-tab-title .layui-badge-dot{left:5px;top:-2px}.layui-carousel{position:relative;left:0;top:0;background-color:#f8f8f8}.layui-carousel>[carousel-item]{position:relative;width:100%;height:100%;overflow:hidden}.layui-carousel>[carousel-item]:before{position:absolute;content:'\e63d';left:50%;top:50%;width:100px;line-height:20px;margin:-10px 0 0 -50px;text-align:center;color:#c2c2c2;font-family:layui-icon!important;font-size:30px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.layui-carousel>[carousel-item]>*{display:none;position:absolute;left:0;top:0;width:100%;height:100%;background-color:#f8f8f8;transition-duration:.3s;-webkit-transition-duration:.3s}.layui-carousel-updown>*{-webkit-transition:.3s ease-in-out up;transition:.3s ease-in-out up}.layui-carousel-arrow{display:none\0;opacity:0;position:absolute;left:10px;top:50%;margin-top:-18px;width:36px;height:36px;line-height:36px;text-align:center;font-size:20px;border:none 0;border-radius:50%;background-color:rgba(0,0,0,.2);color:#fff;-webkit-transition-duration:.3s;transition-duration:.3s;cursor:pointer}.layui-carousel-arrow[lay-type=add]{left:auto!important;right:10px}.layui-carousel[lay-arrow=always] .layui-carousel-arrow{opacity:1;left:20px}.layui-carousel[lay-arrow=always] .layui-carousel-arrow[lay-type=add]{right:20px}.layui-carousel[lay-arrow=none] .layui-carousel-arrow{display:none}.layui-carousel-arrow:hover,.layui-carousel-ind ul:hover{background-color:rgba(0,0,0,.35)}.layui-carousel:hover .layui-carousel-arrow{display:block\0;opacity:1;left:20px}.layui-carousel:hover .layui-carousel-arrow[lay-type=add]{right:20px}.layui-carousel-ind{position:relative;top:-35px;width:100%;line-height:0!important;text-align:center;font-size:0}.layui-carousel[lay-indicator=outside]{margin-bottom:30px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind{top:10px}.layui-carousel[lay-indicator=outside] .layui-carousel-ind ul{background-color:rgba(0,0,0,.5)}.layui-carousel[lay-indicator=none] .layui-carousel-ind{display:none}.layui-carousel-ind ul{display:inline-block;padding:5px;background-color:rgba(0,0,0,.2);border-radius:10px;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li{display:inline-block;width:10px;height:10px;margin:0 3px;font-size:14px;background-color:#eee;background-color:rgba(255,255,255,.5);border-radius:50%;cursor:pointer;-webkit-transition-duration:.3s;transition-duration:.3s}.layui-carousel-ind li:hover{background-color:rgba(255,255,255,.7)}.layui-carousel-ind li.layui-this{background-color:#fff}.layui-carousel>[carousel-item]>.layui-carousel-next,.layui-carousel>[carousel-item]>.layui-carousel-prev,.layui-carousel>[carousel-item]>.layui-this{display:block}.layui-carousel>[carousel-item]>.layui-this{left:0}.layui-carousel>[carousel-item]>.layui-carousel-prev{left:-100%}.layui-carousel>[carousel-item]>.layui-carousel-next{left:100%}.layui-carousel>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel>[carousel-item]>.layui-carousel-prev.layui-carousel-right{left:0}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-left{left:-100%}.layui-carousel>[carousel-item]>.layui-this.layui-carousel-right{left:100%}.layui-carousel[lay-anim=updown] .layui-carousel-arrow{left:50%!important;top:20px;margin:0 0 0 -18px}.layui-carousel[lay-anim=updown] .layui-carousel-arrow[lay-type=add]{top:auto!important;bottom:20px}.layui-carousel[lay-anim=updown] .layui-carousel-ind{position:absolute;top:50%;right:20px;width:auto;height:auto}.layui-carousel[lay-anim=updown] .layui-carousel-ind ul{padding:3px 5px}.layui-carousel[lay-anim=updown] .layui-carousel-ind li{display:block;margin:6px 0}.layui-carousel[lay-anim=updown]>[carousel-item]>*{left:0!important}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next{top:100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{top:0}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-left{top:-100%}.layui-carousel[lay-anim=updown]>[carousel-item]>.layui-this.layui-carousel-right{top:100%}.layui-carousel[lay-anim=fade]>[carousel-item]>*{left:0!important}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev{opacity:0}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-next.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-carousel-prev.layui-carousel-right{opacity:1}.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-left,.layui-carousel[lay-anim=fade]>[carousel-item]>.layui-this.layui-carousel-right{opacity:0}.layui-fixbar{position:fixed;right:15px;bottom:15px;z-index:999999}.layui-fixbar li{width:50px;height:50px;line-height:50px;margin-bottom:1px;text-align:center;cursor:pointer;font-size:30px;background-color:#9f9f9f;color:#fff;border-radius:2px;opacity:.95}.layui-fixbar li:hover{opacity:.85}.layui-fixbar li:active{opacity:1}.layui-fixbar .layui-fixbar-top{display:none;font-size:40px}body .layui-util-face{border:none;background:0 0}body .layui-util-face .layui-layer-content{padding:0;background-color:#fff;color:#5f5f5f;box-shadow:none}.layui-util-face .layui-layer-TipsG{display:none}.layui-util-face ul{position:relative;width:372px;padding:10px;border:1px solid #d9d9d9;background-color:#fff;box-shadow:0 0 20px rgba(0,0,0,.2)}.layui-util-face ul li{cursor:pointer;float:left;border:1px solid #e8e8e8;height:22px;width:26px;overflow:hidden;margin:-1px 0 0 -1px;padding:4px 2px;text-align:center}.layui-util-face ul li:hover{position:relative;z-index:2;border:1px solid #eb7350;background:#fff9ec}.layui-code{position:relative;margin:10px 0;padding:15px;line-height:20px;border:1px solid #eee;border-left-width:6px;background-color:#fafafa;color:#333;font-family:Courier New;font-size:12px}.layui-transfer-box,.layui-transfer-header,.layui-transfer-search{border-width:0;border-style:solid;border-color:#eee}.layui-transfer-box{position:relative;display:inline-block;vertical-align:middle;border-width:1px;width:200px;height:360px;border-radius:2px;background-color:#fff}.layui-transfer-box .layui-form-checkbox{width:100%;margin:0!important}.layui-transfer-header{height:38px;line-height:38px;padding:0 10px;border-bottom-width:1px}.layui-transfer-search{position:relative;padding:10px;border-bottom-width:1px}.layui-transfer-search .layui-input{height:32px;padding-left:30px;font-size:12px}.layui-transfer-search .layui-icon-search{position:absolute;left:20px;top:50%;margin-top:-8px;color:#5f5f5f}.layui-transfer-active{margin:0 15px;display:inline-block;vertical-align:middle}.layui-transfer-active .layui-btn{display:block;margin:0;padding:0 15px;background-color:#2D8CF0;border-color:#2D8CF0;color:#fff}.layui-transfer-active .layui-btn-disabled{background-color:#fbfbfb;border-color:#eee;color:#d2d2d2}.layui-transfer-active .layui-btn:first-child{margin-bottom:15px}.layui-transfer-active .layui-btn .layui-icon{margin:0;font-size:14px!important}.layui-transfer-data{padding:5px 0;overflow:auto}.layui-transfer-data li{height:32px;line-height:32px;padding:0 10px}.layui-transfer-data li:hover{background-color:#f6f6f6;transition:.5s all}.layui-transfer-data .layui-none{padding:15px 10px;text-align:center;color:#999}.layui-rate,.layui-rate *{display:inline-block;vertical-align:middle}.layui-rate{padding:10px 5px 10px 0;font-size:0}.layui-rate li i.layui-icon{font-size:20px;color:#ffb800}.layui-rate li i.layui-icon{margin-right:5px;transition:all .3s;-webkit-transition:all .3s}.layui-rate li i:hover{cursor:pointer;transform:scale(1.12);-webkit-transform:scale(1.12)}.layui-rate[readonly] li i:hover{cursor:default;transform:scale(1)}.layui-colorpicker{width:38px;height:38px;border:1px solid #eee;padding:5px;border-radius:2px;line-height:24px;display:inline-block;cursor:pointer;transition:all .3s;-webkit-transition:all .3s;box-sizing:border-box}.layui-colorpicker:hover{border-color:#d2d2d2}.layui-colorpicker.layui-colorpicker-lg{width:44px;height:44px;line-height:30px}.layui-colorpicker.layui-colorpicker-sm{width:30px;height:30px;line-height:20px;padding:3px}.layui-colorpicker.layui-colorpicker-xs{width:22px;height:22px;line-height:16px;padding:1px}.layui-colorpicker-trigger-bgcolor{display:block;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==);border-radius:2px}.layui-colorpicker-trigger-span{display:block;height:100%;box-sizing:border-box;border:1px solid rgba(0,0,0,.15);border-radius:2px;text-align:center}.layui-colorpicker-trigger-i{display:inline-block;color:#fff;font-size:12px}.layui-colorpicker-trigger-i.layui-icon-close{color:#999}.layui-colorpicker-main{position:absolute;left:-999999px;top:-999999px;z-index:77777777;width:280px;margin:5px 0;padding:7px;background:#fff;border:1px solid #d2d2d2;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12)}.layui-colorpicker-main-wrapper{height:180px;position:relative}.layui-colorpicker-basis{width:260px;height:100%;position:relative}.layui-colorpicker-basis-white{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.layui-colorpicker-basis-black{width:100%;height:100%;position:absolute;top:0;left:0;background:linear-gradient(0deg,#000,transparent)}.layui-colorpicker-basis-cursor{width:10px;height:10px;border:1px solid #fff;border-radius:50%;position:absolute;top:-3px;right:-3px;cursor:pointer}.layui-colorpicker-side{position:absolute;top:0;right:0;width:12px;height:100%;background:linear-gradient(red,#ff0,#0f0,#0ff,#00f,#f0f,red)}.layui-colorpicker-side-slider{width:100%;height:5px;box-shadow:0 0 1px #888;box-sizing:border-box;background:#fff;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;left:0}.layui-colorpicker-main-alpha{display:none;height:12px;margin-top:7px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-alpha-bgcolor{height:100%;position:relative}.layui-colorpicker-alpha-slider{width:5px;height:100%;box-shadow:0 0 1px #888;box-sizing:border-box;background:#fff;border-radius:1px;border:1px solid #f0f0f0;cursor:pointer;position:absolute;top:0}.layui-colorpicker-main-pre{padding-top:7px;font-size:0}.layui-colorpicker-pre{width:20px;height:20px;border-radius:2px;display:inline-block;margin-left:6px;margin-bottom:7px;cursor:pointer}.layui-colorpicker-pre:nth-child(11n+1){margin-left:0}.layui-colorpicker-pre-isalpha{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.layui-colorpicker-pre.layui-this{box-shadow:0 0 3px 2px rgba(0,0,0,.15)}.layui-colorpicker-pre>div{height:100%;border-radius:2px}.layui-colorpicker-main-input{text-align:right;padding-top:7px}.layui-colorpicker-main-input .layui-btn-container .layui-btn{margin:0 0 0 10px}.layui-colorpicker-main-input div.layui-inline{float:left;margin-right:10px;font-size:14px}.layui-colorpicker-main-input input.layui-input{width:150px;height:30px;color:#5f5f5f}.layui-slider{height:4px;background:#eee;border-radius:3px;position:relative;cursor:pointer}.layui-slider-bar{border-radius:3px;position:absolute;height:100%}.layui-slider-step{position:absolute;top:0;width:4px;height:4px;border-radius:50%;background:#fff;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.layui-slider-wrap{width:36px;height:36px;position:absolute;top:-16px;-webkit-transform:translateX(-50%);transform:translateX(-50%);z-index:10;text-align:center}.layui-slider-wrap-btn{width:12px;height:12px;border-radius:50%;background:#fff;display:inline-block;vertical-align:middle;cursor:pointer;transition:.3s}.layui-slider-wrap:after{content:"";height:100%;display:inline-block;vertical-align:middle}.layui-slider-wrap-btn.layui-slider-hover,.layui-slider-wrap-btn:hover{transform:scale(1.2)}.layui-slider-wrap-btn.layui-disabled:hover{transform:scale(1)!important}.layui-slider-tips{position:absolute;top:-42px;z-index:77777777;white-space:nowrap;display:none;-webkit-transform:translateX(-50%);transform:translateX(-50%);color:#fff;background:#000;border-radius:3px;height:25px;line-height:25px;padding:0 10px}.layui-slider-tips:after{content:"";position:absolute;bottom:-12px;left:50%;margin-left:-6px;width:0;height:0;border-width:6px;border-style:solid;border-color:#000 transparent transparent transparent}.layui-slider-input{width:70px;height:32px;border:1px solid #eee;border-radius:3px;font-size:16px;line-height:32px;position:absolute;right:0;top:-14px}.layui-slider-input-btn{position:absolute;top:0;right:0;width:20px;height:100%;border-left:1px solid #eee}.layui-slider-input-btn i{cursor:pointer;position:absolute;right:0;bottom:0;width:20px;height:50%;font-size:12px;line-height:16px;text-align:center;color:#999}.layui-slider-input-btn i:first-child{top:0;border-bottom:1px solid #eee}.layui-slider-input-txt{height:100%;font-size:14px}.layui-slider-input-txt input{height:100%;border:none}.layui-slider-input-btn i:hover{color:#009688}.layui-slider-vertical{width:4px;margin-left:33px}.layui-slider-vertical .layui-slider-bar{width:4px}.layui-slider-vertical .layui-slider-step{top:auto;left:0;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-wrap{top:auto;left:-16px;-webkit-transform:translateY(50%);transform:translateY(50%)}.layui-slider-vertical .layui-slider-tips{top:auto;left:2px}@media \0screen{.layui-slider-wrap-btn{margin-left:-20px}.layui-slider-vertical .layui-slider-wrap-btn{margin-left:0;margin-bottom:-20px}.layui-slider-vertical .layui-slider-tips{margin-left:-8px}.layui-slider>span{margin-left:8px}}.layui-tree{line-height:22px}.layui-tree .layui-form-checkbox{margin:0!important}.layui-tree-set{width:100%;position:relative}.layui-tree-pack{display:none;padding-left:20px;position:relative}.layui-tree-line .layui-tree-pack{padding-left:27px}.layui-tree-line .layui-tree-set .layui-tree-set:after{content:"";position:absolute;top:14px;left:-9px;width:17px;height:0;border-top:1px dotted #c0c4cc}.layui-tree-entry{position:relative;padding:3px 0;height:20px;white-space:nowrap}.layui-tree-entry:hover{background-color:#eee}.layui-tree-line .layui-tree-entry:hover{background-color:rgba(0,0,0,0)}.layui-tree-line .layui-tree-entry:hover .layui-tree-txt{color:#999;text-decoration:underline;transition:.3s}.layui-tree-main{display:inline-block;vertical-align:middle;cursor:pointer;padding-right:10px}.layui-tree-line .layui-tree-set:before{content:"";position:absolute;top:0;left:-9px;width:0;height:100%;border-left:1px dotted #c0c4cc}.layui-tree-line .layui-tree-set.layui-tree-setLineShort:before{height:13px}.layui-tree-line .layui-tree-set.layui-tree-setHide:before{height:0}.layui-tree-iconClick{display:inline-block;vertical-align:middle;position:relative;height:20px;line-height:20px;margin:0 10px;color:#c0c4cc}.layui-tree-icon{height:12px;line-height:12px;width:12px;text-align:center;border:1px solid #c0c4cc}.layui-tree-iconClick .layui-icon{font-size:18px}.layui-tree-icon .layui-icon{font-size:12px;color:#5f5f5f}.layui-tree-iconArrow{padding:0 5px}.layui-tree-iconArrow:after{content:"";position:absolute;left:4px;top:3px;z-index:100;width:0;height:0;border-width:5px;border-style:solid;border-color:transparent transparent transparent #c0c4cc;transition:.5s}.layui-tree-spread>.layui-tree-entry .layui-tree-iconClick>.layui-tree-iconArrow:after{transform:rotate(90deg) translate(3px,4px)}.layui-tree-txt{display:inline-block;vertical-align:middle;color:#555}.layui-tree-search{margin-bottom:15px;color:#5f5f5f}.layui-tree-btnGroup{visibility:hidden;display:inline-block;vertical-align:middle;position:relative}.layui-tree-btnGroup .layui-icon{display:inline-block;vertical-align:middle;padding:0 2px;cursor:pointer}.layui-tree-btnGroup .layui-icon:hover{color:#999;transition:.3s}.layui-tree-entry:hover .layui-tree-btnGroup{visibility:visible}.layui-tree-editInput{position:relative;display:inline-block;vertical-align:middle;height:20px;line-height:20px;padding:0 3px;border:none;background-color:rgba(0,0,0,.05)}.layui-tree-emptyText{text-align:center;color:#999}.layui-anim{-webkit-animation-duration:.3s;-webkit-animation-fill-mode:both;animation-duration:.3s;animation-fill-mode:both}.layui-anim.layui-icon{display:inline-block}.layui-anim-loop{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.layui-trans,.layui-trans a{transition:all .2s;-webkit-transition:all .2s}@-webkit-keyframes layui-rotate{from{-webkit-transform:rotate(0)}to{-webkit-transform:rotate(360deg)}}@keyframes layui-rotate{from{transform:rotate(0)}to{transform:rotate(360deg)}}.layui-anim-rotate{-webkit-animation-name:layui-rotate;animation-name:layui-rotate;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-timing-function:linear;animation-timing-function:linear}@-webkit-keyframes layui-up{from{-webkit-transform:translate3d(0,100%,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-up{from{transform:translate3d(0,100%,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-up{-webkit-animation-name:layui-up;animation-name:layui-up}@-webkit-keyframes layui-upbit{from{-webkit-transform:translate3d(0,15px,0);opacity:.3}to{-webkit-transform:translate3d(0,0,0);opacity:1}}@keyframes layui-upbit{from{transform:translate3d(0,15px,0);opacity:.3}to{transform:translate3d(0,0,0);opacity:1}}.layui-anim-upbit{-webkit-animation-name:layui-upbit;animation-name:layui-upbit}@keyframes layui-down{0%{opacity:.3;transform:translate3d(0,-100%,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.layui-anim-down{animation-name:layui-down}@keyframes layui-downbit{0%{opacity:.3;transform:translate3d(0,-5px,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.layui-anim-downbit{animation-name:layui-downbit}@-webkit-keyframes layui-scale{0%{opacity:.3;-webkit-transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale{0%{opacity:.3;-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-ms-transform:scale(1);transform:scale(1)}}.layui-anim-scale{-webkit-animation-name:layui-scale;animation-name:layui-scale}@-webkit-keyframes layui-scale-spring{0%{opacity:.5;-webkit-transform:scale(.5)}80%{opacity:.8;-webkit-transform:scale(1.1)}100%{opacity:1;-webkit-transform:scale(1)}}@keyframes layui-scale-spring{0%{opacity:.5;transform:scale(.5)}80%{opacity:.8;transform:scale(1.1)}100%{opacity:1;transform:scale(1)}}.layui-anim-scaleSpring{-webkit-animation-name:layui-scale-spring;animation-name:layui-scale-spring}@keyframes layui-scalesmall{0%{opacity:.3;transform:scale(1.5)}100%{opacity:1;transform:scale(1)}}.layui-anim-scalesmall{animation-name:layui-scalesmall}@keyframes layui-scalesmall-spring{0%{opacity:.3;transform:scale(1.5)}80%{opacity:.8;transform:scale(.9)}100%{opacity:1;transform:scale(1)}}.layui-anim-scalesmall-spring{animation-name:layui-scalesmall-spring}@-webkit-keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}@keyframes layui-fadein{0%{opacity:0}100%{opacity:1}}.layui-anim-fadein{-webkit-animation-name:layui-fadein;animation-name:layui-fadein}@-webkit-keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes layui-fadeout{0%{opacity:1}100%{opacity:0}}.layui-anim-fadeout{-webkit-animation-name:layui-fadeout;animation-name:layui-fadeout}html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-view{display:block;position:relative;margin:10px 0;padding:0;border:1px solid #eee;border-left-width:6px;background-color:#fafafa;color:#333;font-family:Courier New;font-size:13px}.layui-code-title{position:relative;padding:0 10px;height:40px;line-height:40px;border-bottom:1px solid #eee;font-size:12px}.layui-code-title>.layui-code-about{position:absolute;right:10px;top:0;color:#b7b7b7}.layui-code-about>a{padding-left:10px}.layui-code-view>.layui-code-ol,.layui-code-view>.layui-code-ul{position:relative;overflow:auto}.layui-code-view>.layui-code-ol>li{position:relative;margin-left:45px;line-height:20px;padding:0 10px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view>.layui-code-ol>li:first-child,.layui-code-view>.layui-code-ul>li:first-child{padding-top:10px}.layui-code-view>.layui-code-ol>li:last-child,.layui-code-view>.layui-code-ul>li:last-child{padding-bottom:10px}.layui-code-view>.layui-code-ul>li{position:relative;line-height:20px;padding:0 10px;list-style-type:none;*list-style-type:none;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-dark{border:1px solid #0c0c0c;border-left-color:#3f3f3f;background-color:#0c0c0c;color:#c2be9e}.layui-code-dark>.layui-code-title{border-bottom:none}.layui-code-dark>.layui-code-ol>li,.layui-code-dark>.layui-code-ul>li{background-color:#3f3f3f;border-left:none}.layui-code-dark>.layui-code-ul>li{margin-left:6px}.layui-code-demo .layui-code{visibility:visible!important;margin:-15px;border-top:none;border-right:none;border-bottom:none}.layui-code-demo .layui-tab-content{padding:15px;border-top:none}html #layuicss-laydate{display:none;position:absolute;width:1989px}.layui-laydate *{margin:0;padding:0}.layui-laydate,.layui-laydate *{box-sizing:border-box}.layui-laydate{position:absolute;z-index:66666666;margin:5px 0;border-radius:2px;font-size:14px;-webkit-animation-duration:.2s;animation-duration:.2s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.layui-laydate-main{width:272px}.layui-laydate-content td,.layui-laydate-header *,.layui-laydate-list li{transition-duration:.3s;-webkit-transition-duration:.3s}.layui-laydate-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px");position:fixed;_position:absolute;pointer-events:auto}@keyframes laydate-downbit{0%{opacity:.3;transform:translate3d(0,-5px,0)}100%{opacity:1;transform:translate3d(0,0,0)}}.layui-laydate{animation-name:laydate-downbit}.layui-laydate-static{position:relative;z-index:0;display:inline-block;margin:0;-webkit-animation:none;animation:none}.laydate-ym-show .laydate-next-m,.laydate-ym-show .laydate-prev-m{display:none!important}.laydate-ym-show .laydate-next-y,.laydate-ym-show .laydate-prev-y{display:inline-block!important}.laydate-ym-show .laydate-set-ym span[lay-type=month]{display:none!important}.laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-time-show .layui-laydate-header .layui-icon{display:none!important}.layui-laydate-header{position:relative;line-height:30px;padding:10px 70px 5px}.layui-laydate-header *{display:inline-block;vertical-align:bottom}.layui-laydate-header i{position:absolute;top:10px;padding:0 5px;color:#999;font-size:18px;cursor:pointer}.layui-laydate-header i.laydate-prev-y{left:15px}.layui-laydate-header i.laydate-prev-m{left:45px}.layui-laydate-header i.laydate-next-y{right:15px}.layui-laydate-header i.laydate-next-m{right:45px}.laydate-set-ym{width:100%;text-align:center;box-sizing:border-box;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.laydate-set-ym span{padding:0 10px;cursor:pointer}.laydate-time-text{cursor:default!important}.layui-laydate-content{position:relative;padding:10px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content table{border-collapse:collapse;border-spacing:0}.layui-laydate-content td,.layui-laydate-content th{width:36px;height:30px;padding:0;text-align:center}.layui-laydate-content th{font-weight:400}.layui-laydate-content td{position:relative;cursor:pointer}.laydate-day-mark{position:absolute;left:0;top:0;width:100%;line-height:30px;font-size:12px;overflow:hidden}.laydate-day-mark::after{position:absolute;content:'';right:2px;top:2px;width:5px;height:5px;border-radius:50%}.laydate-day-holidays:before{position:absolute;left:0;top:0;font-size:12px;transform:scale(.7)}.laydate-day-holidays:before{content:'\4F11';color:#ff5722}.laydate-day-holidays[type=work]:before{content:'\73ED';color:inherit}.layui-laydate .layui-this .laydate-day-holidays:before{color:#fff}.layui-laydate-footer{position:relative;height:46px;line-height:26px;padding:10px}.layui-laydate-footer span{display:inline-block;vertical-align:top;height:26px;line-height:24px;padding:0 10px;border:1px solid #c9c9c9;border-radius:2px;background-color:#fff;font-size:12px;cursor:pointer;white-space:nowrap;transition:all .3s}.layui-laydate-footer span:hover{color:#2D8CF0}.layui-laydate-footer span.layui-laydate-preview{cursor:default;border-color:transparent!important}.layui-laydate-footer span.layui-laydate-preview:hover{color:#666}.layui-laydate-footer span:first-child.layui-laydate-preview{padding-left:0}.laydate-footer-btns{position:absolute;right:10px;top:10px}.laydate-footer-btns span{margin:0 0 0 -1px}.layui-laydate-shortcut{width:80px;padding:6px 0;display:inline-block;vertical-align:top;overflow:auto;max-height:276px}.layui-laydate-shortcut+.layui-laydate-main{display:inline-block;border-left:1px solid #e2e2e2}.layui-laydate-shortcut>li{padding:5px 8px;cursor:pointer;line-height:18px}.layui-laydate-list{position:absolute;left:0;top:0;width:100%;height:100%;padding:10px;box-sizing:border-box;background-color:#fff}.layui-laydate-list>li{position:relative;display:inline-block;width:33.3%;height:36px;line-height:36px;margin:3px 0;vertical-align:middle;text-align:center;cursor:pointer}.laydate-month-list>li{width:25%;margin:17px 0}.laydate-time-list>li{height:100%;margin:0;line-height:normal;cursor:default}.laydate-time-list p{position:relative;top:-4px;line-height:29px}.laydate-time-list ol{height:181px;overflow:hidden}.laydate-time-list>li:hover ol{overflow-y:auto}.laydate-time-list ol li{width:130%;padding-left:33px;height:30px;line-height:30px;text-align:left;cursor:pointer}.layui-laydate-hint{position:absolute;top:115px;left:50%;width:250px;margin-left:-125px;line-height:20px;padding:15px;text-align:center;font-size:12px;color:#ff5722}.layui-laydate-range{width:546px}.layui-laydate-range .layui-laydate-main{display:inline-block;vertical-align:middle;max-width:50%}.layui-laydate-range .laydate-main-list-1 .layui-laydate-content,.layui-laydate-range .laydate-main-list-1 .layui-laydate-header{border-left:1px solid #e2e2e2}.layui-laydate-range.layui-laydate-linkage .laydate-main-list-0 .laydate-next-m,.layui-laydate-range.layui-laydate-linkage .laydate-main-list-0 .laydate-next-y,.layui-laydate-range.layui-laydate-linkage .laydate-main-list-1 .laydate-prev-m,.layui-laydate-range.layui-laydate-linkage .laydate-main-list-1 .laydate-prev-y{display:none}.layui-laydate,.layui-laydate-hint{border:1px solid #d2d2d2;box-shadow:0 2px 4px rgba(0,0,0,.12);background-color:#fff;color:#777}.layui-laydate-header{border-bottom:1px solid #e2e2e2}.layui-laydate-header i:hover,.layui-laydate-header span:hover{color:#2D8CF0}.layui-laydate-content{border-top:none 0;border-bottom:none 0}.layui-laydate-content th{color:#333}.layui-laydate-content td{color:#777}.layui-laydate-content td.laydate-day-now{color:#2D8CF0}.layui-laydate-content td.laydate-day-now:after{content:'';position:absolute;width:100%;height:30px;left:0;top:0;border:1px solid #2D8CF0;box-sizing:border-box}.layui-laydate-linkage .layui-laydate-content td.laydate-selected>div{background-color:#00f7de}.layui-laydate-linkage .laydate-selected:hover>div{background-color:#00f7de!important}.layui-laydate-content td.laydate-selected:after,.layui-laydate-content td:hover:after{content:none}.layui-laydate-content td>div:hover,.layui-laydate-list li:hover,.layui-laydate-shortcut>li:hover{background-color:#eee;color:#333}.laydate-time-list li ol{margin:0;padding:0;border:1px solid #e2e2e2;border-left-width:0}.laydate-time-list li:first-child ol{border-left-width:1px}.laydate-time-list>li:hover{background:0 0}.layui-laydate-content .laydate-day-next,.layui-laydate-content .laydate-day-prev{color:#d2d2d2}.layui-laydate-linkage .laydate-selected.laydate-day-next>div,.layui-laydate-linkage .laydate-selected.laydate-day-prev>div{background-color:#f8f8f8!important}.layui-laydate-footer{border-top:1px solid #e2e2e2}.layui-laydate-hint{color:#ff5722}.laydate-day-mark::after{background-color:#2D8CF0}.layui-laydate-content td.layui-this .laydate-day-mark::after{display:none}.layui-laydate-footer span[lay-type=date]{color:#2D8CF0}.layui-laydate .layui-this,.layui-laydate .layui-this>div{background-color:#009688!important;color:#fff!important}.layui-laydate .laydate-disabled,.layui-laydate .laydate-disabled:hover{background:0 0!important;color:#d2d2d2!important;cursor:not-allowed!important;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.layui-laydate-content td>div{padding:7px 0;height:100%}.laydate-theme-molv{border:none}.laydate-theme-molv.layui-laydate-range{width:548px}.laydate-theme-molv .layui-laydate-main{width:274px}.laydate-theme-molv .layui-laydate-header{border:none;background-color:#009688}.laydate-theme-molv .layui-laydate-header i,.laydate-theme-molv .layui-laydate-header span{color:#f6f6f6}.laydate-theme-molv .layui-laydate-header i:hover,.laydate-theme-molv .layui-laydate-header span:hover{color:#fff}.laydate-theme-molv .layui-laydate-content{border:1px solid #e2e2e2;border-top:none;border-bottom:none}.laydate-theme-molv .laydate-main-list-1 .layui-laydate-content{border-left:none}.laydate-theme-molv .layui-laydate-footer{border:1px solid #e2e2e2}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li,.laydate-theme-grid .layui-laydate-content td,.laydate-theme-grid .layui-laydate-content thead{border:1px solid #e2e2e2}.layui-laydate-linkage.laydate-theme-grid .laydate-selected,.layui-laydate-linkage.laydate-theme-grid .laydate-selected:hover{background-color:#f2f2f2!important;color:#009688!important}.layui-laydate-linkage.laydate-theme-grid .laydate-selected.laydate-day-next,.layui-laydate-linkage.laydate-theme-grid .laydate-selected.laydate-day-prev{color:#d2d2d2!important}.laydate-theme-grid .laydate-month-list,.laydate-theme-grid .laydate-year-list{margin:1px 0 0 1px}.laydate-theme-grid .laydate-month-list>li,.laydate-theme-grid .laydate-year-list>li{margin:0 -1px -1px 0}.laydate-theme-grid .laydate-year-list>li{height:43px;line-height:43px}.laydate-theme-grid .laydate-month-list>li{height:71px;line-height:71px}.laydate-theme-grid .layui-laydate-content td>div{height:29px;margin-top:-1px}.laydate-theme-circle .layui-laydate-content td.layui-this>div,.laydate-theme-circle .layui-laydate-content td>div{width:28px;height:28px;line-height:28px;border-radius:14px;margin:0 4px;padding:0}.layui-laydate.laydate-theme-circle .layui-laydate-content table td.layui-this{background-color:transparent!important}.laydate-theme-grid.laydate-theme-circle .layui-laydate-content td>div{margin:0 3.5px}.laydate-theme-fullpanel .layui-laydate-main{width:526px}.laydate-theme-fullpanel .layui-laydate-list{width:252px;left:272px}.laydate-theme-fullpanel .laydate-set-ym span{display:none}.laydate-theme-fullpanel .laydate-time-show .laydate-set-ym span[lay-type=month],.laydate-theme-fullpanel .laydate-time-show .laydate-set-ym span[lay-type=year],.laydate-theme-fullpanel .laydate-time-show .layui-laydate-header .layui-icon{display:inline-block!important}.laydate-theme-fullpanel .laydate-btns-time{display:none}html #layuicss-layer{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px")}.layui-layer{-webkit-overflow-scrolling:touch}.layui-layer{top:150px;left:0;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;border-radius:2px;box-shadow:1px 1px 50px rgba(0,0,0,.3)}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #b2b2b2;border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-btn a,.layui-layer-setwin span{display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-move{display:none;position:fixed;*position:absolute;left:0;top:0;width:100%;height:100%;cursor:move;opacity:0;filter:alpha(opacity=0);background-color:#fff;z-index:2147483647}.layui-layer-resize{position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize}.layer-anim{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-00{-webkit-animation-name:layer-bounceIn;animation-name:layer-bounceIn}@-webkit-keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:layer-zoomInDown;animation-name:layer-zoomInDown}@-webkit-keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:layer-fadeInUpBig;animation-name:layer-fadeInUpBig}@-webkit-keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:layer-zoomInLeft;animation-name:layer-zoomInLeft}@-webkit-keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layer-anim-04{-webkit-animation-name:layer-rollIn;animation-name:layer-rollIn}@keyframes layer-fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:layer-fadeIn;animation-name:layer-fadeIn}@-webkit-keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:layer-shake;animation-name:layer-shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:50px;line-height:50px;border-bottom:1px solid #f0f0f0;font-size:14px;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:16px;font-size:0;line-height:initial}.layui-layer-setwin span{position:relative;width:16px;height:16px;line-height:18px;margin-left:10px;text-align:center;font-size:16px;cursor:pointer;color:#000;_overflow:hidden}.layui-layer-setwin .layui-layer-min:before{content:'';position:absolute;width:12px;height:1px;left:50%;top:50%;margin:-.5px 0 0 -6px;background-color:#2e2d3c;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover:before{background-color:#2d93ca}.layui-layer-setwin .layui-layer-max:after,.layui-layer-setwin .layui-layer-max:before{content:'';position:absolute;left:50%;top:50%;z-index:1;width:9px;height:9px;margin:-5px 0 0 -5px;border:1px solid #2e2d3c}.layui-layer-setwin .layui-layer-max:hover:after,.layui-layer-setwin .layui-layer-max:hover:before{border-color:#2d93ca}.layui-layer-setwin .layui-layer-min:hover:before{background-color:#2d93ca}.layui-layer-setwin .layui-layer-maxmin:after,.layui-layer-setwin .layui-layer-maxmin:before{width:7px;height:7px;margin:-3px 0 0 -3px;background-color:#fff}.layui-layer-setwin .layui-layer-maxmin:after{z-index:0;margin:-5px 0 0 -1px}.layui-layer-setwin .layui-layer-close{cursor:pointer}.layui-layer-setwin .layui-layer-close:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;color:#fff;background-color:#787878;padding:3px;border:3px solid;width:18px;height:18px;font-size:18px;font-weight:bolder;border-radius:50%;margin-left:0;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{opacity:unset;background-color:#3888f6}.layui-layer-btn{text-align:right;padding:0 15px 12px;pointer-events:auto;user-select:none;-webkit-user-select:none}.layui-layer-btn a{height:28px;line-height:28px;margin:5px 5px 0;padding:0 15px;border:1px solid #dedede;background-color:#fff;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.8}.layui-layer-btn .layui-layer-btn0{border-color:#1e9fff;background-color:#1e9fff;color:#fff}.layui-layer-btn-l{text-align:left}.layui-layer-btn-c{text-align:center}.layui-layer-dialog{min-width:300px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;overflow:hidden;font-size:14px;overflow-x:hidden;overflow-y:auto}.layui-layer-dialog .layui-layer-content .layui-layer-face{position:absolute;top:18px;left:16px;color:#959595;font-size:24px;_left:-40px}.layui-layer-dialog .layui-layer-content .layui-icon-tips{color:#f39b12}.layui-layer-dialog .layui-layer-content .layui-icon-ok{color:#2D8CF0}.layui-layer-dialog .layui-layer-content .layui-icon-close-fill{color:#ff5722}.layui-layer-dialog .layui-layer-content .layui-icon-password{color:#787878}.layui-layer-dialog .layui-layer-content .layui-icon-face-cry{color:#ff5722}.layui-layer-dialog .layui-layer-content .layui-icon-face-smile{color:#2D8CF0}.layui-layer-rim{border:6px solid #8d8d8d;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #d3d4d3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-close{color:#fff}.layui-layer-hui .layui-layer-content{padding:11px 24px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:18px 24px 18px 52px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:76px;height:38px;line-height:38px;text-align:center}.layui-layer-loading-icon{font-size:38px;color:#959595}.layui-layer-loading2{text-align:center}.layui-layer-loading-2{position:relative;height:38px}.layui-layer-loading-2:after,.layui-layer-loading-2:before{content:'';position:absolute;left:50%;top:50%;width:38px;height:38px;margin:-19px 0 0 -19px;border-radius:50%;border:3px solid #d2d2d2;box-sizing:border-box}.layui-layer-loading-2:after{border-color:transparent;border-left-color:#1e9fff}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:8px 15px;font-size:12px;_float:left;border-radius:2px;box-shadow:1px 1px 3px rgba(0,0,0,.2);background-color:#000;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#000}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:5px;border-bottom-style:solid;border-bottom-color:#000}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476a7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:5px 10px 10px;text-align:right;border-top:1px solid #e9e7e7}.layui-layer-lan .layui-layer-btn a{background:#fff;border-color:#e9e7e7;color:#333}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#c9c5c5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95;border-color:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92b8b1}.layui-layer-prompt .layui-layer-input{display:block;width:260px;height:36px;margin:0 auto;line-height:30px;padding-left:10px;border:1px solid #e6e6e6;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px;padding:6px 10px}.layui-layer-prompt .layui-layer-content{padding:20px}.layui-layer-prompt .layui-layer-btn{padding-top:0}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:300px;padding:0 20px;text-align:center;cursor:default;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;cursor:pointer}.layui-layer-tab .layui-layer-title span.layui-this{height:51px;border-left:1px solid #eee;border-right:1px solid #eee;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.layui-this{display:block}.layui-layer-photos{background:0 0;box-shadow:none}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgnext,.layui-layer-imgprev{position:fixed;top:50%;width:52px;height:52px;line-height:52px;margin-top:-26px;cursor:pointer;font-size:52px;color:#717171}.layui-layer-imgprev{left:32px}.layui-layer-imgnext{right:32px}.layui-layer-imgnext:hover,.layui-layer-imgprev:hover{color:#959595}.layui-layer-imgbar{position:fixed;left:0;right:0;bottom:0;width:100%;height:40px;line-height:40px;background-color:#000\9;filter:Alpha(opacity=60);background-color:rgba(2,0,0,.35);color:#fff;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;padding:0 5px;font-size:12px;color:#fff}.layui-layer-imgtit h3{max-width:65%;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-weight:300}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{font-style:normal}@-webkit-keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-close{-webkit-animation-name:layer-bounceOut;animation-name:layer-bounceOut;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@media screen and (max-width:1100px){.layui-layer-iframe{overflow-y:auto;-webkit-overflow-scrolling:touch}}
\ No newline at end of file
diff --git a/static/admin/component/layui/font/iconfont.eot b/static/admin/component/layui/font/iconfont.eot
index 7bc337451f6b30351732415a5cb950f7a8e5ad89..0859a67a5a60042fe49a8e7e65f7ed35e6098fc0 100644
GIT binary patch
delta 3580
zcmZ{meNdFw6~>?UefI+pVfhe&T@?|H0s;ae0^%xYP!SOniHT7Z2~|;Ih&3i8E4u*5~tH~s*`cf8cj3Kq|G0WVxP@Y<;v9Pq{yQ^zhL`cab^sgU{K)Gdz3c!il@f<17A+A+Et2ZWQ({F$2@{
z*=~1{^C}OcU=LpAZ(x7c3ID}9VK^}!5JLovgd+0eQ??9`9uXW
z;6lLXm3`s!?&;S4@O}4&keRIlL95kj|L=E=weAPsPV4`EIqN6*EzY1Hr|}U!#wq*;
zCvgJD@oOBzJNOlj;zJz4IQ$Zaa2W671B^r;M&LcXi(laF5Z=PiaS(4}KOV!+Fd7H=
zGl%14yn+|;EMCPnY{w4lL=RrWF8ma`@jCY44eUiP_92YbXv0g`if)AP6Kp{TUce^&
z7@P4NHlPa|(TVkV9_{!MX5ksE#B4l?r?42y@H9e8(2QElM;&S~2i2H~Aj&ZvlesFD
zD8V#jVJaq}6-!Z!LX;s7`6xgxCL$X-SdOvCL@Ls-0_jLXGEy)Uaaf0V_>h1^48h}!
zT?|ISGZ+~g3s8@Rn1Tk(Eyg@dz%Z=AT9l#@W3UKSXhJlez<9JUU|!5XEc^&y6^h_y
zygcF2QTM|^Pjo2OBt+C<)AI8P;Nx|};Ml`4VSwQCDhw5brwj}lgsEg;_#jL#0|NC+)B0^FWrX*yzfy+I}_
ztUO4b!Wx9+E38IHfr0U7VL~P;EKx|I!eWIKDJ)w^vBCm|OjcORkP?MO4Vj{_ydk9u
z3mr05VaY?v6c#@uRL+J_2Ot#+6#+6$p*BD&6{-Yex4im}`VO3t6sEaUm-dYA>Wkp$bFHk0R7#$SQ@(
z3~5!U(GU~b5E}$JFtH^RZixAJgc1%ht3fE{5VIPDvJP3JP~ahJ6-qs1okG!vn9vf+
zKg29Ip%Fk#s0b~A^>1QA=njx)75W6k#EsA~ASTX)-T^VOC3F#p2^*oGKuo?6It#?)
z3!%qAOui7h4aDRZq3=LU5^gamYU=q#g=PeKNue!4Ox6+_6r@|BRdLxAnigcMLi>Uk
ztsq#z{uPCm1~HmIXl{^g3T+Ou-AuHd7gE^oQ0RS-oeEtL(xcE1A+ITPMu^b_LXU(P
zO(1kj$Zmzc33*+igF^Nw^is$h3dTlpuval#9qCnQwUB)ZJmE@TerN%Y-ce}2kdq2+
z81j)qLxy~;(3&Ba6wGD+XN7JJxuVdwA=ec;IOLxSy&UpDp{pZeGgC}MgGa=z(CQK4
zA{uD=h;RY}?H>`Yr-2&*L?$cT5+G8eaC3l&IVRjDAkwUG!+=Pq!mR@$Oa=ot5#hB7
zDWMrW{Jp{*1tK>U?k#YeD{0^^1Gibe2JScT^)ZDz58P#<8q6Mqp9WmE@~m?<>;v{+
zoml6ZtH8Cx?Q(Z}QatNDfA?zM%=xU+tm9*A#>%*T
zk9{$I?mG^mmeg3BWBL#tio=HuU
zjuqO4dkSwAjV$UcI$eBla`NQvl9465O1_`cI_2FdXG&{J_mzG-wPNbZvh=dPvTNlT
z
zeYnSV+s$s-TIwl4Q#d?$Fh3nSdNvJP?nH3*ks%GRL60pCdQZ(F^Q?!juT_s
ofAhK@!AxZhw*PzF|6NaExplUG+-IFu_~50={u`Hi-42uNKS8BQy#N3J
delta 3939
zcmb7`3s98T8HV5g|Jh}A5q1FqL6n=Qh{#O@xrl(o`vnj$NsM?ws-RSvoph#UdCqtK
zv;S?+_nr4Ww}a084#(a4E8wRe9ds9j+__b9h%4exCyN
zADY)KZ&dJGr^UwqP$=7@b#tTmH*VcLKx!_KFMsQKc;NWR{c$ekuvqyL8lkCHAp7b&q2l8z?
z5n?y-%85uq2;zOA!Hcd*!N0rK1}u)1S*xFZnys~8_^h}7>xXyy5a;n@e1IR}9J=s6
zPU9@j;D>k*KfrhJ4&KEnd>Jn~SCamYpv
z#v%)2kQu;Iq$3qW5RV2VAR2=ai*Q7s1wQx@i713&Dh9yInRPQyX5MYg#XQuY5Ve?r
znaDs4)}R?hs6!g&qY4X{mBkp1Wz0q>DliB`k%$$@hl?q8Kg~4|%x1L2T?DT1(Y3``b;#bjXGAdbQWLRfBw1m(LsAqLJ|tD)5`d&BTnvyA3YSFy
zlFkFd6#_A{LAX{R<_3hT1~OXV`hjF9TuG2I3f41bDtLu)tb!ekSqgSCj#IFUG20N}
z19r2Mqu^D>Tm^d=^AxUY
zu|&aP#!`hU0Vz|c7m!H`l><_)P(vV-6;3FmLP0xYr9y>)R4LRN$P^_&*@09m6d=em
z3Z)1#RiP+BrYV#s$aIB51(~5xvLG`RiWg*-LK%b1Rw!tYISQo>GS}pPE`R+-9?Vmy
zcaR!|$_J@csDY3=g=z?yuTU2u^$HadvOu9$LKZ4iO~@jJ`UzRAV2PQoXBCPn#9Txu
zuMl$)q0mB>D3n}?Ige0$Axjm?Fr-1DAVZcZlxB!|K|+y+tWYS|kd-9BhRO{wc_!3w
zh{-cSIivZdgt`tfGefBG5HmA`S`S&HQ1v0r3iTh-qRk7RTvQMF_
zLiQ`j8Nki~g;onWs33{)kV5-~1QmFK`Mz<1xjZ_m(2yZ#6k0RneT60sIj7LBAwO4W
z+>omZEgbSog=P-9twPb6VStXFqnN@Prbsu1A4gj4BSPar&Zy80zE7Y19uj|27gSTf`>m*xXnP%
zU4|mdJAyy62n}Xq^5m}uzp%2bi#F^I`-XGCxfaq9a^F?$
z>UNj8KMu_b?etW6-tjyfuw}rVfzt;*40wlmPlkEII>J64ls;(Npx*GS;djCxMlAEi
z`!@S7`d9eh^mj*wL}o{JL}f+CMBg5KA|^cMa%@O!YwV>sPu$wLTSKM}xfh=izb*bz
z!s&zuL)#KB4_loSlXNsWF8O5gCn-%SS5qgZo=q!D+miOT5zXnI^tVUWj5<6zcl7Oy
zvW!4$#+5NQGLgAC^L*xmvH4@$vf{Gd%epl#f83sIUv@!uWA^Qwskt$^t8=g9&CWZS
zcPBqPzis@&@iz;~3hqppKH+>}TH%tyjYVNaHASb3dMBn#yj8rkxTE-P$*7VWr3Ize
z%66CCom5wzR=#&~+~mWPPgOKlhF3OLUaEXl<*ACRm~yc?y?Sr;^_lH6duP?n+B56y
z?18f%%vn9BckcapGw1ED@zgZdT&qp5-CBFI_S3q#bsx+Ro1Zj4fBq-+Q|q_ZUt5sU
zl^=E7HJnw?jr`~KIWD&0RD%f=$2pXsRkV%(UJJI4NeMW~DemZ)yyV=1{PYodrX6FM
zkz(u1`y*2S_3i(AzH_|ya!O84ic`Th)aUKJ><##QUZ=wATi4eZ=JSQwooxFS*P6a*
zu4~Wh_g}AN<28p?@;|@+-_Nwq<)rpkrRLx8+ge@RrL^;^g8Ut&3qWu2I2J61wuX;gfCRB2?wSjQ=K948^tYX-a=ux+p7h{x6c
wS94R#Z`v>Kcdgo$TWnqE>b%lw+1AD2!0xgEo;539T(+)Z{fe%s-3ML&0NY}XF8}}l
diff --git a/static/admin/component/layui/font/iconfont.svg b/static/admin/component/layui/font/iconfont.svg
index b64f791..dbb79c6 100644
--- a/static/admin/component/layui/font/iconfont.svg
+++ b/static/admin/component/layui/font/iconfont.svg
@@ -28,8 +28,6 @@
-
-
@@ -270,7 +268,7 @@
-
+
diff --git a/static/admin/component/layui/font/iconfont.ttf b/static/admin/component/layui/font/iconfont.ttf
index 8661b19ee649d7e7be0ba65c5c844ef62741d919..35cfa0bad40a3c581aff22f324b2e60d3f1bd0d4 100644
GIT binary patch
delta 3564
zcmZ{mZBSI#8OQ(k-o3kkD=aS}FRLPgQ9wXIL_kGBgNlftNKA~PNT?A-L##2DwTT*H
zjX~DDG)WT@jWO2x60EVt*fdQ#CgX>GNS#i{X`GDntTAaOGi~$1QSATl^h;*i-T9q!
z?%TP$=Xsw0|9td!D}cY|k&REZC(isj3rN@v
zocN?;eQR6h+1)32?{!kz!4uJO?w1^2Bv~Du-P^yax%W@b_bp&w-?({QYtx>rAP^tm
zxvib8+q>*o=N88)ygy@8Yv=k#4hw8gr8vtI`IUy;iuS+$FLdQ*orP}!sF<`
zPcRRUU@hk3K|F-zScQiXT7eeSVKM4aiv_5`TvVX~voVdUG7F`ci7d>(RJ36wN>GGy
zE@&L?j^@BN2;@h(iGJNWci(&)CIa9K6Gkv9SaVSc>Ur
z#KICR!eorX20V%~G+_dkp&HGI#sipyRtC(6Iq)MLL99bDT*k{A-r~C*?sKC4z^m-dLxhP9F%uJ}IAol{WQSxZOnb<9g#`e~R9Fg-2?~n>lBKXbAlV8F
zB?K`mKwu^`4-r-mWRk)MMGA`*Qmn9SAtee67&1*^DMLyX7BytL!t#ccDJ*oz422~RDOXthkWd91
zLLGoqDpUl>OoiG2nWa!AAhQ+f1*A&BF7|U2Y6xVm!o`JDE7TQ8jY5Ti%u_-X8_0Zx
zvIDtap#VW@6-p6gfkIJ&EL12@kVOiG3R0&~vLK5UiWj6_p^QP6C=@hEgNc6w|NY}U
zSgKIvAdL$34$`Dh`5?;_Y9M5}LN$amE7V2E3WW*@X;G+^kOvg1CS;|8Rc49Ijf7GP
zF*g#JNmeOTSBSYrsI!pO3KbW!MxpjXS{14=#QZ2iJ%+4PsLYTyg&GYpp$)M?6$d7^
zgu)Fm|Bg_?A!aoQ#T;T*gHYBX8x#sWLOiLbrjK{37%n
zh)Kd7CPhs>KdI1+AUhS>62xRJp+P}<6j~LRO`&N)b}6(kh|vmyHSC{KXlW3m354bb
z*{#s#AbZS2dw3z4{a%IM2YE)J3qpDo`XS_5h0X{unn3805Tgl%ZVB11&^IB^DRfZC
z0fk-)d0s(w6bF5Z+3Ltag;opcSKtjFh${#!;n8af%@=Y?p$$XMC^TfqdkU=?@~MJ_
z?Ej?Dts$Q&^livBg$@q+he9uh+)?Q2h}g^&)6n1%aTQuUB3wiRO&<|XV4(dY!u2$8
zBY?;>gGuKVslb3>8nxoqlS`el20e!8C^U2WJ+2}Z|bDf4XGcem8X4|UXp$`
zI5g(?xaM)!GFmcjjL#f@EYq90BlG(SJrgcwm1UjCuFaN-{r7z_Y3tXQ#AG`8Gc-zdQf)f`)=^1xE{mg}qaoryeh|iw+dsC>~qfReZMO
zKZ?koLadfW8Zr=KgUE9)=&Zbs#dwdHB$1LapMGAcSM1C`rm`e$CAl`-qk
z?6%ogs#>bPsJb=h=-m3bN9W$DF0ZbwZmGFFuf1yCmHDxYKB}v%J5=|1-S>+Z)|b>D
zUsBmn*s#Ch^3vL+M;rZ(?Twe3lA7|G`kMZ=tZvzwW!=j&m-jBe)a-9w%l%qk!kg~k
znbe$4>%s7~y>Ep6GSrfoo}OqOV>>j@@pv5Tn8VMCyXH)yZLZ!uV7qpUYuoPKW3FxO
zJ)D%Do^+TOKD4}ty_W5=i4A&vK5x+V`EHrU4Z2ZLJI9!jX{yr_t=@$6^n{`9iD}mF
z9BXL1U6m
zyXSq+^PJ;*?MrXl-6`I6b1cBx31G>x)`s?k@Ox{3fEz%_j1?`fG`07~%mpI4ffH5D
z%NrVp9c;eMYwwYwW)8S|ou+?*q&K&Au9K=KU-5Zg0**hmtX|fzV%a;_f$*Um>uhaU
z*X{_jzhFO(*C)3%v@Z9SdQMdVmu~U~Z~N*sokMGOUjZ)H0YNR`SF^jGbOFwzPx_zq
zI}6OnH~!8&9pUJEWw-CX99H%<+yPH7_`}G(ZKh))@7?Guus8G21;^9V{0@xgY+sUf
z)_T!*%bMvsYDfD9tfby~j$MvX`}IwZeXyVQvKR;P+w4bxqnUS(M=}Bs?+Nk^a!&Bg
zbhdddj#XGIpM6@awr_kotpEDq(>}#ne1ebh3!FhOPU8el;Us>JaiFvV>3}Cl
zVPYU0GB8CD7LI|*g0PqjOdG^jm_P_?(7;qe_-q4{3JLU@h6nrt!WS5rX^2Z<&LP1H
zvkzg-8CVApx5A2m@MjoU8<4>Ys{|6NuwEcx3M&WVQQ#fHPPoEyf3oEL2DW;57|v7D7oduzDeh3hNkR9zd|4
z(Y%DPv?0j~iyV@ou-qZ33JV{Srf>;B(iJWS$Z&|`9P;4Q`?1-lr>DcH?ete~5*M8O`$@e1}bdP~_5_!!F+>|-ofs1lG0g?a&*pins=
z6BTL*WRk)Og;Xl&Vw|i{VIWlswFWXp@ltjmQxysj1evB#lpxa;$`fRULZO1p
zR47@HSqjAqGFzdHLFOnFG{{_q(gvwE`LE`$U(17e3iS?Bqfq%EwF)&5Qm0T2A@ddL
zBBWlSLP8cO)Jn)gg{ld8UZH+M7AaV4rt1ZTq6#rL5y~sX+(am}ki`lm7h6ko^^
zg)$6jP$>G%Ze>Li>VrDKs*OSqX%e2HB+0+#s73+8ktyLc@b>H4oa#8)6x^DRe=|>k9o4
zvR$DwLf%m5k&qn<-4bH-fzUT0Mjr?r6!MlrFNN$<=&F$23i5*4=~ig9kUa{L8TTr*
zUx-hE%eN(LjJKLc2NW7I?HclHg~koJs?fqAzg1}FkUI)(9r9O&
z1`p{|X!Y%;F<=>PC@at+)Gz|YAwa8Cd~A7t5=dV||
zcYvR3&%j*-{Ot<&6Y#Sz4BT1xPJ3d!l|1~V!fgip_Y`h8aNnhH>w)`xm4TZO{P~!|
z?FjzDA~cwd$TW
zchHPMkG$?-?js?tke-lRgEIzi8r&CpHS})iqp+o(c+Yyz`S8Z@_rtG51VrRU^hD-F
z#YEkSJ{%Job1^m`wmtSjoGY#^?)H#rL+;0C#&3#$oNyxH;n2>+i^EnX$0Q#}iAy<>
z@_A}=>eaOIX{XXF(l@04eRxZTE91ivH6!mp84768(GL&pLI6tVRm75
zXHHzs@toUZ3diio_2d@iHs#*Qo0cDwzcT-`f;k083hox>7IuzZIQC{yMbX`HGsc}Q
zPA^_uytX8yq^9IVN#FR?@wZEtl=hU~D;rsMqr9m6TE+H?dlTv=rcc~CDQ?ofNyjRi
zCWlULntWmM<0@BGT;-JWQ!}RSoO*p$*Q~zTb+dQOJ~e01oQHE)&h4vyFmKkp?KQ5N
zrkZQD8MPa0Z`OWUS6%n<{E+#{^9$#HUO%mVWBs)Ssl8hw4mp!p_1wsR?Ks25mP9oe
zM{%4>30gtx@ZwG1rOZ^Xost?D6;qIsUsRYeyuh@hEi+PTeS3d++P}{Jzt`J``YxvC
z<)zw{Y=b=RzKd?J$K$pu-JaF`O(7mnh+{w7{zbK>Z<_1cbBBjtuVv#lhgQlzPyg>%
zI?m*!4OFG&<)v8{((?Krm={pe!meG0M8ac3`9(5MWzZO#4!QS9D@xw8OOhjaHzeE6}n6`%QcB
zq`AX1zjHWGIvr1&uwhP@%Q-ACDClvL>6vD$ISe!>;u0gR!{)Am#gU2D?`_AxV#~HI
z>+p1kZ6!pMN5;oTmPaIH+jhBa+X)eFGvMZc!{N4VaXAP6W*%yVoA%rLy`OB$FSX9~
ge(|ez%VC}OExKG0>{_+_m8Gj2IvRW5y}ZZy4>mA}A^-pY
diff --git a/static/admin/component/layui/font/iconfont.woff b/static/admin/component/layui/font/iconfont.woff
index 2e9cd2a675e80ee2f5d0800f32984e38c16882d5..afb843a1843bf9c93a170d6dc620a156b1f54343 100644
GIT binary patch
delta 31519
zcmV)GK)%0}g94C(0u*;oMn(Vu00000fe-)-00000$t;l+J%1cd0b^}pZ~y=ShyVZt
zuaR30U#1lQ~Bxq$}WB>qoz>(;NnF8^K5TpVE_Pmd;kCeasU7U
za#MvQ9BpBEa5w+}dhh@M03QGV03ZSm1L|&JZDjxedk_Es0Z#w`0)IOYutacgb94Xz
zd|&_o1g!u72VwdfEM}7k0dId`V7|l91QcdOQN#oQPbCY-c%0qVM{iVj6vpA74K8#8
z#`NBssiya8dbjDlSJRv6&GZr=gph%&yDJ)on#CKr9>imsRz5xtZdiBh${`Y?{+W7yq$jh;7
zcGGUz9eZex?YX_Mm-eTC<{e<87gJ1cLM?B^ie&!($
z_=z96&mF$wdw$?sI`MxEUvrNy`HEKDr6phRIiK+)F6~*0GWaEMhV9Si(|Dna@q#U>
zs-9|-^=
zQ-IYJ&jVIVJQ-MR@r+<~#M6S+70(S;Pdq_bo_Ln9`r@g=8i?l$Ybc&HEMGixSR?WD
zVFltj#2Sky5^Ex!O{}SSO0j0*dBvKGCl_lWo?)z|c$$B)R^qwFT8k$fYa^a@tgU$J
zv3BD5$J&cG0oFl?|LrK=4p=84-mkL|-=m9ocVJz`TLkMS-X~ah@n*q#h<6OuQ@m}k
zLh;_gdWkm>)?2)bus-6gg!L8gC#;`%Q(^tZI}0lkZ!c_sc#mNN#TyM9B;IY#)$VPHdeezv2o&^ij5a<
zS8RfK&tenB8y71U?_O+@cnf2b#rqhWBHql{RPm0+rir&THeI~8u^HkGj?EPBa%`4(
zt7Egp`yHDj#OIwW-uc)(@%G0`g!mq%;&%jWzW9H=0b3x%aSO%o7uX{4I|sH{i1%0`
z#Ct3i;`=QV;`=QZ;`^--;+(A%;+(A#;@qzm;`*!+;u@|MViwj3ah=x-F>4!yn30V_
z%*7@lW^l6*v$I8r%xx872Db?@?`1-KuI)mcn;k;T`%WP;u}g^g-7Q46_6U)!y+UMb
zpTvL8W&4H56qQJrbgy9t)APXF_E9xe%FtAw=)K6yl!q
zrw}vvR(#hXWr}Y-q%86Mhm_o#CI&x1MzK(^i*QYNUy{waGAKhJD)m>FxRej$*N6$Sy_rVOzFf+g)FvE>7
z1Ip!r*D3;nvnpO7iX7fLfUd5Ji!Q6nvMRD(ySxIfy05F#Io}hR)jcyX?0$c~A76KN
zWMpJSWE@XCcSJKR13%p84O<=5}=SjZf1yk1ne$ALYsF4f}cy%n8DQZ|z>Wq<6=@
z=YA3So@H6{ufmrstOe1n*P=XhD_qr5mPC4k%E+de1RaqYCVDZvG(6TZPZ}H=kBnUr$4@n_Sd`SAJB0VJPmh=$M3cgR;
z{$N4=nY7n5%&e)O_05b)W4zk(E5)1j~)g2GTVq(f0%lb`Twzc#D>
z-|GHW(OzF{p*h$EUhf@uCK6lnmIqW?Byv5r{G
zyyk-Qhek(-&cEOf2hJZJ85utRz_kaqZm#$B)i-Z_X4|HEqfy_q?LcX^WJLY_9g*&c
zCPz?C4I2@|?}=sAU}^c?w4#m}K1NIb;f(r!PCRi&JJ}lIdfnn00iHxJ(f+
zmb<&gVZ>>xR8)Yp?5Sqfopv^8g90WGtIME;TE-|qr9f090F+h$CMlE(Ja_s_lMo6R
ze?9AVtzXmA+uO5d{jNRh)|7i-F2;ri@9dBSMGzho!j`~)hV|(l@dq-iMLbV?SW&h&
z%M#qbCq@FS_+2>(mCmmElv97HYt|Fdh&;ZOR{8byYb(9oU9&59(m9%YZ?iFgY8)T&
zpo&NEh86oCMM)9v79&9-Lg?{cCkRm)5t%aUi+Jq+5Q)iBIN^ng3oHR=8WthOoekO^{M?eulgZ29
z-mJ%BlYKj;)|XPe%BM=}r*`yB#$xp*5hogriClWHHFE9+8#a#iCk#T2ME~f<4Huj{
z(i%+X=yzrK?pMiiG7f!BGZlZpxyzW1%z4Zu%$u3p={i13--|A#aH)n-3&H{gIsyx{
zdB#JYUqoR+6P^B$cQ9OrqO)cVo&Jz_7lFGZxYHjnvvJwd&Qhs!>9S8RL^e(xnwmOv
z3k{}Vwj(g%?hVaJQ7I=I5J>aiI2Feo5`~U0>OztoQf|y
z<8w}Ay!}B4@E1=j^~$NZ=hR1V_o?_Y+78K28#DjJsrXB0w0r>;zC!YVH=6K})eErh
z1m1;$rn6cby89&X?N=>II9g3QS?(_$o9!PR-0a~*K`Bg(94%@pMq1fOc_finkccob
zHAx``FZ-0FQOfwjKAnGz&)*vMNGtn75zANR`N6u`6*sHsE^o?67h;uMig*dn`V2WP
zcBck=I&y(R!WRuETpI8s`8pW|%AIDqnE?vLDmD|iHj4Wy*Z_v2g8N2sErCrw4+Ja2
z1Ih#HedZ)@{pbx-Q#X9{^X}~{{daumj!TAyE^%-6S2atQg_D1N?=y;FD9?EPWaLz4
zdYkWQE#{`T&!Lo}X^Q;=$;(E(et*R8ciZ|+@-1juSLIqRJ3m-w_@
z8`obR?CI?rRV#n%hMMsxj(4qGwsXs#t!q~wj{Q8eaoZn{?UeVpXqKuYW8~PjTtQdRZPl+p6PhFBv3NCCtL!J}@TD_WLHrik4kuZuZxB;J$
z08}26iw+?H^^>g*Jb%r9gHdVS#qU_rbLX2UANc48dfq8usdE5X2NEoYSlsC+N{HK)
z2^L~1;k-c^;kch*iDywyC!Y*z`FfR43y~wY<*^{
zTm9Ap#ih}36n~ww`b(mSF)t^RUJVWJyY9dks+P8+uH2i(h{HhH*~+SNdDV6rxO~f#
zr_1z57hf{KC`7vSJluZQitLz`3
zx+qJc{Z1|ZuX0$&GGgs{ndm-`_*0*t3FxpWA$gnqdw)cKl%L-HFsu4~?9WBNZvXsC
zA~qu8zwG}yL^93Du_{U-=YIB%mk;g%F{;Py?p%z`$JSON}`D<3K-E?5*w$VG;
z{;jq0%75`o_ecYoKi3K!d4OQwQ3`%B0HkWKc#<&y(wrge1sl5@|w
zUPFT6tktiP&yXqRAoQq>*aiO7uaB->hbM5^H-Gw@MCk%e8AA)1Fu(9_;n#iNa9*Dx
z8AXsV(hddDhn*}*ZhgzmE(gwrF1-KC^F9>WIv82!6$n?
z1Kqi3K$ST{XOjhv&8JzBRK9!3@{zGxZzf^YW5w)5v(}M|hy9vI;#h?6EQ^WH#P@b&
z@_)fF%lf?Wa3R%|?MP)pmft_A$0D7kU-epMBpBBHJ}VNm0Gr1;(p~9%Bw{K)e<&1>
zrDN%6!V3E=j>w{>_`F|=DY~E_Oj!%HpHBR{(r{fK}
zVqs+H(r?3sid=!j88Hx!7n!dG{@5*vnSahZm#yn3vvF?u
zZhX8tR~ubAI^JLJ?(gre_m9IvZLSK~MS!tTP1*$xVB;w1BR4XBkS#iZ;`RcJw14Ga
zz(5WXgRbN$B{LoN(OJWVEUD{RqaMfx;E&Y1I`3G&ap{tE>y|A2G~Dc`X9oMHruqlp
zHas{pGdMhx8Xr#`habFZfv$<^Axy}E^oEDmLp;qfrYX)5X&V+@hi$--J3lS%4DjU48AfKDP^kJ)!E)`S0s;a8(BX8%Iru7
zU_%~vHm_}V(g^-7&0EdjJH3AI;&lPag#HxHWWs+6Wj*#=BKaHX!;Nm3kAI-+f0Mjy
zYU;A&3L+3pR#?^wxCz9*Z=q0TQ3hNExJd(9Vv>%+s7p^AY64h^xYPpT4((`gbZmeC
zLmVbD1LAK2TLD)D2I7mEfnELmyAIJ{b8&L@WYG!GPmQpFJgW}B_3$bWg1C3%(G|c@
zt~k0uK}`Ryfn!cF=Y}pV(tlFLWA3fjYv{`OfuW%T_>!^*Uh%)
z^F@&F6M&I8CImvyKU&O
z*kDQv0u_j$zh%Z3hvlPPdnxSKqQL1vYhdZgGI
z9!LpdqI;-6)$8%FDkqY3D3%Oqv9yjpucc!?pAzWS1o0#@?|-b?>GQLq;tk#!vcHD?
zzRuoa_|}xllR=;SfBzzRThDz_w$QWR_<0a-k>yZ1E2%7(Nq?7RDHF-C#0dDiL$YjI
z*?PE3wtwZ%L{&AK@uL{;4W;Xu?$vcbAKNdD5zGl8pI?jjuq+}`D-jBN)DMdCcH|Z9
z52B#`_rV})+5e#g+VuE1IYub-3yg>H!HDX49qG`6h5KXn18AfD02#N3(6``kx&4(M
z6hxQXkE5vl6@UAxF*J+5U>`SK!=TYo;C>+0%=q1|i7Qh|Ypj)}}`
zGS$Y&UQR?agR}d#?%pyr8ZBYO6WPNG0&B87GJHw1qq`mnAyJJM8dK={OlP@-OXD4t
zP7*M)470$?J^{R}Lg^QBr6^YgXgRDI?XN?@+;M3*`W?!i38%)V&G7(4V#bv_?^8k^
zk1}&Go`3ACZ{GIIHsDK>@q;sp#}iW4U!Tb>>Xveu>&dv`wRcktfsT2N3@3*}T>Qc%
zOV=FO=4#%y9ayt;$%Sz)6qdQno7c_lSX5+PyJK$Mo7?mYz~c%0UB&_qa}7|4texB!^+uEM0!z@}+}>$2o!y?Y#8z|GxZ^ofy$lcy8~3pC34Xj=sb8
z_;|jVhYOkc&dvgqgsH@dR4M_t65-#~pM;-&_!dpCMxxP3)p;Ylb7d#M#tPz=n9k)3
z`G0A*jJ-NaYs@d`hD-PfSUGW^pGDwP`W#(dHsHc@AX|6j4f+h7)R@?W%ImNoHehNe!;?o31+iaJ9CvyX)>f`!BnE&$<0Wn<|x6
zYs74=wzO7rX%+uy9Gd!dN3R-YD$L+(G@0%SFdb;m>Sxoq8fmI;pe?6L)_?6A
z)?S~4U=#nMWtwqlseQeJ7uVV}rp
z@&BzH8b2N>6e3PwDn}L52@o@``hN{C4OT72(BZRXB}^eQf0U+S2{c>IkrI=sV|K{lHN`nrkP&0NS_L-mTNS#+kNt>dJkb|68u4^};a9PJ|2fEKBQ
z-RLWnP~((X9tRB0)7;R>QB3LXq9Lo8H06b3;hHS6uR*(XrNds6$g<0`+yP<6^}0XygZf#`x%z=
z2ZYel4v(&Tn!C|&S#CT1Du4a_c8*on)QrYDX~h9wJSq2#_Q=V&cUhlb{ZF6CuB0C>
z=Eo*ivdHxP!Dj}#nhB$}#-7tc8eC7Hdci0*@WsVG^ljWIqWuD^SOJ!2v7~AW9+OOk
zh{+s+wxTMPD*+CV0vviA{bD+h1}-GsNaNJFeGKg$N4ssH-u5x~sehfni9Y7!KW*_4
zeg0?8vd%z=b_5auxEMxq^1lba(x(40M>^?arl~d02xJ?;&NrO9t1cF@j*6ve)!X`G
z3dS^{PBS{0Uz5&3;a^>Wp0r25@CDTEH4XJ<)il+cr@W@=y@dw2Wsk!98~@o!r#Vpf
z75KraDf>^8llFg2O@HAnkggg)yJ=Z8|I$JoUK9P})YSY-Q&VVFyD|u-CMPMsc=Dgf
z1EdTXxe6TPc4j|ti#O0QYyf#pXH;O+vjr6gbYKtUP1Xn(@N8hq>+n1
zovu*)X#x0W8;%VRcuN?KmhR?-wNGWaA=C`=#X3MYj1e7pE`RNacbAjl=5GLyb#)7$+vJ{
zzR}3{VL;$Bg@4*rJ`?%1Yv%uve(M3B71Y9d2u%7SDlnJ1tUhHd7y