From 537e21728bab76ead9999d16078f92b5b4db1929 Mon Sep 17 00:00:00 2001 From: zhengxinonly Date: Tue, 31 Oct 2023 20:23:09 +0800 Subject: [PATCH] =?UTF-8?q?feature:=20=E5=AE=8C=E6=88=90=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E6=8E=88=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pear_admin/__init__.py | 22 +- pear_admin/apis/role.py | 69 +++- pear_admin/views/index.py | 12 +- pear_admin/views/views.py | 15 +- static/favicon.ico | Bin 0 -> 4286 bytes templates/error/403.html | 414 +++++++++++++++------- templates/error/404.html | 434 ++++++++++++++++------- templates/error/500.html | 491 ++++++++++++++++++-------- templates/view/system/person.html | 308 ++++++++++++++++ templates/views/role/index.html | 7 + templates/views/role/role_rights.html | 89 +++++ 11 files changed, 1435 insertions(+), 426 deletions(-) create mode 100644 static/favicon.ico create mode 100644 templates/view/system/person.html create mode 100644 templates/views/role/role_rights.html 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 0000000000000000000000000000000000000000..3886136cdbdc7e2f83f2c69107397171f6e25406 GIT binary patch literal 4286 zcmc&&c~H|=9?#C~KRdfKyW5>n8i9l$w+0bUlhUatc$21p+!sA3!#FjXpnH^01`g?-j9-zE=-fOGy5`M-tl|yeZTMX zJqH%+H{{3Vvglvd**~#Zvsf&aEg`bR@+3spnMS@@@+W9wfyKfvY^o99`dtn76f5z8 zcnH1;3i$3)B0#J}e4z@G#xV>k#(yD~>5o5Z??+tH9W3xT2aEY92o=M6Nd+9&UdM{9 zKfo()7;8idh>BHs(50RJ5+hdo-zboGv=)mTGcd~}6Y5gFKK2Vr88 z0^8;1;P&?(B8LJY847&ct}%k!)FYi8G6b$aj(6FqaPX}r_dkR8&O!LZ4Z)ib?L9tz z2`B#s%;99gl$(WR!S@*%A`dI^?6q+?46A{L7CHRa-KJ@)=Q9a<;9D@zfKgGr+ ztQ{t^li~E&8(2wvnN6=rNP>^&t6eqOQtjLr*k>+q-tsQ8x#XRmAU`HgYJ?!AQ%H-CZL6Zer*@GWBY zG$3GY0ZxAL0+s*P>h`7Nd_TC!}{eQG4w_xGHI5#&lnEV+UHu`nif`ILsB}=8g6l zUJl%C?Z%>csqhc3A$n5iY?hdInZwxbhEx^0U(IZ5 zZ|mVm<~0QP<>C3O5kzDwjpk4Bn!B(Jyak`(qf`ZYWcu+Ji@rkOhGHmGTEvmO>G@Oq z^>{nwP4zPo3yTn$J&XZ8bMJxum$2deB8-h`P;_a;X#OodUtzV^QBvpR!NoZPIayz$TPDMvljpH1 zS%jeEND?1HvGa5g#8(2bPZEykGE!p&e2PWu#N5eO88<8UfN!5W67Hxr~uHG1S|8qv(PwMwI$MA>WMuTIr z8_RuTv3_?11Vv%kaViwi$HVZqom*jLFMxxy03R2IL0lb#(&mF0R2z@|q#%WP*YW4y z#lX+|C>rV?qwc|1* zKE*xjxh@vwIiV3}VOL>GdPStmsAV7I~S zY5u47Pwj{1q8d`i@JY>3Ue?6i)u(uglBR>i-iXaz4w@oEc-9t}nMWg7yd72d@*!6l z?)#T6-oyHULUcWS!|)p)A4evs11T1_Z%){>T-683_hmR#8%^{O!pMI++4;p_|s!`qffdLh^Z#|7=PU!@X`_O2#M6+7Rls#zcy^W@)HMr7r z1)`)9%(F?vwy;y6arD=0eX?Qf+EE3*O)>=A&fwfxDI-f|xfJm+RaoJi3HPPhI9^Z> zxm@{cvew;2F{!F-!Fww|fdyLx_B-*gG~EL~5~p%=>WI$zbbAdQO#UC>|JDB&8 +
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
-
-

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