From 59b14f4026e5f09cd8f154060ed08646c6455875 Mon Sep 17 00:00:00 2001 From: dshclm <3321914460@qq.com> Date: Tue, 27 May 2025 15:32:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pdf/controller/LeavePdfController.java | 65 ++ .../controller/pdf/dto/PdfFormRequest.java | 13 - .../pdf/service/LeavePdfService.java | 177 ++++ .../resources/static/file/pdf/smrylzlgspb.pdf | Bin 0 -> 65654 bytes .../system/newdev/abroad/editAbroad.html | 11 +- .../system/newdev/apply/editFile.html | 9 +- .../system/newdev/audit/editAudit.html | 7 +- .../system/newdev/leave/leaveFile.html | 818 ++++++++++++++++++ .../system/newdev/leaveAudit/leaveAudit.html | 10 + .../system/newdev/onduty/editDuty.html | 9 +- .../system/newdev/person/detail.html | 7 +- .../system/newdev/promise/editPromise.html | 9 +- .../system/newdev/train/training.html | 9 +- 13 files changed, 1118 insertions(+), 26 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/pdf/controller/LeavePdfController.java delete mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/pdf/dto/PdfFormRequest.java create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/controller/pdf/service/LeavePdfService.java create mode 100644 ruoyi-admin/src/main/resources/static/file/pdf/smrylzlgspb.pdf create mode 100644 ruoyi-admin/src/main/resources/templates/system/newdev/leave/leaveFile.html create mode 100644 ruoyi-admin/src/main/resources/templates/system/newdev/leaveAudit/leaveAudit.html diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/pdf/controller/LeavePdfController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/pdf/controller/LeavePdfController.java new file mode 100644 index 00000000..0d0dd110 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/pdf/controller/LeavePdfController.java @@ -0,0 +1,65 @@ +package com.ruoyi.web.controller.pdf.controller; + + +import com.ruoyi.web.controller.pdf.service.LeavePdfService; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.io.ByteArrayOutputStream; +import java.util.HashMap; +import java.util.Map; + +@RestController +@RequestMapping("/api/LeavePdf") +public class LeavePdfController { + + private final LeavePdfService LeavePdfService; + + public LeavePdfController(LeavePdfService LeavePdfService) { + this.LeavePdfService = LeavePdfService; + } + + @PostMapping(value = "/LeaveFill", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public ResponseEntity<byte[]> fillPdfForm( + @RequestParam(required = false) String name, + @RequestParam(required = false) String political, + @RequestParam(required = false) String phone, + @RequestParam(required = false) String positionCapacity, + @RequestParam(required = false) String smPost, + @RequestParam(required = false) String smGrade, + @RequestParam(required = false) MultipartFile photo) throws Exception { + + // 构建表单数据 + Map<String, String> formData = new HashMap<>(); + if (name != null) formData.put("姓名", name); + if (political != null) formData.put("政治面貌", political); + if (phone != null) formData.put("联系电话", phone); + if (positionCapacity != null) formData.put("职务职级", positionCapacity); + if (smPost != null) formData.put("涉密岗位", smPost); + if (smGrade != null) formData.put("涉密等级", smGrade); + + // 构建图片数据 + Map<String, MultipartFile> imageData = new HashMap<>(); + if (photo != null && !photo.isEmpty()) { + imageData.put("照片", photo); + } + + // 生成PDF + ByteArrayOutputStream outputStream = LeavePdfService.fillForm(formData, imageData); + + // 返回PDF文件 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_PDF); + headers.setContentDispositionFormData("attachment", "output.pdf"); + + return ResponseEntity.ok() + .headers(headers) + .body(outputStream.toByteArray()); + } +} \ No newline at end of file diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/pdf/dto/PdfFormRequest.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/pdf/dto/PdfFormRequest.java deleted file mode 100644 index 5b0457e7..00000000 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/pdf/dto/PdfFormRequest.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.ruoyi.web.controller.pdf.dto; - -import lombok.Data; -import org.springframework.web.multipart.MultipartFile; - -import java.util.HashMap; -import java.util.Map; - -@Data -public class PdfFormRequest { - private Map<String, String> formData = new HashMap<>(); - private Map<String, MultipartFile> imageData = new HashMap<>(); -} \ No newline at end of file diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/pdf/service/LeavePdfService.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/pdf/service/LeavePdfService.java new file mode 100644 index 00000000..0377c8b7 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/pdf/service/LeavePdfService.java @@ -0,0 +1,177 @@ +package com.ruoyi.web.controller.pdf.service; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.font.PDType0Font; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDField; +import org.apache.pdfbox.pdmodel.interactive.form.PDTextField; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.util.Map; + +@Service +public class LeavePdfService { + + // 定义最大和最小字体大小,用于动态调整 + private static final float MAX_FONT_SIZE = 14; + private static final float MIN_FONT_SIZE = 8; + // 需要特殊处理的字段列表 + private static final String[] AUTO_WRAP_FIELDS = { + + }; + + public ByteArrayOutputStream fillForm(Map<String, String> formData, + Map<String, MultipartFile> imageData) throws IOException { + // 禁用系统字体扫描,只使用自定义字体 + System.setProperty("org.apache.pdfbox.rendering.UseSystemFonts", "false"); + // 提高字体解析警告的日志级别 + System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog"); + System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.fontbox", "ERROR"); + + PDDocument document = null; + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + + try { + // 加载模板PDF + ClassLoader classLoader = getClass().getClassLoader(); + File templateFile = new File(classLoader.getResource("static/file/pdf/smrylzlgspb.pdf").getFile()); + document = PDDocument.load(templateFile); + PDAcroForm acroForm = document.getDocumentCatalog().getAcroForm(); + + if (acroForm == null) { + throw new IOException("PDF不包含表单域"); + } + + // 加载中文字体 + PDType0Font font = PDType0Font.load(document, + new File(classLoader.getResource("static/file/pdf/STSONG.TTF").getFile())); + + // 设置需要更新表单外观 + acroForm.setNeedAppearances(true); + + // 填充文本表单 + for (Map.Entry<String, String> entry : formData.entrySet()) { + String fieldName = entry.getKey(); + String fieldValue = entry.getValue(); + PDField field = acroForm.getField(fieldName); + if (field != null) { + // 设置表单域为不可编辑 + field.setReadOnly(true); + // 设置表单域不高亮显示 +// for (PDAnnotationWidget widget : field.getWidgets()) { +// widget.setHighlightMode(PDAnnotationWidget.HIGHLIGHT_MODE_NONE); +// } + if (fieldValue != null &&!fieldValue.isEmpty()) { + field.setValue(fieldValue); + if (field instanceof PDTextField) { + PDTextField textField = (PDTextField) field; + if (isAutoWrapField(fieldName)) { + textField.setMultiline(true); + float fontSize = calculateFontSize(fieldValue); + textField.setDefaultAppearance("/" + font.getName() + " " + fontSize + " Tf 0 g"); + } else { + textField.setDefaultAppearance("/" + font.getName() + " 12 Tf 0 g"); + } + } + } else { + // 无内容时,也设置默认外观 + if (field instanceof PDTextField) { + ((PDTextField) field).setDefaultAppearance("/" + font.getName() + " 12 Tf 0 g"); + } + } + } + } + + // 插入图片 + insertImages(document, acroForm, imageData); + + // 保存到输出流 + document.save(outputStream); + + } catch (Exception e) { + e.printStackTrace(); // 打印异常信息,方便调试 + throw new IOException("处理PDF时出错", e); + } finally { + if (document != null) { + document.close(); + } + } + + return outputStream; + } + + private void insertImages(PDDocument document, PDAcroForm acroForm, + Map<String, MultipartFile> imageData) throws IOException { + for (Map.Entry<String, MultipartFile> entry : imageData.entrySet()) { + String fieldName = entry.getKey(); + MultipartFile file = entry.getValue(); + + PDField refField = acroForm.getField(fieldName); + // 设置表单域为不可编辑 + if (refField != null) { + refField.setReadOnly(true); + } + if (refField != null &&!file.isEmpty()) { + // 假设图片插入到第一页,你可以根据实际情况修改 + PDPage page = document.getPage(0); + + // 手动指定图片插入位置 + float x = 440; // 可以根据实际情况调整2 + float y = 650; // 可以根据实际情况调整 + + PDImageXObject image = null; + PDPageContentStream contentStream = null; + try { + // 从上传的文件创建图片对象 + image = PDImageXObject.createFromByteArray(document, file.getBytes(), file.getOriginalFilename()); + + // 计算图片尺寸(按比例缩放) + float imageWidth = image.getWidth(); + float imageHeight = image.getHeight(); + float maxWidth = 100; + float maxHeight = 100; + + float scale = Math.min(maxWidth / imageWidth, maxHeight / imageHeight); + imageWidth *= scale; + imageHeight *= scale; + + // 在指定位置绘制图片 + contentStream = new PDPageContentStream( + document, page, PDPageContentStream.AppendMode.APPEND, true); + contentStream.drawImage(image, x, y, imageWidth, imageHeight); + } finally { + if (contentStream != null) { + contentStream.close(); + } + } + } + } + } + + // 判断是否是需要自动换行的字段 + private boolean isAutoWrapField(String fieldName) { + for (String autoWrapField : AUTO_WRAP_FIELDS) { + if (autoWrapField.equals(fieldName)) { + return true; + } + } + return false; + } + + // 计算适应字段的字体大小(仅用于需要特殊处理的字段) + private float calculateFontSize(String fieldValue) { + int textLength = fieldValue.length(); + float fontSize = 10; + if (textLength > 30) { + fontSize = Math.max(MIN_FONT_SIZE, 10 - ((textLength - 30) / 5)); + } + return fontSize; + } +} \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/static/file/pdf/smrylzlgspb.pdf b/ruoyi-admin/src/main/resources/static/file/pdf/smrylzlgspb.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fa88de72bb9a892f24ce14aca94140581f367b1c GIT binary patch literal 65654 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®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≥Wh*Rh}1`dez>4LfaD#x=ai)Fw)1 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 H62t!kqE)S& literal 0 HcmV?d00001 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 868c6a4a..3bfff693 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 @@ -571,10 +571,10 @@ fileName: file.name, fileSize: file.size, fileType: file.type, - fileUrl: file.filePath, + fileUrl: response.data.data.filePath, uploadTime: new Date().toISOString() }; - this.uploadedFiles[index].push(fileInfo); + this.$set(this.uploadedFiles, index, [...this.uploadedFiles[index], fileInfo]); // 重置选择框 document.getElementById(`fileUpload${index}`).value = ''; @@ -695,7 +695,12 @@ previewFile(file) { let extension = file.fileName.split('.').pop().toLowerCase(); if (extension === 'pdf') { - window.open(file.fileUrl); + // 使用preventDefault阻止默认行为,避免影响当前页面状态 + let event = window.event; + if (event) { + event.preventDefault(); + } + window.open(file.fileUrl, '_blank'); return } this.previewingFile = file; diff --git a/ruoyi-admin/src/main/resources/templates/system/newdev/apply/editFile.html b/ruoyi-admin/src/main/resources/templates/system/newdev/apply/editFile.html index 2f325358..339999c2 100644 --- a/ruoyi-admin/src/main/resources/templates/system/newdev/apply/editFile.html +++ b/ruoyi-admin/src/main/resources/templates/system/newdev/apply/editFile.html @@ -609,7 +609,7 @@ fileName: file.name, fileSize: file.size, fileType: file.type, - fileUrl: file.filePath, + fileUrl: response.data.data.filePath, uploadTime: new Date().toISOString() }; this.uploadedFiles.push(fileInfo); @@ -737,7 +737,12 @@ previewFile(file) { let extension = file.fileName.split('.').pop().toLowerCase(); if (extension === 'pdf') { - window.open(file.fileUrl); + // 使用preventDefault阻止默认行为,避免影响当前页面状态 + let event = window.event; + if (event) { + event.preventDefault(); + } + window.open(file.fileUrl, '_blank'); return } this.previewingFile = file; diff --git a/ruoyi-admin/src/main/resources/templates/system/newdev/audit/editAudit.html b/ruoyi-admin/src/main/resources/templates/system/newdev/audit/editAudit.html index a1b70445..0cfb05a1 100644 --- a/ruoyi-admin/src/main/resources/templates/system/newdev/audit/editAudit.html +++ b/ruoyi-admin/src/main/resources/templates/system/newdev/audit/editAudit.html @@ -512,7 +512,12 @@ previewFile(file) { let extension = file.fileName.split('.').pop().toLowerCase(); if (extension === 'pdf') { - window.open(file.fileUrl); + // 使用preventDefault阻止默认行为,避免影响当前页面状态 + let event = window.event; + if (event) { + event.preventDefault(); + } + window.open(file.fileUrl, '_blank'); return } this.previewingFile = file; diff --git a/ruoyi-admin/src/main/resources/templates/system/newdev/leave/leaveFile.html b/ruoyi-admin/src/main/resources/templates/system/newdev/leave/leaveFile.html new file mode 100644 index 00000000..fb4de920 --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/system/newdev/leave/leaveFile.html @@ -0,0 +1,818 @@ +<!DOCTYPE html> +<html lang="zh" xmlns:th="http://www.thymeleaf.org"> +<head> + <th:block th:include="include :: header('材料上传')"/> + <th:block th:include="include :: select2-css"/> + <th:block th:include="include :: jasny-bootstrap-css"/> + <th:block th:include="include :: element-css"/> + <link href="/file/pdf/test.css" rel="stylesheet"> + <script src="/file/pdf/tailwindcss.js"></script> + <!-- Tailwind配置 --> + <script> + tailwind.config = { + theme: { + extend: { + colors: { + primary: '#3b82f6', + secondary: '#64748b', + accent: '#0ea5e9', + neutral: '#f1f5f9', + 'neutral-dark': '#334155', + }, + fontFamily: { + sans: ['Inter', 'system-ui', 'sans-serif'], + }, + } + } + } + </script> + + <style type="text/tailwindcss"> + @layer utilities { + .content-auto { + content-visibility: auto; + } + .shadow-soft { + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); + } + .transition-custom { + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + } + } + .text-sm { + font-size: 1.4rem; + } + .text-base { + font-size: 1.4rem; + } + .text-xs { + font-size: 0.85rem; + } + .py-2 { + padding-top: 0.8rem; + padding-bottom: 0.8rem; + } + .space-y-3{ + margin-bottom: 1.5rem; + } + </style> +</head> +<body class="bg-gray-50 font-sans"> +<div class="main-content min-h-screen flex flex-col" id="app"> + <main class="flex-grow container mx-auto px-4 py-8" style="max-width: 100%;"> + <div class="max-w-10xl mx-auto" style="width: 100%;"> + <div class="bg-white rounded-xl shadow-soft p-6 mb-8 scale-hover"> + <form class="form-horizontal space-y-6" id="form-apply-edit" th:object="${applyInfoList}" @submit.prevent="submitForm"> + <input name="applyId" type="hidden" th:field="*{applyId}"/> + <h4 class="form-header h4">基本信息</h4> + <!-- 文本字段 --> + <div class="grid md:grid-cols-3 gap-6"> + <!-- 第一行前两列:姓名、性别 --> + <div class="md:col-span-1 space-y-3"> + <!-- 姓名 --> + <div class="space-y-3"> + <label for="name" class="block text-sm font-medium text-gray-700">姓名</label> + <div class="relative"> + <span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500"> + <i class="fa-solid fa-user"></i> + </span> + <input disabled type="text" id="name" v-model="formData.name" class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg" placeholder="请输入姓名"> + </div> + </div> + + <!-- 性别 --> + <div class="space-y-3"> + <label for="sex" class="block text-sm font-medium text-gray-700">性别</label> + <div class="relative"> + <span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500"> + <i class="fa-solid fa-venus-mars"></i> + </span> + <input disabled type="text" id="sex" v-model="formData.sex" class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg" placeholder="请输入性别"> + </div> + </div> + </div> + <!-- 第二行前两列:国籍、曾用名 --> + <div class="md:col-span-1 space-y-3"> + <!-- 国籍 --> + <div class="space-y-3"> + <label for="nationa" class="block text-sm font-medium text-gray-700">国籍</label> + <div class="relative"> + <span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500"> + <i class="fa-solid fa-globe"></i> + </span> + <input disabled type="text" id="nationa" v-model="formData.nationa" class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg" placeholder="请输入国籍"> + </div> + </div> + + <!-- 曾用名 --> + <div class="space-y-3"> + <label for="formerName" class="block text-sm font-medium text-gray-700">曾用名</label> + <div class="relative"> + <span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500"> + <i class="fa-solid fa-user-tag"></i> + </span> + <input disabled type="text" id="formerName" v-model="formData.formerName" class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg" placeholder="请输入曾用名"> + </div> + </div> + </div> + <!-- 第一行第三列:图片上传区域(固定位置,跨两行) --> + <div class="md:col-span-1 md:row-span-2 space-y-3 relative"> + <label class="block text-sm font-medium text-gray-700">一寸照片</label> + <div class="mt-1 h-64 border-2 border-gray-300 rounded-lg shadow-soft transition-all duration-200" style="width: 141px;height: 195px"> + <!-- 上传区域(未选中时显示) --> + <div v-if="!selectedFile" class="h-full flex justify-center items-center border-dashed cursor-pointer hover:border-primary"> + <div class="text-center"> + <i class="fa-solid fa-cloud-upload text-4xl text-gray-400 mb-2"></i> + <label for="photo" class="cursor-pointer bg-white rounded-md font-medium text-primary hover:text-primary/80"> + <span>上传照片</span> + <input disabled id="photo" name="photo" type="file" accept="image/jpeg,image/png" class="sr-only" @change="handleFileUpload"> + </label> + <p class="text-xs text-gray-500"> + JPG, PNG (最大 2MB) + </p> + </div> + </div> + <!-- 预览区域(选中后显示) --> + <div v-else class="h-full flex flex-col items-center justify-center p-3"> + <img :src="previewUrl" alt="预览图" class="max-h-full max-w-full object-cover rounded-lg mb-2" style="max-height: 200px;"> + <!-- <button type="button" @click="clearFile" class="text-xs text-red-500 hover:text-red-700">--> + <!-- <i class="fa-solid fa-times-circle mr-1"></i> 移除--> + <!-- </button>--> + </div> + </div> + </div> + <div class="space-y-3"> + <label for="nationality" class="block text-sm font-medium text-gray-700">民族</label> + <div class="relative"> + <span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500"> + <i class="fa-solid fa-people-group"></i> + </span> + <input disabled type="text" id="nationality" v-model="formData.nationality" + class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200" + placeholder="请输入民族"> + </div> + </div> + <div class="space-y-3"> + <label for="maritalStatus" class="block text-sm font-medium text-gray-700">婚姻状况</label> + <div class="relative"> + <span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500"> + <i class="fa-solid fa-ring"></i> + </span> + <input disabled type="text" id="maritalStatus" v-model="formData.maritalStatus" + class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200" + placeholder="请输入婚姻状况"> + + </div> + </div> + <div class="space-y-3"> + <label for="political" class="block text-sm font-medium text-gray-700">政治面貌</label> + <div class="relative"> + <span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500"> + <i class="fa-solid fa-user-tie"></i> + </span> + <input disabled type="text" id="political" v-model="formData.political" + class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200" + placeholder="请输入政治面貌"> + </div> + </div> + <div class="space-y-3"> + <label for="phone" class="block text-sm font-medium text-gray-700">联系方式</label> + <div class="relative"> + <span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500"> + <i class="fa-solid fa-phone"></i> + </span> + <input disabled type="text" id="phone" v-model="formData.phone" + class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200" + placeholder="请输入联系方式"> + </div> + </div> + <div class="space-y-3"> + <label for="cerno" class="block text-sm font-medium text-gray-700">身份证号</label> + <div class="relative"> + <span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500"> + <i class="fa-solid fa-id-card"></i> + </span> + <input disabled type="text" id="cerno" v-model="formData.cerno" + class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200" + placeholder="请输入身份证号"> + </div> + </div> + <div class="space-y-3"> + <label for="address" class="block text-sm font-medium text-gray-700">户籍地址</label> + <div class="relative"> + <span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500"> + <i class="fa-solid fa-house-chimney"></i> + </span> + <input disabled type="text" id="address" v-model="formData.address" + class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200" + placeholder="请输入户籍地址"> + </div> + </div> + <div class="space-y-3"> + <label for="registeredAuthority" class="block text-sm font-medium text-gray-700">户籍地公安机关</label> + <div class="relative"> + <span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500"> + <i class="fa-solid fa-badge-shield"></i> + </span> + <input disabled type="text" id="registeredAuthority" v-model="formData.registeredAuthority" + class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200" + placeholder="请输入户籍地公安机关"> + </div> + </div> + <div class="space-y-3"> + <label for="permanentAddress" class="block text-sm font-medium text-gray-700">常住地址</label> + <div class="relative"> + <span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500"> + <i class="fa-solid fa-house"></i> + </span> + <input disabled type="text" id="permanentAddress" v-model="formData.permanentAddress" + class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200" + placeholder="请输入常住地址"> + </div> + </div> + <div class="space-y-3"> + <label for="residentBureau" class="block text-sm font-medium text-gray-700">常住地公安机关</label> + <div class="relative"> + <span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500"> + <i class="fa-solid fa-badge-shield"></i> + </span> + <input disabled type="text" id="residentBureau" v-model="formData.residentBureau" + class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200" + placeholder="请输入常住地公安机关"> + </div> + </div> + <div class="space-y-3"> + <label for="positionCapacity" class="block text-sm font-medium text-gray-700">单位及职务职称</label> + <div class="relative"> + <span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500"> + <i class="fa-solid fa-building-user"></i> + </span> + <input disabled type="text" id="positionCapacity" v-model="formData.positionCapacity" + class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200" + placeholder="请输入单位及职务职称"> + </div> + </div> + <div class="space-y-3"> + <label for="smPost" class="block text-sm font-medium text-gray-700">已(拟)任涉密岗位</label> + <div class="relative"> + <span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500"> + <i class="fa-solid fa-shield-halved"></i> + </span> + <input disabled type="text" id="smPost" v-model="formData.smPost" + class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200" + placeholder="请输入已(拟)任涉密岗位"> + </div> + </div> + <div class="space-y-3"> + <label for="smGrade" class="block text-sm font-medium text-gray-700">涉密等级</label> + <div class="relative"> + <span class="absolute inset-y-0 left-0 flex items-center pl-3 text-gray-500"> + <i class="fa-solid fa-lock"></i> + </span> + <input disabled type="text" id="smGrade" v-model="formData.smGrade" + class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-primary/50 focus:border-primary transition-colors duration-200" + placeholder="请输入涉密等级"> + </div> + </div> + </div> + <div class="flex items-center justify-between mb-4"> + <button type="submit" class="group relative w-full max-w-xs flex justify-center py-3 px-6 border border-transparent text-base font-medium rounded-lg text-white bg-primary hover:bg-primary/90 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition-all duration-200"> + <span class="absolute left-0 inset-y-0 flex items-center pl-3" style="margin-right: 5px;"> + <i class="fa-solid fa-file-pdf text-white transform group-hover:translate-x-0.5 transition-transform duration-200"></i> + </span> + 生成离职离岗审批表 + </button> + </div> + <h4 class="form-header h4">材料上传</h4> + <!-- 材料上传区域 - 使用循环生成 --> + <div class="mt-6" style=" display: flex;flex-wrap: wrap;justify-content: space-around;"> + <div v-for="(material, index) in materials" :key="index" class="border border-gray-200 rounded-lg p-4 mb-6" style="width: 50%;"> + <div class="flex items-center justify-between mb-3"> + <span class="text-sm text-gray-600">{{ material.description }}</span> + <div class="relative"> + <label :for="'fileUpload' + index" class="inline-flex items-center px-3 py-1.5 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-primary hover:bg-primary/90 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary cursor-pointer transition-colors duration-200"> + <i class="fa-solid fa-upload mr-2"></i> 选择文件 + <input :id="'fileUpload' + index" type="file" class="sr-only" :accept="material.accept" @change="handleFileSelection(index)"> + </label> + <a v-if="material.code ==='bm_user_lpromise_012'" :href="material.templateUrl" :download="material.downloadName" class="inline-flex items-center px-3 py-1.5 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-primary hover:bg-primary/90 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition-colors duration-200"> + <i class="fa-solid fa-download mr-1"></i> 下载模版 + </a> + </div> + </div> + + <!-- 上传进度条 --> + <div v-if="uploadProgress[index] > 0 && uploadProgress[index] < 100" class="mb-3"> + <div class="flex justify-between text-sm mb-1"> + <span class="text-gray-700">上传中: {{ currentFileName[index] }}</span> + <span class="text-gray-500">{{ uploadProgress[index] }}%</span> + </div> + <div class="w-full bg-gray-200 rounded-full h-2"> + <div class="bg-primary h-2 rounded-full" :style="{ width: uploadProgress[index] + '%' }"></div> + </div> + </div> + + <!-- 文件列表 --> + <div class="mt-3"> + <div v-if="uploadedFiles[index].length === 0" class="py-6 text-center border-2 border-dashed border-gray-300 rounded-lg"> + <i class="fa-solid fa-cloud-upload-alt text-3xl text-gray-400 mb-2"></i> + <p class="text-gray-500">未上传文件</p> + </div> + <div v-else class="space-y-2"> + <div v-for="(file, fileIndex) in uploadedFiles[index]" :key="fileIndex" class="flex items-center p-2 bg-gray-50 rounded-lg hover:bg-gray-100 transition-colors duration-200"> + <div class="flex-shrink-0 mr-3"> + <i :class="getFileIcon(file.fileName)" class="text-xl"></i> + </div> + <div class="flex-grow min-w-0"> + <p class="text-sm font-medium text-gray-900 truncate">{{ file.fileName }}</p> + </div> + <div class="flex-shrink-0 ml-3"> + <button v-if="isImageFile(file.fileName)" @click="previewFile(file)" class="text-primary hover:text-primary/80 mr-2"> + <i class="fa-solid fa-eye"></i> + </button> + <button @click="downloadFile(file, index)" class="text-primary hover:text-primary/80 mr-2"> + <i class="fa-solid fa-download"></i> + </button> + <button @click.stop="deleteFile(file, index, fileIndex)" class="text-red-500 hover:text-red-700"> + <i class="fa-solid fa-trash"></i> + </button> + </div> + </div> + </div> + </div> + </div> + </div> + </form> + + <div class="row mt-6"> + <div class="col-sm-offset-5 col-sm-10" style="display: flex;"> + <button type="button" class="btn btn-sm btn-primary" @click="submitHandler()"><i class="fa fa-check"></i>提 交</button> + <button type="button" class="btn btn-sm btn-danger" onclick="closeItem()"><i class="fa fa-reply-all"></i>关 闭 + </button> + </div> + </div> + </div> + <!-- 结果区域 --> + <div v-if="showResult" class="bg-white rounded-xl shadow-soft p-6 mb-8 transform hover:shadow-lg transition-all duration-300"> + <div class="flex items-start"> + <div class="flex-shrink-0 bg-green-100 p-3 rounded-lg"> + <i class="fa-solid fa-check text-green-500 text-xl"></i> + </div> + <div class="ml-4"> + <h3 class="text-lg font-medium text-gray-800">PDF生成成功</h3> + <p class="mt-1 text-sm text-gray-600">您的PDF表单已成功填写,可以点击下方按钮下载。</p> + <div class="mt-4 flex flex-wrap gap-3"> + <a :href="pdfUrl" download="涉密人员离职离岗审批表.pdf" class="inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-primary hover:bg-primary/90 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition-colors duration-200"> + <i class="fa-solid fa-download mr-2"></i> 下载PDF + </a> + <button @click="showResult = false" class="inline-flex items-center px-4 py-2 border border-gray-300 text-sm font-medium rounded-md shadow-sm text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition-colors duration-200"> + <i class="fa-solid fa-times mr-2"></i> 关闭 + </button> + </div> + </div> + </div> + </div> + <!-- 加载中 --> + <div v-if="isLoading" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50"> + <div class="bg-white rounded-xl p-6 shadow-lg max-w-md w-full"> + <div class="flex items-center"> + <div class="animate-spin rounded-full h-12 w-12 border-t-2 border-b-2 border-primary mr-4"></div> + <div> + <h3 class="text-lg font-medium text-gray-800">正在处理</h3> + <p class="text-sm text-gray-500 mt-1">请稍候,系统正在生成您的PDF文件...</p> + </div> + </div> + </div> + </div> + <!-- 上传成功提示 --> + <div v-if="uploadSuccess" class="fixed bottom-4 right-4 bg-green-500 text-white px-6 py-3 rounded-lg shadow-lg transform transition-all duration-500 translate-y-0 opacity-100"> + <div class="flex items-center"> + <i class="fa-solid fa-check-circle mr-2"></i> + <span>{{ uploadSuccessMessage }}</span> + </div> + </div> + <!-- 图片预览模态框 --> + <div v-if="previewModalVisible" class="fixed inset-0 bg-black bg-opacity-90 flex items-center justify-center z-50"> + <div class="bg-white rounded-lg max-w-4xl w-full max-h-[90vh] overflow-auto"> + <div class="p-4 flex justify-between items-center border-b"> + <h3 class="text-lg font-medium text-gray-900">{{ previewingFile.fileName }}</h3> + <button @click="closePreviewModal" class="text-gray-500 hover:text-gray-700"> + <i class="fa-solid fa-times"></i> + </button> + </div> + <div class="p-4 flex justify-center"> + <img :src="getPreviewUrl(previewingFile)" alt="预览图" class="max-w-full max-h-[70vh] object-contain"> + </div> + <div class="p-4 border-t flex justify-end"> + <button @click="closePreviewModal" class="inline-flex items-center px-4 py-2 border border-gray-300 text-sm font-medium rounded-md shadow-sm text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary transition-colors duration-200"> + <i class="fa-solid fa-times mr-2"></i> 关闭 + </button> + </div> + </div> + </div> + </div> + </main> +</div> +<th:block th:include="include :: footer"/> +<th:block th:include="include :: select2-js"/> +<th:block th:include="include :: jasny-bootstrap-js"/> +<th:block th:include="include :: element-js"/> +<script type="text/javascript" th:inline="javascript"> + var prefix = ctx + "system/leaveList"; + new Vue({ + el: '#app', + data: { + formData: { + name: '', + sex: '', + nationa: '', + formerName: '', + nationality: '', + maritalStatus: '', + political: '', + phone: '', + cerno: '', + address: '', + registeredAuthority: '', + permanentAddress: '', + residentBureau: '', + positionCapacity: '', + smPost: '', + smGrade: '', + photoUrl: '', + applyId: '', + }, + selectedFile: null, + // 材料配置 - 定义六个材料的信息 + materials: [ + { + name: '涉密人员离职离岗保密审批表', + code: 'bm_user_userleav_011', + templateUrl: '/file/pdfFiles/涉密人员离职离岗保密审批表.pdf', + downloadName: '涉密人员离职离岗保密审批表.pdf', + description: '涉密人员离职离岗保密审批表', + accept: '.pdf, .doc, .docx, .jpg, .jpeg, .png, .gif, .bmp' + }, + { + name: '涉密人员离职离岗保密承诺书', + code: 'bm_user_lpromise_012', + templateUrl: '/file/pdfFiles/涉密人员离职离岗保密承诺书.pdf', + downloadName: '涉密人员离职离岗保密承诺书.pdf', + description: '涉密人员离职离岗保密承诺书', + accept: '.pdf, .doc, .docx, .jpg, .jpeg, .png, .gif, .bmp' + }, + ], + // 文件上传相关数据 + selectedFiles: Array(2).fill(null), + currentFileName: Array(2).fill(''), + uploadProgress: Array(2).fill(0), + uploadedFiles: Array(2).fill([]).map(() => []), + previewModalVisible: false, + previewingFile: {}, + uploadSuccess: false, + uploadSuccessMessage: '', + prefix: ctx + "system/leaveList", + isLoading: false, + showResult: false, + pdfUrl:'' + }, + computed: { + previewUrl() { + return this.selectedFile ? window.URL.createObjectURL(this.selectedFile) : ''; + } + }, + methods: { + handleFileUpload(event) { + let file = event.target.files[0]; + if (file) { + // 检查文件类型和大小 + let fileSize = file.size / 1024 / 1024; // MB + if (fileSize > 2) { + this.$message.error('文件大小不能超过2MB'); + return; + } + let fileType = file.type; + if (!fileType.startsWith('image/')) { + this.$message.error('请上传图片文件'); + return; + } + // 验证图片格式 + let validFormats = ['image/jpeg', 'image/png']; + if (!validFormats.includes(fileType)) { + this.$message.error('请上传JPG或PNG格式的图片'); + return; + } + // 验证图片尺寸是否接近一寸照片 (2.5cm x 3.5cm, 约295x413像素) + let img = new Image(); + img.src = window.URL.createObjectURL(file); + img.onload = () => { + let width = img.naturalWidth; + let height = img.naturalHeight; + let ratio = width / height; + // 检查宽高比是否接近一寸照片的比例 (约0.714) + if (Math.abs(ratio - 0.714) > 0.1) { + this.$message({ + message: '建议上传一寸照片尺寸 (约295x413像素)', + type: 'warning' + }); + } + this.selectedFile = file; + }; + img.onerror = () => { + this.$message.error('无法加载图片,请重新选择'); + }; + } + }, + clearFile() { + this.selectedFile = null; + document.getElementById('photo').value = ''; + }, + // 文件上传处理 + handleFileSelection(index) { + this.selectedFiles[index] = event.target.files[0]; + if (this.selectedFiles[index]) { + let file = this.selectedFiles[index]; + let fileExtension = file.name.split('.').pop().toLowerCase(); + + // 根据材料类型验证文件格式 + let validExtensions = this.materials[index].accept.split(',').map(ext => ext.trim().replace('.', '')); + + if (!validExtensions.includes(fileExtension)) { + this.$message.error(`请上传${this.materials[index].description.split(':')[1]}`); + document.getElementById(`fileUpload${index}`).value = ''; // 清空选择 + return; + } + + this.uploadFile(file, index); + } + }, + + uploadFile(file, index) { + this.currentFileName[index] = file.name; + this.uploadProgress[index] = 0; + + let 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); + + axios.post(ctx + 'system/file/upload', formData, { + onUploadProgress: (progressEvent) => { + this.uploadProgress[index] = Math.round((progressEvent.loaded * 100) / progressEvent.total); + } + }) + .then(response => { + if (response.data.code === web_status.SUCCESS) { + // 显示上传成功提示 + this.uploadSuccess = true; + this.uploadSuccessMessage = `文件 "${file.name}" 上传成功`; + + // 3秒后隐藏提示 + setTimeout(() => { + this.uploadSuccess = false; + }, 3000); + + // 更新文件列表 + let fileInfo = { + id: response.data.data.fileId, + fileName: file.name, + fileSize: file.size, + fileType: file.type, + fileUrl: response.data.data.filePath, + uploadTime: new Date().toISOString() + }; + this.$set(this.uploadedFiles, index, [...this.uploadedFiles[index], fileInfo]); + // 重置选择框 + document.getElementById(`fileUpload${index}`).value = ''; + } else { + this.$message.error(`上传失败: ${response.data.msg}`); + } + }) + .catch(error => { + console.error('上传错误:', error); + this.$message.error('上传过程中发生错误'); + }); + }, + submitForm() { + // 简单验证 + if (!this.formData.name || !this.formData.sex || !this.formData.nationa || !this.formData.nationality || !this.formData.maritalStatus || !this.formData.political || !this.formData.phone || !this.formData.cerno || !this.formData.address || !this.formData.registeredAuthority || !this.formData.permanentAddress || !this.formData.residentBureau || !this.formData.positionCapacity || !this.formData.smPost || !this.formData.smGrade) { + this.$message({ + message: '请填写所有必填字段', + type: 'warning' + }); + return; + } + // 检查是否上传了照片 + if (!this.selectedFile) { + this.$message({ + message: '请上传一寸照片', + type: 'warning' + }); + return; + } + // 准备表单数据 + let formData = new FormData(); + if (this.formData.name) formData.append("name", this.formData.name); + if (this.formData.political) formData.append("political", this.formData.political); + if (this.formData.phone) formData.append("phone", this.formData.phone); + if (this.formData.positionCapacity) formData.append("positionCapacity", this.formData.positionCapacity); + if (this.formData.smPost) formData.append("smPost", this.formData.smPost); + if (this.formData.smGrade) formData.append("smGrade", this.formData.smGrade); + formData.append('photo', this.selectedFile); + // 显示加载状态 + this.isLoading = true; + // 发送请求 + axios.post('/api/LeavePdf/LeaveFill', formData, { + responseType: 'blob' + }) + .then(response => { + // 创建下载URL + let blob = new Blob([response.data], { type: 'application/pdf' }); + this.pdfUrl = window.URL.createObjectURL(blob); + + // 隐藏加载状态,显示结果 + this.isLoading = false; + this.showResult = true; + }) + .catch(error => { + console.error('Error:', error); + this.isLoading = false; + this.$message.error('生成PDF时出错,请重试'); + }); + }, + downloadFile(file, index) { + // 直接通过接口下载 + 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'); + link.href = url; + link.setAttribute('download', file.fileName); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + }) + .catch(error => { + console.error('下载错误:', error); + this.$message.error('下载文件时出错'); + }); + }, + + + deleteFile(file, materialIndex, fileIndex) { + let event = window.event; + if (event) { + event.preventDefault(); + } + this.$confirm(`确定要删除文件 "${file.fileName}" 吗?`, '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + axios.get(ctx + 'system/file/delFile/' + file.id) + .then(response => { + if (response.data.code === web_status.SUCCESS) { + this.uploadedFiles[materialIndex].splice(fileIndex, 1); + this.$message.success('文件已成功删除'); + } else { + this.$message.error(`删除失败: ${response.data.msg}`); + } + }) + .catch(error => { + console.error('删除错误:', error); + this.$message.error('删除文件时出错'); + }); + }).catch(() => { + this.$message({ + type: 'info', + message: '已取消删除' + }); + }); + }, + submitHandler() { + if (this.uploadedFiles.length == 0) { + this.$message.warning('请上传所需材料'); + return; + } + + this.$confirm('确认提交吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + $.operate.saveTab(`${this.prefix}/submitLeave?applyId=${this.formData.applyId}`); + }).catch(() => { + this.$message({ + type: 'info', + message: '已取消' + }); + }); + }, + // 获取已上传文件 + getUploadedFiles() { + if (!this.formData.applyId) return; + + // 使用forEach确保每个请求有自己的作用域 + this.materials.forEach((material, index) => { + axios.get(ctx + 'system/file/getFileInfo', { + params: { + applyId: this.formData.applyId, + fileCode: material.code, + } + }) + .then(response => { + if (response.data.code === web_status.SUCCESS) { + // 使用Vue.set确保响应式更新 + this.$set(this.uploadedFiles, index, response.data.data.map((file) => { + return { + id: file.fileId, + fileName: file.fileName, + fileSize: file.fileSize, + fileType: file.fileType, + fileUrl: file.filePath, + uploadTime: file.createTime + } + })); + } else { + console.error(`获取${material.name}文件列表失败:`, response.data.msg); + this.$message.error(`获取${material.name}已上传文件失败: ${response.data.msg}`); + } + }) + .catch(error => { + console.error(`获取${material.name}文件列表错误:`, error); + this.$message.error(`获取${material.name}已上传文件时出错`); + }); + }); + }, + + // 图片预览相关方法 + isImageFile(fileName) { + const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp','pdf']; + const extension = fileName.split('.').pop().toLowerCase(); + return imageExtensions.includes(extension); + }, + + getFileIcon(fileName) { + const 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(); + if (extension === 'pdf') { + // 使用preventDefault阻止默认行为,避免影响当前页面状态 + let event = window.event; + if (event) { + event.preventDefault(); + } + window.open(file.fileUrl, '_blank'); + return + } + this.previewingFile = file; + this.previewModalVisible = true; + }, + + closePreviewModal() { + this.previewModalVisible = false; + this.previewingFile = {}; + }, + + getPreviewUrl(file) { + // 如果是图片,直接返回URL + if (this.isImageFile(file.fileName)) { + return ctx + 'system/file/download?fileId=' + file.id; + } + return ''; + } + }, + mounted() { + // 从后端获取转义后的 JSON 字符串 + if ([[${applyInfoList}]]){ + this.formData = {...[[${applyInfoList}]]} + // 获取图片并转换为 Blob + if (this.formData.photoUrl) { + fetch(this.formData.photoUrl) + .then(response => response.blob()) + .then(blob => { + this.selectedFile = blob; + }) + .catch(error => console.error('处理图片时出错:', error)); + } + } + // 获取已上传文件 + this.getUploadedFiles(); + } + }); + +</script> +</body> +</html> \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/system/newdev/leaveAudit/leaveAudit.html b/ruoyi-admin/src/main/resources/templates/system/newdev/leaveAudit/leaveAudit.html new file mode 100644 index 00000000..566549bd --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/system/newdev/leaveAudit/leaveAudit.html @@ -0,0 +1,10 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>Title</title> +</head> +<body> + +</body> +</html> \ No newline at end of file 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 ad91a5a6..71a05967 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 @@ -514,7 +514,7 @@ fileName: file.name, fileSize: file.size, fileType: file.type, - fileUrl: file.filePath, + fileUrl: response.data.data.filePath, uploadTime: new Date().toISOString() }; this.uploadedFiles.push(fileInfo); @@ -642,7 +642,12 @@ previewFile(file) { let extension = file.fileName.split('.').pop().toLowerCase(); if (extension === 'pdf') { - window.open(file.fileUrl); + // 使用preventDefault阻止默认行为,避免影响当前页面状态 + let event = window.event; + if (event) { + event.preventDefault(); + } + window.open(file.fileUrl, '_blank'); return } this.previewingFile = file; diff --git a/ruoyi-admin/src/main/resources/templates/system/newdev/person/detail.html b/ruoyi-admin/src/main/resources/templates/system/newdev/person/detail.html index d654e6b2..6ceaba9a 100644 --- a/ruoyi-admin/src/main/resources/templates/system/newdev/person/detail.html +++ b/ruoyi-admin/src/main/resources/templates/system/newdev/person/detail.html @@ -444,7 +444,12 @@ previewFile(file) { let extension = file.fileName.split('.').pop().toLowerCase(); if (extension === 'pdf') { - window.open(file.fileUrl); + // 使用preventDefault阻止默认行为,避免影响当前页面状态 + let event = window.event; + if (event) { + event.preventDefault(); + } + window.open(file.fileUrl, '_blank'); return } this.previewingFile = file; diff --git a/ruoyi-admin/src/main/resources/templates/system/newdev/promise/editPromise.html b/ruoyi-admin/src/main/resources/templates/system/newdev/promise/editPromise.html index 8f6c57d9..f39570a6 100644 --- a/ruoyi-admin/src/main/resources/templates/system/newdev/promise/editPromise.html +++ b/ruoyi-admin/src/main/resources/templates/system/newdev/promise/editPromise.html @@ -248,7 +248,7 @@ fileName: file.name, fileSize: file.size, fileType: file.type, - fileUrl: file.filePath, + fileUrl: response.data.data.filePath, uploadTime: new Date().toISOString() }; this.uploadedFiles.push(fileInfo); @@ -376,7 +376,12 @@ previewFile(file) { let extension = file.fileName.split('.').pop().toLowerCase(); if (extension === 'pdf') { - window.open(file.fileUrl); + // 使用preventDefault阻止默认行为,避免影响当前页面状态 + let event = window.event; + if (event) { + event.preventDefault(); + } + window.open(file.fileUrl, '_blank'); return } this.previewingFile = file; diff --git a/ruoyi-admin/src/main/resources/templates/system/newdev/train/training.html b/ruoyi-admin/src/main/resources/templates/system/newdev/train/training.html index 753876ea..973cf8be 100644 --- a/ruoyi-admin/src/main/resources/templates/system/newdev/train/training.html +++ b/ruoyi-admin/src/main/resources/templates/system/newdev/train/training.html @@ -375,7 +375,7 @@ fileName: file.name, fileSize: file.size, fileType: file.type, - fileUrl: file.filePath, + fileUrl: response.data.data.filePath, uploadTime: new Date().toISOString() }; this.uploadedFiles.push(fileInfo); @@ -514,7 +514,12 @@ previewFile(file) { let extension = file.fileName.split('.').pop().toLowerCase(); if (extension === 'pdf') { - window.open(file.fileUrl); + // 使用preventDefault阻止默认行为,避免影响当前页面状态 + let event = window.event; + if (event) { + event.preventDefault(); + } + window.open(file.fileUrl, '_blank'); return } this.previewingFile = file;