新增模块
- Nav 模型(applications/models/admin_nav.py):公开导航表,与 admin_power 解耦
- NavOutSchema / NavManageSchema(applications/schemas/admin_nav.py)
- 前台公开视图 applications/view/public/nav.py:/site/、/site/category/<name>、/site/api/navs,无需登录
- 后台管理视图 applications/view/system/nav.py:CRUD + 启用/禁用,挂入 system_bp
- 前台模板 templates/public/{base,index,category}.html(独立配色,无需登录即可访问)
- 后台模板 templates/system/nav/{main,add,edit}.html(Layui table + form)
调整
- applications/view/__init__.py:注册前台蓝图到根
- applications/view/system/__init__.py:注册后台 nav 子蓝图
- applications/common/script/admin.py:admin init/export 支持 navs 数组
- applications/common/script/app_data/init.json:新增 10 条导航种子 + 4 条 system:nav 权限
数据库
- 新增 public_nav 表(含 category 索引)
- migration: 38751d88d42c_add_public_nav_table.py
69 lines
2.5 KiB
Python
69 lines
2.5 KiB
Python
"""
|
|
前台公开导航模型。
|
|
|
|
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 '',
|
|
} |