From b0190e2c5f5c35c5db4574142665ad913442fb67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=B9=8F?= Date: Mon, 13 Jul 2026 17:59:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=8A=A5=E5=91=8A?= =?UTF-8?q?=E7=94=9F=E6=88=90=E4=BB=BB=E5=8A=A1=E7=AE=A1=E7=90=86=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/module_report/generation.ts | 237 +++++++ .../components/GenerationFormDialog.vue | 253 +++++++ .../components/LogDrawer.vue | 214 ++++++ .../components/TaskDetailDialog.vue | 88 +++ .../module_report/report_generation/index.vue | 633 ++++++++++++++++++ .../report_generation/preview.vue | 143 ++++ 6 files changed, 1568 insertions(+) create mode 100644 src/api/module_report/generation.ts create mode 100644 src/views/module_report/report_generation/components/GenerationFormDialog.vue create mode 100644 src/views/module_report/report_generation/components/LogDrawer.vue create mode 100644 src/views/module_report/report_generation/components/TaskDetailDialog.vue create mode 100644 src/views/module_report/report_generation/index.vue create mode 100644 src/views/module_report/report_generation/preview.vue diff --git a/src/api/module_report/generation.ts b/src/api/module_report/generation.ts new file mode 100644 index 0000000..43bf97f --- /dev/null +++ b/src/api/module_report/generation.ts @@ -0,0 +1,237 @@ +// 报告生成任务接口(能源报告 / 光伏报告) +import { request } from "@utils"; +import type { ReportType } from "@/api/module_report/report"; + +const TASK_PATH = "/report-generation"; +const LOG_PATH = "/report-generation/log"; + +// ============ 报告生成任务 ============ + +export const GenerationTaskAPI = { + /** 查询报告生成任务分页列表(返回 items + stats 统计) */ + page(query?: GenerationTaskPageQuery) { + return request>({ + url: `${TASK_PATH}/list`, + method: "get", + params: query, + }); + }, + + /** 查询报告生成任务详情 */ + detail(id: number, report_type?: ReportType) { + return request>({ + url: `${TASK_PATH}/detail/${id}`, + method: "get", + params: { report_type }, + }); + }, + + /** 创建报告生成任务(创建成功后后端自动写入 create_task 日志) */ + create(body: GenerationTaskCreateForm) { + return request>({ + url: `${TASK_PATH}/create`, + method: "post", + data: body, + }); + }, + + /** 修改报告生成任务 */ + update(id: number, body: GenerationTaskUpdateForm) { + return request>({ + url: `${TASK_PATH}/update/${id}`, + method: "put", + data: body, + }); + }, + + /** 删除报告生成任务(传 ID 数组) */ + remove(ids: number[], report_type?: ReportType) { + return request({ + url: `${TASK_PATH}/delete`, + method: "delete", + data: ids, + params: { report_type }, + }); + }, + + // ============ 生成执行(接口暂未提供,预留) ============ + + /** + * 执行报告生成(SSE 进度流,接口预留)。 + * 后续后端以 SSE 形式推送生成进度,用于列表"生成进度"字段更新; + * 接口提供后请在此处替换为 SSE 客户端实现(EventSource / fetch stream), + * 并在生成成功 / 失败时分别调用 createLog 写入 generation_success / generation_failed 日志。 + */ + execute(id: number, report_type?: ReportType) { + return request>({ + url: `${TASK_PATH}/execute/${id}`, + method: "post", + params: { report_type }, + }); + }, + + // ============ 操作日志 ============ + + /** 查询操作记录列表 */ + listLogs(params: GenerationLogPageQuery) { + return request>>({ + url: `${LOG_PATH}/list`, + method: "get", + params, + }); + }, + + /** 查询操作记录详情 */ + detailLog(id: number) { + return request>({ + url: `${LOG_PATH}/detail/${id}`, + method: "get", + }); + }, + + /** 创建操作记录(前端在生成动作时主动调用) */ + createLog(body: GenerationLogCreateForm) { + return request>({ + url: `${LOG_PATH}/create`, + method: "post", + data: body, + }); + }, + + /** 删除操作记录(传 ID 数组) */ + removeLogs(ids: number[]) { + return request({ + url: `${LOG_PATH}/delete`, + method: "delete", + data: ids, + }); + }, +}; + +export default GenerationTaskAPI; + +// ============ 类型定义 ============ + +/** 生成状态:0 待生成 / 1 生成中 / 2 已生成 / 3 生成失败 */ +export type GenerationStatus = 0 | 1 | 2 | 3; + +/** 报告生成任务分页查询参数 */ +export interface GenerationTaskPageQuery { + page_no?: number; + page_size?: number; + order_by?: string; + generation_name?: string; + report_type?: ReportType; + status?: GenerationStatus | ""; + template_id?: number; + generator_id?: number; + generator_name?: string; + created_time?: string[]; + updated_time?: string[]; +} + +/** 报告生成任务列表项 */ +export interface GenerationTaskItem { + id: number; + generation_name: string; + report_type?: ReportType; + template_id?: number; + template_name?: string; + /** 生成源文档文件 ID */ + file_id?: number; + /** 附件文件 ID */ + attachment_file_id?: number; + status: GenerationStatus; + /** 生成进度(0-100),由 SSE 推送更新 */ + progress?: number; + generator_id?: number; + generator_name?: string; + description?: string; + /** 生成源文档地址 */ + file_url?: string; + original_name?: string; + /** 生成结果文件地址(推荐前端预览/下载使用) */ + report_file_url?: string; + report_file_original_name?: string; + /** 附件地址 */ + attachment_url?: string; + attachment_original_name?: string; + attachment_file_url?: string; + attachment_file_original_name?: string; + created_id?: number; + created_time?: string; + updated_id?: number; + updated_time?: string; +} + +/** 创建报告生成任务表单 */ +export interface GenerationTaskCreateForm { + generation_name: string; + report_type?: ReportType; + template_id: number; + file_id?: number; + attachment_file_id?: number | null; + status?: GenerationStatus; + generator_id?: number; + description?: string; +} + +/** 修改报告生成任务表单 */ +export interface GenerationTaskUpdateForm extends GenerationTaskCreateForm {} + +/** 任务统计(列表接口随 items 一起返回) */ +export interface GenerationTaskStatistics { + submitted_count?: number; + generating_count?: number; + generated_count?: number; + pending_count?: number; + failed_count?: number; +} + +/** 列表接口返回结构(PageResult + stats) */ +export interface GenerationTaskListResult extends PageResult { + stats?: GenerationTaskStatistics; +} + +// ============ 操作日志类型 ============ + +/** 操作日志动作类型 */ +export type GenerationLogActionType = + | "create_task" + | "start_generation" + | "generation_success" + | "generation_failed"; + +/** 操作记录分页查询参数 */ +export interface GenerationLogPageQuery { + page_no?: number; + page_size?: number; + order_by?: string; + report_generation_id?: number; + generation_name?: string; + action_type?: GenerationLogActionType; + created_time?: string[]; + created_id?: number; +} + +/** 操作日志列表项 */ +export interface GenerationLogItem { + id: number; + report_generation_id: number; + generation_name?: string; + action_type: GenerationLogActionType; + action_name: string; + description?: string; + operator_id?: number; + operator_name?: string; + created_id?: number; + created_by?: CommonType; + created_time?: string; +} + +/** 创建操作记录表单(操作人由后端自动写入) */ +export interface GenerationLogCreateForm { + report_generation_id: number; + action_type: GenerationLogActionType; + description?: string; +} diff --git a/src/views/module_report/report_generation/components/GenerationFormDialog.vue b/src/views/module_report/report_generation/components/GenerationFormDialog.vue new file mode 100644 index 0000000..e246503 --- /dev/null +++ b/src/views/module_report/report_generation/components/GenerationFormDialog.vue @@ -0,0 +1,253 @@ + + + + + diff --git a/src/views/module_report/report_generation/components/LogDrawer.vue b/src/views/module_report/report_generation/components/LogDrawer.vue new file mode 100644 index 0000000..fdd4f8d --- /dev/null +++ b/src/views/module_report/report_generation/components/LogDrawer.vue @@ -0,0 +1,214 @@ + + + + + diff --git a/src/views/module_report/report_generation/components/TaskDetailDialog.vue b/src/views/module_report/report_generation/components/TaskDetailDialog.vue new file mode 100644 index 0000000..d61a334 --- /dev/null +++ b/src/views/module_report/report_generation/components/TaskDetailDialog.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/views/module_report/report_generation/index.vue b/src/views/module_report/report_generation/index.vue new file mode 100644 index 0000000..93f1581 --- /dev/null +++ b/src/views/module_report/report_generation/index.vue @@ -0,0 +1,633 @@ + + + + + + diff --git a/src/views/module_report/report_generation/preview.vue b/src/views/module_report/report_generation/preview.vue new file mode 100644 index 0000000..7a6c0a5 --- /dev/null +++ b/src/views/module_report/report_generation/preview.vue @@ -0,0 +1,143 @@ + + + + + +