自动化立体仓库 - WMS系统
lty
2 天以前 640404cd2545c1f0869c69d5b66e0c7108c36b45
#计划组货单下发上报
13个文件已修改
3个文件已添加
749 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OrderController.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OutController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/GroupOrderConfirmParam.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/GwmsGenerateInventoryDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/OrderMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OpenService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/OrderService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/OrderDetlMapper.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/OrderMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/order/out.js 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/orderTableMes.js 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/order/outMes.html 321 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -476,6 +476,19 @@
        return R.ok(param);
    }
    /**
     * 计划组货单
     */
    @PostMapping("/groupOrderConfirm/auth/v1")
    @AppAuth(memo = "计划单据下发")
    public synchronized R groupOrderConfirm(@RequestHeader(required = false) String appkey,
                                                        @RequestBody GroupOrderConfirmParam param,
                                                        HttpServletRequest request) {
//        auth(appkey, param, request);
        openService.groupOrderConfirm(param);
        return R.ok(param);
    }
    /*...........................上饶江铜..............以上.............徐工汉云...........................*/
}
src/main/java/com/zy/asrs/controller/OrderController.java
@@ -83,7 +83,7 @@
        if (!Cools.isEmpty(orderNo)) {
            wrapper.like("order_no", orderNo);
        }
        wrapper.le("settle", 2).eq("status", 1);
        wrapper.le("settle", 2).eq("status", 1).ne("doc_type",25);
        wrapper.orderBy("create_time", false);
        List<Order> orders = orderService.selectList(wrapper);
        // 保留出库单
