Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ad0f174996 | ||
|
|
45874b17ee | ||
|
|
d7d7e554ee | ||
|
|
8835721924 | ||
|
|
4748a286db | ||
|
|
7501ae1dc2 | ||
|
|
9fc2eb0ae3 | ||
|
|
12d4dfe410 | ||
|
|
d54eb4dc3e | ||
|
|
246ce3b3b7 | ||
|
|
36250fad43 | ||
|
|
0d25b479e5 | ||
|
|
7e6aecc99b | ||
|
|
82de7b0273 | ||
|
|
8760f21b03 | ||
|
|
1e34ef339a | ||
|
|
5333a68416 | ||
|
|
decde3a69a | ||
|
|
9dcc05deda | ||
|
|
c0d963628b | ||
|
|
6978002393 | ||
|
|
3453b01938 | ||
|
|
820ab9f5c6 | ||
|
|
9490ccb7c0 | ||
|
|
056c4b7023 | ||
|
|
d4d8d8b294 | ||
|
|
8bc5d6e0c2 | ||
|
|
3fa8ae0a8a | ||
|
|
316ebc2441 | ||
|
|
550f99e468 | ||
|
|
b9c449ad57 | ||
|
|
db5b4e89ed | ||
|
|
733286b090 | ||
|
|
7505e4552b | ||
|
|
e918727984 | ||
|
|
00053da117 | ||
|
|
27f5d78c35 | ||
|
|
97e0160aaf | ||
|
|
04794e583f | ||
|
|
0640255519 | ||
|
|
460984f209 | ||
|
|
635dcc1dac | ||
|
|
b26237e24b | ||
|
|
a35d443fb6 | ||
|
|
ab4bb1ca40 | ||
|
|
2b7304e615 | ||
|
|
64748e513d | ||
|
|
5b07fed518 | ||
|
|
eb85e30b79 | ||
|
|
b8e0173a9c | ||
|
|
0ca75c81d4 | ||
|
|
aa86bbe372 | ||
|
|
86f07817b1 | ||
|
|
3f74011c98 | ||
|
|
ce8adda79d | ||
|
|
5470837707 | ||
|
|
c26f15ae69 | ||
|
|
4d6d998ae2 | ||
|
|
d628432621 | ||
|
|
2bcaa8e071 | ||
|
|
ebf76055a4 | ||
|
|
b2b08769b0 | ||
|
|
aae15fd07a | ||
|
|
945f746d97 | ||
|
|
dce7908041 | ||
|
|
0ba2b3aa56 | ||
|
|
17792ccacf | ||
|
|
e3dd5458ad | ||
|
|
e9bd8a17a0 | ||
|
|
b8870d4c33 | ||
|
|
8fba71c464 | ||
|
|
0cb74c5eb7 | ||
|
|
6da6768f81 | ||
|
|
05dff28523 | ||
|
|
d7c7237cd4 |
@@ -0,0 +1,3 @@
|
||||
FLASK_ENV=development
|
||||
FLASK_RUN_HOST=0.0.0.0
|
||||
FLASK_APP='applications:create_app'
|
||||
|
||||
@@ -115,4 +115,10 @@ dmypy.json
|
||||
.pyre/
|
||||
|
||||
#ide
|
||||
.idea/
|
||||
.idea/
|
||||
|
||||
# 数据库文件
|
||||
*.db
|
||||
#上传到本地的图片文件
|
||||
*upload/
|
||||
migrations/
|
||||
@@ -29,111 +29,108 @@
|
||||
<img width="92%" style="border-radius:10px;margin-top:20px;margin-bottom:20px;box-shadow: 2px 0 6px gray;" src="https://images.gitee.com/uploads/images/2020/1019/104805_042b888c_4835367.png" />
|
||||
</div>
|
||||
|
||||
#### 项目简介
|
||||
>Pear Admin Flask 基于 Flask 的后台管理系统,拥抱应用广泛的python语言,通过使用本系统,即可快速构建你的功能业务
|
||||
>
|
||||
>项目旨在为python开发者提供一个后台管理系统的模板,成为您构建信息管理系统,物联网后台....等等应用时灵活,简单的工具
|
||||
>
|
||||
>各位Python爱好者多多指教
|
||||
## 项目简介
|
||||
Pear Admin Flask 基于 Flask 生态的后台管理系统,该项目旨在为 python 开发者提供一个快速开发前后端半分离的后台管理系统的模板
|
||||
|
||||
Pear Admin Flask 分为 Common / Simple 两个版本:
|
||||
在使用本项目之前最好掌握以下知识点
|
||||
|
||||
[** Common 通用版本 **](https://gitee.com/pear-admin/pear-admin-flask/tree/master/)
|
||||
+ [html、css、JavaScript](https://developer.mozilla.org/zh-CN/docs/Learn/HTML)
|
||||
+ [jQuery](https://www.w3school.com.cn/jquery/index.asp)
|
||||
+ [layui](https://www.layui.com/)
|
||||
+ [flask](https://dormousehole.readthedocs.io/en/latest/)
|
||||
+ [flask-login](https://flask-login.readthedocs.io/en/latest/)
|
||||
+ [flask-sqlalchemy](http://www.pythondoc.com/flask-sqlalchemy/quickstart.html)
|
||||
|
||||
[** Simple 简洁版本 **](https://gitee.com/pear-admin/pear-admin-flask/tree/simple/)
|
||||
|
||||
#### 内置功能
|
||||
## 预览
|
||||
Pear Admin Flask 有以下几个版本:
|
||||
|
||||
[master分支版本 ](https://gitee.com/pear-admin/pear-admin-flask/tree/master/)
|
||||
|
||||
>flask 2.x + flask-sqlalchemy + 权限验证 + Flask-APScheduler 定时任务 + marshmallow 序列化与数据验证
|
||||
|
||||
[Mini 分支版本 ](https://gitee.com/pear-admin/pear-admin-flask/tree/mini/)
|
||||
|
||||
>flask 2.x + flask-sqlalchemy + 基于角色的权限管理
|
||||
|
||||
| | |
|
||||
|---------------------|---------------------|
|
||||
|  |  |
|
||||
| |  |
|
||||
|  |  |
|
||||
|
||||
## 内置功能
|
||||
|
||||
- [x] 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
|
||||
- [x] 权限管理:配置系统菜单,操作权限,按钮权限标识等。
|
||||
- [x] 角色管理:角色菜单权限分配。
|
||||
- [x] 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
|
||||
- [x] 登录日志:系统登录日志记录查询包含登录异常。
|
||||
- [x] 服务监控:监视当前系统CPU、内存、磁盘、python版本,运行时长等相关信息。
|
||||
- [x] 文件上传: 图片上传示例
|
||||
- [ ] 代码生成: 构想中....
|
||||
|
||||
#### 项目结构
|
||||
|
||||
```
|
||||
Pear Admin Flask
|
||||
├─applications # 应用
|
||||
│ ├─configs # 配置文件
|
||||
│ │ ├─ common.py # 普通配置
|
||||
│ │ └─ config.py # 配置文件对象
|
||||
│ ├─extensions # 注册插件
|
||||
│ ├─models # 数据模型
|
||||
│ ├─static # 静态资源文件
|
||||
│ ├─templates # 静态模板文件
|
||||
│ └─views # 视图部分
|
||||
│ ├─admin # 后台管理视图模块
|
||||
│ └─index # 前台视图模块
|
||||
├─docs # 文档说明(占坑)
|
||||
├─migrations # 迁移文件记录
|
||||
├─requirement # 依赖文件
|
||||
├─test # 测试文件夹(占坑)
|
||||
└─.env # 项目的配置文件
|
||||
|
||||
```
|
||||
- [x] 文件上传: 图片上传示例
|
||||
|
||||
|
||||
## 文档
|
||||
正在编写
|
||||
|
||||
#### 项目安装
|
||||
|
||||
## 安装使用
|
||||
|
||||
+ 下载源码
|
||||
```bash
|
||||
# 下 载
|
||||
git clone https://gitee.com/pear-admin/pear-admin-flask
|
||||
|
||||
# 安 装
|
||||
pip install -r requirement\requirement-dev.txt
|
||||
|
||||
# 配 置
|
||||
.env
|
||||
|
||||
# 切换分支
|
||||
git checkout mini
|
||||
```
|
||||
|
||||
#### 修改配置
|
||||
|
||||
```python
|
||||
# 主 机
|
||||
HOST = '127.0.0.1'
|
||||
|
||||
# 端 口
|
||||
PORT = '3306'
|
||||
|
||||
# 数 据 库
|
||||
DATABASE = 'PearAdminFlask'
|
||||
|
||||
# 账 户
|
||||
USERNAME = 'root'
|
||||
|
||||
# 密 码
|
||||
PASSWORD = 'root'
|
||||
|
||||
```
|
||||
|
||||
#### Venv 安装
|
||||
|
||||
+ 安装依赖
|
||||
```bash
|
||||
# 创建虚拟环境
|
||||
python -m venv venv
|
||||
|
||||
# 然后使虚拟环境生效(windows)
|
||||
venv\Scripts\activate
|
||||
# source venv/bin/activate # (Linux激活虚拟环境)
|
||||
|
||||
# 安装依赖
|
||||
pip install -r requirement.txt
|
||||
```
|
||||
|
||||
#### 运行项目
|
||||
+ 数据迁移
|
||||
|
||||
默认的使用 `sqlite3` 作为测试环境的数据库进行演示,不需要按照mysql即可查看演示。如果需要二次开发,建议改成 `mysql` 。
|
||||
|
||||
如果需要在开发环境使用 mysql 作为数据库,请查看 `applications/configs/config.py` 文件里面的相关配置文件, 注释掉 sqlite 的配置即可
|
||||
|
||||
如果需要修改数据的配置信息,请在 `.flaskenv` 里面调整即可
|
||||
|
||||
```bash
|
||||
# 初 始 化 数 据 库
|
||||
python test\init_databases.py
|
||||
flask db init
|
||||
flask db migrate -m '数据初始化'
|
||||
flask db upgrade
|
||||
|
||||
flask init-db
|
||||
```
|
||||
|
||||
执行 flask run 命令启动项目
|
||||
+ 项目启动
|
||||
|
||||
```bash
|
||||
flask run
|
||||
```
|
||||
|
||||
#### 预览项目
|
||||
## Git 贡献提交规范
|
||||
|
||||
| | |
|
||||
|---------------------|---------------------|
|
||||
|  |  |
|
||||
| |  |
|
||||
|  |  |
|
||||
- 参考 [vue](https://github.com/vuejs/vue/blob/dev/.github/COMMIT_CONVENTION.md) 规范 ([Angular](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular))
|
||||
- `feat` 增加新功能
|
||||
- `fix` 修复问题/BUG
|
||||
- `style` 代码风格相关无影响运行结果的
|
||||
- `perf` 优化/性能提升
|
||||
- `refactor` 重构
|
||||
- `revert` 撤销修改
|
||||
- `test` 测试相关
|
||||
- `docs` 文档/注释
|
||||
- `chore` 依赖更新/脚手架配置修改等
|
||||
- `workflow` 工作流改进
|
||||
- `ci` 持续集成
|
||||
- `types` 类型定义文件更改
|
||||
- `wip` 开发中
|
||||
@@ -1,6 +0,0 @@
|
||||
from applications import create_app
|
||||
|
||||
app = create_app()
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run()
|
||||
@@ -1,35 +1,49 @@
|
||||
import os
|
||||
|
||||
from flask import Flask
|
||||
from flask_uploads import configure_uploads
|
||||
from flask import Flask, Blueprint
|
||||
|
||||
from applications.common.utils.upload import photos
|
||||
from applications.configs import common
|
||||
from applications.extensions import init_plugs
|
||||
import config
|
||||
from applications.view import init_view
|
||||
from applications.configs import config
|
||||
from common import register_api
|
||||
from common.flask_uploads import configure_uploads
|
||||
from common.utils.upload import photos
|
||||
from extensions import init_plugs
|
||||
|
||||
api_bp: Blueprint = Blueprint('api', __name__, url_prefix='/api/v1')
|
||||
|
||||
from .rights import register_rights_api
|
||||
from .system import register_sys_api
|
||||
from .users import register_users_api
|
||||
|
||||
register_rights_api(api_bp)
|
||||
register_users_api(api_bp)
|
||||
register_sys_api(api_bp)
|
||||
|
||||
|
||||
def create_app(config_name=None):
|
||||
app = Flask(__name__)
|
||||
def init_api(app: Flask) -> None:
|
||||
app.register_blueprint(api_bp)
|
||||
|
||||
if not config_name:
|
||||
# 尝试从本地环境中读取
|
||||
config_name = os.getenv('FLASK_CONFIG', 'development')
|
||||
|
||||
def create_app() -> Flask:
|
||||
app = Flask('pear-admin-flask')
|
||||
|
||||
# 引入数据库配置
|
||||
app.config.from_object(common)
|
||||
app.config.from_object(config[config_name])
|
||||
app.config.from_object(config)
|
||||
|
||||
# 注册各种插件
|
||||
init_plugs(app)
|
||||
|
||||
# 注册路由
|
||||
init_view(app)
|
||||
|
||||
# 注册接口(restful api)
|
||||
init_api(app)
|
||||
|
||||
# 文件上传
|
||||
configure_uploads(app, photos)
|
||||
|
||||
logo()
|
||||
if os.environ.get('WERKZEUG_RUN_MAIN') == 'true':
|
||||
logo()
|
||||
|
||||
return app
|
||||
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
from applications.common.utils.validate import xss_escape
|
||||
from applications.extensions import db
|
||||
from applications.models import Dept, DeptSchema
|
||||
from applications.models import User
|
||||
from applications.common.curd import model_to_dicts
|
||||
|
||||
|
||||
def get_dept_dict():
|
||||
dept = Dept.query.order_by(Dept.sort).all()
|
||||
res = model_to_dicts(Schema=DeptSchema, model=dept)
|
||||
return res
|
||||
|
||||
|
||||
def save_dept(req):
|
||||
address = xss_escape(req.get("address"))
|
||||
deptName = xss_escape(req.get("deptName"))
|
||||
email = xss_escape(req.get("email"))
|
||||
leader = xss_escape(req.get("leader"))
|
||||
parentId = xss_escape(req.get("parentId"))
|
||||
phone = xss_escape(req.get("phone"))
|
||||
sort = xss_escape(req.get("sort"))
|
||||
status = xss_escape(req.get("status"))
|
||||
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()
|
||||
return r
|
||||
|
||||
|
||||
def get_dept_by_id(id):
|
||||
d = Dept.query.filter_by(id=id).first()
|
||||
return d
|
||||
|
||||
|
||||
# 启动权限
|
||||
def enable_status(id):
|
||||
enable = 1
|
||||
d = Dept.query.filter_by(id=id).update({"status": enable})
|
||||
if d:
|
||||
db.session.commit()
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
# 停用权限
|
||||
def disable_status(id):
|
||||
enable = 0
|
||||
d = Dept.query.filter_by(id=id).update({"status": enable})
|
||||
if d:
|
||||
db.session.commit()
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def update_dept(json):
|
||||
id = json.get("deptId"),
|
||||
data = {
|
||||
"dept_name": xss_escape(json.get("deptName")),
|
||||
"sort": xss_escape(json.get("sort")),
|
||||
"leader": xss_escape(json.get("leader")),
|
||||
"phone": xss_escape(json.get("phone")),
|
||||
"email": xss_escape(json.get("email")),
|
||||
"status": xss_escape(json.get("status")),
|
||||
"address": xss_escape(json.get("address"))
|
||||
}
|
||||
d = Dept.query.filter_by(id=id).update(data)
|
||||
if not d:
|
||||
return False
|
||||
db.session.commit()
|
||||
return True
|
||||
|
||||
|
||||
def remove_dept(id):
|
||||
d = Dept.query.filter_by(id=id).delete()
|
||||
if not d:
|
||||
return False
|
||||
User.query.filter_by(dept_id=id).update({"dept_id": None})
|
||||
db.session.commit()
|
||||
return True
|
||||
@@ -1,145 +0,0 @@
|
||||
from applications.common.utils.validate import xss_escape
|
||||
from applications.extensions import db
|
||||
from applications.models import DictType, DictData, DictTypeSchema, DictDataSchema
|
||||
from applications.common.curd import model_to_dicts
|
||||
|
||||
|
||||
def get_dict(typecode: str):
|
||||
dict_list = []
|
||||
if DictType.query.filter_by(type_code=typecode, enable=1).first():
|
||||
dicts = DictData.query.filter_by(type_code=typecode, enable=1).all()
|
||||
for d in dicts:
|
||||
dict_dict = {"key": d.data_label, "value": d.data_value}
|
||||
dict_list.append(dict_dict)
|
||||
else:
|
||||
return None
|
||||
return dict_list
|
||||
|
||||
|
||||
def get_dict_type(page, limit, type_name):
|
||||
dict_all = DictType.query
|
||||
if type_name:
|
||||
dict_all = dict_all.filter(DictType.type_name.like('%' + type_name + '%'))
|
||||
dict_all = dict_all.paginate(page=page,
|
||||
per_page=limit,
|
||||
error_out=False)
|
||||
count = DictType.query.count()
|
||||
data = model_to_dicts(Schema=DictTypeSchema, model=dict_all.items)
|
||||
return data, count
|
||||
|
||||
|
||||
def get_dict_data(page, limit, type_code):
|
||||
dict_all = DictData.query.filter_by(type_code=type_code).paginate(page=page,
|
||||
per_page=limit,
|
||||
error_out=False)
|
||||
count = DictType.query.count()
|
||||
dict_dict = model_to_dicts(Schema=DictDataSchema, model=dict_all.items)
|
||||
return dict_dict, count
|
||||
|
||||
|
||||
# 增加 dict type
|
||||
def save_dict_type(req_json):
|
||||
description = xss_escape(req_json.get("description"))
|
||||
enable = xss_escape(req_json.get("enable"))
|
||||
type_code = xss_escape(req_json.get("typeCode"))
|
||||
type_name = xss_escape(req_json.get("typeName"))
|
||||
d = DictType(type_name=type_name, type_code=type_code, enable=enable, description=description)
|
||||
db.session.add(d)
|
||||
db.session.commit()
|
||||
return d.id
|
||||
|
||||
|
||||
# 编辑字典类型
|
||||
def update_dict_type(req_json):
|
||||
id = xss_escape(req_json.get("id"))
|
||||
description = xss_escape(req_json.get("description"))
|
||||
enable = xss_escape(req_json.get("enable"))
|
||||
type_code = xss_escape(req_json.get("typeCode"))
|
||||
type_name = xss_escape(req_json.get("typeName"))
|
||||
DictType.query.filter_by(id=id).update({
|
||||
"description": description,
|
||||
"enable": enable,
|
||||
"type_code": type_code,
|
||||
"type_name": type_name
|
||||
})
|
||||
db.session.commit()
|
||||
return
|
||||
|
||||
|
||||
def enable_dict_type_status(id):
|
||||
enable = 1
|
||||
res = DictType.query.filter_by(id=id).update({"enable": enable})
|
||||
if res:
|
||||
db.session.commit()
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def disable_dict_type_status(id):
|
||||
enable = 0
|
||||
res = DictType.query.filter_by(id=id).update({"enable": enable})
|
||||
if res:
|
||||
db.session.commit()
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
# 删除字典类型
|
||||
def delete_type_by_id(id):
|
||||
type_code = DictType.query.filter_by(id=id).first().type_code
|
||||
DictData.query.filter_by(type_code=type_code).delete()
|
||||
res = DictType.query.filter_by(id=id).delete()
|
||||
db.session.commit()
|
||||
return res
|
||||
|
||||
|
||||
# 增加dictdata
|
||||
def save_dict_data(req_json):
|
||||
data_label = xss_escape(req_json.get("dataLabel"))
|
||||
data_value = xss_escape(req_json.get("dataValue"))
|
||||
enable = xss_escape(req_json.get("enable"))
|
||||
remark = xss_escape(req_json.get("remark"))
|
||||
type_code = xss_escape(req_json.get("typeCode"))
|
||||
d = DictData(data_label=data_label, data_value=data_value, enable=enable, remark=remark, type_code=type_code)
|
||||
db.session.add(d)
|
||||
db.session.commit()
|
||||
return d.id
|
||||
|
||||
|
||||
# 编辑字典数据
|
||||
def update_dict_data(req_json):
|
||||
id = req_json.get("dataId")
|
||||
DictData.query.filter_by(id=id).update({
|
||||
"data_label": xss_escape(req_json.get("dataLabel")),
|
||||
"data_value": xss_escape(req_json.get("dataValue")),
|
||||
"enable": xss_escape(req_json.get("enable")),
|
||||
"remark": xss_escape(req_json.get("remark")),
|
||||
"type_code": xss_escape(req_json.get("typeCode"))
|
||||
})
|
||||
db.session.commit()
|
||||
return
|
||||
|
||||
|
||||
def enable_dict_data_status(id):
|
||||
enable = 1
|
||||
res = DictData.query.filter_by(id=id).update({"enable": enable})
|
||||
if res:
|
||||
db.session.commit()
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def disable_dict_data_status(id):
|
||||
enable = 0
|
||||
res = DictData.query.filter_by(id=id).update({"enable": enable})
|
||||
if res:
|
||||
db.session.commit()
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
# 删除dictdata
|
||||
def delete_data_by_id(id):
|
||||
res = DictData.query.filter_by(id=id).delete()
|
||||
db.session.commit()
|
||||
return res
|
||||
@@ -1,36 +0,0 @@
|
||||
import os
|
||||
from flask import current_app
|
||||
from sqlalchemy import desc
|
||||
|
||||
from applications.common.utils.upload import photos
|
||||
from applications.extensions import db
|
||||
from applications.models import Photo, PhotoSchema
|
||||
from applications.common.curd import model_to_dicts
|
||||
|
||||
|
||||
def get_photo(page, limit):
|
||||
photo = Photo.query.order_by(desc(Photo.create_time)).paginate(page=page, per_page=limit, error_out=False)
|
||||
count = Photo.query.count()
|
||||
data = model_to_dicts(Schema=PhotoSchema, model=photo.items)
|
||||
return data, count
|
||||
|
||||
|
||||
def upload_one(photo, mime):
|
||||
filename = photos.save(photo)
|
||||
file_url = photos.url(filename)
|
||||
|
||||
upload_url = current_app.config.get("UPLOADED_PHOTOS_DEST")
|
||||
size = os.path.getsize(upload_url + '/' + filename)
|
||||
photo = Photo(name=filename, href=file_url, mime=mime, size=size)
|
||||
db.session.add(photo)
|
||||
db.session.commit()
|
||||
return file_url
|
||||
|
||||
|
||||
def delete_photo_by_id(_id):
|
||||
photo_name = Photo.query.filter_by(id=_id).first().name
|
||||
photo = Photo.query.filter_by(id=_id).delete()
|
||||
db.session.commit()
|
||||
upload_url = current_app.config.get("UPLOADED_PHOTOS_DEST")
|
||||
os.remove(upload_url + '/' + photo_name)
|
||||
return photo
|
||||
@@ -1,152 +0,0 @@
|
||||
from io import BytesIO
|
||||
from flask import session, make_response, current_app
|
||||
from flask_login import current_user
|
||||
|
||||
from applications.common.utils.gen_captcha import gen_captcha
|
||||
from applications.models.admin_power import PowerSchema
|
||||
|
||||
|
||||
# 授权路由存入session
|
||||
def add_auth_session():
|
||||
role = current_user.role
|
||||
user_power = []
|
||||
for i in role:
|
||||
if i.enable == 0:
|
||||
continue
|
||||
for p in i.power:
|
||||
if p.enable == 0:
|
||||
continue
|
||||
user_power.append(p.code)
|
||||
session['permissions'] = user_power
|
||||
|
||||
|
||||
# 生成菜单树
|
||||
def make_menu_tree():
|
||||
# power0 = Power.query.filter(
|
||||
# Power.type == 0,
|
||||
# ).all()
|
||||
# power1 = Power.query.filter(
|
||||
# Power.type == 1
|
||||
# ).all()
|
||||
# 获取当前用户的角色
|
||||
role = current_user.role
|
||||
power0 = []
|
||||
power1 = []
|
||||
for i in role:
|
||||
# 如果角色没有被启用就直接跳过
|
||||
if i.enable == 0:
|
||||
continue
|
||||
# 变量角色用户的权限
|
||||
for p in i.power:
|
||||
# 如果权限关闭了就直接跳过
|
||||
if p.enable == 0:
|
||||
continue
|
||||
# 一级菜单
|
||||
if int(p.type) == 0:
|
||||
power0.append(p)
|
||||
# 二级菜单
|
||||
else:
|
||||
power1.append(p)
|
||||
|
||||
power_schema = PowerSchema(many=True) # 用已继承 ma.ModelSchema 类的自定制类生成序列化类
|
||||
power0_dict = power_schema.dump(power0) # 生成可序列化对象
|
||||
power1_dict = power_schema.dump(power1) # 生成可序列化对象
|
||||
power0_dict = sorted(power0_dict, key=lambda i: i['sort'])
|
||||
power1_dict = sorted(power1_dict, key=lambda i: i['sort'])
|
||||
# print(power0)
|
||||
# print(power1)
|
||||
|
||||
menu = []
|
||||
|
||||
for p0 in power0_dict:
|
||||
for p1 in power1_dict:
|
||||
if p0.get('id') == p1.get('parent_id'):
|
||||
if p0.get("children") is None:
|
||||
p0['children'] = []
|
||||
p0['children'].append(p1)
|
||||
menu.append(p0)
|
||||
return menu
|
||||
|
||||
|
||||
# 生成验证码
|
||||
def get_captcha():
|
||||
code, image = gen_captcha()
|
||||
out = BytesIO()
|
||||
session["code"] = code
|
||||
image.save(out, 'png')
|
||||
out.seek(0)
|
||||
resp = make_response(out.read())
|
||||
resp.content_type = 'image/png'
|
||||
return resp, code
|
||||
|
||||
|
||||
def get_render_config():
|
||||
# 网站配置
|
||||
config = dict(logo={
|
||||
# 网站名称
|
||||
"title": current_app.config.get("SYSTEM_NAME"),
|
||||
# 网站图标
|
||||
"image": "/static/admin/admin/images/logo.png"
|
||||
# 菜单配置
|
||||
}, menu={
|
||||
# 菜单数据来源
|
||||
"data": "/rights/menu",
|
||||
"collaspe": True,
|
||||
# 是否同时只打开一个菜单目录
|
||||
"accordion": True,
|
||||
"method": "GET",
|
||||
# 是否开启多系统菜单模式
|
||||
"control": False,
|
||||
# 默认选中的菜单项
|
||||
"select": "0",
|
||||
# 是否开启异步菜单,false 时 data 属性设置为菜单数据,false 时为 json 文件或后端接口
|
||||
"async": True
|
||||
}, tab={
|
||||
# 是否开启多选项卡
|
||||
"muiltTab": True,
|
||||
# 切换选项卡时,是否刷新页面状态
|
||||
"keepState": True,
|
||||
# 是否开启 Tab 记忆
|
||||
"session": True,
|
||||
# 最大可打开的选项卡数量
|
||||
"tabMax": 30,
|
||||
"index": {
|
||||
# 标识 ID , 建议与菜单项中的 ID 一致
|
||||
"id": "10",
|
||||
# 页面地址
|
||||
"href": "/admin/welcome",
|
||||
# 标题
|
||||
"title": "首页"
|
||||
}
|
||||
}, theme={
|
||||
# 默认主题色,对应 colors 配置中的 ID 标识
|
||||
"defaultColor": "2",
|
||||
# 默认的菜单主题 dark-theme 黑 / light-theme 白
|
||||
"defaultMenu": "dark-theme",
|
||||
# 是否允许用户切换主题,false 时关闭自定义主题面板
|
||||
"allowCustom": True
|
||||
}, colors=[{
|
||||
"id": "1",
|
||||
"color": "#2d8cf0"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"color": "#5FB878"
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"color": "#1E9FFF"
|
||||
}, {
|
||||
"id": "4",
|
||||
"color": "#FFB800"
|
||||
}, {
|
||||
"id": "5",
|
||||
"color": "darkgray"
|
||||
}
|
||||
], links=current_app.config.get("SYSTEM_PANEL_LINKS"), other={
|
||||
# 主页动画时长
|
||||
"keepLoad": 1200,
|
||||
# 布局顶部主题
|
||||
"autoHead": False
|
||||
}, header=False)
|
||||
return config
|
||||
@@ -1,112 +0,0 @@
|
||||
from applications.common.utils.validate import xss_escape
|
||||
from applications.extensions import db
|
||||
from applications.models.admin_power import Power, PowerSchema2
|
||||
from applications.models import Role
|
||||
from applications.common.curd import model_to_dicts
|
||||
|
||||
|
||||
def get_power_dict():
|
||||
power = Power.query.all()
|
||||
res = model_to_dicts(Schema=PowerSchema2, model=power)
|
||||
return res
|
||||
|
||||
|
||||
# 选择父节点
|
||||
def select_parent():
|
||||
power = Power.query.all()
|
||||
res = model_to_dicts(Schema=PowerSchema2, model=power)
|
||||
res.append({"powerId": 0, "powerName": "顶级权限", "parentId": -1})
|
||||
return res
|
||||
|
||||
|
||||
# 增加权限
|
||||
def save_power(req):
|
||||
icon = xss_escape(req.get("icon"))
|
||||
openType = xss_escape(req.get("openType"))
|
||||
parentId = xss_escape(req.get("parentId"))
|
||||
powerCode = xss_escape(req.get("powerCode"))
|
||||
powerName = xss_escape(req.get("powerName"))
|
||||
powerType = xss_escape(req.get("powerType"))
|
||||
powerUrl = xss_escape(req.get("powerUrl"))
|
||||
sort = xss_escape(req.get("sort"))
|
||||
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 r
|
||||
|
||||
|
||||
# 根据id查询权限
|
||||
def get_power_by_id(id):
|
||||
p = Power.query.filter_by(id=id).first()
|
||||
return p
|
||||
|
||||
|
||||
# 更新权限
|
||||
def update_power(req_json):
|
||||
id = req_json.get("powerId")
|
||||
data = {
|
||||
"icon": xss_escape(req_json.get("icon")),
|
||||
"open_type": xss_escape(req_json.get("openType")),
|
||||
"parent_id": xss_escape(req_json.get("parentId")),
|
||||
"code": xss_escape(req_json.get("powerCode")),
|
||||
"name": xss_escape(req_json.get("powerName")),
|
||||
"type": xss_escape(req_json.get("powerType")),
|
||||
"url": xss_escape(req_json.get("powerUrl")),
|
||||
"sort": xss_escape(req_json.get("sort"))
|
||||
}
|
||||
# print(data)
|
||||
power = Power.query.filter_by(id=id).update(data)
|
||||
db.session.commit()
|
||||
# print(power)
|
||||
return power
|
||||
|
||||
|
||||
# 启动权限
|
||||
def enable_status(id):
|
||||
enable = 1
|
||||
user = Power.query.filter_by(id=id).update({"enable": enable})
|
||||
if user:
|
||||
db.session.commit()
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
# 停用权限
|
||||
def disable_status(id):
|
||||
enable = 0
|
||||
user = Power.query.filter_by(id=id).update({"enable": enable})
|
||||
if user:
|
||||
db.session.commit()
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
# 删除权限(目前没有判断父节点自动删除子节点)
|
||||
def remove_power(id):
|
||||
power = Power.query.filter_by(id=id).first()
|
||||
role_id_list = []
|
||||
roles = power.role
|
||||
for role in roles:
|
||||
role_id_list.append(role.id)
|
||||
roles = Role.query.filter(Role.id.in_(role_id_list)).all()
|
||||
for p in roles:
|
||||
power.role.remove(p)
|
||||
r = Power.query.filter_by(id=id).delete()
|
||||
db.session.commit()
|
||||
return r
|
||||
|
||||
|
||||
# 批量删除权限
|
||||
def batch_remove(ids):
|
||||
for id in ids:
|
||||
remove_power(id)
|
||||
@@ -1,149 +0,0 @@
|
||||
from sqlalchemy import and_
|
||||
|
||||
from applications.common.utils.validate import xss_escape
|
||||
from applications.extensions import db
|
||||
from applications.models import Role, RoleSchema
|
||||
from applications.models.admin_power import Power, PowerSchema2
|
||||
from applications.models import User
|
||||
|
||||
# 获取角色对象
|
||||
from applications.common.curd import model_to_dicts
|
||||
|
||||
|
||||
def get_role_data(page, limit, filters):
|
||||
role = Role.query.filter(and_(*[getattr(Role, k).like(v) for k, v in filters.items()])).paginate(page=page,
|
||||
per_page=limit,
|
||||
error_out=False)
|
||||
count = Role.query.count()
|
||||
return role, count
|
||||
|
||||
|
||||
# 获取角色dict
|
||||
def get_role_data_dict(page, limit, filters):
|
||||
role, count = get_role_data(page, limit, filters)
|
||||
data = model_to_dicts(Schema=RoleSchema, model=role.items)
|
||||
return data, count
|
||||
|
||||
|
||||
# 增加角色
|
||||
def add_role(req):
|
||||
details = xss_escape(req.get("details"))
|
||||
enable = xss_escape(req.get("enable"))
|
||||
roleCode = xss_escape(req.get("roleCode"))
|
||||
roleName = xss_escape(req.get("roleName"))
|
||||
sort = xss_escape(req.get("sort"))
|
||||
role = Role(
|
||||
details=details,
|
||||
enable=enable,
|
||||
code=roleCode,
|
||||
name=roleName,
|
||||
sort=sort
|
||||
)
|
||||
db.session.add(role)
|
||||
db.session.commit()
|
||||
|
||||
|
||||
# 通过id获取角色
|
||||
def get_role_by_id(id):
|
||||
r = Role.query.filter_by(id=id).first()
|
||||
return r
|
||||
|
||||
|
||||
# 更新角色
|
||||
def update_role(req_json):
|
||||
id = req_json.get("roleId")
|
||||
data = {
|
||||
"code": xss_escape(req_json.get("roleCode")),
|
||||
"name": xss_escape(req_json.get("roleName")),
|
||||
"sort": xss_escape(req_json.get("sort")),
|
||||
"enable": xss_escape(req_json.get("enable")),
|
||||
"details": xss_escape(req_json.get("details"))
|
||||
}
|
||||
role = Role.query.filter_by(id=id).update(data)
|
||||
db.session.commit()
|
||||
return role
|
||||
|
||||
|
||||
# 获取角色的权限
|
||||
def get_role_power(id):
|
||||
role = Role.query.filter_by(id=id).first()
|
||||
check_powers = role.power
|
||||
check_powers_list = []
|
||||
for cp in check_powers:
|
||||
check_powers_list.append(cp.id)
|
||||
powers = Power.query.all()
|
||||
power_schema = PowerSchema2(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 update_role_power(id, power_list):
|
||||
role = Role.query.filter_by(id=id).first()
|
||||
power_id_list = []
|
||||
for p in role.power:
|
||||
power_id_list.append(p.id)
|
||||
# print(p.id)
|
||||
# print(power_id_list)
|
||||
powers = Power.query.filter(Power.id.in_(power_id_list)).all()
|
||||
for p in powers:
|
||||
role.power.remove(p)
|
||||
powers = Power.query.filter(Power.id.in_(power_list)).all()
|
||||
for p in powers:
|
||||
role.power.append(p)
|
||||
db.session.commit()
|
||||
|
||||
|
||||
# 启动角色
|
||||
def enable_status(id):
|
||||
enable = 1
|
||||
role = Role.query.filter_by(id=id).update({"enable": enable})
|
||||
if role:
|
||||
db.session.commit()
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
# 停用角色
|
||||
def disable_status(id):
|
||||
enable = 0
|
||||
role = Role.query.filter_by(id=id).update({"enable": enable})
|
||||
if role:
|
||||
db.session.commit()
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
# 删除角色
|
||||
def remove_role(id):
|
||||
role = Role.query.filter_by(id=id).first()
|
||||
# 删除该角色的权限
|
||||
power_id_list = []
|
||||
for p in role.power:
|
||||
power_id_list.append(p.id)
|
||||
|
||||
powers = Power.query.filter(Power.id.in_(power_id_list)).all()
|
||||
for p in powers:
|
||||
role.power.remove(p)
|
||||
user_id_list = []
|
||||
for u in role.user:
|
||||
user_id_list.append(u.id)
|
||||
users = User.query.filter(User.id.in_(user_id_list)).all()
|
||||
for u in users:
|
||||
role.user.remove(u)
|
||||
r = Role.query.filter_by(id=id).delete()
|
||||
db.session.commit()
|
||||
return r
|
||||
|
||||
|
||||
# 批量删除
|
||||
def batch_remove(ids):
|
||||
# role = Role.query.filter(Role.id.in_(ids)).delete(synchronize_session=False)
|
||||
# db.session.commit()
|
||||
for id in ids:
|
||||
remove_role(id)
|
||||
@@ -1,159 +0,0 @@
|
||||
from flask import jsonify
|
||||
from flask_login import current_user
|
||||
from sqlalchemy import and_, desc
|
||||
from applications.extensions import db
|
||||
from applications.models import User, UserSchema
|
||||
from applications.models import Role
|
||||
from applications.models import AdminLog
|
||||
|
||||
# 获取用户的 sqlalchemy 对象分页器
|
||||
from applications.common.curd import model_to_dicts
|
||||
|
||||
|
||||
def get_user_data(page, limit, filters, deptId):
|
||||
if deptId:
|
||||
user = User.query.filter_by(dept_id=deptId).filter(
|
||||
and_(*[getattr(User, k).like(v) for k, v in filters.items()])).paginate(page=page,
|
||||
per_page=limit,
|
||||
error_out=False)
|
||||
else:
|
||||
user = User.query.filter(and_(*[getattr(User, k).like(v) for k, v in filters.items()])).paginate(page=page,
|
||||
per_page=limit,
|
||||
error_out=False)
|
||||
count = User.query.count()
|
||||
return user, count
|
||||
|
||||
|
||||
# 获取用户的dict数据分页器
|
||||
def get_user_data_dict(page, limit, filters, deptId):
|
||||
user, count = get_user_data(page, limit, filters, deptId)
|
||||
data = model_to_dicts(Schema=UserSchema, model=user.items)
|
||||
return data, count
|
||||
|
||||
|
||||
# 通过名称获取用户
|
||||
def get_user_by_name(username):
|
||||
return User.query.filter_by(username=username).first()
|
||||
|
||||
|
||||
# 获取当前用户日志
|
||||
def get_current_user_logs():
|
||||
log = AdminLog.query.filter_by(url='/admin/login').filter_by(uid=current_user.id).order_by(
|
||||
desc(AdminLog.create_time)).limit(10)
|
||||
return log
|
||||
|
||||
|
||||
# 判断用户是否存在
|
||||
def is_user_exists(username):
|
||||
res = User.query.filter_by(username=username).count()
|
||||
return bool(res)
|
||||
|
||||
|
||||
# 增加用户
|
||||
def add_user(username, realName, password):
|
||||
user = User(username=username, realname=realName)
|
||||
user.set_password(password)
|
||||
db.session.add(user)
|
||||
db.session.commit()
|
||||
return user.id
|
||||
|
||||
|
||||
# 增加用户角色
|
||||
def add_user_role(id, roles_list):
|
||||
user = User.query.filter_by(id=id).first()
|
||||
roles = Role.query.filter(Role.id.in_(roles_list)).all()
|
||||
for r in roles:
|
||||
user.role.append(r)
|
||||
db.session.commit()
|
||||
|
||||
|
||||
# 更新用户头像
|
||||
def update_avatar(url):
|
||||
r = User.query.filter_by(id=current_user.id).update({"avatar": url})
|
||||
db.session.commit()
|
||||
return r
|
||||
|
||||
|
||||
# 更新用户信息
|
||||
def update_user(id, username, realname, deptId):
|
||||
user = User.query.filter_by(id=id).update({'username': username, 'realname': realname, 'dept_id': deptId})
|
||||
db.session.commit()
|
||||
return user
|
||||
|
||||
|
||||
# 更新当前用户信息
|
||||
def update_current_user_info(req_json):
|
||||
r = User.query.filter_by(id=current_user.id).update(
|
||||
{"realname": req_json.get("realName"), "remark": req_json.get("details")})
|
||||
db.session.commit()
|
||||
return r
|
||||
|
||||
|
||||
# 修改当前用户密码
|
||||
def edit_password(res_json):
|
||||
if res_json.get("newPassword") == '':
|
||||
return jsonify(success=False, msg="新密码不得为空")
|
||||
if res_json.get("newPassword") != res_json.get("confirmPassword"):
|
||||
return jsonify(success=False, msg="俩次密码不一样")
|
||||
user = current_user
|
||||
is_right = user.validate_password(res_json.get("oldPassword"))
|
||||
if not is_right:
|
||||
return jsonify(success=False, msg="旧密码错误")
|
||||
user.set_password(res_json.get("newPassword"))
|
||||
db.session.add(user)
|
||||
db.session.commit()
|
||||
return jsonify(success=True, msg="更改成功")
|
||||
|
||||
|
||||
# 删除用户
|
||||
def delete_by_id(id):
|
||||
user = User.query.filter_by(id=id).first()
|
||||
roles_id = []
|
||||
for role in user.role:
|
||||
roles_id.append(role.id)
|
||||
roles = Role.query.filter(Role.id.in_(roles_id)).all()
|
||||
for r in roles:
|
||||
user.role.remove(r)
|
||||
res = User.query.filter_by(id=id).delete()
|
||||
db.session.commit()
|
||||
return res
|
||||
|
||||
|
||||
# 启用用户
|
||||
def enable_status(id):
|
||||
enable = 1
|
||||
user = User.query.filter_by(id=id).update({"enable": enable})
|
||||
if user:
|
||||
db.session.commit()
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
# 停用用户
|
||||
def disable_status(id):
|
||||
enable = 0
|
||||
user = User.query.filter_by(id=id).update({"enable": enable})
|
||||
if user:
|
||||
db.session.commit()
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
# 批量删除
|
||||
def batch_remove(ids):
|
||||
for id in ids:
|
||||
delete_by_id(id)
|
||||
|
||||
|
||||
def update_user_role(id, roles_list):
|
||||
user = User.query.filter_by(id=id).first()
|
||||
roles_id = []
|
||||
for role in user.role:
|
||||
roles_id.append(role.id)
|
||||
roles = Role.query.filter(Role.id.in_(roles_id)).all()
|
||||
for r in roles:
|
||||
user.role.remove(r)
|
||||
roles = Role.query.filter(Role.id.in_(roles_list)).all()
|
||||
for r in roles:
|
||||
user.role.append(r)
|
||||
db.session.commit()
|
||||
@@ -1,56 +0,0 @@
|
||||
from flask_login import current_user
|
||||
|
||||
from applications.extensions import db
|
||||
from applications.models import AdminLog
|
||||
|
||||
|
||||
def login_log(request, uid, is_access):
|
||||
info = {
|
||||
'method': request.method,
|
||||
'url': request.path,
|
||||
'ip': request.remote_addr,
|
||||
'user_agent': request.headers.get('User-Agent'),
|
||||
'desc': request.form.get('username'),
|
||||
'uid': uid,
|
||||
'success': int(is_access)
|
||||
|
||||
}
|
||||
log = AdminLog(
|
||||
url=info.get('url'),
|
||||
ip=info.get('ip'),
|
||||
user_agent=info.get('user_agent'),
|
||||
desc=info.get('desc'),
|
||||
uid=info.get('uid'),
|
||||
method=info.get('method'),
|
||||
success=info.get('success')
|
||||
)
|
||||
db.session.add(log)
|
||||
db.session.flush()
|
||||
db.session.commit()
|
||||
return log.id
|
||||
|
||||
|
||||
def admin_log(request, is_access):
|
||||
info = {
|
||||
'method': request.method,
|
||||
'url': request.path,
|
||||
'ip': request.remote_addr,
|
||||
'user_agent': request.headers.get('User-Agent'),
|
||||
'desc': str(dict(request.values)),
|
||||
'uid': current_user.id,
|
||||
'success': int(is_access)
|
||||
|
||||
}
|
||||
log = AdminLog(
|
||||
url=info.get('url'),
|
||||
ip=info.get('ip'),
|
||||
user_agent=info.get('user_agent'),
|
||||
desc=info.get('desc'),
|
||||
uid=info.get('uid'),
|
||||
method=info.get('method'),
|
||||
success=info.get('success')
|
||||
)
|
||||
db.session.add(log)
|
||||
db.session.commit()
|
||||
|
||||
return log.id
|
||||
@@ -1,5 +0,0 @@
|
||||
def model_to_dicts(Schema, model):
|
||||
# 如果是分页器返回,需要传入model.items
|
||||
common_schema = Schema(many=True) # 用已继承ma.ModelSchema类的自定制类生成序列化类
|
||||
output = common_schema.dump(model) # 生成可序列化对象
|
||||
return output
|
||||
@@ -1,17 +0,0 @@
|
||||
#
|
||||
MYSQL_HOST = '127.0.0.1'
|
||||
MYSQL_PORT = '3306'
|
||||
MYSQL_DATABASE = 'PearAdminFlask'
|
||||
MYSQL_USERNAME = 'root'
|
||||
MYSQL_PASSWORD = 'root'
|
||||
|
||||
MYSQL_DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(username=USERNAME,
|
||||
password=PASSWORD,
|
||||
host=HOST,
|
||||
port=PORT,
|
||||
db=DATABASE)
|
||||
|
||||
SQLALCHEMY_DATABASE_URI = MYSQL_DB_URI
|
||||
SQLALCHEMY_TRACK_MODIFICATIONS = True
|
||||
SQLALCHEMY_ECHO = False
|
||||
SQLALCHEMY_POOL_RECYCLE = 8
|
||||
@@ -1,14 +0,0 @@
|
||||
from captcha.image import ImageCaptcha
|
||||
|
||||
from PIL import Image
|
||||
from random import choices
|
||||
|
||||
|
||||
def gen_captcha(content='0123456789'):
|
||||
""" 生成验证码 """
|
||||
image = ImageCaptcha()
|
||||
# 获取字符串
|
||||
captcha_text = "".join(choices(content, k=4))
|
||||
# 生成图像
|
||||
captcha_image = Image.open(image.generate(captcha_text))
|
||||
return captcha_text, captcha_image
|
||||
@@ -1,24 +0,0 @@
|
||||
from flask import jsonify
|
||||
|
||||
|
||||
def success_api(msg: str = "成功"):
|
||||
""" 成功响应 默认值”成功“ """
|
||||
return jsonify(success=True, msg=msg)
|
||||
|
||||
|
||||
def fail_api(msg: str = "失败"):
|
||||
""" 失败响应 默认值“失败” """
|
||||
return jsonify(success=False, msg=msg)
|
||||
|
||||
|
||||
def table_api(msg: str = "", count=0, data=None, limit=10):
|
||||
""" 动态表格渲染响应 """
|
||||
res = {
|
||||
'msg': msg,
|
||||
'code': 0,
|
||||
'data': data,
|
||||
'count': count,
|
||||
'limit': limit
|
||||
|
||||
}
|
||||
return jsonify(res)
|
||||
@@ -1,25 +0,0 @@
|
||||
from functools import wraps
|
||||
from flask import abort, request, jsonify, session
|
||||
from flask_login import login_required
|
||||
from applications.common.admin_log import admin_log
|
||||
|
||||
|
||||
def authorize(power: str, log: bool = False):
|
||||
def decorator(func):
|
||||
@login_required
|
||||
@wraps(func)
|
||||
def wrapper(*args, **kwargs):
|
||||
if not power in session.get('permissions'):
|
||||
if log:
|
||||
admin_log(request=request, is_access=False)
|
||||
if request.method == 'GET':
|
||||
abort(403)
|
||||
else:
|
||||
return jsonify(success=False, msg="权限不足!")
|
||||
if log:
|
||||
admin_log(request=request, is_access=True)
|
||||
return func(*args, **kwargs)
|
||||
|
||||
return wrapper
|
||||
|
||||
return decorator
|
||||
@@ -1,4 +0,0 @@
|
||||
from flask_uploads import UploadSet, IMAGES
|
||||
|
||||
|
||||
photos = UploadSet('photos', IMAGES)
|
||||
@@ -1,20 +0,0 @@
|
||||
# xss过滤
|
||||
from flask import abort, make_response, jsonify
|
||||
|
||||
|
||||
def xss_escape(s: str):
|
||||
if s is None:
|
||||
return None
|
||||
else:
|
||||
return s.replace("&", "&").replace(">", ">").replace("<", "<").replace("'", "'").replace('"',
|
||||
""")
|
||||
|
||||
|
||||
def check_data(schema, data):
|
||||
errors = schema.validate(data)
|
||||
for k, v in errors.items():
|
||||
for i in v:
|
||||
# print("{}{}".format(k, i))
|
||||
msg = "{}{}".format(k, i)
|
||||
if errors:
|
||||
abort(make_response(jsonify(result=False, msg=msg), 200))
|
||||
@@ -1 +0,0 @@
|
||||
from .config import config
|
||||
@@ -1,24 +0,0 @@
|
||||
SYSTEM_NAME = "Pear Admin"
|
||||
# 主题面板的链接列表配置
|
||||
SYSTEM_PANEL_LINKS = [
|
||||
{
|
||||
"icon": "layui-icon layui-icon-auz",
|
||||
"title": "官方网站",
|
||||
"href": "http://www.pearadmin.com"
|
||||
},
|
||||
{
|
||||
"icon": "layui-icon layui-icon-auz",
|
||||
"title": "开发文档",
|
||||
"href": "http://www.pearadmin.com"
|
||||
},
|
||||
{
|
||||
"icon": "layui-icon layui-icon-auz",
|
||||
"title": "开源地址",
|
||||
"href": "https://gitee.com/Jmysy/Pear-Admin-Layui"
|
||||
}
|
||||
]
|
||||
|
||||
UPLOADED_PHOTOS_DEST = 'static/upload'
|
||||
UPLOADED_FILES_ALLOW = ['gif', 'jpg']
|
||||
# JSON配置
|
||||
JSON_AS_ASCII = False
|
||||
@@ -1,51 +0,0 @@
|
||||
import logging
|
||||
import os
|
||||
|
||||
|
||||
class BaseConfig:
|
||||
SECRET_KEY = os.getenv('SECRET_KEY', 'dev key')
|
||||
|
||||
# redis配置
|
||||
REDIS_HOST = os.getenv('REDIS_HOST') or "127.0.0.1"
|
||||
REDIS_PORT = int(os.getenv('REDIS_PORT') or 6379)
|
||||
|
||||
# mysql 配置
|
||||
MYSQL_USERNAME = os.getenv('MYSQL_USERNAME') or "root"
|
||||
MYSQL_PASSWORD = os.getenv('MYSQL_PASSWORD') or "123456"
|
||||
MYSQL_HOST = os.getenv('MYSQL_HOST') or "127.0.0.1"
|
||||
MYSQL_PORT = int(os.getenv('MYSQL_PORT') or 3306)
|
||||
MYSQL_DATABASE = os.getenv('MYSQL_DATABASE') or "PearAdminFlask"
|
||||
|
||||
UPLOADED_PHOTOS_DEST = '/static'
|
||||
|
||||
# mysql 数据库的配置信息
|
||||
SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{MYSQL_USERNAME}:{MYSQL_PASSWORD}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}"
|
||||
# 默认日志等级
|
||||
LOG_LEVEL = logging.WARN
|
||||
|
||||
|
||||
class TestingConfig(BaseConfig):
|
||||
""" 测试配置 """
|
||||
SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:' # 内存数据库
|
||||
|
||||
|
||||
class DevelopmentConfig(BaseConfig):
|
||||
""" 开发配置 """
|
||||
SQLALCHEMY_TRACK_MODIFICATIONS = True
|
||||
SQLALCHEMY_ECHO = False
|
||||
|
||||
|
||||
class ProductionConfig(BaseConfig):
|
||||
"""生成环境配置"""
|
||||
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
||||
SQLALCHEMY_ECHO = False
|
||||
SQLALCHEMY_POOL_RECYCLE = 8
|
||||
|
||||
LOG_LEVEL = logging.ERROR
|
||||
|
||||
|
||||
config = {
|
||||
'development': DevelopmentConfig,
|
||||
'testing': TestingConfig,
|
||||
'production': ProductionConfig
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
from flask import Flask
|
||||
from flask_debugtoolbar import DebugToolbarExtension
|
||||
|
||||
|
||||
def init_debug_tool(app: Flask):
|
||||
toolbar = DebugToolbarExtension()
|
||||
toolbar.init_app(app)
|
||||
@@ -1,54 +0,0 @@
|
||||
from flask import Flask
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
from flask_marshmallow import Marshmallow
|
||||
from marshmallow import fields
|
||||
from marshmallow.validate import (
|
||||
URL, Email, Range, Length, Equal, Regexp,
|
||||
Predicate, NoneOf, OneOf, ContainsOnly
|
||||
)
|
||||
|
||||
URL.default_message = '无效的链接'
|
||||
Email.default_message = '无效的邮箱地址'
|
||||
Range.message_min = '不能小于{min}'
|
||||
Range.message_max = '不能小于{max}'
|
||||
Range.message_all = '不能超过{min}和{max}这个范围'
|
||||
Length.message_min = '长度不得小于{min}位'
|
||||
Length.message_max = '长度不得大于{max}位'
|
||||
Length.message_all = '长度不能超过{min}和{max}这个范围'
|
||||
Length.message_equal = '长度必须等于{equal}位'
|
||||
Equal.default_message = '必须等于{other}'
|
||||
Regexp.default_message = '非法输入'
|
||||
Predicate.default_message = '非法输入'
|
||||
NoneOf.default_message = '非法输入'
|
||||
OneOf.default_message = '无效的选择'
|
||||
ContainsOnly.default_message = '一个或多个无效的选择'
|
||||
|
||||
fields.Field.default_error_messages = {
|
||||
"required": "缺少必要数据",
|
||||
"null": "数据不能为空",
|
||||
"validator_failed": "非法数据",
|
||||
}
|
||||
|
||||
fields.Str.default_error_messages = {
|
||||
'invalid': "不是合法文本"
|
||||
}
|
||||
|
||||
fields.Int.default_error_messages = {
|
||||
"invalid": "不是合法整数"
|
||||
}
|
||||
|
||||
fields.Number.default_error_messages = {
|
||||
"invalid": "不是合法数字"
|
||||
}
|
||||
|
||||
fields.Boolean.default_error_messages = {
|
||||
"invalid": "不是合法布尔值"
|
||||
}
|
||||
|
||||
db = SQLAlchemy()
|
||||
ma = Marshmallow()
|
||||
|
||||
|
||||
def init_databases(app: Flask):
|
||||
db.init_app(app)
|
||||
ma.init_app(app)
|
||||
@@ -1,9 +0,0 @@
|
||||
from .admin_dept import Dept, DeptSchema
|
||||
from .admin_dict import DictType, DictData, DictTypeSchema, DictDataSchema
|
||||
from .admin_log import AdminLog, LogSchema
|
||||
from .admin_photo import Photo, PhotoSchema
|
||||
from .admin_power import Power, PowerSchema, PowerSchema2
|
||||
from .admin_role import Role, RoleSchema
|
||||
from .admin_role_power import role_power
|
||||
from .admin_user import User, UserSchema
|
||||
from .admin_user_role import user_role
|
||||
@@ -1,31 +0,0 @@
|
||||
import datetime
|
||||
from applications.extensions import db, ma
|
||||
from marshmallow import fields, validate
|
||||
|
||||
|
||||
class Dept(db.Model):
|
||||
__tablename__ = 'admin_dept'
|
||||
id = db.Column(db.Integer, primary_key=True, comment="部门ID")
|
||||
parent_id = db.Column(db.Integer, comment="父级编号")
|
||||
dept_name = db.Column(db.String(50), comment="部门名称")
|
||||
sort = db.Column(db.Integer, comment="排序")
|
||||
leader = db.Column(db.String(50), comment="负责人")
|
||||
phone = db.Column(db.String(20), comment="联系方式")
|
||||
email = db.Column(db.String(50), comment="邮箱")
|
||||
status = db.Column(db.Integer, comment='状态(1开启,0关闭)')
|
||||
remark = db.Column(db.Text, comment="备注")
|
||||
address = db.Column(db.String(255), comment="详细地址")
|
||||
create_at = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
|
||||
update_at = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='创建时间')
|
||||
|
||||
|
||||
class DeptSchema(ma.Schema): # 序列化类
|
||||
deptId = fields.Integer(attribute="id")
|
||||
parentId = fields.Integer(attribute="parent_id")
|
||||
deptName = fields.Str(attribute="dept_name")
|
||||
leader = fields.Str()
|
||||
phone = fields.Str()
|
||||
email = fields.Str(validate=validate.Email())
|
||||
address = fields.Str()
|
||||
status = fields.Str(validate=validate.OneOf(["0", "1"]))
|
||||
sort = fields.Integer()
|
||||
@@ -1,47 +0,0 @@
|
||||
import datetime
|
||||
|
||||
from applications.extensions import db, ma
|
||||
from marshmallow import fields
|
||||
|
||||
|
||||
class DictType(db.Model):
|
||||
__tablename__ = 'admin_dict_type'
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
type_name = db.Column(db.String(255), comment='字典类型名称')
|
||||
type_code = db.Column(db.String(255), comment='字典类型标识')
|
||||
description = db.Column(db.String(255), comment='字典类型描述')
|
||||
enable = db.Column(db.Integer, comment='是否开启')
|
||||
create_time = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
|
||||
update_time = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间')
|
||||
|
||||
|
||||
class DictData(db.Model):
|
||||
__tablename__ = 'admin_dict_data'
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
data_label = db.Column(db.String(255), comment='字典类型名称')
|
||||
data_value = db.Column(db.String(255), comment='字典类型标识')
|
||||
type_code = db.Column(db.String(255), comment='字典类型描述')
|
||||
is_default = db.Column(db.Integer, comment='是否默认')
|
||||
enable = db.Column(db.Integer, comment='是否开启')
|
||||
remark = db.Column(db.String(255), comment='备注')
|
||||
create_time = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
|
||||
update_time = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间')
|
||||
|
||||
|
||||
class DictTypeSchema(ma.Schema): # 序列化类
|
||||
id = fields.Str(attribute="id")
|
||||
typeName = fields.Str(attribute="type_name")
|
||||
typeCode = fields.Str(attribute="type_code")
|
||||
description = fields.Str(attribute="description")
|
||||
createTime = fields.Str(attribute="create_time")
|
||||
updateName = fields.Str(attribute="update_time")
|
||||
remark = fields.Str()
|
||||
enable = fields.Str()
|
||||
|
||||
|
||||
class DictDataSchema(ma.Schema): # 序列化类
|
||||
dataId = fields.Str(attribute="id")
|
||||
dataLabel = fields.Str(attribute="data_label")
|
||||
dataValue = fields.Str(attribute="data_value")
|
||||
remark = fields.Str()
|
||||
enable = fields.Str()
|
||||
@@ -1,28 +0,0 @@
|
||||
import datetime
|
||||
from applications.extensions import db, ma
|
||||
from marshmallow import fields
|
||||
|
||||
|
||||
class AdminLog(db.Model):
|
||||
__tablename__ = 'admin_admin_log'
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
method = db.Column(db.String(10))
|
||||
uid = db.Column(db.Integer)
|
||||
url = db.Column(db.String(255))
|
||||
desc = db.Column(db.Text)
|
||||
ip = db.Column(db.String(255))
|
||||
success = db.Column(db.Integer)
|
||||
user_agent = db.Column(db.Text)
|
||||
create_time = db.Column(db.DateTime, default=datetime.datetime.now)
|
||||
|
||||
|
||||
class LogSchema(ma.Schema): # 序列化类
|
||||
id = fields.Integer()
|
||||
method = fields.Str()
|
||||
uid = fields.Str()
|
||||
url = fields.Str()
|
||||
desc = fields.Str()
|
||||
ip = fields.Str()
|
||||
user_agent = fields.Str()
|
||||
success = fields.Bool()
|
||||
create_time = fields.DateTime()
|
||||
@@ -1,24 +0,0 @@
|
||||
import datetime
|
||||
|
||||
from applications.extensions import db, ma
|
||||
from marshmallow import fields
|
||||
|
||||
|
||||
class Photo(db.Model):
|
||||
__tablename__ = 'admin_photo'
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
name = db.Column(db.String(255), nullable=False)
|
||||
href = db.Column(db.String(255))
|
||||
mime = db.Column(db.CHAR(50), nullable=False)
|
||||
size = db.Column(db.CHAR(30), nullable=False)
|
||||
create_time = db.Column(db.DateTime, default=datetime.datetime.now)
|
||||
|
||||
|
||||
class PhotoSchema(ma.Schema):
|
||||
id = fields.Integer()
|
||||
name = fields.Str()
|
||||
href = fields.Str()
|
||||
mime = fields.Str()
|
||||
size = fields.Str()
|
||||
ext = fields.Str()
|
||||
create_time = fields.DateTime()
|
||||
@@ -1,49 +0,0 @@
|
||||
import datetime
|
||||
from applications.extensions import db, ma
|
||||
from marshmallow import fields
|
||||
|
||||
|
||||
class Power(db.Model):
|
||||
__tablename__ = 'admin_power'
|
||||
id = db.Column(db.Integer, primary_key=True, comment='权限编号')
|
||||
name = db.Column(db.String(255), comment='权限名称')
|
||||
type = db.Column(db.String(1), comment='权限类型')
|
||||
code = db.Column(db.String(30), comment='权限标识')
|
||||
url = db.Column(db.String(255), comment='权限路径')
|
||||
open_type = db.Column(db.String(10), comment='打开方式')
|
||||
parent_id = db.Column(db.Integer, comment='父类编号')
|
||||
icon = db.Column(db.String(128), comment='图标')
|
||||
sort = db.Column(db.Integer, comment='排序')
|
||||
create_time = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
|
||||
update_time = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间')
|
||||
enable = db.Column(db.Integer, comment='是否开启')
|
||||
|
||||
|
||||
# 权限models序列化类
|
||||
class PowerSchema(ma.Schema):
|
||||
id = fields.Integer()
|
||||
title = fields.Str(attribute="name")
|
||||
type = fields.Str()
|
||||
code = fields.Str()
|
||||
href = fields.Str(attribute="url")
|
||||
openType = fields.Str(attribute="open_type")
|
||||
parent_id = fields.Integer()
|
||||
icon = fields.Str()
|
||||
sort = fields.Integer()
|
||||
create_time = fields.DateTime()
|
||||
update_time = fields.DateTime()
|
||||
enable = fields.Integer()
|
||||
|
||||
|
||||
class PowerSchema2(ma.Schema): # 序列化类
|
||||
powerId = fields.Str(attribute="id")
|
||||
powerName = fields.Str(attribute="name")
|
||||
powerType = fields.Str(attribute="type")
|
||||
powerUrl = fields.Str(attribute="url")
|
||||
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()
|
||||
@@ -1,29 +0,0 @@
|
||||
import datetime
|
||||
from applications.extensions import db, ma
|
||||
from marshmallow import fields
|
||||
|
||||
|
||||
class Role(db.Model):
|
||||
__tablename__ = 'admin_role'
|
||||
id = db.Column(db.Integer, primary_key=True, comment='角色ID')
|
||||
name = db.Column(db.String(255), comment='角色名称')
|
||||
code = db.Column(db.String(255), comment='角色标识')
|
||||
enable = db.Column(db.Integer, comment='是否启用')
|
||||
remark = db.Column(db.String(255), comment='备注')
|
||||
details = db.Column(db.String(255), comment='详情')
|
||||
sort = db.Column(db.Integer, comment='排序')
|
||||
create_time = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
|
||||
update_time = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间')
|
||||
power = db.relationship('Power', secondary="admin_role_power", backref=db.backref('role'))
|
||||
|
||||
|
||||
class RoleSchema(ma.Schema):
|
||||
id = fields.Integer()
|
||||
roleName = fields.Str(attribute="name")
|
||||
roleCode = fields.Str(attribute="code")
|
||||
enable = fields.Str()
|
||||
remark = fields.Str()
|
||||
details = fields.Str()
|
||||
sort = fields.Integer()
|
||||
create_at = fields.DateTime()
|
||||
update_at = fields.DateTime()
|
||||
@@ -1,9 +0,0 @@
|
||||
from applications.extensions import db
|
||||
|
||||
# 创建中间表
|
||||
role_power = db.Table(
|
||||
"admin_role_power", # 中间表名称
|
||||
db.Column("id", db.Integer, primary_key=True, autoincrement=True, comment='标识'), # 主键
|
||||
db.Column("power_id", db.Integer, db.ForeignKey("admin_power.id"), comment='用户编号'), # 属性 外键
|
||||
db.Column("role_id", db.Integer, db.ForeignKey("admin_role.id"), comment='角色编号'), # 属性 外键
|
||||
)
|
||||
@@ -1,44 +0,0 @@
|
||||
import datetime
|
||||
from flask_login import UserMixin
|
||||
from werkzeug.security import generate_password_hash, check_password_hash
|
||||
from applications.extensions import db, ma
|
||||
from marshmallow import fields
|
||||
from applications.models import Dept
|
||||
|
||||
|
||||
class User(db.Model, UserMixin):
|
||||
__tablename__ = 'admin_user'
|
||||
id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='用户ID')
|
||||
username = db.Column(db.String(20), comment='用户名')
|
||||
realname = db.Column(db.String(20), comment='真实名字')
|
||||
avatar = db.Column(db.String(255), comment='头像', default="/static/admin/admin/images/avatar.jpg")
|
||||
remark = db.Column(db.String(255), comment='备注')
|
||||
password_hash = db.Column(db.String(128), comment='哈希密码')
|
||||
enable = db.Column(db.Integer, default=0, comment='启用')
|
||||
dept_id = db.Column(db.Integer, comment='部门id')
|
||||
create_at = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间')
|
||||
update_at = db.Column(db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='创建时间')
|
||||
role = db.relationship('Role', secondary="admin_user_role", backref=db.backref('user'), lazy='dynamic')
|
||||
|
||||
def set_password(self, password):
|
||||
self.password_hash = generate_password_hash(password)
|
||||
|
||||
def validate_password(self, password):
|
||||
return check_password_hash(self.password_hash, password)
|
||||
|
||||
|
||||
# 用户models的序列化类
|
||||
class UserSchema(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
|
||||
@@ -1,9 +0,0 @@
|
||||
from applications.extensions import db
|
||||
|
||||
# 创建中间表
|
||||
user_role = db.Table(
|
||||
"admin_user_role", # 中间表名称
|
||||
db.Column("id", db.Integer, primary_key=True, autoincrement=True, comment='标识'), # 主键
|
||||
db.Column("user_id", db.Integer, db.ForeignKey("admin_user.id"), comment='用户编号'), # 属性 外键
|
||||
db.Column("role_id", db.Integer, db.ForeignKey("admin_role.id"), comment='角色编号'), # 属性 外键
|
||||
)
|
||||
@@ -0,0 +1,42 @@
|
||||
from common import register_api
|
||||
from .department import DepartmentsApi, DeptEnableAPI
|
||||
from .rights import (
|
||||
RightsApi, PowerApi, right_power_enable_resource,
|
||||
admin_configs_resource, admin_menu_resource
|
||||
)
|
||||
from .roles import RoleRoleApi, RolePowerApi, role_deletes, role_enable_resource
|
||||
|
||||
|
||||
def register_rights_api(api_bp):
|
||||
register_api(DepartmentsApi, 'rights_dept_api', '/dept/department/', pk='_id', app=api_bp)
|
||||
api_bp.add_url_rule('/dept/department/<int:_id>/status',
|
||||
view_func=DeptEnableAPI.as_view('dept_status_api'),
|
||||
methods=['PUT', ])
|
||||
api_bp.add_url_rule('/rights/rights',
|
||||
view_func=RightsApi.as_view('dept_rights_api'),
|
||||
methods=['GET', 'DELETE'])
|
||||
|
||||
register_api(PowerApi, 'rights_power_api', '/rights/power/', pk='_id', app=api_bp)
|
||||
api_bp.add_url_rule('/rights/configs',
|
||||
endpoint='rights_config_api',
|
||||
view_func=admin_configs_resource,
|
||||
methods=['GET'])
|
||||
api_bp.add_url_rule('/rights/menu',
|
||||
endpoint='rights_menu_api',
|
||||
view_func=admin_menu_resource,
|
||||
methods=['GET'])
|
||||
api_bp.add_url_rule('/rights/power/<int:_id>/<action>',
|
||||
endpoint='rights_power_action_api',
|
||||
view_func=right_power_enable_resource,
|
||||
methods=['PUT'])
|
||||
api_bp.add_url_rule('/roles/role',
|
||||
endpoint='rights_roles_role_api',
|
||||
view_func=role_deletes,
|
||||
methods=['DELETE'])
|
||||
|
||||
register_api(RoleRoleApi, 'rights_role_api', '/roles/role/', pk='_id', app=api_bp)
|
||||
register_api(RolePowerApi, 'rights_role_power_api', '/roles/role_power/', pk='_id', app=api_bp)
|
||||
api_bp.add_url_rule('/roles/role/<int:_id>/status',
|
||||
endpoint='rights_roles_enable_api',
|
||||
view_func=role_enable_resource,
|
||||
methods=['PUT'])
|
||||
@@ -0,0 +1,112 @@
|
||||
import typing as t
|
||||
|
||||
from flask.views import MethodView
|
||||
from flask_pydantic import validate
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from common.utils.http import success_api, fail_api, table_api
|
||||
from extensions import db
|
||||
from models import DepartmentModel, UserModel
|
||||
|
||||
|
||||
class DeptSchema(BaseModel):
|
||||
address: t.Optional[str]
|
||||
dept_name: t.Optional[str] = Field(alias='deptName')
|
||||
email: t.Optional[str]
|
||||
leader: t.Optional[str]
|
||||
parent_id: t.Optional[str] = Field(alias='parentId')
|
||||
phone: t.Optional[str]
|
||||
sort: t.Optional[int]
|
||||
status: t.Optional[int]
|
||||
|
||||
|
||||
class DepartmentsApi(MethodView):
|
||||
|
||||
def get(self, _id):
|
||||
if _id:
|
||||
dept = DepartmentModel.query.filter_by(id=_id).first()
|
||||
dept_data = {
|
||||
'id': dept.id,
|
||||
'dept_name': dept.dept_name,
|
||||
'leader': dept.leader,
|
||||
'email': dept.email,
|
||||
'phone': dept.phone,
|
||||
'status': dept.status,
|
||||
'sort': dept.sort,
|
||||
'address': dept.address,
|
||||
}
|
||||
return dict(success=True, message='ok', dept=dept_data)
|
||||
|
||||
dept_data = DepartmentModel.query.order_by(DepartmentModel.sort).all()
|
||||
return table_api(
|
||||
result={
|
||||
'items': [
|
||||
{
|
||||
'deptId': item.id,
|
||||
'parentId': item.parent_id,
|
||||
'deptName': item.dept_name,
|
||||
'sort': item.sort,
|
||||
'leader': item.leader,
|
||||
'phone': item.phone,
|
||||
'email': item.email,
|
||||
'status': item.status,
|
||||
'comment': item.comment,
|
||||
'address': item.address,
|
||||
'create_at': item.create_at.strftime('%Y-%m-%d %H:%M:%S')
|
||||
} for item in dept_data
|
||||
],
|
||||
'total': len(dept_data)}
|
||||
, code=0)
|
||||
|
||||
@validate()
|
||||
def post(self, body: DeptSchema):
|
||||
dept = DepartmentModel(
|
||||
parent_id=body.parent_id,
|
||||
dept_name=body.dept_name,
|
||||
sort=body.sort,
|
||||
leader=body.leader,
|
||||
phone=body.phone,
|
||||
email=body.email,
|
||||
status=body.status,
|
||||
address=body.address
|
||||
)
|
||||
db.session.add(dept)
|
||||
db.session.commit()
|
||||
|
||||
return success_api(message="成功")
|
||||
|
||||
@validate()
|
||||
def put(self, _id, body: DeptSchema):
|
||||
data = {
|
||||
"dept_name": body.dept_name,
|
||||
"sort": body.sort,
|
||||
"leader": body.leader,
|
||||
"phone": body.phone,
|
||||
"email": body.email,
|
||||
"status": body.status,
|
||||
"address": body.address
|
||||
}
|
||||
body = DepartmentModel.query.filter_by(id=_id).update(data)
|
||||
if not body:
|
||||
return {'success': False, 'message': "更新失败", 'code': 404}
|
||||
db.session.commit()
|
||||
return {'success': True, 'message': '更新成功', 'code': 200}
|
||||
|
||||
def delete(self, _id):
|
||||
ret = DepartmentModel.query.filter_by(id=_id).delete()
|
||||
UserModel.query.filter_by(dept_id=_id).update({"dept_id": None})
|
||||
db.session.commit()
|
||||
if ret:
|
||||
return success_api(message="删除成功")
|
||||
return fail_api(message="删除失败")
|
||||
|
||||
|
||||
class DeptEnableAPI(MethodView):
|
||||
def put(self, _id):
|
||||
d = DepartmentModel.query.get(_id)
|
||||
if d:
|
||||
d.status = not d.status
|
||||
db.session.commit()
|
||||
message = '修改成功'
|
||||
return success_api(message=message)
|
||||
return fail_api(message="出错啦")
|
||||
@@ -0,0 +1,278 @@
|
||||
import copy
|
||||
from collections import OrderedDict
|
||||
from typing import Optional
|
||||
|
||||
from flask import request, jsonify, current_app
|
||||
from flask.views import MethodView
|
||||
from flask_login import current_user
|
||||
from flask_pydantic import validate
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from common.utils.http import success_api, fail_api
|
||||
from extensions import db
|
||||
from models import RightModel, RoleModel
|
||||
|
||||
|
||||
def get_render_config():
|
||||
# 网站配置
|
||||
config = {
|
||||
'logo': {
|
||||
# 网站名称
|
||||
"title": current_app.config.get("SYSTEM_NAME"),
|
||||
# 网站图标
|
||||
"image": "/static/admin/admin/images/logo.png"
|
||||
# 菜单配置
|
||||
},
|
||||
'menu': {
|
||||
# 菜单数据来源
|
||||
"data": "/api/v1/rights/menu",
|
||||
"collaspe": True,
|
||||
# 是否同时只打开一个菜单目录
|
||||
"accordion": True,
|
||||
"method": "GET",
|
||||
# 是否开启多系统菜单模式
|
||||
"control": False,
|
||||
# 默认选中的菜单项
|
||||
"select": "0",
|
||||
# 是否开启异步菜单,false 时 data 属性设置为菜单数据,false 时为 json 文件或后端接口
|
||||
"async": True
|
||||
},
|
||||
'tab': {
|
||||
# 是否开启多选项卡
|
||||
"muiltTab": True,
|
||||
# 切换选项卡时,是否刷新页面状态
|
||||
"keepState": True,
|
||||
# 是否开启 Tab 记忆
|
||||
"session": True,
|
||||
# 最大可打开的选项卡数量
|
||||
"tabMax": 30,
|
||||
"index": {
|
||||
# 标识 ID , 建议与菜单项中的 ID 一致
|
||||
"id": "10",
|
||||
# 页面地址
|
||||
"href": "/admin/welcome",
|
||||
# 标题
|
||||
"title": "首页"
|
||||
}
|
||||
},
|
||||
'theme': {
|
||||
# 默认主题色,对应 colors 配置中的 ID 标识
|
||||
"defaultColor": "2",
|
||||
# 默认的菜单主题 dark-theme 黑 / light-theme 白
|
||||
"defaultMenu": "dark-theme",
|
||||
# 是否允许用户切换主题,false 时关闭自定义主题面板
|
||||
"allowCustom": True
|
||||
},
|
||||
'colors': [
|
||||
{
|
||||
"id": "1",
|
||||
"color": "#2d8cf0"
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"color": "#5FB878"
|
||||
},
|
||||
{
|
||||
"id": "3",
|
||||
"color": "#1E9FFF"
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"color": "#FFB800"
|
||||
},
|
||||
{
|
||||
"id": "5",
|
||||
"color": "darkgray"
|
||||
},
|
||||
],
|
||||
'links': current_app.config.get("SYSTEM_PANEL_LINKS"),
|
||||
'other': {
|
||||
# 主页动画时长
|
||||
"keepLoad": 1200,
|
||||
# 布局顶部主题
|
||||
"autoHead": False
|
||||
},
|
||||
'header': False
|
||||
}
|
||||
return config
|
||||
|
||||
|
||||
# 生成菜单树
|
||||
def make_menu_tree():
|
||||
role = current_user.role
|
||||
powers = []
|
||||
for i in role:
|
||||
# 如果角色没有被启用就直接跳过
|
||||
if i.enable == 0:
|
||||
continue
|
||||
# 变量角色用户的权限
|
||||
for p in i.power:
|
||||
# 如果权限关闭了就直接跳过
|
||||
if p.enable == 0:
|
||||
continue
|
||||
# 一二级菜单
|
||||
if p.type == 0 or p.type == 1:
|
||||
powers.append(p)
|
||||
|
||||
power_dict = [
|
||||
{
|
||||
'id': item.id,
|
||||
'title': item.name,
|
||||
'type': item.type,
|
||||
'code': item.code,
|
||||
'href': item.url,
|
||||
'openType': item.open_type,
|
||||
'parent_id': item.parent_id,
|
||||
'icon': item.icon,
|
||||
'sort': item.sort,
|
||||
'enable': item.enable,
|
||||
} for item in powers
|
||||
]
|
||||
power_dict.sort(key=lambda x: x['id'], reverse=True)
|
||||
|
||||
menu_dict = OrderedDict()
|
||||
for _dict in power_dict:
|
||||
if _dict['id'] in menu_dict:
|
||||
# 当前节点添加子节点
|
||||
_dict['children'] = copy.deepcopy(menu_dict[_dict['id']])
|
||||
_dict['children'].sort(key=lambda item: item['sort'])
|
||||
# 删除子节点
|
||||
del menu_dict[_dict['id']]
|
||||
|
||||
if _dict['parent_id'] not in menu_dict:
|
||||
menu_dict[_dict['parent_id']] = [_dict]
|
||||
else:
|
||||
menu_dict[_dict['parent_id']].append(_dict)
|
||||
|
||||
return sorted(menu_dict.get(0), key=lambda item: item['sort'])
|
||||
|
||||
|
||||
class PowerSchema(BaseModel):
|
||||
icon: str
|
||||
open_type: Optional[str] = Field(alias='openType')
|
||||
parent_id: Optional[str] = Field(alias='parentId')
|
||||
power_code: Optional[str] = Field(alias='powerCode')
|
||||
power_name: Optional[str] = Field(alias='powerName')
|
||||
power_type: Optional[str] = Field(alias='powerType')
|
||||
power_url: Optional[str] = Field(alias='powerUrl')
|
||||
sort: Optional[int] = Field(alias='sort')
|
||||
|
||||
|
||||
class RightsApi(MethodView):
|
||||
def get(self):
|
||||
"""获取选择父节点"""
|
||||
|
||||
power = RightModel.query.all()
|
||||
# power_data = marshal(power, RightModel.fields())
|
||||
power_data = [
|
||||
{
|
||||
'powerId': item.id,
|
||||
'powerName': item.name,
|
||||
'powerType': item.type,
|
||||
'powerUrl': item.url,
|
||||
'openType': item.open_type,
|
||||
'parentId': item.parent_id,
|
||||
'icon': item.icon,
|
||||
'sort': item.sort,
|
||||
'enable': item.enable,
|
||||
} for item in power
|
||||
]
|
||||
power_data.append({"powerId": 0, "powerName": "顶级权限", "parentId": -1})
|
||||
res = {
|
||||
"status": {"code": 200, "message": "默认"},
|
||||
"data": power_data
|
||||
}
|
||||
return res
|
||||
|
||||
def delete(self):
|
||||
ids = request.form.getlist('ids[]')
|
||||
for id in ids:
|
||||
role = RoleModel.query.filter_by(id=id).first()
|
||||
# 删除该角色的权限和用户
|
||||
role.power = []
|
||||
role.user = []
|
||||
|
||||
r = RoleModel.query.filter_by(id=id).delete()
|
||||
db.session.commit()
|
||||
return success_api(message="批量删除成功")
|
||||
|
||||
|
||||
class PowerApi(MethodView):
|
||||
@validate()
|
||||
def post(self, body: PowerSchema):
|
||||
power = RightModel(
|
||||
icon=body.icon,
|
||||
open_type=body.open_type,
|
||||
parent_id=body.parent_id,
|
||||
code=body.power_code,
|
||||
name=body.power_name,
|
||||
type=body.power_type,
|
||||
url=body.power_url,
|
||||
sort=body.sort,
|
||||
enable=1
|
||||
)
|
||||
try:
|
||||
db.session.add(power)
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return fail_api(message='数据提交失败')
|
||||
|
||||
return success_api(message="成功")
|
||||
|
||||
def delete(self, _id):
|
||||
# 删除权限(目前没有判断父节点自动删除子节点)
|
||||
power = RightModel.query.filter_by(id=_id).first()
|
||||
role_id_list = []
|
||||
roles = power.role
|
||||
for role in roles:
|
||||
role_id_list.append(role.id)
|
||||
roles = RoleModel.query.filter(RoleModel.id.in_(role_id_list)).all()
|
||||
for p in roles:
|
||||
power.role.remove(p)
|
||||
r = RightModel.query.filter_by(id=_id).delete()
|
||||
db.session.commit()
|
||||
|
||||
if r:
|
||||
return success_api(message="删除成功")
|
||||
else:
|
||||
return fail_api(message="删除失败")
|
||||
|
||||
@validate()
|
||||
def put(self, _id, body: PowerSchema):
|
||||
data = {
|
||||
"icon": body.icon,
|
||||
"open_type": body.open_type,
|
||||
"parent_id": body.parent_id,
|
||||
"code": body.power_code,
|
||||
"name": body.power_name,
|
||||
"type": body.power_type,
|
||||
"url": body.power_url,
|
||||
"sort": body.sort
|
||||
}
|
||||
power = RightModel.query.filter_by(id=_id).update(data)
|
||||
db.session.commit()
|
||||
|
||||
if not power:
|
||||
return fail_api(message="更新权限失败")
|
||||
return success_api(message="更新权限成功")
|
||||
|
||||
|
||||
def right_power_enable_resource(_id, action):
|
||||
power = RightModel.query.get(_id)
|
||||
if power:
|
||||
power.enable = not power.enable
|
||||
db.session.commit()
|
||||
message = "修改成功"
|
||||
return success_api(message=message)
|
||||
else:
|
||||
return fail_api(message="出错啦")
|
||||
|
||||
|
||||
def admin_configs_resource():
|
||||
return get_render_config()
|
||||
|
||||
|
||||
def admin_menu_resource():
|
||||
menu_tree = make_menu_tree()
|
||||
return jsonify(menu_tree)
|
||||
@@ -0,0 +1,162 @@
|
||||
from flask import request
|
||||
from flask.views import MethodView
|
||||
|
||||
from common.utils.http import table_api, success_api, fail_api
|
||||
from extensions import db
|
||||
from models import RightModel, RoleModel
|
||||
|
||||
|
||||
def role_deletes():
|
||||
ids = request.form.getlist('ids[]')
|
||||
for id in ids:
|
||||
role = RoleModel.query.filter_by(id=id).first()
|
||||
# 删除该角色的权限和用户
|
||||
role.power = []
|
||||
role.user = []
|
||||
|
||||
r = RoleModel.query.filter_by(id=id).delete()
|
||||
db.session.commit()
|
||||
return success_api(message="批量删除成功")
|
||||
|
||||
|
||||
class RoleRoleApi(MethodView):
|
||||
|
||||
def get(self, _id):
|
||||
if not _id:
|
||||
page = request.args.get('page', default=1, type=int)
|
||||
limit = request.args.get('limit', default=10, type=int)
|
||||
role_name = request.args.get('roleName', default="", type=str)
|
||||
role_code = request.args.get('roleCode', default="", type=str)
|
||||
|
||||
filters = []
|
||||
if role_name:
|
||||
filters.append(RoleModel.name.like('%' + role_name + '%'))
|
||||
if role_code:
|
||||
filters.append(RoleModel.code.like('%' + role_code + '%'))
|
||||
|
||||
paginate = RoleModel.query.filter(*filters).paginate(page=page, per_page=limit, error_out=False)
|
||||
|
||||
return table_api(
|
||||
result={
|
||||
'items': [{'id': item.id,
|
||||
'roleName': item.name,
|
||||
'roleCode': item.code,
|
||||
'enable': item.enable,
|
||||
'comment': item.comment,
|
||||
'details': item.details,
|
||||
'sort': item.sort,
|
||||
} for item in paginate.items],
|
||||
'total': paginate.total}
|
||||
, code=0)
|
||||
|
||||
def post(self):
|
||||
# TODO 添加校验
|
||||
details = request.json.get('details', '')
|
||||
enable = request.json.get('enable', 0)
|
||||
role_code = request.json.get('roleCode', '')
|
||||
role_name = request.json.get('roleName', '')
|
||||
sort = request.json.get('sort', 0)
|
||||
|
||||
role = RoleModel(
|
||||
details=details,
|
||||
enable=int(enable),
|
||||
code=role_code,
|
||||
name=role_name,
|
||||
sort=int(sort)
|
||||
)
|
||||
db.session.add(role)
|
||||
db.session.commit()
|
||||
return success_api(message="成功")
|
||||
|
||||
# 更新角色
|
||||
def put(self, _id):
|
||||
# TODO 添加校验
|
||||
role_code = request.json.get('roleCode', 0)
|
||||
role_name = request.json.get('roleName', '')
|
||||
sort = request.json.get('sort', 0) # int
|
||||
enable = request.json.get('enable', 0) # int
|
||||
details = request.json.get('details', '')
|
||||
|
||||
data = {
|
||||
"code": role_code,
|
||||
"name": role_name,
|
||||
"sort": sort,
|
||||
"enable": enable,
|
||||
"details": details
|
||||
}
|
||||
|
||||
role = RoleModel.query.filter_by(id=_id).update(data)
|
||||
db.session.commit()
|
||||
if not role:
|
||||
return fail_api(message="更新角色失败")
|
||||
return success_api(message="更新角色成功")
|
||||
|
||||
|
||||
def role_enable_resource(_id):
|
||||
"""启用用户"""
|
||||
ret = RoleModel.query.get(_id)
|
||||
ret.enable = not ret.enable
|
||||
db.session.commit()
|
||||
|
||||
message = "修改成功"
|
||||
if not ret:
|
||||
return fail_api(message="出错啦")
|
||||
return success_api(message=message)
|
||||
|
||||
|
||||
class RolePowerApi(MethodView):
|
||||
|
||||
def get(self, _id):
|
||||
# 获取角色权限
|
||||
role = RoleModel.query.filter_by(id=_id).first()
|
||||
# 获取权限列表的 id
|
||||
check_powers_list = [rp.id for rp in role.power]
|
||||
powers = RightModel.query.all() # 获取所有的权限
|
||||
powers = [
|
||||
{
|
||||
'powerId': item.id,
|
||||
'powerName': item.name,
|
||||
'powerType': item.type,
|
||||
'powerUrl': item.url,
|
||||
'openType': item.open_type,
|
||||
'parentId': item.parent_id,
|
||||
'icon': item.icon,
|
||||
'sort': item.sort,
|
||||
'enable': item.enable,
|
||||
} for item in powers]
|
||||
for i in powers:
|
||||
if int(i.get("powerId")) in check_powers_list:
|
||||
i["checkArr"] = "1"
|
||||
else:
|
||||
i["checkArr"] = "0"
|
||||
return {
|
||||
"data": powers,
|
||||
"status": {"code": 200, "message": "默认"}
|
||||
}
|
||||
|
||||
# 保存角色权限
|
||||
def put(self, _id):
|
||||
power_ids = request.json.get('powerIds', '')
|
||||
|
||||
power_list = power_ids.split(',')
|
||||
|
||||
""" 更新角色权限 """
|
||||
role = RoleModel.query.filter_by(id=_id).first()
|
||||
powers = RightModel.query.filter(RightModel.id.in_(power_list)).all()
|
||||
role.power = powers
|
||||
|
||||
db.session.commit()
|
||||
return success_api(message="授权成功")
|
||||
|
||||
# 角色删除
|
||||
def delete(self, _id):
|
||||
role = RoleModel.query.filter_by(id=_id).first()
|
||||
# 删除该角色的权限和用户
|
||||
role.power = []
|
||||
role.user = []
|
||||
|
||||
r = RoleModel.query.filter_by(id=_id).delete()
|
||||
db.session.commit()
|
||||
if not r:
|
||||
return fail_api(message="角色删除失败")
|
||||
return success_api(message="角色删除成功")
|
||||
@@ -1,18 +0,0 @@
|
||||
.pear-container {background-color: whitesmoke;margin: 10px;}
|
||||
.pear-card {width: 100%;height: 66px;background-color: #F8F8F8;display: inline-block;border-radius: 5px;text-align: center;margin-bottom: 3px;}
|
||||
.pear-card:hover,.pear-card2:hover{box-shadow: 2px 0 8px 0 lightgray!important;}.pear-card2 {width: 100%;height: 90px;background-color: #F8F8F8;display: inline-block;border-radius: 5px;text-align: center;margin-bottom: 3px;}
|
||||
.pear-card2 i {font-size: 30px;height: 90px;line-height: 90px;}
|
||||
.pear-card i {font-size: 30px;height: 66px;line-height: 66px;}
|
||||
.layui-col-md3 {text-align: center;}
|
||||
.pear-card-title {margin-top: 3px;}
|
||||
.person img {width: 90px;height: 90px;border-radius: 4px;margin-top: 8px;margin-left: 8px;}
|
||||
.pear-card2 .count {color: #51A351;font-size: 30px;margin-top: 12px;}
|
||||
.pear-card2 .title {color: gray;font-size: 14px;margin-top: 14px;}
|
||||
.pear-card-status {padding: 0 10px 10px;}
|
||||
.pear-card-status li {position: relative;padding: 10px 0;border-bottom: 1px solid #EEE;}
|
||||
.pear-card-status li h3 {padding-bottom: 5px;font-weight: 700;}
|
||||
.pear-card-status li p {padding-bottom: 10px;padding-top: 3px ;}
|
||||
.pear-card-status li>span {color: #999;}
|
||||
.pear-reply {position: absolute;right: 20px;}
|
||||
.person .title{font-size: 17px;font-weight: 600;margin-left: 18px;margin-top: 16px;position: absolute;display: inline-block;}
|
||||
.person .desc{font-size: 16px;font-weight: 600;margin-left: 115px;margin-top: -30px;position: absolute;display: inline-block;}
|
||||
@@ -1,58 +0,0 @@
|
||||
.dept-tree {
|
||||
width: 100%;
|
||||
height: -webkit-calc(100vh - 247px);
|
||||
height: -moz-calc(100vh - 247px);
|
||||
height: calc(100vh - 247px);
|
||||
margin-top: 20px;
|
||||
}
|
||||
.dtree-laySimple-item-this{
|
||||
background-color: transparent!important;
|
||||
}
|
||||
.dtree-nav-div:hover{
|
||||
background-color: transparent!important;
|
||||
}
|
||||
.button{
|
||||
margin-top: 10px;
|
||||
width: 94%;
|
||||
margin-left: 3%;
|
||||
display: block;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
padding: 0 15px;
|
||||
white-space: nowrap;
|
||||
text-align: center;
|
||||
font-size: 14.5px;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
box-sizing: border-box;
|
||||
display:inline-block;
|
||||
outline: 0;
|
||||
border-radius: 2px;
|
||||
-webkit-appearance: none;
|
||||
box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.15);
|
||||
}
|
||||
.button-primary{
|
||||
background-color: #5FB878;
|
||||
color: white;
|
||||
}
|
||||
.button-default{
|
||||
color: #2f495e;
|
||||
background-color: #edf2f7;
|
||||
}
|
||||
.user-main{
|
||||
width: calc(100% - 312px);
|
||||
float: right;
|
||||
}
|
||||
.user-left{
|
||||
width: 300px;
|
||||
float: left;
|
||||
}
|
||||
.user-collasped.user-main{
|
||||
width: 100%;
|
||||
}
|
||||
.user-collasped.user-left{
|
||||
width: 0px;
|
||||
}
|
||||
.user-collasped.user-left .user-group{
|
||||
display: none;
|
||||
}
|
||||
@@ -1,56 +0,0 @@
|
||||
{
|
||||
"code": 0,
|
||||
"msg": "...",
|
||||
"count": 3,
|
||||
"data": [{
|
||||
"id": "1",
|
||||
"image": "https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png",
|
||||
"title": "Alipay",
|
||||
"remark": "那是一种内在的东西, 他们到达不了,也无法触及的",
|
||||
"time": "几秒前"
|
||||
},{
|
||||
"id": "2",
|
||||
"image": "https://gw.alipayobjects.com/zos/rmsportal/iXjVmWVHbCJAyqvDxdtx.png",
|
||||
"title": "Layui",
|
||||
"remark": "生命就像一盒巧克力,结果往往出人意料",
|
||||
"time": "几秒前"
|
||||
},{
|
||||
"id": "1",
|
||||
"image": "https://gw.alipayobjects.com/zos/rmsportal/iZBVOIhGJiAnhplqjvZW.png",
|
||||
"title": "Angular",
|
||||
"remark": "希望是一个好东西,也许是最好的,好东西是不会消亡的",
|
||||
"time": "几秒前"
|
||||
},
|
||||
{
|
||||
"id": "1",
|
||||
"image": "https://gw.alipayobjects.com/zos/rmsportal/uMfMFlvUuceEyPpotzlq.png",
|
||||
"title": "React",
|
||||
"remark": "那是一种内在的东西, 他们到达不了,也无法触及的",
|
||||
"time": "几秒前"
|
||||
},{
|
||||
"id": "1",
|
||||
"image": "https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png",
|
||||
"title": "Alipay",
|
||||
"remark": "那是一种内在的东西, 他们到达不了,也无法触及的",
|
||||
"time": "几秒前"
|
||||
},{
|
||||
"id": "2",
|
||||
"image": "https://gw.alipayobjects.com/zos/rmsportal/iXjVmWVHbCJAyqvDxdtx.png",
|
||||
"title": "Layui",
|
||||
"remark": "生命就像一盒巧克力,结果往往出人意料",
|
||||
"time": "几秒前"
|
||||
},{
|
||||
"id": "1",
|
||||
"image": "https://gw.alipayobjects.com/zos/rmsportal/iZBVOIhGJiAnhplqjvZW.png",
|
||||
"title": "Angular",
|
||||
"remark": "希望是一个好东西,也许是最好的,好东西是不会消亡的",
|
||||
"time": "几秒前"
|
||||
},
|
||||
{
|
||||
"id": "1",
|
||||
"image": "https://gw.alipayobjects.com/zos/rmsportal/uMfMFlvUuceEyPpotzlq.png",
|
||||
"title": "React",
|
||||
"remark": "那是一种内在的东西, 他们到达不了,也无法触及的",
|
||||
"time": "几秒前"
|
||||
}]
|
||||
}
|
||||
@@ -1,88 +0,0 @@
|
||||
[{
|
||||
"id": 1,
|
||||
"title": "私信",
|
||||
"children": [{
|
||||
"id": 11,
|
||||
"avatar":"admin/images/avatar.jpg",
|
||||
"title": "收到一条私人消息",
|
||||
"context": "这是消息内容。",
|
||||
"form": "就眠仪式",
|
||||
"time": "2019-02-15"
|
||||
}, {
|
||||
"id": 12,
|
||||
"avatar":"admin/images/avatar.jpg",
|
||||
"title": "收到一条私人消息",
|
||||
"context": "这是消息内容。",
|
||||
"form": "就眠仪式",
|
||||
"time": "2019-02-15"
|
||||
}]
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"title": "消息",
|
||||
"children": [{
|
||||
"id": 11,
|
||||
"avatar":"admin/images/avatar.jpg",
|
||||
"title": "收到一条紧急任务",
|
||||
"context": "这是消息内容。",
|
||||
"form": "就眠仪式",
|
||||
"time": "2019-02-15"
|
||||
}, {
|
||||
"id": 12,
|
||||
"avatar":"admin/images/avatar.jpg",
|
||||
"title": "收到一条紧急任务",
|
||||
"context": "这是消息内容。",
|
||||
"form": "就眠仪式",
|
||||
"time": "2019-02-15"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"avatar":"admin/images/avatar.jpg",
|
||||
"title": "收到一条紧急任务",
|
||||
"context": "这是消息内容。",
|
||||
"form": "就眠仪式",
|
||||
"time": "2019-02-15"
|
||||
}, {
|
||||
"id": 12,
|
||||
"avatar":"admin/images/avatar.jpg",
|
||||
"title": "收到一条紧急任务",
|
||||
"context": "这是消息内容。",
|
||||
"form": "就眠仪式",
|
||||
"time": "2019-02-15"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"avatar":"admin/images/avatar.jpg",
|
||||
"title": "收到一条紧急任务",
|
||||
"context": "这是消息内容。",
|
||||
"form": "就眠仪式",
|
||||
"time": "2019-02-15"
|
||||
}, {
|
||||
"id": 12,
|
||||
"avatar":"admin/images/avatar.jpg",
|
||||
"title": "收到一条紧急任务",
|
||||
"context": "这是消息内容。",
|
||||
"form": "就眠仪式",
|
||||
"time": "2019-02-15"
|
||||
}]
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"title": "通知",
|
||||
"children": [{
|
||||
"id": 11,
|
||||
"avatar":"admin/images/avatar.jpg",
|
||||
"title": "收到一条警告通知",
|
||||
"context": "这是消息内容。",
|
||||
"form": "就眠仪式",
|
||||
"time": "2019-02-15"
|
||||
}, {
|
||||
"id": 12,
|
||||
"avatar":"admin/images/avatar.jpg",
|
||||
"title": "收到一条警告通知",
|
||||
"context": "这是消息内容。",
|
||||
"form": "就眠仪式",
|
||||
"time": "2019-02-15"
|
||||
}]
|
||||
}
|
||||
]
|
||||
@@ -1 +0,0 @@
|
||||
{"createTime":null,"createBy":null,"updateTime":null,"updateBy":null,"remark":null,"code":0,"msg":"...","count":3,"data":[{"createTime":null,"createBy":null,"updateTime":null,"updateBy":null,"remark":null,"roleId":"1","roleName":"超级管理员","roleCode":"admin","enable":"1","details":"超级管理员","checked":false},{"createTime":null,"createBy":null,"updateTime":null,"updateBy":null,"remark":null,"roleId":"2","roleName":"普通管理员","roleCode":"manager","enable":"0","details":"普通管理员","checked":false},{"createTime":null,"createBy":null,"updateTime":null,"updateBy":null,"remark":null,"roleId":"3","roleName":"普通用户","roleCode":"pearson","enable":"0","details":"普通用户","checked":false}]}
|
||||
@@ -1 +0,0 @@
|
||||
html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #eee;border-left-width:6px;background-color:#FAFAFA;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:40px;line-height:40px;border-bottom:1px solid #eee}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{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{padding-top:10px}.layui-code-view .layui-code-ol li:last-child{padding-bottom:10px}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none}.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}
|
||||
@@ -1,3 +0,0 @@
|
||||
.layui-iconpicker .layui-anim{
|
||||
width: 300px!important;
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
.layui-layer-msg{
|
||||
border-color: transparent!important;
|
||||
box-shadow: 2px 0 6px rgb(0 21 41 / 0.05)!important;
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
.pear-notice .layui-this {
|
||||
color: #5FB878 !important;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.pear-notice li {
|
||||
border-right: 1px solid whitesmoke;
|
||||
}
|
||||
|
||||
.pear-notice * {
|
||||
color: dimgray !important;
|
||||
}
|
||||
|
||||
.pear-notice{
|
||||
width: 285px!important;
|
||||
}
|
||||
|
||||
.pear-notice span{
|
||||
margin-left: 20px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.pear-notice img{
|
||||
margin-left: 8px;
|
||||
width: 33px!important;
|
||||
height: 33px!important;
|
||||
border-radius: 50px;
|
||||
}
|
||||
|
||||
.pear-notice-item{
|
||||
height: 45px!important;
|
||||
line-height: 45px!important;
|
||||
}
|
||||
|
||||
/** 滚动条样式 */
|
||||
.pear-notice *::-webkit-scrollbar{width:0px;height:0px;}
|
||||
.pear-notice *::-webkit-scrollbar-track{background: white;border-radius:2px;}
|
||||
.pear-notice *::-webkit-scrollbar-thumb{background: #E6E6E6;border-radius:2px;}
|
||||
.pear-notice *::-webkit-scrollbar-thumb:hover{background: #E6E6E6;}
|
||||
.pear-notice *::-webkit-scrollbar-corner{background: #f6f6f6;}
|
||||
|
||||
|
||||
@@ -1,356 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<!--
|
||||
2013-9-30: Created.
|
||||
-->
|
||||
<svg>
|
||||
<metadata>
|
||||
Created by iconfont
|
||||
</metadata>
|
||||
<defs>
|
||||
|
||||
<font id="pear-icon" horiz-adv-x="1024" >
|
||||
<font-face
|
||||
font-family="pear-icon"
|
||||
font-weight="500"
|
||||
font-stretch="normal"
|
||||
units-per-em="1024"
|
||||
ascent="896"
|
||||
descent="-128"
|
||||
/>
|
||||
<missing-glyph />
|
||||
|
||||
<glyph glyph-name="jiazai" unicode="" d="M512-96c-64.78 0-127.65 12.7-186.85 37.74-57.16 24.18-108.49 58.78-152.56 102.85-44.07 44.07-78.68 95.4-102.85 152.56C44.7 256.35 32 319.22 32 384s12.7 127.65 37.74 186.85c24.18 57.16 58.78 108.49 102.85 152.56s95.4 78.68 152.56 102.85C384.35 851.3 447.22 864 512 864c19.89 0 36.01-16.12 36.01-36.01s-16.12-36.01-36.01-36.01c-55.09 0-108.52-10.78-158.79-32.05-48.58-20.55-92.21-49.97-129.69-87.45s-66.9-81.11-87.45-129.69c-21.26-50.27-32.05-103.7-32.05-158.79s10.78-108.52 32.05-158.79c20.55-48.58 49.97-92.21 87.45-129.69s81.11-66.9 129.69-87.45c50.27-21.26 103.7-32.05 158.79-32.05s108.52 10.78 158.79 32.05c48.58 20.55 92.21 49.97 129.69 87.45s66.9 81.11 87.45 129.69c21.26 50.27 32.05 103.7 32.05 158.79 0 44.18-7.01 87.61-20.83 129.09-6.29 18.87 3.91 39.26 22.78 45.55 18.87 6.29 39.26-3.91 45.55-22.78C983.75 487.02 992 435.93 992 384c0-64.78-12.7-127.65-37.74-186.85-24.18-57.16-58.78-108.49-102.85-152.56-44.07-44.07-95.4-78.68-152.56-102.85C639.65-83.3 576.78-96 512-96z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="3column" unicode="" d="M874.666667 778.666667H149.333333C108.8 778.666667 74.666667 744.533333 74.666667 704v-640c0-40.533333 34.133333-74.666667 74.666666-74.666667h725.333334c40.533333 0 74.666667 34.133333 74.666666 74.666667V704c0 40.533333-34.133333 74.666667-74.666666 74.666667z m-245.333334-64v-661.333334h-234.666666v661.333334h234.666666zM138.666667 64V704c0 6.4 4.266667 10.666667 10.666666 10.666667h181.333334v-661.333334H149.333333c-6.4 0-10.666667 4.266667-10.666666 10.666667z m746.666666 0c0-6.4-4.266667-10.666667-10.666666-10.666667h-181.333334v661.333334H874.666667c6.4 0 10.666667-4.266667 10.666666-10.666667v-640z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="column-4" unicode="" d="M874.666667 778.666667H149.333333C108.8 778.666667 74.666667 744.533333 74.666667 704v-640c0-40.533333 34.133333-74.666667 74.666666-74.666667h725.333334c40.533333 0 74.666667 34.133333 74.666666 74.666667V704c0 40.533333-34.133333 74.666667-74.666666 74.666667z m-330.666667-64h128v-661.333334h-128v661.333334z m-64-661.333334h-128v661.333334h128v-661.333334z m-341.333333 10.666667V704c0 6.4 4.266667 10.666667 10.666666 10.666667h138.666667v-661.333334H149.333333c-6.4 0-10.666667 4.266667-10.666666 10.666667z m746.666666 0c0-6.4-4.266667-10.666667-10.666666-10.666667h-138.666667v661.333334H874.666667c6.4 0 10.666667-4.266667 10.666666-10.666667v-640z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="add" unicode="" d="M853.333333 416H544V725.333333c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-309.333333H170.666667c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h309.333333V42.666667c0-17.066667 14.933333-32 32-32s32 14.933333 32 32V352H853.333333c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="adjust" unicode="" d="M522.666667 437.333333c-17.066667 0-32-14.933333-32-32v-362.666666c0-17.066667 14.933333-32 32-32S554.666667 25.6 554.666667 42.666667V405.333333c0 17.066667-14.933333 32-32 32zM341.333333 341.333333H106.666667c-17.066667 0-32-14.933333-32-32S89.6 277.333333 106.666667 277.333333h74.666666v-234.666666c0-17.066667 14.933333-32 32-32s32 14.933333 32 32V277.333333H341.333333c17.066667 0 32 14.933333 32 32S358.4 341.333333 341.333333 341.333333zM693.333333 522.666667c0 17.066667-14.933333 32-32 32h-106.666666V725.333333c0 17.066667-14.933333 32-32 32S490.666667 742.4 490.666667 725.333333v-170.666666h-106.666667c-17.066667 0-32-14.933333-32-32S366.933333 490.666667 384 490.666667h277.333333c17.066667 0 32 14.933333 32 32zM917.333333 277.333333H682.666667c-17.066667 0-32-14.933333-32-32S665.6 213.333333 682.666667 213.333333h96v-170.666666c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v170.666666H917.333333c17.066667 0 32 14.933333 32 32S934.4 277.333333 917.333333 277.333333zM213.333333 437.333333c17.066667 0 32 14.933333 32 32V725.333333c0 17.066667-14.933333 32-32 32S181.333333 742.4 181.333333 725.333333v-256c0-17.066667 14.933333-32 32-32zM810.666667 373.333333c17.066667 0 32 14.933333 32 32V725.333333c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-320c0-17.066667 14.933333-32 32-32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="ashbin" unicode="" d="M874.666667 654.933333h-202.666667V725.333333c0 40.533333-34.133333 74.666667-74.666667 74.666667h-170.666666c-40.533333 0-74.666667-34.133333-74.666667-74.666667v-70.4H149.333333c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h53.333334V42.666667c0-40.533333 34.133333-74.666667 74.666666-74.666667h469.333334c40.533333 0 74.666667 34.133333 74.666666 74.666667V590.933333H874.666667c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32zM416 725.333333c0 6.4 4.266667 10.666667 10.666667 10.666667h170.666666c6.4 0 10.666667-4.266667 10.666667-10.666667v-70.4h-192V725.333333z m341.333333-682.666666c0-6.4-4.266667-10.666667-10.666666-10.666667H277.333333c-6.4 0-10.666667 4.266667-10.666666 10.666667V586.666667h490.666666V42.666667zM426.666667 160c17.066667 0 32 14.933333 32 32V405.333333c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-213.333333c0-17.066667 14.933333-32 32-32zM597.333333 160c17.066667 0 32 14.933333 32 32V405.333333c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-213.333333c0-17.066667 14.933333-32 32-32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="browse" unicode="" d="M512 59.733333C230.4 59.733333 74.666667 362.666667 68.266667 375.466667c-4.266667 8.533333-4.266667 19.2 0 29.866666 6.4 12.8 164.266667 315.733333 443.733333 315.733334 281.6 0 437.333333-305.066667 443.733333-317.866667 4.266667-8.533333 4.266667-19.2 0-29.866667-6.4-10.666667-162.133333-313.6-443.733333-313.6zM132.266667 390.4c34.133333-57.6 170.666667-266.666667 379.733333-266.666667s345.6 209.066667 379.733333 266.666667c-34.133333 57.6-170.666667 266.666667-379.733333 266.666667S166.4 448 132.266667 390.4zM512 245.333333c-76.8 0-138.666667 61.866667-138.666667 138.666667s61.866667 138.666667 138.666667 138.666667 138.666667-61.866667 138.666667-138.666667-61.866667-138.666667-138.666667-138.666667z m0 213.333334c-40.533333 0-74.666667-34.133333-74.666667-74.666667s34.133333-74.666667 74.666667-74.666667 74.666667 34.133333 74.666667 74.666667-34.133333 74.666667-74.666667 74.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="bottom" unicode="" d="M896 32H128c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h768c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32zM488.533333 168.533333c6.4-6.4 14.933333-8.533333 23.466667-8.533333s17.066667 2.133333 23.466667 8.533333l213.333333 213.333334c12.8 12.8 12.8 32 0 44.8-12.8 12.8-32 12.8-44.8 0l-157.866667-157.866667V725.333333c0 17.066667-14.933333 32-32 32s-34.133333-14.933333-34.133333-32v-456.533333L322.133333 426.666667c-12.8 12.8-32 12.8-44.8 0-12.8-12.8-12.8-32 0-44.8l211.2-213.333334z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="back" unicode="" d="M853.333333 650.666667H245.333333l93.866667 93.866666c12.8 12.8 12.8 34.133333 0 46.933334-12.8 12.8-34.133333 12.8-46.933333 0l-145.066667-145.066667c-12.8-12.8-12.8-34.133333 0-46.933333l145.066667-145.066667c6.4-6.4 14.933333-10.666667 23.466666-10.666667s17.066667 4.266667 23.466667 10.666667c12.8 12.8 12.8 34.133333 0 46.933333L256 584.533333h597.333333c6.4 0 10.666667-4.266667 10.666667-10.666666v-426.666667c0-6.4-4.266667-10.666667-10.666667-10.666667H170.666667c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h682.666666c40.533333 0 74.666667 34.133333 74.666667 74.666667V576c0 40.533333-34.133333 74.666667-74.666667 74.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="bad" unicode="" d="M904.533333 373.333333L853.333333 710.4c-8.533333 51.2-55.466667 89.6-106.666666 89.6H204.8c-59.733333 0-108.8-46.933333-108.8-106.666667v-258.133333c0-57.6 49.066667-106.666667 108.8-106.666667h91.733333l125.866667-281.6c2.133333-2.133333 2.133333-4.266667 4.266667-6.4 14.933333-23.466667 38.4-36.266667 64-36.266666 12.8 0 25.6 4.266667 38.4 10.666666 57.6 34.133333 87.466667 72.533333 87.466666 117.333334v117.333333h183.466667c32 0 59.733333 12.8 81.066667 36.266667 19.2 25.6 29.866667 55.466667 23.466666 87.466666z m-616.533333 21.333334H204.8c-25.6 0-44.8 19.2-44.8 42.666666v256c0 23.466667 19.2 42.666667 44.8 42.666667h83.2v-341.333333zM832 328.533333c-8.533333-8.533333-21.333333-14.933333-34.133333-14.933333h-213.333334c-17.066667 0-32-14.933333-32-32v-149.333333c0-25.6-29.866667-49.066667-55.466666-64-4.266667-2.133333-10.666667-2.133333-14.933334 4.266666L352 362.666667V736H746.666667c21.333333 0 40.533333-14.933333 42.666666-36.266667L842.666667 362.666667c2.133333-10.666667-2.133333-23.466667-10.666667-34.133334z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="arrow-double-left" unicode="" d="M842.666667 32c-8.533333 0-14.933333 2.133333-21.333334 8.533333l-341.333333 309.333334c-6.4 6.4-10.666667 14.933333-10.666667 23.466666 0 8.533333 4.266667 17.066667 10.666667 23.466667l341.333333 309.333333c12.8 12.8 34.133333 10.666667 44.8-2.133333 12.8-12.8 10.666667-34.133333-2.133333-44.8L548.266667 373.333333l315.733333-285.866666c12.8-10.666667 14.933333-32 2.133333-44.8-6.4-6.4-14.933333-10.666667-23.466666-10.666667zM512 32c-8.533333 0-14.933333 2.133333-21.333333 8.533333L149.333333 349.866667c-6.4 6.4-10.666667 14.933333-10.666666 23.466666 0 8.533333 4.266667 17.066667 10.666666 23.466667L490.666667 706.133333c12.8 12.8 34.133333 10.666667 44.8-2.133333 12.8-12.8 10.666667-34.133333-2.133334-44.8L217.6 373.333333 533.333333 87.466667c12.8-12.8 14.933333-32 2.133334-44.8-6.4-6.4-14.933333-10.666667-23.466667-10.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="arrow-double-right" unicode="" d="M544 373.333333c0 8.533333-4.266667 17.066667-10.666667 23.466667L192 706.133333c-12.8 12.8-34.133333 10.666667-44.8-2.133333-12.8-12.8-10.666667-34.133333 2.133333-44.8l315.733334-285.866667L149.333333 87.466667c-12.8-12.8-14.933333-32-2.133333-44.8 6.4-6.4 14.933333-10.666667 23.466667-10.666667 8.533333 0 14.933333 2.133333 21.333333 8.533333l341.333333 309.333334c6.4 6.4 10.666667 14.933333 10.666667 23.466666zM864 396.8l-341.333333 309.333333c-12.8 12.8-34.133333 10.666667-44.8-2.133333-12.8-12.8-10.666667-34.133333 2.133333-44.8l315.733333-285.866667-315.733333-285.866666c-12.8-12.8-14.933333-32-2.133333-44.8 6.4-6.4 14.933333-10.666667 23.466666-10.666667 8.533333 0 14.933333 2.133333 21.333334 8.533333l341.333333 309.333334c6.4 6.4 10.666667 14.933333 10.666667 23.466666 0 8.533333-4.266667 17.066667-10.666667 23.466667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="camera" unicode="" d="M846.933333 657.066667h-140.8L646.4 746.666667c-6.4 10.666667-17.066667 17.066667-29.866667 17.066666h-209.066666c-12.8 0-23.466667-6.4-29.866667-17.066666l-59.733333-89.6H177.066667c-57.6 0-106.666667-46.933333-106.666667-106.666667v-426.666667c0-57.6 46.933333-106.666667 106.666667-106.666666h672c57.6 0 106.666667 46.933333 106.666666 106.666666v426.666667c-2.133333 59.733333-49.066667 106.666667-108.8 106.666667z m34.133334-533.333334c0-19.2-14.933333-34.133333-34.133334-34.133333H177.066667c-19.2 0-34.133333 14.933333-34.133334 34.133333v426.666667c0 19.2 14.933333 34.133333 34.133334 34.133333h160c12.8 0 23.466667 6.4 29.866666 17.066667L426.666667 689.066667h170.666666l59.733334-89.6c6.4-10.666667 17.066667-17.066667 29.866666-17.066667h160c19.2 0 34.133333-14.933333 34.133334-34.133333v-424.533334zM512 531.2c-96 0-174.933333-78.933333-174.933333-174.933333 0-96 78.933333-174.933333 174.933333-174.933334 96 0 174.933333 78.933333 174.933333 174.933334 0 96-78.933333 174.933333-174.933333 174.933333z m0-279.466667c-57.6 0-104.533333 46.933333-104.533333 104.533334s46.933333 104.533333 104.533333 104.533333 104.533333-46.933333 104.533333-104.533333-46.933333-104.533333-104.533333-104.533334z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="chart-bar" unicode="" d="M149.333333 96h128c29.866667 0 53.333333 23.466667 53.333334 53.333333V362.666667c0 29.866667-23.466667 53.333333-53.333334 53.333333H149.333333c-29.866667 0-53.333333-23.466667-53.333333-53.333333v-213.333334c0-29.866667 23.466667-53.333333 53.333333-53.333333z m10.666667 256h106.666667v-192h-106.666667v192zM448 96h128c29.866667 0 53.333333 23.466667 53.333333 53.333333V746.666667c0 29.866667-23.466667 53.333333-53.333333 53.333333h-128c-29.866667 0-53.333333-23.466667-53.333333-53.333333v-597.333334c0-29.866667 23.466667-53.333333 53.333333-53.333333z m10.666667 640h106.666666v-576h-106.666666v576zM874.666667 586.666667h-128c-29.866667 0-53.333333-23.466667-53.333334-53.333334v-384c0-29.866667 23.466667-53.333333 53.333334-53.333333h128c29.866667 0 53.333333 23.466667 53.333333 53.333333V533.333333c0 29.866667-23.466667 53.333333-53.333333 53.333334z m-10.666667-426.666667h-106.666667v362.666667h106.666667v-362.666667zM896 42.666667H128c-17.066667 0-32-14.933333-32-32S110.933333-21.333333 128-21.333333h768c17.066667 0 32 14.933333 32 32S913.066667 42.666667 896 42.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="attachment" unicode="" d="M874.666667 428.8c-10.666667 10.666667-29.866667 12.8-42.666667 0l-343.466667-341.333333c-74.666667-74.666667-198.4-74.666667-275.2 0-36.266667 36.266667-57.6 85.333333-57.6 136.533333s19.2 100.266667 57.6 136.533333L556.8 704c46.933333 46.933333 121.6 46.933333 168.533333 0 23.466667-23.466667 34.133333-53.333333 34.133334-83.2 0-32-12.8-61.866667-34.133334-83.2L384 192c-17.066667-17.066667-44.8-17.066667-64 0-8.533333 8.533333-12.8 19.2-12.8 32s4.266667 23.466667 12.8 32l317.866667 315.733333c10.666667 10.666667 12.8 29.866667 0 42.666667-10.666667 12.8-29.866667 12.8-42.666667 0L277.333333 298.666667c-19.2-19.2-29.866667-46.933333-29.866666-74.666667S258.133333 170.666667 277.333333 149.333333c40.533333-40.533333 106.666667-40.533333 147.2 0L768 492.8c34.133333 34.133333 53.333333 78.933333 53.333333 125.866667s-19.2 93.866667-53.333333 125.866666a178.986667 178.986667 0 0 1-253.866667 0l-341.333333-341.333333c-46.933333-46.933333-74.666667-110.933333-74.666667-179.2s25.6-132.266667 74.666667-179.2c49.066667-49.066667 115.2-74.666667 179.2-74.666667s130.133333 25.6 179.2 74.666667l343.466667 341.333333c10.666667 12.8 10.666667 32 0 42.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="code" unicode="" d="M322.133333 599.466667c-12.8 12.8-32 12.8-44.8 0l-192-192c-12.8-12.8-12.8-32 0-44.8l192-192c6.4-6.4 14.933333-8.533333 23.466667-8.533334s17.066667 2.133333 23.466667 8.533334c12.8 12.8 12.8 32 0 44.8L151.466667 384l168.533333 168.533333c12.8 12.8 12.8 34.133333 2.133333 46.933334zM940.8 407.466667l-192 192c-12.8 12.8-32 12.8-44.8 0-12.8-12.8-12.8-32 0-44.8l168.533333-168.533334-168.533333-168.533333c-12.8-12.8-12.8-32 0-44.8 6.4-6.4 14.933333-8.533333 23.466667-8.533333s17.066667 2.133333 23.466666 8.533333l192 192c8.533333 8.533333 8.533333 29.866667-2.133333 42.666667zM622.933333 819.2c-17.066667 4.266667-34.133333-6.4-38.4-23.466667L366.933333-6.4c-4.266667-17.066667 6.4-34.133333 23.466667-38.4 2.133333 0 6.4-2.133333 8.533333-2.133333 14.933333 0 27.733333 8.533333 29.866667 23.466666L644.266667 780.8c4.266667 17.066667-4.266667 34.133333-21.333334 38.4z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="close" unicode="" d="M556.8 384L832 659.2c12.8 12.8 12.8 32 0 44.8-12.8 12.8-32 12.8-44.8 0L512 428.8l-275.2 277.333333c-12.8 12.8-32 12.8-44.8 0-12.8-12.8-12.8-32 0-44.8l275.2-277.333333-277.333333-275.2c-12.8-12.8-12.8-32 0-44.8 6.4-6.4 14.933333-8.533333 23.466666-8.533333s17.066667 2.133333 23.466667 8.533333L512 339.2 787.2 64c6.4-6.4 14.933333-8.533333 23.466667-8.533333s17.066667 2.133333 23.466666 8.533333c12.8 12.8 12.8 32 0 44.8L556.8 384z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="check-item" unicode="" d="M853.333333 800H170.666667C130.133333 800 96 765.866667 96 725.333333v-682.666666c0-40.533333 34.133333-74.666667 74.666667-74.666667h682.666666c40.533333 0 74.666667 34.133333 74.666667 74.666667V725.333333c0 40.533333-34.133333 74.666667-74.666667 74.666667z m10.666667-757.333333c0-6.4-4.266667-10.666667-10.666667-10.666667H170.666667c-6.4 0-10.666667 4.266667-10.666667 10.666667V725.333333c0 6.4 4.266667 10.666667 10.666667 10.666667h682.666666c6.4 0 10.666667-4.266667 10.666667-10.666667v-682.666666zM704 514.133333l-243.2-234.666666-117.333333 125.866666c-12.8 12.8-32 12.8-44.8 2.133334-12.8-12.8-12.8-32-2.133334-44.8l140.8-149.333334c6.4-6.4 14.933333-10.666667 23.466667-10.666666 8.533333 0 17.066667 4.266667 21.333333 8.533333l264.533334 256c12.8 12.8 12.8 32 0 44.8-10.666667 12.8-29.866667 14.933333-42.666667 2.133333z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="calendar" unicode="" d="M853.333333 746.666667h-138.666666V789.333333c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-42.666666h-277.333334V789.333333c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-42.666666H170.666667c-40.533333 0-74.666667-34.133333-74.666667-74.666667v-618.666667C96 12.8 130.133333-21.333333 170.666667-21.333333h682.666666c40.533333 0 74.666667 34.133333 74.666667 74.666666v618.666667C928 712.533333 893.866667 746.666667 853.333333 746.666667zM170.666667 682.666667h138.666666v-64c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v64h277.333334v-64c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v64H853.333333c6.4 0 10.666667-4.266667 10.666667-10.666667v-194.133333c-4.266667 2.133333-6.4 2.133333-10.666667 2.133333H170.666667c-4.266667 0-6.4 0-10.666667-2.133333v194.133333c0 6.4 4.266667 10.666667 10.666667 10.666667z m682.666666-640H170.666667c-6.4 0-10.666667 4.266667-10.666667 10.666666V418.133333c4.266667-2.133333 6.4-2.133333 10.666667-2.133333h682.666666c4.266667 0 6.4 0 10.666667 2.133333v-364.8c0-6.4-4.266667-10.666667-10.666667-10.666666zM384 288h-85.333333c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h85.333333c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32zM725.333333 288h-192c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h192c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="comment" unicode="" d="M853.333333 757.333333H170.666667c-40.533333 0-74.666667-34.133333-74.666667-74.666666v-512c0-40.533333 34.133333-74.666667 74.666667-74.666667h151.466666V-21.333333c0-12.8 8.533333-25.6 19.2-29.866667 4.266667-2.133333 8.533333-2.133333 12.8-2.133333 8.533333 0 17.066667 4.266667 23.466667 10.666666l136.533333 138.666667H853.333333c40.533333 0 74.666667 34.133333 74.666667 74.666667V682.666667c0 40.533333-34.133333 74.666667-74.666667 74.666666z m10.666667-586.666666c0-6.4-4.266667-10.666667-10.666667-10.666667H501.333333c-8.533333 0-17.066667-4.266667-23.466666-10.666667l-89.6-93.866666V128c0 17.066667-14.933333 32-32 32H170.666667c-6.4 0-10.666667 4.266667-10.666667 10.666667V682.666667c0 6.4 4.266667 10.666667 10.666667 10.666666h682.666666c6.4 0 10.666667-4.266667 10.666667-10.666666v-512zM512 405.333333H298.666667c-17.066667 0-32-14.933333-32-32S281.6 341.333333 298.666667 341.333333h213.333333c17.066667 0 32 14.933333 32 32S529.066667 405.333333 512 405.333333zM672 554.666667H298.666667c-17.066667 0-32-14.933333-32-32S281.6 490.666667 298.666667 490.666667h373.333333c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="column-vertical" unicode="" d="M874.666667 778.666667H149.333333C108.8 778.666667 74.666667 744.533333 74.666667 704v-640c0-40.533333 34.133333-74.666667 74.666666-74.666667h725.333334c40.533333 0 74.666667 34.133333 74.666666 74.666667V704c0 40.533333-34.133333 74.666667-74.666666 74.666667z m-725.333334-64h725.333334c6.4 0 10.666667-4.266667 10.666666-10.666667v-288h-746.666666V704c0 6.4 4.266667 10.666667 10.666666 10.666667z m725.333334-661.333334H149.333333c-6.4 0-10.666667 4.266667-10.666666 10.666667V352h746.666666V64c0-6.4-4.266667-10.666667-10.666666-10.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="column-horizontal" unicode="" d="M874.666667 778.666667H149.333333C108.8 778.666667 74.666667 744.533333 74.666667 704v-640c0-40.533333 34.133333-74.666667 74.666666-74.666667h725.333334c40.533333 0 74.666667 34.133333 74.666666 74.666667V704c0 40.533333-34.133333 74.666667-74.666666 74.666667zM138.666667 64V704c0 6.4 4.266667 10.666667 10.666666 10.666667h330.666667v-661.333334H149.333333c-6.4 0-10.666667 4.266667-10.666666 10.666667z m746.666666 0c0-6.4-4.266667-10.666667-10.666666-10.666667H544v661.333334H874.666667c6.4 0 10.666667-4.266667 10.666666-10.666667v-640z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="complete" unicode="" d="M874.666667 394.666667c-17.066667 0-32-14.933333-32-32v-298.666667c0-6.4-4.266667-10.666667-10.666667-10.666667H192c-6.4 0-10.666667 4.266667-10.666667 10.666667V704c0 6.4 4.266667 10.666667 10.666667 10.666667h469.333333c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32H192C151.466667 778.666667 117.333333 744.533333 117.333333 704v-640c0-40.533333 34.133333-74.666667 74.666667-74.666667h640c40.533333 0 74.666667 34.133333 74.666667 74.666667V362.666667c0 17.066667-14.933333 32-32 32zM940.8 727.466667c-12.8 12.8-32 12.8-44.8 0l-390.4-384-106.666667 106.666666c-12.8 12.8-32 12.8-44.8 0-12.8-12.8-12.8-32 0-44.8l130.133334-128c6.4-6.4 14.933333-8.533333 23.466666-8.533333s17.066667 2.133333 23.466667 8.533333l411.733333 405.333334c8.533333 10.666667 10.666667 32-2.133333 44.8z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="chart-pie" unicode="" d="M887.466667 253.866667c-17.066667 6.4-34.133333 0-42.666667-17.066667-64-151.466667-221.866667-243.2-386.133333-221.866667-164.266667 21.333333-294.4 149.333333-315.733334 313.6C119.466667 490.666667 209.066667 650.666667 358.4 716.8c17.066667 6.4 23.466667 25.6 17.066667 42.666667-6.4 17.066667-25.6 23.466667-42.666667 17.066666C155.733333 697.6 51.2 509.866667 78.933333 317.866667c27.733333-192 179.2-343.466667 371.2-369.066667 19.2-2.133333 36.266667-4.266667 55.466667-4.266667 170.666667 0 330.666667 102.4 398.933333 264.533334 6.4 17.066667-2.133333 36.266667-17.066666 44.8zM814.933333 686.933333C727.466667 774.4 612.266667 821.333333 490.666667 821.333333c-17.066667 0-32-14.933333-32-32v-426.666666c0-17.066667 14.933333-32 32-32h426.666666c17.066667 0 32 14.933333 32 32 0 121.6-46.933333 236.8-134.4 324.266666zM522.666667 394.666667V755.2c93.866667-6.4 179.2-46.933333 247.466666-115.2 66.133333-66.133333 106.666667-153.6 115.2-247.466667h-362.666666z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="cry" unicode="" d="M512 821.333333C270.933333 821.333333 74.666667 625.066667 74.666667 384S270.933333-53.333333 512-53.333333 949.333333 142.933333 949.333333 384 753.066667 821.333333 512 821.333333z m0-810.666666c-204.8 0-373.333333 168.533333-373.333333 373.333333S307.2 757.333333 512 757.333333 885.333333 588.8 885.333333 384 716.8 10.666667 512 10.666667zM512 298.666667c-81.066667 0-151.466667-36.266667-211.2-106.666667-10.666667-12.8-8.533333-34.133333 4.266667-44.8 12.8-10.666667 34.133333-8.533333 44.8 4.266667 46.933333 57.6 100.266667 85.333333 162.133333 85.333333s115.2-27.733333 162.133333-85.333333c6.4-8.533333 14.933333-10.666667 25.6-10.666667 6.4 0 14.933333 2.133333 21.333334 6.4 12.8 10.666667 14.933333 32 4.266666 44.8-61.866667 70.4-132.266667 106.666667-213.333333 106.666667zM362.666667 384c23.466667 0 42.666667 19.2 42.666666 42.666667v64c0 23.466667-19.2 42.666667-42.666666 42.666666s-42.666667-19.2-42.666667-42.666666v-64c0-23.466667 19.2-42.666667 42.666667-42.666667zM661.333333 384c23.466667 0 42.666667 19.2 42.666667 42.666667v64c0 23.466667-19.2 42.666667-42.666667 42.666666s-42.666667-19.2-42.666666-42.666666v-64c0-23.466667 19.2-42.666667 42.666666-42.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="customer-service" unicode="" d="M864 456.533333V469.333333c0 194.133333-157.866667 352-352 352S160 663.466667 160 469.333333v-12.8c-36.266667-4.266667-64-36.266667-64-72.533333v-170.666667c0-40.533333 34.133333-74.666667 74.666667-74.666666h85.333333c40.533333 0 74.666667 34.133333 74.666667 74.666666v170.666667c0 40.533333-34.133333 74.666667-74.666667 74.666667h-32V469.333333c0 157.866667 130.133333 288 288 288S800 627.2 800 469.333333v-10.666666H768c-40.533333 0-74.666667-34.133333-74.666667-74.666667v-170.666667c0-40.533333 34.133333-74.666667 74.666667-74.666666h21.333333c-17.066667-49.066667-59.733333-98.133333-179.2-106.666667-12.8 19.2-32 32-55.466666 32-36.266667 0-64-27.733333-64-64s27.733333-64 64-64c23.466667 0 44.8 12.8 55.466666 34.133333 166.4 10.666667 226.133333 91.733333 245.333334 170.666667 40.533333 2.133333 72.533333 34.133333 72.533333 74.666667v170.666666c0 36.266667-27.733333 66.133333-64 70.4z m-597.333333-72.533333v-170.666667c0-6.4-4.266667-10.666667-10.666667-10.666666H170.666667c-6.4 0-10.666667 4.266667-10.666667 10.666666v170.666667c0 6.4 4.266667 10.666667 10.666667 10.666667h85.333333c6.4 0 10.666667-4.266667 10.666667-10.666667z m597.333333-170.666667c0-6.4-4.266667-10.666667-10.666667-10.666666h-85.333333c-6.4 0-10.666667 4.266667-10.666667 10.666666v170.666667c0 6.4 4.266667 10.666667 10.666667 10.666667h85.333333c6.4 0 10.666667-4.266667 10.666667-10.666667v-170.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="direction-down" unicode="" d="M898.133333 384c-12.8 12.8-32 12.8-44.8 2.133333L544 96V746.666667c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-650.666667L170.666667 386.133333c-12.8 12.8-34.133333 10.666667-44.8-2.133333-12.8-12.8-10.666667-34.133333 2.133333-44.8l362.666667-341.333333c2.133333-2.133333 6.4-4.266667 8.533333-6.4 4.266667-2.133333 6.4-2.133333 10.666667-2.133334s8.533333 0 10.666666 2.133334c4.266667 2.133333 6.4 4.266667 8.533334 6.4l362.666666 341.333333c17.066667 12.8 19.2 32 6.4 44.8z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="copy" unicode="" d="M853.333333 672h-53.333333V725.333333c0 40.533333-34.133333 74.666667-74.666667 74.666667H170.666667C130.133333 800 96 765.866667 96 725.333333v-554.666666c0-40.533333 34.133333-74.666667 74.666667-74.666667h53.333333V42.666667c0-40.533333 34.133333-74.666667 74.666667-74.666667h554.666666c40.533333 0 74.666667 34.133333 74.666667 74.666667V597.333333c0 40.533333-34.133333 74.666667-74.666667 74.666667zM160 170.666667V725.333333c0 6.4 4.266667 10.666667 10.666667 10.666667h554.666666c6.4 0 10.666667-4.266667 10.666667-10.666667v-554.666666c0-6.4-4.266667-10.666667-10.666667-10.666667H170.666667c-6.4 0-10.666667 4.266667-10.666667 10.666667z m704-128c0-6.4-4.266667-10.666667-10.666667-10.666667H298.666667c-6.4 0-10.666667 4.266667-10.666667 10.666667v53.333333H725.333333c40.533333 0 74.666667 34.133333 74.666667 74.666667V608H853.333333c6.4 0 10.666667-4.266667 10.666667-10.666667v-554.666666zM576 480h-96V576c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-96H320c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h96V320c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v96H576c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="cut" unicode="" d="M917.333333 693.333333h-96V789.333333c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-96H277.333333c-40.533333 0-74.666667-34.133333-74.666666-74.666666v-480H106.666667c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h96V-21.333333c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v96H746.666667c40.533333 0 74.666667 34.133333 74.666666 74.666666V629.333333H917.333333c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32zM757.333333 149.333333c0-6.4-4.266667-10.666667-10.666666-10.666666H266.666667V618.666667c0 6.4 4.266667 10.666667 10.666666 10.666666h480V149.333333z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="data-view" unicode="" d="M874.666667 32H170.666667c-6.4 0-10.666667 4.266667-10.666667 10.666667V746.666667c0 17.066667-14.933333 32-32 32S96 763.733333 96 746.666667v-704c0-40.533333 34.133333-74.666667 74.666667-74.666667h704c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32zM437.333333 426.666667v-320c0-17.066667 14.933333-32 32-32s32 14.933333 32 32V426.666667c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32zM298.666667 74.666667c17.066667 0 32 14.933333 32 32V362.666667c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-256c0-17.066667 14.933333-32 32-32zM640 330.666667c-17.066667 0-32-14.933333-32-32v-192c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v192c0 17.066667-14.933333 32-32 32zM810.666667 544c-17.066667 0-32-14.933333-32-32v-405.333333c0-17.066667 14.933333-32 32-32s32 14.933333 32 32V512c0 17.066667-14.933333 32-32 32zM322.133333 488.533333l147.2 147.2 147.2-147.2c6.4-6.4 14.933333-8.533333 23.466667-8.533333h2.133333c8.533333 0 17.066667 6.4 23.466667 12.8l170.666667 234.666667c10.666667 14.933333 6.4 34.133333-6.4 44.8-14.933333 10.666667-34.133333 6.4-44.8-6.4l-149.333334-204.8L490.666667 706.133333c-12.8 12.8-32 12.8-44.8 0l-170.666667-170.666666c-12.8-12.8-12.8-32 0-44.8 12.8-12.8 34.133333-12.8 46.933333-2.133334z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="direction-right" unicode="" d="M904.533333 373.333333c2.133333 4.266667 2.133333 6.4 2.133334 10.666667s0 8.533333-2.133334 10.666667c-2.133333 4.266667-4.266667 6.4-6.4 8.533333l-341.333333 362.666667c-12.8 12.8-32 12.8-44.8 2.133333-12.8-12.8-12.8-32-2.133333-44.8l290.133333-309.333333H149.333333c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h650.666667L509.866667 42.666667c-12.8-12.8-10.666667-34.133333 2.133333-44.8 6.4-6.4 14.933333-8.533333 21.333333-8.533334 8.533333 0 17.066667 4.266667 23.466667 10.666667l341.333333 362.666667c2.133333 2.133333 4.266667 6.4 6.4 10.666666z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="direction-up" unicode="" d="M896 428.8l-362.666667 341.333333c-2.133333 2.133333-6.4 4.266667-8.533333 6.4-4.266667 2.133333-6.4 2.133333-10.666667 2.133334s-8.533333 0-10.666666-2.133334c-4.266667-2.133333-6.4-4.266667-8.533334-6.4l-362.666666-341.333333c-12.8-12.8-12.8-32-2.133334-44.8 12.8-12.8 32-12.8 44.8-2.133333l309.333334 290.133333V21.333333c0-17.066667 14.933333-32 32-32s32 14.933333 32 32V672L853.333333 381.866667c6.4-6.4 14.933333-8.533333 21.333334-8.533334 8.533333 0 17.066667 4.266667 23.466666 10.666667 12.8 12.8 10.666667 32-2.133333 44.8z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="discount" unicode="" d="M874.666667 800H593.066667c-19.2 0-38.4-8.533333-53.333334-21.333333l-405.333333-405.333334c-29.866667-29.866667-29.866667-76.8 0-104.533333l260.266667-260.266667c14.933333-14.933333 32-21.333333 53.333333-21.333333s38.4 8.533333 53.333333 21.333333l405.333334 405.333334c14.933333 14.933333 21.333333 32 21.333333 53.333333V746.666667c0 29.866667-23.466667 53.333333-53.333333 53.333333z m-10.666667-334.933333c0-2.133333-2.133333-6.4-2.133333-8.533334l-405.333334-405.333333c-2.133333-2.133333-6.4-2.133333-8.533333-2.133333s-4.266667 0-8.533333 2.133333L181.333333 311.466667c-4.266667 4.266667-4.266667 10.666667 0 14.933333l405.333334 405.333333c2.133333 2.133333 4.266667 2.133333 8.533333 2.133334h270.933333v-268.8zM704 480c53.333333 0 96 42.666667 96 96s-42.666667 96-96 96-96-42.666667-96-96 42.666667-96 96-96z m0 128c17.066667 0 32-14.933333 32-32s-14.933333-32-32-32-32 14.933333-32 32 14.933333 32 32 32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="direction-left" unicode="" d="M874.666667 416H224L514.133333 725.333333c12.8 12.8 10.666667 34.133333-2.133333 44.8s-32 10.666667-44.8-2.133333l-341.333333-362.666667c-2.133333-2.133333-4.266667-6.4-6.4-8.533333-2.133333-4.266667-2.133333-6.4-2.133334-10.666667s0-8.533333 2.133334-10.666666c2.133333-4.266667 4.266667-6.4 6.4-8.533334l341.333333-362.666666c6.4-6.4 14.933333-10.666667 23.466667-10.666667 8.533333 0 14.933333 2.133333 21.333333 8.533333 12.8 12.8 12.8 32 2.133333 44.8L224 352H874.666667c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="download" unicode="" d="M896 224c-17.066667 0-32-14.933333-32-32v-128c0-6.4-4.266667-10.666667-10.666667-10.666667H170.666667c-6.4 0-10.666667 4.266667-10.666667 10.666667v128c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-128c0-40.533333 34.133333-74.666667 74.666667-74.666667h682.666666c40.533333 0 74.666667 34.133333 74.666667 74.666667v128c0 17.066667-14.933333 32-32 32zM488.533333 168.533333c6.4-6.4 14.933333-8.533333 23.466667-8.533333s17.066667 2.133333 23.466667 8.533333l213.333333 213.333334c12.8 12.8 12.8 32 0 44.8-12.8 12.8-32 12.8-44.8 0l-157.866667-157.866667V725.333333c0 17.066667-14.933333 32-32 32s-34.133333-14.933333-34.133333-32v-456.533333L322.133333 426.666667c-12.8 12.8-32 12.8-44.8 0-12.8-12.8-12.8-32 0-44.8l211.2-213.333334z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="electronics" unicode="" d="M840.533333 778.666667H183.466667c-59.733333 0-108.8-49.066667-108.8-108.8v-379.733334c0-59.733333 49.066667-108.8 108.8-108.8h232.533333v-115.2H341.333333c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h341.333334c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32h-74.666667v115.2h232.533333c59.733333 0 108.8 49.066667 108.8 108.8V669.866667c0 59.733333-49.066667 108.8-108.8 108.8zM544 66.133333h-64v115.2h64v-115.2z m341.333333 224c0-25.6-19.2-44.8-44.8-44.8H183.466667c-25.6 0-44.8 19.2-44.8 44.8V669.866667c0 25.6 19.2 44.8 44.8 44.8h657.066666c25.6 0 44.8-19.2 44.8-44.8v-379.733334z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="drag" unicode="" d="M362.666667 704m-64 0a64 64 0 1 1 128 0 64 64 0 1 1-128 0ZM661.333333 704m-64 0a64 64 0 1 1 128 0 64 64 0 1 1-128 0ZM362.666667 384m-64 0a64 64 0 1 1 128 0 64 64 0 1 1-128 0ZM661.333333 384m-64 0a64 64 0 1 1 128 0 64 64 0 1 1-128 0ZM362.666667 64m-64 0a64 64 0 1 1 128 0 64 64 0 1 1-128 0ZM661.333333 64m-64 0a64 64 0 1 1 128 0 64 64 0 1 1-128 0Z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="elipsis" unicode="" d="M192 384m-64 0a64 64 0 1 1 128 0 64 64 0 1 1-128 0ZM512 384m-64 0a64 64 0 1 1 128 0 64 64 0 1 1-128 0ZM832 384m-64 0a64 64 0 1 1 128 0 64 64 0 1 1-128 0Z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="export" unicode="" d="M582.4 32H170.666667c-6.4 0-10.666667 4.266667-10.666667 10.666667V725.333333c0 6.4 4.266667 10.666667 10.666667 10.666667h309.333333V576c0-40.533333 34.133333-74.666667 74.666667-74.666667h160v-38.4c0-17.066667 14.933333-32 32-32s32 14.933333 32 32V597.333333c0 8.533333-4.266667 17.066667-8.533334 23.466667l-170.666666 170.666667c-6.4 6.4-14.933333 8.533333-23.466667 8.533333H170.666667C130.133333 800 96 765.866667 96 725.333333v-682.666666c0-40.533333 34.133333-74.666667 74.666667-74.666667h411.733333c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32z m132.266667 550.4v-17.066667H554.666667c-6.4 0-10.666667 4.266667-10.666667 10.666667V736h19.2l151.466667-153.6zM866.133333 226.133333l-106.666666 106.666667c-12.8 12.8-32 12.8-44.8 0s-12.8-32 0-44.8l51.2-51.2H512c-17.066667 0-32-14.933333-32-32S494.933333 170.666667 512 170.666667h253.866667l-51.2-51.2c-12.8-12.8-12.8-32 0-44.8 6.4-6.4 14.933333-8.533333 23.466666-8.533334s17.066667 2.133333 23.466667 8.533334l106.666667 106.666666c8.533333 10.666667 8.533333 32-2.133334 44.8z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="explain" unicode="" d="M789.333333 821.333333H234.666667C194.133333 821.333333 160 787.2 160 746.666667v-725.333334c0-40.533333 34.133333-74.666667 74.666667-74.666666h554.666666c40.533333 0 74.666667 34.133333 74.666667 74.666666V746.666667c0 40.533333-34.133333 74.666667-74.666667 74.666666z m-138.666666-64v-296.533333L576 531.2c-6.4 6.4-14.933333 8.533333-21.333333 8.533333-8.533333 0-17.066667-2.133333-21.333334-8.533333l-74.666666-72.533333v298.666666h192z m149.333333-736c0-6.4-4.266667-10.666667-10.666667-10.666666H234.666667c-6.4 0-10.666667 4.266667-10.666667 10.666666V746.666667c0 6.4 4.266667 10.666667 10.666667 10.666666h160v-322.133333c0-14.933333 6.4-27.733333 14.933333-36.266667 21.333333-21.333333 53.333333-21.333333 74.666667 0l70.4 68.266667 70.4-68.266667c10.666667-10.666667 23.466667-14.933333 36.266666-14.933333 29.866667 0 53.333333 23.466667 53.333334 53.333333v320H789.333333c6.4 0 10.666667-4.266667 10.666667-10.666666v-725.333334z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="edit" unicode="" d="M853.333333 394.666667c-17.066667 0-32-14.933333-32-32v-320c0-6.4-4.266667-10.666667-10.666666-10.666667H170.666667c-6.4 0-10.666667 4.266667-10.666667 10.666667V682.666667c0 6.4 4.266667 10.666667 10.666667 10.666666h320c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32H170.666667c-40.533333 0-74.666667-34.133333-74.666667-74.666666v-640c0-40.533333 34.133333-74.666667 74.666667-74.666667h640c40.533333 0 74.666667 34.133333 74.666666 74.666667V362.666667c0 17.066667-14.933333 32-32 32zM405.333333 411.733333l-32-125.866666c-2.133333-10.666667 0-23.466667 8.533334-29.866667 6.4-6.4 14.933333-8.533333 23.466666-8.533333h8.533334l125.866666 32c6.4 2.133333 10.666667 4.266667 14.933334 8.533333l300.8 300.8c38.4 38.4 38.4 102.4 0 140.8-38.4 38.4-102.4 38.4-140.8 0L413.866667 426.666667c-4.266667-4.266667-6.4-8.533333-8.533334-14.933334z m59.733334-23.466666L761.6 682.666667c12.8 12.8 36.266667 12.8 49.066667 0 12.8-12.8 12.8-36.266667 0-49.066667L516.266667 337.066667l-66.133334-17.066667 14.933334 68.266667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="eye-close" unicode="" d="M955.733333 403.2c-6.4 12.8-162.133333 317.866667-443.733333 317.866667-23.466667 0-46.933333-2.133333-70.4-6.4-17.066667-4.266667-29.866667-19.2-25.6-36.266667 4.266667-17.066667 19.2-29.866667 36.266667-25.6 19.2 4.266667 38.4 4.266667 57.6 4.266667 209.066667 0 345.6-209.066667 379.733333-266.666667-10.666667-19.2-32-53.333333-64-91.733333-10.666667-12.8-8.533333-34.133333 4.266667-44.8 6.4-4.266667 12.8-6.4 21.333333-6.4s19.2 4.266667 25.6 10.666666c51.2 61.866667 78.933333 115.2 78.933333 117.333334 6.4 8.533333 6.4 19.2 0 27.733333zM215.466667 770.133333c-12.8 12.8-32 12.8-44.8 0-12.8-12.8-12.8-32 0-44.8l91.733333-91.733333C138.666667 541.866667 72.533333 411.733333 68.266667 405.333333c-4.266667-8.533333-4.266667-19.2 0-29.866666 6.4-12.8 162.133333-315.733333 443.733333-315.733334 83.2 0 164.266667 27.733333 241.066667 81.066667l96-96c6.4-6.4 14.933333-8.533333 23.466666-8.533333s17.066667 2.133333 23.466667 8.533333c12.8 12.8 12.8 32 0 44.8L215.466667 770.133333z m243.2-334.933333l104.533333-104.533333c-12.8-12.8-32-21.333333-51.2-21.333334-40.533333 0-74.666667 34.133333-74.666667 74.666667 0 19.2 8.533333 38.4 21.333334 51.2zM512 123.733333c-209.066667 0-345.6 209.066667-379.733333 266.666667 21.333333 36.266667 81.066667 130.133333 174.933333 196.266667l104.533333-104.533334c-25.6-25.6-38.4-59.733333-38.4-96 0-76.8 61.866667-138.666667 138.666667-138.666666 36.266667 0 70.4 14.933333 96 38.4l98.133333-98.133334c-61.866667-42.666667-128-64-194.133333-64z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="email" unicode="" d="M874.666667 714.666667H149.333333c-40.533333 0-74.666667-34.133333-74.666666-74.666667v-512c0-40.533333 34.133333-74.666667 74.666666-74.666667h725.333334c40.533333 0 74.666667 34.133333 74.666666 74.666667V640c0 40.533333-34.133333 74.666667-74.666666 74.666667z m-725.333334-64h725.333334c6.4 0 10.666667-4.266667 10.666666-10.666667v-25.6L512 379.733333l-373.333333 234.666667V640c0 6.4 4.266667 10.666667 10.666666 10.666667z m725.333334-533.333334H149.333333c-6.4 0-10.666667 4.266667-10.666666 10.666667V539.733333l356.266666-224c4.266667-4.266667 10.666667-4.266667 17.066667-4.266666s12.8 2.133333 17.066667 4.266666l356.266666 224V128c0-6.4-4.266667-10.666667-10.666666-10.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="favorite" unicode="" d="M934.4 539.733333c-8.533333 10.666667-21.333333 19.2-34.133333 21.333334l-234.666667 34.133333-104.533333 213.333333c-6.4 8.533333-14.933333 17.066667-25.6 23.466667-12.8 6.4-27.733333 6.4-40.533334 2.133333-12.8-4.266667-23.466667-14.933333-29.866666-27.733333l-104.533334-213.333333-234.666666-34.133334c-10.666667-2.133333-21.333333-6.4-29.866667-14.933333-21.333333-21.333333-19.2-55.466667 0-74.666667l170.666667-166.4-40.533334-234.666666c-2.133333-10.666667 0-23.466667 6.4-34.133334 12.8-25.6 46.933333-36.266667 72.533334-21.333333l211.2 110.933333 211.2-110.933333c8.533333-4.266667 17.066667-6.4 25.6-6.4h8.533333c14.933333 2.133333 25.6 10.666667 34.133333 21.333333 8.533333 10.666667 10.666667 25.6 8.533334 40.533334l-40.533334 234.666666 170.666667 166.4c8.533333 8.533333 14.933333 19.2 14.933333 29.866667-2.133333 14.933333-6.4 27.733333-14.933333 40.533333z m-224-194.133333c-12.8-12.8-19.2-29.866667-14.933333-46.933333l38.4-217.6L512 196.266667l-221.866667-115.2L328.533333 298.666667c2.133333 17.066667-2.133333 34.133333-14.933333 46.933333l-157.866667 153.6 219.733334 32c17.066667 2.133333 32 12.8 40.533333 29.866667L512 759.466667l98.133333-198.4c8.533333-14.933333 23.466667-27.733333 40.533334-29.866667l219.733333-32-160-153.6z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="file-common" unicode="" d="M832 821.333333H192c-17.066667 0-32-14.933333-32-32v-765.866666c0-12.8 4.266667-23.466667 12.8-34.133334 8.533333-10.666667 21.333333-17.066667 36.266667-19.2h6.4c12.8 0 23.466667 4.266667 34.133333 12.8l264.533333 213.333334 264.533334-213.333334c8.533333-8.533333 21.333333-12.8 34.133333-12.8 29.866667 0 53.333333 23.466667 53.333333 53.333334V789.333333c-2.133333 17.066667-17.066667 32-34.133333 32z m-32-776.533333L531.2 262.4c-10.666667 8.533333-27.733333 8.533333-40.533333 0L224 44.8V757.333333h576v-712.533333zM341.333333 554.666667h320c17.066667 0 32 14.933333 32 32S678.4 618.666667 661.333333 618.666667H341.333333c-17.066667 0-32-14.933333-32-32S324.266667 554.666667 341.333333 554.666667zM341.333333 384h213.333334c17.066667 0 32 14.933333 32 32S571.733333 448 554.666667 448H341.333333c-17.066667 0-32-14.933333-32-32S324.266667 384 341.333333 384z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="file-delete" unicode="" d="M842.666667 610.133333l-187.733334 187.733334c-14.933333 14.933333-32 21.333333-53.333333 21.333333H234.666667C194.133333 821.333333 160 787.2 160 746.666667v-725.333334c0-40.533333 34.133333-74.666667 74.666667-74.666666h554.666666c40.533333 0 74.666667 34.133333 74.666667 74.666666V558.933333c0 19.2-8.533333 38.4-21.333333 51.2z m-44.8-44.8c-2.133333-2.133333-4.266667 0-8.533334 0h-170.666666c-6.4 0-10.666667 4.266667-10.666667 10.666667V746.666667c0 2.133333 0 6.4-2.133333 8.533333 0 0 2.133333 0 2.133333-2.133333l189.866667-187.733334z m-8.533334-554.666666H234.666667c-6.4 0-10.666667 4.266667-10.666667 10.666666V746.666667c0 6.4 4.266667 10.666667 10.666667 10.666666h311.466666c-2.133333-4.266667-2.133333-6.4-2.133333-10.666666v-170.666667c0-40.533333 34.133333-74.666667 74.666667-74.666667h170.666666c4.266667 0 6.4 0 10.666667 2.133334V21.333333c0-6.4-4.266667-10.666667-10.666667-10.666666zM640 309.333333H384c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h256c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="file-add" unicode="" d="M842.666667 610.133333l-187.733334 187.733334c-14.933333 14.933333-32 21.333333-53.333333 21.333333H234.666667C194.133333 821.333333 160 787.2 160 746.666667v-725.333334c0-40.533333 34.133333-74.666667 74.666667-74.666666h554.666666c40.533333 0 74.666667 34.133333 74.666667 74.666666V558.933333c0 19.2-8.533333 38.4-21.333333 51.2z m-44.8-44.8H618.666667c-6.4 0-10.666667 4.266667-10.666667 10.666667V755.2l189.866667-189.866667z m-8.533334-554.666666H234.666667c-6.4 0-10.666667 4.266667-10.666667 10.666666V746.666667c0 6.4 4.266667 10.666667 10.666667 10.666666h309.333333V576c0-40.533333 34.133333-74.666667 74.666667-74.666667h181.333333V21.333333c0-6.4-4.266667-10.666667-10.666667-10.666666zM618.666667 309.333333h-74.666667V384c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-74.666667H405.333333c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h74.666667V170.666667c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v74.666666H618.666667c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="fabulous" unicode="" d="M859.733333 642.133333c-44.8 44.8-102.4 70.4-166.4 70.4-61.866667 0-121.6-25.6-166.4-70.4l-14.933333-17.066666-17.066667 17.066666c-44.8 44.8-102.4 70.4-166.4 70.4-61.866667 0-121.6-25.6-166.4-70.4-91.733333-91.733333-91.733333-243.2 0-337.066666l324.266667-330.666667c6.4-6.4 14.933333-8.533333 23.466667-8.533333s17.066667 4.266667 23.466666 8.533333l324.266667 330.666667c44.8 44.8 68.266667 104.533333 68.266667 168.533333s-21.333333 123.733333-66.133334 168.533333z m-44.8-290.133333L512 42.666667 209.066667 352c-66.133333 68.266667-66.133333 179.2 0 247.466667 32 32 74.666667 51.2 119.466666 51.2 44.8 0 87.466667-17.066667 119.466667-51.2l38.4-40.533334c12.8-12.8 34.133333-12.8 44.8 0l38.4 40.533334c32 32 74.666667 51.2 119.466667 51.2 44.8 0 87.466667-17.066667 119.466666-51.2 32-32 49.066667-76.8 49.066667-123.733334s-12.8-91.733333-42.666667-123.733333z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="file" unicode="" d="M842.666667 610.133333l-187.733334 187.733334c-14.933333 14.933333-32 21.333333-53.333333 21.333333H234.666667C194.133333 821.333333 160 787.2 160 746.666667v-725.333334c0-40.533333 34.133333-74.666667 74.666667-74.666666h554.666666c40.533333 0 74.666667 34.133333 74.666667 74.666666V558.933333c0 19.2-8.533333 38.4-21.333333 51.2z m-44.8-44.8c-2.133333-2.133333-4.266667 0-8.533334 0h-170.666666c-6.4 0-10.666667 4.266667-10.666667 10.666667V746.666667c0 2.133333 0 6.4-2.133333 8.533333 0 0 2.133333 0 2.133333-2.133333l189.866667-187.733334z m-8.533334-554.666666H234.666667c-6.4 0-10.666667 4.266667-10.666667 10.666666V746.666667c0 6.4 4.266667 10.666667 10.666667 10.666666h311.466666c-2.133333-4.266667-2.133333-6.4-2.133333-10.666666v-170.666667c0-40.533333 34.133333-74.666667 74.666667-74.666667h170.666666c4.266667 0 6.4 0 10.666667 2.133334V21.333333c0-6.4-4.266667-10.666667-10.666667-10.666666zM640 202.666667H341.333333c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h298.666667c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32zM640 373.333333H341.333333c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h298.666667c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32zM341.333333 480h85.333334c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32h-85.333334c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="folder-close" unicode="" d="M853.333333 629.333333H514.133333c-4.266667 0-6.4 2.133333-8.533333 4.266667l-38.4 66.133333c-12.8 21.333333-38.4 36.266667-64 36.266667H170.666667c-40.533333 0-74.666667-34.133333-74.666667-74.666667v-554.666666c0-40.533333 34.133333-74.666667 74.666667-74.666667h682.666666c40.533333 0 74.666667 34.133333 74.666667 74.666667V554.666667c0 40.533333-34.133333 74.666667-74.666667 74.666666z m-682.666666 42.666667h232.533333c4.266667 0 6.4-2.133333 8.533333-4.266667l38.4-66.133333c12.8-21.333333 38.4-36.266667 64-36.266667H853.333333c6.4 0 10.666667-4.266667 10.666667-10.666666v-74.666667h-704V661.333333c0 6.4 4.266667 10.666667 10.666667 10.666667z m682.666666-576H170.666667c-6.4 0-10.666667 4.266667-10.666667 10.666667V416h704V106.666667c0-6.4-4.266667-10.666667-10.666667-10.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="good" unicode="" d="M881.066667 501.333333c-21.333333 23.466667-51.2 36.266667-81.066667 36.266667H618.666667v117.333333c0 44.8-29.866667 85.333333-87.466667 117.333334-17.066667 10.666667-38.4 12.8-57.6 8.533333-19.2-4.266667-36.266667-17.066667-46.933333-34.133333-2.133333-2.133333-2.133333-4.266667-4.266667-6.4l-125.866667-281.6H204.8c-59.733333 0-108.8-46.933333-108.8-106.666667v-258.133333c0-57.6 49.066667-106.666667 108.8-106.666667h544c53.333333 0 98.133333 38.4 106.666667 89.6l51.2 337.066667c4.266667 34.133333-6.4 64-25.6 87.466666z m-593.066667-448H204.8c-25.6 0-44.8 19.2-44.8 42.666667v256c0 23.466667 19.2 42.666667 44.8 42.666667h83.2v-341.333334z m554.666667 373.333334L789.333333 89.6c-4.266667-21.333333-21.333333-36.266667-42.666666-36.266667H352V424.533333l130.133333 290.133334c2.133333 4.266667 4.266667 4.266667 6.4 4.266666 2.133333 0 4.266667 0 8.533334-2.133333 25.6-14.933333 55.466667-38.4 55.466666-64v-149.333333c0-17.066667 14.933333-32 32-32h213.333334c12.8 0 25.6-4.266667 34.133333-14.933334 8.533333-6.4 12.8-19.2 10.666667-29.866666z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="hide" unicode="" d="M917.333333 322.133333l-87.466666 87.466667c34.133333 32 66.133333 68.266667 91.733333 108.8 8.533333 14.933333 4.266667 34.133333-10.666667 44.8-14.933333 8.533333-34.133333 4.266667-44.8-10.666667-76.8-125.866667-209.066667-200.533333-356.266666-200.533333-145.066667 0-279.466667 74.666667-354.133334 198.4-8.533333 14.933333-29.866667 19.2-44.8 10.666667-14.933333-8.533333-19.2-29.866667-10.666666-44.8 25.6-40.533333 55.466667-76.8 91.733333-108.8l-85.333333-85.333334c-12.8-12.8-12.8-32 0-44.8 6.4-6.4 14.933333-8.533333 23.466666-8.533333s17.066667 2.133333 23.466667 8.533333l91.733333 91.733334c38.4-25.6 81.066667-46.933333 125.866667-59.733334l-34.133333-130.133333c-4.266667-17.066667 6.4-34.133333 23.466666-38.4 2.133333 0 6.4-2.133333 8.533334-2.133333 14.933333 0 27.733333 8.533333 29.866666 23.466666l36.266667 132.266667c25.6-4.266667 51.2-6.4 78.933333-6.4 27.733333 0 55.466667 2.133333 83.2 6.4l36.266667-132.266667c4.266667-14.933333 17.066667-23.466667 29.866667-23.466666 2.133333 0 6.4 0 8.533333 2.133333 17.066667 4.266667 27.733333 21.333333 23.466667 38.4L661.333333 311.466667c44.8 12.8 85.333333 34.133333 123.733334 59.733333l91.733333-91.733333c6.4-6.4 14.933333-8.533333 23.466667-8.533334s17.066667 2.133333 23.466666 8.533334c6.4 10.666667 6.4 29.866667-6.4 42.666666z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="file-open" unicode="" d="M921.6 445.866667c-6.4 8.533333-14.933333 12.8-25.6 12.8h-10.666667V554.666667c0 40.533333-34.133333 74.666667-74.666666 74.666666H514.133333c-4.266667 0-6.4 2.133333-8.533333 4.266667l-38.4 66.133333c-12.8 21.333333-38.4 36.266667-64 36.266667H170.666667c-40.533333 0-74.666667-34.133333-74.666667-74.666667v-597.333333c0-6.4 2.133333-12.8 6.4-19.2 6.4-8.533333 14.933333-12.8 25.6-12.8h640c12.8 0 25.6 8.533333 29.866667 21.333333l128 362.666667c4.266667 10.666667 2.133333 21.333333-4.266667 29.866667zM170.666667 672h232.533333c4.266667 0 6.4-2.133333 8.533333-4.266667l38.4-66.133333c12.8-21.333333 38.4-36.266667 64-36.266667H810.666667c6.4 0 10.666667-4.266667 10.666666-10.666666v-96H256c-12.8 0-25.6-8.533333-29.866667-21.333334l-66.133333-185.6V661.333333c0 6.4 4.266667 10.666667 10.666667 10.666667z m573.866666-576H172.8l104.533333 298.666667h571.733334l-104.533334-298.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="forward" unicode="" d="M853.333333 138.666667H170.666667c-6.4 0-10.666667 4.266667-10.666667 10.666666V576c0 6.4 4.266667 10.666667 10.666667 10.666667h599.466666l-83.2-83.2c-12.8-12.8-12.8-34.133333 0-46.933334 6.4-6.4 14.933333-10.666667 23.466667-10.666666s17.066667 4.266667 23.466667 10.666666l145.066666 145.066667c12.8 12.8 12.8 34.133333 0 46.933333l-145.066666 145.066667c-12.8 12.8-34.133333 12.8-46.933334 0-12.8-12.8-12.8-34.133333 0-46.933333l93.866667-93.866667H170.666667c-40.533333 0-74.666667-34.133333-74.666667-74.666667v-426.666666c0-40.533333 34.133333-74.666667 74.666667-74.666667h682.666666c17.066667 0 32 14.933333 32 32s-14.933333 29.866667-32 29.866667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="import" unicode="" d="M667.733333 32H170.666667c-6.4 0-10.666667 4.266667-10.666667 10.666667V725.333333c0 6.4 4.266667 10.666667 10.666667 10.666667h309.333333V576c0-40.533333 34.133333-74.666667 74.666667-74.666667h160v-38.4c0-17.066667 14.933333-32 32-32s32 14.933333 32 32V597.333333c0 8.533333-4.266667 17.066667-8.533334 23.466667l-170.666666 170.666667c-6.4 6.4-14.933333 8.533333-23.466667 8.533333H170.666667C130.133333 800 96 765.866667 96 725.333333v-682.666666c0-40.533333 34.133333-74.666667 74.666667-74.666667h497.066666c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32z m46.933334 550.4v-17.066667H554.666667c-6.4 0-10.666667 4.266667-10.666667 10.666667V736h19.2l151.466667-153.6zM853.333333 298.666667H599.466667l51.2 51.2c12.8 12.8 12.8 32 0 44.8-12.8 12.8-32 12.8-44.8 0l-106.666667-106.666667c-12.8-12.8-12.8-32 0-44.8l106.666667-106.666667c6.4-6.4 14.933333-8.533333 23.466666-8.533333s17.066667 2.133333 23.466667 8.533333c12.8 12.8 12.8 32 0 44.8L599.466667 234.666667H853.333333c17.066667 0 32 14.933333 32 32S870.4 298.666667 853.333333 298.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="link" unicode="" d="M861.866667 731.733333c-87.466667 87.466667-230.4 89.6-320 2.133334l-68.266667-68.266667c-12.8-12.8-12.8-32 0-44.8s32-12.8 44.8 0l68.266667 68.266667c64 61.866667 166.4 61.866667 230.4-2.133334 64-64 64-168.533333 2.133333-232.533333l-117.333333-119.466667c-34.133333-34.133333-81.066667-51.2-128-49.066666-46.933333 4.266667-91.733333 27.733333-119.466667 66.133333-10.666667 14.933333-29.866667 17.066667-44.8 6.4-14.933333-10.666667-17.066667-29.866667-6.4-44.8 40.533333-53.333333 100.266667-87.466667 166.4-91.733333h17.066667c59.733333 0 119.466667 23.466667 162.133333 68.266666l117.333333 119.466667c83.2 89.6 83.2 234.666667-4.266666 322.133333zM505.6 145.066667l-66.133333-68.266667c-64-61.866667-166.4-61.866667-230.4 2.133333-64 64-64 168.533333-2.133334 232.533334l117.333334 119.466666c34.133333 34.133333 81.066667 51.2 128 49.066667 46.933333-4.266667 91.733333-27.733333 119.466666-66.133333 10.666667-14.933333 29.866667-17.066667 44.8-6.4 14.933333 10.666667 17.066667 29.866667 6.4 44.8-40.533333 53.333333-100.266667 87.466667-166.4 91.733333-66.133333 4.266667-130.133333-19.2-177.066666-66.133333l-117.333334-119.466667c-85.333333-89.6-85.333333-234.666667 2.133334-322.133333 44.8-44.8 102.4-66.133333 162.133333-66.133334 57.6 0 115.2 21.333333 160 64l66.133333 68.266667c12.8 12.8 12.8 32 0 44.8-14.933333 10.666667-34.133333 10.666667-46.933333-2.133333z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="layout" unicode="" d="M853.333333 800H170.666667C130.133333 800 96 765.866667 96 725.333333v-682.666666c0-40.533333 34.133333-74.666667 74.666667-74.666667h682.666666c40.533333 0 74.666667 34.133333 74.666667 74.666667V725.333333c0 40.533333-34.133333 74.666667-74.666667 74.666667z m-682.666666-64h682.666666c6.4 0 10.666667-4.266667 10.666667-10.666667v-213.333333h-704V725.333333c0 6.4 4.266667 10.666667 10.666667 10.666667zM160 42.666667V448H341.333333v-416H170.666667c-6.4 0-10.666667 4.266667-10.666667 10.666667z m693.333333-10.666667H405.333333V448h458.666667v-405.333333c0-6.4-4.266667-10.666667-10.666667-10.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="fullscreen-shrink" unicode="" d="M313.6 537.6H177.066667c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h213.333333c4.266667 0 8.533333 0 10.666667 2.133333 8.533333 4.266667 14.933333 8.533333 17.066666 17.066667 2.133333 4.266667 2.133333 8.533333 2.133334 10.666667v213.333333c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-136.533333L172.8 770.133333c-12.8 12.8-32 12.8-44.8 0-12.8-12.8-12.8-32 0-44.8l185.6-187.733333zM695.466667 245.333333H832c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32H618.666667c-4.266667 0-8.533333 0-10.666667-2.133333-8.533333-4.266667-14.933333-8.533333-17.066667-17.066667-2.133333-4.266667-2.133333-8.533333-2.133333-10.666666v-213.333334c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v136.533334l200.533333-200.533334c6.4-6.4 14.933333-8.533333 23.466667-8.533333s17.066667 2.133333 23.466667 8.533333c12.8 12.8 12.8 32 0 44.8l-204.8 198.4zM435.2 290.133333c-4.266667 8.533333-8.533333 14.933333-17.066667 17.066667-4.266667 2.133333-8.533333 2.133333-10.666666 2.133333H192c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h136.533333L128 44.8c-12.8-12.8-12.8-32 0-44.8 6.4-6.4 14.933333-8.533333 23.466667-8.533333s17.066667 2.133333 23.466666 8.533333l200.533334 200.533333V64c0-17.066667 14.933333-32 32-32s32 14.933333 32 32V277.333333c-2.133333 4.266667-2.133333 8.533333-4.266667 12.8zM603.733333 492.8c4.266667-8.533333 8.533333-14.933333 17.066667-17.066667 4.266667-2.133333 8.533333-2.133333 10.666667-2.133333h213.333333c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32h-136.533333L896 725.333333c12.8 12.8 12.8 32 0 44.8-12.8 12.8-32 12.8-44.8 0l-187.733333-187.733333V718.933333c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-213.333333c2.133333-4.266667 2.133333-8.533333 4.266666-12.8z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="layers" unicode="" d="M110.933333 544l384-192c4.266667-2.133333 10.666667-4.266667 17.066667-4.266667s10.666667 2.133333 17.066667 4.266667l384 192c12.8 6.4 19.2 19.2 19.2 32s-8.533333 25.6-19.2 32l-384 192c-10.666667 4.266667-21.333333 4.266667-32 0l-384-192c-12.8-6.4-19.2-19.2-19.2-32s6.4-25.6 17.066666-32zM512 727.466667L814.933333 576 512 424.533333 209.066667 576 512 727.466667zM878.933333 224L512 40.533333 145.066667 224c-17.066667 8.533333-38.4 2.133333-49.066667-17.066667-8.533333-17.066667-2.133333-38.4 17.066667-49.066666l384-192c4.266667-2.133333 10.666667-4.266667 17.066666-4.266667s10.666667 2.133333 17.066667 4.266667l384 192c17.066667 8.533333 25.6 29.866667 17.066667 49.066666-12.8 19.2-34.133333 25.6-53.333334 17.066667zM878.933333 416L512 232.533333 145.066667 416c-17.066667 8.533333-38.4 2.133333-49.066667-17.066667-8.533333-17.066667-2.133333-38.4 17.066667-49.066666l384-192c4.266667-2.133333 10.666667-4.266667 17.066666-4.266667s10.666667 2.133333 17.066667 4.266667l384 192c17.066667 8.533333 25.6 29.866667 17.066667 49.066666-12.8 19.2-34.133333 25.6-53.333334 17.066667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="lock" unicode="" d="M785.066667 480h-61.866667v121.6c0 108.8-91.733333 198.4-202.666667 198.4s-202.666667-89.6-202.666666-198.4v-121.6h-78.933334c-55.466667 0-100.266667-44.8-100.266666-100.266667v-311.466666c0-55.466667 44.8-100.266667 100.266666-100.266667h546.133334c55.466667 0 100.266667 44.8 100.266666 100.266667V379.733333c0 55.466667-44.8 100.266667-100.266666 100.266667z m-403.2 121.6c0 74.666667 61.866667 134.4 138.666666 134.4s138.666667-59.733333 138.666667-134.4v-121.6h-277.333333v121.6z m439.466666-533.333333c0-19.2-17.066667-36.266667-36.266666-36.266667H238.933333c-19.2 0-36.266667 17.066667-36.266666 36.266667V379.733333c0 19.2 17.066667 36.266667 36.266666 36.266667h546.133334c19.2 0 36.266667-17.066667 36.266666-36.266667v-311.466666zM512 352c-17.066667 0-32-14.933333-32-32v-106.666667c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v106.666667c0 17.066667-14.933333 32-32 32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="fullscreen-expand" unicode="" d="M149.333333 501.333333c17.066667 0 32 14.933333 32 32v136.533334l187.733334-187.733334c6.4-6.4 14.933333-8.533333 23.466666-8.533333s17.066667 2.133333 23.466667 8.533333c12.8 12.8 12.8 32 0 44.8l-187.733333 187.733334H362.666667c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32H149.333333c-4.266667 0-8.533333 0-10.666666-2.133334-8.533333-4.266667-14.933333-10.666667-19.2-17.066666-2.133333-4.266667-2.133333-8.533333-2.133334-12.8v-213.333334c0-17.066667 14.933333-32 32-32zM874.666667 266.666667c-17.066667 0-32-14.933333-32-32v-136.533334L642.133333 298.666667c-12.8 12.8-32 12.8-44.8 0s-12.8-32 0-44.8l200.533334-200.533334H661.333333c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h213.333334c4.266667 0 8.533333 0 10.666666 2.133334 8.533333 4.266667 14.933333 8.533333 17.066667 17.066666 2.133333 4.266667 2.133333 8.533333 2.133333 10.666667V234.666667c2.133333 17.066667-12.8 32-29.866666 32zM381.866667 300.8l-200.533334-200.533333V234.666667c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-213.333334c0-4.266667 0-8.533333 2.133334-10.666666 4.266667-8.533333 8.533333-14.933333 17.066666-17.066667 4.266667-2.133333 8.533333-2.133333 10.666667-2.133333h213.333333c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32h-136.533333l200.533333 200.533333c12.8 12.8 12.8 32 0 44.8s-29.866667 10.666667-42.666666 0zM904.533333 757.333333c0 2.133333 0 2.133333 0 0-4.266667 8.533333-10.666667 14.933333-17.066666 17.066667-4.266667 2.133333-8.533333 2.133333-10.666667 2.133333H661.333333c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h136.533334l-187.733334-187.733333c-12.8-12.8-12.8-32 0-44.8 6.4-6.4 14.933333-8.533333 23.466667-8.533333s17.066667 2.133333 23.466667 8.533333l187.733333 187.733333V533.333333c0-17.066667 14.933333-32 32-32s32 14.933333 32 32V746.666667c-2.133333 4.266667-2.133333 8.533333-4.266667 10.666666z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="map" unicode="" d="M512 821.333333C317.866667 821.333333 160 661.333333 160 467.2c0-264.533333 320-484.266667 334.933333-492.8 6.4-4.266667 10.666667-6.4 17.066667-6.4s12.8 2.133333 17.066667 6.4c12.8 8.533333 334.933333 228.266667 334.933333 492.8C864 661.333333 706.133333 821.333333 512 821.333333z m0-782.933333c-66.133333 49.066667-288 228.266667-288 426.666667 0 160 130.133333 290.133333 288 290.133333s288-130.133333 288-290.133333c0-196.266667-221.866667-377.6-288-426.666667zM512 586.666667c-76.8 0-138.666667-61.866667-138.666667-138.666667s61.866667-138.666667 138.666667-138.666667 138.666667 61.866667 138.666667 138.666667-61.866667 138.666667-138.666667 138.666667z m0-213.333334c-40.533333 0-74.666667 34.133333-74.666667 74.666667s34.133333 74.666667 74.666667 74.666667 74.666667-34.133333 74.666667-74.666667-34.133333-74.666667-74.666667-74.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="meh" unicode="" d="M512-53.333333C270.933333-53.333333 74.666667 142.933333 74.666667 384S270.933333 821.333333 512 821.333333 949.333333 625.066667 949.333333 384 753.066667-53.333333 512-53.333333z m0 810.666666C307.2 757.333333 138.666667 588.8 138.666667 384S307.2 10.666667 512 10.666667 885.333333 179.2 885.333333 384 716.8 757.333333 512 757.333333zM362.666667 384c-23.466667 0-42.666667 19.2-42.666667 42.666667v64c0 23.466667 19.2 42.666667 42.666667 42.666666s42.666667-19.2 42.666666-42.666666v-64c0-23.466667-19.2-42.666667-42.666666-42.666667zM661.333333 384c-23.466667 0-42.666667 19.2-42.666666 42.666667v64c0 23.466667 19.2 42.666667 42.666666 42.666666s42.666667-19.2 42.666667-42.666666v-64c0-23.466667-19.2-42.666667-42.666667-42.666667zM699.733333 181.333333H324.266667c-17.066667 0-32 14.933333-32 32s14.933333 32 32 32h373.333333c17.066667 0 32-14.933333 32-32s-12.8-32-29.866667-32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="menu" unicode="" d="M170.666667 682.666667m-64 0a64 64 0 1 1 128 0 64 64 0 1 1-128 0ZM170.666667 384m-64 0a64 64 0 1 1 128 0 64 64 0 1 1-128 0ZM170.666667 85.333333m-64 0a64 64 0 1 1 128 0 64 64 0 1 1-128 0ZM896 117.333333H362.666667c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h533.333333c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32zM362.666667 650.666667h533.333333c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32H362.666667c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32zM896 416H362.666667c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h533.333333c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="loading" unicode="" d="M512 821.333333c-17.066667 0-32-14.933333-32-32v-149.333333c0-17.066667 14.933333-32 32-32s32 14.933333 32 32V789.333333c0 17.066667-14.933333 32-32 32zM693.333333 533.333333c8.533333 0 17.066667 2.133333 23.466667 8.533334l104.533333 104.533333c12.8 12.8 12.8 32 0 44.8-12.8 12.8-32 12.8-44.8 0l-104.533333-104.533333c-12.8-12.8-12.8-32 0-44.8 4.266667-6.4 12.8-8.533333 21.333333-8.533334zM917.333333 416h-149.333333c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h149.333333c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32zM714.666667 226.133333c-12.8 12.8-32 12.8-44.8 0s-12.8-32 0-44.8l104.533333-104.533333c6.4-6.4 14.933333-8.533333 23.466667-8.533333s17.066667 2.133333 23.466666 8.533333c12.8 12.8 12.8 32 0 44.8l-106.666666 104.533333zM512 160c-17.066667 0-32-14.933333-32-32v-149.333333c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v149.333333c0 17.066667-14.933333 32-32 32zM309.333333 226.133333l-104.533333-104.533333c-12.8-12.8-12.8-32 0-44.8 6.4-6.4 14.933333-8.533333 23.466667-8.533333s17.066667 2.133333 23.466666 8.533333l104.533334 104.533333c12.8 12.8 12.8 32 0 44.8s-36.266667 12.8-46.933334 0zM288 384c0 17.066667-14.933333 32-32 32H106.666667c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h149.333333c17.066667 0 32 14.933333 32 32zM247.466667 693.333333c-12.8 12.8-32 12.8-44.8 0-12.8-12.8-12.8-32 0-44.8l104.533333-104.533333c6.4-6.4 14.933333-8.533333 23.466667-8.533333s17.066667 2.133333 23.466666 8.533333c12.8 12.8 12.8 32 0 44.8l-106.666666 104.533333z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="help" unicode="" d="M512 821.333333C270.933333 821.333333 74.666667 625.066667 74.666667 384S270.933333-53.333333 512-53.333333 949.333333 142.933333 949.333333 384 753.066667 821.333333 512 821.333333z m0-810.666666c-204.8 0-373.333333 168.533333-373.333333 373.333333S307.2 757.333333 512 757.333333 885.333333 588.8 885.333333 384 716.8 10.666667 512 10.666667zM512 149.333333m-42.666667 0a42.666667 42.666667 0 1 1 85.333334 0 42.666667 42.666667 0 1 1-85.333334 0ZM512 650.666667c-76.8 0-138.666667-61.866667-138.666667-138.666667 0-17.066667 14.933333-32 32-32s32 14.933333 32 32c0 40.533333 34.133333 74.666667 74.666667 74.666667s74.666667-34.133333 74.666667-74.666667c0-27.733333-53.333333-76.8-91.733334-100.266667-8.533333-6.4-14.933333-17.066667-14.933333-27.733333v-106.666667c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v89.6c34.133333 25.6 106.666667 83.2 106.666667 145.066667 0 76.8-61.866667 138.666667-138.666667 138.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="modular" unicode="" d="M405.333333 437.333333H149.333333c-29.866667 0-53.333333 23.466667-53.333333 53.333334V746.666667c0 29.866667 23.466667 53.333333 53.333333 53.333333h256c29.866667 0 53.333333-23.466667 53.333334-53.333333v-256c0-29.866667-23.466667-53.333333-53.333334-53.333334z m-245.333333 64h234.666667v234.666667h-234.666667v-234.666667zM874.666667 437.333333H618.666667c-29.866667 0-53.333333 23.466667-53.333334 53.333334V746.666667c0 29.866667 23.466667 53.333333 53.333334 53.333333h256c29.866667 0 53.333333-23.466667 53.333333-53.333333v-256c0-29.866667-23.466667-53.333333-53.333333-53.333334z m-245.333334 64h234.666667v234.666667h-234.666667v-234.666667zM874.666667-32H618.666667c-29.866667 0-53.333333 23.466667-53.333334 53.333333V277.333333c0 29.866667 23.466667 53.333333 53.333334 53.333334h256c29.866667 0 53.333333-23.466667 53.333333-53.333334v-256c0-29.866667-23.466667-53.333333-53.333333-53.333333z m-245.333334 64h234.666667v234.666667h-234.666667v-234.666667zM405.333333-32H149.333333c-29.866667 0-53.333333 23.466667-53.333333 53.333333V277.333333c0 29.866667 23.466667 53.333333 53.333333 53.333334h256c29.866667 0 53.333333-23.466667 53.333334-53.333334v-256c0-29.866667-23.466667-53.333333-53.333334-53.333333z m-245.333333 64h234.666667v234.666667h-234.666667v-234.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="notification" unicode="" d="M800 270.933333V448c0 117.333333-70.4 217.6-170.666667 262.4-4.266667 61.866667-55.466667 110.933333-117.333333 110.933333s-113.066667-49.066667-117.333333-110.933333c-100.266667-44.8-170.666667-145.066667-170.666667-262.4v-177.066667c-57.6-46.933333-85.333333-110.933333-85.333333-185.6 0-17.066667 14.933333-32 32-32h206.933333c14.933333-61.866667 70.4-106.666667 134.4-106.666666s119.466667 44.8 134.4 106.666666H853.333333c17.066667 0 32 14.933333 32 32 0 76.8-27.733333 138.666667-85.333333 185.6zM512 757.333333c19.2 0 36.266667-10.666667 44.8-25.6-14.933333 2.133333-29.866667 4.266667-44.8 4.266667-14.933333 0-29.866667-2.133333-44.8-4.266667 8.533333 14.933333 25.6 25.6 44.8 25.6z m0-746.666666c-29.866667 0-55.466667 17.066667-66.133333 42.666666h134.4c-12.8-25.6-38.4-42.666667-68.266667-42.666666z m-307.2 106.666666c6.4 46.933333 29.866667 83.2 70.4 113.066667 8.533333 6.4 12.8 14.933333 12.8 25.6v192c0 123.733333 100.266667 224 224 224S736 571.733333 736 448v-192c0-10.666667 4.266667-19.2 12.8-25.6 40.533333-29.866667 64-66.133333 70.4-113.066667H204.8z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="mic" unicode="" d="M516.266667 238.933333c78.933333 0 142.933333 64 142.933333 142.933334V678.4a142.933333 142.933333 0 0 1-285.866667 0v-296.533333c0-78.933333 64-142.933333 142.933334-142.933334z m-78.933334 439.466667c0 42.666667 36.266667 78.933333 78.933334 78.933333s78.933333-36.266667 78.933333-78.933333v-296.533333c0-42.666667-36.266667-78.933333-78.933333-78.933334s-78.933333 36.266667-78.933334 78.933334V678.4zM774.4 486.4c-17.066667 0-32-14.933333-32-32v-74.666667c0-125.866667-102.4-228.266667-228.266667-228.266666S288 256 288 381.866667v74.666666c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-74.666666c0-149.333333 113.066667-273.066667 260.266667-290.133334v-85.333333h-117.333334c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h296.533334c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32h-117.333334v85.333333c145.066667 14.933333 260.266667 140.8 260.266667 290.133334v74.666666c0 17.066667-12.8 29.866667-32 29.866667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="operation" unicode="" d="M823.466667 384H578.133333v187.733333c0 66.133333-53.333333 119.466667-117.333333 119.466667s-117.333333-53.333333-117.333333-119.466667v-296.533333l-21.333334 21.333333c-46.933333 46.933333-121.6 46.933333-168.533333 2.133334s-44.8-121.6 2.133333-168.533334l174.933334-174.933333c6.4-6.4 14.933333-8.533333 23.466666-8.533333 8.533333 0 17.066667 2.133333 23.466667 8.533333 12.8 12.8 12.8 32 0 44.8l-174.933333 174.933333c-21.333333 21.333333-23.466667 57.6-2.133334 76.8 21.333333 21.333333 55.466667 19.2 76.8-2.133333l74.666667-74.666667c12.8-12.8 32-12.8 44.8 0 6.4 6.4 8.533333 14.933333 8.533333 23.466667V569.6c0 29.866667 23.466667 55.466667 53.333334 55.466667s53.333333-25.6 53.333333-55.466667v-219.733333c0-17.066667 14.933333-32 32-32h277.333333c6.4 0 10.666667-6.4 10.666667-12.8V-21.333333c0-17.066667 14.933333-32 32-32S896-38.4 896-21.333333V309.333333c2.133333 40.533333-32 74.666667-72.533333 74.666667zM266.666667 565.333333c17.066667 0 32 14.933333 32 32 0 87.466667 72.533333 160 160 160S618.666667 684.8 618.666667 597.333333c0-17.066667 14.933333-32 32-32S682.666667 580.266667 682.666667 597.333333c0 123.733333-100.266667 224-224 224S234.666667 721.066667 234.666667 597.333333c0-17.066667 14.933333-32 32-32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="print" unicode="" d="M819.2 531.2h-44.8V768c0 17.066667-14.933333 32-32 32H281.6c-17.066667 0-32-14.933333-32-32v-236.8H204.8c-59.733333 0-108.8-49.066667-108.8-108.8v-192c0-59.733333 49.066667-108.8 108.8-108.8h44.8V0c0-17.066667 14.933333-32 32-32h460.8c17.066667 0 32 14.933333 32 32v121.6h44.8c59.733333 0 108.8 49.066667 108.8 108.8v192c0 59.733333-49.066667 108.8-108.8 108.8zM313.6 736h396.8v-204.8H313.6V736z m396.8-704H313.6V275.2h396.8v-243.2z m153.6 198.4c0-25.6-19.2-44.8-44.8-44.8h-44.8v121.6c0 17.066667-14.933333 32-32 32H281.6c-17.066667 0-32-14.933333-32-32v-121.6H204.8c-25.6 0-44.8 19.2-44.8 44.8v192c0 25.6 19.2 44.8 44.8 44.8h614.4c25.6 0 44.8-19.2 44.8-44.8v-192z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="mobile-phone" unicode="" d="M746.666667-53.333333H277.333333c-40.533333 0-74.666667 34.133333-74.666666 74.666666V746.666667c0 40.533333 34.133333 74.666667 74.666666 74.666666h469.333334c40.533333 0 74.666667-34.133333 74.666666-74.666666v-725.333334c0-40.533333-34.133333-74.666667-74.666666-74.666666z m-469.333334 810.666666c-6.4 0-10.666667-4.266667-10.666666-10.666666v-725.333334c0-6.4 4.266667-10.666667 10.666666-10.666666h469.333334c6.4 0 10.666667 4.266667 10.666666 10.666666V746.666667c0 6.4-4.266667 10.666667-10.666666 10.666666H277.333333zM512 128m-42.666667 0a42.666667 42.666667 0 1 1 85.333334 0 42.666667 42.666667 0 1 1-85.333334 0ZM597.333333 650.666667h-170.666666c-17.066667 0-32 14.933333-32 32s14.933333 32 32 32h170.666666c17.066667 0 32-14.933333 32-32s-14.933333-32-32-32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="navigation" unicode="" d="M834.133333 682.666667c-6.4 12.8-17.066667 23.466667-29.866666 27.733333-12.8 4.266667-27.733333 4.266667-40.533334-2.133333L106.666667 394.666667c-14.933333-6.4-25.6-21.333333-29.866667-36.266667-6.4-27.733333 12.8-57.6 40.533333-64l249.6-53.333333 53.333334-249.6c4.266667-17.066667 14.933333-29.866667 29.866666-36.266667 6.4-4.266667 14.933333-4.266667 23.466667-4.266667 19.2 0 38.4 10.666667 49.066667 29.866667l313.6 657.066667c6.4 12.8 6.4 29.866667-2.133334 44.8zM477.866667 34.133333L426.666667 273.066667c-2.133333 12.8-12.8 21.333333-23.466667 23.466666L162.133333 349.866667l601.6 288-285.866666-603.733334z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="move" unicode="" d="M921.6 403.2l-121.6 121.6c-12.8 12.8-32 12.8-44.8 0s-12.8-32 0-44.8l66.133333-66.133333h-277.333333v277.333333l66.133333-66.133333c6.4-6.4 14.933333-8.533333 23.466667-8.533334s17.066667 2.133333 23.466667 8.533334c12.8 12.8 12.8 32 0 44.8l-121.6 121.6c-12.8 12.8-32 12.8-44.8 0l-121.6-121.6c-12.8-12.8-12.8-32 0-44.8 12.8-12.8 32-12.8 44.8 0l66.133333 66.133333v-277.333333h-277.333333l66.133333 66.133333c12.8 12.8 12.8 32 0 44.8-12.8 12.8-32 12.8-44.8 0l-121.6-121.6c-12.8-12.8-12.8-32 0-44.8l121.6-121.6c6.4-6.4 14.933333-8.533333 23.466667-8.533333s17.066667 2.133333 23.466666 8.533333c12.8 12.8 12.8 32 0 44.8l-66.133333 66.133333h277.333333v-277.333333l-66.133333 66.133333c-12.8 12.8-32 12.8-44.8 0s-12.8-32 0-44.8l121.6-121.6c6.4-6.4 14.933333-8.533333 23.466667-8.533333s17.066667 2.133333 23.466666 8.533333l121.6 121.6c12.8 12.8 12.8 32 0 44.8s-32 12.8-44.8 0l-66.133333-66.133333v277.333333h277.333333l-66.133333-66.133333c-12.8-12.8-12.8-32 0-44.8 6.4-6.4 14.933333-8.533333 23.466667-8.533333s17.066667 2.133333 23.466666 8.533333l121.6 121.6c6.4 6.4 8.533333 14.933333 8.533334 23.466667s-10.666667 14.933333-17.066667 21.333333z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="refresh" unicode="" d="M934.4 689.066667c-17.066667 4.266667-34.133333-6.4-38.4-23.466667l-23.466667-87.466667C797.866667 712.533333 654.933333 800 497.066667 800 264.533333 800 74.666667 614.4 74.666667 384s189.866667-416 422.4-416c179.2 0 339.2 110.933333 398.933333 275.2 6.4 17.066667-2.133333 34.133333-19.2 40.533333-17.066667 6.4-34.133333-2.133333-40.533333-19.2-51.2-138.666667-187.733333-232.533333-339.2-232.533333C298.666667 32 138.666667 189.866667 138.666667 384S300.8 736 497.066667 736c145.066667 0 277.333333-87.466667 330.666666-217.6l-128 36.266667c-17.066667 4.266667-34.133333-6.4-38.4-23.466667-4.266667-17.066667 6.4-34.133333 23.466667-38.4l185.6-49.066667c2.133333 0 6.4-2.133333 8.533333-2.133333 6.4 0 10.666667 2.133333 17.066667 4.266667 6.4 4.266667 12.8 10.666667 14.933333 19.2l49.066667 185.6c0 17.066667-8.533333 34.133333-25.6 38.4z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="run-up" unicode="" d="M409.6 601.338776l71.053061 71.053061v-248.685715c0-16.718367 14.628571-31.346939 31.346939-31.346938s31.346939 14.628571 31.346939 31.346938v250.775511l71.053061-71.053062c6.269388-6.269388 14.628571-8.359184 22.987755-8.359183s16.718367 2.089796 22.987755 8.359183c12.538776 12.538776 12.538776 31.346939 0 43.885715l-125.387755 125.387755c-12.538776 12.538776-31.346939 12.538776-43.885714 0l-125.387755-125.387755c-12.538776-12.538776-12.538776-31.346939 0-43.885715 10.44898-12.538776 31.346939-12.538776 43.885714-2.089795zM936.228571 444.604082l-242.416326 81.50204c-16.718367 6.269388-33.436735-4.179592-39.706123-18.808163-6.269388-16.718367 4.179592-33.436735 18.808164-39.706122l156.734694-52.244898L512 302.497959 194.35102 415.346939l156.734694 52.244898c16.718367 6.269388 25.077551 22.987755 18.808164 39.706122-6.269388 16.718367-22.987755 25.077551-39.706123 18.808163L87.771429 444.604082c-12.538776-4.179592-20.897959-16.718367-20.89796-29.257143 0-12.538776 8.359184-25.077551 20.89796-29.257143l413.779591-146.285714c4.179592-2.089796 6.269388-2.089796 10.44898-2.089796s6.269388 0 10.44898 2.089796l413.779591 146.285714c12.538776 4.179592 20.897959 16.718367 20.89796 29.257143 0 14.628571-8.359184 25.077551-20.89796 29.257143zM512 181.289796c-16.718367 0-31.346939-14.628571-31.346939-31.346939v-156.734694c0-16.718367 14.628571-31.346939 31.346939-31.346939s31.346939 14.628571 31.346939 31.346939v156.734694c0 16.718367-14.628571 31.346939-31.346939 31.346939z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="picture" unicode="" d="M819.2 800H204.8c-59.733333 0-108.8-49.066667-108.8-108.8v-616.533333c0-59.733333 49.066667-108.8 108.8-108.8h616.533333c59.733333 0 108.8 49.066667 108.8 108.8V691.2c-2.133333 59.733333-51.2 108.8-110.933333 108.8zM160 76.8V691.2c0 23.466667 19.2 44.8 44.8 44.8h616.533333c23.466667 0 44.8-19.2 44.8-44.8v-388.266667l-125.866666 125.866667c-27.733333 27.733333-76.8 27.733333-104.533334 0l-390.4-384c-4.266667-4.266667-6.4-8.533333-6.4-12.8H204.8c-25.6 0-44.8 19.2-44.8 44.8z m659.2-44.8H324.266667l354.133333 354.133333c2.133333 2.133333 6.4 2.133333 8.533333 2.133334s4.266667 0 8.533334-2.133334l160-160c4.266667-4.266667 8.533333-6.4 12.8-6.4v-142.933333c-4.266667-25.6-23.466667-44.8-49.066667-44.8zM375.466667 413.866667c59.733333 0 106.666667 46.933333 106.666666 106.666666s-46.933333 106.666667-106.666666 106.666667-106.666667-46.933333-106.666667-106.666667 49.066667-106.666667 106.666667-106.666666z m0 149.333333c23.466667 0 42.666667-19.2 42.666666-42.666667s-19.2-42.666667-42.666666-42.666666-42.666667 19.2-42.666667 42.666666 19.2 42.666667 42.666667 42.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="run-in" unicode="" d="M612.352 130.048l-69.632-69.632V179.2c0 16.384-14.336 30.72-30.72 30.72s-30.72-14.336-30.72-30.72v-120.832l-69.632 69.632c-12.288 12.288-30.72 12.288-43.008 0s-12.288-30.72 0-43.008l122.88-122.88c6.144-6.144 14.336-8.192 22.528-8.192s16.384 2.048 22.528 8.192l122.88 122.88c12.288 12.288 12.288 30.72 0 43.008s-34.816 12.288-47.104 2.048zM927.744 474.112l-237.568 79.872c-16.384 6.144-32.768-4.096-38.912-18.432-6.144-16.384 4.096-32.768 18.432-38.912l153.6-51.2L512 334.848 200.704 445.44l153.6 51.2c16.384 6.144 24.576 22.528 18.432 38.912-6.144 16.384-22.528 24.576-38.912 18.432L96.256 474.112c-12.288-4.096-20.48-16.384-20.48-28.672 0-12.288 8.192-24.576 20.48-28.672l405.504-143.36c4.096-2.048 6.144-2.048 10.24-2.048s6.144 0 10.24 2.048l405.504 143.36c12.288 4.096 20.48 16.384 20.48 28.672 0 14.336-8.192 24.576-20.48 28.672zM512 394.24c16.384 0 30.72 14.336 30.72 30.72V742.4c0 16.384-14.336 30.72-30.72 30.72s-30.72-14.336-30.72-30.72V424.96c0-16.384 14.336-30.72 30.72-30.72z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="pin" unicode="" d="M911.15102 572.081633L689.632653 793.6c-18.808163 18.808163-50.155102 20.897959-71.053061 2.089796l-267.493878-229.877551-96.130612-14.628572c-6.269388 0-12.538776-4.179592-16.718367-8.359183l-58.514286-58.514286c-20.897959-20.897959-20.897959-54.334694 0-73.142857l152.555102-152.555102L125.387755 51.722449c-12.538776-12.538776-12.538776-31.346939 0-43.885714 6.269388-6.269388 14.628571-10.44898 20.897959-10.44898s16.718367 2.089796 22.987755 8.359184l204.8 204.8 152.555102-152.555102c10.44898-10.44898 22.987755-14.628571 37.616327-14.628572s27.167347 6.269388 37.616326 14.628572l58.514286 58.514285c4.179592 4.179592 8.359184 10.44898 8.359184 16.718368l14.628571 96.130612 227.787755 267.493878c18.808163 25.077551 18.808163 56.42449 0 75.232653zM631.118367 266.971429c-4.179592-4.179592-6.269388-10.44898-6.269387-14.628572l-14.628572-94.040816-45.97551-45.97551-334.367347 334.367347 43.885714 43.885714 94.040817 14.628571c6.269388 0 10.44898 4.179592 14.628571 6.269388l269.583674 229.877551 206.889795-206.889796-227.787755-267.493877z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="save" unicode="" d="M906.666667 597.333333L725.333333 778.666667c-14.933333 14.933333-32 21.333333-53.333333 21.333333H170.666667C130.133333 800 96 765.866667 96 725.333333v-682.666666c0-40.533333 34.133333-74.666667 74.666667-74.666667h682.666666c40.533333 0 74.666667 34.133333 74.666667 74.666667V546.133333c0 19.2-8.533333 38.4-21.333333 51.2zM652.8 32H371.2V247.466667h281.6v-215.466667z m211.2 10.666667c0-6.4-4.266667-10.666667-10.666667-10.666667h-140.8V277.333333c0 17.066667-12.8 29.866667-29.866666 29.866667H341.333333c-17.066667 0-29.866667-12.8-29.866666-29.866667v-245.333333H170.666667c-6.4 0-10.666667 4.266667-10.666667 10.666667V725.333333c0 6.4 4.266667 10.666667 10.666667 10.666667h140.8V576c0-17.066667 12.8-29.866667 29.866666-29.866667h277.333334c17.066667 0 29.866667 12.8 29.866666 29.866667s-12.8 29.866667-29.866666 29.866667H371.2V736h302.933333c2.133333 0 6.4-2.133333 8.533334-2.133333l179.2-179.2c2.133333-2.133333 2.133333-4.266667 2.133333-8.533334V42.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="search" unicode="" d="M945.066667-2.133333l-189.866667 189.866666c55.466667 64 87.466667 149.333333 87.466667 241.066667 0 204.8-168.533333 373.333333-373.333334 373.333333S96 631.466667 96 426.666667 264.533333 53.333333 469.333333 53.333333c91.733333 0 174.933333 34.133333 241.066667 87.466667l189.866667-189.866667c6.4-6.4 14.933333-8.533333 23.466666-8.533333s17.066667 2.133333 23.466667 8.533333c8.533333 12.8 8.533333 34.133333-2.133333 46.933334zM469.333333 117.333333C298.666667 117.333333 160 256 160 426.666667S298.666667 736 469.333333 736 778.666667 597.333333 778.666667 426.666667 640 117.333333 469.333333 117.333333z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="share" unicode="" d="M874.666667 352c-17.066667 0-32-14.933333-32-32v-256c0-6.4-4.266667-10.666667-10.666667-10.666667H192c-6.4 0-10.666667 4.266667-10.666667 10.666667V704c0 6.4 4.266667 10.666667 10.666667 10.666667h256c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32H192C151.466667 778.666667 117.333333 744.533333 117.333333 704v-640c0-40.533333 34.133333-74.666667 74.666667-74.666667h640c40.533333 0 74.666667 34.133333 74.666667 74.666667V320c0 17.066667-14.933333 32-32 32zM874.666667 778.666667H640c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h157.866667L509.866667 428.8c-12.8-12.8-12.8-32 0-44.8 6.4-6.4 14.933333-8.533333 23.466666-8.533333s17.066667 2.133333 23.466667 8.533333l285.866667 285.866667V512c0-17.066667 14.933333-32 32-32s32 14.933333 32 32V746.666667c0 17.066667-14.933333 32-32 32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="scanning" unicode="" d="M341.333333 32H170.666667c-6.4 0-10.666667 4.266667-10.666667 10.666667v170.666666c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-170.666666c0-40.533333 34.133333-74.666667 74.666667-74.666667h170.666666c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32zM896 245.333333c-17.066667 0-32-14.933333-32-32v-170.666666c0-6.4-4.266667-10.666667-10.666667-10.666667h-170.666666c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h170.666666c40.533333 0 74.666667 34.133333 74.666667 74.666667v170.666666c0 17.066667-14.933333 32-32 32zM128 522.666667c17.066667 0 32 14.933333 32 32V725.333333c0 6.4 4.266667 10.666667 10.666667 10.666667h170.666666c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32H170.666667C130.133333 800 96 765.866667 96 725.333333v-170.666666c0-17.066667 14.933333-32 32-32zM853.333333 800h-170.666666c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h170.666666c6.4 0 10.666667-4.266667 10.666667-10.666667v-170.666666c0-17.066667 14.933333-32 32-32s32 14.933333 32 32V725.333333c0 40.533333-34.133333 74.666667-74.666667 74.666667zM896 426.666667H128c-17.066667 0-32-14.933333-32-32S110.933333 362.666667 128 362.666667h768c17.066667 0 32 14.933333 32 32S913.066667 426.666667 896 426.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="security" unicode="" d="M814.933333 716.8L529.066667 817.066667c-10.666667 4.266667-23.466667 4.266667-34.133334 0L209.066667 716.8c-29.866667-10.666667-49.066667-38.4-49.066667-70.4V298.666667c0-194.133333 157.866667-352 352-352S864 104.533333 864 298.666667V646.4c0 32-19.2 61.866667-49.066667 70.4zM800 298.666667c0-157.866667-130.133333-288-288-288S224 140.8 224 298.666667V646.4c0 4.266667 2.133333 8.533333 6.4 10.666667L512 755.2l281.6-98.133333c4.266667-2.133333 6.4-6.4 6.4-10.666667V298.666667zM659.2 492.8l-192-194.133333-85.333333 68.266666c-12.8 10.666667-34.133333 8.533333-44.8-4.266666-10.666667-12.8-8.533333-34.133333 4.266666-44.8l106.666667-85.333334c6.4-4.266667 12.8-6.4 19.2-6.4 8.533333 0 17.066667 2.133333 23.466667 8.533334l213.333333 213.333333c12.8 12.8 12.8 32 0 44.8-10.666667 10.666667-32 10.666667-44.8 0z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="select" unicode="" d="M409.6 138.666667c-8.533333 0-17.066667 2.133333-23.466667 8.533333l-238.933333 234.666667c-12.8 12.8-12.8 32 0 44.8 12.8 12.8 32 12.8 44.8 0l215.466667-213.333334 422.4 428.8c12.8 12.8 32 12.8 44.8 0 12.8-12.8 12.8-32 0-44.8L430.933333 149.333333c-4.266667-8.533333-12.8-10.666667-21.333333-10.666666z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="stop" unicode="" d="M512 821.333333C270.933333 821.333333 74.666667 625.066667 74.666667 384S270.933333-53.333333 512-53.333333 949.333333 142.933333 949.333333 384 753.066667 821.333333 512 821.333333zM885.333333 384c0-85.333333-29.866667-164.266667-78.933333-228.266667l-533.333333 514.133334c64 55.466667 149.333333 87.466667 238.933333 87.466666 204.8 0 373.333333-168.533333 373.333333-373.333333z m-746.666666 0c0 91.733333 34.133333 174.933333 87.466666 241.066667l535.466667-516.266667c-66.133333-59.733333-153.6-98.133333-251.733333-98.133333-202.666667 0-371.2 168.533333-371.2 373.333333z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="smile" unicode="" d="M512 821.333333C270.933333 821.333333 74.666667 625.066667 74.666667 384S270.933333-53.333333 512-53.333333 949.333333 142.933333 949.333333 384 753.066667 821.333333 512 821.333333z m0-810.666666c-204.8 0-373.333333 168.533333-373.333333 373.333333S307.2 757.333333 512 757.333333 885.333333 588.8 885.333333 384 716.8 10.666667 512 10.666667zM674.133333 288c-46.933333-57.6-100.266667-85.333333-162.133333-85.333333s-115.2 27.733333-162.133333 85.333333c-10.666667 12.8-32 14.933333-44.8 4.266667-12.8-10.666667-14.933333-32-4.266667-44.8 59.733333-70.4 130.133333-106.666667 211.2-106.666667s151.466667 36.266667 211.2 106.666667c10.666667 12.8 8.533333 34.133333-4.266667 44.8-12.8 10.666667-34.133333 8.533333-44.8-4.266667zM362.666667 384c23.466667 0 42.666667 19.2 42.666666 42.666667v64c0 23.466667-19.2 42.666667-42.666666 42.666666s-42.666667-19.2-42.666667-42.666666v-64c0-23.466667 19.2-42.666667 42.666667-42.666667zM661.333333 384c23.466667 0 42.666667 19.2 42.666667 42.666667v64c0 23.466667-19.2 42.666667-42.666667 42.666666s-42.666667-19.2-42.666666-42.666666v-64c0-23.466667 19.2-42.666667 42.666666-42.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="switch" unicode="" d="M128 373.333333c17.066667 0 32 14.933333 32 32v170.666667c0 6.4 4.266667 10.666667 10.666667 10.666667h652.8l-83.2-83.2c-12.8-12.8-12.8-34.133333 0-46.933334 6.4-6.4 14.933333-10.666667 23.466666-10.666666s17.066667 4.266667 23.466667 10.666666l145.066667 145.066667c12.8 12.8 12.8 34.133333 0 46.933333l-145.066667 145.066667c-12.8 12.8-34.133333 12.8-46.933333 0-12.8-12.8-12.8-34.133333 0-46.933333l93.866666-93.866667H170.666667c-40.533333 0-74.666667-34.133333-74.666667-74.666667v-170.666666c0-19.2 14.933333-34.133333 32-34.133334zM906.666667 394.666667c-17.066667 0-32-14.933333-32-32v-170.666667c0-6.4-4.266667-10.666667-10.666667-10.666667H211.2l83.2 83.2c12.8 12.8 12.8 34.133333 0 46.933334-12.8 12.8-34.133333 12.8-46.933333 0l-145.066667-145.066667c-12.8-12.8-12.8-34.133333 0-46.933333l145.066667-145.066667c6.4-6.4 14.933333-10.666667 23.466666-10.666667s17.066667 4.266667 23.466667 10.666667c12.8 12.8 12.8 34.133333 0 46.933333l-93.866667 93.866667h663.466667c40.533333 0 74.666667 34.133333 74.666667 74.666667v170.666666c0 19.2-12.8 34.133333-32 34.133334z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="setting" unicode="" d="M904.533333 473.6l-85.333333 14.933333-17.066667 38.4 49.066667 70.4c14.933333 21.333333 12.8 49.066667-6.4 68.266667l-53.333333 53.333333c-19.2 19.2-46.933333 21.333333-68.266667 6.4l-70.4-49.066666-38.4 17.066666-14.933333 85.333334c-2.133333 23.466667-23.466667 42.666667-49.066667 42.666666h-74.666667c-25.6 0-46.933333-19.2-53.333333-44.8l-14.933333-85.333333-38.4-17.066667L296.533333 725.333333c-21.333333 14.933333-49.066667 12.8-68.266666-6.4l-53.333334-53.333333c-19.2-19.2-21.333333-46.933333-6.4-68.266667l49.066667-70.4-17.066667-38.4-85.333333-14.933333c-21.333333-4.266667-40.533333-25.6-40.533333-51.2v-74.666667c0-25.6 19.2-46.933333 44.8-53.333333l85.333333-14.933333 17.066667-38.4L170.666667 168.533333c-14.933333-21.333333-12.8-49.066667 6.4-68.266666l53.333333-53.333334c19.2-19.2 46.933333-21.333333 68.266667-6.4l70.4 49.066667 38.4-17.066667 14.933333-85.333333c4.266667-25.6 25.6-44.8 53.333333-44.8h74.666667c25.6 0 46.933333 19.2 53.333333 44.8l14.933334 85.333333 38.4 17.066667 70.4-49.066667c21.333333-14.933333 49.066667-12.8 68.266666 6.4l53.333334 53.333334c19.2 19.2 21.333333 46.933333 6.4 68.266666l-49.066667 70.4 17.066667 38.4 85.333333 14.933334c25.6 4.266667 44.8 25.6 44.8 53.333333v74.666667c-4.266667 27.733333-23.466667 49.066667-49.066667 53.333333z m-19.2-117.333333l-93.866666-17.066667c-10.666667-2.133333-19.2-8.533333-23.466667-19.2l-29.866667-70.4c-4.266667-10.666667-2.133333-21.333333 4.266667-29.866667l53.333333-76.8-40.533333-40.533333-76.8 53.333333c-8.533333 6.4-21.333333 8.533333-29.866667 4.266667L576 128c-10.666667-4.266667-17.066667-12.8-19.2-23.466667l-17.066667-93.866666h-57.6l-17.066666 93.866666c-2.133333 10.666667-8.533333 19.2-19.2 23.466667l-70.4 29.866667c-10.666667 4.266667-21.333333 2.133333-29.866667-4.266667l-76.8-53.333333-40.533333 40.533333 53.333333 76.8c6.4 8.533333 8.533333 21.333333 4.266667 29.866667L256 320c-4.266667 10.666667-12.8 17.066667-23.466667 19.2l-93.866666 17.066667v57.6l93.866666 17.066666c10.666667 2.133333 19.2 8.533333 23.466667 19.2l29.866667 70.4c4.266667 10.666667 2.133333 21.333333-4.266667 29.866667l-53.333333 76.8 40.533333 40.533333 76.8-53.333333c8.533333-6.4 21.333333-8.533333 29.866667-4.266667L448 640c10.666667 4.266667 17.066667 12.8 19.2 23.466667l17.066667 93.866666h57.6l17.066666-93.866666c2.133333-10.666667 8.533333-19.2 19.2-23.466667l70.4-29.866667c10.666667-4.266667 21.333333-2.133333 29.866667 4.266667l76.8 53.333333 40.533333-40.533333-53.333333-76.8c-6.4-8.533333-8.533333-21.333333-4.266667-29.866667L768 448c4.266667-10.666667 12.8-17.066667 23.466667-19.2l93.866666-17.066667v-55.466666zM512 501.333333c-64 0-117.333333-53.333333-117.333333-117.333333s53.333333-117.333333 117.333333-117.333333 117.333333 53.333333 117.333333 117.333333-53.333333 117.333333-117.333333 117.333333z m0-170.666666c-29.866667 0-53.333333 23.466667-53.333333 53.333333s23.466667 53.333333 53.333333 53.333333 53.333333-23.466667 53.333333-53.333333-23.466667-53.333333-53.333333-53.333333z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="survey" unicode="" d="M810.666667 757.333333h-85.333334V768c0 29.866667-23.466667 53.333333-53.333333 53.333333h-320C322.133333 821.333333 298.666667 797.866667 298.666667 768v-10.666667h-85.333334c-40.533333 0-74.666667-34.133333-74.666666-74.666666v-661.333334c0-40.533333 34.133333-74.666667 74.666666-74.666666h597.333334c40.533333 0 74.666667 34.133333 74.666666 74.666666V682.666667c0 40.533333-34.133333 74.666667-74.666666 74.666666z m-149.333334 0v-64H362.666667v64h298.666666zM821.333333 21.333333c0-6.4-4.266667-10.666667-10.666666-10.666666H213.333333c-6.4 0-10.666667 4.266667-10.666666 10.666666V682.666667c0 6.4 4.266667 10.666667 10.666666 10.666666h85.333334v-10.666666c0-29.866667 23.466667-53.333333 53.333333-53.333334h320c29.866667 0 53.333333 23.466667 53.333333 53.333334v10.666666h85.333334c6.4 0 10.666667-4.266667 10.666666-10.666666v-661.333334zM659.2 450.133333l-211.2-213.333333-83.2 83.2c-12.8 12.8-32 12.8-44.8 0s-12.8-32 0-44.8l106.666667-106.666667c6.4-6.4 14.933333-8.533333 23.466666-8.533333s17.066667 2.133333 23.466667 8.533333l234.666667 234.666667c12.8 12.8 12.8 32 0 44.8-14.933333 12.8-36.266667 12.8-49.066667 2.133333z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="task" unicode="" d="M846.933333 780.8c-8.533333 6.4-21.333333 6.4-29.866666 2.133333 0 0-74.666667-34.133333-174.933334-34.133333-49.066667 0-96 17.066667-145.066666 34.133333-53.333333 19.2-106.666667 38.4-166.4 38.4-119.466667 0-162.133333-40.533333-168.533334-44.8-4.266667-6.4-8.533333-14.933333-8.533333-23.466666V-21.333333c0-17.066667 14.933333-32 32-32s32 14.933333 32 32V300.8c14.933333 8.533333 51.2 21.333333 113.066667 21.333333 49.066667 0 96-17.066667 145.066666-34.133333 53.333333-19.2 106.666667-38.4 166.4-38.4 115.2 0 198.4 38.4 200.533334 38.4 10.666667 4.266667 19.2 17.066667 19.2 29.866667V753.066667c0 10.666667-6.4 21.333333-14.933334 27.733333z m-49.066666-441.6c-27.733333-10.666667-85.333333-25.6-155.733334-25.6-49.066667 0-96 17.066667-145.066666 34.133333-53.333333 19.2-106.666667 38.4-166.4 38.4-49.066667 0-87.466667-6.4-113.066667-17.066666V736c14.933333 8.533333 51.2 21.333333 113.066667 21.333333 49.066667 0 96-17.066667 145.066666-34.133333 53.333333-19.2 106.666667-38.4 166.4-38.4 64 0 119.466667 12.8 155.733334 23.466667v-369.066667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="skip" unicode="" d="M921.6 539.733333c-14.933333 8.533333-34.133333 4.266667-42.666667-12.8L829.866667 448c-51.2 157.866667-200.533333 266.666667-369.066667 266.666667-172.8 0-324.266667-115.2-373.333333-277.333334-4.266667-17.066667 4.266667-34.133333 21.333333-40.533333 17.066667-4.266667 34.133333 4.266667 40.533333 21.333333 40.533333 136.533333 166.4 232.533333 311.466667 232.533334 140.8 0 264.533333-89.6 307.2-219.733334l-81.066667 46.933334c-14.933333 8.533333-34.133333 4.266667-42.666666-10.666667-8.533333-14.933333-4.266667-34.133333 10.666666-42.666667l147.2-85.333333c4.266667-2.133333 10.666667-4.266667 17.066667-4.266667 2.133333 0 6.4 0 8.533333 2.133334 8.533333 2.133333 14.933333 8.533333 19.2 14.933333l85.333334 147.2c8.533333 12.8 4.266667 32-10.666667 40.533333zM896 138.666667H128c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h768c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="text" unicode="" d="M853.333333 757.333333H170.666667c-17.066667 0-32-14.933333-32-32v-128c0-17.066667 14.933333-32 32-32s32 14.933333 32 32V693.333333h277.333333v-618.666666H384c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h256c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32h-96v618.666666h277.333333V597.333333c0-17.066667 14.933333-32 32-32s32 14.933333 32 32V725.333333c0 17.066667-14.933333 32-32 32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="time" unicode="" d="M512 821.333333C270.933333 821.333333 74.666667 625.066667 74.666667 384S270.933333-53.333333 512-53.333333 949.333333 142.933333 949.333333 384 753.066667 821.333333 512 821.333333z m0-810.666666c-204.8 0-373.333333 168.533333-373.333333 373.333333S307.2 757.333333 512 757.333333 885.333333 588.8 885.333333 384 716.8 10.666667 512 10.666667zM695.466667 328.533333l-151.466667 70.4V618.666667c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-238.933334c0-12.8 6.4-23.466667 19.2-29.866666l170.666667-81.066667c4.266667-2.133333 8.533333-2.133333 12.8-2.133333 12.8 0 23.466667 6.4 29.866666 19.2 6.4 14.933333 0 34.133333-17.066666 42.666666z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="toggle-left" unicode="" d="M874.666667 96H149.333333c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h725.333334c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32zM149.333333 672h725.333334c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32H149.333333c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32zM341.333333 416c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h512c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32H341.333333zM275.2 211.2c6.4-6.4 14.933333-8.533333 23.466667-8.533333s17.066667 2.133333 23.466666 8.533333c12.8 12.8 12.8 32 0 44.8l-128 128 125.866667 125.866667c12.8 12.8 12.8 32 0 44.8-12.8 12.8-32 12.8-44.8 0l-149.333333-149.333334c-12.8-12.8-12.8-32 0-44.8l149.333333-149.333333z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="toggle-right" unicode="" d="M874.666667 96H149.333333c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32h725.333334c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32zM149.333333 672h725.333334c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32H149.333333c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32zM149.333333 352h512c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32H149.333333c-17.066667 0-32-14.933333-32-32s14.933333-32 32-32zM748.8 556.8c-12.8 12.8-32 12.8-44.8 0-12.8-12.8-12.8-32 0-44.8l125.866667-125.866667-125.866667-125.866666c-12.8-12.8-12.8-32 0-44.8 6.4-6.4 14.933333-8.533333 23.466667-8.533334s17.066667 2.133333 23.466666 8.533334l149.333334 149.333333c12.8 12.8 12.8 32 0 44.8l-151.466667 147.2z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="top" unicode="" d="M896 800H128c-17.066667 0-32-14.933333-32-32S110.933333 736 128 736h768c17.066667 0 32 14.933333 32 32s-14.933333 32-32 32zM535.466667 599.466667c-12.8 12.8-32 12.8-44.8 0l-213.333334-213.333334c-12.8-12.8-12.8-32 0-44.8s32-12.8 44.8 0l157.866667 157.866667V42.666667c0-17.066667 14.933333-32 32-32s32 14.933333 32 32V499.2l157.866667-157.866667c6.4-6.4 14.933333-8.533333 23.466666-8.533333s17.066667 2.133333 23.466667 8.533333c12.8 12.8 12.8 32 0 44.8l-213.333333 213.333334z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="unlock" unicode="" d="M785.066667 480H381.866667v121.6c0 74.666667 61.866667 134.4 138.666666 134.4 59.733333 0 113.066667-36.266667 132.266667-91.733333 6.4-17.066667 23.466667-25.6 40.533333-19.2 17.066667 6.4 25.6 23.466667 19.2 40.533333-27.733333 81.066667-104.533333 134.4-192 134.4-110.933333 0-202.666667-89.6-202.666666-198.4v-121.6h-78.933334c-55.466667 0-100.266667-44.8-100.266666-100.266667v-311.466666c0-55.466667 44.8-100.266667 100.266666-100.266667h546.133334c55.466667 0 100.266667 44.8 100.266666 100.266667V379.733333c0 55.466667-44.8 100.266667-100.266666 100.266667z m36.266666-411.733333c0-19.2-17.066667-36.266667-36.266666-36.266667H238.933333c-19.2 0-36.266667 17.066667-36.266666 36.266667V379.733333c0 19.2 17.066667 36.266667 36.266666 36.266667h546.133334c19.2 0 36.266667-17.066667 36.266666-36.266667v-311.466666zM512 352c-17.066667 0-32-14.933333-32-32v-106.666667c0-17.066667 14.933333-32 32-32s32 14.933333 32 32v106.666667c0 17.066667-14.933333 32-32 32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="user" unicode="" d="M512 821.333333C270.933333 821.333333 74.666667 625.066667 74.666667 384S270.933333-53.333333 512-53.333333 949.333333 142.933333 949.333333 384 753.066667 821.333333 512 821.333333zM288 85.333333c0 123.733333 100.266667 224 224 224S736 209.066667 736 85.333333c-61.866667-46.933333-140.8-74.666667-224-74.666666s-162.133333 27.733333-224 74.666666z m128 384c0 53.333333 42.666667 96 96 96s96-42.666667 96-96-42.666667-96-96-96-96 42.666667-96 96z m377.6-328.533333c-19.2 96-85.333333 174.933333-174.933333 211.2 32 29.866667 51.2 70.4 51.2 117.333333 0 87.466667-72.533333 160-160 160s-160-72.533333-160-160c0-46.933333 19.2-87.466667 51.2-117.333333-89.6-36.266667-155.733333-115.2-174.933334-211.2-55.466667 66.133333-91.733333 149.333333-91.733333 243.2 0 204.8 168.533333 373.333333 373.333333 373.333333S885.333333 588.8 885.333333 384c0-93.866667-34.133333-177.066667-91.733333-243.2z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="upload" unicode="" d="M896 266.666667c-17.066667 0-32-14.933333-32-32v-170.666667c0-6.4-4.266667-10.666667-10.666667-10.666667H170.666667c-6.4 0-10.666667 4.266667-10.666667 10.666667v170.666667c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-170.666667c0-40.533333 34.133333-74.666667 74.666667-74.666667h682.666666c40.533333 0 74.666667 34.133333 74.666667 74.666667v170.666667c0 17.066667-14.933333 32-32 32zM322.133333 488.533333l157.866667 157.866667V192c0-17.066667 14.933333-32 32-32s32 14.933333 32 32V648.533333l157.866667-157.866666c6.4-6.4 14.933333-8.533333 23.466666-8.533334s17.066667 2.133333 23.466667 8.533334c12.8 12.8 12.8 32 0 44.8l-213.333333 213.333333c-12.8 12.8-32 12.8-44.8 0l-213.333334-213.333333c-12.8-12.8-12.8-32 0-44.8 10.666667-12.8 32-12.8 44.8-2.133334z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="work" unicode="" d="M885.333333 640H725.333333V697.6C723.2 738.133333 689.066667 768 648.533333 768h-298.666666c-40.533333-2.133333-72.533333-34.133333-72.533334-74.666667V640H138.666667C98.133333 640 64 605.866667 64 565.333333v-490.666666C64 34.133333 98.133333 0 138.666667 0h746.666666c40.533333 0 74.666667 34.133333 74.666667 74.666667v490.666666c0 40.533333-34.133333 74.666667-74.666667 74.666667zM341.333333 693.333333c2.133333 6.4 6.4 10.666667 12.8 10.666667h296.533334c6.4 0 10.666667-6.4 10.666666-10.666667V640H341.333333V693.333333zM138.666667 576h746.666666c6.4 0 10.666667-4.266667 10.666667-10.666667v-128H128v128c0 6.4 4.266667 10.666667 10.666667 10.666667z m277.333333-202.666667h192V320c0-6.4-4.266667-10.666667-10.666667-10.666667h-170.666666c-6.4 0-10.666667 4.266667-10.666667 10.666667v53.333333z m469.333333-309.333333h-746.666666c-6.4 0-10.666667 4.266667-10.666667 10.666667v298.666666h224V320c0-40.533333 34.133333-74.666667 74.666667-74.666667h170.666666c40.533333 0 74.666667 34.133333 74.666667 74.666667v53.333333H896v-298.666666c0-6.4-4.266667-10.666667-10.666667-10.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="warning" unicode="" d="M934.4 125.866667L605.866667 714.666667C586.666667 748.8 550.4 768 512 768c-38.4 0-74.666667-21.333333-93.866667-53.333333L89.6 125.866667c-19.2-34.133333-19.2-76.8 0-110.933334S145.066667-42.666667 183.466667-42.666667h657.066666c38.4 0 74.666667 21.333333 93.866667 57.6 19.2 34.133333 19.2 76.8 0 110.933334z m-55.466667-81.066667c-8.533333-14.933333-23.466667-23.466667-38.4-23.466667H183.466667c-14.933333 0-29.866667 8.533333-38.4 23.466667-8.533333 14.933333-8.533333 34.133333 0 49.066667L473.6 682.666667c8.533333 12.8 23.466667 21.333333 38.4 21.333333s29.866667-8.533333 38.4-21.333333l328.533333-588.8c8.533333-14.933333 8.533333-32 0-49.066667zM512 149.333333m-42.666667 0a42.666667 42.666667 0 1 1 85.333334 0 42.666667 42.666667 0 1 1-85.333334 0ZM512 266.666667c17.066667 0 32 14.933333 32 32v192c0 17.066667-14.933333 32-32 32s-32-14.933333-32-32v-192c0-17.066667 14.933333-32 32-32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="add-bold" unicode="" d="M874.666667 426.666667H554.666667V746.666667c0 23.466667-19.2 42.666667-42.666667 42.666666s-42.666667-19.2-42.666667-42.666666v-320H149.333333c-23.466667 0-42.666667-19.2-42.666666-42.666667s19.2-42.666667 42.666666-42.666667h320v-320c0-23.466667 19.2-42.666667 42.666667-42.666666s42.666667 19.2 42.666667 42.666666V341.333333h320c23.466667 0 42.666667 19.2 42.666666 42.666667s-19.2 42.666667-42.666666 42.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="arrow-left-bold" unicode="" d="M384 384L731.733333 693.333333c17.066667 14.933333 19.2 42.666667 4.266667 59.733334-14.933333 17.066667-42.666667 19.2-59.733333 4.266666l-384-341.333333c-10.666667-8.533333-14.933333-19.2-14.933334-32s4.266667-23.466667 14.933334-32l384-341.333333c8.533333-6.4 19.2-10.666667 27.733333-10.666667 12.8 0 23.466667 4.266667 32 14.933333 14.933333 17.066667 14.933333 44.8-4.266667 59.733334L384 384z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="arrow-up-bold" unicode="" d="M904.533333 221.866667l-362.666666 362.666666c-17.066667 17.066667-42.666667 17.066667-59.733334 0l-362.666666-362.666666c-17.066667-17.066667-17.066667-42.666667 0-59.733334 17.066667-17.066667 42.666667-17.066667 59.733333 0L512 494.933333l332.8-332.8c8.533333-8.533333 19.2-12.8 29.866667-12.8s21.333333 4.266667 29.866666 12.8c17.066667 17.066667 17.066667 42.666667 0 59.733334z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="close-bold" unicode="" d="M571.733333 384l268.8 268.8c17.066667 17.066667 17.066667 42.666667 0 59.733333-17.066667 17.066667-42.666667 17.066667-59.733333 0L512 443.733333 243.2 712.533333c-17.066667 17.066667-42.666667 17.066667-59.733333 0-17.066667-17.066667-17.066667-42.666667 0-59.733333L452.266667 384 183.466667 115.2c-17.066667-17.066667-17.066667-42.666667 0-59.733333 8.533333-8.533333 19.2-12.8 29.866666-12.8s21.333333 4.266667 29.866667 12.8L512 324.266667l268.8-268.8c8.533333-8.533333 19.2-12.8 29.866667-12.8s21.333333 4.266667 29.866666 12.8c17.066667 17.066667 17.066667 42.666667 0 59.733333L571.733333 384z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="arrow-down-bold" unicode="" d="M904.533333 584.5333330000001c-17.066667 17.066667-42.666667 17.066667-59.733333 0L512 251.73333300000002 179.2 584.5333330000001c-17.066667 17.066667-42.666667 17.066667-59.733333 0-17.066667-17.066667-17.066667-42.666667 0-59.733333l362.666666-362.666667c8.533333-8.533333 19.2-12.8 29.866667-12.8s21.333333 4.266667 29.866667 12.8l362.666666 362.666667c17.066667 17.066667 17.066667 42.666667 0 59.733333z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="minus-bold" unicode="" d="M853.333333 341.333333H170.666667c-23.466667 0-42.666667 19.2-42.666667 42.666667s19.2 42.666667 42.666667 42.666667h682.666666c23.466667 0 42.666667-19.2 42.666667-42.666667s-19.2-42.666667-42.666667-42.666667z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="arrow-right-bold" unicode="" d="M731.733333 416l-384 341.333333c-17.066667 14.933333-44.8 14.933333-59.733333-4.266666-14.933333-17.066667-14.933333-44.8 4.266667-59.733334L640 384 292.266667 74.666667c-17.066667-14.933333-19.2-42.666667-4.266667-59.733334 8.533333-8.533333 19.2-14.933333 32-14.933333 10.666667 0 19.2 4.266667 27.733333 10.666667l384 341.333333c8.533333 8.533333 14.933333 19.2 14.933334 32s-4.266667 23.466667-14.933334 32z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="select-bold" unicode="" d="M883.2 648.533333c-17.066667 17.066667-44.8 17.066667-59.733333 0L409.6 230.4l-209.066667 204.8c-17.066667 17.066667-44.8 17.066667-59.733333 0-17.066667-17.066667-17.066667-44.8 0-59.733333l238.933333-234.666667c8.533333-8.533333 19.2-12.8 29.866667-12.8 10.666667 0 21.333333 4.266667 29.866667 12.8l443.733333 448c17.066667 17.066667 17.066667 42.666667 0 59.733333z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
|
||||
|
||||
</font>
|
||||
</defs></svg>
|
||||
|
Before Width: | Height: | Size: 106 KiB |
@@ -1,528 +0,0 @@
|
||||
layui.define(['message', 'table', 'jquery', 'element', 'yaml', 'form', 'tab', 'menu', 'frame', 'theme', 'convert'],
|
||||
function(exports) {
|
||||
"use strict";
|
||||
|
||||
var $ = layui.jquery,
|
||||
form = layui.form,
|
||||
element = layui.element,
|
||||
yaml = layui.yaml,
|
||||
pearTab = layui.tab,
|
||||
convert = layui.convert,
|
||||
pearMenu = layui.menu,
|
||||
pearFrame = layui.frame,
|
||||
pearTheme = layui.theme,
|
||||
message = layui.message;
|
||||
|
||||
var bodyFrame;
|
||||
var sideMenu;
|
||||
var bodyTab;
|
||||
var config;
|
||||
var logout = function() {};
|
||||
var msgInstance;
|
||||
|
||||
var body = $('body');
|
||||
|
||||
var pearAdmin = new function() {
|
||||
|
||||
// 默认配置
|
||||
var configType = 'yml';
|
||||
var configPath = 'pear.configs.yml';
|
||||
|
||||
this.setConfigPath = function(path) {
|
||||
configPath = path;
|
||||
}
|
||||
|
||||
this.setConfigType = function(type) {
|
||||
configType = type;
|
||||
}
|
||||
|
||||
this.setAvatar = function(url, username) {
|
||||
var image = new Image();
|
||||
image.src = url || "admin/images/avatar.jpg";
|
||||
image.onload = function() {
|
||||
$(".layui-nav-img").attr("src", convert.imageToBase64(image));
|
||||
}
|
||||
$(".layui-nav-img").parent().append(username);
|
||||
}
|
||||
|
||||
this.render = function(initConfig) {
|
||||
if (initConfig !== undefined) {
|
||||
applyConfig(initConfig);
|
||||
} else {
|
||||
applyConfig(pearAdmin.readConfig());
|
||||
}
|
||||
}
|
||||
|
||||
this.readConfig = function() {
|
||||
if (configType === "yml") {
|
||||
return yaml.load(configPath);
|
||||
} else {
|
||||
var data;
|
||||
$.ajax({
|
||||
url: configPath,
|
||||
type: 'get',
|
||||
dataType: 'json',
|
||||
async: false,
|
||||
success: function(result) {
|
||||
data = result;
|
||||
}
|
||||
})
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
this.messageRender = function(option) {
|
||||
var option = {
|
||||
elem: '.message',
|
||||
url: option.header.message,
|
||||
height: '250px'
|
||||
};
|
||||
msgInstance = message.render(option);
|
||||
}
|
||||
|
||||
this.logoRender = function(param) {
|
||||
$(".layui-logo .logo").attr("src", param.logo.image);
|
||||
$(".layui-logo .title").html(param.logo.title);
|
||||
}
|
||||
|
||||
this.menuRender = function(param) {
|
||||
sideMenu = pearMenu.render({
|
||||
elem: 'sideMenu',
|
||||
async: param.menu.async !== undefined ? param.menu.async : true,
|
||||
theme: "dark-theme",
|
||||
height: '100%',
|
||||
method: param.menu.method,
|
||||
control: param.menu.control ? 'control' : false, // control
|
||||
defaultMenu: 0,
|
||||
accordion: param.menu.accordion,
|
||||
url: param.menu.data,
|
||||
data: param.menu.data, //async为false时,传入菜单数组
|
||||
parseData: false,
|
||||
change: function() {
|
||||
compatible();
|
||||
},
|
||||
done: function() {
|
||||
sideMenu.selectItem(param.menu.select);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
this.bodyRender = function(param) {
|
||||
body.on("click", ".refresh", function() {
|
||||
var refreshA = $(".refresh a");
|
||||
refreshA.removeClass("layui-icon-refresh-1");
|
||||
refreshA.addClass("layui-anim");
|
||||
refreshA.addClass("layui-anim-rotate");
|
||||
refreshA.addClass("layui-anim-loop");
|
||||
refreshA.addClass("layui-icon-loading");
|
||||
if (param.tab.muiltTab) bodyTab.refresh(400);
|
||||
else bodyFrame.refresh(400);
|
||||
setTimeout(function() {
|
||||
refreshA.addClass("layui-icon-refresh-1");
|
||||
refreshA.removeClass("layui-anim");
|
||||
refreshA.removeClass("layui-anim-rotate");
|
||||
refreshA.removeClass("layui-anim-loop");
|
||||
refreshA.removeClass("layui-icon-loading");
|
||||
}, 600)
|
||||
})
|
||||
if (param.tab.muiltTab) {
|
||||
bodyTab = pearTab.render({
|
||||
elem: 'content',
|
||||
roll: true,
|
||||
tool: true,
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
session: param.tab.session,
|
||||
index: 0,
|
||||
tabMax: param.tab.tabMax,
|
||||
closeEvent: function(id) {
|
||||
sideMenu.selectItem(id);
|
||||
},
|
||||
data: [{
|
||||
id: param.tab.index.id,
|
||||
url: param.tab.index.href,
|
||||
title: param.tab.index.title,
|
||||
close: false
|
||||
}],
|
||||
success: function(id) {
|
||||
if (param.tab.session) {
|
||||
setTimeout(function() {
|
||||
sideMenu.selectItem(id);
|
||||
bodyTab.positionTab();
|
||||
}, 500)
|
||||
}
|
||||
}
|
||||
});
|
||||
bodyTab.click(function(id) {
|
||||
if (!param.tab.keepState) {
|
||||
bodyTab.refresh(false);
|
||||
}
|
||||
bodyTab.positionTab();
|
||||
sideMenu.selectItem(id);
|
||||
})
|
||||
|
||||
sideMenu.click(function(dom, data) {
|
||||
bodyTab.addTabOnly({
|
||||
id: data.menuId,
|
||||
title: data.menuTitle,
|
||||
url: data.menuUrl,
|
||||
icon: data.menuIcon,
|
||||
close: true
|
||||
}, 300);
|
||||
|
||||
compatible();
|
||||
|
||||
})
|
||||
} else {
|
||||
bodyFrame = pearFrame.render({
|
||||
elem: 'content',
|
||||
title: '首页',
|
||||
url: param.tab.index.href,
|
||||
width: '100%',
|
||||
height: '100%'
|
||||
});
|
||||
|
||||
sideMenu.click(function(dom, data) {
|
||||
bodyFrame.changePage(data.menuUrl, data.menuPath, true);
|
||||
compatible()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
this.keepLoad = function(param) {
|
||||
compatible()
|
||||
setTimeout(function() {
|
||||
$(".loader-main").fadeOut(200);
|
||||
}, param.other.keepLoad)
|
||||
}
|
||||
|
||||
this.themeRender = function(option) {
|
||||
if (option.theme.allowCustom === false) {
|
||||
$(".setting").remove();
|
||||
}
|
||||
var colorId = localStorage.getItem("theme-color");
|
||||
var currentColor = getColorById(colorId);
|
||||
localStorage.setItem("theme-color", currentColor.id);
|
||||
localStorage.setItem("theme-color-context", currentColor.color);
|
||||
pearTheme.changeTheme(window, option.other.autoHead);
|
||||
var menu = localStorage.getItem("theme-menu");
|
||||
if (menu == null) {
|
||||
menu = option.theme.defaultMenu;
|
||||
} else {
|
||||
if (option.theme.allowCustom === false) {
|
||||
menu = option.theme.defaultMenu;
|
||||
}
|
||||
}
|
||||
localStorage.setItem("theme-menu", menu);
|
||||
this.menuSkin(menu);
|
||||
}
|
||||
|
||||
this.menuSkin = function(theme) {
|
||||
var pearAdmin = $(".pear-admin");
|
||||
pearAdmin.removeClass("light-theme");
|
||||
pearAdmin.removeClass("dark-theme");
|
||||
pearAdmin.addClass(theme);
|
||||
}
|
||||
|
||||
this.logout = function(callback) {
|
||||
logout = callback;
|
||||
}
|
||||
|
||||
this.message = function(callback) {
|
||||
if (callback != null) {
|
||||
msgInstance.click(callback);
|
||||
} else {
|
||||
msgInstance.click(messageTip);
|
||||
}
|
||||
}
|
||||
|
||||
this.jump = function(id, title, url) {
|
||||
if (config.tab.muiltTab) {
|
||||
bodyTab.addTabOnly({
|
||||
id: id,
|
||||
title: title,
|
||||
url: url,
|
||||
icon: null,
|
||||
close: true
|
||||
}, 300);
|
||||
} else {
|
||||
sideMenu.selectItem(id);
|
||||
bodyFrame.changePage(url, title, true);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var messageTip = function(id, title, context, form) {
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: '消息', //标题
|
||||
area: ['390px', '330px'], //宽高
|
||||
shade: 0.4, //遮罩透明度
|
||||
content: "<div style='background-color:whitesmoke;'><div class='layui-card'><div class='layui-card-body'>来源 : " +
|
||||
form + "</div><div class='layui-card-header' >标题 : " + title +
|
||||
"</div><div class='layui-card-body' >内容 : " + context + "</div></div></div>", //支持获取DOM元素
|
||||
btn: ['确认'], //按钮组
|
||||
scrollbar: false, //屏蔽浏览器滚动条
|
||||
yes: function(index) { //layer.msg('yes'); //点击确定回调
|
||||
layer.close(index);
|
||||
showToast();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function collaspe() {
|
||||
sideMenu.collaspe();
|
||||
var admin = $(".pear-admin");
|
||||
var left = $(".layui-icon-spread-left")
|
||||
var right = $(".layui-icon-shrink-right")
|
||||
if (admin.is(".pear-mini")) {
|
||||
left.addClass("layui-icon-shrink-right")
|
||||
left.removeClass("layui-icon-spread-left")
|
||||
admin.removeClass("pear-mini");
|
||||
} else {
|
||||
right.addClass("layui-icon-spread-left")
|
||||
right.removeClass("layui-icon-shrink-right")
|
||||
admin.addClass("pear-mini");
|
||||
}
|
||||
}
|
||||
|
||||
body.on("click", ".logout", function() {
|
||||
// 回调
|
||||
var result = logout();
|
||||
|
||||
if (result) {
|
||||
// 清空缓存
|
||||
bodyTab.clear();
|
||||
}
|
||||
})
|
||||
|
||||
body.on("click", ".collaspe,.pear-cover", function() {
|
||||
collaspe();
|
||||
});
|
||||
|
||||
body.on("click", ".fullScreen", function() {
|
||||
if ($(this).hasClass("layui-icon-screen-restore")) {
|
||||
screenFun(2).then(function() {
|
||||
$(".fullScreen").eq(0).removeClass("layui-icon-screen-restore");
|
||||
});
|
||||
} else {
|
||||
screenFun(1).then(function() {
|
||||
$(".fullScreen").eq(0).addClass("layui-icon-screen-restore");
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
body.on("click", '[user-menu-id]', function() {
|
||||
if (config.tab.muiltTab) {
|
||||
bodyTab.addTabOnly({
|
||||
id: $(this).attr("user-menu-id"),
|
||||
title: $(this).attr("user-menu-title"),
|
||||
url: $(this).attr("user-menu-url"),
|
||||
icon: "",
|
||||
close: true
|
||||
}, 300);
|
||||
} else {
|
||||
bodyFrame.changePage($(this).attr("user-menu-url"), "", true);
|
||||
}
|
||||
});
|
||||
|
||||
body.on("click", ".setting", function() {
|
||||
|
||||
var bgColorHtml =
|
||||
'<li class="layui-this" data-select-bgcolor="dark-theme" >' +
|
||||
'<a href="javascript:;" data-skin="skin-blue" style="" class="clearfix full-opacity-hover">' +
|
||||
'<div><span style="display:block; width: 20%; float: left; height: 12px; background: #28333E;"></span><span style="display:block; width: 80%; float: left; height: 12px; background: white;"></span></div>' +
|
||||
'<div><span style="display:block; width: 20%; float: left; height: 40px; background: #28333E;"></span><span style="display:block; width: 80%; float: left; height: 40px; background: #f4f5f7;"></span></div>' +
|
||||
'</a>' +
|
||||
'</li>';
|
||||
|
||||
bgColorHtml +=
|
||||
'<li data-select-bgcolor="light-theme" >' +
|
||||
'<a href="javascript:;" data-skin="skin-blue" style="" class="clearfix full-opacity-hover">' +
|
||||
'<div><span style="display:block; width: 20%; float: left; height: 12px; background: white;"></span><span style="display:block; width: 80%; float: left; height: 12px; background: white;"></span></div>' +
|
||||
'<div><span style="display:block; width: 20%; float: left; height: 40px; background: white;"></span><span style="display:block; width: 80%; float: left; height: 40px; background: #f4f5f7;"></span></div>' +
|
||||
'</a>' +
|
||||
'</li>';
|
||||
|
||||
var html =
|
||||
'<div class="pearone-color">\n' +
|
||||
'<div class="color-title">整体风格</div>\n' +
|
||||
'<div class="color-content">\n' +
|
||||
'<ul>\n' + bgColorHtml + '</ul>\n' +
|
||||
'</div>\n' +
|
||||
'</div>';
|
||||
|
||||
layer.open({
|
||||
type: 1,
|
||||
offset: 'r',
|
||||
area: ['320px', '100%'],
|
||||
title: false,
|
||||
shade: 0.1,
|
||||
closeBtn: 0,
|
||||
shadeClose: false,
|
||||
anim: -1,
|
||||
skin: 'layer-anim-right',
|
||||
move: false,
|
||||
content: html + buildColorHtml() + buildLinkHtml() + bottomTool(),
|
||||
success: function(layero, index) {
|
||||
|
||||
var color = localStorage.getItem("theme-color");
|
||||
var menu = localStorage.getItem("theme-menu");
|
||||
|
||||
if (color !== "null") {
|
||||
$(".select-color-item").removeClass("layui-icon").removeClass("layui-icon-ok");
|
||||
$("*[color-id='" + color + "']").addClass("layui-icon").addClass("layui-icon-ok");
|
||||
}
|
||||
if (menu !== "null") {
|
||||
$("*[data-select-bgcolor]").removeClass("layui-this");
|
||||
$("[data-select-bgcolor='" + menu + "']").addClass("layui-this");
|
||||
}
|
||||
$('#layui-layer-shade' + index).click(function() {
|
||||
var $layero = $('#layui-layer' + index);
|
||||
$layero.animate({
|
||||
left: $layero.offset().left + $layero.width()
|
||||
}, 200, function() {
|
||||
layer.close(index);
|
||||
});
|
||||
})
|
||||
|
||||
$('#closeTheme').click(function() {
|
||||
var $layero = $('#layui-layer' + index);
|
||||
$layero.animate({
|
||||
left: $layero.offset().left + $layero.width()
|
||||
}, 200, function() {
|
||||
layer.close(index);
|
||||
});
|
||||
})
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function bottomTool() {
|
||||
return "<button id='closeTheme' style='position: absolute;bottom: 20px;left: 20px;' class='pear-btn'>关闭</button>"
|
||||
}
|
||||
|
||||
body.on('click', '[data-select-bgcolor]', function() {
|
||||
var theme = $(this).attr('data-select-bgcolor');
|
||||
$('[data-select-bgcolor]').removeClass("layui-this");
|
||||
$(this).addClass("layui-this");
|
||||
localStorage.setItem("theme-menu", theme);
|
||||
pearAdmin.menuSkin(theme);
|
||||
});
|
||||
|
||||
body.on('click', '.select-color-item', function() {
|
||||
$(".select-color-item").removeClass("layui-icon").removeClass("layui-icon-ok");
|
||||
$(this).addClass("layui-icon").addClass("layui-icon-ok");
|
||||
var colorId = $(".select-color-item.layui-icon-ok").attr("color-id");
|
||||
var currentColor = getColorById(colorId);
|
||||
localStorage.setItem("theme-color", currentColor.id);
|
||||
localStorage.setItem("theme-color-context", currentColor.color);
|
||||
pearTheme.changeTheme(window, config.other.autoHead);
|
||||
});
|
||||
|
||||
function applyConfig(param) {
|
||||
config = param;
|
||||
pearAdmin.logoRender(param);
|
||||
pearAdmin.menuRender(param);
|
||||
pearAdmin.bodyRender(param);
|
||||
pearAdmin.themeRender(param);
|
||||
pearAdmin.keepLoad(param);
|
||||
if (param.header.message != false) {
|
||||
pearAdmin.messageRender(param);
|
||||
}
|
||||
}
|
||||
|
||||
function getColorById(id) {
|
||||
var color;
|
||||
var flag = false;
|
||||
$.each(config.colors, function(i, value) {
|
||||
if (value.id === id) {
|
||||
color = value;
|
||||
flag = true;
|
||||
}
|
||||
})
|
||||
if (flag === false || config.theme.allowCustom === false) {
|
||||
$.each(config.colors, function(i, value) {
|
||||
if (value.id === config.theme.defaultColor) {
|
||||
color = value;
|
||||
}
|
||||
})
|
||||
}
|
||||
return color;
|
||||
}
|
||||
|
||||
function buildLinkHtml() {
|
||||
var links = "";
|
||||
$.each(config.links, function(i, value) {
|
||||
// value.target 存在,则为新窗口打开,增加 target="_blank" 属性
|
||||
links += '<a class="more-menu-item" href="' + value.href + '" '+(value.target?' target="_blank" ':'')+'>' +
|
||||
'<i class="' + value.icon + '" style="font-size: 19px;"></i> ' + value.title +
|
||||
'</a>'
|
||||
})
|
||||
return '<div class="more-menu-list">' + links + '</div>';
|
||||
}
|
||||
|
||||
function buildColorHtml() {
|
||||
var colors = "";
|
||||
$.each(config.colors, function(i, value) {
|
||||
colors += "<span class='select-color-item' color-id='" + value.id + "' style='background-color:" + value.color +
|
||||
";'></span>";
|
||||
})
|
||||
return "<div class='select-color'><div class='select-color-title'>主题配色</div><div class='select-color-content'>" +
|
||||
colors + "</div></div>"
|
||||
}
|
||||
|
||||
function compatible() {
|
||||
if ($(window).width() <= 768) {
|
||||
collaspe()
|
||||
}
|
||||
}
|
||||
|
||||
function screenFun(num) {
|
||||
num = num || 1;
|
||||
num = num * 1;
|
||||
var docElm = document.documentElement;
|
||||
switch (num) {
|
||||
case 1:
|
||||
if (docElm.requestFullscreen) {
|
||||
docElm.requestFullscreen();
|
||||
} else if (docElm.mozRequestFullScreen) {
|
||||
docElm.mozRequestFullScreen();
|
||||
} else if (docElm.webkitRequestFullScreen) {
|
||||
docElm.webkitRequestFullScreen();
|
||||
} else if (docElm.msRequestFullscreen) {
|
||||
docElm.msRequestFullscreen();
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (document.exitFullscreen) {
|
||||
document.exitFullscreen();
|
||||
} else if (document.mozCancelFullScreen) {
|
||||
document.mozCancelFullScreen();
|
||||
} else if (document.webkitCancelFullScreen) {
|
||||
document.webkitCancelFullScreen();
|
||||
} else if (document.msExitFullscreen) {
|
||||
document.msExitFullscreen();
|
||||
}
|
||||
break;
|
||||
}
|
||||
return new Promise(function(res, rej) {
|
||||
res("返回值");
|
||||
});
|
||||
}
|
||||
|
||||
function isFullscreen() {
|
||||
return document.fullscreenElement ||
|
||||
document.msFullscreenElement ||
|
||||
document.mozFullScreenElement ||
|
||||
document.webkitFullscreenElement || false;
|
||||
}
|
||||
|
||||
window.onresize = function() {
|
||||
if (!isFullscreen()) {
|
||||
$(".fullScreen").eq(0).removeClass("layui-icon-screen-restore");
|
||||
}
|
||||
}
|
||||
|
||||
exports('admin', pearAdmin);
|
||||
})
|
||||
@@ -1,102 +0,0 @@
|
||||
layui.define(['table', 'laypage','jquery', 'element'], function(exports) {
|
||||
"use strict";
|
||||
|
||||
var MOD_NAME = 'card',
|
||||
$ = layui.jquery,
|
||||
element = layui.element,
|
||||
laypage = layui.laypage;
|
||||
|
||||
var pearCard = function(opt) {
|
||||
this.option = opt;
|
||||
};
|
||||
|
||||
pearCard.prototype.render = function(opt) {
|
||||
var option = {
|
||||
// 构建的模型
|
||||
elem: opt.elem,
|
||||
// 数据 url 连接
|
||||
url: opt.url,
|
||||
// lineSize 每行的个数
|
||||
lineSize: opt.lineSize ? opt.lineSize : 4,
|
||||
// 共多少个
|
||||
pageSize: opt.pageSize ? opt.pageSize : 12,
|
||||
// 当前页
|
||||
currentPage: opt.currentSize ? opt.currentSize : 0,
|
||||
// 完 成 函 数
|
||||
done: opt.done ? opt.done : function() {
|
||||
alert("跳转页面");
|
||||
}
|
||||
}
|
||||
// 根 据 请 求 方 式 获 取 数 据
|
||||
if (option.url != null) {
|
||||
// 复制数据
|
||||
option.data = getData(option.url).data;
|
||||
}
|
||||
|
||||
// 根据结果进行相应结构的创建
|
||||
var html = createComponent(option.data);
|
||||
|
||||
$(option.elem).html(html);
|
||||
|
||||
// 初始化分页组件
|
||||
laypage.render({
|
||||
elem: 'cardpage'
|
||||
,count: 100
|
||||
,layout: ['count', 'prev', 'page', 'next', 'limit', 'refresh', 'skip']
|
||||
,jump: function(obj){
|
||||
console.log(obj)
|
||||
}
|
||||
});
|
||||
|
||||
return new pearCard(option);
|
||||
}
|
||||
|
||||
function createComponent(data) {
|
||||
var html = "<div class='pear-card-component'>"
|
||||
var content = createCards(data);
|
||||
var page = "<div id='cardpage'></div>"
|
||||
content = content + page;
|
||||
html += content + "</div>"
|
||||
return html;
|
||||
}
|
||||
|
||||
|
||||
/** 创建指定数量的卡片 */
|
||||
function createCards(data) {
|
||||
|
||||
var content = "<div class='layui-row layui-col-space30'>";
|
||||
$.each(data, function(i, item) {
|
||||
|
||||
content += createCard(item);
|
||||
|
||||
})
|
||||
content += "</div>"
|
||||
return content;
|
||||
}
|
||||
|
||||
|
||||
/** 创建一个卡片 */
|
||||
function createCard(item) {
|
||||
|
||||
var card =
|
||||
'<div class="layui-col-md3 ew-datagrid-item" data-index="0" data-number="1"> <div class="project-list-item"> <img class="project-list-item-cover" src="'+item.image+'"> <div class="project-list-item-body"> <h2>'+item.title+'</h2> <div class="project-list-item-text layui-text">'+item.remark+'</div> <div class="project-list-item-desc"> <span class="time">'+item.time+'</span> <div class="ew-head-list"> <img class="ew-head-list-item" lay-tips="曲丽丽" lay-offset="0,-5px" src="https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png"> <img class="ew-head-list-item" lay-tips="王昭君" lay-offset="0,-5px" src="https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png"> <img class="ew-head-list-item" lay-tips="董娜娜" lay-offset="0,-5px" src="https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png"> </div> </div> </div> </div> </div>'
|
||||
|
||||
return card;
|
||||
}
|
||||
|
||||
/** 同 步 请 求 获 取 数 据 */
|
||||
function getData(url) {
|
||||
|
||||
$.ajaxSettings.async = false;
|
||||
var data = null;
|
||||
|
||||
$.get(url, function(result) {
|
||||
data = result;
|
||||
});
|
||||
|
||||
$.ajaxSettings.async = true;
|
||||
return data;
|
||||
}
|
||||
|
||||
exports(MOD_NAME, new pearCard());
|
||||
})
|
||||
@@ -1,185 +0,0 @@
|
||||
layui.define(['jquery', 'element'], function(exports) {
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* Drawer component
|
||||
* */
|
||||
var MOD_NAME = 'drawer',
|
||||
$ = layui.jquery,
|
||||
element = layui.element;
|
||||
|
||||
var drawer = new function() {
|
||||
|
||||
/**
|
||||
* open drawer
|
||||
* */
|
||||
this.open = function(option) {
|
||||
var obj = new mSlider({
|
||||
dom: option.dom,
|
||||
direction: option.direction,
|
||||
distance: option.distance,
|
||||
time: option.time ? option.time : 0,
|
||||
maskClose: option.maskClose,
|
||||
callback: option.success
|
||||
});
|
||||
obj.open();
|
||||
return obj;
|
||||
}
|
||||
|
||||
}
|
||||
exports(MOD_NAME, drawer);
|
||||
});
|
||||
|
||||
/**
|
||||
* 源码
|
||||
* */
|
||||
(function(b, c) {
|
||||
function a(d) {
|
||||
this.opts = {
|
||||
"direction": d.direction || "left",
|
||||
"distance": d.distance || "60%",
|
||||
"dom": this.Q(d.dom),
|
||||
"time": d.time || "",
|
||||
"maskClose": (d.maskClose + "").toString() !== "false" ? true : false,
|
||||
"callback": d.callback || ""
|
||||
};
|
||||
this.rnd = this.rnd();
|
||||
this.dom = this.opts.dom[0];
|
||||
this.wrap = "";
|
||||
this.inner = "";
|
||||
this.mask = "";
|
||||
this.init()
|
||||
}
|
||||
a.prototype = {
|
||||
Q: function(d) {
|
||||
return document.querySelectorAll(d)
|
||||
},
|
||||
isMobile: function() {
|
||||
return navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i) ? true : false
|
||||
},
|
||||
addEvent: function(f, e, d) {
|
||||
if (f.attachEvent) {
|
||||
f.attachEvent("on" + e, d)
|
||||
} else {
|
||||
f.addEventListener(e, d, false)
|
||||
}
|
||||
},
|
||||
rnd: function() {
|
||||
return Math.random().toString(36).substr(2, 6)
|
||||
},
|
||||
init: function() {
|
||||
var g = this;
|
||||
if (!g.dom) {
|
||||
console.log("未正确绑定弹窗容器");
|
||||
return
|
||||
}
|
||||
var d = document.createElement("div");
|
||||
var e = document.createElement("div");
|
||||
var f = document.createElement("div");
|
||||
d.setAttribute("class", "mSlider-main ms-" + g.rnd);
|
||||
e.setAttribute("class", "mSlider-inner");
|
||||
f.setAttribute("class", "mSlider-mask");
|
||||
g.Q("body")[0].appendChild(d);
|
||||
g.Q(".ms-" + g.rnd)[0].appendChild(e);
|
||||
g.Q(".ms-" + g.rnd)[0].appendChild(f);
|
||||
g.wrap = g.Q(".ms-" + g.rnd)[0];
|
||||
g.inner = g.Q(".ms-" + g.rnd + " .mSlider-inner")[0];
|
||||
g.mask = g.Q(".ms-" + g.rnd + " .mSlider-mask")[0];
|
||||
g.inner.appendChild(g.dom);
|
||||
switch (g.opts.direction) {
|
||||
case "top":
|
||||
g.top = "0";
|
||||
g.left = "0";
|
||||
g.width = "100%";
|
||||
g.height = g.opts.distance;
|
||||
g.translate = "0,-100%,0";
|
||||
break;
|
||||
case "bottom":
|
||||
g.bottom = "0";
|
||||
g.left = "0";
|
||||
g.width = "100%";
|
||||
g.height = g.opts.distance;
|
||||
g.translate = "0,100%,0";
|
||||
break;
|
||||
case "right":
|
||||
g.top = "0";
|
||||
g.right = "0";
|
||||
g.width = g.opts.distance;
|
||||
g.height = document.documentElement.clientHeight + "px";
|
||||
g.translate = "100%,0,0";
|
||||
break;
|
||||
default:
|
||||
g.top = "0";
|
||||
g.left = "0";
|
||||
g.width = g.opts.distance;
|
||||
g.height = document.documentElement.clientHeight + "px";
|
||||
g.translate = "-100%,0,0"
|
||||
}
|
||||
g.wrap.style.display = "none";
|
||||
g.wrap.style.position = "fixed";
|
||||
g.wrap.style.top = "0";
|
||||
g.wrap.style.left = "0";
|
||||
g.wrap.style.width = "100%";
|
||||
g.wrap.style.height = "100%";
|
||||
g.wrap.style.zIndex = 9999999;
|
||||
g.inner.style.position = "absolute";
|
||||
g.inner.style.top = g.top;
|
||||
g.inner.style.bottom = g.bottom;
|
||||
g.inner.style.left = g.left;
|
||||
g.inner.style.right = g.right;
|
||||
g.inner.style.width = g.width;
|
||||
g.inner.style.height = g.height;
|
||||
g.inner.style.backgroundColor = "#fff";
|
||||
g.inner.style.transform = "translate3d(" + g.translate + ")";
|
||||
g.inner.style.webkitTransition = "all .2s ease-out";
|
||||
g.inner.style.transition = "all .2s ease-out";
|
||||
g.inner.style.zIndex = 10000000;
|
||||
g.mask.style.width = "100%";
|
||||
g.mask.style.height = "100%";
|
||||
g.mask.style.opacity = "0.1";
|
||||
g.mask.style.backgroundColor = "black";
|
||||
g.mask.style.zIndex = "9999998";
|
||||
g.mask.style.webkitBackfaceVisibility = "hidden";
|
||||
g.events()
|
||||
},
|
||||
open: function() {
|
||||
var d = this;
|
||||
d.wrap.style.display = "block";
|
||||
|
||||
setTimeout(function() {
|
||||
d.inner.style.transform = "translate3d(0,0,0)";
|
||||
d.inner.style.webkitTransform = "translate3d(0,0,0)";
|
||||
d.mask.style.opacity = 0.1
|
||||
}, 30);
|
||||
if (d.opts.time) {
|
||||
d.timer = setTimeout(function() {
|
||||
d.close()
|
||||
}, d.opts.time)
|
||||
}
|
||||
},
|
||||
close: function() {
|
||||
var d = this;
|
||||
d.timer && clearTimeout(d.timer);
|
||||
d.inner.style.webkitTransform = "translate3d(" + d.translate + ")";
|
||||
d.inner.style.transform = "translate3d(" + d.translate + ")";
|
||||
d.mask.style.opacity = 0;
|
||||
setTimeout(function() {
|
||||
d.wrap.style.display = "none";
|
||||
d.timer = null;
|
||||
d.opts.callback && d.opts.callback()
|
||||
}, 300)
|
||||
},
|
||||
events: function() {
|
||||
var d = this;
|
||||
d.addEvent(d.mask, "touchmove", function(f) {
|
||||
f.preventDefault()
|
||||
});
|
||||
d.addEvent(d.mask, (d.isMobile() ? "touchend" : "click"), function(f) {
|
||||
if (d.opts.maskClose) {
|
||||
d.close()
|
||||
}
|
||||
})
|
||||
}
|
||||
};
|
||||
b.mSlider = a
|
||||
})(window);
|
||||
@@ -1,81 +0,0 @@
|
||||
layui.define(['table', 'jquery', 'element'], function (exports) {
|
||||
"use strict";
|
||||
|
||||
var MOD_NAME = 'frame',
|
||||
$ = layui.jquery,
|
||||
element = layui.element;
|
||||
|
||||
var pearFrame = function (opt) {
|
||||
this.option = opt;
|
||||
};
|
||||
|
||||
pearFrame.prototype.render = function (opt) {
|
||||
var option = {
|
||||
elem:opt.elem,
|
||||
url:opt.url,
|
||||
title:opt.title,
|
||||
width:opt.width,
|
||||
height:opt.height,
|
||||
done:opt.done ? opt.done: function(){ console.log("菜单渲染成功");}
|
||||
}
|
||||
createFrameHTML(option);
|
||||
$("#"+option.elem).width(option.width);
|
||||
$("#"+option.elem).height(option.height);
|
||||
return new pearFrame(option);
|
||||
}
|
||||
|
||||
pearFrame.prototype.changePage = function(url,title,loading){
|
||||
if(loading){
|
||||
var loading = $("#"+this.option.elem).find(".pear-frame-loading");
|
||||
loading.css({display:'block'});
|
||||
}
|
||||
$("#"+this.option.elem+" iframe").attr("src",url);
|
||||
$("#"+this.option.elem+" .title").html(title);
|
||||
if(loading){
|
||||
var loading = $("#"+this.option.elem).find(".pear-frame-loading");
|
||||
setTimeout(function(){
|
||||
loading.css({display:'none'});
|
||||
},800)
|
||||
}
|
||||
}
|
||||
|
||||
pearFrame.prototype.changePageByElement = function(elem,url,title,loading){
|
||||
if(loading){
|
||||
var loading = $("#"+elem).find(".pear-frame-loading");
|
||||
loading.css({display:'block'});
|
||||
}
|
||||
$("#"+elem+" iframe").attr("src",url);
|
||||
$("#"+elem+" .title").html(title);
|
||||
if(loading){
|
||||
var loading = $("#"+elem).find(".pear-frame-loading");
|
||||
setTimeout(function(){
|
||||
loading.css({display:'none'});
|
||||
},800)
|
||||
}
|
||||
}
|
||||
|
||||
pearFrame.prototype.refresh = function (time) {
|
||||
if(time!=false){
|
||||
var loading = $("#"+this.option.elem).find(".pear-frame-loading");
|
||||
loading.css({display:'block'});
|
||||
if(time!=0){
|
||||
setTimeout(function(){
|
||||
loading.css({display:'none'});
|
||||
},time)
|
||||
}
|
||||
}
|
||||
$("#"+this.option.elem).find("iframe")[0].contentWindow.location.reload(true);
|
||||
}
|
||||
|
||||
function createFrameHTML(option){
|
||||
var header = "<div class='pear-frame-title'><div class='dot'></div><div class='title'>"+option.title+"</div></div>"
|
||||
var iframe = "<iframe class='pear-frame-content' style='width:100%;height:100%;' scrolling='auto' frameborder='0' src='"+option.url+"' ></iframe>";
|
||||
var loading = '<div class="pear-frame-loading">'+
|
||||
'<div class="ball-loader">'+
|
||||
'<span></span><span></span><span></span><span></span>'+
|
||||
'</div>'+
|
||||
'</div></div>';
|
||||
$("#"+option.elem).html("<div class='pear-frame'>"+header+iframe+loading+"</div>");
|
||||
}
|
||||
exports(MOD_NAME,new pearFrame());
|
||||
})
|
||||
@@ -1,388 +0,0 @@
|
||||
layui.define(['laypage', 'form'], function (exports) {
|
||||
"use strict";
|
||||
|
||||
var IconPicker =function () {
|
||||
this.v = '1.1';
|
||||
}, _MOD = 'iconPicker',
|
||||
_this = this,
|
||||
$ = layui.jquery,
|
||||
laypage = layui.laypage,
|
||||
form = layui.form,
|
||||
BODY = 'body',
|
||||
TIPS = '请选择图标';
|
||||
|
||||
IconPicker.prototype.render = function(options){
|
||||
var opts = options,
|
||||
// DOM选择器
|
||||
elem = opts.elem,
|
||||
// 数据类型:fontClass/unicode
|
||||
type = opts.type == null ? 'fontClass' : opts.type,
|
||||
// 是否分页:true/false
|
||||
page = opts.page == null ? true : opts.page,
|
||||
// 每页显示数量
|
||||
limit = opts.limit == null ? 12 : opts.limit,
|
||||
// 是否开启搜索:true/false
|
||||
search = opts.search == null ? true : opts.search,
|
||||
// 每个图标格子的宽度:'43px'或'20%'
|
||||
cellWidth = opts.cellWidth,
|
||||
// 点击回调
|
||||
click = opts.click,
|
||||
// 渲染成功后的回调
|
||||
success = opts.success,
|
||||
// json数据
|
||||
data = {},
|
||||
// 唯一标识
|
||||
tmp = new Date().getTime(),
|
||||
// 是否使用的class数据
|
||||
isFontClass = opts.type === 'fontClass',
|
||||
// 初始化时input的值
|
||||
ORIGINAL_ELEM_VALUE = $(elem).val(),
|
||||
TITLE = 'layui-select-title',
|
||||
TITLE_ID = 'layui-select-title-' + tmp,
|
||||
ICON_BODY = 'layui-iconpicker-' + tmp,
|
||||
PICKER_BODY = 'layui-iconpicker-body-' + tmp,
|
||||
PAGE_ID = 'layui-iconpicker-page-' + tmp,
|
||||
LIST_BOX = 'layui-iconpicker-list-box',
|
||||
selected = 'layui-form-selected',
|
||||
unselect = 'layui-unselect';
|
||||
|
||||
var a = {
|
||||
init: function () {
|
||||
data = common.getData[type]();
|
||||
|
||||
a.hideElem().createSelect().createBody().toggleSelect();
|
||||
a.preventEvent().inputListen();
|
||||
common.loadCss();
|
||||
|
||||
if (success) {
|
||||
success(this.successHandle());
|
||||
}
|
||||
|
||||
return a;
|
||||
},
|
||||
successHandle: function(){
|
||||
var d = {
|
||||
options: opts,
|
||||
data: data,
|
||||
id: tmp,
|
||||
elem: $('#' + ICON_BODY)
|
||||
};
|
||||
return d;
|
||||
},
|
||||
/**
|
||||
* 隐藏elem
|
||||
*/
|
||||
hideElem: function () {
|
||||
$(elem).hide();
|
||||
return a;
|
||||
},
|
||||
/**
|
||||
* 绘制select下拉选择框
|
||||
*/
|
||||
createSelect: function () {
|
||||
var oriIcon = '<i class="layui-icon">';
|
||||
|
||||
// 默认图标
|
||||
if(ORIGINAL_ELEM_VALUE === '') {
|
||||
if(isFontClass) {
|
||||
ORIGINAL_ELEM_VALUE = 'layui-icon-circle-dot';
|
||||
} else {
|
||||
ORIGINAL_ELEM_VALUE = '';
|
||||
}
|
||||
}
|
||||
|
||||
if (isFontClass) {
|
||||
oriIcon = '<i class="layui-icon '+ ORIGINAL_ELEM_VALUE +'">';
|
||||
} else {
|
||||
oriIcon += ORIGINAL_ELEM_VALUE;
|
||||
}
|
||||
oriIcon += '</i>';
|
||||
|
||||
var selectHtml = '<div class="layui-iconpicker layui-unselect layui-form-select" id="'+ ICON_BODY +'">' +
|
||||
'<div class="'+ TITLE +'" id="'+ TITLE_ID +'">' +
|
||||
'<div class="layui-iconpicker-item">'+
|
||||
'<span class="layui-iconpicker-icon layui-unselect">' +
|
||||
oriIcon +
|
||||
'</span>'+
|
||||
'<i class="layui-edge"></i>' +
|
||||
'</div>'+
|
||||
'</div>' +
|
||||
'<div class="layui-anim layui-anim-upbit" style="">' +
|
||||
'123' +
|
||||
'</div>';
|
||||
$(elem).after(selectHtml);
|
||||
return a;
|
||||
},
|
||||
/**
|
||||
* 展开/折叠下拉框
|
||||
*/
|
||||
toggleSelect: function () {
|
||||
var item = '#' + TITLE_ID + ' .layui-iconpicker-item,#' + TITLE_ID + ' .layui-iconpicker-item .layui-edge';
|
||||
a.event('click', item, function (e) {
|
||||
var $icon = $('#' + ICON_BODY);
|
||||
if ($icon.hasClass(selected)) {
|
||||
$icon.removeClass(selected).addClass(unselect);
|
||||
} else {
|
||||
// 隐藏其他picker
|
||||
$('.layui-form-select').removeClass(selected);
|
||||
// 显示当前picker
|
||||
$icon.addClass(selected).removeClass(unselect);
|
||||
}
|
||||
e.stopPropagation();
|
||||
});
|
||||
return a;
|
||||
},
|
||||
/**
|
||||
* 绘制主体部分
|
||||
*/
|
||||
createBody: function () {
|
||||
// 获取数据
|
||||
var searchHtml = '';
|
||||
|
||||
if (search) {
|
||||
searchHtml = '<div class="layui-iconpicker-search">' +
|
||||
'<input class="layui-input">' +
|
||||
'<i class="layui-icon"></i>' +
|
||||
'</div>';
|
||||
}
|
||||
|
||||
// 组合dom
|
||||
var bodyHtml = '<div class="layui-iconpicker-body" id="'+ PICKER_BODY +'">' +
|
||||
searchHtml +
|
||||
'<div class="'+ LIST_BOX +'"></div> '+
|
||||
'</div>';
|
||||
$('#' + ICON_BODY).find('.layui-anim').eq(0).html(bodyHtml);
|
||||
a.search().createList().check().page();
|
||||
|
||||
return a;
|
||||
},
|
||||
/**
|
||||
* 绘制图标列表
|
||||
* @param text 模糊查询关键字
|
||||
* @returns {string}
|
||||
*/
|
||||
createList: function (text) {
|
||||
var d = data,
|
||||
l = d.length,
|
||||
pageHtml = '',
|
||||
listHtml = $('<div class="layui-iconpicker-list">')//'<div class="layui-iconpicker-list">';
|
||||
|
||||
// 计算分页数据
|
||||
var _limit = limit, // 每页显示数量
|
||||
_pages = l % _limit === 0 ? l / _limit : parseInt(l / _limit + 1), // 总计多少页
|
||||
_id = PAGE_ID;
|
||||
|
||||
// 图标列表
|
||||
var icons = [];
|
||||
|
||||
for (var i = 0; i < l; i++) {
|
||||
var obj = d[i];
|
||||
|
||||
// 判断是否模糊查询
|
||||
if (text && obj.indexOf(text) === -1) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 是否自定义格子宽度
|
||||
var style = '';
|
||||
if (cellWidth !== null) {
|
||||
style += ' style="width:' + cellWidth + '"';
|
||||
}
|
||||
|
||||
// 每个图标dom
|
||||
var icon = '<div class="layui-iconpicker-icon-item" title="'+ obj +'" '+ style +'>';
|
||||
if (isFontClass){
|
||||
icon += '<i class="layui-icon '+ obj +'"></i>';
|
||||
} else {
|
||||
icon += '<i class="layui-icon">'+ obj.replace('amp;', '') +'</i>';
|
||||
}
|
||||
icon += '</div>';
|
||||
|
||||
icons.push(icon);
|
||||
}
|
||||
|
||||
// 查询出图标后再分页
|
||||
l = icons.length;
|
||||
_pages = l % _limit === 0 ? l / _limit : parseInt(l / _limit + 1);
|
||||
for (var i = 0; i < _pages; i++) {
|
||||
// 按limit分块
|
||||
var lm = $('<div class="layui-iconpicker-icon-limit" id="layui-iconpicker-icon-limit-' + tmp + (i+1) +'">');
|
||||
|
||||
for (var j = i * _limit; j < (i+1) * _limit && j < l; j++) {
|
||||
lm.append(icons[j]);
|
||||
}
|
||||
|
||||
listHtml.append(lm);
|
||||
}
|
||||
|
||||
// 无数据
|
||||
if (l === 0) {
|
||||
listHtml.append('<p class="layui-iconpicker-tips">无数据</p>');
|
||||
}
|
||||
|
||||
// 判断是否分页
|
||||
if (page){
|
||||
$('#' + PICKER_BODY).addClass('layui-iconpicker-body-page');
|
||||
pageHtml = '<div class="layui-iconpicker-page" id="'+ PAGE_ID +'">' +
|
||||
'<div class="layui-iconpicker-page-count">' +
|
||||
'<span id="'+ PAGE_ID +'-current">1</span>/' +
|
||||
'<span id="'+ PAGE_ID +'-pages">'+ _pages +'</span>' +
|
||||
' (<span id="'+ PAGE_ID +'-length">'+ l +'</span>)' +
|
||||
'</div>' +
|
||||
'<div class="layui-iconpicker-page-operate">' +
|
||||
'<i class="layui-icon" id="'+ PAGE_ID +'-prev" data-index="0" prev></i> ' +
|
||||
'<i class="layui-icon" id="'+ PAGE_ID +'-next" data-index="2" next></i> ' +
|
||||
'</div>' +
|
||||
'</div>';
|
||||
}
|
||||
|
||||
$('#' + ICON_BODY).find('.layui-anim').find('.' + LIST_BOX).html('').append(listHtml).append(pageHtml);
|
||||
return a;
|
||||
},
|
||||
preventEvent: function() {
|
||||
var item = '#' + ICON_BODY + ' .layui-anim';
|
||||
a.event('click', item, function (e) {
|
||||
e.stopPropagation();
|
||||
});
|
||||
return a;
|
||||
},
|
||||
page: function () {
|
||||
var icon = '#' + PAGE_ID + ' .layui-iconpicker-page-operate .layui-icon';
|
||||
|
||||
$(icon).unbind('click');
|
||||
a.event('click', icon, function (e) {
|
||||
var elem = e.currentTarget,
|
||||
total = parseInt($('#' +PAGE_ID + '-pages').html()),
|
||||
isPrev = $(elem).attr('prev') !== undefined,
|
||||
// 按钮上标的页码
|
||||
index = parseInt($(elem).attr('data-index')),
|
||||
$cur = $('#' +PAGE_ID + '-current'),
|
||||
// 点击时正在显示的页码
|
||||
current = parseInt($cur.html());
|
||||
|
||||
// 分页数据
|
||||
if (isPrev && current > 1) {
|
||||
current=current-1;
|
||||
$(icon + '[prev]').attr('data-index', current);
|
||||
} else if (!isPrev && current < total){
|
||||
current=current+1;
|
||||
$(icon + '[next]').attr('data-index', current);
|
||||
}
|
||||
$cur.html(current);
|
||||
|
||||
// 图标数据
|
||||
$('#'+ ICON_BODY + ' .layui-iconpicker-icon-limit').hide();
|
||||
$('#layui-iconpicker-icon-limit-' + tmp + current).show();
|
||||
e.stopPropagation();
|
||||
});
|
||||
return a;
|
||||
},
|
||||
/**
|
||||
* 搜索
|
||||
*/
|
||||
search: function () {
|
||||
var item = '#' + PICKER_BODY + ' .layui-iconpicker-search .layui-input';
|
||||
a.event('input propertychange', item, function (e) {
|
||||
var elem = e.target,
|
||||
t = $(elem).val();
|
||||
a.createList(t);
|
||||
});
|
||||
return a;
|
||||
},
|
||||
/**
|
||||
* 点击选中图标
|
||||
*/
|
||||
check: function () {
|
||||
var item = '#' + PICKER_BODY + ' .layui-iconpicker-icon-item';
|
||||
a.event('click', item, function (e) {
|
||||
var el = $(e.currentTarget).find('.layui-icon'),
|
||||
icon = '';
|
||||
if (isFontClass) {
|
||||
var clsArr = el.attr('class').split(/[\s\n]/),
|
||||
cls = clsArr[1],
|
||||
icon = cls;
|
||||
$('#' + TITLE_ID).find('.layui-iconpicker-item .layui-icon').html('').attr('class', clsArr.join(' '));
|
||||
} else {
|
||||
var cls = el.html(),
|
||||
icon = cls;
|
||||
$('#' + TITLE_ID).find('.layui-iconpicker-item .layui-icon').html(icon);
|
||||
}
|
||||
|
||||
$('#' + ICON_BODY).removeClass(selected).addClass(unselect);
|
||||
$(elem).val(icon).attr('value', icon);
|
||||
// 回调
|
||||
if (click) {
|
||||
click({
|
||||
icon: icon
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
return a;
|
||||
},
|
||||
// 监听原始input数值改变
|
||||
inputListen: function(){
|
||||
var el = $(elem);
|
||||
a.event('change', elem, function(){
|
||||
var value = el.val();
|
||||
})
|
||||
// el.change(function(){
|
||||
|
||||
// });
|
||||
return a;
|
||||
},
|
||||
event: function (evt, el, fn) {
|
||||
$(BODY).on(evt, el, fn);
|
||||
}
|
||||
};
|
||||
|
||||
var common = {
|
||||
/**
|
||||
* 加载样式表
|
||||
*/
|
||||
loadCss: function () {
|
||||
var css = '.layui-iconpicker {max-width: 280px;}.layui-iconpicker .layui-anim{display:none;width:280px;position:absolute;left:0;top:42px;padding:5px 0;z-index:899;min-width:100%;border:1px solid #d2d2d2;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12);box-sizing:border-box;}.layui-iconpicker-item{border:1px solid #e6e6e6;width:90px;height:38px;border-radius:4px;cursor:pointer;position:relative;}.layui-iconpicker-icon{border-right:1px solid #e6e6e6;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;width:60px;height:100%;float:left;text-align:center;background:#fff;transition:all .3s;}.layui-iconpicker-icon i{line-height:38px;font-size:18px;}.layui-iconpicker-item > .layui-edge{left:70px;}.layui-iconpicker-item:hover{border-color:#D2D2D2!important;}.layui-iconpicker-item:hover .layui-iconpicker-icon{border-color:#D2D2D2!important;}.layui-iconpicker.layui-form-selected .layui-anim{display:block;}.layui-iconpicker-body{padding:6px;}.layui-iconpicker .layui-iconpicker-list{background-color:#fff;border:1px solid #ccc;border-radius:4px;}.layui-iconpicker .layui-iconpicker-icon-item{display:inline-block;width:21.1%;line-height:36px;text-align:center;cursor:pointer;vertical-align:top;height:36px;margin:4px;border:1px solid #ddd;border-radius:2px;transition:300ms;}.layui-iconpicker .layui-iconpicker-icon-item i.layui-icon{font-size:17px;}.layui-iconpicker .layui-iconpicker-icon-item:hover{background-color:#eee;border-color:#ccc;-webkit-box-shadow:0 0 2px #aaa,0 0 2px #fff inset;-moz-box-shadow:0 0 2px #aaa,0 0 2px #fff inset;box-shadow:0 0 2px #aaa,0 0 2px #fff inset;text-shadow:0 0 1px #fff;}.layui-iconpicker-search{position:relative;margin:0 0 6px 0;border:1px solid #e6e6e6;border-radius:2px;transition:300ms;}.layui-iconpicker-search:hover{border-color:#D2D2D2!important;}.layui-iconpicker-search .layui-input{cursor:text;display:inline-block;width:86%;border:none;padding-right:0;margin-top:1px;}.layui-iconpicker-search .layui-icon{position:absolute;top:11px;right:4%;}.layui-iconpicker-tips{text-align:center;padding:8px 0;cursor:not-allowed;}.layui-iconpicker-page{margin-top:6px;margin-bottom:-6px;font-size:12px;padding:0 2px;}.layui-iconpicker-page-count{display:inline-block;}.layui-iconpicker-page-operate{display:inline-block;float:right;cursor:default;}.layui-iconpicker-page-operate .layui-icon{font-size:12px;cursor:pointer;}.layui-iconpicker-body-page .layui-iconpicker-icon-limit{display:none;}.layui-iconpicker-body-page .layui-iconpicker-icon-limit:first-child{display:block;}';
|
||||
var $style = $('head').find('style[iconpicker]');
|
||||
if ($style.length === 0) {
|
||||
$('head').append('<style rel="stylesheet" iconpicker>'+css+'</style>');
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 获取数据
|
||||
*/
|
||||
getData: {
|
||||
fontClass: function () {
|
||||
var arr = ["layui-icon-rate-half","layui-icon-rate","layui-icon-rate-solid","layui-icon-cellphone","layui-icon-vercode","layui-icon-login-wechat","layui-icon-login-qq","layui-icon-login-weibo","layui-icon-password","layui-icon-username","layui-icon-refresh-3","layui-icon-auz","layui-icon-spread-left","layui-icon-shrink-right","layui-icon-snowflake","layui-icon-tips","layui-icon-note","layui-icon-home","layui-icon-senior","layui-icon-refresh","layui-icon-refresh-1","layui-icon-flag","layui-icon-theme","layui-icon-notice","layui-icon-website","layui-icon-console","layui-icon-face-surprised","layui-icon-set","layui-icon-template-1","layui-icon-app","layui-icon-template","layui-icon-praise","layui-icon-tread","layui-icon-male","layui-icon-female","layui-icon-camera","layui-icon-camera-fill","layui-icon-more","layui-icon-more-vertical","layui-icon-rmb","layui-icon-dollar","layui-icon-diamond","layui-icon-fire","layui-icon-return","layui-icon-location","layui-icon-read","layui-icon-survey","layui-icon-face-smile","layui-icon-face-cry","layui-icon-cart-simple","layui-icon-cart","layui-icon-next","layui-icon-prev","layui-icon-upload-drag","layui-icon-upload","layui-icon-download-circle","layui-icon-component","layui-icon-file-b","layui-icon-user","layui-icon-find-fill","layui-icon-loading","layui-icon-loading-1","layui-icon-add-1","layui-icon-play","layui-icon-pause","layui-icon-headset","layui-icon-video","layui-icon-voice","layui-icon-speaker","layui-icon-fonts-del","layui-icon-fonts-code","layui-icon-fonts-html","layui-icon-fonts-strong","layui-icon-unlink","layui-icon-picture","layui-icon-link","layui-icon-face-smile-b","layui-icon-align-left","layui-icon-align-right","layui-icon-align-center","layui-icon-fonts-u","layui-icon-fonts-i","layui-icon-tabs","layui-icon-radio","layui-icon-circle","layui-icon-edit","layui-icon-share","layui-icon-delete","layui-icon-form","layui-icon-cellphone-fine","layui-icon-dialogue","layui-icon-fonts-clear","layui-icon-layer","layui-icon-date","layui-icon-water","layui-icon-code-circle","layui-icon-carousel","layui-icon-prev-circle","layui-icon-layouts","layui-icon-util","layui-icon-templeate-1","layui-icon-upload-circle","layui-icon-tree","layui-icon-table","layui-icon-chart","layui-icon-chart-screen","layui-icon-engine","layui-icon-triangle-d","layui-icon-triangle-r","layui-icon-file","layui-icon-set-sm","layui-icon-add-circle","layui-icon-404","layui-icon-about","layui-icon-up","layui-icon-down","layui-icon-left","layui-icon-right","layui-icon-circle-dot","layui-icon-search","layui-icon-set-fill","layui-icon-group","layui-icon-friends","layui-icon-reply-fill","layui-icon-menu-fill","layui-icon-log","layui-icon-picture-fine","layui-icon-face-smile-fine","layui-icon-list","layui-icon-release","layui-icon-ok","layui-icon-help","layui-icon-chat","layui-icon-top","layui-icon-star","layui-icon-star-fill","layui-icon-close-fill","layui-icon-close","layui-icon-ok-circle","layui-icon-add-circle-fine"];
|
||||
return arr;
|
||||
},
|
||||
unicode: function () {
|
||||
return ["&#xe6c9;","&#xe67b;","&#xe67a;","&#xe678;","&#xe679;","&#xe677;","&#xe676;","&#xe675;","&#xe673;","&#xe66f;","&#xe9aa;","&#xe672;","&#xe66b;","&#xe668;","&#xe6b1;","&#xe702;","&#xe66e;","&#xe68e;","&#xe674;","&#xe669;","&#xe666;","&#xe66c;","&#xe66a;","&#xe667;","&#xe7ae;","&#xe665;","&#xe664;","&#xe716;","&#xe656;","&#xe653;","&#xe663;","&#xe6c6;","&#xe6c5;","&#xe662;","&#xe661;","&#xe660;","&#xe65d;","&#xe65f;","&#xe671;","&#xe65e;","&#xe659;","&#xe735;","&#xe756;","&#xe65c;","&#xe715;","&#xe705;","&#xe6b2;","&#xe6af;","&#xe69c;","&#xe698;","&#xe657;","&#xe65b;","&#xe65a;","&#xe681;","&#xe67c;","&#xe601;","&#xe857;","&#xe655;","&#xe770;","&#xe670;","&#xe63d;","&#xe63e;","&#xe654;","&#xe652;","&#xe651;","&#xe6fc;","&#xe6ed;","&#xe688;","&#xe645;","&#xe64f;","&#xe64e;","&#xe64b;","&#xe62b;","&#xe64d;","&#xe64a;","&#xe64c;","&#xe650;","&#xe649;","&#xe648;","&#xe647;","&#xe646;","&#xe644;","&#xe62a;","&#xe643;","&#xe63f;","&#xe642;","&#xe641;","&#xe640;","&#xe63c;","&#xe63b;","&#xe63a;","&#xe639;","&#xe638;","&#xe637;","&#xe636;","&#xe635;","&#xe634;","&#xe633;","&#xe632;","&#xe631;","&#xe630;","&#xe62f;","&#xe62e;","&#xe62d;","&#xe62c;","&#xe629;","&#xe628;","&#xe625;","&#xe623;","&#xe621;","&#xe620;","&#xe61f;","&#xe61c;","&#xe60b;","&#xe619;","&#xe61a;","&#xe603;","&#xe602;","&#xe617;","&#xe615;","&#xe614;","&#xe613;","&#xe612;","&#xe611;","&#xe60f;","&#xe60e;","&#xe60d;","&#xe60c;","&#xe60a;","&#xe609;","&#xe605;","&#xe607;","&#xe606;","&#xe604;","&#xe600;","&#xe658;","&#x1007;","&#x1006;","&#x1005;","&#xe608;"];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
a.init();
|
||||
return new IconPicker();
|
||||
};
|
||||
|
||||
/**
|
||||
* 选中图标
|
||||
* @param filter lay-filter
|
||||
* @param iconName 图标名称,自动识别fontClass/unicode
|
||||
*/
|
||||
IconPicker.prototype.checkIcon = function (filter, iconName){
|
||||
var el = $('*[lay-filter='+ filter +']'),
|
||||
p = el.next().find('.layui-iconpicker-item .layui-icon'),
|
||||
c = iconName;
|
||||
|
||||
if (c.indexOf('#xe') > 0){
|
||||
p.html(c);
|
||||
} else {
|
||||
p.html('').attr('class', 'layui-icon ' + c);
|
||||
}
|
||||
el.attr('value', c).val(c);
|
||||
};
|
||||
|
||||
var iconPicker = new IconPicker();
|
||||
exports(_MOD, iconPicker);
|
||||
});
|
||||
@@ -1,115 +0,0 @@
|
||||
.loader-main{
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: whitesmoke;
|
||||
z-index: 9999999;
|
||||
margin-top:-70px;
|
||||
padding-left: 0px;
|
||||
|
||||
}
|
||||
|
||||
.loader {
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
margin: 30px auto 40px;
|
||||
margin-top: 20%;
|
||||
position: relative;
|
||||
z-index: 999999;
|
||||
background-color: whitesmoke;
|
||||
}
|
||||
|
||||
.loader:before {
|
||||
content: "";
|
||||
width: 50px;
|
||||
height: 7px;
|
||||
border-radius: 50%;
|
||||
background: #000;
|
||||
opacity: 0.1;
|
||||
position: absolute;
|
||||
top: 59px;
|
||||
left: 0;
|
||||
animation: shadow .5s linear infinite;
|
||||
}
|
||||
|
||||
.loader:after {
|
||||
content: "";
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
border-radius: 3px;
|
||||
background-color: #5FB878;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
animation: loading .5s linear infinite;
|
||||
}
|
||||
|
||||
@-webkit-keyframes loading {
|
||||
17% {
|
||||
border-bottom-right-radius: 3px;
|
||||
}
|
||||
|
||||
25% {
|
||||
transform: translateY(9px) rotate(22.5deg);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: translateY(18px) scale(1, 0.9) rotate(45deg);
|
||||
border-bottom-right-radius: 40px;
|
||||
}
|
||||
|
||||
75% {
|
||||
transform: translateY(9px) rotate(67.5deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: translateY(0) rotate(90deg);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes loading {
|
||||
17% {
|
||||
border-bottom-right-radius: 3px;
|
||||
}
|
||||
|
||||
25% {
|
||||
transform: translateY(9px) rotate(22.5deg);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: translateY(18px) scale(1, 0.9) rotate(45deg);
|
||||
border-bottom-right-radius: 40px;
|
||||
}
|
||||
|
||||
75% {
|
||||
transform: translateY(9px) rotate(67.5deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: translateY(0) rotate(90deg);
|
||||
}
|
||||
}
|
||||
|
||||
@-webkit-keyframes shadow {
|
||||
|
||||
0%,
|
||||
100% {
|
||||
transform: scale(1, 1);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: scale(1.2, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes shadow {
|
||||
|
||||
0%,
|
||||
100% {
|
||||
transform: scale(1, 1);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: scale(1.2, 1);
|
||||
}
|
||||
}
|
||||
@@ -1,539 +0,0 @@
|
||||
/* Logo 字体 */
|
||||
@font-face {
|
||||
font-family: "iconfont logo";
|
||||
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
|
||||
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
|
||||
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
|
||||
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
|
||||
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
|
||||
}
|
||||
|
||||
.logo {
|
||||
font-family: "iconfont logo";
|
||||
font-size: 160px;
|
||||
font-style: normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
/* tabs */
|
||||
.nav-tabs {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.nav-tabs .nav-more {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
height: 42px;
|
||||
line-height: 42px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
#tabs {
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
#tabs li {
|
||||
cursor: pointer;
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
border-bottom: 2px solid transparent;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-bottom: -1px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
|
||||
#tabs .active {
|
||||
border-bottom-color: #f00;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.tab-container .content {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* 页面布局 */
|
||||
.main {
|
||||
padding: 30px 100px;
|
||||
width: 960px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.main .logo {
|
||||
color: #333;
|
||||
text-align: left;
|
||||
margin-bottom: 30px;
|
||||
line-height: 1;
|
||||
height: 110px;
|
||||
margin-top: -50px;
|
||||
overflow: hidden;
|
||||
*zoom: 1;
|
||||
}
|
||||
|
||||
.main .logo a {
|
||||
font-size: 160px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.helps {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.helps pre {
|
||||
padding: 20px;
|
||||
margin: 10px 0;
|
||||
border: solid 1px #e7e1cd;
|
||||
background-color: #fffdef;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.icon_lists {
|
||||
width: 100% !important;
|
||||
overflow: hidden;
|
||||
*zoom: 1;
|
||||
}
|
||||
|
||||
.icon_lists li {
|
||||
width: 100px;
|
||||
margin-bottom: 10px;
|
||||
margin-right: 20px;
|
||||
text-align: center;
|
||||
list-style: none !important;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.icon_lists li .code-name {
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.icon_lists .icon {
|
||||
display: block;
|
||||
height: 100px;
|
||||
line-height: 100px;
|
||||
font-size: 42px;
|
||||
margin: 10px auto;
|
||||
color: #333;
|
||||
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
|
||||
-moz-transition: font-size 0.25s linear, width 0.25s linear;
|
||||
transition: font-size 0.25s linear, width 0.25s linear;
|
||||
}
|
||||
|
||||
.icon_lists .icon:hover {
|
||||
font-size: 100px;
|
||||
}
|
||||
|
||||
.icon_lists .svg-icon {
|
||||
/* 通过设置 font-size 来改变图标大小 */
|
||||
width: 1em;
|
||||
/* 图标和文字相邻时,垂直对齐 */
|
||||
vertical-align: -0.15em;
|
||||
/* 通过设置 color 来改变 SVG 的颜色/fill */
|
||||
fill: currentColor;
|
||||
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
|
||||
normalize.css 中也包含这行 */
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.icon_lists li .name,
|
||||
.icon_lists li .code-name {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/* markdown 样式 */
|
||||
.markdown {
|
||||
color: #666;
|
||||
font-size: 14px;
|
||||
line-height: 1.8;
|
||||
}
|
||||
|
||||
.highlight {
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.markdown img {
|
||||
vertical-align: middle;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.markdown h1 {
|
||||
color: #404040;
|
||||
font-weight: 500;
|
||||
line-height: 40px;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.markdown h2,
|
||||
.markdown h3,
|
||||
.markdown h4,
|
||||
.markdown h5,
|
||||
.markdown h6 {
|
||||
color: #404040;
|
||||
margin: 1.6em 0 0.6em 0;
|
||||
font-weight: 500;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.markdown h1 {
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
.markdown h2 {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
.markdown h3 {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.markdown h4 {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.markdown h5 {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.markdown h6 {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.markdown hr {
|
||||
height: 1px;
|
||||
border: 0;
|
||||
background: #e9e9e9;
|
||||
margin: 16px 0;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.markdown p {
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
.markdown>p,
|
||||
.markdown>blockquote,
|
||||
.markdown>.highlight,
|
||||
.markdown>ol,
|
||||
.markdown>ul {
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
.markdown ul>li {
|
||||
list-style: circle;
|
||||
}
|
||||
|
||||
.markdown>ul li,
|
||||
.markdown blockquote ul>li {
|
||||
margin-left: 20px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.markdown>ul li p,
|
||||
.markdown>ol li p {
|
||||
margin: 0.6em 0;
|
||||
}
|
||||
|
||||
.markdown ol>li {
|
||||
list-style: decimal;
|
||||
}
|
||||
|
||||
.markdown>ol li,
|
||||
.markdown blockquote ol>li {
|
||||
margin-left: 20px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.markdown code {
|
||||
margin: 0 3px;
|
||||
padding: 0 5px;
|
||||
background: #eee;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.markdown strong,
|
||||
.markdown b {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown>table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0px;
|
||||
empty-cells: show;
|
||||
border: 1px solid #e9e9e9;
|
||||
width: 95%;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.markdown>table th {
|
||||
white-space: nowrap;
|
||||
color: #333;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown>table th,
|
||||
.markdown>table td {
|
||||
border: 1px solid #e9e9e9;
|
||||
padding: 8px 16px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.markdown>table th {
|
||||
background: #F7F7F7;
|
||||
}
|
||||
|
||||
.markdown blockquote {
|
||||
font-size: 90%;
|
||||
color: #999;
|
||||
border-left: 4px solid #e9e9e9;
|
||||
padding-left: 0.8em;
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
.markdown blockquote p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.markdown .anchor {
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s ease;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.markdown .waiting {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.markdown h1:hover .anchor,
|
||||
.markdown h2:hover .anchor,
|
||||
.markdown h3:hover .anchor,
|
||||
.markdown h4:hover .anchor,
|
||||
.markdown h5:hover .anchor,
|
||||
.markdown h6:hover .anchor {
|
||||
opacity: 1;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.markdown>br,
|
||||
.markdown>p>br {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
|
||||
.hljs {
|
||||
display: block;
|
||||
background: white;
|
||||
padding: 0.5em;
|
||||
color: #333333;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.hljs-comment,
|
||||
.hljs-meta {
|
||||
color: #969896;
|
||||
}
|
||||
|
||||
.hljs-string,
|
||||
.hljs-variable,
|
||||
.hljs-template-variable,
|
||||
.hljs-strong,
|
||||
.hljs-emphasis,
|
||||
.hljs-quote {
|
||||
color: #df5000;
|
||||
}
|
||||
|
||||
.hljs-keyword,
|
||||
.hljs-selector-tag,
|
||||
.hljs-type {
|
||||
color: #a71d5d;
|
||||
}
|
||||
|
||||
.hljs-literal,
|
||||
.hljs-symbol,
|
||||
.hljs-bullet,
|
||||
.hljs-attribute {
|
||||
color: #0086b3;
|
||||
}
|
||||
|
||||
.hljs-section,
|
||||
.hljs-name {
|
||||
color: #63a35c;
|
||||
}
|
||||
|
||||
.hljs-tag {
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.hljs-title,
|
||||
.hljs-attr,
|
||||
.hljs-selector-id,
|
||||
.hljs-selector-class,
|
||||
.hljs-selector-attr,
|
||||
.hljs-selector-pseudo {
|
||||
color: #795da3;
|
||||
}
|
||||
|
||||
.hljs-addition {
|
||||
color: #55a532;
|
||||
background-color: #eaffea;
|
||||
}
|
||||
|
||||
.hljs-deletion {
|
||||
color: #bd2c00;
|
||||
background-color: #ffecec;
|
||||
}
|
||||
|
||||
.hljs-link {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* 代码高亮 */
|
||||
/* PrismJS 1.15.0
|
||||
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
|
||||
/**
|
||||
* prism.js default theme for JavaScript, CSS and HTML
|
||||
* Based on dabblet (http://dabblet.com)
|
||||
* @author Lea Verou
|
||||
*/
|
||||
code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
color: black;
|
||||
background: none;
|
||||
text-shadow: 0 1px white;
|
||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||||
text-align: left;
|
||||
white-space: pre;
|
||||
word-spacing: normal;
|
||||
word-break: normal;
|
||||
word-wrap: normal;
|
||||
line-height: 1.5;
|
||||
|
||||
-moz-tab-size: 4;
|
||||
-o-tab-size: 4;
|
||||
tab-size: 4;
|
||||
|
||||
-webkit-hyphens: none;
|
||||
-moz-hyphens: none;
|
||||
-ms-hyphens: none;
|
||||
hyphens: none;
|
||||
}
|
||||
|
||||
pre[class*="language-"]::-moz-selection,
|
||||
pre[class*="language-"] ::-moz-selection,
|
||||
code[class*="language-"]::-moz-selection,
|
||||
code[class*="language-"] ::-moz-selection {
|
||||
text-shadow: none;
|
||||
background: #b3d4fc;
|
||||
}
|
||||
|
||||
pre[class*="language-"]::selection,
|
||||
pre[class*="language-"] ::selection,
|
||||
code[class*="language-"]::selection,
|
||||
code[class*="language-"] ::selection {
|
||||
text-shadow: none;
|
||||
background: #b3d4fc;
|
||||
}
|
||||
|
||||
@media print {
|
||||
|
||||
code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
text-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Code blocks */
|
||||
pre[class*="language-"] {
|
||||
padding: 1em;
|
||||
margin: .5em 0;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
:not(pre)>code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
background: #f5f2f0;
|
||||
}
|
||||
|
||||
/* Inline code */
|
||||
:not(pre)>code[class*="language-"] {
|
||||
padding: .1em;
|
||||
border-radius: .3em;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.token.comment,
|
||||
.token.prolog,
|
||||
.token.doctype,
|
||||
.token.cdata {
|
||||
color: slategray;
|
||||
}
|
||||
|
||||
.token.punctuation {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.namespace {
|
||||
opacity: .7;
|
||||
}
|
||||
|
||||
.token.property,
|
||||
.token.tag,
|
||||
.token.boolean,
|
||||
.token.number,
|
||||
.token.constant,
|
||||
.token.symbol,
|
||||
.token.deleted {
|
||||
color: #905;
|
||||
}
|
||||
|
||||
.token.selector,
|
||||
.token.attr-name,
|
||||
.token.string,
|
||||
.token.char,
|
||||
.token.builtin,
|
||||
.token.inserted {
|
||||
color: #690;
|
||||
}
|
||||
|
||||
.token.operator,
|
||||
.token.entity,
|
||||
.token.url,
|
||||
.language-css .token.string,
|
||||
.style .token.string {
|
||||
color: #9a6e3a;
|
||||
background: hsla(0, 0%, 100%, .5);
|
||||
}
|
||||
|
||||
.token.atrule,
|
||||
.token.attr-value,
|
||||
.token.keyword {
|
||||
color: #07a;
|
||||
}
|
||||
|
||||
.token.function,
|
||||
.token.class-name {
|
||||
color: #DD4A68;
|
||||
}
|
||||
|
||||
.token.regex,
|
||||
.token.important,
|
||||
.token.variable {
|
||||
color: #e90;
|
||||
}
|
||||
|
||||
.token.important,
|
||||
.token.bold {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.token.italic {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.token.entity {
|
||||
cursor: help;
|
||||
}
|
||||
@@ -1,429 +0,0 @@
|
||||
{
|
||||
"id": "1858883",
|
||||
"name": "pe'a'rui",
|
||||
"font_family": "iconfont",
|
||||
"css_prefix_text": "pear-icon",
|
||||
"description": "",
|
||||
"glyphs": [
|
||||
{
|
||||
"icon_id": "14135885",
|
||||
"name": "日历",
|
||||
"font_class": "rili",
|
||||
"unicode": "e615",
|
||||
"unicode_decimal": 58901
|
||||
},
|
||||
{
|
||||
"icon_id": "14135887",
|
||||
"name": "书包",
|
||||
"font_class": "shubao",
|
||||
"unicode": "e616",
|
||||
"unicode_decimal": 58902
|
||||
},
|
||||
{
|
||||
"icon_id": "14135890",
|
||||
"name": "测量",
|
||||
"font_class": "celiang",
|
||||
"unicode": "e617",
|
||||
"unicode_decimal": 58903
|
||||
},
|
||||
{
|
||||
"icon_id": "14136158",
|
||||
"name": "放大镜",
|
||||
"font_class": "fangdajing",
|
||||
"unicode": "e618",
|
||||
"unicode_decimal": 58904
|
||||
},
|
||||
{
|
||||
"icon_id": "14136159",
|
||||
"name": "地球仪",
|
||||
"font_class": "diqiuyi",
|
||||
"unicode": "e619",
|
||||
"unicode_decimal": 58905
|
||||
},
|
||||
{
|
||||
"icon_id": "14136160",
|
||||
"name": "笔记",
|
||||
"font_class": "biji",
|
||||
"unicode": "e61a",
|
||||
"unicode_decimal": 58906
|
||||
},
|
||||
{
|
||||
"icon_id": "14136161",
|
||||
"name": "学士帽",
|
||||
"font_class": "xueshimao",
|
||||
"unicode": "e61b",
|
||||
"unicode_decimal": 58907
|
||||
},
|
||||
{
|
||||
"icon_id": "14136171",
|
||||
"name": "线上直播",
|
||||
"font_class": "xianshangzhibo",
|
||||
"unicode": "e61c",
|
||||
"unicode_decimal": 58908
|
||||
},
|
||||
{
|
||||
"icon_id": "15045228",
|
||||
"name": "目录1",
|
||||
"font_class": "mulu1",
|
||||
"unicode": "e670",
|
||||
"unicode_decimal": 58992
|
||||
},
|
||||
{
|
||||
"icon_id": "15045229",
|
||||
"name": "编辑",
|
||||
"font_class": "bianji1",
|
||||
"unicode": "e671",
|
||||
"unicode_decimal": 58993
|
||||
},
|
||||
{
|
||||
"icon_id": "15045230",
|
||||
"name": "更多1",
|
||||
"font_class": "gengduo1",
|
||||
"unicode": "e672",
|
||||
"unicode_decimal": 58994
|
||||
},
|
||||
{
|
||||
"icon_id": "15057284",
|
||||
"name": "搜素",
|
||||
"font_class": "sousu",
|
||||
"unicode": "e673",
|
||||
"unicode_decimal": 58995
|
||||
},
|
||||
{
|
||||
"icon_id": "15057286",
|
||||
"name": "设置",
|
||||
"font_class": "shezhi",
|
||||
"unicode": "e674",
|
||||
"unicode_decimal": 58996
|
||||
},
|
||||
{
|
||||
"icon_id": "15057288",
|
||||
"name": "下载",
|
||||
"font_class": "xiazai1",
|
||||
"unicode": "e675",
|
||||
"unicode_decimal": 58997
|
||||
},
|
||||
{
|
||||
"icon_id": "15057293",
|
||||
"name": "我的",
|
||||
"font_class": "wode1",
|
||||
"unicode": "e676",
|
||||
"unicode_decimal": 58998
|
||||
},
|
||||
{
|
||||
"icon_id": "15057296",
|
||||
"name": "工具箱",
|
||||
"font_class": "gongjuxiang",
|
||||
"unicode": "e677",
|
||||
"unicode_decimal": 58999
|
||||
},
|
||||
{
|
||||
"icon_id": "15057297",
|
||||
"name": "警告",
|
||||
"font_class": "jinggao",
|
||||
"unicode": "e678",
|
||||
"unicode_decimal": 59000
|
||||
},
|
||||
{
|
||||
"icon_id": "15057298",
|
||||
"name": "星球",
|
||||
"font_class": "xingqiu",
|
||||
"unicode": "e679",
|
||||
"unicode_decimal": 59001
|
||||
},
|
||||
{
|
||||
"icon_id": "15057299",
|
||||
"name": "邮件",
|
||||
"font_class": "youjian",
|
||||
"unicode": "e67a",
|
||||
"unicode_decimal": 59002
|
||||
},
|
||||
{
|
||||
"icon_id": "15057302",
|
||||
"name": "链接",
|
||||
"font_class": "lianjie",
|
||||
"unicode": "e67b",
|
||||
"unicode_decimal": 59003
|
||||
},
|
||||
{
|
||||
"icon_id": "15033675",
|
||||
"name": "转换",
|
||||
"font_class": "zhuanhuan",
|
||||
"unicode": "e644",
|
||||
"unicode_decimal": 58948
|
||||
},
|
||||
{
|
||||
"icon_id": "15033678",
|
||||
"name": "分类1",
|
||||
"font_class": "fenlei1",
|
||||
"unicode": "e647",
|
||||
"unicode_decimal": 58951
|
||||
},
|
||||
{
|
||||
"icon_id": "15033683",
|
||||
"name": "扫码",
|
||||
"font_class": "saoma",
|
||||
"unicode": "e64a",
|
||||
"unicode_decimal": 58954
|
||||
},
|
||||
{
|
||||
"icon_id": "15033684",
|
||||
"name": "二维码",
|
||||
"font_class": "erweima",
|
||||
"unicode": "e64b",
|
||||
"unicode_decimal": 58955
|
||||
},
|
||||
{
|
||||
"icon_id": "15042790",
|
||||
"name": "定位",
|
||||
"font_class": "dingwei",
|
||||
"unicode": "e64c",
|
||||
"unicode_decimal": 58956
|
||||
},
|
||||
{
|
||||
"icon_id": "15042791",
|
||||
"name": "关闭",
|
||||
"font_class": "guanbi",
|
||||
"unicode": "e64d",
|
||||
"unicode_decimal": 58957
|
||||
},
|
||||
{
|
||||
"icon_id": "15042792",
|
||||
"name": "分享",
|
||||
"font_class": "fenxiang",
|
||||
"unicode": "e64e",
|
||||
"unicode_decimal": 58958
|
||||
},
|
||||
{
|
||||
"icon_id": "15042793",
|
||||
"name": "分享1",
|
||||
"font_class": "fenxiang1",
|
||||
"unicode": "e64f",
|
||||
"unicode_decimal": 58959
|
||||
},
|
||||
{
|
||||
"icon_id": "15042794",
|
||||
"name": "关闭1",
|
||||
"font_class": "guanbi1",
|
||||
"unicode": "e650",
|
||||
"unicode_decimal": 58960
|
||||
},
|
||||
{
|
||||
"icon_id": "15042795",
|
||||
"name": "多云",
|
||||
"font_class": "duoyun",
|
||||
"unicode": "e651",
|
||||
"unicode_decimal": 58961
|
||||
},
|
||||
{
|
||||
"icon_id": "15042796",
|
||||
"name": "发现",
|
||||
"font_class": "faxian",
|
||||
"unicode": "e652",
|
||||
"unicode_decimal": 58962
|
||||
},
|
||||
{
|
||||
"icon_id": "15042797",
|
||||
"name": "我的",
|
||||
"font_class": "wode",
|
||||
"unicode": "e653",
|
||||
"unicode_decimal": 58963
|
||||
},
|
||||
{
|
||||
"icon_id": "15042798",
|
||||
"name": "编辑",
|
||||
"font_class": "bianji",
|
||||
"unicode": "e654",
|
||||
"unicode_decimal": 58964
|
||||
},
|
||||
{
|
||||
"icon_id": "15042799",
|
||||
"name": "消息",
|
||||
"font_class": "xiaoxi",
|
||||
"unicode": "e655",
|
||||
"unicode_decimal": 58965
|
||||
},
|
||||
{
|
||||
"icon_id": "15042800",
|
||||
"name": "首页",
|
||||
"font_class": "shouye",
|
||||
"unicode": "e656",
|
||||
"unicode_decimal": 58966
|
||||
},
|
||||
{
|
||||
"icon_id": "15042801",
|
||||
"name": "窗户",
|
||||
"font_class": "chuanghu",
|
||||
"unicode": "e657",
|
||||
"unicode_decimal": 58967
|
||||
},
|
||||
{
|
||||
"icon_id": "15042802",
|
||||
"name": "账单",
|
||||
"font_class": "zhangdan",
|
||||
"unicode": "e658",
|
||||
"unicode_decimal": 58968
|
||||
},
|
||||
{
|
||||
"icon_id": "15042803",
|
||||
"name": "导航",
|
||||
"font_class": "daohang",
|
||||
"unicode": "e659",
|
||||
"unicode_decimal": 58969
|
||||
},
|
||||
{
|
||||
"icon_id": "15042804",
|
||||
"name": "文件夹1",
|
||||
"font_class": "wenjianjia1",
|
||||
"unicode": "e65a",
|
||||
"unicode_decimal": 58970
|
||||
},
|
||||
{
|
||||
"icon_id": "15042805",
|
||||
"name": "鼠标",
|
||||
"font_class": "shubiao",
|
||||
"unicode": "e65b",
|
||||
"unicode_decimal": 58971
|
||||
},
|
||||
{
|
||||
"icon_id": "15042806",
|
||||
"name": "生活",
|
||||
"font_class": "shenghuo",
|
||||
"unicode": "e65c",
|
||||
"unicode_decimal": 58972
|
||||
},
|
||||
{
|
||||
"icon_id": "15042807",
|
||||
"name": "耳机",
|
||||
"font_class": "erji",
|
||||
"unicode": "e65d",
|
||||
"unicode_decimal": 58973
|
||||
},
|
||||
{
|
||||
"icon_id": "15042808",
|
||||
"name": "删除",
|
||||
"font_class": "shanchu",
|
||||
"unicode": "e65e",
|
||||
"unicode_decimal": 58974
|
||||
},
|
||||
{
|
||||
"icon_id": "15042809",
|
||||
"name": "更多",
|
||||
"font_class": "gengduo",
|
||||
"unicode": "e65f",
|
||||
"unicode_decimal": 58975
|
||||
},
|
||||
{
|
||||
"icon_id": "15042810",
|
||||
"name": "语音",
|
||||
"font_class": "yuyin",
|
||||
"unicode": "e660",
|
||||
"unicode_decimal": 58976
|
||||
},
|
||||
{
|
||||
"icon_id": "15042811",
|
||||
"name": "文件",
|
||||
"font_class": "wenjian",
|
||||
"unicode": "e661",
|
||||
"unicode_decimal": 58977
|
||||
},
|
||||
{
|
||||
"icon_id": "15042812",
|
||||
"name": "信号",
|
||||
"font_class": "xinhao",
|
||||
"unicode": "e662",
|
||||
"unicode_decimal": 58978
|
||||
},
|
||||
{
|
||||
"icon_id": "15042813",
|
||||
"name": "首页1",
|
||||
"font_class": "shouye1",
|
||||
"unicode": "e663",
|
||||
"unicode_decimal": 58979
|
||||
},
|
||||
{
|
||||
"icon_id": "15042814",
|
||||
"name": "图片",
|
||||
"font_class": "tupian",
|
||||
"unicode": "e664",
|
||||
"unicode_decimal": 58980
|
||||
},
|
||||
{
|
||||
"icon_id": "15042815",
|
||||
"name": "文件夹",
|
||||
"font_class": "wenjianjia",
|
||||
"unicode": "e665",
|
||||
"unicode_decimal": 58981
|
||||
},
|
||||
{
|
||||
"icon_id": "15042816",
|
||||
"name": "锁",
|
||||
"font_class": "suo",
|
||||
"unicode": "e666",
|
||||
"unicode_decimal": 58982
|
||||
},
|
||||
{
|
||||
"icon_id": "15045217",
|
||||
"name": "等级",
|
||||
"font_class": "dengji",
|
||||
"unicode": "e667",
|
||||
"unicode_decimal": 58983
|
||||
},
|
||||
{
|
||||
"icon_id": "15045218",
|
||||
"name": "上传1",
|
||||
"font_class": "shangchuan1",
|
||||
"unicode": "e668",
|
||||
"unicode_decimal": 58984
|
||||
},
|
||||
{
|
||||
"icon_id": "15045220",
|
||||
"name": "添加",
|
||||
"font_class": "tianjia",
|
||||
"unicode": "e669",
|
||||
"unicode_decimal": 58985
|
||||
},
|
||||
{
|
||||
"icon_id": "15045221",
|
||||
"name": "返回",
|
||||
"font_class": "fanhui",
|
||||
"unicode": "e66a",
|
||||
"unicode_decimal": 58986
|
||||
},
|
||||
{
|
||||
"icon_id": "15045222",
|
||||
"name": "账单",
|
||||
"font_class": "zhangdan1",
|
||||
"unicode": "e66b",
|
||||
"unicode_decimal": 58987
|
||||
},
|
||||
{
|
||||
"icon_id": "15045223",
|
||||
"name": "下载",
|
||||
"font_class": "xiazai",
|
||||
"unicode": "e66c",
|
||||
"unicode_decimal": 58988
|
||||
},
|
||||
{
|
||||
"icon_id": "15045224",
|
||||
"name": "目录",
|
||||
"font_class": "mulu",
|
||||
"unicode": "e66d",
|
||||
"unicode_decimal": 58989
|
||||
},
|
||||
{
|
||||
"icon_id": "15045226",
|
||||
"name": "关闭",
|
||||
"font_class": "guanbi2",
|
||||
"unicode": "e66e",
|
||||
"unicode_decimal": 58990
|
||||
},
|
||||
{
|
||||
"icon_id": "15045227",
|
||||
"name": "上传",
|
||||
"font_class": "shangchuan",
|
||||
"unicode": "e66f",
|
||||
"unicode_decimal": 58991
|
||||
}
|
||||
]
|
||||
}
|
||||
|
Before Width: | Height: | Size: 154 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 216 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 314 B |
|
Before Width: | Height: | Size: 447 B |
|
Before Width: | Height: | Size: 62 KiB |