feat: PC 端补齐直接完结通道

- taskApi.transferTask 增 finishDirectly 参数,按新 Schema 发送
  { next_tasks: [], finish_directly: true, note }
- TaskTransferPayload 支持 next_tasks / finish_directly,旧版单线字段降为可选
  (后端仍兼容 next_assignees / next_task_name,存量调用不受影响)
- 共享 TransferModal 新增「🏁 直接完结(无下游,不入库)」开关:
  与入库互斥,选中后下游字段禁用(保留输入便于反悔切回)、
  切换独立标题/提示/预览/提交按钮,不再套用「将创建 N 个任务」模板
- 表单重置改为「展开时重置」:TransferModal 被 memo 后常驻挂载会跨次残留状态,
  且原实现于提交时清空会让等待期主题从「直接完结」闪回普通转交
- TaskTreeViewer 与 AdminTasksPage 两个入口的 handleTransfer 签名对齐
This commit is contained in:
2026-09-17 14:07:05 +08:00
parent 1e6c006360
commit e707f3673d
4 changed files with 163 additions and 38 deletions

View File

@ -528,12 +528,13 @@ export default function AdminTasksPage() {
nextTaskName: string,
assignees: string[],
note: string,
finishDirectly: boolean,
) {
if (!modalTarget) return;
setSubmitting(true);
try {
const result = await transferTask(
modalTarget.task.id, assignees, nextTaskName, note || undefined,
modalTarget.task.id, assignees, nextTaskName, note || undefined, finishDirectly,
);
toast(result.message, "success");
const sn = modalTarget.task.product_sn || "";