diff --git a/code/web/task_schedule/src/utils/BIReport.ts b/code/web/task_schedule/src/utils/BIReport.ts index ea88caa..a88a612 100644 --- a/code/web/task_schedule/src/utils/BIReport.ts +++ b/code/web/task_schedule/src/utils/BIReport.ts @@ -2,7 +2,7 @@ * @Author: Kane * @Date: 2023-10-17 11:18:19 * @LastEditors: Kane - * @FilePath: /task_schedule/src/utils/api/BIReport.ts + * @FilePath: /task_schedule/src/utils/BIReport.ts * @Description: BI报表相关的代码 * * Copyright (c) ${2023} by Kane, All Rights Reserved. @@ -31,6 +31,8 @@ interface ImportBIReportResponse importedCount: number, } +type ImportBIReportResponseHandler = ( response: ImportBIReportResponse, error?: any ) => void; + /** * * @param request 请求参数 @@ -72,5 +74,6 @@ export { type BIReportType, type ImportBIReportRequest, type ImportBIReportResponse, + type ImportBIReportResponseHandler, importBIReport }; diff --git a/code/web/task_schedule/src/views/data/bi/BiDataUploadView.vue b/code/web/task_schedule/src/views/data/bi/BiDataUploadView.vue index d0c1860..6fe2dcc 100644 --- a/code/web/task_schedule/src/views/data/bi/BiDataUploadView.vue +++ b/code/web/task_schedule/src/views/data/bi/BiDataUploadView.vue @@ -46,6 +46,7 @@ name="files" :show-file-list="false" :data="ui.uploadParameters" + :on-success="onUploadSuccess" > @@ -62,9 +63,12 @@ import { type BIReportType, type ImportBIReportRequest, type ImportBIReportResponse, + type ImportBIReportResponseHandler, importBIReport } from "@/utils/BIReport.js"; -import { UploadFilled } from "@element-plus/icons-vue"; +import { type FileUploadResponse } from "@/utils/fileUpload.js"; +// import { UploadFilled } from "@element-plus/icons-vue"; +import { type UploadProps, type UploadFile, type UploadFiles, ElMessage, ElMessageBox } from "element-plus"; interface UI { @@ -79,6 +83,13 @@ interface UI export default { name: "BiDataUploadView", + props: { + reportType: { + type: Number, + require: true, + default: (): number => -9999, + }, + }, setup() { const ui: UI = reactive({ @@ -105,8 +116,97 @@ export default { showFileList: false, }); + /** + * 文件上传成功响应函数 + * @param response 响应结果参数 + * @param uploadFile + * @param uploadFiles + */ + const onUploadSuccess: UploadProps["onSuccess"] = ( response: FileUploadResponse, uploadFile: UploadFile, uploadFiles: UploadFiles ): void => + { + // 先判断成功标志位 + if ( response.success ) + { + // 成功,发出导入报表请求 + if ( response.fileList.length === 0 ) + { + // 上传文件路径有问题,提示一下 + ElMessageBox.confirm( + "上传文件的保存路径有误,请联系开发人员。", + "上传文件错误", + { + confirmButtonText: "确定", + type: "warning", + center: true, + } + ) + .then((): void => {}) + .catch((): void => {}); + } + + const request: ImportBIReportRequest = { + filePath: response.fileList[0], + reportType: ui.selectedReportType, + hasCaption: ui.hasCaption, + sheetIndex: ui.sheetIndex, + }; + + console.log( "请求参数", request ); + + // 发出请求 + importBIReport( request, importResponseHandler ); + } + else + { + // 失败了,提示一下 + ElMessageBox.confirm( + response.message, + "上传文件错误", + { + confirmButtonText: "确定", + type: "warning", + center: true, + } + ) + .then((): void => {}) + .catch((): void => {}); + } + }; + + /** + * handler函数 + * @param response + * @param error + */ + const importResponseHandler: ImportBIReportResponseHandler = ( response: ImportBIReportResponse, error?: any ): void => + { + if ( response.success ) + { + ElMessage({ + type: "success", + message: response.message, + }); + } + else + { + ElMessageBox.confirm( + response.message, + "导入错误", + { + confirmButtonText: "确定", + type: "warning", + center: true, + } + ) + .then((): void => {}) + .catch((): void => {}); + console.log( error ); + } + }; + return { ui, + onUploadSuccess, }; }, }; diff --git a/code/web/task_schedule/src/views/data/bi/TelsalerAttachingRateView.vue b/code/web/task_schedule/src/views/data/bi/TelsalerAttachingRateView.vue index 485a9d4..ba9eed9 100644 --- a/code/web/task_schedule/src/views/data/bi/TelsalerAttachingRateView.vue +++ b/code/web/task_schedule/src/views/data/bi/TelsalerAttachingRateView.vue @@ -77,6 +77,9 @@ v-model="ui.showUploadDialog" title="上传报表" width="600px" + :close-on-click-modal="false" + :close-on-press-escape="false" + :show-close="true" >