@@ -104,6 +104,34 @@
        return R.ok().add(orders);
    }
    @RequestMapping(value = "/order/nav/listMes/auth")
    @ManagerAuth
    public R navListMes(@RequestParam(required = false) String orderNo){
        EntityWrapper<Order> wrapper = new EntityWrapper<>();
        if (!Cools.isEmpty(orderNo)) {
            wrapper.like("order_no", orderNo);
        }
        wrapper.le("settle", 2).eq("status", 0).eq("doc_type", 25);
        wrapper.orderBy("create_time", false);
        List<Order> orders = orderService.selectList(wrapper);
//        // 保留出库单
//        if (!Cools.isEmpty(orders)) {
//            Iterator<Order> iterator = orders.iterator();
//            while (iterator.hasNext()) {
//                Order order = iterator.next();
//                if (order.getDocType() != null) {
//                    DocType docType = docTypeService.selectById(order.getDocType());
//                    if (docType != null) {
//                        if (docType.getPakout() == 0) {
//                            iterator.remove();
//                        }
//                    }
//                }
//            }
//        }
        return R.ok().add(orders);
    }
    @RequestMapping(value = "/order/head/page/auth")
    @ManagerAuth
    public R head(@RequestParam(defaultValue = "1")Integer curr,
src/main/java/com/zy/asrs/controller/OutController.java
@@ -5,6 +5,7 @@
import com.core.common.*;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.PakoutRequest;
import com.zy.asrs.entity.param.StockOutParam;
import com.zy.asrs.service.*;
import com.zy.common.model.LocDetlDto;
@@ -55,7 +56,12 @@
        Thread.sleep(200);
        return R.ok().add(orderDetlService.selectByOrderId(orderId).stream().map(OrderDetl::getId).distinct().collect(Collectors.toList()));
    }
    @PostMapping("/getMesOrder/auth")
    @ManagerAuth
    public R getMesOrder() {
        List<String> orderNoList = orderService.getOrderNosByDocType(25L);
        return R.ok().add(orderNoList);
    }
    @PostMapping("/out/pakout/preview/auth")
    @ManagerAuth
    public R pakoutPreview(@RequestBody List<Long> ids) {
@@ -159,7 +165,9 @@
    @PostMapping("/out/pakout/auth")
    @ManagerAuth(memo = "订单出库")
    public synchronized R pakout(@RequestBody List<LocDto> locDtos) throws InterruptedException {
    public synchronized R pakout(@RequestBody PakoutRequest request) throws InterruptedException {
        List<LocDto> locDtos = request.getTableCache();
        String optionValue = request.getOptionValue();
        if (Cools.isEmpty(locDtos)) {
            return R.parse(BaseRes.PARAM);
        }
@@ -246,7 +254,7 @@
                    workService.stockOut(staNo, locDetlDtos,
                            order.getDocType() != null && order.getDocType() == 23
                                    ? IoWorkType.CHECK_OUT : null,
                            getUserId());
                            getUserId(),optionValue);
                } else {
                    throw new CoolException("所选库位状态不为F/D,库位号:" +
                            locMast.getLocNo() + ",当前状态:" +
src/main/java/com/zy/asrs/entity/param/GroupOrderConfirmParam.java
New file
@@ -0,0 +1,23 @@
package com.zy.asrs.entity.param;
import lombok.Data;
import java.util.List;
@Data
public class GroupOrderConfirmParam {
    private String groupOrderNumber; //组货单号
    private String groupStatus; //组货状态:0未确认组货、1确认组货
    private List<PackageGroupNo> packageGroupNos; // 多个包装组号
    private List<VolumeNumber> volumeNumbers; // 多个包装组号
    @Data
    public static class PackageGroupNo {
        private String packageGroupNo;
    }
    @Data
    public static class VolumeNumber {
        private String volumeNumber;
    }
}
src/main/java/com/zy/asrs/entity/param/GwmsGenerateInventoryDto.java
@@ -15,6 +15,8 @@
    private List<MatList> matList; // 木箱集合
    //1一厂平库 2 一厂立库 3二厂平库 4二厂立库
    private Integer warehouseType ;
    private String groupOrderNumber; //组货单号
    @Data
    public static class MatList{
        private String boxPos; // 箱子位置
src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
@@ -65,4 +65,6 @@
    List<String> selectDetlList(@Param("orderNo") String orderNo);
    List<OrderDetl> selectByBrand(@Param("brand") String brand);
    OrderDetl selectByOrderNoAndPkgGroupNoAndVolumeNo(@Param("orderNo") String orderNo,@Param("brand") String brand,@Param("model") String model);
}
src/main/java/com/zy/asrs/mapper/OrderMapper.java
@@ -47,4 +47,8 @@
     * 获取未完成订单统计信息(orderNo为空则查询所有)
     */
    List<OrderStatisticsDto> getUnfulfilledOrders(@Param("orderNo") String orderNo);
    Order selectOrderByOrderNo(@Param("orderNo") String orderNo);
    List<String> getOrderNosByDocType(@Param("docType")Long docType);
}
src/main/java/com/zy/asrs/service/OpenService.java
@@ -154,5 +154,7 @@
    void updateBarcode();
    R groupOrderConfirm(GroupOrderConfirmParam param);
}
src/main/java/com/zy/asrs/service/OrderService.java
@@ -28,4 +28,6 @@
    List<Order> selectorderNoL(String orderNo);
    List<String> getOrderNosByDocType(Long docType);
}
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -34,6 +34,7 @@
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -109,6 +110,9 @@
    @Resource
    private OrderMapper orderMapper;
    @Resource
    private OrderDetlMapper orderDetlMapper;
    @Resource
    private BasCrnpMapper basCrnpMapper;
