feat(aireport): 优化多模板报告任务、报告任务管理功能
- 在多个对话框组件中禁用点击遮罩关闭功能 - 将报告任务编号设为可选字段,支持系统自动生成 - 添加报告任务下载功能按钮和相关API接口 - 重构多模板批任务的子任务显示逻辑,统一使用任务概念 - 优化报告任务分组对话框的界面布局和样式 - 添加分组报告详情查看功能 - 更新测试报告多模板创建对话框的表单结构 - 调整报告任务相关API接口参数类型定义
This commit is contained in:
@@ -62,6 +62,11 @@ export const generateReportTaskGroupReportsApi = (id: string) => {
|
|||||||
return http.post<boolean>(`${REPORT_TASK_BASE_URL}/${id}/generate`)
|
return http.post<boolean>(`${REPORT_TASK_BASE_URL}/${id}/generate`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const downloadReportTaskApi = (id: string): Promise<AxiosResponse<Blob>> =>
|
||||||
|
http.get(`${REPORT_TASK_BASE_URL}/${id}/download`, undefined, {
|
||||||
|
responseType: 'blob'
|
||||||
|
}) as unknown as Promise<AxiosResponse<Blob>>
|
||||||
|
|
||||||
export const downloadReportTaskGroupReportApi = (groupReportId: string): Promise<AxiosResponse<Blob>> =>
|
export const downloadReportTaskGroupReportApi = (groupReportId: string): Promise<AxiosResponse<Blob>> =>
|
||||||
http.get(`${REPORT_TASK_BASE_URL}/group-report/${groupReportId}/download`, undefined, {
|
http.get(`${REPORT_TASK_BASE_URL}/group-report/${groupReportId}/download`, undefined, {
|
||||||
responseType: 'blob'
|
responseType: 'blob'
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ export namespace ReportTask {
|
|||||||
|
|
||||||
export interface ReportTaskAddParam {
|
export interface ReportTaskAddParam {
|
||||||
id?: string
|
id?: string
|
||||||
no: string
|
no?: string
|
||||||
reportModelId: string
|
reportModelId: string
|
||||||
data: Record<string, unknown> | unknown[]
|
data: Record<string, unknown> | unknown[]
|
||||||
batchId?: string
|
batchId?: string
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ export const getReportTaskMultiDetailApi = (id: string) => {
|
|||||||
return http.get<ReportTaskMulti.ReportTaskMultiRecord>(`${REPORT_TASK_MULTI_BASE_URL}/${id}`)
|
return http.get<ReportTaskMulti.ReportTaskMultiRecord>(`${REPORT_TASK_MULTI_BASE_URL}/${id}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const listReportTaskMultiChildReportsApi = (id: string) => {
|
export const listReportTaskMultiChildTasksApi = (id: string) => {
|
||||||
return http.get(`${REPORT_TASK_MULTI_BASE_URL}/${id}/child-report/list`)
|
return http.get(`${REPORT_TASK_MULTI_BASE_URL}/${id}/child-task/list`)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const downloadReportTaskMultiApi = (id: string): Promise<AxiosResponse<Blob>> =>
|
export const downloadReportTaskMultiApi = (id: string): Promise<AxiosResponse<Blob>> =>
|
||||||
|
|||||||
@@ -55,12 +55,12 @@ export namespace ReportTaskMulti {
|
|||||||
export interface ReportTaskMultiChildConfig {
|
export interface ReportTaskMultiChildConfig {
|
||||||
templateDirName: string
|
templateDirName: string
|
||||||
templateDirPath: string
|
templateDirPath: string
|
||||||
no: string
|
no?: string
|
||||||
reportModelId: string
|
reportModelId: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ReportTaskMultiCreateParam {
|
export interface ReportTaskMultiCreateParam {
|
||||||
no: string
|
no?: string
|
||||||
sessionId: string
|
sessionId: string
|
||||||
childReports: ReportTaskMultiChildConfig[]
|
childReports: ReportTaskMultiChildConfig[]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="visibleProxy" title="委托单位详情" width="720px" append-to-body destroy-on-close>
|
<el-dialog v-model="visibleProxy" title="委托单位详情" width="720px" append-to-body destroy-on-close :close-on-click-modal="false">
|
||||||
<div v-loading="loading" class="client-unit-detail-dialog">
|
<div v-loading="loading" class="client-unit-detail-dialog">
|
||||||
<el-descriptions :column="2" border>
|
<el-descriptions :column="2" border>
|
||||||
<el-descriptions-item label="单位名称">{{ resolveClientUnitText(detail?.name) }}</el-descriptions-item>
|
<el-descriptions-item label="单位名称">{{ resolveClientUnitText(detail?.name) }}</el-descriptions-item>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
width="620px"
|
width="620px"
|
||||||
append-to-body
|
append-to-body
|
||||||
destroy-on-close
|
destroy-on-close
|
||||||
|
:close-on-click-modal="false"
|
||||||
@closed="resetForm"
|
@closed="resetForm"
|
||||||
>
|
>
|
||||||
<el-form ref="formRef" :model="formModel" :rules="formRules" label-width="96px">
|
<el-form ref="formRef" :model="formModel" :rules="formRules" label-width="96px">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="visibleProxy" title="导入委托单位" width="640px" append-to-body destroy-on-close @closed="resetImport">
|
<el-dialog v-model="visibleProxy" title="导入委托单位" width="640px" append-to-body destroy-on-close :close-on-click-modal="false" @closed="resetImport">
|
||||||
<div class="client-unit-import-dialog">
|
<div class="client-unit-import-dialog">
|
||||||
<div class="file-select-row">
|
<div class="file-select-row">
|
||||||
<el-input :model-value="selectedFileName" readonly placeholder="请选择 .xlsx 文件" />
|
<el-input :model-value="selectedFileName" readonly placeholder="请选择 .xlsx 文件" />
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
width="560px"
|
width="560px"
|
||||||
append-to-body
|
append-to-body
|
||||||
destroy-on-close
|
destroy-on-close
|
||||||
|
:close-on-click-modal="false"
|
||||||
@close="handleClose"
|
@close="handleClose"
|
||||||
>
|
>
|
||||||
<el-form ref="formRef" :model="formState" :rules="formRules" label-width="88px">
|
<el-form ref="formRef" :model="formState" :rules="formRules" label-width="88px">
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
width="720px"
|
width="720px"
|
||||||
append-to-body
|
append-to-body
|
||||||
destroy-on-close
|
destroy-on-close
|
||||||
|
:close-on-click-modal="false"
|
||||||
>
|
>
|
||||||
<div v-loading="loading" class="report-model-detail-dialog">
|
<div v-loading="loading" class="report-model-detail-dialog">
|
||||||
<el-descriptions class="detail-descriptions" :column="2" border>
|
<el-descriptions class="detail-descriptions" :column="2" border>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
width="560px"
|
width="560px"
|
||||||
append-to-body
|
append-to-body
|
||||||
destroy-on-close
|
destroy-on-close
|
||||||
|
:close-on-click-modal="false"
|
||||||
@closed="resetForm"
|
@closed="resetForm"
|
||||||
>
|
>
|
||||||
<el-form ref="formRef" :model="formModel" :rules="formRules" label-width="96px">
|
<el-form ref="formRef" :model="formModel" :rules="formRules" label-width="96px">
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
width="960px"
|
width="960px"
|
||||||
append-to-body
|
append-to-body
|
||||||
destroy-on-close
|
destroy-on-close
|
||||||
|
:close-on-click-modal="false"
|
||||||
@closed="clearPreview"
|
@closed="clearPreview"
|
||||||
>
|
>
|
||||||
<div v-loading="loading" class="report-model-preview-dialog">
|
<div v-loading="loading" class="report-model-preview-dialog">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="visibleProxy" title="检测设备详情" width="720px" append-to-body destroy-on-close>
|
<el-dialog v-model="visibleProxy" title="检测设备详情" width="720px" append-to-body destroy-on-close :close-on-click-modal="false">
|
||||||
<div v-loading="loading" class="test-device-detail-dialog">
|
<div v-loading="loading" class="test-device-detail-dialog">
|
||||||
<el-descriptions class="detail-descriptions" :column="2" border>
|
<el-descriptions class="detail-descriptions" :column="2" border>
|
||||||
<el-descriptions-item label="设备型号">{{ resolveTestDeviceText(detail?.typeName) }}</el-descriptions-item>
|
<el-descriptions-item label="设备型号">{{ resolveTestDeviceText(detail?.typeName) }}</el-descriptions-item>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
width="640px"
|
width="640px"
|
||||||
append-to-body
|
append-to-body
|
||||||
destroy-on-close
|
destroy-on-close
|
||||||
|
:close-on-click-modal="false"
|
||||||
@closed="resetForm"
|
@closed="resetForm"
|
||||||
>
|
>
|
||||||
<el-form ref="formRef" :model="formModel" :rules="formRules" label-width="108px">
|
<el-form ref="formRef" :model="formModel" :rules="formRules" label-width="108px">
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="visibleProxy" title="导入检测设备" width="680px" append-to-body destroy-on-close @closed="resetImport">
|
<el-dialog v-model="visibleProxy" title="导入检测设备" width="680px" append-to-body destroy-on-close :close-on-click-modal="false" @closed="resetImport">
|
||||||
<div class="test-device-import-dialog">
|
<div class="test-device-import-dialog">
|
||||||
<div class="file-select-row">
|
<div class="file-select-row">
|
||||||
<el-input :model-value="selectedFileName" readonly placeholder="请选择检测设备 Excel 文件" />
|
<el-input :model-value="selectedFileName" readonly placeholder="请选择检测设备 Excel 文件" />
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
width="960px"
|
width="960px"
|
||||||
append-to-body
|
append-to-body
|
||||||
destroy-on-close
|
destroy-on-close
|
||||||
|
:close-on-click-modal="false"
|
||||||
@closed="clearPreview"
|
@closed="clearPreview"
|
||||||
>
|
>
|
||||||
<div v-loading="loading" class="test-device-report-preview-dialog">
|
<div v-loading="loading" class="test-device-report-preview-dialog">
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
width="560px"
|
width="560px"
|
||||||
append-to-body
|
append-to-body
|
||||||
destroy-on-close
|
destroy-on-close
|
||||||
|
:close-on-click-modal="false"
|
||||||
@closed="resetForm"
|
@closed="resetForm"
|
||||||
>
|
>
|
||||||
<el-form ref="formRef" :model="formModel" :rules="formRules" label-width="96px">
|
<el-form ref="formRef" :model="formModel" :rules="formRules" label-width="96px">
|
||||||
|
|||||||
@@ -2,12 +2,7 @@
|
|||||||
<div class="form-panel">
|
<div class="form-panel">
|
||||||
<el-form ref="formRef" :model="localFormModel" :rules="formRules" label-width="108px" class="report-task-form">
|
<el-form ref="formRef" :model="localFormModel" :rules="formRules" label-width="108px" class="report-task-form">
|
||||||
<el-row :gutter="16">
|
<el-row :gutter="16">
|
||||||
<el-col :xs="24" :sm="12">
|
<el-col :xs="24" :sm="16">
|
||||||
<el-form-item label="任务编号" prop="no">
|
|
||||||
<el-input v-model="localFormModel.no" maxlength="32" clearable placeholder="请输入任务编号" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :xs="24" :sm="12">
|
|
||||||
<el-form-item label="报告模板" prop="reportModelId">
|
<el-form-item label="报告模板" prop="reportModelId">
|
||||||
<el-select v-model="localFormModel.reportModelId" filterable clearable placeholder="请选择报告模板">
|
<el-select v-model="localFormModel.reportModelId" filterable clearable placeholder="请选择报告模板">
|
||||||
<el-option v-for="option in reportModelSelectOptions" :key="option.value" :label="option.label" :value="option.value" />
|
<el-option v-for="option in reportModelSelectOptions" :key="option.value" :label="option.label" :value="option.value" />
|
||||||
@@ -43,7 +38,6 @@ const formRef = ref<FormInstance>()
|
|||||||
const localFormModel = ref<ReportTaskFormModel>({ ...props.formModel })
|
const localFormModel = ref<ReportTaskFormModel>({ ...props.formModel })
|
||||||
|
|
||||||
const formRules: FormRules = {
|
const formRules: FormRules = {
|
||||||
no: [{ required: true, message: '请输入任务编号', trigger: 'blur' }],
|
|
||||||
reportModelId: [{ required: true, message: '请选择报告模板', trigger: 'change' }]
|
reportModelId: [{ required: true, message: '请选择报告模板', trigger: 'change' }]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<el-descriptions :column="2" border>
|
<el-descriptions :column="2" border>
|
||||||
<el-descriptions-item label="任务编号">{{ formModel.no || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="任务编号">{{ formModel.no || '系统自动生成' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="报告模板">{{ resolveCurrentOptionLabel(reportModelOptions, formModel.reportModelId) }}</el-descriptions-item>
|
<el-descriptions-item label="报告模板">{{ resolveCurrentOptionLabel(reportModelOptions, formModel.reportModelId) }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="监测点数">{{ importSummary.pointCount }}</el-descriptions-item>
|
<el-descriptions-item label="监测点数">{{ importSummary.pointCount }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="分组数">{{ importSummary.groupCount }}</el-descriptions-item>
|
<el-descriptions-item label="分组数">{{ importSummary.groupCount }}</el-descriptions-item>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="visibleProxy" title="普测报告任务详情" width="1200px" append-to-body destroy-on-close>
|
<el-dialog v-model="visibleProxy" title="普测报告任务详情" width="1200px" append-to-body destroy-on-close :close-on-click-modal="false">
|
||||||
<div v-loading="loading" class="report-task-detail-dialog">
|
<div v-loading="loading" class="report-task-detail-dialog">
|
||||||
<el-descriptions class="detail-descriptions" :column="2" border>
|
<el-descriptions class="detail-descriptions" :column="2" border>
|
||||||
<el-descriptions-item label="任务编号">{{ resolveReportTaskText(detail?.no) }}</el-descriptions-item>
|
<el-descriptions-item label="任务编号">{{ resolveReportTaskText(detail?.no) }}</el-descriptions-item>
|
||||||
@@ -54,8 +54,9 @@
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="generateMessage" label="生成消息" min-width="180" show-overflow-tooltip />
|
<el-table-column prop="generateMessage" label="生成消息" min-width="180" show-overflow-tooltip />
|
||||||
<el-table-column prop="generateTime" label="生成时间" min-width="160" show-overflow-tooltip />
|
<el-table-column prop="generateTime" label="生成时间" min-width="160" show-overflow-tooltip />
|
||||||
<el-table-column label="操作" width="120" fixed="right">
|
<el-table-column label="操作" width="140" fixed="right">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
|
<el-button link type="primary" @click="openGroupReportDetail(row)">详情</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
link
|
link
|
||||||
type="primary"
|
type="primary"
|
||||||
@@ -70,6 +71,42 @@
|
|||||||
</el-table>
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<el-dialog
|
||||||
|
v-model="groupReportDetailVisible"
|
||||||
|
title="分组报告详情"
|
||||||
|
width="640px"
|
||||||
|
append-to-body
|
||||||
|
destroy-on-close
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
class="group-report-detail-dialog"
|
||||||
|
>
|
||||||
|
<el-descriptions v-if="currentGroupReport" :column="1" label-width="100px" border class="group-report-detail-descriptions">
|
||||||
|
<el-descriptions-item label="分组号">{{ resolveReportTaskText(currentGroupReport.groupNo) }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="报告编号">{{ resolveReportTaskText(currentGroupReport.reportNo) }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="委托单位">
|
||||||
|
{{ resolveReportTaskClientUnitText(currentGroupReport.clientUnitId, clientUnitLabelMap) }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="检测公司">
|
||||||
|
{{ resolveReportTaskCreateUnitText(currentGroupReport.createUnit, companyLabelMap) }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="合同编号">{{ resolveReportTaskText(currentGroupReport.contractNumber) }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="检测依据">
|
||||||
|
{{ resolveReportTaskStandardText(currentGroupReport.standard, standardLabelMap) }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="联系电话">{{ resolveReportTaskText(currentGroupReport.phonenumber) }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="报告名称">{{ resolveReportTaskText(currentGroupReport.reportName) }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="报告文件">{{ resolveReportTaskText(currentGroupReport.reportFileName) }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="生成状态">
|
||||||
|
{{ resolveReportTaskGroupReportGenerateStateText(currentGroupReport.generateState) }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="生成消息">{{ resolveReportTaskText(currentGroupReport.generateMessage) }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="生成时间">{{ resolveReportTaskText(currentGroupReport.generateTime) }}</el-descriptions-item>
|
||||||
|
</el-descriptions>
|
||||||
|
<template #footer>
|
||||||
|
<el-button type="primary" @click="groupReportDetailVisible = false">关闭</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button type="primary" @click="visibleProxy = false">关闭</el-button>
|
<el-button type="primary" @click="visibleProxy = false">关闭</el-button>
|
||||||
</template>
|
</template>
|
||||||
@@ -77,7 +114,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed } from 'vue'
|
import { computed, ref } from 'vue'
|
||||||
import type { ReportTask } from '@/api/aireport/testReport/interface'
|
import type { ReportTask } from '@/api/aireport/testReport/interface'
|
||||||
import {
|
import {
|
||||||
normalizeReportTaskLedgerSnapshot,
|
normalizeReportTaskLedgerSnapshot,
|
||||||
@@ -118,6 +155,8 @@ const companyLabelMap = computed(() => props.companyLabelMap)
|
|||||||
const standardLabelMap = computed(() => props.standardLabelMap)
|
const standardLabelMap = computed(() => props.standardLabelMap)
|
||||||
const groupReports = computed(() => props.groupReports || [])
|
const groupReports = computed(() => props.groupReports || [])
|
||||||
const downloadingGroupReportId = computed(() => props.downloadingGroupReportId || '')
|
const downloadingGroupReportId = computed(() => props.downloadingGroupReportId || '')
|
||||||
|
const groupReportDetailVisible = ref(false)
|
||||||
|
const currentGroupReport = ref<ReportTask.ReportTaskGroupReportRecord | null>(null)
|
||||||
const detailSnapshot = computed(() => normalizeReportTaskLedgerSnapshot(props.detail?.data as string | null | undefined))
|
const detailSnapshot = computed(() => normalizeReportTaskLedgerSnapshot(props.detail?.data as string | null | undefined))
|
||||||
const displayGroupCount = computed(() => {
|
const displayGroupCount = computed(() => {
|
||||||
if (groupReports.value.length > 0) {
|
if (groupReports.value.length > 0) {
|
||||||
@@ -135,6 +174,11 @@ const resolveReportTaskClientUnitText = (value: string | null | undefined, label
|
|||||||
if (!text) return '-'
|
if (!text) return '-'
|
||||||
return labelMap[text] || text
|
return labelMap[text] || text
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const openGroupReportDetail = (row: ReportTask.ReportTaskGroupReportRecord) => {
|
||||||
|
currentGroupReport.value = row
|
||||||
|
groupReportDetailVisible.value = true
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
width="1080px"
|
width="1080px"
|
||||||
append-to-body
|
append-to-body
|
||||||
destroy-on-close
|
destroy-on-close
|
||||||
|
:close-on-click-modal="false"
|
||||||
class="report-task-flow-dialog"
|
class="report-task-flow-dialog"
|
||||||
@closed="resetForm"
|
@closed="resetForm"
|
||||||
>
|
>
|
||||||
@@ -49,12 +50,7 @@
|
|||||||
class="report-task-form"
|
class="report-task-form"
|
||||||
>
|
>
|
||||||
<el-row :gutter="16">
|
<el-row :gutter="16">
|
||||||
<el-col :xs="24" :sm="12">
|
<el-col :xs="24" :sm="16">
|
||||||
<el-form-item label="任务编号" prop="no">
|
|
||||||
<el-input v-model="formModel.no" maxlength="32" clearable placeholder="请输入任务编号" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
<el-col :xs="24" :sm="12">
|
|
||||||
<el-form-item label="报告模板" prop="reportModelId">
|
<el-form-item label="报告模板" prop="reportModelId">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="formModel.reportModelId"
|
v-model="formModel.reportModelId"
|
||||||
@@ -106,7 +102,7 @@
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<el-descriptions :column="2" border>
|
<el-descriptions :column="2" border>
|
||||||
<el-descriptions-item label="任务编号">{{ formModel.no || '-' }}</el-descriptions-item>
|
<el-descriptions-item label="任务编号">{{ formModel.no || '系统自动生成' }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="报告模板">
|
<el-descriptions-item label="报告模板">
|
||||||
{{ resolveCurrentOptionLabel(reportModelSelectOptions, formModel.reportModelId) }}
|
{{ resolveCurrentOptionLabel(reportModelSelectOptions, formModel.reportModelId) }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
@@ -184,7 +180,7 @@ const REPORT_TASK_FORM_STEPS: Array<{
|
|||||||
description: string
|
description: string
|
||||||
}> = [
|
}> = [
|
||||||
{ index: 1, value: 'import', title: '数据导入', description: '先完成台账与附件校验' },
|
{ index: 1, value: 'import', title: '数据导入', description: '先完成台账与附件校验' },
|
||||||
{ index: 2, value: 'form', title: '任务信息', description: '填写任务编号和报告模板' },
|
{ index: 2, value: 'form', title: '任务信息', description: '确认报告模板并提交' },
|
||||||
{ index: 3, value: 'done', title: '完成', description: '查看结果并结束本次流程' }
|
{ index: 3, value: 'done', title: '完成', description: '查看结果并结束本次流程' }
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -232,7 +228,6 @@ const formModel = reactive({
|
|||||||
})
|
})
|
||||||
|
|
||||||
const formRules: FormRules = {
|
const formRules: FormRules = {
|
||||||
no: [{ required: true, message: '请输入任务编号', trigger: 'blur' }],
|
|
||||||
reportModelId: [{ required: true, message: '请选择报告模板', trigger: 'change' }]
|
reportModelId: [{ required: true, message: '请选择报告模板', trigger: 'change' }]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -463,7 +458,7 @@ const submitForm = async () => {
|
|||||||
pushLog('info', props.mode === 'create' ? '开始提交新增任务' : '开始提交编辑后的任务信息')
|
pushLog('info', props.mode === 'create' ? '开始提交新增任务' : '开始提交编辑后的任务信息')
|
||||||
emit('submit', {
|
emit('submit', {
|
||||||
id: activeDraftId.value || formModel.id || undefined,
|
id: activeDraftId.value || formModel.id || undefined,
|
||||||
no: formModel.no.trim(),
|
no: formModel.no.trim() || undefined,
|
||||||
reportModelId: formModel.reportModelId,
|
reportModelId: formModel.reportModelId,
|
||||||
data: JSON.parse(formModel.data.trim() || '{}'),
|
data: JSON.parse(formModel.data.trim() || '{}'),
|
||||||
batchId: ledgerPreparedState.value.batchId || undefined
|
batchId: ledgerPreparedState.value.batchId || undefined
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="visibleProxy" title="监测点分组" width="1380px" append-to-body destroy-on-close>
|
<el-dialog v-model="visibleProxy" title="监测点分组" width="1380px" append-to-body destroy-on-close :close-on-click-modal="false">
|
||||||
<div v-loading="loading" class="report-task-group-dialog">
|
<div v-loading="loading" class="report-task-group-dialog">
|
||||||
<el-descriptions :column="4" border class="summary-descriptions">
|
<el-descriptions :column="4" border class="summary-descriptions">
|
||||||
<el-descriptions-item label="任务编号">{{ resolveReportTaskText(record?.no) }}</el-descriptions-item>
|
<el-descriptions-item label="任务编号">{{ resolveReportTaskText(record?.no) }}</el-descriptions-item>
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
max-height="420"
|
max-height="420"
|
||||||
class="point-table"
|
class="point-table"
|
||||||
>
|
>
|
||||||
<el-table-column label="分组号" width="120">
|
<el-table-column label="分组号" width="150" class-name="group-no-column">
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
<el-input-number
|
<el-input-number
|
||||||
:model-value="resolvePointGroupNo(row.id)"
|
:model-value="resolvePointGroupNo(row.id)"
|
||||||
@@ -48,7 +48,11 @@
|
|||||||
<el-table-column prop="pointName" label="监测点" min-width="180" show-overflow-tooltip />
|
<el-table-column prop="pointName" label="监测点" min-width="180" show-overflow-tooltip />
|
||||||
<el-table-column prop="monitorTime" label="监测时间" min-width="160" show-overflow-tooltip />
|
<el-table-column prop="monitorTime" label="监测时间" min-width="160" show-overflow-tooltip />
|
||||||
<el-table-column prop="voltageLevel" label="电压等级" min-width="120" show-overflow-tooltip />
|
<el-table-column prop="voltageLevel" label="电压等级" min-width="120" show-overflow-tooltip />
|
||||||
<el-table-column prop="excelAttachmentName" label="Excel原始文件" min-width="220" show-overflow-tooltip />
|
<el-table-column prop="excelAttachmentName" label="Excel原始文件" min-width="220" show-overflow-tooltip>
|
||||||
|
<template #default="{ row }">
|
||||||
|
{{ resolveReportTaskText(row.excelAttachmentName) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column prop="wordAttachmentName" label="Word原始文件" min-width="220" show-overflow-tooltip>
|
<el-table-column prop="wordAttachmentName" label="Word原始文件" min-width="220" show-overflow-tooltip>
|
||||||
<template #default="{ row }">
|
<template #default="{ row }">
|
||||||
{{ resolveReportTaskText(row.wordAttachmentName) }}
|
{{ resolveReportTaskText(row.wordAttachmentName) }}
|
||||||
@@ -58,7 +62,6 @@
|
|||||||
|
|
||||||
<div class="toolbar secondary-toolbar">
|
<div class="toolbar secondary-toolbar">
|
||||||
<div class="toolbar-title">分组报告信息</div>
|
<div class="toolbar-title">分组报告信息</div>
|
||||||
<div class="toolbar-tip">这些字段允许先保存为空,执行生成报告时再由后端做完整校验。</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-empty
|
<el-empty
|
||||||
@@ -416,4 +419,12 @@ const handleSubmit = () => {
|
|||||||
:deep(.el-input) {
|
:deep(.el-input) {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:deep(.point-table .el-input-number) {
|
||||||
|
width: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.point-table .group-no-column .cell) {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -35,6 +35,16 @@
|
|||||||
>
|
>
|
||||||
生成报告
|
生成报告
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
link
|
||||||
|
type="primary"
|
||||||
|
:icon="Download"
|
||||||
|
:disabled="!row.groupCount"
|
||||||
|
:loading="downloadingReportTaskId === row.id"
|
||||||
|
@click="handleDownloadTaskReports(row)"
|
||||||
|
>
|
||||||
|
下载
|
||||||
|
</el-button>
|
||||||
<el-button link type="primary" :icon="Edit" @click="openEditDialog(row)">编辑</el-button>
|
<el-button link type="primary" :icon="Edit" @click="openEditDialog(row)">编辑</el-button>
|
||||||
<el-button link type="primary" :icon="Upload" @click="openAuditDialog(row)">提交审核</el-button>
|
<el-button link type="primary" :icon="Upload" @click="openAuditDialog(row)">提交审核</el-button>
|
||||||
<el-button link type="danger" :icon="Delete" @click="handleDelete(row)">删除</el-button>
|
<el-button link type="danger" :icon="Delete" @click="handleDelete(row)">删除</el-button>
|
||||||
@@ -98,6 +108,7 @@ import type { ColumnProps, ProTableInstance } from '@/components/ProTable/interf
|
|||||||
import {
|
import {
|
||||||
createReportTaskApi,
|
createReportTaskApi,
|
||||||
deleteReportTasksApi,
|
deleteReportTasksApi,
|
||||||
|
downloadReportTaskApi,
|
||||||
downloadReportTaskGroupReportApi,
|
downloadReportTaskGroupReportApi,
|
||||||
exportReportTasksApi,
|
exportReportTasksApi,
|
||||||
generateReportTaskGroupReportsApi,
|
generateReportTaskGroupReportsApi,
|
||||||
@@ -150,6 +161,7 @@ const detailLoading = ref(false)
|
|||||||
const auditSaving = ref(false)
|
const auditSaving = ref(false)
|
||||||
const groupDialogLoading = ref(false)
|
const groupDialogLoading = ref(false)
|
||||||
const groupDialogSaving = ref(false)
|
const groupDialogSaving = ref(false)
|
||||||
|
const downloadingReportTaskId = ref('')
|
||||||
const formMode = ref<'create' | 'edit'>('create')
|
const formMode = ref<'create' | 'edit'>('create')
|
||||||
const currentRecord = ref<ReportTask.ReportTaskRecord | null>(null)
|
const currentRecord = ref<ReportTask.ReportTaskRecord | null>(null)
|
||||||
const detailRecord = ref<ReportTask.ReportTaskRecord | null>(null)
|
const detailRecord = ref<ReportTask.ReportTaskRecord | null>(null)
|
||||||
@@ -216,7 +228,7 @@ const columns = reactive<ColumnProps<ReportTask.ReportTaskRecord>[]>([
|
|||||||
},
|
},
|
||||||
{ prop: 'createByName', label: '创建人', minWidth: 120, render: ({ row }) => resolveReportTaskText(row.createByName || row.createBy) },
|
{ prop: 'createByName', label: '创建人', minWidth: 120, render: ({ row }) => resolveReportTaskText(row.createByName || row.createBy) },
|
||||||
{ prop: 'createTime', label: '创建时间', minWidth: 170, render: ({ row }) => resolveReportTaskText(row.createTime) },
|
{ prop: 'createTime', label: '创建时间', minWidth: 170, render: ({ row }) => resolveReportTaskText(row.createTime) },
|
||||||
{ prop: 'operation', label: '操作', fixed: 'right', width: 360 }
|
{ prop: 'operation', label: '操作', fixed: 'right', width: 430 }
|
||||||
])
|
])
|
||||||
|
|
||||||
const ensureReportTaskDictOptionsReady = async () => {
|
const ensureReportTaskDictOptionsReady = async () => {
|
||||||
@@ -521,6 +533,29 @@ const handleDownloadGroupReport = async (row: ReportTask.ReportTaskGroupReportRe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleDownloadTaskReports = async (row: ReportTask.ReportTaskRecord) => {
|
||||||
|
const reportId = String(row.id || '').trim()
|
||||||
|
if (!reportId) {
|
||||||
|
ElMessage.warning('当前报告任务缺少 ID,无法下载')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
downloadingReportTaskId.value = reportId
|
||||||
|
try {
|
||||||
|
await useDownloadWithServerFileName(
|
||||||
|
() => downloadReportTaskApi(reportId),
|
||||||
|
row.no || '普测报告任务报告包',
|
||||||
|
undefined,
|
||||||
|
false,
|
||||||
|
'.zip'
|
||||||
|
)
|
||||||
|
} catch (error) {
|
||||||
|
ElMessage.error(getReportTaskErrorMessage(error, '报告任务下载失败'))
|
||||||
|
} finally {
|
||||||
|
downloadingReportTaskId.value = ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const deleteReportTasks = async (ids: string[], successMessage: string) => {
|
const deleteReportTasks = async (ids: string[], successMessage: string) => {
|
||||||
if (!ids.length) {
|
if (!ids.length) {
|
||||||
ElMessage.warning('请选择要删除的报告任务')
|
ElMessage.warning('请选择要删除的报告任务')
|
||||||
|
|||||||
@@ -429,18 +429,22 @@ export const normalizeReportTaskGroupSavePayload = (
|
|||||||
return {
|
return {
|
||||||
groups: Array.from(groupedPointMap.entries())
|
groups: Array.from(groupedPointMap.entries())
|
||||||
.sort(([groupNoA], [groupNoB]) => groupNoA - groupNoB)
|
.sort(([groupNoA], [groupNoB]) => groupNoA - groupNoB)
|
||||||
.map(([groupNo, pointIds]) => ({
|
.map(([groupNo, pointIds]) => {
|
||||||
groupNo,
|
const standard = Array.isArray(groupConfigMap[groupNo]?.standard)
|
||||||
pointIds,
|
|
||||||
reportNo: String(groupConfigMap[groupNo]?.reportNo || '').trim() || undefined,
|
|
||||||
clientUnitId: String(groupConfigMap[groupNo]?.clientUnitId || '').trim() || undefined,
|
|
||||||
createUnit: String(groupConfigMap[groupNo]?.createUnit || '').trim() || undefined,
|
|
||||||
contractNumber: String(groupConfigMap[groupNo]?.contractNumber || '').trim() || undefined,
|
|
||||||
standard: Array.isArray(groupConfigMap[groupNo]?.standard)
|
|
||||||
? groupConfigMap[groupNo].standard!.map(item => String(item || '').trim()).filter(Boolean)
|
? groupConfigMap[groupNo].standard!.map(item => String(item || '').trim()).filter(Boolean)
|
||||||
: [],
|
: []
|
||||||
phonenumber: String(groupConfigMap[groupNo]?.phonenumber || '').trim() || undefined
|
|
||||||
}))
|
return {
|
||||||
|
groupNo,
|
||||||
|
pointIds,
|
||||||
|
reportNo: String(groupConfigMap[groupNo]?.reportNo || '').trim() || undefined,
|
||||||
|
clientUnitId: String(groupConfigMap[groupNo]?.clientUnitId || '').trim() || undefined,
|
||||||
|
createUnit: String(groupConfigMap[groupNo]?.createUnit || '').trim() || undefined,
|
||||||
|
contractNumber: String(groupConfigMap[groupNo]?.contractNumber || '').trim() || undefined,
|
||||||
|
standard: standard.length ? standard : undefined,
|
||||||
|
phonenumber: String(groupConfigMap[groupNo]?.phonenumber || '').trim() || undefined
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,35 +2,34 @@
|
|||||||
<el-dialog
|
<el-dialog
|
||||||
v-model="visibleProxy"
|
v-model="visibleProxy"
|
||||||
title="新增多模板批任务"
|
title="新增多模板批任务"
|
||||||
width="1240px"
|
width="760px"
|
||||||
append-to-body
|
append-to-body
|
||||||
destroy-on-close
|
destroy-on-close
|
||||||
|
:close-on-click-modal="false"
|
||||||
@closed="handleClosed"
|
@closed="handleClosed"
|
||||||
>
|
>
|
||||||
<div class="create-dialog-body">
|
<div class="create-dialog-body">
|
||||||
<el-form :model="createForm" label-width="110px" class="create-base-form">
|
<el-alert
|
||||||
<el-row :gutter="16">
|
title="批任务编号和子任务编号将由系统自动生成。"
|
||||||
<el-col :xs="24" :sm="12">
|
type="info"
|
||||||
<el-form-item label="批任务编号" required>
|
:closable="false"
|
||||||
<el-input v-model="createForm.no" maxlength="64" clearable placeholder="请输入批任务编号" />
|
show-icon
|
||||||
</el-form-item>
|
/>
|
||||||
</el-col>
|
|
||||||
<el-col :xs="24" :sm="12">
|
<el-form :model="createForm" label-width="96px" class="create-base-form">
|
||||||
<el-form-item label="压缩包文件" required>
|
<el-form-item label="压缩包文件" required>
|
||||||
<el-upload
|
<el-upload
|
||||||
:auto-upload="false"
|
:auto-upload="false"
|
||||||
:limit="1"
|
:limit="1"
|
||||||
:file-list="zipFileList"
|
:file-list="zipFileList"
|
||||||
accept=".zip"
|
accept=".zip"
|
||||||
@change="handleZipChange"
|
@change="handleZipChange"
|
||||||
@remove="handleZipRemove"
|
@remove="handleZipRemove"
|
||||||
@exceed="handleZipExceed"
|
@exceed="handleZipExceed"
|
||||||
>
|
>
|
||||||
<el-button>选择 zip 压缩包</el-button>
|
<el-button>选择 zip 压缩包</el-button>
|
||||||
</el-upload>
|
</el-upload>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
<div class="validate-toolbar">
|
<div class="validate-toolbar">
|
||||||
@@ -90,25 +89,16 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<el-form label-width="96px">
|
<el-form label-width="96px">
|
||||||
<el-row :gutter="16">
|
<el-form-item label="报告模板" required>
|
||||||
<el-col :xs="24" :sm="12" :md="8">
|
<el-select v-model="item.reportModelId" filterable clearable placeholder="请选择报告模板">
|
||||||
<el-form-item label="任务编号" required>
|
<el-option
|
||||||
<el-input v-model="item.no" maxlength="32" clearable placeholder="请输入任务编号" />
|
v-for="option in reportModelOptions"
|
||||||
</el-form-item>
|
:key="option.value"
|
||||||
</el-col>
|
:label="option.label"
|
||||||
<el-col :xs="24" :sm="12" :md="8">
|
:value="option.value"
|
||||||
<el-form-item label="报告模板" required>
|
/>
|
||||||
<el-select v-model="item.reportModelId" filterable clearable placeholder="请选择报告模板">
|
</el-select>
|
||||||
<el-option
|
</el-form-item>
|
||||||
v-for="option in reportModelOptions"
|
|
||||||
:key="option.value"
|
|
||||||
:label="option.label"
|
|
||||||
:value="option.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -162,11 +152,9 @@ const emit = defineEmits<{
|
|||||||
const selectedZipFile = ref<File | null>(null)
|
const selectedZipFile = ref<File | null>(null)
|
||||||
const zipFileList = ref<UploadUserFile[]>([])
|
const zipFileList = ref<UploadUserFile[]>([])
|
||||||
const createForm = reactive<{
|
const createForm = reactive<{
|
||||||
no: string
|
|
||||||
sessionId: string
|
sessionId: string
|
||||||
childReports: ChildConfigFormItem[]
|
childReports: ChildConfigFormItem[]
|
||||||
}>({
|
}>({
|
||||||
no: '',
|
|
||||||
sessionId: '',
|
sessionId: '',
|
||||||
childReports: []
|
childReports: []
|
||||||
})
|
})
|
||||||
@@ -185,7 +173,6 @@ const clearValidatedResult = (notify = true) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const resetLocalState = (notify = true) => {
|
const resetLocalState = (notify = true) => {
|
||||||
createForm.no = ''
|
|
||||||
selectedZipFile.value = null
|
selectedZipFile.value = null
|
||||||
zipFileList.value = []
|
zipFileList.value = []
|
||||||
clearValidatedResult(notify)
|
clearValidatedResult(notify)
|
||||||
@@ -195,7 +182,6 @@ const buildChildConfigForms = (templateDirs: ReportTaskMulti.ReportTaskMultiTemp
|
|||||||
templateDirs.map(item => ({
|
templateDirs.map(item => ({
|
||||||
templateDirName: String(item.dirName || ''),
|
templateDirName: String(item.dirName || ''),
|
||||||
templateDirPath: String(item.dirPath || ''),
|
templateDirPath: String(item.dirPath || ''),
|
||||||
no: '',
|
|
||||||
reportModelId: '',
|
reportModelId: '',
|
||||||
pointCount: Number(item.pointCount || 0),
|
pointCount: Number(item.pointCount || 0),
|
||||||
groupCount: Number(item.groupCount || 0),
|
groupCount: Number(item.groupCount || 0),
|
||||||
@@ -246,12 +232,10 @@ const handleValidateZip = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const validateCreateForm = () => {
|
const validateCreateForm = () => {
|
||||||
if (!createForm.no.trim()) return '请输入批任务编号'
|
|
||||||
if (!createForm.sessionId) return '请先校验通过压缩包'
|
if (!createForm.sessionId) return '请先校验通过压缩包'
|
||||||
if (!createForm.childReports.length) return '当前没有可创建的子任务配置'
|
if (!createForm.childReports.length) return '当前没有可创建的子任务配置'
|
||||||
|
|
||||||
for (const item of createForm.childReports) {
|
for (const item of createForm.childReports) {
|
||||||
if (!item.no.trim()) return `模板目录 ${item.templateDirName} 缺少任务编号`
|
|
||||||
if (!item.reportModelId) return `模板目录 ${item.templateDirName} 缺少报告模板`
|
if (!item.reportModelId) return `模板目录 ${item.templateDirName} 缺少报告模板`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -266,12 +250,10 @@ const handleCreate = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
emit('create', {
|
emit('create', {
|
||||||
no: createForm.no.trim(),
|
|
||||||
sessionId: createForm.sessionId,
|
sessionId: createForm.sessionId,
|
||||||
childReports: createForm.childReports.map(item => ({
|
childReports: createForm.childReports.map(item => ({
|
||||||
templateDirName: item.templateDirName,
|
templateDirName: item.templateDirName,
|
||||||
templateDirPath: item.templateDirPath,
|
templateDirPath: item.templateDirPath,
|
||||||
no: item.no.trim(),
|
|
||||||
reportModelId: item.reportModelId
|
reportModelId: item.reportModelId
|
||||||
}))
|
}))
|
||||||
})
|
})
|
||||||
@@ -294,6 +276,10 @@ const handleClosed = () => {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.create-base-form {
|
||||||
|
max-width: 560px;
|
||||||
|
}
|
||||||
|
|
||||||
.validate-toolbar {
|
.validate-toolbar {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -325,7 +311,7 @@ const handleClosed = () => {
|
|||||||
.dir-config-item {
|
.dir-config-item {
|
||||||
border: 1px solid var(--el-border-color-light);
|
border: 1px solid var(--el-border-color-light);
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
padding: 16px 16px 0;
|
padding: 16px;
|
||||||
background: var(--el-fill-color-blank);
|
background: var(--el-fill-color-blank);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
@reset="resetCreateDialogState"
|
@reset="resetCreateDialogState"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<el-dialog v-model="detailDialogVisible" title="多模板批任务详情" width="1200px" append-to-body destroy-on-close>
|
<el-dialog v-model="detailDialogVisible" title="多模板批任务详情" width="1200px" append-to-body destroy-on-close :close-on-click-modal="false">
|
||||||
<div v-loading="detailLoading" class="detail-dialog-body">
|
<div v-loading="detailLoading" class="detail-dialog-body">
|
||||||
<el-descriptions v-if="detailRecord" :column="2" border>
|
<el-descriptions v-if="detailRecord" :column="2" border>
|
||||||
<el-descriptions-item label="批任务编号">{{ resolveReportTaskText(detailRecord.no) }}</el-descriptions-item>
|
<el-descriptions-item label="批任务编号">{{ resolveReportTaskText(detailRecord.no) }}</el-descriptions-item>
|
||||||
@@ -42,13 +42,13 @@
|
|||||||
|
|
||||||
<div class="detail-toolbar">
|
<div class="detail-toolbar">
|
||||||
<div class="section-title">子任务列表</div>
|
<div class="section-title">子任务列表</div>
|
||||||
<el-button
|
<!-- <el-button-->
|
||||||
:loading="downloadingMultiId === detailRecord?.id"
|
<!-- :loading="downloadingMultiId === detailRecord?.id"-->
|
||||||
:disabled="!detailRecord?.id"
|
<!-- :disabled="!detailRecord?.id"-->
|
||||||
@click="handleDownloadMulti(detailRecord)"
|
<!-- @click="handleDownloadMulti(detailRecord)"-->
|
||||||
>
|
<!-- >-->
|
||||||
下载批任务
|
<!-- 下载批任务-->
|
||||||
</el-button>
|
<!-- </el-button>-->
|
||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
:loading="multiGenerating"
|
:loading="multiGenerating"
|
||||||
@@ -59,7 +59,7 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-table :data="detailChildReports" border class="child-report-table">
|
<el-table :data="detailChildTasks" border class="child-task-table">
|
||||||
<el-table-column prop="templateDirName" label="模板目录" min-width="150" />
|
<el-table-column prop="templateDirName" label="模板目录" min-width="150" />
|
||||||
<el-table-column prop="no" label="任务编号" min-width="160" />
|
<el-table-column prop="no" label="任务编号" min-width="160" />
|
||||||
<el-table-column prop="reportModelName" label="报告模板" min-width="140" />
|
<el-table-column prop="reportModelName" label="报告模板" min-width="140" />
|
||||||
@@ -128,7 +128,7 @@ import {
|
|||||||
downloadReportTaskMultiApi,
|
downloadReportTaskMultiApi,
|
||||||
generateReportTaskMultiApi,
|
generateReportTaskMultiApi,
|
||||||
getReportTaskMultiDetailApi,
|
getReportTaskMultiDetailApi,
|
||||||
listReportTaskMultiChildReportsApi,
|
listReportTaskMultiChildTasksApi,
|
||||||
listReportTaskMultisApi,
|
listReportTaskMultisApi,
|
||||||
validateReportTaskMultiZipApi,
|
validateReportTaskMultiZipApi,
|
||||||
createReportTaskMultiApi
|
createReportTaskMultiApi
|
||||||
@@ -191,7 +191,7 @@ const childGroupSaving = ref(false)
|
|||||||
const multiGenerating = ref(false)
|
const multiGenerating = ref(false)
|
||||||
const zipValidateResult = ref<ReportTaskMulti.ReportTaskMultiValidateResult | null>(null)
|
const zipValidateResult = ref<ReportTaskMulti.ReportTaskMultiValidateResult | null>(null)
|
||||||
const detailRecord = ref<ReportTaskMulti.ReportTaskMultiRecord | null>(null)
|
const detailRecord = ref<ReportTaskMulti.ReportTaskMultiRecord | null>(null)
|
||||||
const detailChildReports = ref<ReportTask.ReportTaskRecord[]>([])
|
const detailChildTasks = ref<ReportTask.ReportTaskRecord[]>([])
|
||||||
const childDetailRecord = ref<ReportTask.ReportTaskRecord | null>(null)
|
const childDetailRecord = ref<ReportTask.ReportTaskRecord | null>(null)
|
||||||
const childDetailGroupReports = ref<ReportTask.ReportTaskGroupReportRecord[]>([])
|
const childDetailGroupReports = ref<ReportTask.ReportTaskGroupReportRecord[]>([])
|
||||||
const childGroupReports = ref<ReportTask.ReportTaskGroupReportRecord[]>([])
|
const childGroupReports = ref<ReportTask.ReportTaskGroupReportRecord[]>([])
|
||||||
@@ -322,15 +322,15 @@ const handleCreateMulti = async (payload: ReportTaskMulti.ReportTaskMultiCreateP
|
|||||||
}
|
}
|
||||||
|
|
||||||
const loadDetailData = async (id: string) => {
|
const loadDetailData = async (id: string) => {
|
||||||
const [detailResponse, childReportsResponse] = await Promise.all([
|
const [detailResponse, childTasksResponse] = await Promise.all([
|
||||||
getReportTaskMultiDetailApi(id),
|
getReportTaskMultiDetailApi(id),
|
||||||
listReportTaskMultiChildReportsApi(id)
|
listReportTaskMultiChildTasksApi(id)
|
||||||
])
|
])
|
||||||
detailRecord.value = unwrapReportTaskPayload<ReportTaskMulti.ReportTaskMultiRecord>(
|
detailRecord.value = unwrapReportTaskPayload<ReportTaskMulti.ReportTaskMultiRecord>(
|
||||||
detailResponse as ResultData<ReportTaskMulti.ReportTaskMultiRecord>
|
detailResponse as ResultData<ReportTaskMulti.ReportTaskMultiRecord>
|
||||||
)
|
)
|
||||||
detailChildReports.value = (unwrapReportTaskPayload<ReportTask.ReportTaskRecord[]>(
|
detailChildTasks.value = (unwrapReportTaskPayload<ReportTask.ReportTaskRecord[]>(
|
||||||
childReportsResponse as ResultData<ReportTask.ReportTaskRecord[]>
|
childTasksResponse as ResultData<ReportTask.ReportTaskRecord[]>
|
||||||
) || []) as ReportTask.ReportTaskRecord[]
|
) || []) as ReportTask.ReportTaskRecord[]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -591,7 +591,7 @@ onMounted(async () => {
|
|||||||
gap: 16px;
|
gap: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.child-report-table {
|
.child-task-table {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
.detail-toolbar {
|
.detail-toolbar {
|
||||||
|
|||||||
Reference in New Issue
Block a user