新增用户管理/角色管理/菜单管理功能,修复创作流水线研究脚本
- 用户管理:新增编辑弹窗(修改用户名/角色/密码),增加组织/创建时间/最后登录列 - 角色管理:新增 Role 模型 + CRUD API,admin.html 新增角色管理 tab - 菜单管理:新增 Menu 模型 + CRUD API,导航栏从 API 动态加载菜单项 - 个人中心:右上角下拉菜单(个人信息/修改密码/退出),新增修改密码 API - 种子数据:initial_data.py 自动创建默认角色(admin/editor)和默认菜单(7项) - 修复 research.py 缺少 enrich_topic_research 函数导致导入失败 - 修复 db_helper.py 中 generated_at 条件导致重创作不更新时间戳 - admin.html 操作列加宽防止按钮换行,平台配置增加删除按钮 - articles.html 预览弹窗加 lock-scroll=false 防止页面尺寸跳动
This commit is contained in:
@@ -104,6 +104,18 @@ def init_db():
|
||||
("trend_field_mappings", "field_name", "VARCHAR"),
|
||||
("trend_field_mappings", "sort_order", "INTEGER DEFAULT 0"),
|
||||
("trend_field_mappings", "is_active", "BOOLEAN DEFAULT TRUE"),
|
||||
("roles", "id", "INTEGER PRIMARY KEY"),
|
||||
("roles", "name", "VARCHAR UNIQUE"),
|
||||
("roles", "description", "VARCHAR DEFAULT ''"),
|
||||
("roles", "is_system", "BOOLEAN DEFAULT FALSE"),
|
||||
("menus", "id", "INTEGER PRIMARY KEY"),
|
||||
("menus", "parent_id", "INTEGER REFERENCES menus(id)"),
|
||||
("menus", "name", "VARCHAR"),
|
||||
("menus", "path", "VARCHAR"),
|
||||
("menus", "icon", "VARCHAR DEFAULT ''"),
|
||||
("menus", "sort_order", "INTEGER DEFAULT 0"),
|
||||
("menus", "roles", "JSON DEFAULT '[]'::json"),
|
||||
("menus", "is_active", "BOOLEAN DEFAULT TRUE"),
|
||||
]:
|
||||
try:
|
||||
conn.execute(text(f"ALTER TABLE {table} ADD COLUMN IF NOT EXISTS {col} {typ}"))
|
||||
@@ -112,6 +124,15 @@ def init_db():
|
||||
conn.execute(text(f"ALTER TABLE {table} ADD COLUMN {col} {typ}"))
|
||||
except Exception:
|
||||
pass
|
||||
# Create roles and menus tables if they don't exist
|
||||
for tbl_sql in [
|
||||
"CREATE TABLE IF NOT EXISTS roles (id SERIAL PRIMARY KEY, name VARCHAR UNIQUE NOT NULL, description VARCHAR DEFAULT '', is_system BOOLEAN DEFAULT FALSE, created_at TIMESTAMP WITH TIME ZONE DEFAULT now())",
|
||||
"CREATE TABLE IF NOT EXISTS menus (id SERIAL PRIMARY KEY, parent_id INTEGER REFERENCES menus(id), name VARCHAR NOT NULL, path VARCHAR NOT NULL, icon VARCHAR DEFAULT '', sort_order INTEGER DEFAULT 0, roles JSON DEFAULT '[]'::json, is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP WITH TIME ZONE DEFAULT now())",
|
||||
]:
|
||||
try:
|
||||
conn.execute(text(tbl_sql))
|
||||
except Exception:
|
||||
pass
|
||||
conn.commit()
|
||||
except Exception:
|
||||
pass # SQLite 不支持 IF NOT EXISTS,但 create_all 对 SQLite 够用,这里仅为 PostgreSQL 迁移
|
||||
|
||||
Reference in New Issue
Block a user