From 3c8bb51c41fc168656461faccbcbae81fad67ad7 Mon Sep 17 00:00:00 2001 From: Kane Wang Date: Mon, 9 Feb 2026 00:42:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E8=BF=9B=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/cpic/xim/utils/utils.java | 65 +++++++++++++++++++ .../package-lock.json | 18 ++++- .../src/utils/regulatory_utils.ts | 4 +- .../src/utils/utils.ts | 33 +++++++++- .../src/views/console/data/NewRegulatory.vue | 17 +++-- 5 files changed, 129 insertions(+), 8 deletions(-) create mode 100644 code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/utils/utils.java diff --git a/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/utils/utils.java b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/utils/utils.java new file mode 100644 index 0000000..3f9f437 --- /dev/null +++ b/code/backend/RegulatoryManagementBackend/src/main/java/com/cpic/xim/utils/utils.java @@ -0,0 +1,65 @@ +/** + * @Author: Kane Wang + * @Date: 2026-02-07 21:36:35 + * @LastEditors: Kane Wang + * @LastModified: 2026-02-07 21:36:35 + * @FilePath: src/main/java/com/cpic/xim/utils/utils.java + * @Description: + * + * Copyright (c) 2025 by Kane All rights reserved + */ +package com.cpic.xim.utils; + +public class utils +{ + public static String encodeURL( String urlString ) + { + StringBuilder encodedURLString = new StringBuilder( urlString.length() * 3 ); + char[] charArray = urlString.toCharArray(); + + for ( char c : charArray ) + { + switch ( c ) + { + case '%': + encodedURLString.append( PERCENT ); + break; + case ' ': + encodedURLString.append( SPACING ); + break; + case '+': + encodedURLString.append( PLUS ); + break; + case '/': + encodedURLString.append( FORWARD_SLASH ); + break; + case '?': + encodedURLString.append( QUESTION_MASK ); + break; + case '&': + encodedURLString.append( AMPERSAND ); + break; + case '#': + encodedURLString.append( SHARP ); + break; + case '=': + encodedURLString.append( PLUS ); + break; + default: + encodedURLString.append( c ); + } + } + + return encodedURLString.toString(); + } + + static final String SHARP = "%23"; + static final String PLUS = "%2B"; + static final String FORWARD_SLASH = "%2F"; + static final String QUESTION_MASK = "%3F"; + static final String SPACING = "%20"; + static final String EQUAL = "%3D"; + static final String PERCENT = "%25"; + static final String AMPERSAND = "%26"; + +} diff --git a/code/web/regulatory-management-util/package-lock.json b/code/web/regulatory-management-util/package-lock.json index 807f4f5..63909ca 100644 --- a/code/web/regulatory-management-util/package-lock.json +++ b/code/web/regulatory-management-util/package-lock.json @@ -1983,6 +1983,7 @@ "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/lodash": "*" } @@ -1993,6 +1994,7 @@ "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -2039,6 +2041,7 @@ "integrity": "sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.54.0", "@typescript-eslint/types": "8.54.0", @@ -2576,6 +2579,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3116,6 +3120,7 @@ "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3796,6 +3801,7 @@ "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", "dev": true, "license": "MIT", + "peer": true, "bin": { "jiti": "lib/jiti-cli.mjs" } @@ -3920,14 +3926,16 @@ "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.23.tgz", "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash-es": { "version": "4.17.23", "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.23.tgz", "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/lodash-unified": { "version": "1.0.3", @@ -4499,6 +4507,7 @@ "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -4685,6 +4694,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -4793,6 +4803,7 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -4874,6 +4885,7 @@ "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.27.tgz", "integrity": "sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==", "license": "MIT", + "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.27", "@vue/compiler-sfc": "3.5.27", @@ -4897,6 +4909,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", "vue-demi-switch": "bin/vue-demi-switch.js" @@ -4923,6 +4936,7 @@ "integrity": "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "debug": "^4.4.0", "eslint-scope": "^8.2.0", 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 144dcb3..1ce4406 100644 --- a/code/web/regulatory-management-util/src/utils/regulatory_utils.ts +++ b/code/web/regulatory-management-util/src/utils/regulatory_utils.ts @@ -21,6 +21,7 @@ interface AddNewRegulatoryResponse interface Render { ( resonse: AddNewRegulatoryResponse ) :void, } +type CallBackRender = ( response: AddNewRegulatoryResponse ) => void; /** * * @param regulatory RegulatoryData类型制度对象,用于发送请求。 @@ -68,5 +69,6 @@ function addNewRegulatory( regulatory: RegulatoryData, render: Render ): void export { addNewRegulatory, type AddNewRegulatoryResponse, - type Render + type Render, + type CallBackRender }; \ No newline at end of file diff --git a/code/web/regulatory-management-util/src/utils/utils.ts b/code/web/regulatory-management-util/src/utils/utils.ts index 233d6e3..a57f23d 100644 --- a/code/web/regulatory-management-util/src/utils/utils.ts +++ b/code/web/regulatory-management-util/src/utils/utils.ts @@ -53,4 +53,35 @@ function getFileType( filePath: string ): string return type; } -export { getFileType }; \ No newline at end of file +/** + * 检查文件名中是否有无法使用的字符。 + * @param filename 文件名字符串。 + * @returns 检查结果。true 无问题;false表示文件名含有不合适的字符。 + */ +function checkFileName( filename: string ): boolean +{ + let result = true; + + for ( const c of filename ) + { + switch ( c ) + { + case "%": + case " ": + case "+": + case "/": + case "?": + case "&": + case "#": + case "=": + result = false; + break; + default: + result = true; + } + } + + return result; +} + +export { getFileType, checkFileName }; \ 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 152cd72..ce4e2ba 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 @@ -137,6 +137,7 @@ Copyright © CPIC All rights reserved :show-file-list="false" :data="ui.uploadParameters" :on-success="onUploadSuccess" + :before-upload="onBeforeUpload" > @@ -304,14 +305,12 @@ export default { ui.newRegulatory.regulatory_files?.splice( rowId, 1 ); }) .catch(()=>{}); - - }; const onPreviewUploadedFile = ( rowId: number ): void => { // ui.showPreviewDialog = true; - ui.fileURL = ui.newRegulatory.regulatory_files[rowId]?.file_url + "/" + ui.newRegulatory.regulatory_files[rowId]?.regulatory_file_name; + ui.fileURL = encodeURI( ui.newRegulatory.regulatory_files[rowId]?.file_url + "/" + ui.newRegulatory.regulatory_files[rowId]?.regulatory_file_name ); console.log( "完整路径:", ui.fileURL ); @@ -356,7 +355,7 @@ export default { */ const onUploadSuccess: UploadProps["onSuccess"] = ( response: UploadFileResponse, uploadFile: UploadFile, uploadFiles: UploadFiles ): void => { - console.log( `上传制度文件响应:${response}` ); + console.log( "上传制度文件响应:", response.fileList ); console.log( `上传文件:${uploadFile}` ); console.log( `上传多文件:${uploadFiles}` ); @@ -410,6 +409,15 @@ export default { } }; + const onBeforeUpload = ( uploadFile: UploadFile ): boolean => + { + let result = true; + + console.log( "上传的文件名", uploadFile.name ); + + return result; + }; + const errorHandle = ()=> { ElMessage.error( "渲染文档出错!" ); @@ -442,6 +450,7 @@ export default { onDeleteUploadedFile, onPreviewUploadedFile, onCreateNewRegulatory, + onBeforeUpload, errorHandle, }; },