From 79cfcf9c6dcff44eb8a9242032044341b48534a8 Mon Sep 17 00:00:00 2001 From: tangweijie <877588133@qq.com> Date: Tue, 20 Jan 2026 12:13:13 +0800 Subject: [PATCH 01/10] =?UTF-8?q?feat(report):=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E8=AF=84=E4=BC=B0=E6=8A=A5=E5=91=8A=E5=89=8D=E7=AB=AF=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=92=8C=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 优化 DimensionAnalysisPanel 维度分析面板 - 更新 LlmResultPanel LLM 结果展示组件 - 完善 PromptEditor 提示词编辑器功能 - 改进 ReportForm 报告表单交互 - 优化 ReportEditDrawer 报告编辑抽屉 - 调整 prisoner 页面显示 - 更新 evaluation-report 和 report API Co-Authored-By: Claude --- src/api/prison/evaluation-report/index.ts | 29 +- src/api/prison/report/index.ts | 30 +- .../report/DimensionAnalysisPanel.vue | 653 ++++++++++++++---- .../evaluation-mgmt/report/LlmResultPanel.vue | 129 +++- .../evaluation-mgmt/report/PromptEditor.vue | 103 ++- .../evaluation-mgmt/report/ReportForm.vue | 103 ++- .../report/ReportEditDrawer.vue | 57 +- .../evaluation-report/template/index.vue | 2 +- src/views/prison/prisoner/index.vue | 28 +- 9 files changed, 855 insertions(+), 279 deletions(-) diff --git a/src/api/prison/evaluation-report/index.ts b/src/api/prison/evaluation-report/index.ts index 8f3d0d19..6cbd342b 100644 --- a/src/api/prison/evaluation-report/index.ts +++ b/src/api/prison/evaluation-report/index.ts @@ -1,4 +1,5 @@ import request from '@/config/axios' +import { getAccessToken } from '@/utils/auth' export interface TemplateVO { id?: number @@ -72,10 +73,15 @@ export interface ReportVO { templateName?: string title?: string evaluationDate?: string + evaluationType?: number + evaluationCycle?: number riskLevel?: number conclusion?: string suggestions?: string // 与后端一致 areaName?: string // 与后端一致 + areaId?: number + evaluatorId?: number + evaluatorName?: string status: number aiStatus?: number auditorId?: number @@ -86,6 +92,17 @@ export interface ReportVO { createTime?: string } +// 报告更新请求VO - 只包含需要更新的字段 +export interface ReportUpdateReqVO { + id: number + dimensions?: string // 维度内容,JSON格式 + conclusion?: string + suggestions?: string + riskLevel?: number + status?: number + remark?: string +} + export interface ReportPageReqVO { pageNo: number pageSize: number @@ -109,6 +126,7 @@ export interface DimensionDataVO { modifiedTime?: string dataSource?: string rawData?: string + createTime?: string } export interface CommentVO { @@ -318,7 +336,8 @@ export interface DimensionDataSourcesVO { // ========== 流式生成 API ========== export const StreamApi = { // 流式生成维度内容 - streamGenerateDimension: async (dimensionId: number, prisonerId: number, customPrompt?: string): Promise => { + // 注意:EventSource API 不支持自定义 HTTP Header,所以需要通过 URL 参数传递 token + streamGenerateDimension: async (dimensionId: number, prisonerId: number, customPrompt?: string, systemPrompt?: string): Promise => { const baseUrl = import.meta.env.VITE_BASE_URL || '' const url = new URL(`${baseUrl}/admin-api/prison/evaluation-report/dimension/stream-generate`, window.location.origin) url.searchParams.set('dimensionId', dimensionId.toString()) @@ -326,6 +345,14 @@ export const StreamApi = { if (customPrompt) { url.searchParams.set('customPrompt', customPrompt) } + if (systemPrompt) { + url.searchParams.set('systemPrompt', systemPrompt) + } + // 添加 token 参数用于认证(EventSource 不支持 Header) + const token = getAccessToken() + if (token) { + url.searchParams.set('token', token) + } return new EventSource(url.toString()) } } diff --git a/src/api/prison/report/index.ts b/src/api/prison/report/index.ts index a80c1fcb..410e447c 100644 --- a/src/api/prison/report/index.ts +++ b/src/api/prison/report/index.ts @@ -1,5 +1,8 @@ import request from '@/config/axios' +// 导入评估报告更新请求类型 +import type { ReportUpdateReqVO } from '../evaluation-report' + // ============ 评估报告模板相关类型 ============ /** 评估报告模板分页参数 */ @@ -63,6 +66,8 @@ export interface ReportDimensionContent { aiGenerateTime?: string // AI生成时间 lastModifyTime?: string // 最后修改时间 lastModifyBy?: string // 最后修改人 + enableAi?: boolean + sort?: number } /** 评估报告 */ @@ -72,6 +77,8 @@ export interface Report { prisonerId: number // 罪犯ID prisonerNo: string // 罪犯编号 prisonerName?: string // 罪犯姓名 + areaId?: number // 监区ID + areaName?: string // 监区名称 templateId: number // 模板ID templateName?: string // 模板名称 title: string // 报告标题 @@ -97,6 +104,23 @@ export interface Report { createTime?: string } +/** 报告创建请求 */ +export interface ReportCreateReqVO { + prisonerId: number + templateId: number + title: string + reportDate?: string + evaluationDate?: string + evaluationCycle?: number + evaluationType?: number + prisonerNo?: string + prisonerName?: string + areaId?: number + areaName?: string + status?: number + dimensions?: ReportDimensionContent[] +} + // ============ 快捷评语相关类型 ============ /** 快捷评语分类 */ @@ -201,12 +225,12 @@ export const ReportApi = { }, // 新增报告 - createReport: async (data: Report) => { + createReport: async (data: ReportCreateReqVO) => { return await request.post({ url: '/prison/evaluation-report/report/create', data }) }, - // 修改报告 - updateReport: async (data: Report) => { + // 修改报告 - 只传递需要更新的字段 + updateReport: async (data: ReportUpdateReqVO) => { return await request.put({ url: '/prison/evaluation-report/report/update', data }) }, diff --git a/src/views/prison/evaluation-mgmt/report/DimensionAnalysisPanel.vue b/src/views/prison/evaluation-mgmt/report/DimensionAnalysisPanel.vue index e240d4d7..b4e9f9b4 100644 --- a/src/views/prison/evaluation-mgmt/report/DimensionAnalysisPanel.vue +++ b/src/views/prison/evaluation-mgmt/report/DimensionAnalysisPanel.vue @@ -1,60 +1,81 @@ diff --git a/src/views/prison/evaluation-mgmt/report/LlmResultPanel.vue b/src/views/prison/evaluation-mgmt/report/LlmResultPanel.vue index e0a181a3..97461971 100644 --- a/src/views/prison/evaluation-mgmt/report/LlmResultPanel.vue +++ b/src/views/prison/evaluation-mgmt/report/LlmResultPanel.vue @@ -26,6 +26,24 @@ 生成结果
+ + + {{ isEditing ? '取消编辑' : '手动编辑' }} + + + + 应用 + 复制 @@ -33,16 +51,42 @@
-
- +
+
+
+ + 分析过程 +
+
+ +
+
+ +
+
+ +
+ +
- + + 手动编辑 +
-