(generateReports)
| 2528 | } |
| 2529 | |
| 2530 | async function submitFeedback(generateReports) { |
| 2531 | if (!state.push?.push_id) { |
| 2532 | showPaperFeedback("error", ui().papers.submitUnavailableTitle, ui().papers.submitUnavailableDetail); |
| 2533 | throw new Error(ui().papers.loadPushFirst); |
| 2534 | } |
| 2535 | const selectedNumbers = Array.from(state.selected); |
| 2536 | if (generateReports && !selectedNumbers.length) { |
| 2537 | showPaperFeedback("warning", ui().papers.chooseReadTitle, ui().papers.chooseReadDetail); |
| 2538 | showFeedbackToast("warning", ui().papers.chooseReadTitle, ui().papers.chooseReadToast); |
| 2539 | return; |
| 2540 | } |
| 2541 | if (generateReports && !(await ensureLlmReadyForReading())) { |
| 2542 | return; |
| 2543 | } |
| 2544 | const endpoint = generateReports ? "/api/submit" : "/api/feedback"; |
| 2545 | const readingKeys = generateReports ? selectedNumbers.map((number) => paperReportKey(number)) : []; |
| 2546 | setSubmitButtonsBusy(true, generateReports); |
| 2547 | readingKeys.forEach((key) => state.paperReading.add(key)); |
| 2548 | updateSelectionSummary(); |
| 2549 | showPaperFeedback( |
| 2550 | "pending", |
| 2551 | generateReports ? ui().papers.submittingReportTitle : ui().papers.submittingFeedbackTitle, |
| 2552 | ui().papers.submittingDetail |
| 2553 | ); |
| 2554 | try { |
| 2555 | const data = await api(endpoint, { |
| 2556 | method: "POST", |
| 2557 | body: JSON.stringify({ |
| 2558 | user_id: currentUser(), |
| 2559 | push_id: state.push.push_id, |
| 2560 | selected_numbers: selectedNumbers, |
| 2561 | skipped_numbers: Array.from(state.skipped), |
| 2562 | later_numbers: Array.from(state.later), |
| 2563 | generate_reports: generateReports, |
| 2564 | write_feishu: $("writeFeishuReports")?.checked || false, |
| 2565 | response_language: responseLanguage() |
| 2566 | }) |
| 2567 | }); |
| 2568 | if (generateReports) { |
| 2569 | (data.reports?.created_docs || []).forEach((doc, index) => { |
| 2570 | const number = selectedNumbers[index]; |
| 2571 | if (number && doc?.report_id) state.paperReports.set(paperReportKey(number), doc.report_id); |
| 2572 | }); |
| 2573 | } |
| 2574 | showSubmitResult(data, generateReports); |
| 2575 | await loadWiki(); |
| 2576 | if (generateReports) { |
| 2577 | const docs = data.reports?.created_docs || []; |
| 2578 | if (docs[0]?.report_id) { |
| 2579 | await openReport(docs[0].report_id); |
| 2580 | if (data.reports?.task?.task_id) { |
| 2581 | pollReadingTask(data.reports.task.task_id, docs[0].report_id).catch((error) => { |
| 2582 | showFeedbackToast("warning", "精读进度刷新失败", error.message || String(error)); |
| 2583 | }); |
| 2584 | } |
| 2585 | } else { |
| 2586 | setView("reports"); |
| 2587 | } |
no test coverage detected