项目管理系统
作为创作的顶层容器,统一管理小说的所有元素
📖 系统概述
项目管理系统是灵码小说助手的核心枢纽,每个小说项目(NovelProject)是所有创作内容的顶层容器。它管理着小说的基本信息、关联的角色、大纲结构和章节内容。
🎯 功能特性
1. 项目创建与配置
| 字段 | 类型 | 说明 |
|---|---|---|
title | 字符串 | 小说标题(必填) |
description | 文本 | 小说简介 |
genre | 字符串 | 小说类型(科幻、奇幻、悬疑等) |
style | 字符串 | 写作风格(现实主义、浪漫主义等) |
2. 项目状态管理
draft (草稿) → in_progress (进行中) → completed (已完成) → archived (已归档)| 状态 | 说明 |
|---|---|
draft | 初始状态,项目刚创建 |
in_progress | 正在创作中 |
completed | 创作完成 |
archived | 归档存储 |
3. 章节模式切换
项目支持两种创作模式:
| 模式 | 字段值 | 适用场景 |
|---|---|---|
| 章节模式 | use_chapter_system = true | 长篇小说,需要章节管理 |
| 单篇模式 | use_chapter_system = false | 短篇小说,内容存储在 content 字段 |
4. 字数统计
- 章节模式: 自动汇总所有章节的字数
- 单篇模式: 实时统计
content字段字数
🗄️ 数据模型
NovelProject 模型
python
class NovelProject(models.Model):
id = fields.IntField(pk=True)
title = fields.CharField(max_length=200) # 标题
description = fields.TextField(null=True) # 简介
genre = fields.CharField(max_length=50, null=True) # 类型
style = fields.CharField(max_length=50, null=True) # 风格
status = fields.CharField(max_length=20, default="draft") # 状态
content = fields.TextField(null=True) # 单篇模式内容
word_count = fields.IntField(default=0) # 字数
use_chapter_system = fields.BooleanField(default=True) # 是否章节模式
chapter_ids = fields.JSONField(default=[]) # 章节ID列表
user_id = fields.IntField() # 创建用户
created_at = fields.DatetimeField(auto_now_add=True)
updated_at = fields.DatetimeField(auto_now=True)
class Meta:
table = "novel_projects"关联关系
NovelProject
│
├──→ Character (characters) # 一对多:项目角色
│
├──→ OutlineNode (outline_nodes) # 一对多:大纲节点
│
└──→ Chapter (chapters) # 一对多:章节列表🔌 API 接口
基础路径
/api/novel-project接口列表
| 方法 | 路径 | 说明 |
|---|---|---|
GET | / | 获取当前用户的项目列表 |
POST | / | 创建新项目 |
GET | /{project_id} | 获取项目详情 |
PUT | /{project_id} | 更新项目信息 |
DELETE | /{project_id} | 删除项目 |
PUT | /{project_id}/status | 更新项目状态 |
GET | /{project_id}/statistics | 获取项目统计信息 |
请求/响应示例
创建项目
请求:
json
POST /api/novel-project
{
"title": "星际迷航",
"description": "一个关于宇宙探索的故事",
"genre": "科幻",
"style": "硬科幻",
"use_chapter_system": true
}响应:
json
{
"id": 1,
"title": "星际迷航",
"description": "一个关于宇宙探索的故事",
"genre": "科幻",
"style": "硬科幻",
"status": "draft",
"use_chapter_system": true,
"word_count": 0,
"created_at": "2026-01-04T12:00:00Z"
}获取项目列表
请求:
GET /api/novel-project?status=in_progress&page=1&page_size=10响应:
json
{
"items": [...],
"total": 5,
"page": 1,
"page_size": 10
}🖥️ 用户交互
项目列表页
- 卡片视图: 展示项目封面、标题、状态、字数
- 筛选功能: 按状态、类型筛选
- 排序功能: 按创建时间、更新时间、字数排序
- 快捷操作: 继续创作、查看大纲、删除
项目详情页
- 基本信息编辑: 在线修改标题、简介、类型、风格
- 状态切换: 下拉菜单快速切换项目状态
- 模式切换: 切换章节模式/单篇模式(仅在无章节时可切换)
- 统计面板: 显示字数、章节数、角色数
创建项目流程
1. 点击"新建项目"
↓
2. 填写基本信息(标题必填)
↓
3. 选择创作模式(章节/单篇)
↓
4. 确认创建
↓
5. 跳转到项目详情页⚙️ 技术实现
前端
路径: src/features/novel_project/frontend/
| 文件 | 说明 |
|---|---|
api.ts | API 调用封装 |
pages/ProjectListPage.tsx | 项目列表页 |
pages/ProjectDetailPage.tsx | 项目详情页 |
pages/CreateProjectPage.tsx | 创建项目页 |
后端
路径: src/features/novel_project/backend/
| 文件 | 说明 |
|---|---|
models.py | 数据模型定义 |
schemas.py | Pydantic 验证模型 |
router.py | FastAPI 路由 |
services/ | 业务逻辑服务 |