diff --git a/pear_admin/__init__.py b/pear_admin/__init__.py index 206c649..1bf2395 100644 --- a/pear_admin/__init__.py +++ b/pear_admin/__init__.py @@ -17,16 +17,16 @@ def create_app(config_name="dev"): register_views(app) - @app.errorhandler(403) - def handle_404(e): - return render_template("error/403.html") - - @app.errorhandler(404) - def handle_403(e): - return render_template("error/404.html") - - @app.errorhandler(500) - def handle_500(e): - return render_template("error/500.html") + # @app.errorhandler(403) + # def handle_404(e): + # return render_template("error/403.html") + # + # @app.errorhandler(404) + # def handle_403(e): + # return render_template("error/404.html") + # + # @app.errorhandler(500) + # def handle_500(e): + # return render_template("error/500.html") return app diff --git a/pear_admin/apis/role.py b/pear_admin/apis/role.py index 03d651c..2983a75 100644 --- a/pear_admin/apis/role.py +++ b/pear_admin/apis/role.py @@ -1,8 +1,10 @@ +from copy import deepcopy + from flask import Blueprint, request from flask_sqlalchemy.pagination import Pagination from pear_admin.extensions import db -from pear_admin.orms import RoleORM +from pear_admin.orms import RightsORM, RoleORM role_api = Blueprint("role", __name__) @@ -50,3 +52,68 @@ def del_role(rid): role_obj = RoleORM.query.get(rid) role_obj.delete() return {"code": 0, "message": "删除角色成功"} + + +@role_api.get("/role/role_rights/") +def role_rights(rid): + role: RoleORM = db.session.execute( + db.select(RoleORM).where(RoleORM.id == rid) + ).scalar() + + t = request.args.get("type") + if t == "tree": + # 1. 获取所有的权限 + rights_all = db.session.execute(db.select(RightsORM)).scalars() + rights_list = [ + {"id": r.id, "pid": r.pid, "title": r.name, "sort": r.sort} + for r in rights_all + ] + # 2. 获取已有权限 id 集合 + own_rights_set = {r.id for r in role.rights_list} + # 3. 列表转属性组件 + rights_list.sort(key=lambda item: (item["pid"], item["id"]), reverse=True) + tree_dict = {} + for rights_dict in rights_list: # 遍历子节点 + # 2. 如果当前阶段已经存在于树状表格字典,则是父节点 + if rights_dict["id"] in tree_dict.keys(): + # 将之前的节点添加到父节点之下 + rights_dict["children"] = deepcopy(tree_dict[rights_dict["id"]]) + rights_dict["children"].sort(key=lambda item: item["sort"]) + del tree_dict[rights_dict["id"]] + + # 1. 如果父节点未出现在树状字典里面,就新增子节点列表,否则就追加 + if rights_dict["pid"] not in tree_dict.keys(): + if rights_dict["id"] in own_rights_set: + rights_dict["checked"] = True + tree_dict[rights_dict["pid"]] = [rights_dict] + else: + if rights_dict["id"] in own_rights_set: + rights_dict["checked"] = True + tree_dict[rights_dict["pid"]].append(rights_dict) + + return {"code": 0, "data": tree_dict.get(0)} + + return { + "code": 0, + "message": "返回角色权限数据成功", + "data": [rights.json() for rights in role.rights_list], + } + + +@role_api.put("/role/role_rights/") +def change_role_rights(rid): + rights_ids = request.json.get("rights_ids", "") + + rights_list = rights_ids.split(",") + role: RoleORM = db.session.execute( + db.select(RoleORM).where(RoleORM.id == rid) + ).scalar() + rights_obj_list = db.session.execute( + db.select(RightsORM).where(RightsORM.id.in_(rights_list)) + ).all() + print(role.rights_list) + print([r[0] for r in rights_obj_list]) + role.rights_list = [r[0] for r in rights_obj_list] + role.save() + print(role.rights_list) + return {"code": 0, "message": "授权成功"} diff --git a/pear_admin/views/index.py b/pear_admin/views/index.py index 4a2c4e3..dbc425f 100644 --- a/pear_admin/views/index.py +++ b/pear_admin/views/index.py @@ -1,4 +1,4 @@ -from flask import Blueprint, render_template +from flask import Blueprint, render_template, send_from_directory from flask_jwt_extended import jwt_required index_bp = Blueprint("index", __name__) @@ -29,3 +29,13 @@ def console1(): @index_bp.route("/view/analysis/index.html") def analysis(): return render_template("view/analysis/index.html") + + +@index_bp.route("/view/system/person.html") +def person(): + return render_template("view/system/person.html") + + +@index_bp.route("/favicon.ico") +def fav_icon(): + return send_from_directory(directory="static", path="favicon.ico") diff --git a/pear_admin/views/views.py b/pear_admin/views/views.py index bad74e4..6d7a429 100644 --- a/pear_admin/views/views.py +++ b/pear_admin/views/views.py @@ -1,23 +1,28 @@ from flask import Blueprint, render_template -views_bp = Blueprint("views", __name__, url_prefix="/views") +views_bp = Blueprint("views", __name__) -@views_bp.get("/rights") +@views_bp.get("/views/rights") def rights_view(): return render_template("views/rights/index.html") -@views_bp.get("/role") +@views_bp.get("/views/role") def role_view(): return render_template("views/role/index.html") -@views_bp.get("/department") +@views_bp.get("/views/role_rights/") +def role_rights_view(rid): + return render_template("views/role/role_rights.html", rid=rid) + + +@views_bp.get("/views/department") def department_view(): return render_template("views/department/index.html") -@views_bp.get("/user") +@views_bp.get("/views/user") def user_view(): return render_template("views/user/index.html") diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000..3886136 Binary files /dev/null and b/static/favicon.ico differ diff --git a/templates/error/403.html b/templates/error/403.html index a8d1ac8..270f221 100644 --- a/templates/error/403.html +++ b/templates/error/403.html @@ -1,129 +1,291 @@ - +
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
-
-

