自动化立体仓库 - WMS系统
zwl
2025-11-21 39ddd87db8c3dc398557120b096b350b7d32efe4
src/main/webapp/views/order/outLocDetlQuery.html
@@ -75,6 +75,11 @@
        .over-limit #selectedTotal {
            color: #FF5722 !important; /* 红色警告 */
        }
        /* 订单完成状态 */
        .order-completed {
            background: #5FB878 !important;
        }
    </style>
</head>
<body>
@@ -126,14 +131,9 @@
                <input class="layui-input" type="text" name="batch" placeholder="批号" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="brand" placeholder="生产线" autocomplete="off">
            </div>
        </div>
        <div class="layui-inline">
            <div class="layui-input-inline">
                <input class="layui-input" type="text" name="sku" placeholder="等级" autocomplete="off">
        <div class="layui-input-inline" style="margin-right: 100px;">
            <div id="condition" name="condition">
            </div>
        </div>
        <!-- 日期范围 -->
@@ -154,6 +154,7 @@
<script type="text/html" id="toolbar">
    <div class="layui-btn-container">
        <button class="layui-btn" id="btn-auto-select" lay-event="autoSelect">自动勾选</button>
        <button class="layui-btn" id="btn-confirm" lay-event="confirm" style="">提取</button>
    </div>
</script>
@@ -200,9 +201,11 @@
</script>
<script>
    var conditionXmSelect;
    var
    function getCol() {
        var cols = [
            {type: 'checkbox', merge: ['locNo']}
            {type: 'checkbox'}
            , {field: 'locNo', align: 'center', title: '库位号', merge: true, style: 'font-weight: bold'}
            // ,{field: 'locNo$', align: 'center',title: '库位号'}
        ];
@@ -217,7 +220,7 @@
    }).extend({
        notice: 'notice/notice',
    })
        .use(['table', 'notice', 'laydate', 'form', 'admin', 'tableMerge'], function () {
        .use(['table', 'notice', 'laydate', 'form', 'admin', 'tableMerge','xmSelect'], function () {
            var table = layui.table;
            var $ = layui.jquery;
            var layer = layui.layer;
@@ -226,6 +229,7 @@
            var admin = layui.admin;
            var tableMerge = layui.tableMerge;
            var notice = layui.notice;
            var xmSelect = layui.xmSelect;
            $('#matnr').val(parent.matnR);
            $('#anfme').val(parent.anfme);
@@ -338,6 +342,10 @@
                var checkStatus = table.checkStatus(obj.config.id);
                var data = checkStatus.data;
                switch (obj.event) {
                    case 'autoSelect':
                        // 自动勾选功能
                        autoSelectItems();
                        break;
                    case 'confirm':
                        if (data.length === 0) {
                            layer.msg("请选择数据");
@@ -359,6 +367,108 @@
                }
            });
            // 自动勾选函数 - 修复版本:勾选库存明细,数量累加不超过订单数量
            function autoSelectItems() {
                // 获取当前页所有数据
                var allData = table.cache.stockOut;
                if (!allData || allData.length === 0) {
                    layer.msg("没有可勾选的数据", {icon: 2});
                    return;
                }
                // 如果订单数量为0,不需要勾选
                if (orderTotal <= 0) {
                    layer.msg("订单数量为0,无需勾选", {icon: 2});
                    return;
                }
                // 先取消所有已选中的项
                for (var i = 0; i < allData.length; i++) {
                    allData[i].LAY_CHECKED = false;
                }
                // 重置选中数量
                selectedTotal = 0;
                // 按顺序勾选库存明细,直到累计数量达到订单数量
                var remaining = orderTotal;
                var selectedCount = 0;
                for (var i = 0; i < allData.length; i++) {
                    var itemQuantity = parseFloat(allData[i].anfme || 0);
                    // 跳过数量为0或无效的项
                    if (itemQuantity <= 0) continue;
                    // 如果剩余需求为0,停止勾选
                    if (remaining <= 0) break;
                    // 勾选该项
                    allData[i].LAY_CHECKED = true;
                    selectedTotal += itemQuantity;
                    selectedCount++;
                    // 更新剩余需求
                    remaining = orderTotal - selectedTotal;
                    // 如果勾选后超过订单数量,给出提示并停止勾选
                    if (selectedTotal > orderTotal) {
                        layer.msg('警告:自动勾选后数量超过订单数量,已停止勾选', {icon: 2, time: 3000});
                        break;
                    }
                }
                // 更新表格显示 - 只调用一次
                table.reload('stockOut', {
                    data: allData,
                    done: function() {
                        // 在表格重载完成后,手动更新复选框的DOM状态
                        setTimeout(function() {
                            for (var i = 0; i < allData.length; i++) {
                                if (allData[i].LAY_CHECKED) {
                                    var trElem = $('tr[data-index="' + i + '"]');
                                    if (trElem.length > 0) {
                                        // 操作复选框
                                        trElem.find('input[type="checkbox"]').prop('checked', true);
                                        trElem.find('.layui-form-checkbox').addClass('layui-form-checked');
                                    }
                                }
                            }
                            // 重新渲染表单
                            form.render('checkbox');
                            // 更新显示
                            updateSelectedTotal();
                            if (selectedCount > 0) {
                                layer.msg('已自动勾选 ' + selectedCount + ' 个库存明细,数量: ' + selectedTotal, {icon: 1, time: 2000});
                            } else {
                                layer.msg('没有可勾选的库存明细', {icon: 2});
                            }
                        }, 100);
                    }
                });
            }
            conditionXmSelect = xmSelect.render({
                el: '#condition',
                style: {
                    width: '200px',
                },
                autoRow: true,
                toolbar: {show: true},
                filterable: true,
                data: [
                    {
                        name: '成品智能立库',
                        value: '成品智能立库'
                    },
                    {
                        name: '特采智能立库',
                        value: '特采智能立库'
                    }
                ]
            })
            // 搜索栏搜索事件
            form.on('submit(search)', function (data) {
                tableReload();