| | |
| | | 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; |
| | | } |
| | | |
| | |
| | | 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} |
| | |
| | | // 获取同一堆垛机的空库位 |
| | | 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); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | |
| | | 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 === "") { |
| | |
| | | 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({ |
| | |
| | | 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); |
| | | } |
| | | } |
| | | }) |
| | |
| | | |
| | | 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'); |
| | | } |