# 章节拖拽排序 - 后台处理说明 ## 一、后台已实现 ### 1. 接口 - **路径**:`PUT /api/db/book` - **鉴权**:需登录管理端(AdminAuth) **请求体**(拖拽排序时): ```json { "action": "reorder", "ids": ["1.1", "2.3", "3.1", ...] } ``` - `ids`:所有 section 的 id,按新的排序顺序排列 - 后端会依次将每条记录的 `sort_order` 更新为 0、1、2、… ### 2. 代码位置 - `soul-api/internal/handler/db_book.go`:`DBBookAction` 中 `http.MethodPut` 分支,约第 196–206 行 --- ## 二、数据库必须支持 ### 1. `sort_order` 列 `chapters` 表必须有 `sort_order` 列,否则 `UPDATE sort_order` 会报错。 **检查**: ```sql SHOW COLUMNS FROM chapters LIKE 'sort_order'; ``` **若不存在,执行迁移**: ```bash cd e:\Gongsi\Mycontent node .cursor/scripts/db-exec/run.js -f soul-api/scripts/add-sort-order-to-chapters.sql ``` 或手动执行: ```sql ALTER TABLE chapters ADD COLUMN sort_order INT DEFAULT 0; ``` ### 2. 现有数据处理 若已有数据且 `sort_order` 为 NULL 或未设置,可先按当前顺序初始化: ```sql SET @i = 0; UPDATE chapters SET sort_order = (@i := @i + 1) ORDER BY id; ``` --- ## 三、排查“无法拖拽” | 现象 | 可能原因 | 处理方式 | |------|----------|----------| | 拖不起来 | 拖拽手柄太小、浏览器兼容性 | 点击左侧 ⋮⋮ 后按住再拖动 | | 拖到目标没反应 | 未触发 drop | 确认拖到其他 section 行再松手 | | 松手后弹“排序失败” | 1. `sort_order` 列不存在
2. 鉴权失败 401
3. 接口异常 | 1. 执行迁移脚本
2. 确认已登录管理端
3. 查看 soul-api 日志和浏览器控制台 | --- ## 四、快速验证 1. 执行迁移(若 `sort_order` 不存在) 2. 重启 soul-api 3. 在管理端登录后打开「内容管理 → 章节管理」 4. 用 ⋮⋮ 拖拽某一节到另一位置,松手后应刷新并显示新顺序