""" 导航分类表 Nav.category 是字符串字段,难以管理顺序/启用/图标。 NavCategory 把"分类"提到一张独立表,允许后台做完整的 CRUD。 数据关系: - NavCategory 1 — N Nav - 保留 Nav.category 字符串字段为冗余存储,避免前端热路径上做 LEFT JOIN """ import datetime from applications.extensions import db class NavCategory(db.Model): __tablename__ = 'nav_category' id = db.Column(db.Integer, primary_key=True, autoincrement=True, comment='分类ID') # 同名分类不能重复,方便前台 URL /site/category/ 用作 slug name = db.Column(db.String(50), nullable=False, unique=True, index=True, comment='分类名(前端分类详情 URL)') # 分类图标(前端首页标题旁小图标) icon = db.Column(db.String(50), default='layui-icon-list', comment='layui-icon class') # 分类简介(前端首页卡片标题下方描述) description = db.Column(db.String(255), default='', comment='分类简介') # 同级别的展示顺序(前端首页自上而下) sort = db.Column(db.Integer, default=0, comment='排序') # 1=启用,0=禁用(禁用后前台不再展示该分类,但 Nav 记录仍保留) enable = db.Column(db.Integer, default=1, comment='状态(1启用,0关闭)') 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, 'name': self.name, 'icon': self.icon or 'layui-icon-list', 'description': self.description or '', 'sort': self.sort or 0, 'enable': self.enable, 'create_at': self.create_at.strftime('%Y-%m-%d %H:%M:%S') if self.create_at else '', 'update_at': self.update_at.strftime('%Y-%m-%d %H:%M:%S') if self.update_at else '', }