6 Commits
Author SHA1 Message Date
zhengxinonlyandGitee 55ea1e7252 !82 update README.md.
Merge pull request !82 from alan968/N/A
2023-04-06 04:51:15 +00:00
alan968andGitee b80b869dd8 update README.md.
更新README.md文档中在拉取代码时的步骤。

Signed-off-by: alan968 <2669660794@qq.com>
2023-03-23 12:21:18 +00:00
zhengxinonlyandGitee 7fea9743c9 !50 修复文件管理上传错误 2022-09-30 11:57:45 +00:00
mengfu188 c09812f85d 修复文件管理上传错误 2022-09-29 13:39:37 +08:00
zhengxinonlyandGitee 794a8a57ad !48 修复创建权限时的bug
修复创建权限时的bug
2022-09-05 15:45:16 +00:00
mengfu188 cab60da886 修复创建权限时的bug 2022-09-04 15:55:00 +08:00
1068 changed files with 31845 additions and 63045 deletions
+5 -1
View File
@@ -40,6 +40,7 @@ Pear Admin Flask 基于 Flask 生态的后台管理系统,该项目旨在为 p
+ [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)
+ [flask-restful](https://flask-restful.readthedocs.io/en/latest/)
## 预览
@@ -51,7 +52,7 @@ Pear Admin Flask 有以下几个版本:
[Mini 分支版本 ](https://gitee.com/pear-admin/pear-admin-flask/tree/mini/)
>flask 2.x + flask-sqlalchemy + 基于角色的权限管理
>flask 2.x + flask-sqlalchemy + Flask-restful + 基于角色的权限管理
| | |
|---------------------|---------------------|
@@ -79,6 +80,9 @@ Pear Admin Flask 有以下几个版本:
```bash
git clone https://gitee.com/pear-admin/pear-admin-flask
# 进入 pear-admin-flask 代码根目录
cd pear-admin-flask
# 切换分支
git checkout mini
```
+14 -12
View File
@@ -1,15 +1,16 @@
import typing as t
from flask import jsonify
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 common.utils.http import success_api, fail_api
from extensions import db
from models import DepartmentModel, UserModel
class DeptSchema(BaseModel):
class DeptModel(BaseModel):
address: t.Optional[str]
dept_name: t.Optional[str] = Field(alias='deptName')
email: t.Optional[str]
@@ -38,9 +39,10 @@ class DepartmentsApi(MethodView):
return dict(success=True, message='ok', dept=dept_data)
dept_data = DepartmentModel.query.order_by(DepartmentModel.sort).all()
return table_api(
result={
'items': [
# TODO dtree 需要返回状态信息
res = {
"status": {"code": 200, "message": "默认"},
"data": [
{
'deptId': item.id,
'parentId': item.parent_id,
@@ -54,12 +56,12 @@ class DepartmentsApi(MethodView):
'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)
]
}
return jsonify(res)
@validate()
def post(self, body: DeptSchema):
def post(self, body: DeptModel):
dept = DepartmentModel(
parent_id=body.parent_id,
dept_name=body.dept_name,
@@ -76,7 +78,7 @@ class DepartmentsApi(MethodView):
return success_api(message="成功")
@validate()
def put(self, _id, body: DeptSchema):
def put(self, _id, body: DeptModel):
data = {
"dept_name": body.dept_name,
"sort": body.sort,
@@ -88,9 +90,9 @@ class DepartmentsApi(MethodView):
}
body = DepartmentModel.query.filter_by(id=_id).update(data)
if not body:
return {'success': False, 'message': "更新失败", 'code': 404}
return fail_api(message="更新失败")
db.session.commit()
return {'success': True, 'message': '更新成功', 'code': 200}
return success_api(message="更新成功")
def delete(self, _id):
ret = DepartmentModel.query.filter_by(id=_id).delete()
+3 -3
View File
@@ -147,7 +147,7 @@ def make_menu_tree():
return sorted(menu_dict.get(0), key=lambda item: item['sort'])
class PowerSchema(BaseModel):
class PowerModel(BaseModel):
icon: str
open_type: Optional[str] = Field(alias='openType')
parent_id: Optional[str] = Field(alias='parentId')
@@ -199,7 +199,7 @@ class RightsApi(MethodView):
class PowerApi(MethodView):
@validate()
def post(self, body: PowerSchema):
def post(self, body: PowerModel):
power = RightModel(
icon=body.icon,
open_type=body.open_type,
@@ -239,7 +239,7 @@ class PowerApi(MethodView):
return fail_api(message="删除失败")
@validate()
def put(self, _id, body: PowerSchema):
def put(self, _id, body: PowerModel):
data = {
"icon": body.icon,
"open_type": body.open_type,
+3 -1
View File
@@ -1,3 +1,5 @@
from flask import Blueprint
from common import register_api
from .file import FilePhotoAPI
from .passport import LoginAPI
@@ -5,4 +7,4 @@ from .passport import LoginAPI
def register_sys_api(api_bp):
register_api(LoginAPI, 'login_api', '/passport/login', pk='_id', app=api_bp)
register_api(FilePhotoAPI, 'photo_api', '/file/photo', pk='photo_id', app=api_bp)
register_api(FilePhotoAPI, 'photo_api', '/file/photo/', pk='photo_id', app=api_bp)
+2 -2
View File
@@ -11,7 +11,7 @@ from common.utils.rights import record_logging
from models import UserModel
class LoginSchema(BaseModel):
class LoginModel(BaseModel):
username: str
password: str
captcha: str
@@ -25,7 +25,7 @@ class LoginAPI(MethodView):
return make_response(render_template('index/login.html'))
@validate()
def post(self, body: LoginSchema):
def post(self, body: LoginModel):
s_code = session.get("code", None)
session["code"] = None
+4 -4
View File
@@ -67,7 +67,7 @@ def users_delete():
return success_api(message="批量删除成功")
class QuerySchema(BaseModel):
class QueryModel(BaseModel):
page: int = 1
limit: int = 10
real_name: t.Optional[str] = Field(alias='realName')
@@ -78,7 +78,7 @@ class QuerySchema(BaseModel):
status: t.Optional[int]
class PersonSchema(BaseModel):
class PersonModel(BaseModel):
role_ids: str = Field(alias='roleIds')
username: str
real_name: str = Field(alias='realName')
@@ -89,7 +89,7 @@ class UserApi(MethodView):
"""修改用户数据"""
@validate()
def get(self, _id, query: QuerySchema):
def get(self, _id, query: QueryModel):
filters = []
@@ -123,7 +123,7 @@ class UserApi(MethodView):
)
@validate()
def post(self, body: PersonSchema):
def post(self, body: PersonModel):
"""新建单个用户"""
role_ids = body.role_ids.split(',')
+1 -4
View File
@@ -3,12 +3,11 @@ from flask import Flask
from .index import index_bp
from .logs_view import logs_bp
from .roles import role_bp
from .system_view import system_bp
from .document_view import document_bp
from . import department
from . import file
from . import rights
from . import passport
from . import users
@@ -16,5 +15,3 @@ def init_view(app: Flask):
app.register_blueprint(index_bp)
app.register_blueprint(logs_bp)
app.register_blueprint(role_bp)
app.register_blueprint(system_bp)
app.register_blueprint(document_bp)
+9 -2
View File
@@ -5,11 +5,18 @@ from common.utils.rights import permission_required, view_logging_required
from applications.view import index_bp
@index_bp.get('/dept')
@view_logging_required
@permission_required("admin:dept:main")
def dept_index():
return render_template('admin/department/dept.html')
@index_bp.get('/dept/add')
@view_logging_required
@permission_required("admin:dept:add")
def add():
return render_template('view/system/department_add.html')
return render_template('admin/department/dept_add.html')
@index_bp.get('/dept/edit')
@@ -18,4 +25,4 @@ def add():
def edit():
dept_id = request.args.get("deptId", type=int)
dept = DepartmentModel.query.get(dept_id)
return render_template('view/system/department_edit.html', dept=dept)
return render_template('admin/department/dept_edit.html', dept=dept)
-18
View File
@@ -1,18 +0,0 @@
from flask import Blueprint, render_template
document_bp = Blueprint('document', __name__)
@document_bp.route('/component/code/index.html')
def component_code():
return render_template('component/code/index.html')
@document_bp.route('/view/<document>/<file>')
def document_view(document, file):
return render_template(f'view/{document}/{file}')
@document_bp.get('/login.html')
def login_html():
return render_template('login.html')
+2 -2
View File
@@ -8,11 +8,11 @@ from common.utils.rights import view_logging_required, permission_required
@view_logging_required
@permission_required("admin:file:main")
def file_index():
return render_template('view/system/photo.html')
return render_template('admin/file/photo.html')
@index_bp.get('/file/photo/add')
@view_logging_required
@permission_required("admin:file:main")
def file_photo_add():
return render_template('view/system/photo_add.html')
return render_template('admin/file/photo_add.html')
+13 -67
View File
@@ -1,78 +1,24 @@
from flask import Blueprint, redirect, url_for
from flask import send_file
from flask import session, render_template
from flask_login import current_user, logout_user, login_required
from common.gen_captcha import get_captcha_image
from flask import Blueprint
from flask import render_template
from flask_login import login_required, current_user
index_bp = Blueprint('index', __name__)
@index_bp.route('/')
@index_bp.route('/admin')
@login_required
def index():
return render_template('index.html')
return render_template('index/index.html')
@index_bp.route('/config/pear.config.json')
def pear_config():
return send_file('static/config/pear.config.json')
@index_bp.route('/admin/data/menu.json')
def menu():
return send_file('static/admin/data/menu.json')
@index_bp.route('/admin/data/message.json')
def message():
return send_file('static/admin/data/message.json')
@index_bp.route('/view/console/console1.html')
def console1():
# 控制后台
return render_template('view/console/console1.html')
@index_bp.route('/view/console/console2.html')
def console2():
# 数据分析
return render_template('view/console/console2.html')
@index_bp.route('/view/system/theme.html')
def theme():
# 酸爽翻倍
return render_template('view/system/theme.html')
@index_bp.route('/view/document/core.html')
def core():
# 酸爽翻倍
return render_template('view/document/core.html')
@index_bp.get('/passport/getCaptcha')
def get_captcha():
resp, code = get_captcha_image()
session["code"] = code
return resp
# 退出登录
@index_bp.post('/logout')
# 首页
@index_bp.get('/admin/')
@login_required
def logout():
logout_user()
session.pop('permissions')
print({"message": "注销成功", "success": True})
return {"message": "注销成功", "success": True}
def admin_index():
return render_template('index/admin_index.html', user=current_user)
@index_bp.get('/login')
def login():
if current_user.is_authenticated:
return redirect(url_for('admin.index'))
return render_template('login.html')
# 控制台页面
@index_bp.get('/admin/welcome')
@login_required
def welcome():
return render_template('index/welcome.html')
+6
View File
@@ -8,6 +8,12 @@ from models import LogModel
logs_bp = Blueprint('logs', __name__, url_prefix='/logs')
@logs_bp.get('/')
@permission_required("admin:log:main")
def index():
return render_template('admin/logs_temp/main.html')
@logs_bp.get('/login_log')
@permission_required("admin:log:main")
def login_log():
+32
View File
@@ -0,0 +1,32 @@
from flask import session, redirect, render_template, url_for
from flask_login import login_required, logout_user, current_user
from common.gen_captcha import get_captcha_image
from common.utils.http import success_api
# 获取验证码
from applications.view import index_bp
@index_bp.get('/passport/getCaptcha')
def get_captcha():
resp, code = get_captcha_image()
session["code"] = code
return resp
# 退出登录
@index_bp.post('/passport/logout')
@login_required
def logout():
logout_user()
session.pop('permissions')
return success_api(message="注销成功")
@index_bp.get('/passport/login')
def login():
if current_user.is_authenticated:
return redirect(url_for('admin.index'))
# TODO 分离视图操作 最终实现接口登录与视图登录两套逻辑
return render_template('index/login.html')
+9 -2
View File
@@ -5,6 +5,13 @@ from models import RightModel
from applications.view import index_bp
@index_bp.get('/rights/')
@view_logging_required
@permission_required("admin:power:main")
def rights_index():
return render_template('admin/rights/rights.html')
@index_bp.get('/rights/power/<int:power_id>')
@view_logging_required
@permission_required("admin:power:edit")
@@ -15,11 +22,11 @@ def rights_edit(power_id):
icon = icon[1]
else:
icon = None
return render_template('view/system/power_edit.html', power=power, icon=icon)
return render_template('admin/rights/rights_edit.html', power=power, icon=icon)
@index_bp.get('/rights/add')
@view_logging_required
@permission_required("admin:power:main")
def rights_add():
return render_template('view/system/power_add.html')
return render_template('admin/rights/rights_add.html')
+11 -3
View File
@@ -7,12 +7,20 @@ from models import RoleModel
role_bp = Blueprint('role', __name__, url_prefix='/admin/role')
# 角色而管理
@role_bp.get('/')
@view_logging_required
@permission_required("admin:role:main")
def main():
return render_template('admin/roles/roles.html')
# 角色授权操作
@role_bp.get('/power/<int:role_id>')
@view_logging_required
@permission_required("admin:role:power")
def power(role_id):
return render_template('view/system/roles_power.html', role_id=role_id)
return render_template('admin/roles/roles_power.html', role_id=role_id)
# 角色编辑
@@ -21,11 +29,11 @@ def power(role_id):
@permission_required("admin:role:edit")
def role_editor(role_id):
role = RoleModel.query.filter_by(id=role_id).first()
return render_template('view/system/roles_edit.html', role=role)
return render_template('admin/roles/roles_edit.html', role=role)
@role_bp.get('/add')
@view_logging_required
@permission_required("admin:role:edit")
def role_add():
return render_template('view/system/roles_add.html')
return render_template('admin/roles/roles_add.html')
-48
View File
@@ -1,48 +0,0 @@
from flask import Blueprint, render_template
system_bp = Blueprint('system', __name__)
@system_bp.route('/view/system/user.html')
def system_user():
return render_template('view/system/user.html')
@system_bp.route('/view/system/role.html')
def system_role():
return render_template('view/system/role.html')
@system_bp.route('/view/system/power.html')
def system_power():
return render_template('view/system/power.html')
@system_bp.route('/view/system/department.html')
def system_department():
return render_template('view/system/department.html')
@system_bp.route('/view/system/log.html')
def system_log():
return render_template('view/system/log.html')
@system_bp.route('/view/system/dict.html')
def system_dict():
return render_template('view/system/dict.html')
@system_bp.route('/view/system/operate/add.html')
def system_operate_add():
return render_template('view/system/operate/add.html')
@system_bp.route('/view/system/operate/edit.html')
def system_operate_edit():
return render_template('view/system/operate/edit.html')
@system_bp.route('/view/system/operate/profile.html')
def system_operate_profile():
return render_template('view/system/operate/profile.html')
+26 -3
View File
@@ -1,16 +1,26 @@
from flask import render_template
from flask_login import login_required, current_user
from sqlalchemy import desc
from common.utils.rights import permission_required, view_logging_required
from models import RoleModel, UserModel
from models import LogModel, RoleModel, UserModel
from . import index_bp
# 用户增加
@index_bp.get('/users/')
@view_logging_required
@permission_required("admin:user:main")
def users_main():
return render_template('admin/users/users.html')
@index_bp.get('/users/add')
@view_logging_required
@permission_required("admin:user:add")
def users_add_view():
roles = RoleModel.query.all()
return render_template('view/system/user_add.html', roles=roles)
return render_template('admin/users/users_add.html', roles=roles)
@index_bp.get('/users/<user_id>')
@@ -23,4 +33,17 @@ def users_user_id_view(user_id):
checked_roles = []
for r in user.role:
checked_roles.append(r.id)
return render_template('view/system/user_edit.html', user=user, roles=roles, checked_roles=checked_roles)
return render_template('admin/users/users_edit.html', user=user, roles=roles, checked_roles=checked_roles)
@index_bp.get('/users/center')
@login_required
def users_center():
user_logs = LogModel.query.filter_by(url='/passport/login').filter_by(uid=current_user.id).order_by(
desc(LogModel.create_at)).limit(10)
return render_template('admin/users/profile.html', user_info=current_user, user_logs=user_logs)
@index_bp.get('/users/avatar')
def users_avatar_view():
return render_template('admin/users/profile_avatar.html')
+3 -2
View File
@@ -24,7 +24,7 @@ SYSTEM_PANEL_LINKS = [
SECRET_KEY = os.getenv('SECRET_KEY', 'dev key')
# mysql 配置
MYSQL_USERNAME = "windows"
MYSQL_USERNAME = "root"
MYSQL_PASSWORD = "123456"
MYSQL_HOST = "127.0.0.1"
MYSQL_PORT = 3306
@@ -39,7 +39,8 @@ SQLALCHEMY_DATABASE_URI = r'sqlite:///pear_admin.db'
SQLALCHEMY_TRACK_MODIFICATIONS = True
SQLALCHEMY_ECHO = False
SQLALCHEMY_POOL_RECYCLE = 8
# SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{MYSQL_USERNAME}:{MYSQL_PASSWORD}@{MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}"
# SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{MYSQL_USERNAME}:{MYSQL_PASSWORD}@\
# {MYSQL_HOST}:{MYSQL_PORT}/{MYSQL_DATABASE}"
LOG_LEVEL = logging.ERROR
-16
View File
@@ -32,22 +32,6 @@ class RightModel(db.Model):
parent = db.relationship("RightModel", remote_side=[id]) # 自关联
"""
id = db.Column(db.Integer, primary_key=True, comment='权限编号')
powerName = db.Column(db.String(255), comment='权限名称')
powerType = db.Column(db.SMALLINT, comment='权限类型')
powerCode = db.Column(db.String(30), comment='权限标识')
powerUrl = db.Column(db.String(255), comment='权限路径')
openType = db.Column(db.String(10), comment='打开方式')
parentId = db.Column(db.Integer, db.ForeignKey("rt_power.id"), comment='父类编号')
icon = db.Column(db.String(128), comment='图标')
sort = db.Column(db.Integer, comment='排序')
enable = db.Column(db.Boolean, comment='是否开启')
checkArr = db.Column(db.String(128), comment='')
parent = db.relationship("RightModel", remote_side=[id]) # 自关联
"""
class RoleModel(db.Model):
__tablename__ = 'rt_role'
@@ -12,67 +12,14 @@ body,
transition: all .3s;
}
.pear-admin.banner-layout .layui-side {
top: 60px!important;
}
.pear-admin.banner-layout .layui-side .layui-logo {
display: none;
}
.pear-admin.banner-layout .layui-header .layui-logo {
display: inline-block;
}
.pear-admin.banner-layout .layui-side .layui-side-scroll {
height: 100%!important;
}
.pear-admin.banner-layout .layui-side .layui-side-scroll {
height: 100%!important;
}
.pear-admin .layui-header.dark-theme .layui-layout-control .layui-this *{
background-color: rgba(0,0,0,.1)!important;
}
.pear-admin.banner-layout .layui-header {
z-index: 99999;
width: 100%;
left: 0px;
}
.pear-admin.banner-layout .layui-header .layui-layout-left {
left: 230px;
}
.pear-admin.banner-layout .layui-header .layui-logo .title {
top: 2px;
}
.pear-admin.banner-layout .layui-header .layui-layout-control {
display: inline-block;
left: 370px;
}
.pear-admin.banner-layout .layui-header.dark-theme {
box-shadow: 2px 0 6px rgb(0 21 41 / 35%);
}
.pear-admin .layui-header .layui-logo {
display: none;
}
.pear-admin .layui-logo .title {
font-size: 20px;
}
.pear-admin .layui-layout-right .layui-nav-child {
border: 1px solid whitesmoke;
border-radius: 4px;
width: auto;
left: auto;
right: -23px;
border-radius: 6px;
width: 150px;
}
.pear-admin .layui-header {
@@ -82,22 +29,26 @@ body,
border-bottom: 1px solid whitesmoke;
}
.pear-admin .layui-header .layui-nav-img {
width: 30px;
height: 30px;
}
.pear-admin .layui-layout-control {
left: 140px;
position: absolute;
}
.pear-admin .layui-layout-control .layui-nav {
.pear-admin .layui-layout-control .layui-nav{
padding: 0px;
}
.pear-admin .layui-logo {
width: 230px;
height: 59px;
line-height: 59px;
height: 60px;
line-height: 60px;
position: relative;
background-color: #28333E;
border-bottom: 1px solid rgba(0, 0, 0, .12);
}
.pear-admin .layui-logo img {
@@ -152,29 +103,12 @@ body,
left: 0px;
}
.pear-admin .layui-footer {
position: absolute;
display: flex;
justify-content: space-between;
left: 230px;
background: #fff;
border-top: 1px solid #F2F2F2;
box-shadow: none;
-webkit-transition: left .3s;
transition: left .3s;
overflow: hidden;
}
.pear-admin .layui-footer.close {
/** 隐 藏 布 局 样 式 */
.pear-mini .layui-logo .title {
display: none;
}
/** 收缩布局 */
.pear-mini .layui-side .layui-logo .title {
display: none;
}
.pear-mini .layui-side .layui-logo .logo {
.pear-mini .layui-logo .logo {
display: inline-block;
}
@@ -191,14 +125,10 @@ body,
left: 60px;
}
.pear-mini .layui-side .layui-logo {
.pear-mini .layui-logo {
width: 60px;
}
.pear-mini .layui-footer {
left: 60px;
}
.pear-mini .layui-nav-tree .layui-nav-item span {
display: none;
}
@@ -225,7 +155,7 @@ body,
display: none;
}
.pear-collapsed-pe {
.pear-collasped-pe {
display: none;
width: 50px;
position: absolute;
@@ -240,7 +170,7 @@ body,
box-shadow: 2px 0 6px rgba(0, 21, 41, .35);
}
.pear-collapsed-pe a {
.pear-collasped-pe a {
color: white !important;
}
@@ -258,11 +188,11 @@ body,
/** 新增兼容 */
@media screen and (max-width:768px) {
.collapse {
.collaspe {
display: none !important;
}
.pear-collapsed-pe {
.pear-collasped-pe {
display: inline-block !important;
}
@@ -283,6 +213,7 @@ body,
height: calc(100% - 62px);
}
/** 隐 藏 布 局 样 式 */
.pear-mini .layui-side {
width: 0px;
}
@@ -296,10 +227,6 @@ body,
left: 0px;
}
.pear-mini .layui-footer {
left: 0px;
}
.pear-mini .layui-logo {
width: 0px;
}
@@ -365,50 +292,22 @@ body,
}
/** 侧边主题 (亮) */
.light-theme.layui-side {
/** 亮色侧边风格 */
.light-theme .layui-logo {
background-color: white !important;
color: black !important;
}
.light-theme .layui-side-scroll {
background-color: white !important;
color: black !important;
}
.light-theme .layui-side {
box-shadow: 2px 0 8px 0 rgba(29, 35, 41, .05) !important;
}
.light-theme.layui-side .layui-logo {
background-color: white !important;
color: black !important;
border-bottom: 1px whitesmoke solid;
}
.light-theme.layui-side .layui-side-scroll {
background-color: white !important;
color: black !important;
}
.dark-theme.layui-header {
border-bottom: none;
background-color: #28333E;
color: whitesmoke;
}
.dark-theme.layui-header li>a{
color: whitesmoke!important;
}
.dark-theme.layui-header .layui-logo {
box-shadow: none;
border: none;
}
/** 顶部主题 (白) */
.light-theme.layui-header .layui-logo {
background-color: white;
border: none;
box-shadow: none;
}
/** 主题面板 */
.pearone-color .set-text {
height: 42px;
line-height: 42px;
}
/** 主 题 选 择 界 面 样 式 */
.pearone-color .color-title {
padding: 15px 0 0px 20px;
margin-bottom: 4px;
@@ -491,70 +390,57 @@ body,
line-height: 30px;
}
.message .layui-tab-title li:not(:last-child) {
border-right: 1px solid #eee;
/** 友情链接 */
.more-setting {
margin-top: 45px;
}
/* 搜索面板 */
.menu-search-content .layui-input-prefix {
position: absolute;
margin-top: 10px;
margin-left: 10px;
.more-setting form {
margin-top: 30px;
}
.menu-search-content .layui-input {
padding-left: 30px;
.more-setting-title {
padding: 15px 0 0px 20px;
margin-bottom: 4px;
}
.menu-search-content {
display: flex;
flex-wrap: wrap;
justify-content: center;
.more-setting .layui-form-label {
width: 60px;
}
.menu-search-input-wrapper {
.more-menu-list {
width: 100%;
padding: 15px 15px;
margin-top: 80px;
}
.menu-search-no-data {
display: flex;
justify-content: center;
width: 100%;
height: 122px;
align-items: center;
.more-menu-item:first-child {
border-top: 1px solid #e8e8e8;
}
.menu-search-list {
width: 100%;
padding: 5px 15px;
.more-menu-item .layui-icon {
font-size: 18px;
padding-right: 10px;
}
.menu-search-list li {
position: relative;
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: nowrap;
.more-menu-item {
color: #595959;
height: 50px;
margin-bottom: 8px;
padding: 0px 10px;
color: currentColor;
font-size: 14px;
border-radius: 4px;
box-shadow: 0 1px 3px #d4d9e1;
cursor: pointer;
background-color: #fff;
line-height: 50px;
font-size: 16px;
padding: 0 25px;
border-bottom: 1px solid #e8e8e8;
font-style: normal;
display: block;
}
.menu-search-list li:hover {
background-color: #5FB878;
color: white;
.more-menu-item:hover {
background-color: whitesmoke;
}
.menu-search-list li.this {
background-color: #5FB878;
color: white;
.more-menu-item:after {
color: #8c8c8c;
right: 16px;
content: "\e602";
position: absolute;
font-family: layui-icon !important;
}
/* 搜索面板结束 */
@@ -9,7 +9,7 @@
.top-panel-number {
line-height: 60px;
font-size: 29px;
font-size: 30px;
border-right: 1px solid #eceff9;
}
@@ -69,10 +69,9 @@
.custom-tab .layui-tab-title li {
margin-left: 10px;
}
.list .list-item {
height: 31.8px;
line-height: 31.8px;
height: 32px;
line-height: 32px;
color: gray;
padding: 5px;
padding-left: 15px;
+18
View File
@@ -0,0 +1,18 @@
.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;}
@@ -391,6 +391,14 @@
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;
+58
View File
@@ -0,0 +1,58 @@
.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;
}
+56
View File
@@ -0,0 +1,56 @@
{
"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,8 +1,8 @@
[{
"id": 1,
"title": "工作空间",
"icon": "layui-icon layui-icon-console",
"type": 0,
"icon": "layui-icon layui-icon-console",
"href": "",
"children": [{
"id": 10,
@@ -24,7 +24,7 @@
"icon": "layui-icon layui-icon-console",
"type": 1,
"openType": "_iframe",
"href": "http://www.bing.com"
"href": "http://www.baidu.com"
}, {
"id": 15,
"title": "主题预览",
@@ -32,13 +32,6 @@
"type": 1,
"openType": "_iframe",
"href": "view/system/theme.html"
}, {
"id": 16,
"title": "酸爽翻倍",
"icon": "layui-icon layui-icon-console",
"type": 1,
"openType": "_iframe",
"href": "view/document/core.html"
}]
},
{
@@ -151,18 +144,11 @@
"href": "view/document/drawer.html"
}, {
"id": 2022,
"title": "消息通知 (过时)",
"title": "消息通知",
"icon": "layui-icon layui-icon-face-cry",
"type": 1,
"openType": "_iframe",
"href": "view/document/notice.html"
}, {
"id": 2025,
"title": "消息通知 (新增)",
"icon": "layui-icon layui-icon-face-cry",
"type": 1,
"openType": "_iframe",
"href": "view/document/toast.html"
}, {
"id": 2024,
"title": "加载组件",
@@ -209,7 +195,7 @@
"icon": "layui-icon layui-icon-face-cry",
"type": 1,
"openType": "_iframe",
"href": "view/document/encrypt.html"
"href": "view/document/hash.html"
},
{
"id": 2042,
@@ -342,7 +328,7 @@
"icon": "layui-icon layui-icon-face-cry",
"type": 1,
"openType": "_iframe",
"href": "view/system/department.html"
"href": "view/system/deptment.html"
},
{
"id": 605,
+88
View File
@@ -0,0 +1,88 @@
[{
"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"
}]
}
]
@@ -12,7 +12,6 @@
"parentId": "0",
"icon": "layui-icon-set-fill",
"sort": 1,
"enable": 1,
"checkArr": "0"
}, {
"powerId": "2",
@@ -24,7 +23,6 @@
"parentId": "1",
"icon": "layui-icon-username",
"sort": null,
"enable": 1,
"checkArr": "0"
}, {
"powerId": "3",
@@ -36,7 +34,6 @@
"parentId": "1",
"icon": "layui-icon-user",
"sort": null,
"enable": 1,
"checkArr": "0"
}, {
"powerId": "4",
+1
View File
@@ -0,0 +1 @@
{"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}]}
@@ -27,7 +27,7 @@
"avatar": null,
"sex": "1",
"phone": "1555324324234",
"enable": "0",
"enable": "1",
"login": "1",
"roleIds": null
}, {

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 87 KiB

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 87 KiB

Before

Width:  |  Height:  |  Size: 197 KiB

After

Width:  |  Height:  |  Size: 197 KiB

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 74 KiB

@@ -18,6 +18,15 @@
<animateTransform attributeType="XML" attributeName="transform" begin="0s" dur="35s" type="rotate" from="0 210 530" to="360 210 530" repeatCount="indefinite"/>
</path>
<circle cx="1200" cy="600" r="30" stroke="rgb(241, 243, 244)" fill="rgb(241, 243, 244)">
<animateMotion path="M 0 0 L -20 40 Z" dur="9s" repeatCount="indefinite"/>
</circle>
<path d="M 100 350 A 40 40 0 1 1 180 350 L 180 430 A 40 40 0 1 1 100 430 Z" stroke="rgb(241, 243, 244)" fill="rgb(241, 243, 244)">
<animateMotion path="M 140 390 L 180 360 L 140 390" dur="20s" begin="0s" repeatCount="indefinite"/>
<animateTransform attributeType="XML" attributeName="transform" begin="0s" dur="30s" type="rotate" values="0 140 390; -60 140 390; 0 140 390" keyTimes="0 ; 0.5 ; 1" repeatCount="indefinite"/>
</path>
<rect x="400" y="600" rx="40" ry="40" width="100" height="100" stroke="rgb(129, 201, 149)" fill="rgb(129, 201, 149)">
<animateTransform attributeType="XML" attributeName="transform" begin="0s" dur="35s" type="rotate" from="-30 550 750" to="330 550 750" repeatCount="indefinite"/>
</rect>

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
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}
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Before

Width:  |  Height:  |  Size: 701 B

After

Width:  |  Height:  |  Size: 701 B

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before

Width:  |  Height:  |  Size: 299 KiB

After

Width:  |  Height:  |  Size: 299 KiB

File diff suppressed because one or more lines are too long
@@ -1,3 +1,4 @@
/** Buttom 默认*/
.pear-btn {
display: inline-block;
line-height: 38px;
@@ -24,6 +25,7 @@
opacity: .8;
filter: alpha(opacity=80);
color: #409eff;
border-color: #c6e2ff;
background-color: #ECF5FF;
}
@@ -35,23 +37,22 @@
line-height: 37px;
color: #fff !important
}
/** Button 主题 */
.pear-btn-primary {
border: #2D8CF0;
background-color: #2D8CF0 !important;
border: #2D8CF0;
}
.pear-btn-danger {
border: #f56c6c;
background-color: #f56c6c !important;
border: #f56c6c;
}
.pear-btn-warming {
border: #f6ad55;
background-color: #f6ad55 !important;
border: #f6ad55;
}
.pear-btn-success {
border: #36b368;
background-color: #36b368 !important;
background-color: #5FB878 !important;
border: #5FB878;
}
.pear-btn[round] {
@@ -59,9 +60,9 @@
}
.pear-btn-primary[plain] {
border: #409eff !important;
color: #409eff !important;
background: #ecf5ff 10% !important;
border-color: #b3d8ff !important;
}
.pear-btn-primary[plain]:hover {
@@ -70,20 +71,20 @@
}
.pear-btn-success[plain] {
border: #36b368 !important;
color: #36b368 !important;
color: #67c23a !important;
background: #f0f9eb !important;
border-color: #c2e7b0 !important;
}
.pear-btn-success[plain]:hover {
color: white !important;
background-color: #36b368 !important
background-color: #67c23a !important
}
.pear-btn-warming[plain] {
border: #e6a23c !important;
color: #e6a23c !important;
background: #fdf6ec !important;
border-color: #f5dab1 !important;
}
.pear-btn-warming[plain]:hover {
@@ -92,9 +93,9 @@
}
.pear-btn-danger[plain] {
border: #f56c6c !important;
color: #f56c6c !important;
background: #fef0f0 !important;
border-color: #fbc4c4 !important;
}
.pear-btn-danger[plain]:hover {
@@ -69,25 +69,10 @@
margin-left: -10px;
}
.cloud-card-component {
.pear-card-component {
padding: 20px;
}
.cloud-card-component .layui-table-click {
border-radius: 6px!important;
}
.ew-table-loading {
padding: 10px 0;
text-align: center;
}
.ew-table-loading > i {
color: #999;
font-size: 30px;
}
.ew-table-loading.ew-loading-float {
position: absolute;
top: 0;
left: 0;
right: 0;
.pear-card-component .layui-laypage .layui-laypage-curr .layui-laypage-em {
border-radius: 0px !important;
}

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 60 KiB

@@ -1,34 +1,29 @@
.layui-card-body .layui-form{
margin-top: 15px;
}
input::-webkit-input-placeholder,
textarea::-webkit-input-placeholder {
color: #ccc;
}
.layui-input:hover,
.layui-textarea:hover,
.layui-input:focus,
.layui-textarea:focus {
border-color: #eee;
}
.layui-input:focus,
.layui-textarea:focus {
border-color: #5FB878 !important;
box-shadow: 0 0 0 3px #f0f9eb !important;
border-color: #5FB878!important;
}
.layui-input[success] {
box-shadow: 0px 0px 0px 3px #f0f9eb !important;
box-shadow: 0px 0px 3px 1px #5FB878 !important;
border: #5FB878 1px solid!important;
}
.layui-input[failure],
.layui-form-item .layui-form-danger:focus {
box-shadow: 0px 0px 0px 3px #fef0f0 !important;
border: #F56C6C 1px solid!important;
.layui-input[failure] {
box-shadow: 0px 0px 3px 1px #F56C6C;
border: #F56C6C 1px solid;
}
.layui-input,
@@ -33,15 +33,15 @@
.pear-frame .pear-frame-content {
width: 100%;
height: calc(100% - 0px) !important;
height: calc(100% - 45px) !important;
}
.pear-frame-loading {
position: absolute;
display: none;
width: 100%;
height: calc(100% - 0px) !important;
top: 0px;
height: calc(100% - 45px) !important;
top: 42px;
z-index: 19;
background-color: #fff
}
@@ -0,0 +1,3 @@
.layui-iconpicker .layui-anim{
width: 300px!important;
}
@@ -0,0 +1,4 @@
.layui-layer-msg{
border-color: transparent!important;
box-shadow: 2px 0 6px rgb(0 21 41 / 0.05)!important;
}
@@ -28,6 +28,11 @@
width: 230px;
}
.pear-nav-tree .layui-nav-child {
padding-top: 5px;
padding-bottom: 5px;
}
.pear-nav-tree .layui-nav-child dd.layui-this,
.layui-nav-tree .layui-nav-child dd.layui-this a,
.layui-nav-tree .layui-this,
@@ -68,15 +73,7 @@
display: none;
}
.pear-nav-tree .layui-nav-item a .layui-badge-dot {
float: right;
right: 13px;
}
.pear-nav-tree .layui-nav-item a .layui-badge {
float: right;
right: 10px;
}
/** 实 现 菜 单 隐 藏 */
.pear-nav-mini {
@@ -111,11 +108,9 @@
.pear-nav-control.pc .layui-this * {
background-color: whitesmoke;
}
.pear-nav-control.pc *{
color: darkslategray!important;
}
.pear-nav-control.pc .layui-nav-bar{
display: none!important;
}
@@ -128,23 +123,15 @@
/** 隐 藏 后 子 级 悬 浮 菜 单 */
.pear-nav-tree .layui-nav-hover {
position: fixed;
min-width: 130px;
padding: 4px;
display: block !important;
background: transparent !important;
}
.pear-nav-tree .layui-nav-hover:before {
content: '';
position: absolute;
right: 4px;
left: 4px;
bottom: 0;
top: 0;
border-radius: 4px;
overflow: hidden;
background-color: #28333E;
display: block;
position: fixed;
min-width: 130px;
margin-left: 62px;
padding-top: 4px !important;
padding-bottom: 4px !important;
box-shadow: 0px 0px 3px lightgray;
}
.pear-nav-tree .layui-nav-hover a span {
@@ -154,7 +141,7 @@
display: none;
}
.pear-nav-tree .layui-nav-child dd a span {
margin-left: 26px !important;
margin-left: 30px !important;
}
.pear-nav-tree .layui-nav-child dd a i {
display: none;
@@ -162,11 +149,10 @@
.pear-nav-tree .layui-nav-hover dd a span {
margin-left: 0px !important;
}
.pear-nav-tree dl {
padding-top: 0;
padding-bottom: 0;
}
/** 亮 样 式*/
/** 亮 样 式*/
.dark-theme .layui-nav-tree{
background-color: #28333E!important;
}
@@ -176,7 +162,6 @@
}
.light-theme .pear-nav-tree,
.light-theme .pear-nav-tree .layui-nav-hover:before,
.light-theme .pear-nav-tree .layui-nav-child{
background-color: white!important;
}
@@ -192,6 +177,11 @@
border-bottom-color: dimgray!important;
}
.light-theme .pear-nav-tree .layui-nav-child{
padding-top: 0px;
padding-bottom: 0px;
}
.light-theme .pear-nav-tree .layui-this a,
.light-theme .pear-nav-tree .layui-this{
color: white!important;
@@ -247,21 +237,10 @@
width: 12px;
text-align: center;
}
.pear-nav-tree.arrow .layui-nav-child.layui-nav-hover>dd>a>.layui-nav-more {
display: inline-block !important;
transform: rotate(270deg);
-ms-transform: rotate(270deg);
-moz-transform: rotate(270deg);
-webkit-transform: rotate(270deg);
-o-transform: rotate(270deg);
width: 12px;
text-align: center;
background-color: transparent !important;
}
.pear-nav-tree.arrow .layui-nav-child.layui-nav-hover>a>.layui-nav-more:before,
.pear-nav-tree.arrow .layui-nav-itemed>a>.layui-nav-more:before {
content: '\e61a';
background-color: transparent;
display: inline-block;
vertical-align: middle;
}
@@ -0,0 +1,42 @@
.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;}
@@ -439,13 +439,13 @@ div[xm-select-skin=default].xm-form-selected .xm-select:hover {
}
div[xm-select-skin=primary] .xm-select-title div.xm-select-label>span {
background-color: #5FB878!important;
background-color: #5FB878!important
color: #FFF;
border: 1px solid #5FB878!important
}
div[xm-select-skin=primary] .xm-select-title div.xm-select-label>span i {
background-color: #5FB878!important;
background-color: #5FB878!important
color: #FFF
}
@@ -517,7 +517,7 @@ div[xm-select-skin=danger] .xm-select-title div.xm-select-label>span {
}
div[xm-select-skin=danger] .xm-select-title div.xm-select-label>span i {
background-color:#f56c6c!important;
background-color:#f56c6c!important
color: #FFF
}
@@ -820,3 +820,8 @@ div[xm-select-search-type="1"] .xm-select .xm-select-input {
.icon-expand:before {
content: "\e641";
}
.xm-select-parent .xm-form-select dl{
position: relative;
top: 5px!important;
}
@@ -47,6 +47,7 @@
border-right: 1px solid whitesmoke;
color: dimgray;
font-size: 13.5px;
line-height: 43px;
}
.pear-tab .layui-tab-title .layui-tab-bar {
@@ -18,13 +18,12 @@
}
.layui-table-cell {
height: 34px;
line-height: 34px;
height: 34px !important;
line-height: 34px !important;
}
.layui-table .layui-laypage .layui-laypage-curr .layui-laypage-em {
border-radius: 50px !important;
border-radius: 4px!important;
background-color: #5FB878 !important;
}
@@ -33,8 +32,8 @@
}
.layui-table tr {
height: 34px;
line-height: 34px;
height: 34px !important;
line-height: 34px !important;
}
.layui-table-cell {
@@ -69,12 +68,6 @@
.layui-table-view .layui-table[lay-skin=line] {
border: none !important;
}
.layui-table-init .layui-icon{
font-size: 40px !important;
margin: -15px 0 0 -15px;
}
.layui-table-body::-webkit-scrollbar {
width: 0px;
height: 0px;

Some files were not shown because too many files have changed in this diff Show More