跳转至

MVP v1 接口总览

后端路由复核日期:2026-07-26 前端调用状态盘点日期:2026-07-17 范围:Tender/tender-service 当前后端代码,以及 Tender/tender-app 前端静态调用。 目的:说明系统大概有哪些接口、属于哪个模块、当前是否接入;不记录请求参数、响应字段和错误码等接口细节。

1. 状态说明

状态 含义
在用 当前前端页面、组件或 SSE 流程中能找到明确调用
部分在用 同一组接口中只有一部分被当前前端调用
后端保留 已注册到后端,但当前前端未发现调用;可能供调试、未来功能或其他调用方使用
系统/外部 健康检查、支付平台回调等,不由普通前端页面调用
内部管理 管理后台或内部测试接口
未注册 代码仍存在或已注释,但没有注册到当前 FastAPI 应用
前端残留 前端存在调用,但当前后端没有对应路由,需要后续确认或清理

这里的“在用”来自代码静态扫描,不等同于线上流量统计。动态拼接、第三方调用或尚未合并的其他客户端可能无法被扫描到。

2. 总体概况

  • 当前 FastAPI 应用实际注册业务路由:168 个(不含 Swagger、ReDoc 和 OpenAPI 文档路由)。
  • 主要模块:任务、图库、通用文件、用户、知识库、标书、订阅支付、产品库、系统回调、管理后台。
  • 路由分布:管理后台 39、标书 60、知识库 15、图库 14、产品库 14、用户 8、任务 5、订阅支付 5、Webhook 4、文件 2、健康检查 2。
  • 标书相关路由最多:60 个,覆盖上传解析、目录、编写思路、正文生成、文档导出等完整流程。
  • /v1 是普通业务接口前缀;/admin 是管理接口前缀;/health/webhook 属于系统接口。
  • 2026-07-26 已将本文第 3~12 节的方法与路径展开,并与 app.openapi()["paths"] 逐项比较:缺失 0 个,过期 0 个,未分类 0 个

3. 异步任务

方法与路径 大概用途 状态
GET /v1/tasks 查询解析/后台任务列表 后端保留
GET /v1/tasks/logs 查询任务执行日志 后端保留
GET /v1/tasks/{task_id} 查询单个任务状态 后端保留
GET /v1/tasks/{task_id}/events 订阅任务进度 SSE 在用
DELETE /v1/tasks/{task_id} 取消后台任务 在用

4. 图库与图片

方法与路径 大概用途 状态
GET/POST /v1/image-galleries 查询、创建图库 在用
PATCH/DELETE /v1/image-galleries/{gallery_id} 修改、删除图库 在用
POST /v1/image-galleries/{gallery_id}/files/presigned-url 获取图片直传签名 在用
POST /v1/image-galleries/{gallery_id}/files/confirm-upload 确认图片上传 在用
GET /v1/image-galleries/{gallery_id}/files 查询图库图片 在用
GET /v1/image-galleries/{gallery_id}/files/analysis-batches 订阅批量图片理解进度 在用
GET/PATCH/DELETE /v1/image-galleries/{gallery_id}/files/{file_id} 查看、修改、删除图片 在用
POST /v1/image-galleries/{gallery_id}/files/{file_id}/analyze 重新进行 AI 图片理解 后端保留
POST /v1/image-galleries/{gallery_id}/files/extract 从文档预览抽取图片 在用
POST /v1/image-galleries/{gallery_id}/files/extract/confirm-insert 将抽取结果写入图库 在用

5. 通用文件上传

方法与路径 大概用途 状态
POST /v1/files/presigned-url 获取通用文件直传签名 在用
POST /v1/files/confirm-upload 确认通用文件上传 在用

6. 用户、认证与额度

方法与路径 大概用途 状态
POST /v1/users/send-code 发送短信验证码 在用
POST /v1/users/login 验证码登录/自动注册 在用
POST /v1/users/password-login 手机号密码登录 后端保留
GET /v1/users/me 查询当前登录用户 后端保留
GET/PATCH /v1/users/profile 查询、修改个人资料 在用
GET /v1/users/quota 查询字数余额和套餐额度 在用
POST /v1/users/{user_id}/role 设置用户角色 后端保留

7. 知识库

7.1 知识库与文件

