zy-asrs-common/src/main/java/com/zy/asrs/common/domain/entity/LocInPrintMatExcel.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-asrs-common/src/main/java/com/zy/asrs/common/domain/entity/OutLocOrderExcel.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-asrs-common/src/main/java/com/zy/asrs/common/utils/LocInPrintMatExcelListener.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-asrs-common/src/main/java/com/zy/asrs/common/utils/OutLocOrderExcelListener.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/TagController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-asrs-wms/src/main/webapp/static/js/pakStore/stockOutOrder.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
zy-asrs-wms/src/main/webapp/views/pakStore/stockOutOrder.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
zy-asrs-common/src/main/java/com/zy/asrs/common/domain/entity/LocInPrintMatExcel.java
@@ -15,9 +15,9 @@ public class LocInPrintMatExcel extends Mat { @ExcelProperty(index = 0, value = "品号") private String matnr; @ExcelProperty(index = 1, value = "品名") private String matax; @ExcelProperty(index = 2, value = "打印数量") // @ExcelProperty(index = 1, value = "品名") // private String matax; @ExcelProperty(index = 1, value = "打印数量") private String anfme; } zy-asrs-common/src/main/java/com/zy/asrs/common/domain/entity/OutLocOrderExcel.java
New file @@ -0,0 +1,26 @@ package com.zy.asrs.common.domain.entity; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import com.zy.asrs.common.wms.entity.Mat; import lombok.Data; /** * 0.A 1.B 2.C 3.D 4.E 5.F 6.G 7.H 8.I * 9.J 10.K 11.L 12.M 13.N 14.O 15.P 16.Q 17.R 18.S * 19.T 20.U 21.V 22.W 23.X 24.Y 25.Z */ @Data @ExcelIgnoreUnannotated public class OutLocOrderExcel extends Mat { @ExcelProperty(index = 0, value = "订单号") private String order; @ExcelProperty(index = 1, value = "单据类型") private String sign; @ExcelProperty(index = 2, value = "品号") private String matnr; @ExcelProperty(index = 3, value = "数量") private String anfme; @ExcelProperty(index = 4, value = "此列为备注==》不用填写==》订单号与单据类型只需要填写第一列即可") private String memo1; } zy-asrs-common/src/main/java/com/zy/asrs/common/utils/LocInPrintMatExcelListener.java
@@ -6,8 +6,11 @@ import com.baomidou.mybatisplus.generator.config.IFileCreate; import com.zy.asrs.common.domain.entity.LocInPrintMatExcel; import com.zy.asrs.common.wms.entity.LocInPrintMat; import com.zy.asrs.common.wms.entity.Mat; import com.zy.asrs.common.wms.service.LocInPrintMatService; import com.zy.asrs.common.wms.service.MatService; import com.zy.asrs.framework.common.Cools; import com.zy.asrs.framework.common.R; import com.zy.asrs.framework.common.SpringUtils; import com.zy.asrs.framework.exception.CoolException; import lombok.Data; @@ -29,7 +32,7 @@ private int totalAnfme = 0; private Long userId; private Long hostId; List<String[]> OutLocBoxCs = new ArrayList<>(); List<String[]> printMatList = new ArrayList<>(); public LocInPrintMatExcelListener() { } @@ -67,9 +70,14 @@ } catch (Exception e){ throw new CoolException("品号参数为空"); } MatService matService = SpringUtils.getBean(MatService.class); Mat mat = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, matnr)); if (Cools.isEmpty(mat)){ throw new CoolException("品号:"+matnr+"不存在,请先新增商品档案!!!"); } String matax = ""; try{ matax = excel.getMatax(); matax = mat.getMaktx(); } catch (Exception e){ matax = ""; } @@ -93,7 +101,7 @@ s[0] = matnr; s[1] = matax; s[2] = anfme; OutLocBoxCs.add(s); printMatList.add(s); total++; totalAnfme = totalAnfme+Integer.parseInt(anfme); } @@ -104,13 +112,13 @@ */ @Override public void doAfterAllAnalysed(AnalysisContext ctx) { if (!Cools.isEmpty(OutLocBoxCs) && OutLocBoxCs.size() != 0) { if (!Cools.isEmpty(printMatList) && printMatList.size() != 0) { LocInPrintMatService locInPrintMatService = SpringUtils.getBean(LocInPrintMatService.class); Date now = new Date(); for (String[] outLocBoxC:OutLocBoxCs){ String matnr = outLocBoxC[0]; String matax = outLocBoxC[1]; String anfme = outLocBoxC[2]; for (String[] printMat:printMatList){ String matnr = printMat[0]; String matax = printMat[1]; String anfme = printMat[2]; Integer intAnfme = 1; try{ Integer intAnfme1 = Integer.parseInt(anfme); zy-asrs-common/src/main/java/com/zy/asrs/common/utils/OutLocOrderExcelListener.java
New file @@ -0,0 +1,267 @@ package com.zy.asrs.common.utils; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zy.asrs.common.domain.dto.DetlDto; import com.zy.asrs.common.domain.entity.OutLocOrderExcel; import com.zy.asrs.common.domain.param.OrderDomainParam; import com.zy.asrs.common.wms.entity.DocType; import com.zy.asrs.common.wms.entity.Mat; import com.zy.asrs.common.wms.entity.Order; import com.zy.asrs.common.wms.entity.OrderDetl; import com.zy.asrs.common.wms.service.DocTypeService; import com.zy.asrs.common.wms.service.MatService; import com.zy.asrs.common.wms.service.OrderDetlService; import com.zy.asrs.common.wms.service.OrderService; import com.zy.asrs.framework.common.*; import com.zy.asrs.framework.exception.CoolException; import lombok.extern.slf4j.Slf4j; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.web.bind.annotation.RequestBody; import java.util.*; /** * Created by vincent on 2019-11-25 */ @Slf4j public class OutLocOrderExcelListener extends AnalysisEventListener<OutLocOrderExcel> { private int total = 0; private String orderOneNo = null; private String orderSign = null; private Long orderSignId = null; private int totalAnfme = 0; private Long userId; private Long hostId; List<String[]> OutLocOrderCs = new ArrayList<>(); List<List<String[]>> OutLocOrderList = new ArrayList<>(); public OutLocOrderExcelListener() { } public OutLocOrderExcelListener(Long userId, Long hostId) { this.userId = userId; this.hostId = hostId; } /** * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收 */ private static final int BATCH_COUNT = 50; private final List<OutLocOrderExcel> list = new ArrayList<>(); /** * 这里会一行行的返回头 */ @Override public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) { } /** * 这个每一条数据解析都会来调用 */ @Override public void invoke(OutLocOrderExcel excel, AnalysisContext ctx) { if (Cools.isEmpty(orderOneNo)){ if (!Cools.isEmpty(excel.getOrder())){ orderOneNo = excel.getOrder(); } else { throw new CoolException("订单号参数为空"); } } if (Cools.isEmpty(orderSign)){ if (!Cools.isEmpty(excel.getSign())){ orderSign = excel.getSign(); DocTypeService docTypeService = SpringUtils.getBean(DocTypeService.class); DocType docType = docTypeService.getOne(new LambdaQueryWrapper<DocType>().eq(DocType::getDocName, orderSign)); if (Cools.isEmpty(docType)){ throw new CoolException("不存在的单据类型:"+orderSign); } orderSignId = docType.getDocId(); } else { throw new CoolException("入出库标记参数为空"); } } String matnr = ""; try{ matnr = excel.getMatnr(); if (Cools.isEmpty(matnr)){ throw new CoolException("品号参数为空"); } } catch (Exception e){ throw new CoolException("品号参数为空"); } MatService matService = SpringUtils.getBean(MatService.class); Mat mat = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, matnr)); if (Cools.isEmpty(mat)){ throw new CoolException("品号:"+matnr+"不存在,请先新增商品档案!!!"); } String anfme = "0"; try{ String anfme1 = excel.getAnfme(); try{ Integer anfmeInt = Integer.parseInt(anfme1); if (!Cools.isEmpty(anfmeInt) && anfmeInt>0){ anfme = anfmeInt.toString(); } else { throw new CoolException("数量参数为空"); } } catch (Exception e){ throw new CoolException("数量参数为空"); } } catch (Exception e){ throw new CoolException("数量参数为空"); } String[] s=new String[2]; s[0] = matnr; s[1] = anfme; OutLocOrderCs.add(s); total++; // totalAnfme = totalAnfme+Integer.parseInt(anfme); } /** * 所有数据解析完成了调用 * 适合事务 */ @Override public void doAfterAllAnalysed(AnalysisContext ctx) { if (!Cools.isEmpty(OutLocOrderCs) && OutLocOrderCs.size() != 0) { ArrayList<String> matnrSign = new ArrayList<>(); for (String[] outLocOrderCs : OutLocOrderCs){ if (!matnrSign.contains(outLocOrderCs[0])){ matnrSign.add(outLocOrderCs[0]); } else { throw new CoolException("品号参数存在重复行:"+outLocOrderCs[0]); } } MatService matService = SpringUtils.getBean(MatService.class); OrderDomainParam orderDomainParam = new OrderDomainParam(); orderDomainParam.setDocType(orderSignId); orderDomainParam.setOrderNo(orderOneNo); List<OrderDetl> orderDetlList = new ArrayList<>(); for (String[] outLocOrderCs : OutLocOrderCs){ OrderDetl orderDetl = new OrderDetl(); orderDetl.setOrderNo(orderOneNo); orderDetl.setAnfme(Double.parseDouble(outLocOrderCs[1])); Mat mat = matService.getOne(new LambdaQueryWrapper<Mat>().eq(Mat::getMatnr, outLocOrderCs[0])); orderDetl.setMatnr(mat.getMatnr()); orderDetl.setMaktx(mat.getMaktx()); orderDetl.setBatch(mat.getBatch()); orderDetl.setBarcode(mat.getBarcode()); orderDetl.setSpecs(mat.getSpecs()); orderDetl.setModel(mat.getModel()); orderDetl.setStatus(1); orderDetl.setMemo(mat.getMemo()); orderDetl.setHostId(hostId); orderDetlList.add(orderDetl); } orderDomainParam.setOrderDetlList(orderDetlList); boolean formAddOrder = formAddOrder(orderDomainParam); if (!formAddOrder){ throw new CoolException("生成订单失败"); } } log.info("成功导入{}条订单明细!", total); } public int[] getTotal() { return new int[]{total}; } public boolean formAddOrder(OrderDomainParam param){ OrderService orderService = SpringUtils.getBean(OrderService.class); JdbcTemplate jdbcTemplate = SpringUtils.getBean(JdbcTemplate.class); SnowflakeIdWorker snowflakeIdWorker = SpringUtils.getBean(SnowflakeIdWorker.class); OrderDetlService orderDetlService = SpringUtils.getBean(OrderDetlService.class); Order order = orderService.selectByNo(param.getOrderNo(), hostId); if (order != null) { throw new CoolException("单据编号已存在"); } // 判断重复订单号 Integer orderCount = Optional.ofNullable(jdbcTemplate.queryForObject("select count(1) from man_order where order_no = '" + param.getOrderNo() + "'", Integer.class)).orElse(0); Integer orderLogCount = Optional.ofNullable(jdbcTemplate.queryForObject("select count(1) from man_order_log where order_no = '" + param.getOrderNo() + "'", Integer.class)).orElse(0); if (orderCount > 0 || orderLogCount > 0) { throw new CoolException("单据编号已存在"); } Date now = new Date(); order = new Order( String.valueOf(snowflakeIdWorker.nextId()), // 编号[非空] param.getOrderNo(), // 订单编号 DateUtils.convert(now), // 单据日期 param.getDocType(), // 单据类型 null, // 项目编号 null, // null, // 调拨项目编号 null, // 初始票据号 null, // 票据号 null, // 客户编号 null, // 客户 null, // 联系方式 null, // 操作人员 null, // 合计金额 null, // 优惠率 null, // 优惠金额 null, // 销售或采购费用合计 null, // 实付金额 null, // 付款类型 null, // 业务员 null, // 结算天数 null, // 邮费支付类型 null, // 邮费 null, // 付款时间 null, // 发货时间 null, // 物流名称 null, // 物流单号 1L, // 订单状态 1, // 状态 userId, // 添加人员 now, // 添加时间 userId, // 修改人员 now, // 修改时间 null, // 备注 hostId ); if (!orderService.save(order)) { throw new CoolException("保存订单主档失败"); } List<DetlDto> list = new ArrayList<>(); for (OrderDetl orderDetl : param.getOrderDetlList()) { DetlDto dto = new DetlDto(orderDetl.getMatnr(), orderDetl.getBatch()); if (DetlDto.has(list, dto)) { OrderDetl item = orderDetlService.selectItem(order.getId(), orderDetl.getMatnr(), orderDetl.getBatch(), hostId); item.setAnfme(item.getAnfme() + orderDetl.getAnfme()); if (!orderDetlService.updateById(item)) { throw new CoolException("保存订单明细档失败"); } } else { list.add(dto); orderDetl.setOrderId(order.getId()); orderDetl.setOrderNo(order.getOrderNo()); orderDetl.setCreateBy(userId); orderDetl.setCreateTime(now); orderDetl.setUpdateBy(userId); orderDetl.setUpdateTime(now); orderDetl.setStatus(1); orderDetl.setQty(0.0D); orderDetl.setWorkQty(0.0D); if (!orderDetlService.save(orderDetl)) { throw new CoolException("保存订单明细档失败"); } } } return true; } } zy-asrs-wms/src/main/java/com/zy/asrs/wms/controller/TagController.java
@@ -8,6 +8,7 @@ import com.zy.asrs.common.domain.entity.LocInPrintMatExcel; import com.zy.asrs.common.domain.entity.MatExcel; import com.zy.asrs.common.domain.entity.MatPrint; import com.zy.asrs.common.domain.entity.OutLocOrderExcel; import com.zy.asrs.common.utils.*; import com.zy.asrs.common.wms.entity.LocInPrintMat; import com.zy.asrs.common.wms.entity.Mat; @@ -324,4 +325,30 @@ return R.ok("成功导入"+listener.getTotal()[0]+"种待打印物料信息,共生成"+listener.getTotal()[1]+"条待打印条码!"); } /** * excel导入模板下载 */ @RequestMapping(value = "/out/loc/box/excel/import/out/mould") public void outLocBoxExcelImportOutMould(HttpServletResponse response) throws IOException { List<OutLocOrderExcel> excels = new ArrayList<>(); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("导入订单信息出库模板", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); EasyExcel.write(response.getOutputStream(), OutLocOrderExcel.class) .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) .sheet("出库模板") .doWrite(excels); } // excel导入 @PostMapping(value = "/out/loc/box/excel/import/out/auth") @ManagerAuth(memo = "导入订单信息出库") @Transactional public R outLocBoxExcelImportOut(MultipartFile file) throws IOException { OutLocOrderExcelListener listener = new OutLocOrderExcelListener(getUserId(), getHostId()); EasyExcel.read(file.getInputStream(), OutLocOrderExcel.class, listener).sheet().doRead(); return R.ok("成功导入"+listener.getTotal()[0]+"条订单明细!"); } } zy-asrs-wms/src/main/webapp/static/js/pakStore/stockOutOrder.js
New file @@ -0,0 +1,243 @@ var locDetlLayerIdx; var locDetlData = []; var admin; function getCol() { var cols = [ // {field: 'count', align: 'center',title: '出库数量', edit:'text', width: 130, style:'color: blue;font-weight: bold'}, {field: 'anfme', align: 'center',title: '数量'} ,{field: 'locNo$', align: 'center',title: '库位号'} ]; arrRemove(detlCols, 'field', 'anfme'); cols.push.apply(cols, detlCols); cols.push({fixed: 'right', title:'操作', align: 'center', toolbar: '#operate', width: 80}) return cols; } layui.config({ base: baseUrl + "/static/layui/lay/modules/" }).use(['table','laydate', 'form', 'admin'], function() { var table = layui.table; var $ = layui.jquery; var layer = layui.layer; var form = layui.form; admin = layui.admin; tableIns = table.render({ elem: '#chooseData', headers: {token: localStorage.getItem('token')}, data: [], even: true, toolbar: '#toolbar', cellMinWidth: 50, limit: 500, cols: [getCol()], done: function(res, curr, count) { limit(); getOutBound(); } }); // 页面修改 table.on('edit(chooseData)', function (obj) { let index = obj.tr.attr("data-index"); let data = locDetlData[index]; let modify = true; // if (obj.field === 'count'){ // let vle = Number(obj.value); // if (isNaN(vle)) { // layer.msg("请输入数字", {icon: 2}); // modify = false; // } else { // if (vle <= 0) { // layer.msg("数量必须大于零", {icon: 2}); // modify = false; // } // if (vle > Number(data.anfme)) { // layer.msg("出库数量不得大于库存数量", {icon: 2}); // modify = false; // } // } // } if (modify) { data[obj.field] = obj.value; } tableIns.reload({data: locDetlData}); }); // 监听头工具栏事件 table.on('toolbar(chooseData)', function (obj) { switch (obj.event) { case 'outbound': if (locDetlData.length === 0){ layer.msg('请先提取商品库存', {icon: 2}); } else { // var staNo = $("#staNoSelect").val(); // if (staNo === "" || staNo === null){ // layer.msg("请选择出库口", {icon: 2}); // return; // } var orderNo = $("#orderNo").val(); if (orderNo === "" || orderNo === null){ layer.msg("请输入出库单号", {icon: 2}); return; } for (var i=0;i<locDetlData.length;i++){ locDetlData[i]["orderNo"]=orderNo } console.log(locDetlData) console.log(locDetlData[0]) let param = { orderNo: orderNo, locDetls: locDetlData } $.ajax({ url: baseUrl+"/plate/order/out/start", headers: {'token': localStorage.getItem('token')}, data: JSON.stringify(param), contentType:'application/json;charset=UTF-8', method: 'POST', success: function (res) { if (res.code === 200){ locDetlData = []; tableIns.reload({data: locDetlData,done:function (res) {limit();getOutBound();}}); layer.msg(res.msg, {icon: 1}); } else if (res.code === 403){ top.location.href = baseUrl+"/"; } else { layer.msg(res.msg, {icon: 2}) } } }); } break; } }); // 监听行工具事件 table.on('tool(chooseData)', function(obj){ switch (obj.event) { case 'remove': let index = obj.tr.attr("data-index"); locDetlData.splice(index, 1); tableIns.reload({data: locDetlData}); break; } }); // 获取出库口 function getOutBound(){ $.ajax({ url: baseUrl+"/available/take/site", headers: {'token': localStorage.getItem('token')}, method: 'POST', async: false, success: function (res) { if (res.code === 200){ var tpl = $("#takeSiteSelectTemplate").html(); var template = Handlebars.compile(tpl); var html = template(res); $('#staNoSelect').append(html); form.render('select'); } else if (res.code === 403){ top.location.href = baseUrl+"/"; }else { layer.msg(res.msg) } } }) } $(document).on('click','#mat-query', function () { let loadIndex = layer.msg('请求中...', {icon: 16, shade: 0.01, time: false}); locDetlLayerIdx = layer.open({ type: 2, title: false, closeBtn: false, maxmin: false, area: ['90%', '85%'], shadeClose: true, content: 'locDetlQuery.html', success: function(layero, index){ layer.close(loadIndex); } }); }) }) // 添加表格数据 function addTableData(data) { for (var i=0;i<data.length;i++){ let pass = false; for (var j=0;j<locDetlData.length;j++){ if (data[i].matnr === locDetlData[j].matnr && data[i].batch === locDetlData[j].batch && data[i].locNo$ === locDetlData[j].locNo$) { pass = true; break; } } if (pass) { data.splice(i--, 1); } else { data[i]["count"] = data[i]["anfme"]; } } locDetlData.push.apply(locDetlData, data); tableIns.reload({data: locDetlData}); layer.close(locDetlLayerIdx); } // excel导入模板下载 function excelMouldDownload(){ layer.load(1, {shade: [0.1,'#fff']}); location.href = baseUrl + "/out/loc/box/excel/import/out/mould"; layer.closeAll('loading'); } // excel导入 function importExcel() { $("#importExcel").trigger("click"); } function upload(obj){ if(!obj.files) { return; } var file = obj.files[0]; admin.confirm('确认同步 [' + file.name +'] 文件吗?', function (index) { layer.load(1, {shade: [0.1,'#fff']}); var url = baseUrl + "/out/loc/box/excel/import/out/auth"; var form = new FormData(); form.append("file", file); xhr = new XMLHttpRequest(); xhr.open("post", url, true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。 xhr.setRequestHeader('token', localStorage.getItem('token')); xhr.onload = uploadComplete; //请求完成 xhr.onerror = uploadFailed; //请求失败 xhr.onloadend = function () { // // 上传完成重置文件流 layer.closeAll('loading'); $("#importExcel").val(""); }; // xhr.upload.onprogress = progressFunction;//【上传进度调用方法实现】 xhr.upload.onloadstart = function(){//上传开始执行方法 ot = new Date().getTime(); //设置上传开始时间 oloaded = 0;//设置上传开始时,以上传的文件大小为0 }; xhr.send(form); }, function(index){ $("#importExcel").val(""); }); } function uploadComplete(evt) { var res = JSON.parse(evt.target.responseText); if(res.code === 200) { layer.msg(res.msg, {icon: 1}); loadTree(""); } else { layer.msg(res.msg, {icon: 2}); } } function uploadFailed(evt) { var res = JSON.parse(evt.target.responseText); layer.msg(res.msg, {icon: 2}); } zy-asrs-wms/src/main/webapp/views/pakStore/stockOutOrder.html
New file @@ -0,0 +1,144 @@ <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title></title> <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all"> <link rel="stylesheet" href="../../static/css/cool.css" media="all"> <link rel="stylesheet" href="../../static/css/common.css" media="all"> <style> html { height: 100%; padding: 10px; background-color: #f1f1f1; box-sizing: border-box; } body { background-color: #fff; border-radius: 5px; box-shadow: 0 0 3px rgba(0,0,0,.3); padding-bottom: 20px; } #staNoSpan { text-align: center; display: inline-block; width: 100px; font-size: 13px; } .layui-btn-container .layui-form-select { display: inline-block; width: 150px; height: 30px; } .layui-btn-container .layui-form-select.layui-form-selected { display: inline-block; width: 150px; } .layui-btn-container .layui-select-title input { font-size: 13px; } .layui-btn-container .layui-anim.layui-anim-upbit dd { font-size: 13px; } #btn-outbound { margin-left: 60px; display: none; } /*----------------------------------*/ .function-area { padding: 20px 50px; } .function-btn { font-size: 16px; padding: 1px 2px; width: 100px; height: 50px; border-color: #2b425b; border-radius: 4px; border-width: 2px; background: none; border-style: solid; transition: 0.4s; cursor: pointer; letter-spacing: 1.5px; } .function-btn:hover { background-color: #2b425b; color: #fff; } #mat-query { display: none; } </style> </head> <body> <!-- 功能区 --> <div class="function-area"> <button id="mat-query" class="function-btn">提取库存</button> <button class="function-btn" style="width: auto;float:right;" onclick="excelMouldDownload()">导入订单信息出库模板下载</button> </div> <hr> <!-- 表格 --> <div style="padding-bottom: 5px; margin-bottom: 45px"> <!-- 头部 --> <script type="text/html" id="toolbar"> <div class="layui-form"> <div class="layui-form layui-card-header"> <!-- <span id="memeoSpan" style="margin-left: 25px">订单号:</span>--> <!-- <div class="layui-inline">--> <!-- <div class="layui-input-inline">--> <!-- <input id="orderNo" class="layui-input" type="text" name="orderNo" placeholder="订单号" autocomplete="off" style="margin-left: 15px;width: 300px">--> <!-- </div>--> <!-- </div>--> <!-- <button class="layui-btn layui-btn-lg" id="btn-outbound" lay-event="outbound">启动出库</button>--> <!-- 3.导入箱号出库 --> <button class="layui-btn layui-btn-lg" onclick="importExcel()" style="font-size: 12px;width: auto;">导入订单信息出库</button> <span style="display: none"><input id="importExcel" type="file" onchange="upload(this)">启动出库</span> </div> <!-- <div class="layui-btn-container">--> <!-- <!– 1.选择出库口 –>--> <!-- <span id="staNoSpan">订单号:</span>--> <!-- <select id="staNoSelect" lay-verify="required">--> <!-- <option value="">请选择站点</option>--> <!-- </select>--> <!-- 2.启动出库 --> <!-- </div>--> </div> </script> <!-- 行 --> <script type="text/html" id="operate"> <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove">移除</a> </script> <table class="layui-table" id="chooseData" lay-filter="chooseData"></table> </div> <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script> <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script> <script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> <script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> <script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script> <script type="text/javascript" src="../../static/js/pakStore/stockOutOrder.js" charset="utf-8"></script> <script type="text/template" id="takeSiteSelectTemplate"> {{#each data}} <option value="{{siteId}}">{{desc}}</option> {{/each}} </script> </body> </html>