|
|
|
@ -659,6 +659,22 @@ export default { |
|
|
|
const file = event.target.files[0]; |
|
|
|
const file = event.target.files[0]; |
|
|
|
if (!file) return; |
|
|
|
if (!file) return; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 文件名校验 |
|
|
|
|
|
|
|
const validateResult = this.validateFileName(file.name); |
|
|
|
|
|
|
|
if (!validateResult.valid) { |
|
|
|
|
|
|
|
this.$modal.msgError(validateResult.message); |
|
|
|
|
|
|
|
event.target.value = ""; |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 文件大小校验(可选,根据需求启用) |
|
|
|
|
|
|
|
// const sizeResult = this.validateFileSize(file.size); |
|
|
|
|
|
|
|
// if (!sizeResult.valid) { |
|
|
|
|
|
|
|
// this.$modal.msgError(sizeResult.message); |
|
|
|
|
|
|
|
// event.target.value = ""; |
|
|
|
|
|
|
|
// return; |
|
|
|
|
|
|
|
// } |
|
|
|
|
|
|
|
|
|
|
|
this.currentUploadFile = file; |
|
|
|
this.currentUploadFile = file; |
|
|
|
this.uploadProgressDialogVisible = true; |
|
|
|
this.uploadProgressDialogVisible = true; |
|
|
|
this.uploadPercent = 0; |
|
|
|
this.uploadPercent = 0; |
|
|
|
@ -672,6 +688,47 @@ export default { |
|
|
|
// 清空文件输入 |
|
|
|
// 清空文件输入 |
|
|
|
event.target.value = ""; |
|
|
|
event.target.value = ""; |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
// 文件名验证 |
|
|
|
|
|
|
|
validateFileName(fileName) { |
|
|
|
|
|
|
|
// 1. 检查文件名是否为空 |
|
|
|
|
|
|
|
if (!fileName || fileName.trim() === "") { |
|
|
|
|
|
|
|
return { valid: false, message: "文件名不能为空" }; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 2. 检查文件名长度(不含扩展名最多20字符) |
|
|
|
|
|
|
|
const nameWithoutExt = fileName.replace(/\.[^/.]+$/, ""); |
|
|
|
|
|
|
|
if (nameWithoutExt.length > 20) { |
|
|
|
|
|
|
|
return { valid: false, message: "文件名(不含扩展名)不能超过20个字符" }; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 3. 检查是否以数字开头 |
|
|
|
|
|
|
|
if (/^\d/.test(nameWithoutExt)) { |
|
|
|
|
|
|
|
return { valid: false, message: "文件名不能以数字开头" }; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 4. 检查是否以特殊字符开头 |
|
|
|
|
|
|
|
const specialChars = /^[!@#$%^&*()_+\-=\[\]{}|;:,.<>?~`]/; |
|
|
|
|
|
|
|
if (specialChars.test(nameWithoutExt)) { |
|
|
|
|
|
|
|
return { valid: false, message: "文件名不能以特殊字符开头" }; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 5. 检查是否包含特殊字符(Windows文件名限制) |
|
|
|
|
|
|
|
const invalidChars = /[\\/:*?"<>|]/; |
|
|
|
|
|
|
|
if (invalidChars.test(fileName)) { |
|
|
|
|
|
|
|
return { valid: false, message: "文件名不能包含 \\ / : * ? \" < > | 等特殊字符" }; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return { valid: true, message: "" }; |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
// 文件大小验证(根据需求启用) |
|
|
|
|
|
|
|
validateFileSize(size) { |
|
|
|
|
|
|
|
// 例如:限制最大100MB |
|
|
|
|
|
|
|
const maxSize = 100 * 1024 * 1024; |
|
|
|
|
|
|
|
if (size > maxSize) { |
|
|
|
|
|
|
|
return { valid: false, message: `文件大小不能超过100MB,当前文件大小:${(size / (1024 * 1024)).toFixed(2)}MB` }; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return { valid: true, message: "" }; |
|
|
|
|
|
|
|
}, |
|
|
|
// 上传到 MinIO(支持 PDF 缩略图生成) |
|
|
|
// 上传到 MinIO(支持 PDF 缩略图生成) |
|
|
|
async uploadToMinio(file, recordId) { |
|
|
|
async uploadToMinio(file, recordId) { |
|
|
|
try { |
|
|
|
try { |
|
|
|
|