方法与路径 大概用途 状态
GET/POST /v1/knowledges 查询、创建知识库 在用
GET /v1/knowledges/tree 查询知识库与文件树 在用
PATCH/DELETE /v1/knowledges/{kb_id} 修改、删除知识库 在用
GET /v1/knowledges/{kb_id}/files 查询知识库文件 在用
POST /v1/knowledges/{kb_id}/files/presigned-url 获取知识库文件直传签名 在用
POST /v1/knowledges/{kb_id}/files/confirm-upload 确认知识库文件上传并解析 在用
PATCH /v1/knowledges/{kb_id}/files/{file_id} 修改文件名称或备注 在用
DELETE /v1/knowledges/{kb_id}/file/{file_id} 删除知识库文件 在用
GET /v1/knowledges/{kb_id}/files/{file_id}/parse-job/events 订阅文件解析进度 在用
POST /v1/knowledges/{kb_id}/files/{file_id}/reparse 重新解析文件 在用
POST /v1/knowledges/{kb_id}/files/{file_id}/reindex 重建文件向量索引 在用

7.2 检索与知识库助手

方法与路径 大概用途 状态
GET /v1/knowledges/{kb_id}/assistant/bootstrap 初始化知识库助手 在用
POST /v1/knowledges/{kb_id}/assistant/chat/stream 流式知识库问答 在用

8. 标书

8.1 文档格式配置

方法与路径 大概用途 状态
GET/POST /v1/tenders/document-styles 查询、创建文档格式 在用
GET/PATCH /v1/tenders/document-styles/{style_id} 查看、修改文档格式 后端保留
DELETE /v1/tenders/document-styles/{style_id} 删除文档格式 在用

8.2 标书基础信息与流程状态

方法与路径 大概用途 状态
GET/POST /v1/tenders 查询、创建标书 在用
GET/PATCH/DELETE /v1/tenders/{tender_id} 查看、修改、删除标书 在用
POST /v1/tenders/{tender_id}/workflow/enter-outline 进入目录编制阶段 在用
POST /v1/tenders/{tender_id}/workflow/enter-content 进入正文编制阶段 在用

8.3 标书 AI 对话

方法与路径 大概用途 状态
POST /v1/tenders/{tender_id}/ai/chat/stream 流式标书问答 在用
DELETE /v1/tenders/{tender_id}/ai/chat/session 清空标书问答会话 在用

8.4 招标文件解析结果与文档导出

方法与路径 大概用途 状态
GET/DELETE /v1/tenders/{tender_id}/document/content 查询、清空招标文件解析结果 在用
PATCH /v1/tenders/{tender_id}/document/parsed-content 人工修正解析结果 在用
POST /v1/tenders/{tender_id}/document/download/docx 下载 Word 标书 在用

8.5 目录骨架、导入与查看

方法与路径 大概用途 状态
POST /v1/tenders/{tender_id}/outline/skeleton 生成一二级目录骨架 在用
GET /v1/tenders/{tender_id}/outline 查询完整目录 在用
GET /v1/tenders/{tender_id}/outline/status 查询目录编制状态 在用
GET /v1/tenders/{tender_id}/outline/download 下载目录 Word 文档 在用

8.6 目录节点、顺序与字数

方法与路径 大概用途 状态
POST /v1/tenders/{tender_id}/outline/chapters/preview AI 预览待插入章节 在用
POST /v1/tenders/{tender_id}/outline/chapters/apply 应用待插入章节 在用
POST /v1/tenders/{tender_id}/outline/node 创建目录节点 在用
POST /v1/tenders/{tender_id}/outline/node/generate 创建节点并生成子目录 SSE 后端保留
POST /v1/tenders/{tender_id}/outline/node/{chapter_identifier}/children/preview 根据编写思路预览节点子目录 在用
PATCH /v1/tenders/{tender_id}/outline/node 修改节点页数/字数预估 在用
PUT /v1/tenders/{tender_id}/outline/node/content 修改节点标题、子目录或编写思路 在用
DELETE /v1/tenders/{tender_id}/outline/{identifier} 删除目录节点及子树 在用
PATCH /v1/tenders/{tender_id}/outline/estimates/bulk 批量保存字数/页数预估 后端保留
PATCH /v1/tenders/{tender_id}/outline/children/catalog/order 调整目录页二级节全局顺序 在用
PATCH /v1/tenders/{tender_id}/outline/chapters/order 调整顶层章节顺序 在用

