自动化立体仓库 - WMS系统
仓库:
显示在库信息,入库完成后显示成功入库的包数
订单出库页面显示剩余待检包数 (PDA)
未查询到的提示改为显示物料实际状态
拣货单已完成,单据未完成 ✔
单据数量字段显示变更 ✔
拣货单按实际操作时间降序排序 ✔
拣货单明细导出 ✔
拣货单显示创建时间与操作时间 ✔

销售:
解冻 ✔
包号搜索前置 ✔
显示多批号 ✔
17个文件已修改
470 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/ManPakOutController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MobileController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/PakoutController.java 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/PlaController.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/PakOutDTO.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/result/PakoutVo.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/PlaExcelListener.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/ManPakOutMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/picking/picking.js 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/pla/plaDetl.js 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/pla/stockOut.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/picking/picking.html 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pla/locDetlQuery.html 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pla/plaDetl.html 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pla2/plaDetl.html 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pla3/plaDetl.html 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/ManPakOutController.java
@@ -496,4 +496,5 @@
        response.getOutputStream().close();
        return R.ok();
    }
}
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -546,10 +546,10 @@
        Pla pla = plaService.selectByBatchAndPackageNo(batch, packageNo,brand);
        if ((Cools.isEmpty(pla))){
            return R.error("该包物料未录入,无法查询到相关信息");
            return R.error("该包物料未录入,无法查询到相关信息").add(pla);
        }
        if(!(Cools.eq(pla.getStatus(), GlobleParameter.PLA_STATUS_0) || Cools.eq(pla.getStatus(), GlobleParameter.PLA_STATUS_00)) && type != 2){
            return R.error("该包物料不为待入库状态,无法进行入库操作");
            return R.error("该包物料的状态为" + pla.getStatus() +",无法进行入库操作").add(pla);
        }
        return R.ok(pla);
    }
@@ -582,7 +582,7 @@
                throw new CoolException("该包物料未录入,无法查询到相关信息");
            }
            if(!Cools.eq(pla.getStatus(),GlobleParameter.PLA_STATUS_1) && !Cools.eq(pla.getStatus(),GlobleParameter.PLA_STATUS_3)){
                throw new CoolException("该包物料状态不为入库状态,无法转移");
                throw new CoolException("该包物料的状态为" + pla.getStatus() +",无法进行入库操作");
            }
            String sourceLocNo = pla.getLocNo();
src/main/java/com/zy/asrs/controller/PakoutController.java
@@ -1,5 +1,7 @@
package com.zy.asrs.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
@@ -9,20 +11,19 @@
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
import com.zy.asrs.entity.ManLocDetl;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.OrderDetl;
import com.zy.asrs.entity.Pakout;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.OrderDomainParam;
import com.zy.asrs.service.ManLocDetlService;
import com.zy.asrs.service.OrderDetlService;
import com.zy.asrs.service.OrderService;
import com.zy.asrs.service.PakoutService;
import com.zy.asrs.entity.result.PakoutVo;
import com.zy.asrs.service.*;
import com.zy.common.web.BaseController;
import com.zy.system.entity.User;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.*;
@RestController
@@ -36,6 +37,8 @@
    private OrderDetlService orderDetlService;
    @Autowired
    private ManLocDetlService manLocDetlService;
    @Autowired
    private PlaService plaService;
    @RequestMapping(value = "/pakout/{id}/auth")
    @ManagerAuth
@@ -58,8 +61,6 @@
        if (user.getRoleId() != 2 || user.getRoleId() != 24) {
            wrapper.eq("create_by", user.getId());
        }
        if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));}
        return R.ok(pakoutService.selectPage(new Page<>(curr, limit), wrapper));
@@ -352,4 +353,33 @@
        return R.ok();
    }
    @RequestMapping(value = "/pakout/printExport/auth")
    //   @ManagerAuth(memo = "盘点单导出")
    public void export(HttpServletResponse response, @RequestParam String orderNo) throws IOException {
        //从数据库查询数据
        EntityWrapper<Pakout> locCheckEntityWrapper = new EntityWrapper<>();
        locCheckEntityWrapper.eq("doc_num",orderNo);
        List<Pakout> list = pakoutService.selectList(locCheckEntityWrapper);
        List<PakoutVo> pakoutVos=new ArrayList<>();
        for (Pakout pakout: list) {
            PakoutVo pakoutVo = new PakoutVo();
            Pla pla = plaService.selectOne(new EntityWrapper<Pla>()
                    .eq("batch", pakout.getBatch())
                    .eq("package_no", pakout.getBarcode())
                    .eq("brand", pakout.getMaktx()));
            BeanUtils.copyProperties(pla,pakoutVo);
            BeanUtils.copyProperties(pakout,pakoutVo);
            pakoutVos.add(pakoutVo);
        }
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        String fileName = URLEncoder.encode("拣货单", "UTF-8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName+ orderNo + ".xlsx");
        EasyExcel.write(response.getOutputStream(), PakoutVo.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
                .sheet("表1")
                .doWrite(pakoutVos);
    }
}
src/main/java/com/zy/asrs/controller/PlaController.java
@@ -3,6 +3,7 @@
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.annotations.ManagerAuth;
import com.core.common.Cools;
@@ -11,6 +12,7 @@
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.GlobleParameter;
import com.zy.asrs.entity.result.KeyValueVo;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.PlaExcelListener;
import com.zy.asrs.utils.SaasUtils;
@@ -67,6 +69,11 @@
            wrapper.ne("status", "全部出库");
        }
        if (!Cools.isEmpty(param.get("batch")) && param.get("batch").toString().contains(",")){
            String[] batchs = param.get("batch").toString().split(",");
            wrapper.in("batch",batchs);
            param.remove("batch");
        }
        convert(param, wrapper);
        wrapper.orderBy("batch",true).orderBy("package_no" ,true);
