| | |
| | | </div> |
| | | </script> |
| | | |
| | | <!-- 批量选择出库站弹窗模板 --> |
| | | <script type="text/html" id="staBatchSelectDialog"> |
| | | <div style="padding: 20px;"> |
| | | <form class="layui-form" id="batchSelectStaBox"> |
| | | <!-- 下拉框将通过Handlebars模板动态渲染 --> |
| | | </form> |
| | | <div style="text-align: center; margin-top: 20px;"> |
| | | <button class="layui-btn layui-btn-sm" lay-submit lay-filter="staBatchSelectConfirm">确认</button> |
| | | </div> |
| | | </div> |
| | | </script> |
| | | |
| | | <!-- 批量选择出库站下拉框模板 --> |
| | | <script type="text/html" id="batchStaSelectTpl"> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">出库站</label> |
| | | <div class="layui-input-block"> |
| | | <select name="batchSta" lay-filter="batchSta" lay-search> |
| | | {{#each list}} |
| | | <option value="{{this}}">{{this}}</option> |
| | | {{/each}} |
| | | </select> |
| | | </div> |
| | | </div> |
| | | </script> |
| | | |
| | | <script type="text/html" id="tbBasicTbStaNos"> |
| | | <div class="ew-select-fixed"> |
| | | <select class="order-sta-select" lay-filter="tbBasicTbStaNos"> |
| | |
| | | var data = obj.data; |
| | | var checked = obj.checked; |
| | | var type = obj.type; |
| | | |
| | | // 确保window.autoSelectedData已初始化 |
| | | if (!window.autoSelectedData) { |
| | | window.autoSelectedData = []; |
| | | console.log("data"+data.batch) |
| | | if (type === 'one') { |
| | | // 单个选择 |
| | | if (checked) { |
| | | selectedTotal += parseFloat(data.anfme || 0); |
| | | } else { |
| | | selectedTotal -= parseFloat(data.anfme || 0); |
| | | } |
| | | } else if (type === 'all') { |
| | | // 全选 |
| | | var checkStatus = table.checkStatus('stockOut'); |
| | | if (checked) { |
| | | // 计算当前页所有数据的数量总和 |
| | | checkStatus.data.forEach(function(item){ |
| | | selectedTotal += parseFloat(item.anfme || 0); |
| | | }); |
| | | } else { |
| | | // 取消全选,减去当前页所有数据的数量总和 |
| | | checkStatus.data.forEach(function(item){ |
| | | selectedTotal -= parseFloat(item.anfme || 0); |
| | | }); |
| | | } |
| | | } |
| | | |
| | | // 重新计算selectedTotal,确保与实际勾选状态一致 |
| | | var updateSelectedTotalFromCheckboxes = function() { |
| | | var checkStatus = table.checkStatus('stockOut'); |
| | | selectedTotal = 0; |
| | | |
| | | // 更新window.autoSelectedData,只保留实际勾选的数据 |
| | | window.autoSelectedData = []; |
| | | |
| | | // 重新计算选中总数和更新autoSelectedData |
| | | checkStatus.data.forEach(function(item) { |
| | | selectedTotal += parseFloat(item.anfme || 0); |
| | | window.autoSelectedData.push(item); |
| | | }); |
| | | }; |
| | | |
| | | // 不管是单选还是全选,都重新计算实际勾选的数据和总数 |
| | | updateSelectedTotalFromCheckboxes(); |
| | | |
| | | // 更新显示选中的数量 |
| | | updateSelectedTotal(); |
| | | |
| | | // 如果选中的数量超过订单数量,给出提示 |
| | |
| | | var selectedCount = 0; |
| | | |
| | | // 对库位数据进行排序,优先选择相同库位的库存 |
| | | allData.sort(function(a, b) { |
| | | // 先按库位号排序 |
| | | if (a.locNo !== b.locNo) { |
| | | return a.locNo.localeCompare(b.locNo); |
| | | } |
| | | // 再按批次排序 |
| | | return a.batch.localeCompare(b.batch); |
| | | }); |
| | | // allData.sort(function(a, b) { |
| | | // // 先按库位号排序 |
| | | // if (a.locNo !== b.locNo) { |
| | | // return a.locNo.localeCompare(b.locNo); |
| | | // } |
| | | // // 再按批次排序 |
| | | // return a.batch.localeCompare(b.batch); |
| | | // }); |
| | | |
| | | for (var i = 0; i < allData.length; i++) { |
| | | var item = allData[i]; |
| | |
| | | , moveType: 1 //拖拽模式,0或者1 |
| | | , content: $('#pakoutPreviewBox').html() |
| | | , success: function (layero, index) { |
| | | res.data.forEach((item, index) => { |
| | | console.log(`项 ${index + 1}:`, item); |
| | | }); |
| | | stoPreTabIdx = table.render({ |
| | | elem: '#stoPreTab1', |
| | | data: res.data, |
| | |
| | | page: false, |
| | | limit: Number.MAX_VALUE, |
| | | cellMinWidth: 100, |
| | | // cols必须使用二维数组格式,这是layui table的标准配置 |
| | | cols: [[ |
| | | // {type: 'checkbox', merge: ['orderNo']}, |
| | | // 将复选框列放在第一列,便于用户操作和tableMerge处理 |
| | | |
| | | {field: 'orderNo', title: '单据编号', merge: true, align: 'center'}, |
| | | {field: 'title', title: '商品', merge: true, align: 'center', width: 350}, |
| | | {field: 'batch', title: '批号', align: 'center'}, |
| | |
| | | title: '货位', |
| | | align: 'center', |
| | | width: 100, |
| | | merge: ['locNo'], |
| | | templet: '#locNoTpl' |
| | | }, |
| | | { |
| | |
| | | merge: ['locNo'], |
| | | templet: '#tbBasicTbStaNos' |
| | | }, |
| | | {type: 'checkbox', merge: ['locNo']}, |
| | | {type: 'checkbox'} |
| | | ]], |
| | | done: function (res) { |
| | | tableMerge.render(this); |
| | |
| | | }); |
| | | // 批量修改出库站 |
| | | form.on('submit(batchModifySta)', function () { |
| | | let stoPreTabData = layui.table.checkStatus('stoPreTab1').data; |
| | | // 获取选中的数据,兼容合并行的情况 |
| | | let checkStatus = table.checkStatus('stoPreTab1'); |
| | | let stoPreTabData = checkStatus.data; |
| | | |
| | | // 如果checkStatus返回的数据为空,尝试从tableCache中获取 |
| | | if (stoPreTabData.length === 0) { |
| | | // 遍历tableCache,找出所有选中的行及其合并行 |
| | | let checkedLocNos = []; |
| | | // 首先找出所有被选中的行的locNo |
| | | tableCache.forEach(function(item) { |
| | | if (item.LAY_CHECKED === true) { |
| | | checkedLocNos.push(item.locNo); |
| | | } |
| | | }); |
| | | |
| | | // 去重 |
| | | checkedLocNos = [...new Set(checkedLocNos)]; |
| | | |
| | | // 根据locNo过滤出所有相关的行 |
| | | stoPreTabData = tableCache.filter(function(item) { |
| | | return checkedLocNos.includes(item.locNo); |
| | | }); |
| | | } |
| | | |
| | | if (stoPreTabData.length < 1) { |
| | | layer.msg("请至少选择一条以上合并数据", {icon: 7}); |
| | | return false; |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 添加调试信息 |
| | | console.log('staBatchSelectVal:', staBatchSelectVal); |
| | | console.log('staBatchSelectVal类型:', Array.isArray(staBatchSelectVal) ? '数组' : '非数组'); |
| | | console.log('staBatchSelectVal长度:', staBatchSelectVal.length); |
| | | if (staBatchSelectVal.length === 0) { |
| | | layer.msg("出库站没有交集,无法批量修改", {icon: 2}); |
| | | return; |
| | |
| | | title: '请选择站点', |
| | | content: $('#staBatchSelectDialog').html(), |
| | | success: function (layero, ddIndex) { |
| | | // 渲染下拉框 |
| | | let template = Handlebars.compile($('#batchStaSelectTpl').html()); |
| | | $('#batchSelectStaBox').html(template({list: staBatchSelectVal})); |
| | | // 直接使用原生方式创建select元素,不依赖Handlebars模板 |
| | | let selectHtml = '<div class="layui-form-item">'; |
| | | selectHtml += '<label class="layui-form-label">出库站</label>'; |
| | | selectHtml += '<div class="layui-input-block">'; |
| | | selectHtml += '<select name="batchSta" lay-filter="batchSta" lay-search>'; |
| | | |
| | | // 手动遍历数组创建option |
| | | staBatchSelectVal.forEach(function(staNo) { |
| | | selectHtml += '<option value="' + staNo + '">' + staNo + '</option>'; |
| | | }); |
| | | |
| | | selectHtml += '</select>'; |
| | | selectHtml += '</div>'; |
| | | selectHtml += '</div>'; |
| | | |
| | | // 直接插入HTML |
| | | $(layero).find('#batchSelectStaBox').html(selectHtml); |
| | | |
| | | // 渲染表单 |
| | | layui.form.render('select'); |
| | | |
| | | // 确认 |
| | | form.on('submit(staBatchSelectConfirm)', function (obj) { |
| | | let loadIdx = layer.load(2); |
| | | let batchSta = Number(obj.field.batchSta); |
| | | // 直接从DOM中获取选中的站点值,确保能正确获取到 |
| | | let batchSta = $(layero).find('select[name="batchSta"]').val(); |
| | | console.log('批量修改的站点值:', batchSta); |
| | | let arr = []; |
| | | for (let j = 0; j < stoPreTabData.length; j++) { |
| | | |
| | | // 简化更新逻辑,直接更新所有选中的数据 |
| | | stoPreTabData.forEach(function(preItem) { |
| | | for (let i = 0; i < tableCache.length; i++) { |
| | | if (tableCache[i].orderNo === stoPreTabData[j].orderNo |
| | | && tableCache[i].matnr === stoPreTabData[j].matnr |
| | | && tableCache[i].locNo === stoPreTabData[j].locNo) { |
| | | // 只根据locNo进行匹配,因为表格中locNo是合并单元格的关键字段 |
| | | if (tableCache[i].locNo === preItem.locNo) { |
| | | tableCache[i]['staNo'] = batchSta; |
| | | arr.push(i); |
| | | console.log('更新了数据索引:', i, '站点值:', batchSta); |
| | | } |
| | | } |
| | | }); |
| | | |
| | | // 如果没有找到匹配项,尝试直接更新选中的数据 |
| | | if (arr.length === 0) { |
| | | console.log('未找到匹配项,尝试直接更新'); |
| | | // 直接遍历tableCache,更新所有LAY_CHECKED为true的项 |
| | | for (let i = 0; i < tableCache.length; i++) { |
| | | if (tableCache[i].LAY_CHECKED === true) { |
| | | tableCache[i]['staNo'] = batchSta; |
| | | arr.push(i); |
| | | console.log('直接更新了选中的数据索引:', i); |
| | | } |
| | | } |
| | | } |
| | |
| | | }); |
| | | // 弹窗不出现滚动条 |
| | | $(layero).children('.layui-layer-content').css('overflow', 'visible'); |
| | | layui.form.render('select'); |
| | | }, |
| | | }) |
| | | } |