8.7 一键全文生成任务

方法与路径 大概用途 状态
POST /v1/tenders/{tender_id}/generation-runs/full 创建一键全文生成任务 在用
GET /v1/tenders/{tender_id}/generation-runs/active 查询当前生成任务 在用
GET /v1/tenders/{tender_id}/generation-runs/{run_id}/events 订阅全文生成进度 在用
POST /v1/tenders/{tender_id}/generation-runs/{run_id}/cancel 取消全文生成 在用

8.8 章节正文

方法与路径 大概用途 状态
GET /v1/tenders/{tender_id}/sections/stats 查询正文编写统计 在用
GET /v1/tenders/{tender_id}/sections/completion 查询已完成章节 在用
GET /v1/tenders/{tender_id}/sections/{section_id} 查询单章正文 在用
PATCH /v1/tenders/{tender_id}/sections/{section_id}/content 更新章节正文 在用
POST /v1/tenders/{tender_id}/sections/{section_id}/generate SSE 生成单章正文 后端保留

8.9 三四级目录与编写思路

方法与路径 大概用途 状态
GET /v1/tenders/{tender_id}/outline/children 查询已入库目录树 在用
POST /v1/tenders/{tender_id}/outline/children/stream SSE 生成并写入子目录 在用
GET /v1/tenders/{tender_id}/outline/writing-hint 查询已保存编写思路 在用
POST /v1/tenders/{tender_id}/outline/writing-hint/by-title/preview 按标题预览生成编写思路 在用
POST /v1/tenders/{tender_id}/outline/writing-hint 同步生成并保存编写思路 后端保留

8.10 Prompt 解析

方法与路径 大概用途 状态
GET /v1/tenders/{tender_id}/prompts/preview 预览标书场景 Prompt 在用
GET /v1/tenders/{tender_id}/prompts/{scene_key} 解析指定 Prompt 场景 后端保留

8.11 招标文件上传与解析任务

方法与路径 大概用途 状态
POST /v1/tenders/document/presigned-url 新建流程获取招标文件上传签名 在用
POST /v1/tenders/document/confirm-parse 确认上传并创建/复用标书后解析 在用
POST /v1/tenders/{tender_id}/document/confirm-parse 已有标书确认上传并解析 在用
GET /v1/tenders/{tender_id}/document/parse-events 订阅招标文件解析进度 在用

8.12 清单附件

方法与路径 大概用途 状态
GET /v1/tenders/{tender_id}/checklist-files 查询清单附件 后端保留
POST /v1/tenders/{tender_id}/checklist-files/presigned-url 获取清单附件上传签名 在用
POST /v1/tenders/{tender_id}/checklist-files/confirm-upload 确认清单附件上传 在用
DELETE /v1/tenders/{tender_id}/checklist-files/{file_id} 删除清单附件 后端保留
GET /v1/tenders/{tender_id}/checklist-files/{file_id}/parse-job 查询清单解析任务 后端保留
GET /v1/tenders/{tender_id}/checklist-files/{file_id}/parse-job/events 订阅清单解析进度 后端保留
POST /v1/tenders/{tender_id}/checklist-files/{file_id}/reparse 重新解析清单附件 后端保留

9. 订阅、订单与支付

方法与路径 大概用途 状态
GET /v1/subscription/plans 查询可购买套餐 在用
POST /v1/payment/create-order 创建支付订单 在用
GET /v1/payment/order/{order_sn} 查询订单状态和详情 在用
GET /v1/payment/records 查询当前用户支付记录 在用
GET /v1/payment/records/top 查询最近支付流水 在用

10. 企业产品库

10.1 产品库与产品

方法与路径 大概用途 状态
GET/POST /v1/product-libraries 查询、创建产品库 在用
PATCH/DELETE /v1/product-libraries/{library_id} 修改、删除产品库 在用
GET/POST /v1/product-libraries/{library_id}/products 查询、录入产品 在用
POST /v1/product-libraries/{library_id}/products/batch-delete 批量删除产品 后端保留
PUT/DELETE /v1/product-libraries/{library_id}/products/{product_id} 修改、删除单个产品 在用

10.2 产品文件解析

