fix: 修复前端空白页与API调用错误,统一创作流程

- 前端
  - topics.html: 恢复结构并修复Vue初始化问题
  - 调整创作按钮逻辑:仅已发布选题禁用
  - 修正API端点与payload格式(generate/optimizer/publishing使用topic_ids数组)
  - 移除ElementPlus图标模块依赖,使用全局构建
  - admin.html: 回退至Options API版本,解决this上下文错误
- 后端
  - 注册/api/generate/run路由
  - 简化generate逻辑:允许非已发布选题重创作,更新状态为“待审查”
  - 统一logs查询接口支持query参数
  - 修复admin用户管理字段引用
  - 系统概览返回{ stats }结构
- 静态资源整理
  - 删除冗余element-plus-icons、重复CSS/JS、图标文件
  - 正确放置Vue和ElementPlus全局文件
- 数据库与数据
  - 补充30个案例
  - 更新选题状态与初始数据

验证:所有页面可访问,API认证与端点正常工作。
This commit is contained in:
lt
2026-05-06 21:44:56 +08:00
parent bd381ff65a
commit 8920a337e0
29 changed files with 159 additions and 138169 deletions
+8 -46
View File
@@ -9,12 +9,12 @@ import asyncio
from core.security import get_current_user, create_audit_log
from app.database import get_db
from app.models import Topic, User, GenerateTask
from app.models import Topic, User
router = APIRouter()
class BatchGenerateRequest(BaseModel):
topic_ids: Optional[List[int]] = None
topic_ids: Optional[List[str]] = None
class BatchOptimizeRequest(BaseModel):
topic_ids: List[int]
@@ -25,11 +25,10 @@ async def batch_generate(
current_user: User = Depends(get_current_user),
db: Session = Depends(get_db)
):
"""批量创建选题文章"""
"""批量创建选题文章(简化版)"""
# 如果没有指定topic_ids,则获取所有待处理的选题
if not request.topic_ids:
topics = db.query(Topic).filter(Topic.status == "待处理").all()
topics = db.query(Topic).filter(Topic.status != "已发布").all()
topic_ids = [t.id for t in topics]
else:
topic_ids = request.topic_ids
@@ -40,7 +39,7 @@ async def batch_generate(
# 验证选题是否存在且状态正确
valid_topics = db.query(Topic).filter(
Topic.id.in_(topic_ids),
Topic.status == "待处理"
Topic.status != "已发布"
).all()
if len(valid_topics) != len(topic_ids):
@@ -50,23 +49,6 @@ async def batch_generate(
detail=f"{invalid_count}个选题状态不正确或不存在"
)
# 创建生成任务记录
tasks = []
for topic in valid_topics:
task = GenerateTask(
topic_id=topic.id,
status="pending",
created_by=current_user.id
)
db.add(task)
tasks.append(task)
db.commit()
# 异步执行生成任务(简化实现)
# 实际生产环境应使用Celery等任务队列
asyncio.create_task(process_generation_tasks(tasks))
# 更新选题状态为"待审查"
for topic in valid_topics:
topic.generated_at = datetime.utcnow()
@@ -82,16 +64,17 @@ async def batch_generate(
action="batch_generate",
resource_type="topic",
resource_id=None,
details=f"处理选题数量: {len(tasks)}"
details=f"处理选题数量: {len(valid_topics)}"
)
return {
"result": {
"ok": True,
"count": len(tasks)
"count": len(valid_topics)
}
}
@router.post("/optimize/run")
async def batch_optimize(
request: BatchOptimizeRequest,
@@ -149,24 +132,3 @@ async def batch_optimize(
"total": len(valid_topics)
}
}
async def process_generation_tasks(tasks: List[GenerateTask]):
"""处理生成任务(异步函数)"""
# 这里是生成文章的异步逻辑
# 实际生产环境应使用Celery等专业的任务队列系统
for task in tasks:
try:
# 模拟生成过程
await asyncio.sleep(2) # 模拟耗时操作
# 更新任务状态为已完成
task.status = "completed"
task.result = {"success": True, "message": "文章生成完成"}
except Exception as e:
# 处理失败情况
task.status = "failed"
task.result = {"success": False, "error": str(e)}
# 注意:这个函数需要访问数据库,实际实现中可能需要额外的依赖注入