|
|
@@ -0,0 +1,142 @@
|
|
|
+<%@ tag language="java" pageEncoding="UTF-8"%>
|
|
|
+<%@ include file="/webpage/include/taglib.jsp"%>
|
|
|
+<%@ attribute name="url" type="java.lang.String" required="true"%>
|
|
|
+<c:set var="basePath" value="${pageContext.request.contextPath}" />
|
|
|
+
|
|
|
+<!-- 导入按钮,原样保留 -->
|
|
|
+<button id="btnImport" class="layui-btn layui-btn-sm layui-bg-blue" data-toggle="tooltip" data-placement="left" title="导入">
|
|
|
+ 导入
|
|
|
+</button>
|
|
|
+
|
|
|
+<!-- 弹窗内容,仅保留文件选择,删除form的action、method,彻底禁用传统表单提交 -->
|
|
|
+<div id="importBox" class="hide">
|
|
|
+ <div style="padding-left:20px;text-align:center;margin-top:20px;">
|
|
|
+ <input id="uploadFile" name="file" type="file" style="width:330px"/>
|
|
|
+ <br/>
|
|
|
+ 导入文件不能超过5M,仅允许导入“xls”或“xlsx”格式文件!
|
|
|
+ </div>
|
|
|
+</div>
|
|
|
+
|
|
|
+<script type="text/javascript">
|
|
|
+ $(document).ready(function() {
|
|
|
+ // 导入按钮点击
|
|
|
+ $("#btnImport").click(function(){
|
|
|
+ // 打开弹窗,纯弹窗,无表单提交关联
|
|
|
+ top.layer.open({
|
|
|
+ type: 1,
|
|
|
+ area: [500, 300],
|
|
|
+ title:"导入数据",
|
|
|
+ skin: 'three-btns with-demo',
|
|
|
+ content: $("#importBox").html(),
|
|
|
+ btn: ['下载模板','确定', '关闭'],
|
|
|
+ // 下载模板,原样
|
|
|
+ btn1: function(index, layero){
|
|
|
+ window.location.href = '${url}/invoiceBatchTemplate';
|
|
|
+ },
|
|
|
+ // 确定按钮:【纯AJAX提交,彻底禁用同步表单,无任何页面跳转】
|
|
|
+ btn2: function(index, layero){
|
|
|
+ // 1. 获取文件对象
|
|
|
+ var fileObj = top.$("#uploadFile")[0].files[0];
|
|
|
+ // 2. 前端校验
|
|
|
+ if (!fileObj) {
|
|
|
+ top.layer.msg("请选择要导入的Excel文件!", {icon: 2, time: 3000});
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (fileObj.size > 5 * 1024 * 1024) {
|
|
|
+ top.layer.msg("导入文件不能超过5M,请更换文件!", {icon: 2, time: 3000});
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ var suffix = fileObj.name.substring(fileObj.name.lastIndexOf(".")).toLowerCase();
|
|
|
+ if (suffix !== ".xls" && suffix !== ".xlsx") {
|
|
|
+ top.layer.msg("仅允许导入xls/xlsx格式文件!", {icon: 2, time: 3000});
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3. 构建AJAX上传参数,唯一提交方式,无同步表单
|
|
|
+ var formData = new FormData();
|
|
|
+ formData.append("file", fileObj);
|
|
|
+
|
|
|
+ // 4. 开启加载层
|
|
|
+ top.layer.load(1, {shade: 0.3, title: "正在导入,请稍等..."});
|
|
|
+
|
|
|
+ // 5. 纯AJAX异步提交,【绝对无页面跳转,绝对不打印JSON】
|
|
|
+ $.ajax({
|
|
|
+ url: "${url}", // 你的后端接口:importReceiptDataFile,直接用传入的url即可
|
|
|
+ type: "POST",
|
|
|
+ data: formData,
|
|
|
+ // 核心:上传文件必须配置,禁止处理数据、禁止设置请求头
|
|
|
+ processData: false,
|
|
|
+ contentType: false,
|
|
|
+ dataType: "json", // 强制接收JSON,不走页面渲染
|
|
|
+ // 成功回调:【原页面弹框,不跳页,不打印JSON】
|
|
|
+ success: function(res) {
|
|
|
+ // 关闭加载层
|
|
|
+ top.layer.closeAll("loading");
|
|
|
+ // 关闭导入弹窗
|
|
|
+ top.layer.close(index);
|
|
|
+
|
|
|
+ // ============== 核心:原页面弹出提示框,绝不跳页 ==============
|
|
|
+ if(res.success){
|
|
|
+ // 成功/有问题:绿色/黄色提示
|
|
|
+ top.layer.msg(res.msg, {icon: 1, time: 4000, shade: 0.2});
|
|
|
+
|
|
|
+ // 如果有Excel文件,弹出下载确认框(原页面弹,不跳页)
|
|
|
+ if(res.excelFileName && res.excelFileName != ""){
|
|
|
+ top.layer.confirm("导入数据存在问题,是否下载错误详情Excel?",{
|
|
|
+ title: "下载提示",icon: 3,btn: ['下载','取消']
|
|
|
+ },function(confirmIdx){
|
|
|
+ // 1. 触发Excel下载
|
|
|
+ var downUrl = "${ctx}/workinvoiceAll/workInvoiceAll/downloadExcel?fileName="+encodeURIComponent(res.excelFileName);
|
|
|
+ var a = document.createElement("a");
|
|
|
+ a.href = downUrl;
|
|
|
+ a.style.display="none";
|
|
|
+ document.body.appendChild(a);
|
|
|
+ a.click();
|
|
|
+ document.body.removeChild(a);
|
|
|
+
|
|
|
+ // 2. 核心新增:刷新父节点页面(加100ms延迟,确保下载请求先发送)
|
|
|
+ setTimeout(function(){
|
|
|
+ // 刷新当前激活的父Tab页面(和你项目原有刷新逻辑一致)
|
|
|
+ top.getActiveTab()[0].contentWindow.location.reload();
|
|
|
+ // 如果上面这行无效,可替换为:parent.location.reload(); // 通用刷新父页面
|
|
|
+ }, 100);
|
|
|
+
|
|
|
+ // 3. 关闭下载确认框 + 提示
|
|
|
+ top.layer.close(confirmIdx);
|
|
|
+ top.layer.msg("开始下载导入结果文件,页面已刷新",{icon:1,time:2000});
|
|
|
+ },function(confirmIdx){
|
|
|
+ // 取消下载时:可选也刷新(如果需要),不需要则保留原逻辑
|
|
|
+ top.layer.close(confirmIdx);
|
|
|
+ // 若取消下载也想刷新,添加这行:top.getActiveTab()[0].contentWindow.location.reload();
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ // 业务失败:红色错误提示,原页面弹出
|
|
|
+ top.layer.msg(res.msg, {icon: 2, time: 5000, shade: 0.2});
|
|
|
+ }
|
|
|
+
|
|
|
+ // 可选:导入完成后刷新列表(仅刷新列表,不跳页,不用表单提交)
|
|
|
+ /*setTimeout(function(){
|
|
|
+ top.getActiveTab()[0].contentWindow.location.reload();
|
|
|
+ },1000);*/
|
|
|
+ },
|
|
|
+ // 接口失败:原页面弹错误提示
|
|
|
+ error: function(xhr,status,err){
|
|
|
+ top.layer.closeAll("loading");
|
|
|
+ top.layer.close(index);
|
|
|
+ top.layer.msg("导入请求失败,网络或服务异常!",{icon:2,time:4000});
|
|
|
+ console.error("导入异常:",err);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // 核心:阻止按钮默认行为,**绝对不触发同步表单提交**
|
|
|
+ return false;
|
|
|
+ },
|
|
|
+ // 关闭按钮
|
|
|
+ btn3: function(index){
|
|
|
+ top.layer.close(index);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+</script>
|