自动化立体仓库 - WMS系统
lty
5 天以前 8e943b7104561c3b14cf223016698709c5ade4b5
src/main/webapp/static/js/pakStore/locMove.js
@@ -1,87 +1,206 @@
var pageCurr = 0;
var tableIns;
layui.use(['table','laydate', 'form'], function() {
function getCol() {
    var cols = [
        {field: 'locNo', align: 'center',title: typeof I18n !== 'undefined' ? I18n.t('location_no') : '库位号', merge: true, style: 'font-weight: bold'}
    ];
    var dCols = [];
    if (typeof getDetlCols === 'function') {
        dCols = getDetlCols();
    } else {
        dCols = typeof detlCols !== 'undefined' ? detlCols.slice() : [];
    }
    cols.push.apply(cols, dCols);
    return cols;
}
layui.config({
    base: baseUrl + "/static/layui/lay/modules/"
}).use(['table','laydate', 'form', 'tableMerge'], function() {
    var table = layui.table;
    var $ = layui.jquery;
    var layer = layui.layer;
    var layDate = layui.laydate;
    var form = layui.form;
    var tableMerge = layui.tableMerge;
    // 数据渲染
    tableIns = table.render({
        elem: '#locMatCode',
        headers: {token: localStorage.getItem('token')},
        // url: baseUrl+'/locDetl/list/auth',
        data:[],
        page: true,
        limit: 10,
        skin: 'line',
        even: true,
        cellMinWidth: 50,
        cols: [[
            {type: 'checkbox'}
            ,{field: 'locNo$', align: 'center',title: '库位号'}
            ,{field: 'matnr', align: 'center',title: '物料'}
            ,{field: 'lgnum', align: 'center',title: '仓库号'}
            ,{field: 'tbnum', align: 'center',title: '转储请求编号'}
            ,{field: 'zmatid', align: 'center',title: '物料标签ID'}
            ,{field: 'maktx', align: 'center',title: '物料描述'}
            ,{field: 'werks', align: 'center',title: '工厂'}
            ,{field: 'anfme', align: 'center',title: '数量'}
            ,{field: 'altme', align: 'center',title: '单位'}
            ,{field: 'zpallet', align: 'center',title: '托盘条码'}
            ,{field: 'bname', align: 'center',title: '用户ID'}
        ]],
        request: {
            pageName: 'curr',
            pageSize: 'limit'
        },
        parseData: function (res) {
            return {
                'code': res.code,
                'msg': res.msg,
                'count': res.data.total,
                'data': res.data.records
            }
        },
        response: {
            statusCode: 200
        },
        done: function(res, curr, count) {
            if (res.code === 403) {
                top.location.href = baseUrl+"/";
            }
            pageCurr=curr;
            limit();
            form.on('checkbox(tableCheckbox)', function (data) {
                var _index = $(data.elem).attr('table-index')||0;
                if(data.elem.checked){
                    res.data[_index][data.value] = 'Y';
                }else{
                    res.data[_index][data.value] = 'N';
    window.initTable = function() {
        // 数据渲染
        tableIns = table.render({
            elem: '#locMatCode',
            headers: {token: localStorage.getItem('token')},
            // url: baseUrl+'/locDetl/list/auth',
            data:[],
            page: true,
            limit: 16,
            limits: [16, 50, 100, 200, 500],
            even: true,
            cellMinWidth: 50,
            cols: [getCol()],
            text: {
                none: typeof I18n !== 'undefined' ? I18n.t('no_data') : '暂无相关数据'
            },
            request: {
                pageName: 'curr',
                pageSize: 'limit'
            },
            parseData: function (res) {
                return {
                    'code': res.code,
                    'msg': res.msg,
                    'count': res.data.total,
                    'data': res.data.records
                }
            });
        }
            },
            response: {
                statusCode: 200
            },
            done: function(res, curr, count) {
                tableMerge.render(this);
                if (res.code === 403) {
                    top.location.href = baseUrl+"/";
                }
                pageCurr=curr;
                limit();
                clearSelect();
                if (typeof I18n !== 'undefined') {
                    I18n.updatePage();
                    // Retry updating pagination to ensure it catches the DOM element
                    var attempts = 0;
                    var interval = setInterval(function() {
                        attempts++;
                        if ($('.layui-laypage').length > 0) {
                            I18n.updateLayuiPagination();
                        }
                        if (attempts >= 5) {
                            clearInterval(interval);
                        }
                    }, 100);
                }
            }
        });
    };
    if (typeof I18n !== 'undefined' && I18n.isReady()) {
        initTable();
    } else {
        $(document).on('i18n:ready', initTable);
    }
    $(document).on('i18n:languageChanged', function() {
        // Full re-render of the table to ensure columns and headers are updated
        initTable();
        // Update placeholders
        $('[data-i18n-placeholder]').each(function() {
            var key = $(this).attr('data-i18n-placeholder');
            $(this).attr('placeholder', I18n.t(key));
        });
        // Update page text
        I18n.updatePage();
        // Re-render form to update select options AFTER page text update
        form.render('select');
        updateLayuiSelects();
    });
    // Use MutationObserver to monitor body changes for Layui select "No Match" / "No Data" prompts
    // This is more robust than keyup/click events as it catches DOM changes directly
    var observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            if (mutation.addedNodes.length) {
                $(mutation.addedNodes).each(function() {
                    // Check if the added node is the "No Match" or "No Data" paragraph from Layui
                    if (this.nodeType === 1 && $(this).hasClass('layui-select-none')) {
                        var text = $(this).text();
                        if (typeof I18n !== 'undefined') {
                            if (text.indexOf('无匹配项') !== -1 || text.indexOf('No Match') !== -1) {
                                $(this).text(I18n.t('form.select.noMatch'));
                            }
                            if (text.indexOf('没有选项') !== -1 || text.indexOf('No Data') !== -1) {
                                $(this).text(I18n.t('form.select.noData'));
                            }
                        }
                    }
                });
            }
        });
    });
    // Start observing the document body for child list changes
    observer.observe(document.body, {
        childList: true,
        subtree: true
    });
    function updateLayuiSelects() {
        if (typeof I18n === 'undefined') return;
        // Update "No Match" / "No Data" text
        $('.layui-select-none').each(function() {
            var text = $(this).text();
            if (text.indexOf('无匹配项') !== -1 || text.indexOf('No Match') !== -1) {
                $(this).text(I18n.t('form.select.noMatch'));
            }
            if (text.indexOf('没有选项') !== -1 || text.indexOf('No Data') !== -1) {
                $(this).text(I18n.t('form.select.noData'));
            }
        });
        // Update "Please Select" tips if they match the default
        $('.layui-select-title input').each(function() {
            var val = $(this).val();
            if (val === '请选择' || val === 'Select') {
                 $(this).val(I18n.t('form.select.placeholder'));
            }
            var ph = $(this).attr('placeholder');
            if (ph === '请选择' || ph === 'Select') {
                $(this).attr('placeholder', I18n.t('form.select.placeholder'));
            }
        });
    }
});
// 搜索库位物料
function getLoc() {
    let locNo = $("#locNo\\$").val();
    if (locNo === undefined || locNo === null || locNo === "") {
        layer.msg("请选择库位号");
        $('.search-input').css("border-color", "red");
        setTimeout(function () {
            $('.search-input').css("border-color", "#b8b8b8");
        }, 2000);
        return;
    }
function getLoc(el) {
    if (!tableIns) return;
    tableIns.reload({
        url: baseUrl+'/locDetl/list/auth'
        , where: {loc_no: locNo}
        , where: {loc_no: el.value}
        , done:function (res) {
            limit();
            clearSelect();
            // 获取同一堆垛机的空库位
            http.post(baseUrl + "/group/empty/stock", {sourceLocNo: el.value}, function (res) {
                if (res.data != null) {
                    var list = res.data;
                    var tpl = $("#emptyLocStock").html();
                    var template = Handlebars.compile(tpl);
                    var html = template({data: list});
                    $('#targetLocNo').html(html);
                    if (typeof I18n !== 'undefined') {
                        I18n.updatePage($('#targetLocNo'));
                    }
                    layui.form.render('select');
                }
            });
            if (typeof I18n !== 'undefined') {
                 // Retry updating pagination
                 var attempts = 0;
                 var interval = setInterval(function() {
                     attempts++;
                     if ($('.layui-laypage').length > 0) {
                         I18n.updateLayuiPagination();
                     }
                     if (attempts >= 5) {
                         clearInterval(interval);
                     }
                 }, 100);
            }
        }
    });
}
@@ -94,16 +213,16 @@
        $("#sourceLocNo").css("border-color", "red");
        setTimeout(function () {
            $("#sourceLocNo").css("border-color", "#b8b8b8");
        }, 2000);
        layer.msg("请输入库位");
        }, 1000);
        layer.msg(typeof I18n !== 'undefined' ? I18n.t('please_enter_source_location') : '请输入源库位');
        return;
    }
    if (targetLocNo === null || targetLocNo === "") {
        $("#targetLocNo").css("border-color", "red");
        $(".layui-select-title .layui-input").css("border-color", "red");
        setTimeout(function () {
            $("#targetLocNo").css("border-color", "#b8b8b8");
        }, 2000);
        layer.msg("请输入库位");
            $(".layui-select-title .layui-input").css("border-color", "#b8b8b8");
        }, 1000);
        layer.msg(typeof I18n !== 'undefined' ? I18n.t('please_select_target_location') : '请选择目标库位');
        return;
    }
    $.ajax({
@@ -118,68 +237,44 @@
        success: function (res) {
            if (res.code === 200) {
                $("#sourceLocNo").val("");
                $("#targetLocNo").val("");
                layer.closeAll();
                layer.msg(res.msg);
                $("#targetLocNo").empty();
                layui.form.render('select');
                tableIns.reload({
                    data: [],
                    url: '',
                    done:function (res) {
                        limit();clearSelect();
                        if (typeof I18n !== 'undefined') {
                            I18n.updatePage();
                            // Retry updating pagination
                            var attempts = 0;
                            var interval = setInterval(function() {
                                attempts++;
                                if ($('.layui-laypage').length > 0) {
                                    I18n.updateLayuiPagination();
                                }
                                if (attempts >= 5) {
                                    clearInterval(interval);
                                }
                            }, 100);
                        }
                    }
                });
                layer.msg(typeof I18n !== 'undefined' ? I18n.t(res.msg) : res.msg); // Messages from server are usually not translated here unless we have keys
            } else if (res.code === 403) {
                top.location.href = baseUrl + "/";
            } else {
                layer.msg(res.msg);
                layer.msg(typeof I18n !== 'undefined' ? I18n.t(res.msg) : res.msg);
            }
        }
    })
    // layer.open({
    //     title: "库位移转",
    //     closeBtn: 0,
    //     skin: 'layui-layer-lan',
    //     offset: '180px',
    //     type: 1,
    //     shadeClose: true,
    //     content: $('#locMoveWindow'),
    //     area: ['40rem', '18rem'],
    //     btn: ['确定', '关闭'],
    //     success: function (layero, index) {
    //
    //     }
    //
    // })
}
// 库位状态获取
var tips;
function locStatus(el) {
    let val = el.value;
    if (val === null|| val === ""){
        return;
function clearSelect() {
    $("#targetLocNo").empty();
    $("#targetLocNo").append('<option value="" data-i18n="target_empty_location">目标空库位</option>');
    if (typeof I18n !== 'undefined') {
        I18n.updatePage($("#targetLocNo"));
    }
    $.ajax({
        url: baseUrl+"/locMast/"+val+"/auth",
        headers: {'token': localStorage.getItem('token')},
        dataType:'json',
        method: 'POST',
        success: function (res) {
            if (res.code === 200) {
                var status;
                if (res.data != null) {
                    status = res.data.locType$;
                } else {
                    status = "未找到库位";
                }
                tips = layer.tips(
                    "<span style='color:#333;text-overflow: clip;'>"+status+"</span>",
                    el,
                    {
                        tipsMore: true,
                        area: ['160px'],
                        tips: [3,'#fff'],
                        time:0
                        ,maxWidth:500
                    });
            } else if (res.code === 403) {
                top.location.href = baseUrl+"/";
            } else {
                layer.msg(res.msg);
            }
        }
    });
    layui.form.render('select');
}