From 07429e42647c5991b26f2581911a373408062eab Mon Sep 17 00:00:00 2001 From: dshclm <3321914460@qq.com> Date: Wed, 4 Jun 2025 09:29:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=85=BC=E5=AE=B9=E4=BD=8E?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=B5=8F=E8=A7=88=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/newdev/abroad/editAbroad.html | 190 ++++++++++-------- .../system/newdev/onduty/editDuty.html | 6 +- 2 files changed, 104 insertions(+), 92 deletions(-) diff --git a/ruoyi-admin/src/main/resources/templates/system/newdev/abroad/editAbroad.html b/ruoyi-admin/src/main/resources/templates/system/newdev/abroad/editAbroad.html index 3bfff693..21985bf9 100644 --- a/ruoyi-admin/src/main/resources/templates/system/newdev/abroad/editAbroad.html +++ b/ruoyi-admin/src/main/resources/templates/system/newdev/abroad/editAbroad.html @@ -135,9 +135,9 @@
预览图 - - - + + +
@@ -461,7 +461,7 @@ selectedFiles: Array(6).fill(null), currentFileName: Array(6).fill(''), uploadProgress: Array(6).fill(0), - uploadedFiles: Array(6).fill([]).map(() => []), + uploadedFiles: Array(6).fill([]).map(function() { return []; }), previewModalVisible: false, previewingFile: {}, uploadSuccess: false, @@ -469,69 +469,72 @@ prefix: ctx + "system/abroadList", }, computed: { - previewUrl() { + previewUrl: function() { return this.selectedFile ? window.URL.createObjectURL(this.selectedFile) : ''; } }, methods: { - handleFileUpload(event) { - let file = event.target.files[0]; + handleFileUpload: function(event) { + var file = event.target.files[0]; if (file) { // 检查文件类型和大小 - let fileSize = file.size / 1024 / 1024; // MB + var fileSize = file.size / 1024 / 1024; // MB if (fileSize > 2) { this.$message.error('文件大小不能超过2MB'); return; } - let fileType = file.type; + var fileType = file.type; if (!fileType.startsWith('image/')) { this.$message.error('请上传图片文件'); return; } // 验证图片格式 - let validFormats = ['image/jpeg', 'image/png']; - if (!validFormats.includes(fileType)) { + var validFormats = ['image/jpeg', 'image/png']; + if (validFormats.indexOf(fileType) === -1) { this.$message.error('请上传JPG或PNG格式的图片'); return; } // 验证图片尺寸是否接近一寸照片 (2.5cm x 3.5cm, 约295x413像素) - let img = new Image(); + var img = new Image(); img.src = window.URL.createObjectURL(file); - img.onload = () => { - let width = img.naturalWidth; - let height = img.naturalHeight; - let ratio = width / height; + var self = this; + img.onload = function() { + var width = img.naturalWidth; + var height = img.naturalHeight; + var ratio = width / height; // 检查宽高比是否接近一寸照片的比例 (约0.714) if (Math.abs(ratio - 0.714) > 0.1) { - this.$message({ + self.$message({ message: '建议上传一寸照片尺寸 (约295x413像素)', type: 'warning' }); } - this.selectedFile = file; + self.selectedFile = file; }; - img.onerror = () => { - this.$message.error('无法加载图片,请重新选择'); + img.onerror = function() { + self.$message.error('无法加载图片,请重新选择'); }; } }, - clearFile() { + clearFile: function() { this.selectedFile = null; document.getElementById('photo').value = ''; }, // 文件上传处理 - handleFileSelection(index) { + handleFileSelection: function(index) { this.selectedFiles[index] = event.target.files[0]; if (this.selectedFiles[index]) { - let file = this.selectedFiles[index]; - let fileExtension = file.name.split('.').pop().toLowerCase(); + var file = this.selectedFiles[index]; + var fileExtension = file.name.split('.').pop().toLowerCase(); // 根据材料类型验证文件格式 - let validExtensions = this.materials[index].accept.split(',').map(ext => ext.trim().replace('.', '')); + var validExtensions = this.materials[index].accept.split(',').map(function(ext) { + return ext.trim().replace('.', ''); + }); - if (!validExtensions.includes(fileExtension)) { - this.$message.error(`请上传${this.materials[index].description.split(':')[1]}`); - document.getElementById(`fileUpload${index}`).value = ''; // 清空选择 + if (validExtensions.indexOf(fileExtension) === -1) { + this.$message.error('请上传' + this.materials[index].description.split(':')[1]); + document.getElementById('fileUpload' + index).value = ''; // 清空选择 return; } @@ -539,34 +542,35 @@ } }, - uploadFile(file, index) { + uploadFile: function(file, index) { this.currentFileName[index] = file.name; this.uploadProgress[index] = 0; - let formData = new FormData(); + var formData = new FormData(); formData.append('applyId', this.formData.applyId || ''); formData.append('filename', file.name); formData.append('fileCode', this.materials[index].code); formData.append('file', file); + var self = this; axios.post(ctx + 'system/file/upload', formData, { - onUploadProgress: (progressEvent) => { - this.uploadProgress[index] = Math.round((progressEvent.loaded * 100) / progressEvent.total); + onUploadProgress: function(progressEvent) { + self.uploadProgress[index] = Math.round((progressEvent.loaded * 100) / progressEvent.total); } }) - .then(response => { + .then(function(response) { if (response.data.code === web_status.SUCCESS) { // 显示上传成功提示 - this.uploadSuccess = true; - this.uploadSuccessMessage = `文件 "${file.name}" 上传成功`; + self.uploadSuccess = true; + self.uploadSuccessMessage = '文件 "' + file.name + '" 上传成功'; // 3秒后隐藏提示 - setTimeout(() => { - this.uploadSuccess = false; + setTimeout(function() { + self.uploadSuccess = false; }, 3000); // 更新文件列表 - let fileInfo = { + var fileInfo = { id: response.data.data.fileId, fileName: file.name, fileSize: file.size, @@ -574,66 +578,68 @@ fileUrl: response.data.data.filePath, uploadTime: new Date().toISOString() }; - this.$set(this.uploadedFiles, index, [...this.uploadedFiles[index], fileInfo]); + self.$set(self.uploadedFiles, index, self.uploadedFiles[index].concat(fileInfo)); // 重置选择框 - document.getElementById(`fileUpload${index}`).value = ''; + document.getElementById('fileUpload' + index).value = ''; } else { - this.$message.error(`上传失败: ${response.data.msg}`); + self.$message.error('上传失败: ' + response.data.msg); } }) - .catch(error => { + .catch(function(error) { console.error('上传错误:', error); - this.$message.error('上传过程中发生错误'); + self.$message.error('上传过程中发生错误'); }); }, - downloadFile(file, index) { + downloadFile: function(file, index) { // 直接通过接口下载 - axios.get(ctx + 'system/file/download',{ + var self = this; + axios.get(ctx + 'system/file/download', { params: { fileId: file.id }, responseType: 'blob', // 重要:指定响应类型为blob headers: { 'Content-Type': 'application/json', } }) - .then(response => { - let url = window.URL.createObjectURL(new Blob([response.data])); - let link = document.createElement('a'); + .then(function(response) { + var url = window.URL.createObjectURL(new Blob([response.data])); + var link = document.createElement('a'); link.href = url; link.setAttribute('download', file.fileName); document.body.appendChild(link); link.click(); document.body.removeChild(link); }) - .catch(error => { + .catch(function(error) { console.error('下载错误:', error); - this.$message.error('下载文件时出错'); + self.$message.error('下载文件时出错'); }); }, - deleteFile(file, materialIndex, fileIndex) { - this.$confirm(`确定要删除文件 "${file.fileName}" 吗?`, '提示', { + deleteFile: function(file, materialIndex, fileIndex) { + var self = this; + this.$confirm('确定要删除文件 "' + file.fileName + '" 吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' - }).then(() => { + }).then(function() { axios.get(ctx + 'system/file/delFile/' + file.id) - .then(response => { + .then(function(response) { if (response.data.code === web_status.SUCCESS) { - this.uploadedFiles[materialIndex].splice(fileIndex, 1); - this.$message.success('文件已成功删除'); + self.uploadedFiles[materialIndex].splice(fileIndex, 1); + self.$message.success('文件已成功删除'); } else { - this.$message.error(`删除失败: ${response.data.msg}`); + self.$message.error('删除失败: ' + response.data.msg); } }) - .catch(error => { + .catch(function(error) { console.error('删除错误:', error); - this.$message.error('删除文件时出错'); + self.$message.error('删除文件时出错'); }); - }).catch(() => { - this.$message({ + }).catch(function() { + self.$message({ type: 'info', message: '已取消删除' }); @@ -641,21 +647,22 @@ }, // 获取已上传文件 - getUploadedFiles() { + getUploadedFiles: function() { if (!this.formData.applyId) return; // 使用forEach确保每个请求有自己的作用域 - this.materials.forEach((material, index) => { + var self = this; + this.materials.forEach(function(material, index) { axios.get(ctx + 'system/file/getFileInfo', { params: { - applyId: this.formData.applyId, + applyId: self.formData.applyId, fileCode: material.code, } }) - .then(response => { + .then(function(response) { if (response.data.code === web_status.SUCCESS) { // 使用Vue.set确保响应式更新 - this.$set(this.uploadedFiles, index, response.data.data.map((file) => { + self.$set(self.uploadedFiles, index, response.data.data.map(function(file) { return { id: file.fileId, fileName: file.fileName, @@ -666,37 +673,37 @@ } })); } else { - console.error(`获取${material.name}文件列表失败:`, response.data.msg); - this.$message.error(`获取${material.name}已上传文件失败: ${response.data.msg}`); + console.error('获取' + material.name + '文件列表失败:', response.data.msg); + self.$message.error('获取' + material.name + '已上传文件失败: ' + response.data.msg); } }) - .catch(error => { - console.error(`获取${material.name}文件列表错误:`, error); - this.$message.error(`获取${material.name}已上传文件时出错`); + .catch(function(error) { + console.error('获取' + material.name + '文件列表错误:', error); + self.$message.error('获取' + material.name + '已上传文件时出错'); }); }); }, // 图片预览相关方法 - isImageFile(fileName) { - const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp','pdf']; - const extension = fileName.split('.').pop().toLowerCase(); - return imageExtensions.includes(extension); + isImageFile: function(fileName) { + var imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'pdf']; + var extension = fileName.split('.').pop().toLowerCase(); + return imageExtensions.indexOf(extension) !== -1; }, - getFileIcon(fileName) { - const extension = fileName.split('.').pop().toLowerCase(); + getFileIcon: function(fileName) { + var extension = fileName.split('.').pop().toLowerCase(); if (extension === 'pdf') return 'fa-solid fa-file-pdf text-red-500'; if (['doc', 'docx'].includes(extension)) return 'fa-solid fa-file-word text-blue-500'; if (['jpg', 'jpeg', 'png', 'gif', 'bmp'].includes(extension)) return 'fa-solid fa-file-image text-green-500'; return 'fa-solid fa-file text-gray-500'; }, - previewFile(file) { - let extension = file.fileName.split('.').pop().toLowerCase(); + previewFile: function(file) { + var extension = file.fileName.split('.').pop().toLowerCase(); if (extension === 'pdf') { // 使用preventDefault阻止默认行为,避免影响当前页面状态 - let event = window.event; + var event = window.event; if (event) { event.preventDefault(); } @@ -707,12 +714,12 @@ this.previewModalVisible = true; }, - closePreviewModal() { + closePreviewModal: function() { this.previewModalVisible = false; this.previewingFile = {}; }, - getPreviewUrl(file) { + getPreviewUrl: function(file) { // 如果是图片,直接返回URL if (this.isImageFile(file.fileName)) { return ctx + 'system/file/download?fileId=' + file.id; @@ -720,18 +727,23 @@ return ''; } }, - mounted() { + mounted: function() { // 从后端获取转义后的 JSON 字符串 - if ([[${applyInfoList}]]){ - this.formData = {...[[${applyInfoList}]]} + if ([[${applyInfoList}]]) { + this.formData = JSON.parse(JSON.stringify([[${applyInfoList}]])); // 获取图片并转换为 Blob if (this.formData.photoUrl) { + var self = this; fetch(this.formData.photoUrl) - .then(response => response.blob()) - .then(blob => { - this.selectedFile = blob; + .then(function(response) { + return response.blob(); + }) + .then(function(blob) { + self.selectedFile = blob; }) - .catch(error => console.error('处理图片时出错:', error)); + .catch(function(error) { + console.error('处理图片时出错:', error); + }); } } diff --git a/ruoyi-admin/src/main/resources/templates/system/newdev/onduty/editDuty.html b/ruoyi-admin/src/main/resources/templates/system/newdev/onduty/editDuty.html index 964d9e9e..a71bf1ab 100644 --- a/ruoyi-admin/src/main/resources/templates/system/newdev/onduty/editDuty.html +++ b/ruoyi-admin/src/main/resources/templates/system/newdev/onduty/editDuty.html @@ -139,9 +139,9 @@
预览图 - + + +