自动化立体仓库 - WMS系统
lty
7 天以前 539a56279625242c497b4b4093f2defbb9d80334
src/main/webapp/static/js/pakStore/locMove.js
@@ -1,10 +1,17 @@
var pageCurr = 0;
var tableIns;
function getCol() {
    var cols = [
        {field: 'locNo', align: 'center',title: '库位号', merge: true, style: 'font-weight: bold'}
        {field: 'locNo', align: 'center',title: typeof I18n !== 'undefined' ? I18n.t('location_no') : '库位号', merge: true, style: 'font-weight: bold'}
    ];
    cols.push.apply(cols, detlCols);
    var dCols = [];
    if (typeof getDetlCols === 'function') {
        dCols = getDetlCols();
    } else {
        dCols = typeof detlCols !== 'undefined' ? detlCols.slice() : [];
    }
    cols.push.apply(cols, dCols);
    return cols;
}
@@ -16,48 +23,148 @@
    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: 16,
        limits: [16, 50, 100, 200, 500],
        even: true,
        cellMinWidth: 50,
        cols: [getCol()],
        request: {
            pageName: 'curr',
            pageSize: 'limit'
        },
        parseData: function (res) {
            return {
                'code': res.code,
                'msg': res.msg,
                'count': res.data.total,
                'data': res.data.records
    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);
                }
            }
        },
        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.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(el) {
    if (!tableIns) return;
    tableIns.reload({
        url: baseUrl+'/locDetl/list/auth'
        , where: {loc_no: el.value}
@@ -67,13 +174,33 @@
            // 获取同一堆垛机的空库位
            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(res);
                    $('#targetLocNo').append(html);
                    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);
            }
        }
    });
}
@@ -87,7 +214,7 @@
        setTimeout(function () {
            $("#sourceLocNo").css("border-color", "#b8b8b8");
        }, 1000);
        layer.msg("请输入源库位");
        layer.msg(typeof I18n !== 'undefined' ? I18n.t('please_enter_source_location') : '请输入源库位');
        return;
    }
    if (targetLocNo === null || targetLocNo === "") {
@@ -95,7 +222,7 @@
        setTimeout(function () {
            $(".layui-select-title .layui-input").css("border-color", "#b8b8b8");
        }, 1000);
        layer.msg("请输入目标库位");
        layer.msg(typeof I18n !== 'undefined' ? I18n.t('please_select_target_location') : '请选择目标库位');
        return;
    }
    $.ajax({
@@ -117,13 +244,27 @@
                    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(res.msg);
                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);
            }
        }
    })
@@ -131,5 +272,9 @@
function clearSelect() {
    $("#targetLocNo").empty();
    $("#targetLocNo").append('<option value="" data-i18n="target_empty_location">目标空库位</option>');
    if (typeof I18n !== 'undefined') {
        I18n.updatePage($("#targetLocNo"));
    }
    layui.form.render('select');
}