方法与路径 大概用途 状态
POST /v1/product-libraries/{library_id}/parse/presigned-url 获取产品文件上传签名 在用
GET /v1/product-libraries/{library_id}/parse/upload-rules 查询产品导入规则 在用
POST /v1/product-libraries/{library_id}/parse/confirm-upload 确认上传并开始解析 在用
GET /v1/product-libraries/{library_id}/parse/jobs/{parse_job_id}/events 订阅产品解析进度 在用
POST /v1/product-libraries/{library_id}/parse/jobs/{parse_job_id}/cancel 取消解析任务 在用

11. 健康检查与支付回调

方法与路径 大概用途 状态
GET /health/live 轻量存活检查 系统/外部
GET /health/ready 数据库、Redis、LLM 依赖就绪检查 系统/外部
POST /webhook/alipay/notify 支付宝异步支付回调 系统/外部
POST /webhook/wechat/notify 微信支付异步支付回调 系统/外部
POST /v1/webhook/alipay/notify 支付宝回调的 /v1 别名 系统/外部
POST /v1/webhook/wechat/notify 微信回调的 /v1 别名 系统/外部

12. 管理后台与内部接口

12.1 支付、套餐与核销码

方法与路径 大概用途 状态
GET /admin/character-transactions 查询全站字数额度流水 内部管理
GET /admin/daily-reports 按北京时间查询注册、支付与 LLM Token 日报 内部管理
GET /admin/reports/business-users 查询工作台访问与关键业务成功用户数报表 内部管理
GET /admin/payment-records 查询全站支付流水 内部管理
POST /admin/subscription/manual-grant 手工给用户发放套餐 内部管理
GET/POST /admin/subscription-plans 分页查询、创建套餐 内部管理
GET/PATCH/DELETE /admin/subscription-plans/{plan_id} 查看、修改、删除未使用套餐 内部管理
GET /admin/redeem-codes 查询核销码 在用(管理页)

12.2 Prompt 场景绑定

方法与路径 大概用途 状态
GET /admin/prompts/scenes 查询 Prompt 场景元数据 内部管理
GET /admin/prompt-scene-bindings/scenes 查询可绑定场景 内部管理
GET/POST /admin/prompt-scene-bindings 查询、创建场景绑定 内部管理
GET/PATCH/DELETE /admin/prompt-scene-bindings/{binding_id} 查看、修改、删除场景绑定 内部管理

12.3 Prompt 模板与版本

方法与路径 大概用途 状态
GET/POST /admin/prompt-templates 查询、创建 Prompt 模板 部分在用(当前管理页主要查询)
GET/PATCH/DELETE /admin/prompt-templates/{template_id} 查看、替换、删除模板 后端保留
GET/POST/PATCH /admin/prompt-templates/{template_id}/versions 查询、新建或基于最新版本更新 在用(管理页使用查询和更新)
GET/DELETE /admin/prompt-templates/{template_id}/versions/{version_no} 查看、删除指定版本 后端保留

12.4 内部标书与 Prompt 文件工具

方法与路径 大概用途 状态
GET /admin/internal/tenders/files 查询本地 Prompt 文件 内部管理
GET/PUT /admin/internal/tenders/files/{file_path:path} 读取、修改 Prompt 文件 内部管理
POST /admin/internal/tenders/create 内部创建测试标书 内部管理
GET /admin/internal/tenders/{tender_id} 查询内部测试标书详情 内部管理
POST /admin/internal/tenders/quick/parse 兼容路径:快速解析单文件 内部管理
POST /admin/internal/tenders/quick-parse 快速解析单文件 内部管理

12.5 短信验证码白名单

方法与路径 大概用途 状态
GET/POST /admin/sms-verification-whitelists 查询、添加短信白名单 在用(管理页)

12.6 用户与订阅维护审计

方法与路径 大概用途 状态
GET /admin/users 查询用户、角色、额度与订阅摘要 内部管理
GET /admin/subscription-maintenance-logs 查询订阅定时维护执行记录 内部管理
GET /admin/subscription-maintenance-logs/{log_id}/details 查询单次维护的明细 内部管理

13. 后端存在代码但当前未注册的接口

以下接口不会出现在当前应用路由表中。

