diff --git a/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/utils/files/RegulatoryFile.java b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/utils/files/RegulatoryFile.java new file mode 100644 index 0000000..103e154 --- /dev/null +++ b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/utils/files/RegulatoryFile.java @@ -0,0 +1,98 @@ +/** + * @Author: Kane Wang + * @Date: 2026-03-19 14:43:07 + * @LastEditors: Kane Wang + * @LastModified: 2026-03-19 14:43:08 + * @FilePath: src/main/java/com/cpic/xim/utils/files/RegulatoryFile.java + * @Description: 用于定义前端 AddNewRegulatoryRequest 请求中 regulatory_files 的json对象。 + * + * Copyright (c) 2025 by Kane All rights reserved + */ +package com.cpic.xim.utils.files; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class RegulatoryFile +{ + public RegulatoryFile() + { + } + + public String getFileType() + { + return fileType; + } + + public void setFileType( String fileType ) + { + this.fileType = fileType; + } + + public String getFileURL() + { + return fileURL; + } + + public void setFileURL( String fileURL ) + { + this.fileURL = fileURL; + } + + public String getLocalFilePath() + { + return localFilePath; + } + + public void setLocalFilePath( String localFilePath ) + { + this.localFilePath = localFilePath; + } + + public String getRegulatoryFileName() + { + return regulatoryFileName; + } + + public void setRegulatoryFileName( String regulatoryFileName ) + { + this.regulatoryFileName = regulatoryFileName; + } + + public String getRegulatoryFileNameOriginal() + { + return regulatoryFileNameOriginal; + } + + public void setRegulatoryFileNameOriginal( String regulatoryFileNameOriginal ) + { + this.regulatoryFileNameOriginal = regulatoryFileNameOriginal; + } + + public int getRowIndex() + { + return rowIndex; + } + + public void setRowIndex( int rowIndex ) + { + this.rowIndex = rowIndex; + } + + @JsonProperty("file_type") + private String fileType; + + @JsonProperty("file_url") + private String fileURL; + + @JsonProperty("local_file_path") + private String localFilePath; + + @JsonProperty("regulatory_file_name") + private String regulatoryFileName; + + @JsonProperty("regulatory_file_name_original") + private String regulatoryFileNameOriginal; + + @JsonProperty("rowIndex") + private int rowIndex; +} diff --git a/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/regulatory/AddNewRegulatoryController.java b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/regulatory/AddNewRegulatoryController.java index ec7884f..b4975e0 100644 --- a/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/regulatory/AddNewRegulatoryController.java +++ b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/regulatory/AddNewRegulatoryController.java @@ -11,13 +11,15 @@ package com.cpic.xim.web.controllers.regulatory; import java.io.File; +import java.io.IOException; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import org.apache.commons.io.FileUtils; -import com.cpic.xim.utils.files.UploadedFile; +import com.cpic.xim.utils.files.RegulatoryFile; @Controller @RequestMapping( "/regulatory" ) @@ -25,45 +27,92 @@ public class AddNewRegulatoryController { // 制度库文件的基础目录 private static final String baseDirectory = "D:/制度库/"; - + + /** + * + * @param request + * @return + */ @RequestMapping( path = "/add-new-regulatory.do", method = RequestMethod.POST ) @ResponseBody public static AddNewRegulatoryResponse addNewRegulatory( @RequestBody AddNewRegulatoryRequest request ) { - AddNewRegulatoryResponse response = new AddNewRegulatoryResponse(); - - // 验证文件是否存在,并判断目睹路径是否有同名文件存在 - for ( UploadedFile file : request.getRegulatoryFiles() ) + AddNewRegulatoryResponse response = new AddNewRegulatoryResponse(); + File regulatoryBaseDirectory = new File( baseDirectory + "/" + request.getRegulatoryName() ); + + // 创建目录 + if ( regulatoryBaseDirectory.mkdirs() == false ) { - String destFilePath = baseDirectory + "/" + request.getRegulatoryName() + "/" + file.getFileName(); - File uploadFile = new File( file.getAbsoluteFilePath() ); + response.setSuccess( false ); + response.setMessage( "创建制度目录失败,请联系管理员!" ); + + return response; + } + + // 验证文件是否存在,并判断目睹路径是否有同名文件存在 + for ( RegulatoryFile file : request.getRegulatoryFiles() ) + { + String destFilePath = baseDirectory + "/" + request.getRegulatoryName() + "/" + file.getRegulatoryFileName(); + File uploadFile = new File( file.getLocalFilePath() + "/" + file.getRegulatoryFileName() ); File dest = new File( destFilePath ); - + if ( uploadFile.exists() == false ) { response.setSuccess( false ); - response.setMessage( "文件" + file.getAbsoluteFilePath() + "不存在!" ); - + response.setMessage( "文件" + file.getRegulatoryFileName() + "不存在!" ); + return response; } - + // 判断目的路径是否有同名文件 if ( dest.exists() == true ) { response.setSuccess( false ); - response.setMessage( "文件" + file.getAbsoluteFilePath() + "存在同名文件!" ); - + response.setMessage( "文件" + file.getRegulatoryFileName() + "存在同名文件!" ); + return response; } } - - // 复制文件 - for ( UploadedFile file : request.getRegulatoryFiles() ) + + + for ( RegulatoryFile file : request.getRegulatoryFiles() ) { - File uploadFile = new File( file.getAbsoluteFilePath() ); - + String destFilePath = baseDirectory + "/" + request.getRegulatoryName() + "/" + file.getRegulatoryFileName(); + File uploadFile = new File( file.getLocalFilePath() + "/" + file.getRegulatoryFileName() ); + File dest = new File( destFilePath ); + + // 复制文件 + try + { + FileUtils.copyFile( uploadFile, dest ); + } + catch ( IOException error ) + { + // 出现异常,删除文件 + try + { + FileUtils.deleteDirectory( regulatoryBaseDirectory ); + } + catch ( Exception deleteError ) + { + deleteError.printStackTrace(); + } + + response.setSuccess( false ); + response.setMessage( "复制" + file.getRegulatoryFileNameOriginal() + "文件失败,请联系管理员!" ); + + return response; + } } + + //todo: 写入数据库 + + // TO-DO: 清理上传文件的目录 + + response.setSuccess( true ); + response.setMessage( "文件复制成功!" ); + return response; } } diff --git a/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/regulatory/AddNewRegulatoryRequest.java b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/regulatory/AddNewRegulatoryRequest.java index ac29073..31b637d 100644 --- a/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/regulatory/AddNewRegulatoryRequest.java +++ b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/web/controllers/regulatory/AddNewRegulatoryRequest.java @@ -2,7 +2,7 @@ * @Author: Kane Wang * @Date: 2025-12-26 17:25:13 * @LastEditors: Kane Wang - * @LastModified: 2025-12-26 21:23:04 + * @LastModified: 2026-03-19 14:51:38 * @FilePath: src/main/java/com/cpic/xim/web/controllers/regulatory/AddNewRegulatoryRequest.java * @Description: * @@ -11,7 +11,8 @@ package com.cpic.xim.web.controllers.regulatory; import com.fasterxml.jackson.annotation.JsonProperty; -import com.cpic.xim.utils.files.UploadedFile; +import com.cpic.xim.utils.files.RegulatoryFile; + import java.util.Vector; public class AddNewRegulatoryRequest @@ -23,7 +24,7 @@ public class AddNewRegulatoryRequest this.departmentName = ""; this.releaseYear = ""; this.comment = ""; - this.regulatoryFiles = new Vector(); + this.regulatoryFiles = new Vector(); } public AddNewRegulatoryRequest( @@ -31,7 +32,7 @@ public class AddNewRegulatoryRequest String departmentName, String releaseYear, String comment, - Vector regulatoryFiles + Vector regulatoryFiles ) { this.regulatoryName = regulatoryName; @@ -81,12 +82,12 @@ public class AddNewRegulatoryRequest this.comment = comment; } - public Vector getRegulatoryFiles() + public Vector getRegulatoryFiles() { return regulatoryFiles; } - public void setRegulatoryFiles( Vector regulatoryFiles ) + public void setRegulatoryFiles( Vector regulatoryFiles ) { this.regulatoryFiles = regulatoryFiles; } @@ -104,5 +105,5 @@ public class AddNewRegulatoryRequest private String comment; @JsonProperty("regulatory_files") - private Vector regulatoryFiles; + private Vector regulatoryFiles; } diff --git a/code/web/regulatory-management-util/src/utils/regulatory_utils.ts b/code/web/regulatory-management-util/src/utils/regulatory_utils.ts index 1ce4406..a46cdb0 100644 --- a/code/web/regulatory-management-util/src/utils/regulatory_utils.ts +++ b/code/web/regulatory-management-util/src/utils/regulatory_utils.ts @@ -2,7 +2,7 @@ * @Author: Kane Wang * @Date: 2026-01-05 10:42:42 * @LastEditors: Kane Wang - * @LastModified: 2026-02-04 15:37:20 + * @LastModified: 2026-03-19 15:41:22 * @FilePath: src/utils/regulatory_utils.ts * @Description: * @@ -18,7 +18,7 @@ interface AddNewRegulatoryResponse message: string; } -interface Render { +interface AddNewRegulatoryResponseRender { ( resonse: AddNewRegulatoryResponse ) :void, } type CallBackRender = ( response: AddNewRegulatoryResponse ) => void; @@ -27,7 +27,7 @@ type CallBackRender = ( response: AddNewRegulatoryResponse ) => void; * @param regulatory RegulatoryData类型制度对象,用于发送请求。 * @param render 回调函数,请求成功后调用。 */ -function addNewRegulatory( regulatory: RegulatoryData, render: Render ): void +function addNewRegulatory( regulatory: RegulatoryData, render: AddNewRegulatoryResponseRender ): void { // const url = API_URL.URL_ADD_NEW_REGULATORY; @@ -69,6 +69,6 @@ function addNewRegulatory( regulatory: RegulatoryData, render: Render ): void export { addNewRegulatory, type AddNewRegulatoryResponse, - type Render, + type AddNewRegulatoryResponseRender, type CallBackRender }; \ No newline at end of file diff --git a/code/web/regulatory-management-util/src/views/console/data/NewRegulatory.vue b/code/web/regulatory-management-util/src/views/console/data/NewRegulatory.vue index 5620c1d..7b14fe3 100644 --- a/code/web/regulatory-management-util/src/views/console/data/NewRegulatory.vue +++ b/code/web/regulatory-management-util/src/views/console/data/NewRegulatory.vue @@ -205,7 +205,7 @@ Copyright © CPIC All rights reserved import {reactive, ref} from "vue"; import { type UploadProps, type UploadFile, type UploadFiles, ElMessage, ElMessageBox } from "element-plus"; import { type RegulatoryData, type RegulatoryFile} from "@/types/regulatory/regulatory.ts"; -import { addNewRegulatory, type AddNewRegulatoryResponse, type Render} from "@/utils/regulatory_utils.ts"; +import { addNewRegulatory, type AddNewRegulatoryResponse, type AddNewRegulatoryResponseRender} from "@/utils/regulatory_utils.ts"; import { type UploadedFile, type UploadFileResponse } from "@/types/upload_file.ts"; import {API_URL} from "@/utils/config.ts"; import { getFileType } from "@/utils/utils"; @@ -267,13 +267,6 @@ export default { const releaseYear = ref( null ); const comment = ref( null ); - - const render: Render = function ( response: AddNewRegulatoryResponse ) :void - { - // if ( response.success === true ) - // { } - }; - const headerCellStyle = reactive( { textAlign: "center", @@ -317,7 +310,7 @@ export default { const onPreviewUploadedFile = ( rowId: number ): void => { // ui.showPreviewDialog = true; - ui.fileURL = encodeURI( ui.newRegulatory.regulatory_files[rowId]?.file_url + "/" + ui.newRegulatory.regulatory_files[rowId]?.regulatory_file_name ); + ui.fileURL = ui.newRegulatory.regulatory_files[rowId]?.file_url + "/" + ui.newRegulatory.regulatory_files[rowId]?.regulatory_file_name; console.log( "完整路径:", ui.fileURL ); @@ -430,6 +423,12 @@ export default { ElMessage.error( "渲染文档出错!" ); }; + const render: AddNewRegulatoryResponseRender = function ( response: AddNewRegulatoryResponse ) :void + { + // if ( response.success === true ) + // { } + }; + /** * 创建新制度事件 */ @@ -474,7 +473,7 @@ export default { return; } - addNewRegulatory( ui.newRegulatory, ()=>{}); + addNewRegulatory( ui.newRegulatory, render ); }; return { @@ -488,6 +487,7 @@ export default { onDeleteUploadedFile, onPreviewUploadedFile, onCreateNewRegulatory, + render, onBeforeUpload, errorHandle, };