From f95ae54fd5861b238e1db2d00b4797756beeec7e Mon Sep 17 00:00:00 2001 From: zhengxinonly Date: Tue, 3 Oct 2023 01:04:15 +0800 Subject: [PATCH] =?UTF-8?q?feature:=20=E6=9D=83=E9=99=90=E5=88=97=E8=A1=A8?= =?UTF-8?q?-01?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pear_admin/apis/__init__.py | 2 + pear_admin/apis/rights.py | 35 ++++++++ pear_admin/orms/rights.py | 11 ++- pear_admin/views/__init__.py | 2 + pear_admin/views/views.py | 8 ++ templates/views/rights/index.html | 133 ++++++++++++++++++++++++++++++ 6 files changed, 188 insertions(+), 3 deletions(-) create mode 100644 pear_admin/apis/rights.py create mode 100644 pear_admin/views/views.py create mode 100644 templates/views/rights/index.html diff --git a/pear_admin/apis/__init__.py b/pear_admin/apis/__init__.py index 4158dce..7a9cdcb 100644 --- a/pear_admin/apis/__init__.py +++ b/pear_admin/apis/__init__.py @@ -1,11 +1,13 @@ from flask import Blueprint, Flask from .passport import passport_api +from .rights import rights_api def register_apis(app: Flask): apis = Blueprint("api", __name__, url_prefix="/api/v1") apis.register_blueprint(passport_api) + apis.register_blueprint(rights_api) app.register_blueprint(apis) diff --git a/pear_admin/apis/rights.py b/pear_admin/apis/rights.py new file mode 100644 index 0000000..7c6fd95 --- /dev/null +++ b/pear_admin/apis/rights.py @@ -0,0 +1,35 @@ +from flask import Blueprint, request +from flask_jwt_extended import jwt_required + +from pear_admin.extensions import db +from pear_admin.orms import RightsORM + +rights_api = Blueprint("rights", __name__) + + +@rights_api.get("/rights") +@jwt_required() +def rights_list(): + page = request.args.get("page", type=int, default=1) + per_page = request.args.get("per_page", type=int, default=10) + + q = db.select(RightsORM).where(RightsORM.type == "menu") + pages = db.paginate(q, page=page, per_page=per_page, error_out=False) + + ret = [] + + for page in pages.items: + data = page.json() + data["children"] = [] + for child in page.children: + child_data = child.json() + if child.children: + child_data["children"] = [ + sub_child.json() for sub_child in child.children + ] + child_data["isParent"] = True + + data["children"].append(child_data) + data["isParent"] = True + ret.append(data) + return {"code": 0, "message": "请求权限数据成功", "count": pages.total, "data": ret} diff --git a/pear_admin/orms/rights.py b/pear_admin/orms/rights.py index 4f90684..cd60eca 100644 --- a/pear_admin/orms/rights.py +++ b/pear_admin/orms/rights.py @@ -1,3 +1,5 @@ +from sqlalchemy.orm import backref + from pear_admin.extensions import db from ._base import BaseORM @@ -23,7 +25,10 @@ class RightsORM(BaseORM): comment="父类编号", ) - # parent = db.relationship("RightsORM", remote_side=[pid]) # 自关联 + parent = db.relationship( + "RightsORM", back_populates="children", remote_side=[id] + ) # 自关联 + children = db.relationship("RightsORM", back_populates="parent") def json(self): return { @@ -32,7 +37,7 @@ class RightsORM(BaseORM): "code": self.code, "type": self.type, "url": self.url, - "icon": self.icon, + "icon_sign": self.icon, "status": self.status, "sort": self.sort, "open_type": self.open_type, @@ -45,10 +50,10 @@ class RightsORM(BaseORM): return { "id": self.id, "pid": self.pid, - "rights_id": self.id, "title": self.name, "type": type_map_dict[self.type], "href": self.url, "icon": self.icon, "sort": self.sort, + "openType": self.open_type, } diff --git a/pear_admin/views/__init__.py b/pear_admin/views/__init__.py index ce1c943..36feac2 100644 --- a/pear_admin/views/__init__.py +++ b/pear_admin/views/__init__.py @@ -1,7 +1,9 @@ from flask import Flask from .index import index_bp +from .views import views_bp def register_views(app: Flask): app.register_blueprint(index_bp) + app.register_blueprint(views_bp) diff --git a/pear_admin/views/views.py b/pear_admin/views/views.py new file mode 100644 index 0000000..28745ef --- /dev/null +++ b/pear_admin/views/views.py @@ -0,0 +1,8 @@ +from flask import Blueprint, render_template + +views_bp = Blueprint("views", __name__, url_prefix="/views") + + +@views_bp.get("/rights") +def rights_view(): + return render_template("views/rights/index.html") diff --git a/templates/views/rights/index.html b/templates/views/rights/index.html new file mode 100644 index 0000000..2ecddff --- /dev/null +++ b/templates/views/rights/index.html @@ -0,0 +1,133 @@ + + + + + 权限管理 + + + + + + +
+
+
+
+
+
+
+ + + + +