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:
@@ -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)}
|
||||
|
||||
# 注意:这个函数需要访问数据库,实际实现中可能需要额外的依赖注入
|
||||
Reference in New Issue
Block a user