@@ -148,7 +155,11 @@
        for (Pla pla : plas){
            if(pla.getStockFreeze() == 0){
                throw new CoolException("库存已被冻结,请重新选择库存");
//                throw new CoolException("库存已被冻结,请重新选择库存");
                System.out.println(pla.getStockFreezeBy() + "," + getUser().getUsername());
                if(!Cools.eq(pla.getStockFreezeBy(),getUser().getUsername())){
                    throw new CoolException("该库存已被其他用户冻结,请重新选择");
                }
            }
            allOrderWeight += pla.getOrderWeight();
@@ -229,7 +240,8 @@
        }
        for (Pla pla : plas){
            if (pla.getStockFreeze() == 0){
                throw new CoolException("库存已被冻结!");
                continue;
//                throw new CoolException("库存已被冻结!");
            }
            pla.setStockFreeze(0);
            pla.setStockFreezeBy(getUser().getUsername());
@@ -248,7 +260,8 @@
        }
        for (Pla pla : plas){
            if (pla.getStockFreeze() == 1){
                throw new CoolException("库位未冻结,无需解冻");
                continue;
//                throw new CoolException("库位未冻结,无需解冻");
            }
            if(!Cools.eq(pla.getStockFreezeBy(),getUser().getUsername())){
                throw new CoolException("无法解冻其他用户冻结的库位");
@@ -337,6 +350,26 @@
        return R.ok().add(res);
    }
    /*************************************** xm-select ***********************************************/
    // xm-select 搜索批号
    @RequestMapping("/pla/batch/all/get/kv")
    @ManagerAuth
    public R getMatDataKV(@RequestParam(required = false) String condition) {
        Wrapper<Pla> wrapper = new EntityWrapper<Pla>().setSqlSelect("batch")
                .andNew().like("batch", condition)
                .groupBy("batch");
        List<Pla> plas = plaService.selectPage(new Page<Pla>(1, 30), wrapper).getRecords();
        List<KeyValueVo> valueVos = new ArrayList<>();
        for (Pla pla : plas) {
            KeyValueVo vo = new KeyValueVo();
            vo.setName(pla.getBatch());
            vo.setValue(pla.getBatch());
            valueVos.add(vo);
        }
        return R.ok().add(valueVos);
    }
    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
        for (Map.Entry<String, Object> entry : map.entrySet()){
            String val = String.valueOf(entry.getValue());
src/main/java/com/zy/asrs/entity/param/PakOutDTO.java
@@ -10,6 +10,7 @@
public class PakOutDTO {
    private String doc_num;
    private Date create_time;
    private Date update_time;
    private Integer status;
    private String custName;
@@ -20,6 +21,13 @@
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.create_time);
    }
    public String getUpdateTime$(){
        if (Cools.isEmpty(this.update_time)){
            return "";
        }
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.create_time);
    }
    public String getStatus$(){
        if (null == this.status){ return null; }
        switch (this.status){
src/main/java/com/zy/asrs/entity/result/PakoutVo.java
@@ -1,19 +1,45 @@
package com.zy.asrs.entity.result;
import com.alibaba.excel.annotation.ExcelProperty;
import com.zy.asrs.entity.Pla;
import lombok.Data;
/**
 * Created by vincent on 2021/3/22
 */
@Data
public class PakoutVo {
public class PakoutVo extends Pla {
    private static final long serialVersionUID = 1L;
    @ExcelProperty({"单据", "单据编号"})
    private String docNum;
    @ExcelProperty({"单据", "库位"})
    private String locNo;
    private String matnr;
    @ExcelProperty({"单据", "批号"})
    private String batch;
    @ExcelProperty({"单据", "包号"})
    private String barcode;
    @ExcelProperty({"单据", "牌号"})
    private String maktx;
    @ExcelProperty({"单据", "重量"})
    private Double anfme;
    private String zpallet;
    @ExcelProperty({"单据", "拣货重量"})
    private String count;
    @ExcelProperty({"单据", "状态"})
    private String status$;
    @ExcelProperty({"单据", "备注"})
    private String memo;
    @ExcelProperty({"单据", "发货时间"})
    private String specs;
}
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -1268,6 +1268,7 @@
        manPakOut.setCount(manPakOut.getCount() + anfme);
        if (manPakOut.getAnfme().equals(manPakOut.getCount())){
            manPakOut.setStatus(1);
            manPakOut.setUpdateTime(new Date());
            manPakOutService.updateById(manPakOut);
        }
@@ -1356,6 +1357,7 @@
        manPakOut.setMaktx(plaNew.getBrand());
        manPakOut.setBatch(plaNew.getBatch());
        manPakOut.setBarcode(plaNew.getPackageNo() + "");
        manPakOut.setUpdateTime(new Date());
        manPakOutService.updateById(manPakOut);
src/main/java/com/zy/asrs/utils/PlaExcelListener.java
@@ -87,12 +87,13 @@
//                throw new CoolException("保存商品信息失败,商品编码:" + excel.getMatnr());
//            }
            total++;
        }else if(Cools.eq(pla.getStatus(),GlobleParameter.PLA_STATUS_0) || Cools.eq(pla.getStatus(),GlobleParameter.PLA_STATUS_1) || Cools.eq(pla.getStatus(),GlobleParameter.PLA_STATUS_00)){
        }else if(Cools.eq(pla.getStatus(),GlobleParameter.PLA_STATUS_0) || Cools.eq(pla.getStatus(),GlobleParameter.PLA_STATUS_00)){
            excel.setId(pla.getId());
            excel.setCreateTime(pla.getCreateTime());
            excel.setStatus(pla.getStatus());
            excel.setPakinTime(pla.getPakinTime());
            excel.setStash(pla.getStash());
            excel.setStockFreeze(pla.getStockFreeze());
            if(Cools.isEmpty(excel.getLocNo())){
                excel.setLocNo(pla.getLocNo());
            }
@@ -174,7 +175,7 @@
        pla.setStep(2);
        pla.setModifyTime(new Date());
        pla.setStatus(GlobleParameter.PLA_STATUS_00);
        pla.setStockFreeze(1);
        pla.setStockFreeze(Cools.isEmpty(excel.getStockFreeze()) ? 1 : excel.getStockFreeze());
        pla.setWeightAnfme(pla.getWeight());
        Mat mat = matService.selectByMaktx(pla.getBrand());
        if(Cools.isEmpty(mat)){
src/main/resources/mapper/ManPakOutMapper.xml
@@ -23,11 +23,11 @@
    <select id="selectPakOut" resultType="com.zy.asrs.entity.param.PakOutDTO">
        select * from (
          SELECT status, doc_num,MAX(create_time) as create_time, cust_name as custName FROM man_pakout
          SELECT status, doc_num,MAX(create_time) as create_time,MAX(update_time) as update_time, cust_name as custName FROM man_pakout
           where 1=1
            <include refid="selectPakOutSql"></include>
          GROUP BY doc_num,cust_name,status
      ) t ORDER BY status
      ) t ORDER BY status,update_time DESC
        OFFSET ((#{curr}-1)*#{limit}) ROWS
        FETCH NEXT #{limit} ROWS ONLY;
src/main/webapp/static/js/picking/picking.js
@@ -38,7 +38,8 @@
            ,{align: 'center', title: '明细', toolbar: '#tbLook', minWidth: 160, width: 160}
            ,{field: 'status$', align: 'center',title: '状态'}
            ,{field: 'custName', align: 'center',title: '客户名称', width: 160}
            ,{field: 'createTime$', align: 'center',title: '操作时间'}
            ,{field: 'createTime$', align: 'center',title: '创建时间'}
            ,{field: 'updateTime$', align: 'center',title: '操作时间'}
            ,{align: 'center', title: '操作', toolbar: '#operate'}
        ]],
@@ -105,6 +106,9 @@
            case "del":
                doDel(data);
                break;
            case "printExcel":
                printExcel(data);
                break;
            case "look":
                var $a = $(obj.tr).find('a[lay-event="look"]');
                var offset = $a.offset();
@@ -142,7 +146,7 @@
                                // ,{field: 'matnr', align: 'center',title: '物料号'}
                                ,{field: 'maktx', align: 'center',title: '牌号'}
                                ,{field: 'anfme', align: 'center',title: '数量'}
                                ,{field: 'createTime$', align: 'center',title: '操作时间'}
                                ,{field: 'updateTime$', align: 'center',title: '操作时间'}
                                ,{field: 'count', align: 'center',title: '完成数'}
                                ,{field: 'status$', align: 'center',title: '状态'}
                                ,{field: 'memo', align: 'center',title: '备注'}
@@ -329,10 +333,9 @@
                        for (let i = 0; i < res.data.length; i++){
                            sum += res.data[i].anfme;
                            console.log("sum:"+res.data.anfme);
                        }
                        json.anfmeSum = sum;
                        json.custName = json.data[0].custName;
                        var barcodeUrl = baseUrl + "/ManPakOut/code/auth?type=1&param=" + res.data[0].docNum;
                        console.log("barcodeUrl:"+barcodeUrl);
                        json.barcodeUrl = barcodeUrl;
@@ -393,9 +396,14 @@
        });
    }
    function printExcel(data){
        layer.confirm('确定导出Excel吗', {shadeClose: true}, function(){
            layer.closeAll();
            layer.load(1, {shade: [0.1,'#fff']});
            location.href = baseUrl+"/pakout/printExport/auth?orderNo="+data.doc_num;
            layer.closeAll('loading');
        });
    }
});
src/main/webapp/static/js/pla/plaDetl.js
@@ -93,7 +93,7 @@
layui.config({
    base: baseUrl + "/static/layui/lay/modules/"
}).use(['table','laydate', 'form', 'admin', 'dropdown'], function() {
}).use(['table','laydate', 'form', 'admin', 'xmSelect', 'dropdown'], function() {
    var dropdown = layui.dropdown;
    var table = layui.table;
    var $ = layui.jquery;
@@ -201,6 +201,36 @@
            });
        }
    });
    // 渲染物料选择
    var matXmSelect = xmSelect.render({
        el: '#mat',
        style: {
            width: '270px',
        },
        autoRow: true,
        toolbar: { show: true },
        filterable: true,
        remoteSearch: true,
        remoteMethod: function(val, cb, show){
            $.ajax({
                url: baseUrl+"/pla/batch/all/get/kv",
                headers: {'token': localStorage.getItem('token')},
                data: {
                    condition: val
                },
                method: 'POST',
                success: function (res) {
                    if (res.code === 200){
                        cb(res.data)
                    } else {
                        cb([]);
                        layer.msg(res.msg, {icon: 2});
                    }
                }
            });
        }
    })
    // 复选框事件
    table.on('checkbox(plaDetl)', function(obj){
@@ -559,6 +589,10 @@
        if(customValue !== undefined){
            searchData['type'] = customValue
        }
        if(searchData.select){
            searchData.batch = searchData.select;
            searchData.select = null;
        }
        (child ? parent.tableIns : tableIns).reload({
            where: searchData,
            page: {
src/main/webapp/static/js/pla/stockOut.js
@@ -149,10 +149,10 @@
                            layer.msg("选中的明细中含有多种牌号,请重新选择");
                            return;
                        }
                        if(data[i].stockFreeze === 0){
                            layer.msg("选中的明细中含有冻结的库存,请解冻后操作");
                            return;
                        }
                        // if(data[i].stockFreeze === 0){
                        //     layer.msg("选中的明细中含有冻结的库存,请解冻后操作");
                        //     return;
                        // }
                    }
                    layer.open({
src/main/webapp/views/picking/picking.html
@@ -76,15 +76,7 @@
</script>
<!-- 表格操作列 -->
<script type="text/html" id="operate">
    {{# if (d.settle == 0 || d.settle == 1) { }}
    <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="edit">修改</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs btn-delete" lay-event="del">删除</a>
    {{# } }}
    {{# if ((d.settle == 0 || d.settle == 1) && (d.docType == 21 || d.docType == 11 || d.docType == 12)) { }}
    {{# } }}
    {{# if (d.settle == 2) { }}
    <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="complete">完结</a>
    {{# } }}
    <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="printExcel">导出Excel</a>
    <a class="layui-btn layui-btn-primary layui-border-blue layui-btn-xs btn-complete" lay-event="btnPrint2">打印</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs btn-delete" lay-event="del">删除</a>
 <!--   <a class="layui-btn layui-btn-primary layui-btn-xs btn-edit" lay-event="btnPrint"><img src="../../static/image/nav/fn_3.png" alt="二维码"></a>
@@ -174,6 +166,7 @@
        <div style="height: 50px;text-align: center;font-size: 25px;">{{docNum}}</div>
        <div style="height: 40px;text-align: left;line-height: 40px;font-size: 20px;">出库单号:{{docNum}}</div>
        <div style="height: 40px;text-align: left;line-height: 40px;font-size: 20px;">总数量:{{anfmeSum}}</div>
        <div style="height: 40px;text-align: left;line-height: 40px;font-size: 20px;">客户名称:{{custName}}</div>
    </div>
    {{#each data}}
    <table width="100%" style="border:0;border-bottom:#0C0C0C solid 2px; margin-bottom:20px;padding:0;overflow: hidden;font-size: xx-small;table-layout: fixed;">
@@ -212,6 +205,14 @@
                {{this.locNo}}
            </td>
        </tr>
        <tr style="height: 30px; font-size: 15px;">
            <td align="left" scope="col" colspan="1" style="width: 100px;">
                发货时间:
            </td>
            <td align="left" scope="col" colspan="1">
                {{this.specs}}
            </td>
        </tr>
    </table>
    {{/each}}
</script>
src/main/webapp/views/pla/locDetlQuery.html
@@ -57,9 +57,10 @@
    <!-- 搜索栏 -->
    <div id="search-box">
        <div class="layui-form layui-card-header">
            <div class="layui-inline">
            <div class="layui-inline" style="width: 270px">
                <div class="layui-input-inline">
                    <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
                    <div id="mat" name="mat">
                    </div>
                </div>
            </div>
            <div class="layui-inline">
@@ -94,6 +95,15 @@
                        <option value="待出库">待出库</option>
                        <option value="部分出库">部分出库</option>
                        <option value="全部出库">全部出库</option>
                    </select>
                </div>
            </div>
            <div class="layui-inline">
                <div class="layui-input-inline">
                    <select name="stock_freeze">
                        <option value="">是否冻结</option>
                        <option value="0">是</option>
                        <option value="1">否</option>
                    </select>
                </div>
            </div>
@@ -238,7 +248,7 @@
    layui.config({
        base: baseUrl + "/static/layui/lay/modules/"
    }).use(['table','laydate', 'form', 'admin', 'tableMerge'], function() {
    }).use(['table','laydate', 'form', 'admin', 'tableMerge', 'xmSelect'], function() {
        var table = layui.table;
        var $ = layui.jquery;
        var layer = layui.layer;
@@ -339,6 +349,36 @@
            }
        });
        // 渲染物料选择
        var matXmSelect = xmSelect.render({
            el: '#mat',
            style: {
                width: '270px',
            },
            autoRow: true,
            toolbar: { show: true },
            filterable: true,
            remoteSearch: true,
            remoteMethod: function(val, cb, show){
                $.ajax({
                    url: baseUrl+"/pla/batch/all/get/kv",
                    headers: {'token': localStorage.getItem('token')},
                    data: {
                        condition: val
                    },
                    method: 'POST',
                    success: function (res) {
                        if (res.code === 200){
                            cb(res.data)
                        } else {
                            cb([]);
                            layer.msg(res.msg, {icon: 2});
                        }
                    }
                });
            }
        })
        // 监听头工具栏事件
        table.on('toolbar(stockOut)', function (obj) {
            var checkStatus = table.checkStatus(obj.config.id);
@@ -371,6 +411,10 @@
        $.each($('#search-box [name]').serializeArray(), function() {
            searchData[this.name] = this.value;
        });
        if(searchData.select){
            searchData.batch = searchData.select;
            searchData.select = null;
        }
        locDetlTableIns.reload({
            where: searchData,
        });
src/main/webapp/views/pla/plaDetl.html
@@ -140,12 +140,28 @@
<!-- 搜索栏 -->
<div id="search-box" >
    <div class="layui-form layui-card-header">
        <div class="layui-inline">
        <div class="layui-inline" style="width: 70px">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
                <input class="layui-input" type="text" name="package_noMin" placeholder="最小包号" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
        <div class="layui-inline" style="width: 70px">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="package_noMax" placeholder="最大包号" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline" style="width: 270px">
            <div class="layui-input-inline">
                <div id="mat" name="mat">
                </div>
            </div>
        </div>
<!--        <div class="layui-inline">-->
<!--            <div class="layui-input-inline">-->
<!--                <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">-->
<!--            </div>-->
<!--        </div>-->
        <div class="layui-inline" style="width: 80px">
            <div class="layui-input-inline cool-auto-complete">
                <input id="maktx" class="layui-input" type="text" style="display: none">
                <input id="maktxV" name="brand" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" placeholder="牌号" type="text" onfocus=this.blur()>
@@ -156,12 +172,12 @@
                </div>
            </div>
        </div>
        <div class="layui-inline">
        <div class="layui-inline" style="width: 80px">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="type" placeholder="物资类别" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
        <div class="layui-inline" style="width: 80px">
            <div class="layui-input-inline">
                <select name="status">
                    <option value="">选择状态</option>
@@ -183,24 +199,14 @@
                </select>
            </div>
        </div>
        <div class="layui-inline">
        <div class="layui-inline" style="width: 80px">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="package_type" placeholder="包装类型" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
        <div class="layui-inline" style="width: 80px">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="zpallet_type" placeholder="托盘类型" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="package_noMin" placeholder="最小包号" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="package_noMax" placeholder="最大包号" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
src/main/webapp/views/pla2/plaDetl.html
@@ -129,10 +129,10 @@
<!-- 功能区 -->
<div class="function-area">
<!--    <button id="rework" style="alignment: right" class="function-btn">重做</button>-->
    <!--    <button id="rework" style="alignment: right" class="function-btn">重做</button>-->
    <button id="updateZpallet" style="alignment: right; display: none" class="function-btn1">换包装/托盘/缠膜</button>  |
    <button id="sellout" style="alignment: right; display: none" class="function-btn">出库</button>
<!--    <button id="pickup" style="alignment: right" class="function-btn">取货</button>  |-->
    <!--    <button id="pickup" style="alignment: right" class="function-btn">取货</button>  |-->
    <button id="returned" style="alignment: right; display: none" class="function-btn">退回</button>
    <button id="updateOwner" style="alignment: right; display: none" class="function-btn">变更主体</button>
</div>
@@ -140,12 +140,28 @@
<!-- 搜索栏 -->
<div id="search-box" >
    <div class="layui-form layui-card-header">
        <div class="layui-inline">
        <div class="layui-inline" style="width: 70px">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
                <input class="layui-input" type="text" name="package_noMin" placeholder="最小包号" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
        <div class="layui-inline" style="width: 70px">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="package_noMax" placeholder="最大包号" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline" style="width: 270px">
            <div class="layui-input-inline">
                <div id="mat" name="mat">
                </div>
            </div>
        </div>
        <!--        <div class="layui-inline">-->
        <!--            <div class="layui-input-inline">-->
        <!--                <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">-->
        <!--            </div>-->
        <!--        </div>-->
        <div class="layui-inline" style="width: 80px">
            <div class="layui-input-inline cool-auto-complete">
                <input id="maktx" class="layui-input" type="text" style="display: none">
                <input id="maktxV" name="brand" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" placeholder="牌号" type="text" onfocus=this.blur()>
@@ -161,9 +177,8 @@
                <input class="layui-input" type="text" name="type" value="改性树脂" placeholder="物资类别" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
        <div class="layui-inline" style="width: 80px">
            <div class="layui-input-inline">
<!--                <input class="layui-input" type="text" name="status" placeholder="状态" autocomplete="off">-->
                <select name="status">
                    <option value="">选择状态</option>
                    <option value="暂入库">暂入库</option>
@@ -184,24 +199,14 @@
                </select>
            </div>
        </div>
        <div class="layui-inline">
        <div class="layui-inline" style="width: 80px">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="package_type" placeholder="包装类型" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
        <div class="layui-inline" style="width: 80px">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="zpallet_type" placeholder="托盘类型" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="package_noMin" placeholder="最小包号" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="package_noMax" placeholder="最大包号" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
@@ -213,14 +218,14 @@
            <!--            <div class="layui-input-inline">-->
            <!--                <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="起始时间 - 终止时间" autocomplete="off" style="width: 300px">-->
            <!--            </div>-->
            <div class="layui-input-inline" style="width: 290px">
                <input type="text" class="layui-input" name="create_time" id="ID-laydate-range-datetime" placeholder="起始时间 - 终止时间">
            <div class="layui-input-inline">
                <input type="text" class="layui-input"  style="width: 290px" name="create_time" id="ID-laydate-range-datetime" placeholder="起始时间 - 终止时间">
            </div>
        </div>
        <!-- 待添加 -->
        <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block">
            <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">搜索</button>
            <button id="reset" data-value="改性树脂" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">重置</button>
            <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">重置</button>
            <!--        <button id="unreason" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="unreason">查看异常数据</button>-->
        </div>
    </div>
@@ -296,6 +301,7 @@
            </div>
        </div>
    </div>
</div>
<script type="text/html" id="toolbar">
    <div class="layui-btn-container">
@@ -318,8 +324,8 @@
                <li><a onclick="importExcel()" style="font-size: 12px"><i class="layui-icon layui-icon-upload"></i>导入 Excel</a></li>
                <li style="display: none"><input id="importExcel" type="file" onchange="upload(this)" ></li>
                <hr>
<!--                <li class="title">2nd menu</li>-->
<!--                <li><a onclick="exportExcel()" style="font-size: 12px"><i class="layui-icon layui-icon-export"></i>导出 Excel</a></li>-->
                <!--                <li class="title">2nd menu</li>-->
                <!--                <li><a onclick="exportExcel()" style="font-size: 12px"><i class="layui-icon layui-icon-export"></i>导出 Excel</a></li>-->
            </ul>
        </div>
        <!--        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right;margin-right: -10px">导出</button>-->
@@ -376,9 +382,9 @@
                            Address:No. 188, Taizhou Bay Avenue, Taizhou Bay New Area, Taizhou City, Zhejiang Province
                        </div>
                    </div>
<!--                    <div class="layui-row" style="font-size: xx-large; text-align: left; margin-left: 40px;">-->
<!--                        </n>聚乳酸 Polylactic Acid-->
<!--                    </div>-->
                    <!--                    <div class="layui-row" style="font-size: xx-large; text-align: left; margin-left: 40px;">-->
                    <!--                        </n>聚乳酸 Polylactic Acid-->
                    <!--                    </div>-->
                    <div class="layui-row" style="alignment: center; margin-left: 65px;">
                        <table class="contain" width="400" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
                            <tr style="height: 74px" >
@@ -426,7 +432,7 @@
<!-- 模板3 -->
<script type="text/template" id="templatePreview1" class="template-qrcode">
    <div class="template-preview">
    {{#each data}}
        {{#each data}}
        <div class="layui-row" style="height: 230px;width: 750px; color:#000; margin-top: 40px">
            <div class="layui-col-xs6" style="height: auto; margin-top: 25px; margin-left: -20px">
                <img src="../../static/image/hneLogo.png" style="display: inline-block; width: 40%;height: 30%; margin-left: 30px; color:#000;">
@@ -436,9 +442,9 @@
                No.188 Taizhou Bay Avenue, Taizhou Bay New Area, Taizhou City, Zhejiang Province. P.R.China
            </div>
        </div>
<!--        <div class="layui-row" style="font-size: xx-large; text-align: left; margin-left: 40px;">-->
<!--            聚乳酸 Polylactic Acid-->
<!--        </div>-->
        <!--        <div class="layui-row" style="font-size: xx-large; text-align: left; margin-left: 40px;">-->
        <!--            聚乳酸 Polylactic Acid-->
        <!--        </div>-->
        <div class="layui-row" style="alignment: center; margin-left: 35px; margin-top: -20px; margin-bottom: 3.7px;">
            <table class="contain" width="500" style="overflow: hidden;table-layout: fixed; color:#000; font-size: 35px;text-align: left">
                <tr style="height: 100px;" >
@@ -446,7 +452,7 @@
                </tr>
                <tr style="height: 100px; text-align: left" >
                    <td align="center" scope="col" colspan="2" style="font-weight: bold;color: black; text-align: left; padding-left: 20px"><strong>牌号: REVODE {{this.brand}}</strong></td>
<!--                    <td align="center" colspan="1" style="font-weight: bold;color: black;overflow:hidden; white-space:normal; "><strong style="font-weight: bold;color: black;">REVODE {{this.brand}}</strong></td>-->
                    <!--                    <td align="center" colspan="1" style="font-weight: bold;color: black;overflow:hidden; white-space:normal; "><strong style="font-weight: bold;color: black;">REVODE {{this.brand}}</strong></td>-->
                </tr>
                <tr style="height: 100px;text-align: left">
                    <td align="center" colspan="2" style="font-weight: bold;color: black; text-align: left; padding-left: 20px"><strong>批号:{{this.batch}}</strong></td>
@@ -467,8 +473,8 @@
                </tr>
            </table>
        </div>
    </br>
    {{/each}}
        </br>
        {{/each}}
    </div>
</script>
src/main/webapp/views/pla3/plaDetl.html
@@ -129,10 +129,10 @@
<!-- 功能区 -->
<div class="function-area">
<!--    <button id="rework" style="alignment: right" class="function-btn">重做</button>-->
    <!--    <button id="rework" style="alignment: right" class="function-btn">重做</button>-->
    <button id="updateZpallet" style="alignment: right; display: none" class="function-btn1">换包装/托盘/缠膜</button>  |
    <button id="sellout" style="alignment: right; display: none" class="function-btn">出库</button>
<!--    <button id="pickup" style="alignment: right" class="function-btn">取货</button>  |-->
    <!--    <button id="pickup" style="alignment: right" class="function-btn">取货</button>  |-->
    <button id="returned" style="alignment: right; display: none" class="function-btn">退回</button>
    <button id="updateOwner" style="alignment: right; display: none" class="function-btn">变更主体</button>
</div>
@@ -140,12 +140,28 @@
<!-- 搜索栏 -->
<div id="search-box" >
    <div class="layui-form layui-card-header">
        <div class="layui-inline">
        <div class="layui-inline" style="width: 70px">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
                <input class="layui-input" type="text" name="package_noMin" placeholder="最小包号" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
        <div class="layui-inline" style="width: 70px">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="package_noMax" placeholder="最大包号" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline" style="width: 270px">
            <div class="layui-input-inline">
                <div id="mat" name="mat">
                </div>
            </div>
        </div>
        <!--        <div class="layui-inline">-->
        <!--            <div class="layui-input-inline">-->
        <!--                <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">-->
        <!--            </div>-->
        <!--        </div>-->
        <div class="layui-inline" style="width: 80px">
            <div class="layui-input-inline cool-auto-complete">
                <input id="maktx" class="layui-input" type="text" style="display: none">
                <input id="maktxV" name="brand" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" placeholder="牌号" type="text" onfocus=this.blur()>
@@ -161,9 +177,8 @@
                <input class="layui-input" type="text" name="type" value="纯树脂" placeholder="物资类别" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
        <div class="layui-inline" style="width: 80px">
            <div class="layui-input-inline">
<!--                <input class="layui-input" type="text" name="status" placeholder="状态" autocomplete="off">-->
                <select name="status">
                    <option value="">选择状态</option>
                    <option value="暂入库">暂入库</option>
@@ -184,24 +199,14 @@
                </select>
            </div>
        </div>
        <div class="layui-inline">
        <div class="layui-inline" style="width: 80px">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="package_type" placeholder="包装类型" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
        <div class="layui-inline" style="width: 80px">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="zpallet_type" placeholder="托盘类型" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="package_noMin" placeholder="最小包号" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="package_noMax" placeholder="最大包号" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
@@ -213,14 +218,14 @@
            <!--            <div class="layui-input-inline">-->
            <!--                <input class="layui-input layui-laydate-range" name="create_time" type="text" placeholder="起始时间 - 终止时间" autocomplete="off" style="width: 300px">-->
            <!--            </div>-->
            <div class="layui-input-inline" style="width: 290px">
                <input type="text" class="layui-input" name="create_time" id="ID-laydate-range-datetime" placeholder="起始时间 - 终止时间">
            <div class="layui-input-inline">
                <input type="text" class="layui-input"  style="width: 290px" name="create_time" id="ID-laydate-range-datetime" placeholder="起始时间 - 终止时间">
            </div>
        </div>
        <!-- 待添加 -->
        <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block">
            <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">搜索</button>
            <button id="reset" data-value="纯树脂" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">重置</button>
            <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">重置</button>
            <!--        <button id="unreason" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="unreason">查看异常数据</button>-->
        </div>
    </div>
@@ -296,6 +301,7 @@
            </div>
        </div>
    </div>
</div>
<script type="text/html" id="toolbar">
    <div class="layui-btn-container">
@@ -318,8 +324,8 @@
                <li><a onclick="importExcel()" style="font-size: 12px"><i class="layui-icon layui-icon-upload"></i>导入 Excel</a></li>
                <li style="display: none"><input id="importExcel" type="file" onchange="upload(this)" ></li>
                <hr>
<!--                <li class="title">2nd menu</li>-->
<!--                <li><a onclick="exportExcel()" style="font-size: 12px"><i class="layui-icon layui-icon-export"></i>导出 Excel</a></li>-->
                <!--                <li class="title">2nd menu</li>-->
                <!--                <li><a onclick="exportExcel()" style="font-size: 12px"><i class="layui-icon layui-icon-export"></i>导出 Excel</a></li>-->
            </ul>
        </div>
        <!--        <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="float: right;margin-right: -10px">导出</button>-->
@@ -376,9 +382,9 @@
                            Address:No. 188, Taizhou Bay Avenue, Taizhou Bay New Area, Taizhou City, Zhejiang Province
                        </div>
                    </div>
<!--                    <div class="layui-row" style="font-size: xx-large; text-align: left; margin-left: 40px;">-->
<!--                        </n>聚乳酸 Polylactic Acid-->
<!--                    </div>-->
                    <!--                    <div class="layui-row" style="font-size: xx-large; text-align: left; margin-left: 40px;">-->
                    <!--                        </n>聚乳酸 Polylactic Acid-->
                    <!--                    </div>-->
                    <div class="layui-row" style="alignment: center; margin-left: 65px;">
                        <table class="contain" width="400" style="overflow: hidden;font-size: xx-small;table-layout: fixed;">
                            <tr style="height: 74px" >
@@ -426,7 +432,7 @@
<!-- 模板3 -->
<script type="text/template" id="templatePreview1" class="template-qrcode">
    <div class="template-preview">
    {{#each data}}
        {{#each data}}
        <div class="layui-row" style="height: 230px;width: 750px; color:#000; margin-top: 40px">
            <div class="layui-col-xs6" style="height: auto; margin-top: 25px; margin-left: -20px">
                <img src="../../static/image/hneLogo.png" style="display: inline-block; width: 40%;height: 30%; margin-left: 30px; color:#000;">
@@ -436,9 +442,9 @@
                No.188 Taizhou Bay Avenue, Taizhou Bay New Area, Taizhou City, Zhejiang Province. P.R.China
            </div>
        </div>
<!--        <div class="layui-row" style="font-size: xx-large; text-align: left; margin-left: 40px;">-->
<!--            聚乳酸 Polylactic Acid-->
<!--        </div>-->
        <!--        <div class="layui-row" style="font-size: xx-large; text-align: left; margin-left: 40px;">-->
        <!--            聚乳酸 Polylactic Acid-->
        <!--        </div>-->
        <div class="layui-row" style="alignment: center; margin-left: 35px; margin-top: -20px; margin-bottom: 3.7px;">
            <table class="contain" width="500" style="overflow: hidden;table-layout: fixed; color:#000; font-size: 35px;text-align: left">
                <tr style="height: 100px;" >
@@ -446,7 +452,7 @@
                </tr>
                <tr style="height: 100px; text-align: left" >
                    <td align="center" scope="col" colspan="2" style="font-weight: bold;color: black; text-align: left; padding-left: 20px"><strong>牌号: REVODE {{this.brand}}</strong></td>
<!--                    <td align="center" colspan="1" style="font-weight: bold;color: black;overflow:hidden; white-space:normal; "><strong style="font-weight: bold;color: black;">REVODE {{this.brand}}</strong></td>-->
                    <!--                    <td align="center" colspan="1" style="font-weight: bold;color: black;overflow:hidden; white-space:normal; "><strong style="font-weight: bold;color: black;">REVODE {{this.brand}}</strong></td>-->
                </tr>
                <tr style="height: 100px;text-align: left">
                    <td align="center" colspan="2" style="font-weight: bold;color: black; text-align: left; padding-left: 20px"><strong>批号:{{this.batch}}</strong></td>
@@ -467,8 +473,8 @@
                </tr>
            </table>
        </div>
    </br>
    {{/each}}
        </br>
        {{/each}}
    </div>
</script>