From 7f30109975d5049dc23fe8953a3b28a55f395bd7 Mon Sep 17 00:00:00 2001 From: zhangzhiguo <421587375@qq.com> Date: Wed, 17 Dec 2025 14:09:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=BA=E5=91=98=E5=B7=A5=E8=B5=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zcdev/fs/plugin/form/SalaryPlugin.java | 36 ++++++++++++++++++ .../src/main/resources/template/salary.xlsx | Bin 0 -> 13421 bytes 2 files changed, 36 insertions(+) create mode 100644 code/zcdev/zcgj-zcdev-zcdev-fs/src/main/resources/template/salary.xlsx diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/SalaryPlugin.java b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/SalaryPlugin.java index 0edbe51..b8ce818 100644 --- a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/SalaryPlugin.java +++ b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/java/zcgj/zcdev/zcdev/fs/plugin/form/SalaryPlugin.java @@ -6,6 +6,7 @@ import kd.bos.bill.AbstractBillPlugIn; import kd.bos.bill.BillShowParameter; import kd.bos.bill.OperationStatus; import kd.bos.cache.CacheFactory; +import kd.bos.cache.TempFileCache; import kd.bos.cache.tempfile.TempFileCacheDownloadable; import kd.bos.dataentity.OperateOption; import kd.bos.dataentity.entity.DynamicObject; @@ -19,10 +20,13 @@ import kd.bos.entity.datamodel.events.PropertyChangedArgs; import kd.bos.entity.operate.result.OperationResult; import kd.bos.fileservice.FileService; import kd.bos.fileservice.FileServiceFactory; +import kd.bos.form.ConfirmCallBackListener; +import kd.bos.form.MessageBoxOptions; import kd.bos.form.control.AttachmentPanel; import kd.bos.form.control.Control; import kd.bos.form.control.EntryGrid; import kd.bos.form.control.Toolbar; +import kd.bos.form.control.events.BeforeItemClickEvent; import kd.bos.form.control.events.ClickListener; import kd.bos.form.control.events.UploadEvent; import kd.bos.form.control.events.UploadListener; @@ -36,6 +40,7 @@ import kd.bos.servicehelper.operation.OperationServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import kd.sdk.plugin.Plugin; import org.apache.poi.ss.usermodel.*; +import org.apache.poi.util.IOUtils; import java.io.IOException; import java.io.InputStream; @@ -67,6 +72,37 @@ public class SalaryPlugin extends AbstractBillPlugIn implements Plugin, UploadLi super.registerListener(e); AttachmentPanel toolbar = this.getControl("attachmentpanel"); toolbar.addUploadListener(this); + this.addItemClickListeners("zcgj_advcontoolbarap"); + + } + + @Override + public void beforeItemClick(BeforeItemClickEvent evt) { + //工具栏上的所有按钮的点击都会激活itemClick和beforeItemClick方法, 需 //要开发人员实现不同按钮的逻辑 + if (evt.getItemKey().equals("zcgj_downexcel")) { + evt.setCancel(true); + downExcel(); + } + super.beforeItemClick(evt); + } + + /** + * 自定义模板文件下载 + */ + public void downExcel(){ + //文件位置resources/template/salary.xlsx + try (InputStream in = this.getClass().getResourceAsStream("/template/salary.xlsx")) { + if (in == null) { + throw new RuntimeException("未找到模板文件:/template/salary.xlsx"); + } + byte[] data = org.apache.commons.io.IOUtils.toByteArray(in); + TempFileCache tempFileCache = CacheFactory.getCommonCacheFactory().getTempFileCache(); + String newFileName = "人员工资表导入模板-"+System.currentTimeMillis()+".xlsx"; + String url = tempFileCache.saveAsUrl(newFileName, data, data.length); + this.getView().download(url); + } catch (IOException e) { + throw new RuntimeException("下载工资模板失败", e); + } } @Override diff --git a/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/resources/template/salary.xlsx b/code/zcdev/zcgj-zcdev-zcdev-fs/src/main/resources/template/salary.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a130d5b9f474dd4bff546a4d84b4ca6f30662306 GIT binary patch literal 13421 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 literal 0 HcmV?d00001