From 5685dab1d0149f13d9c2396be35b26500c57b872 Mon Sep 17 00:00:00 2001 From: genggengtang Date: Sun, 29 Mar 2026 21:05:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=AE=A1=E8=AE=A1=E6=8A=A5?= =?UTF-8?q?=E5=91=8A=E7=94=9F=E6=88=90=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/ai/aiHistory/index.ts | 19 +- src/api/ai/auditReport/index.ts | 113 + .../pwl/pwlProject/components/EditModal.vue | 427 ++-- .../components/components/EvidenceModal.vue | 80 +- .../components/components/HistoryModal.vue | 44 +- .../pwl/pwlProject/components/report.vue | 151 +- .../pwl/pwlProject/components/reportView.vue | 2027 +++++++++++++++-- 7 files changed, 2343 insertions(+), 518 deletions(-) diff --git a/src/api/ai/aiHistory/index.ts b/src/api/ai/aiHistory/index.ts index d665b5b..1a10bd6 100644 --- a/src/api/ai/aiHistory/index.ts +++ b/src/api/ai/aiHistory/index.ts @@ -114,7 +114,7 @@ export async function updateAiHistoryBatch(data: { list: AiHistory[] }) { } /** - * 批量删除AI审计历史记录表 + * 批量删除 AI审计历史记录表 */ export async function removeAiHistoryBatch(ids: number[]) { const res = await request.delete>( @@ -127,3 +127,20 @@ export async function removeAiHistoryBatch(ids: number[]) { return Promise.reject(new Error(res.data.message)); } +/** + * 根据接口名称和项目 ID 查询最新的历史记录 + */ +export async function getLatestHistoryByInterface(params: { + interfaceName: string; + projectId: number; +}) { + const res = await request.get>( + `${MODULES_API_URL}/ai/history/latest`, + { params } + ); + if (res.data.code === 0 && res.data.data) { + return res.data.data; + } + return null; // 如果没有数据,返回 null +} + diff --git a/src/api/ai/auditReport/index.ts b/src/api/ai/auditReport/index.ts index a7591e1..063697b 100644 --- a/src/api/ai/auditReport/index.ts +++ b/src/api/ai/auditReport/index.ts @@ -183,4 +183,117 @@ export async function generateAuditReportWithEvidences(projectId: number, eviden return res.data; } return Promise.reject(new Error('文件下载失败')); +} + +/** + * 根据项目 ID、选中的取证单和章节内容生成审计报告并下载 + * @param projectId 项目 ID + * @param evidenceIds 勾选的取证单 ID 列表 + * @param chapters 章节内容数组(包含 formCommit 和 reportContent) + * @param evaluate 总体评价 + * @param suggestion 审计建议 + */ +export async function generateAuditReportWithContent( + projectId: number, + evidenceIds: number[], + chapters: Array<{ + formCommit: number; + reportContent: string; + }>, + evaluate?: string, + suggestion?: string +) { + const res = await request.post( + MODULES_API_URL + '/ai/auditReport/generateWithContent', + { + evidenceIds, + chapters, + evaluate, + suggestion + }, + { + params: { projectId }, + responseType: 'blob' // 处理二进制流响应 + } + ); + + if (res.status === 200) { + return res.data; + } + return Promise.reject(new Error('文件下载失败')); +} + +/** + * AI 生成默认话术 + */ +export async function generateDefaultText(params: { + projectId?: number; + formCommit: number; + chapterTitle?: string; + evidenceIds?: number[]; // 新增:选中的取证单 ID 列表 +}) { + const res = await request.post>( + MODULES_API_URL + '/ai/auditReport/generateDefaultText', + { + projectId: params.projectId, + formCommit: params.formCommit, + chapterTitle: params.chapterTitle, + evidenceIds: params.evidenceIds + } + ); + + if (res.data.code === 0) { + // 后端返回的数据在 message 字段中 + return res.data.message || res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * AI 分析用户自定义输入 + */ +export async function analyzeUserInput(params: { + formCommit: number; + userQuestion: string; + chapterContent?: string; +}) { + const res = await request.post>( + MODULES_API_URL + '/ai/auditReport/analyzeUserInput', + null, + { + params + } + ); + + if (res.data.code === 0) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + +/** + * 根据取证单生成审计建议 + */ +export async function generateAuditSuggestion(params: { + projectId: number; + evidenceIds: number[]; +}) { + const res = await request.post>( + MODULES_API_URL + '/ai/auditReport/generateAuditSuggestion', + { evidenceIds: params.evidenceIds }, + { + params: { + projectId: params.projectId + }, + headers: { + 'Content-Type': 'application/json;charset=UTF-8' + } + } + ); + + if (res.data.code === 0) { + // 后端返回的数据在 message 字段中 + return res.data.message || res.data.data; + } + return Promise.reject(new Error(res.data.message)); } \ No newline at end of file diff --git a/src/views/pwl/pwlProject/components/EditModal.vue b/src/views/pwl/pwlProject/components/EditModal.vue index 6cc55c7..feb95eb 100644 --- a/src/views/pwl/pwlProject/components/EditModal.vue +++ b/src/views/pwl/pwlProject/components/EditModal.vue @@ -1,11 +1,11 @@