""" 前台公开导航模型。 Nav 用于「公开访问的导航聚合页」,与 admin_power 表完全解耦: - admin_power 控制后台管理菜单,需要登录 - public_nav 控制前台公开导航,无需登录 后续若要做前台用户(收藏、提交链接),只需加独立 User 模型, 不需要碰 RBAC。 """ import datetime from applications.extensions import db class Nav(db.Model): __tablename__ = 'public_nav' id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='导航ID') # 分类名(如"开发工具"/"AI"/"设计资源"),用于首页聚合展示 category = db.Column(db.String(50), nullable=False, comment='分类', index=True) # 单条导航的标题 title = db.Column(db.String(100), nullable=False, comment='标题') # 链接 URL(站内或外链) url = db.Column(db.String(255), nullable=False, comment='链接') # 简短描述(鼠标悬停时可见) description = db.Column(db.String(255), default='', comment='简介') # layui-icon 的 class 名,例如 "layui-icon-website" icon = db.Column(db.String(100), default='layui-icon-link', comment='图标') # 同分类下的显示顺序 sort = db.Column(db.Integer, default=0, comment='排序') # 1=启用,0=禁用(禁用后前台不再展示,后台列表仍可见) status = db.Column(db.Integer, default=1, comment='状态(1启用,0关闭)') # 1=外链(新窗口打开),0=站内(当前窗口) is_external = db.Column(db.Integer, default=1, comment='是否外链') # 创建者(后台管理员用户名,便于追溯),非空约束放宽以便匿名维护 create_by = db.Column(db.String(50), default='admin', comment='创建者') create_at = db.Column(db.DateTime, default=datetime.datetime.now, comment='创建时间') update_at = db.Column( db.DateTime, default=datetime.datetime.now, onupdate=datetime.datetime.now, comment='更新时间', ) def to_dict(self): """方便模板直接读取""" return { 'id': self.id, 'category': self.category, 'title': self.title, 'url': self.url, 'description': self.description or '', 'icon': self.icon or 'layui-icon-link', 'sort': self.sort or 0, 'status': self.status, 'is_external': self.is_external, 'create_by': self.create_by, 'create_at': self.create_at.strftime('%Y-%m-%d %H:%M:%S') if self.create_at else '', }