方法与路径 大概用途 状态
POST /v1/knowledges/{kb_id}/directory 创建知识库目录 未注册
GET /v1/knowledges/{kb_id}/directory/list 查询知识库目录 未注册
GET /v1/knowledges/{kb_id}/directory/{directory_id} 查询目录详情 未注册
PUT /v1/knowledges/{kb_id}/dirs/{directory_id} 修改知识库目录 未注册
DELETE /v1/knowledges/{kb_id}/dirs/{directory_id} 删除知识库目录 未注册
图片文件批量上传/自动标注等 app/routes/v1/images/file.py 中已注释路由 历史图片处理能力 未注册
知识库文件批量上传等 app/routes/v1/knowledges/file.py 中已注释路由 历史知识库上传能力 未注册

14. 前端存在但当前后端不存在的路径

这些不是后端现有接口,但当前前端仍能找到调用或封装,属于 MVP v1 后续需要核对的契约残留。

前端路径 前端用途 当前情况
POST /v1/users/change-password 修改密码 后端无对应路由,前端修改密码弹窗仍在调用
POST /v1/users/phone/bind 绑定手机号 当前后端无对应路由
GET /v1/knowledges/{kb_id}/files/{file_id}/parse-job 查询知识库解析任务 后端已删除,前端仍有未使用封装
POST /v1/knowledges/{kb_id}/search 知识库语义检索 后端已删除,前端仍有未使用封装;内部检索服务继续使用
POST /v1/image-galleries/{gallery_id}/upload 旧式图库 multipart 上传 当前后端无对应路由;现流程使用直传签名与确认接口
GET /v1/tenders/documents/parse/history 查询招标文件解析历史 当前后端无对应路由
PUT /v1/tenders/{tender_id}/outline 整体替换目录 后端已删除,前端仍有未使用封装;现流程使用节点级更新接口
PUT /v1/tenders/{tender_id}/outline/node/children 整体更新节点子目录 当前后端无对应路由
GET /v1/tenders/{tender_id}/outline/prompts 查询目录 Prompt 当前后端无对应路由;现有 Prompt 路径为 /prompts/preview/prompts/{scene_key}
POST /v1/product-libraries/{library_id}/parse/upload 旧式产品文件 multipart 上传 当前后端无对应路由;现流程使用预签名与确认接口

15. 接口测试基线

截至 2026-07-26,原有 19 个测试文件主要覆盖 Service、Schema、工具函数,以及少量直接调用路由函数的业务逻辑。本次新增 tests/test_api_contract.py,先覆盖 OpenAPI 与本文一致性、模块路由数量、operationId 唯一性、Summary 与 Tags 完整性。当前仍没有通过 FastAPI ASGI/HTTP 客户端请求应用的业务接口测试,因此不能仅依据现有测试确认以下接口层行为:

  • 路由是否能按预期的方法和路径访问。
  • 未登录、普通用户和管理员的鉴权与权限边界。
  • Path、Query、Body 参数校验及统一参数错误响应。
  • BizExceptionHTTPException 和未捕获异常的统一响应转换。
  • Response Model、响应头、文件下载和 SSE Content-Type 等接口契约。
  • 依赖注入、租户上下文和资源归属校验在真实请求链路中是否生效。

15.1 按模块划分测试

模块 接口数 优先级 状态 建议测试文件 首要测试范围
OpenAPI 契约 168 P0 已新增 test_api_contract.py 路由与文档一致、模块数量、Operation ID、Summary、Tags
用户、认证与额度 8 P0 代码链路已覆盖 tests/api/users/ 验证码/密码登录、Token、资料、额度、角色权限
标书 60 P0 契约已新增 tests/api/tenders/ 用户隔离、CRUD、解析、目录、正文、全文任务、SSE、DOCX
订阅、订单与支付 5 P0 代码链路已覆盖 tests/api/billing_callbacks/ 套餐可见性、下单、本人订单、支付记录、额度联动
异步任务 5 P1 代码链路已覆盖 tests/api/tasks/ 用户任务隔离、状态查询、取消、SSE 终态
知识库 15 P1 代码链路已覆盖 tests/api/knowledges/ CRUD、文件直传确认、重解析、重建索引、助手 SSE
图库与图片 14 P1 代码链路已覆盖 tests/api/image_galleries/ CRUD、直传确认、图片归属、抽图确认、分析 SSE
企业产品库 14 P1 代码链路已覆盖 tests/api/product_libraries/ CRUD、产品归属、批量删除、导入任务、取消和 SSE
通用文件上传 2 P1 代码链路已覆盖 tests/api/admin_system/ 文件名/类型/大小校验、预签名、OSS 元数据确认
管理后台与内部接口 39 P1 代码链路已覆盖 tests/api/admin_prompts/tests/api/billing_callbacks/tests/api/admin_system/ 管理员 CRUD、Prompt、支付套餐、内部接口
支付回调 4 P1 代码链路已覆盖 tests/api/billing_callbacks/ 两组别名、验签失败、成功回调、重复通知幂等
健康检查 2 P2 代码链路已覆盖 tests/api/admin_system/ 存活检查、数据库/LLM 正常与降级结果

