feat: 增加案例/任务日志/LLM配置/系统配置管理功能\n\n- 扩展案例数据至30个\n- 新增Case, TaskLog, LLMConfig, SystemConfig的API路由\n- 完善initial_data导入脚本\n- 创建前端管理页面admin.html,支持完整增删改查\n- 更新导航菜单,增加系统管理入口
This commit is contained in:
@@ -3,7 +3,7 @@ import os
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
from .database import SessionLocal, init_db
|
||||
from .models import Topic, User
|
||||
from .models import Topic, User, Case, LLMConfig, SystemConfig
|
||||
import bcrypt
|
||||
|
||||
# 计算项目根目录(backend/app/initial_data.py -> 上升3层到 yu-zhi-ran)
|
||||
@@ -11,6 +11,7 @@ PROJECT_ROOT = Path(__file__).resolve().parents[1]
|
||||
if os.getenv('PROJECT_ROOT'):
|
||||
PROJECT_ROOT = Path(os.getenv('PROJECT_ROOT'))
|
||||
TOPICS_FILE = PROJECT_ROOT / "automation" / "data" / "sustainability_topics.json"
|
||||
CASES_FILE = PROJECT_ROOT / "automation" / "data" / "initial_cases.json"
|
||||
|
||||
# 从环境变量读取管理员配置
|
||||
DEFAULT_ADMIN_USERNAME = os.getenv('DEFAULT_ADMIN_USERNAME', 'admin')
|
||||
@@ -56,7 +57,78 @@ def import_initial_data():
|
||||
else:
|
||||
print("数据库已有选题数据,跳过导入")
|
||||
|
||||
# 2. 创建默认管理员用户(bcrypt 哈希)
|
||||
|
||||
# 3. 导入案例数据(如果为空)
|
||||
if db.query(Case).count() == 0:
|
||||
if __import__('os').path.exists(CASES_FILE):
|
||||
cases_data = json.loads(open(CASES_FILE, encoding='utf-8').read())
|
||||
for c in cases_data:
|
||||
case = Case(
|
||||
id=c['id'],
|
||||
title=c['title'],
|
||||
field=c['field'],
|
||||
summary=c['summary'],
|
||||
key_metrics=c.get('key_metrics'),
|
||||
date=c.get('date'),
|
||||
source=c['source'],
|
||||
source_url=c.get('source_url'),
|
||||
credibility_rating=c.get('credibility_rating'),
|
||||
china_applicability=c.get('china_applicability')
|
||||
)
|
||||
db.add(case)
|
||||
db.commit()
|
||||
print(f"✅ 导入 {len(cases_data)} 条案例")
|
||||
else:
|
||||
print(f"⚠️ 案例文件不存在: {CASES_FILE}")
|
||||
|
||||
# 4. 插入 LLM 默认配置
|
||||
if db.query(LLMConfig).count() == 0:
|
||||
default_llm = LLMConfig(
|
||||
name="default_expand",
|
||||
system_prompt="你是一个专业的内容创作者。",
|
||||
user_prompt_template="""你是一个专业的内容创作者,风格精炼、直接、切中要点。请将以下大纲扩展为完整的文章章节,要求如下:
|
||||
|
||||
### 选题信息
|
||||
标题:{topic.get('title')}
|
||||
领域:{topic.get('field')}
|
||||
核心观点:{topic.get('core_concept', '')}
|
||||
受众痛点:{topic.get('audience_pain', '')}
|
||||
独特视角:{topic.get('unique_angle', '')}
|
||||
|
||||
### 当前章节
|
||||
## {section_title}
|
||||
{section_content}
|
||||
|
||||
### 输出要求
|
||||
- 以 "## {section_title}" 开始
|
||||
- 字数:200-300 字(精炼为主)
|
||||
- 语言:直白、有冲击力,避免空洞套话
|
||||
- 使用 Markdown 格式
|
||||
- 每个论点配具体案例或数据支撑
|
||||
- 确保与整体文章调性一致
|
||||
|
||||
直接输出完整 Markdown 章节(包括标题和正文)。""",
|
||||
temperature=0.8,
|
||||
max_tokens=1000,
|
||||
model="stepfun-ai/step-3.5-flash",
|
||||
is_active=True
|
||||
)
|
||||
db.add(default_llm)
|
||||
db.commit()
|
||||
print("✅ 插入默认 LLM 配置")
|
||||
|
||||
# 5. 插入系统配置默认值
|
||||
default_system_configs = [
|
||||
{"key": "collector_enabled", "value": "false", "description": "是否启用采集器"},
|
||||
{"key": "scheduler_interval", "value": "daily", "description": "调度间隔:daily/hourly/weekly"},
|
||||
]
|
||||
for cfg in default_system_configs:
|
||||
if db.query(SystemConfig).filter(SystemConfig.key == cfg["key"]).first() is None:
|
||||
db.add(SystemConfig(**cfg))
|
||||
db.commit()
|
||||
print("✅ 插入默认系统配置")
|
||||
|
||||
# 2. 创建默认管理员用户(bcrypt 哈希)
|
||||
admin_exists = db.query(User).filter(User.username == DEFAULT_ADMIN_USERNAME).first()
|
||||
if not admin_exists:
|
||||
hashed = bcrypt.hashpw(DEFAULT_ADMIN_PASSWORD.encode('utf-8'), bcrypt.gensalt())
|
||||
|
||||
Reference in New Issue
Block a user