mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-30 16:03:50 +00:00
重构代码生成模块,删除冗余文件并优化结构: 1. 删除旧的form、page、table等相关文件 2. 新增gencode模块基础结构 3. 移动jinja2工具类和模板引擎初始化器到utils目录 4. 优化数据库模型关系定义 5. 更新nginx配置支持WebSocket 6. 添加正则验证和加密工具类 7. 修复菜单和部门模型的循环引用问题 8. 优化初始化脚本和配置加载逻辑 调整初始化流程,使用统一会话管理: 1. 修改数据库初始化使用AsyncSessionLocal 2. 优化定时任务初始化逻辑 3. 统一配置和字典服务初始化方式 4. 修复模型关系定义导致的循环导入问题 其他改进: 1. 更新requirements.txt添加依赖 2. 调整IP白名单配置 3. 优化数据库连接日志输出 4. 修复模型继承关系问题
54 lines
3.0 KiB
Python
54 lines
3.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
菜单模型模块
|
|
定义系统菜单相关数据模型
|
|
"""
|
|
|
|
from typing import Optional, List
|
|
|
|
from sqlalchemy import Boolean, String, Integer, JSON, ForeignKey
|
|
from sqlalchemy.orm import relationship, Mapped, mapped_column
|
|
|
|
from app.core.base_model import ModelMixin
|
|
|
|
|
|
class MenuModel(ModelMixin):
|
|
"""
|
|
菜单表 - 用于存储系统菜单信息 - SQLAlchemy 2.0 语法
|
|
|
|
菜单类型说明:
|
|
1: 目录
|
|
2: 菜单
|
|
3: 按钮/权限
|
|
4: 链接
|
|
"""
|
|
__tablename__ = "system_menu"
|
|
__table_args__ = ({'comment': '菜单表'})
|
|
|
|
name: Mapped[str] = mapped_column(String(50), nullable=False, comment='菜单名称', unique=True)
|
|
type: Mapped[int] = mapped_column(Integer, nullable=False, default=2, comment='菜单类型(1:目录 2:菜单 3:按钮/权限 4:链接)')
|
|
order: Mapped[int] = mapped_column(Integer, nullable=False, default=999, comment='显示排序')
|
|
permission: Mapped[Optional[str]] = mapped_column(String(100), comment='权限标识(如:system:user:list)')
|
|
icon: Mapped[Optional[str]] = mapped_column(String(50), comment='菜单图标')
|
|
route_name: Mapped[Optional[str]] = mapped_column(String(100), comment='路由名称')
|
|
route_path: Mapped[Optional[str]] = mapped_column(String(200), comment='路由路径')
|
|
component_path: Mapped[Optional[str]] = mapped_column(String(200), comment='组件路径')
|
|
redirect: Mapped[Optional[str]] = mapped_column(String(200), comment='重定向地址')
|
|
hidden: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False, comment='是否隐藏(True:隐藏 False:显示)')
|
|
keep_alive: Mapped[bool] = mapped_column(Boolean, default=True, nullable=False, comment='是否缓存(True:是 False:否)')
|
|
always_show: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False, comment='是否始终显示(True:是 False:否)')
|
|
title: Mapped[Optional[str]] = mapped_column(String(50), comment='菜单标题')
|
|
params: Mapped[Optional[dict]] = mapped_column(JSON, comment='路由参数(JSON对象)')
|
|
affix: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False, comment='是否固定标签页(True:是 False:否)')
|
|
|
|
parent_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey('system_menu.id', ondelete='SET NULL'), default=None, index=True, comment='父菜单ID')
|
|
# parent: Mapped[Optional['MenuModel']] = relationship(cascade='all, delete-orphan', primaryjoin="MenuModel.parent_id == MenuModel.id", uselist=False)
|
|
|
|
# 角色关联关系
|
|
roles: Mapped[List["RoleModel"]] = relationship(secondary="system_role_menus", back_populates="menus", lazy="selectin")
|
|
|
|
# link: Mapped[Optional[str]] = mapped_column(String(255), comment='外链地址')
|
|
# iframe: Mapped[Optional[str]] = mapped_column(String(255), comment='内嵌iframe地址')
|
|
parent: Mapped[Optional['MenuModel']] = relationship(init=False, back_populates='children', remote_side=[id])
|
|
children: Mapped[Optional[list['MenuModel']]] = relationship(init=False, back_populates='parent')
|