标书模块数量最大,建议在测试文件中继续按“基础 CRUD 与解析”“目录与编写思路”“正文与全文生成”“文件下载与 SSE”分组,不把 60 个接口堆在一个测试类中。

全仓测试通过 make test 一键运行,可用 PYTEST_ARGS 追加 pytest 参数;原测试环境 API 启动命令调整为 make serve-test。标书测试也可通过 ./scripts/test-tender-api.shmake test-tender-api 独立运行;脚本输出终端缺失行报告,并生成 htmlcov/tenders/ 下的 HTML/XML 覆盖率报告。统计范围为标书路由、标书领域服务和生成服务,代码链路行覆盖率硬门禁为 100%。60 个操作分别拥有独立测试文件,显式冻结参数、请求体、响应状态、响应模型、递归组件 Schema、认证和响应类型;具体业务场景继续按 tests/api/tenders/README.md 补充。

知识库 15 个操作分别拥有独立契约测试文件,并通过 ./scripts/test-knowledge-api.shmake test-knowledge-api 运行专项测试。统计范围为当前注册接口使用的知识库路由与服务,排除未注册的历史 directory.py 路由文件,代码链路行覆盖率硬门禁为 100%;HTML/XML 报告写入 htmlcov/knowledges/

企业产品库 14 个操作分别拥有独立契约测试文件,并通过 ./scripts/test-product-library-api.shmake test-product-library-api 运行专项测试。统计范围为产品库路由、产品库主服务和 SSE 服务,覆盖 CRUD、XLSX 结构化解析、内嵌图片、任务状态机与编排异常,代码链路行覆盖率硬门禁为 100%;HTML/XML 报告写入 htmlcov/product_libraries/

图库 14 个操作分别拥有独立契约测试文件,并通过 ./scripts/test-image-gallery-api.shmake test-image-gallery-api 运行专项测试。统计范围为图库路由、图库与图片文件服务、分析 SSE 和文档抽图器,代码链路行覆盖率硬门禁为 100%;HTML/XML 报告写入 htmlcov/image_galleries/

用户认证与额度 8 个操作、任务中心 5 个操作分别拥有独立契约测试文件。可通过 make test-user-apimake test-task-api 运行专项测试,两个模块的代码链路行覆盖率硬门禁均为 100%;报告分别写入 htmlcov/users/htmlcov/tasks/

15.2 建设顺序

后续接口测试建议按以下顺序建设:

  1. OpenAPI 契约测试:固定当前方法与路径集合,防止新增、删除或改名接口后漏改本文和测试清单。
  2. 通用协议测试:覆盖鉴权、权限、参数错误、业务异常和系统异常的统一响应。
  3. 核心闭环测试:优先覆盖登录、标书 CRUD、上传确认与任务创建、目录、正文生成任务、知识库、图库、产品导入、额度和支付。
  4. SSE 与文件测试:分别验证事件顺序、终止事件、断线行为,以及文件名、Content-Type 和下载响应头。
  5. 管理与外部入口测试:覆盖管理员权限、支付回调幂等、健康检查降级和内部工具接口隔离。

16. MVP v1 收口建议

  1. 把“后端保留”接口先视为候选清理项,不要立即删除;先确认是否被脚本、运营工具或第三方调用。
  2. 优先处理第 14 节的前后端路径不一致,因为这些属于明确的接口契约风险。
  3. 支付回调目前同时注册无 /v1 和带 /v1 两套路由,发布前应确认生产环境实际配置的唯一回调地址。
  4. 知识库目录路由代码存在但未注册;若 MVP v1 不需要目录层级,可以继续保持未启用,并在后续清理时统一决定是否删除。