@@ -1517,6 +1521,7 @@
        gwmsGenerateInventoryDto.setWarehouseType(4);
        gwmsGenerateInventoryDto.setBarcode(wrkMast.getBarcode());
        gwmsGenerateInventoryDto.setPalletizingNo(wrkMast.getStaNo());
        gwmsGenerateInventoryDto.setGroupOrderNumber(wrkMast.getMemo());
        List<GwmsGenerateInventoryDto.MatList> matLists = new ArrayList<>();
        for (WrkDetl wrkDetl : wrkDetls) {
            boolean flag = true;
@@ -2266,5 +2271,60 @@
        return crnStn;
    }
    @Override
    @Transactional
    public R groupOrderConfirm(GroupOrderConfirmParam param) {
        // 1. 查询单据是否存在
        Order order = orderMapper.selectOrderByOrderNo(param.getGroupOrderNumber());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        if (order == null) {
            // 1.1 不存在,新建单据
            order = new Order();
            order.setOrderNo(param.getGroupOrderNumber());
            order.setStatus(Integer.valueOf(param.getGroupStatus()));
            order.setOrderTime(sdf.format(new Date()));
            order.setCreateTime(new Date());
            order.setSettle(1L);
            order.setDocType(25L);
            orderMapper.insert(order);
        } else {
            // 1.2 存在,更新单据状态
            order.setStatus(Integer.valueOf(param.getGroupStatus()));
            orderMapper.updateById(order);
        }
        // 2. 一一对应遍历
        List<GroupOrderConfirmParam.PackageGroupNo> pkgList = param.getPackageGroupNos();
        List<GroupOrderConfirmParam.VolumeNumber> volList = param.getVolumeNumbers();
        int size = Math.min(pkgList.size(), volList.size()); // 防止越界
        for (int i = 0; i < size; i++) {
            GroupOrderConfirmParam.PackageGroupNo pg = pkgList.get(i);
            GroupOrderConfirmParam.VolumeNumber vn = volList.get(i);
            // 查询是否已存在该 detl
            OrderDetl detl = orderDetlMapper.selectByOrderNoAndPkgGroupNoAndVolumeNo(
                    param.getGroupOrderNumber(), pg.getPackageGroupNo(), vn.getVolumeNumber()
            );
            if (detl == null) {
                detl = new OrderDetl();
                detl.setOrderId(order.getId());
                detl.setOrderNo(param.getGroupOrderNumber());
                detl.setCreateTime(new Date());
                detl.setAnfme(1.0);
                detl.setBrand(pg.getPackageGroupNo());   // 包装组号
                detl.setModel(vn.getVolumeNumber());     // 卷号
                orderDetlMapper.insert(detl);
            }
        }
        return R.ok("组货确认成功");
    }
    /*...........................上饶江铜..............以上.............徐工汉云...........................*/
}
src/main/java/com/zy/asrs/service/impl/OrderServiceImpl.java
@@ -175,4 +175,8 @@
        return this.baseMapper.selectorderNoL(orderNo);
    }
    @Override
    public  List<String> getOrderNosByDocType(Long docType){
        return this.baseMapper.getOrderNosByDocType(docType);
    }
}
src/main/resources/mapper/OrderDetlMapper.xml
@@ -100,19 +100,22 @@
    <select id="getPakoutPage" resultMap="BaseResultMap">
        select * from
        (
            select
            ROW_NUMBER() over (order by mo.create_time desc) as row,
            mod.*
            from man_order_detl mod
            inner join man_order mo on mod.order_id = mo.id
            inner join man_doc_type mdt on mo.doc_type = mdt.doc_id
            where 1=1
            and mo.settle &lt;= 2
            and mo.status = 1
            and mdt.pakout = 1
            <include refid="pakOutPageCondition"></include>
        ) t where t.row between ((#{pageNumber}-1)*#{pageSize}+1) and (#{pageNumber}*#{pageSize})
        select
        ROW_NUMBER() over (order by mo.create_time desc) as row,
        mod.*
        from man_order_detl mod
        inner join man_order mo on mod.order_id = mo.id
        inner join man_doc_type mdt on mo.doc_type = mdt.doc_id
        where 1=1
        and mo.settle &lt;= 2
        and mo.status =
        case when mo.doc_type = 25 then 0 else 1 end
        and mdt.pakout = 1
        <include refid="pakOutPageCondition"></include>
        ) t
        where t.row between ((#{pageNumber}-1)*#{pageSize}+1) and (#{pageNumber}*#{pageSize})
    </select>
    <select id="getPakoutPageCount" parameterType="java.util.Map" resultType="java.lang.Integer">
        select
@@ -270,4 +273,12 @@
        where brand = #{brand}
    </select>
    <select id="selectByOrderNoAndPkgGroupNoAndVolumeNo" resultMap="BaseResultMap">
        select *
        from man_order_detl
        where order_no = #{orderNo}
        and brand = #{brand}
        and model = #{model}
    </select>
</mapper>
src/main/resources/mapper/OrderMapper.xml
@@ -133,5 +133,16 @@
        GROUP BY
            mo.order_no
    </select>
    <select id="selectOrderByOrderNo" resultMap="BaseResultMap">
        select *
        from man_order
        where order_no = #{orderNo}
    </select>
    <select id="getOrderNosByDocType" resultType="String">
        select order_no
        from man_order
        where doc_type =#{docType}
        and status = 0
    </select>
</mapper>
src/main/webapp/static/js/order/out.js
@@ -330,10 +330,48 @@
                            }
                        }
                        ,yes: function(index, layero){
                            //按钮【立即出库】的回调
                            pakout(tableCache, index);
                        ,yes: function(layerIndex, layero){
                            // 立即出库按钮点击 → 先请求下拉列表
                            let loadIndex = layer.load(10);
                            $.ajax({
                                url: baseUrl + "/getMesOrder/auth", // 你提供的接口
                                headers: {'token': localStorage.getItem('token')},
                                method: 'POST',
                                success: function(res){
                                    layer.close(loadIndex);
                                    if(res.code === 200){
                                        // 弹出二次确认框
                                        layer.open({
                                            type: 1,
                                            title: '请选择组货单号',
                                            area: ['400px','200px'],
                                            content: $('#staBatchSelectDialog').html(),
                                            success: function(layero2, index2){
                                                // 渲染下拉框
                                                let select = $(layero2).find('select[name="batchSta"]');
                                                res.data.forEach(item => {
                                                    select.append(`<option value="${item}">${item}</option>`);
                                                });
                                                layui.form.render('select');
                                                // 确认按钮
                                                form.on('submit(staBatchSelectConfirm)', function(obj){
                                                    let selectedValue = obj.field.batchSta;
                                                    console.log(selectedValue)
                                                    layer.close(index2);
                                                    // 调用原来的出库函数,同时传下拉值
                                                    pakout(tableCache, layerIndex, selectedValue);
                                                    return false;
                                                });
                                            }
                                        });
                                    } else {
                                        layer.msg(res.msg, {icon: 2});
                                    }
                                }
                            });
                        }
                        ,btn2: function(index, layero){
                            //按钮【稍后处理】的回调
                            layer.close(index)
@@ -349,14 +387,14 @@
        })
    }
    function pakout(tableCache, layerIndex) {
        // let loadIndex = layer.load(2);
    function pakout(tableCache, layerIndex, optionValue) {
        // 可以把 optionValue 传给接口
        notice.msg('正在生成出库任务......', {icon: 4});
        $.ajax({
            url: baseUrl + "/out/pakout/auth",
            headers: {'token': localStorage.getItem('token')},
            contentType: 'application/json;charset=UTF-8',
            data: JSON.stringify(tableCache),
            data: JSON.stringify({tableCache,optionValue}),
            method: 'POST',
            success: function (res) {
                notice.destroy();
@@ -376,6 +414,8 @@
    /* 删除订单 */
    function doDelSensor(obj) {
        layer.confirm('确定要删除选中数据吗?', {
src/main/webapp/static/js/orderTableMes.js
New file
@@ -0,0 +1,174 @@
var insTb;
layui.config({
    base: baseUrl + "/static/layui/lay/modules/"  // 配置模块所在的目录
}).use(['table','laydate', 'form',  'admin', 'tableX'], function() {
    var table = layui.table;
    var $ = layui.jquery;
    var layer = layui.layer;
    var layDate = layui.laydate;
    var form = layui.form;
    var admin = layui.admin;
    var tableX = layui.tableX;
    /****************************************** 左边表 *************************************************/
    insTb = table.render({
        elem: '#originTable',
        url: baseUrl + '/order/nav/listMes/auth',
        height: 'full-120',
        headers: {token: localStorage.getItem('token')},
        request: {
            pageName: 'curr',
            pageSize: 'limit'
        },
        page: false,
        parseData: function (res) {
            return {
                'code': res.code,
                'msg': res.msg,
                'data': res.data
            }
        },
        response: {
            statusCode: 200
        },
        // toolbar: ['<p>',
        //     '<button lay-event="add" class="layui-btn layui-btn-sm icon-btn"><i class="layui-icon">&#xe654;</i>添加</button>&nbsp;',
        //     '<button lay-event="edit" class="layui-btn layui-btn-sm layui-btn-warm icon-btn"><i class="layui-icon">&#xe642;</i>修改</button>&nbsp;',
        //     '<button lay-event="del" class="layui-btn layui-btn-sm layui-btn-danger icon-btn"><i class="layui-icon">&#xe640;</i>删除</button>',
        //     '</p>'].join(''),
        defaultToolbar: [],
        cols: [[
            // {type: 'numbers', title: '#'},
            {field: 'orderTime', title: '日期'},
            {field: 'orderNo', title: '单据编号', align: 'center'},
            {field: 'docType$', title: '单据类型'},
        ]],
        done: function (res, curr, count) {
            $('#dictTable+.layui-table-view .layui-table-body tbody>tr:first').trigger('click');
            // 绑定鼠标右键
            tableX.bindCtxMenu('originTable', function (d) {
                return [
                    {
                        icon: 'layui-icon layui-icon-ok',
                        name: '一键出库',
                        click: function (d) {
                            autoOut(d.id);
                        }
                    }
                ]
            })
        }
    });
    /* 表格搜索 */
    form.on('submit(originTableSearch)', function (data) {
        insTb.reload({where: data.field});
        return false;
    });
    /* 表格重置 */
    form.on('submit(originTbReset)', function (data) {
        insTb.reload({where: null});
        insTb2.reload({where: null, page: {curr: 1}});
        return false;
    });
    /* 表格头工具栏点击事件 */
    table.on('toolbar(originTable)', function (obj) {
        if (obj.event === 'add') { // 添加
            showEdit();
        } else if (obj.event === 'edit') { // 修改
            if (selObj == null) {
                return;
            }
            showEdit(selObj.data);
        } else if (obj.event === 'del') { // 删除
            if (selObj == null) {
                return;
            }
            doDel(selObj);
        }
    });
    /* 监听行单击事件 */
    var selObj;
    table.on('row(originTable)', function (obj) {
        selObj = obj;
        obj.tr.addClass('layui-table-click').siblings().removeClass('layui-table-click');
        insTb2.reload({where: {order_id: obj.data.id}, page: {curr: 1}});
    });
    /* 显示表单弹窗 */
    function showEdit(mData) {
        admin.open({
            type: 1,
            title: (mData ? '修改' : '添加') + '项目',
            content: $('#hostEditDialog').html(),
            success: function (layero, dIndex) {
                // 回显表单数据
                form.val('hostEditForm', mData);
                // 表单提交事件
                form.on('submit(hostEditSubmit)', function (data) {
                    var loadIndex = layer.load(2);
                    $.ajax({
                        url: baseUrl+"/host/"+(mData?'update':'add')+"/auth",
                        headers: {'token': localStorage.getItem('token')},
                        data: data.field,
                        method: 'POST',
                        success: function (res) {
                            layer.close(loadIndex);
                            selObj = null;
                            if (res.code === 200){
                                layer.close(dIndex);
                                layer.msg(res.msg, {icon: 1});
                                insTb.reload();
                            } else if (res.code === 403){
                                top.location.href = baseUrl+"/";
                            } else {
                                layer.msg(res.msg, {icon: 2});
                            }
                        }
                    })
                    return false;
                });
            }
        });
    }
    /* 删除 */
    function doDel(obj) {
        layer.confirm('确定要删除此单据类型吗?', {
            skin: 'layui-layer-admin',
            shade: .1
        }, function (i) {
            layer.close(i);
            var loadIndex = layer.load(2);
            $.ajax({
                url: baseUrl+"/host/delete/one/auth",
                headers: {'token': localStorage.getItem('token')},
                data: {param: JSON.stringify(obj.data)},
                method: 'POST',
                success: function (res) {
                    selObj = null;
                    layer.close(loadIndex);
                    if (res.code === 200){
                        layer.closeAll();
                        insTb.reload();
                        $('#dictTable+.layui-table-view .layui-table-body tbody>tr:first').trigger('click');
                    } else if (res.code === 403){
                        top.location.href = baseUrl+"/";
                    } else {
                        layer.msg(res.msg, {icon: 2});
                    }
                }
            })
        });
    }
})
src/main/webapp/views/order/outMes.html
New file
@@ -0,0 +1,321 @@
<!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/originTable.css" media="all">
    <style>
        body {
            color: #595959;
            background-color: #f5f7f9;
        }
        .admin-form {
            padding: 25px 30px 0 0 !important;
            margin: 0 !important;
        }
        .layui-table-view .layui-table-cell .layui-select-title .layui-input {
            height: 28px;
            line-height: 28px;
        }
        .layui-table-view [lay-size="lg"] .layui-table-cell .layui-select-title .layui-input {
            height: 40px;
            line-height: 40px;
        }
        .layui-table-view [lay-size="lg"] .layui-table-cell .layui-select-title .layui-input {
            height: 40px;
            line-height: 40px;
        }
        .layui-table-view [lay-size="sm"] .layui-table-cell .layui-select-title .layui-input {
            height: 20px;
            line-height: 20px;
        }
        .layui-table-view [lay-size="sm"] .layui-table-cell .layui-btn-xs {
            height: 18px;
            line-height: 18px;
        }
        /* 权限控制 */
        #btn-pakoutPreview {
            display: none;
        }
        /*#btn-delete {*/
        /*    display: none;*/
        /*}*/
        /*.btn-edit {*/
        /*    display: none;*/
        /*}*/
        /*.btn-more {*/
        /*    display: none;*/
        /*}*/
    </style>
</head>
<body>
<!-- 正文开始 -->
<div class="layui-fluid" style="padding-bottom: 0;">
    <div class="layui-row layui-col-space15">
        <!-- 左 -->
        <div class="layui-col-md3" id="left-table">
            <div class="layui-card">
                <div class="layui-card-body" style="padding: 10px;">
                    <form class="layui-form toolbar">
                        <div class="layui-form-item">
                            <div class="layui-inline" style="max-width: 300px;">
                                <input name="orderNo" class="layui-input" placeholder="输入单据编号" autocomplete="off"/>
                            </div>
                            <div class="layui-inline">
                                <button class="layui-btn icon-btn" lay-filter="originTableSearch" lay-submit>
                                    <i class="layui-icon">&#xe615;</i>搜索
                                </button>
                                <button class="layui-btn icon-btn" lay-filter="originTbReset" lay-submit>
                                    <i class="layui-icon">&#xe666;</i>重置
                                </button>
                            </div>
                        </div>
                    </form>
                    <table id="originTable" lay-filter="originTable"></table>
                </div>
            </div>
        </div>
        <!-- 右 -->
        <div class="layui-col-md9">
            <div class="layui-card">
                <div class="layui-card-body" style="padding: 10px;">
                    <form class="layui-form toolbar">
                        <div class="layui-form-item">
                            <div class="layui-inline">
                                <label class="layui-form-label">包装组号:</label>
                                <div class="layui-input-inline">
                                    <input name="brand" class="layui-input" placeholder="包装组号"/>
                                </div>
                            </div>
<!--                            <div class="layui-inline">-->
<!--                                <label class="layui-form-label">商品名称:</label>-->
<!--                                <div class="layui-input-inline">-->
<!--                                    <input name="maktx" class="layui-input" placeholder="商品名称"/>-->
<!--                                </div>-->
<!--                            </div>-->
<!--                            <div class="layui-inline">-->
<!--                                <label class="layui-form-label">序列码:</label>-->
<!--                                <div class="layui-input-inline">-->
<!--                                    <input name="batch" class="layui-input" placeholder="序列码"/>-->
<!--                                </div>-->
<!--                            </div>-->
                            <!--                            <div class="layui-inline">-->
                            <!--                                <label class="layui-form-label">状态:</label>-->
                            <!--                                <div class="layui-input-inline">-->
                            <!--                                    <select name="isOnline">-->
                            <!--                                        <option value="1">充电中</option>-->
                            <!--                                        <option value="1">充电中</option>-->
                            <!--                                        <option value="0">不在充电</option>-->
                            <!--                                    </select>-->
                            <!--                                </div>-->
                            <!--                            </div>-->
                            <div class="layui-inline">&emsp;
                                <button class="layui-btn icon-btn" lay-filter="sensorTbSearch" lay-submit>
                                    <i class="layui-icon">&#xe615;</i>搜索
                                </button>
                            </div>
                        </div>
                    </form>
                    <table id="orderDetlTable" lay-filter="orderDetlTable"></table>
                </div>
            </div>
        </div>
    </div>
</div>
<!-- 头工具栏 -->
<script type="text/html" id="orderDetToolbar">
    <!--    <div class="layui-btn-container">-->
    <!--        <div class="layui-col-md3">-->
    <!--            <select id="staNoSelect" lay-verify="required">-->
    <!--                <option value="">请选择站点</option>-->
    <!--            </select>-->
    <!--        </div>-->
    <!--    </div>-->
    <button class="layui-btn layui-btn-sm layui-btn-danger btn-pakoutPreview" id="btn-pakoutPreview" lay-event="pakoutPreview">批量出库</button>
</script>
<!-- 行工具栏 -->
<script type="text/html" id="operate">
<!--    {{#if (d.enableQty > 0){ }}-->
<!--    <a class="layui-btn layui-btn-xs layui-btn-danger btn-pakoutPreview" lay-event="pakoutPreview"><i class="layui-icon layui-icon-prev-circle"></i>出库</a>-->
<!--    {{# } }}-->
</script>
<!-- 出库预览 -->
<script type="text/html" id="pakoutPreviewBox" style="display: none">
    <div style="padding: 25px; line-height: 22px; background-color: #393D49; color: #fff; font-weight: 300;">
        <span style="font-size: large; font-weight: bold">出库预览</span>
    </div>
    <div class="layui-card">
        <div class="layui-card-body" style="padding: 10px">
            <table id="stoPreTab" lay-filter="stoPreTab"></table>
        </div>
        <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm"
                lay-filter="checkModifySta"
                lay-submit
                style="display: block; float: right; margin-right: 3rem; transform: scale(1.2);margin-bottom: 3rem; transform-origin: right center;">
            盘点均分
        </button>
<!--        <button class="layui-btn layui-btn-primary layui-border-black layui-btn-sm" lay-filter="batchModifySta" lay-submit style="display: block;float: right;margin-right: 1rem">-->
<!--            批量修改-->
<!--        </button>-->
    </div>
</script>
<script type="text/html" id="tbBasicTbStaNos">
    <div class="ew-select-fixed">
        <select class="order-sta-select" lay-filter="tbBasicTbStaNos">
            {{#if (d.staNos!=null) {}}
            {{# for(let i=0; i<d.staNos.length; i++) { }}
            <option value="{{d.staNos[i]}}">{{d.staNos[i]}}</option>
            {{# } }}
            {{# } }}
        </select>
    </div>
</script>
<script type="text/html" id="staBatchSelectDialog">
    <form class="layui-form" style="padding: 25px 50px 30px 50px;text-align: center">
        <select id="batchSelectStaBox" name="batchSta" lay-vertype="tips" lay-verify="required" required="">
        </select>
        <button style="margin-top: 30px" class="layui-btn" lay-filter="staBatchSelectConfirm" lay-submit="">确定</button>
    </form>
</script>
<script type="text/html" id="locNoTpl">
    <span name="locNo"
          {{# if( d.lack === false){ }}
          class="layui-badge layui-badge-green" >{{d.locNo}}</span>
    {{# } else { }}
    class="layui-badge layui-badge-red" >库存不足</span>
    {{# } }}
</script>
<!-- 行样式 -->
<script type="text/html" id="orderNoTpl">
    <span name="orderNo" class="layui-badge layui-badge-gray">{{d.orderNo}}</span>
</script>
<script type="text/html" id="statusTpl">
    <input type="checkbox" name="status" value="{{d.status}}" lay-skin="switch" lay-text="正常|禁用" lay-filter="statusSwitch" {{ d.status === 1 ? 'checked' : '' }}>
</script>
<!-- 表单弹窗 -->
<script type="text/html" id="editDialog">
    <form id="detail" lay-filter="detail" class="layui-form admin-form">
        <input name="id" type="hidden">
        <input name="status" type="hidden">
        <div class="layui-row">
            <div class="layui-col-md4">
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">设备编号</label>
                    <div class="layui-input-block">
                        <input name="uuid" placeholder="请输入设备编号" class="layui-input" lay-vertype="tips" lay-verify="required" required="">
                    </div>
                </div>
            </div>
            <div class="layui-col-md4">
                <div class="layui-form-item">
                    <label class="layui-form-label">设备类型:</label>
                    <div class="layui-input-block">
                        <div id="modelSel" class="ew-xmselect-tree"></div>
                    </div>
                </div>
            </div>
            <div class="layui-col-md4">
                <div class="layui-form-item">
                    <label class="layui-form-label layui-form-required">所属项目: </label>
                    <div class="layui-input-block cool-auto-complete">
                        <input name="hostId" class="layui-input" style="display: none">
                        <input id="hostId$" name="hostId$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="请选择所属项目" onfocus=this.blur()>
                        <div class="cool-auto-complete-window">
                            <input class="cool-auto-complete-window-input" data-key="hostQueryByhostId" onkeyup="autoLoad(this.getAttribute('data-key'))">
                            <select class="cool-auto-complete-window-select" data-key="hostQueryByhostIdSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple">
                            </select>
                        </div>
                    </div>
                </div>
            </div>
            <div class="layui-col-md12">
                <div class="layui-form-item">
                    <label class="layui-form-label">详细地址</label>
                    <div class="layui-input-block">
                        <input name="addr" placeholder="请输入详细地址" class="layui-input">
                    </div>
                </div>
            </div>
            <hr class="layui-bg-gray">
            <div class="layui-col-md12" style="text-align: center">
                <iframe id="mapIframe" src="map.html" scrolling="no" frameborder="0"
                        style="display: inline-block; width: 90%;height: 400px;margin: auto">
                </iframe>
            </div>
        </div>
        <hr class="layui-bg-gray">
        <div class="layui-form-item text-right">
            <button class="layui-btn" lay-filter="editSubmit" lay-submit="">保存</button>
            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
        </div>
    </form>
</script>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.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/tools/md5.js"></script>
<script type="text/javascript" src="../../static/js/orderTableMes.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/order/out.js" charset="utf-8"></script>
<!--<script type="text/template" id="takeSiteSelectTemplate">-->
<!--    {{#each data}}-->
<!--    <option value="{{siteId}}">{{desc}}</option>-->
<!--    {{/each}}-->
<!--</script>-->
<!-- 项目编辑窗口 -->
<script type="text/html" id="hostEditDialog">
    <form id="hostEditForm" lay-filter="hostEditForm" class="layui-form model-form">
        <input name="id" type="hidden"/>
        <div class="layui-form-item">
            <label class="layui-form-label layui-form-required">项目名称:</label>
            <div class="layui-input-block">
                <input name="name" placeholder="请输入类型名称" class="layui-input"
                       lay-verType="tips" lay-verify="required" required/>
            </div>
        </div>
        <div class="layui-form-item text-right">
            <button class="layui-btn" lay-filter="hostEditSubmit" lay-submit>保存</button>
            <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
        </div>
    </form>
</script>
</body>
<script type="text/template" id="batchStaSelectTpl">
    <option value="">选择出库站</option>
    {{#each list}}
    <option value="{{this}}">{{this}}</option>
    {{/each}}
</script>
</html>