403

-
-
- 抱歉, 你无权访问该页面. -
-
- -
-
\ No newline at end of file +
+
+

403

+
+
抱歉, 你无权访问该页面.
+
+ +
+
diff --git a/templates/error/404.html b/templates/error/404.html index 9f4ddb0..84da654 100644 --- a/templates/error/404.html +++ b/templates/error/404.html @@ -1,137 +1,303 @@ - +
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
-
-

404

-
-
- 抱歉, 你访问的页面不存在. -
-
- -
-
\ No newline at end of file +
+
+

404

+
+
抱歉, 你访问的页面不存在.
+
+ +
+
diff --git a/templates/error/500.html b/templates/error/500.html index 4f4b8c7..a2004c0 100644 --- a/templates/error/500.html +++ b/templates/error/500.html @@ -1,151 +1,346 @@ - +
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
-
-

500

-
-
- 抱歉, 服务器出错了. -
-
- -
-
\ No newline at end of file +
+
+

500

+
+
抱歉, 服务器出错了.
+
+ +
+
diff --git a/templates/view/system/person.html b/templates/view/system/person.html new file mode 100644 index 0000000..fd73254 --- /dev/null +++ b/templates/view/system/person.html @@ -0,0 +1,308 @@ + + + + + 个人资料 + + + +
+
+
+
+
+ +

就眠仪式

+

China , 中国

+
+
+
+ 今日事 ,今日毕 +
+
+ +
+
+ 归档 +
+
+
    +
  • 优化代码格式2020-06-04 11:28
  • +
  • 新增消息组件2020-06-01 04:23
  • +
  • 移动端兼容2020-05-22 21:38
  • +
  • 系统布局优化2020-05-15 14:26
  • +
  • 兼容多系统菜单模式2020-05-13 16:32 +
  • +
  • 兼容多标签页切换2019-12-9 14:58 +
  • +
  • 扩展下拉组件2019-12-7 9:06
  • +
  • 扩展卡片样式2019-12-1 10:26
  • +
+
+
+
+
+
+
+ 我的文章 +
+
+
+
+
+
+
+ +
+
+
为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习? +
+
+ “Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~ +
+
2020-06-12        评论 5 点赞 12 + 转发 4 +
+
+
+
+
+ +
+
+
为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习? +
+
+ “Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~ +
+
2020-06-12        评论 5 点赞 12 + 转发 4 +
+
+
+
+
+ +
+
+
为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习? +
+
+ “Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~ +
+
2020-06-12        评论 5 点赞 12 + 转发 4 +
+
+
+
+
+ +
+
+
为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习? +
+
+ “Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~ +
+
2020-06-12        评论 5 点赞 12 + 转发 4 +
+
+
+
+
+ +
+
+
为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习? +
+
+ “Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~ +
+
2020-06-12        评论 5 点赞 12 + 转发 4 +
+
+
+
+
+ +
+
+
为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习? +
+
+ “Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~ +
+
2020-06-12        评论 5 点赞 12 + 转发 4 +
+
+
+
+
+ +
+
+
为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习? +
+
+ “Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~ +
+
2020-06-12        评论 5 点赞 12 + 转发 4 +
+
+
+
+
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/templates/views/role/index.html b/templates/views/role/index.html index 9815661..200c3c9 100644 --- a/templates/views/role/index.html +++ b/templates/views/role/index.html @@ -206,6 +206,13 @@ } else if (obj.event === "role-tool-detail") { console.log("角色授权"); // role-tool-detail + layer.open({ + type: 2, + title: "授权", + shade: 0.1, + area: ["500px", "500px"], + content: "/views/role_rights/" + obj.data["id"], + }); } }); diff --git a/templates/views/role/role_rights.html b/templates/views/role/role_rights.html new file mode 100644 index 0000000..b0eedd3 --- /dev/null +++ b/templates/views/role/role_rights.html @@ -0,0 +1,89 @@ + + + + + Title + {% include 'includes/script.html' %} + + +
+
+
+
    +
    +
    +
    + + +
    +
    +
    +
    + + + + \ No newline at end of file