补发货优化

This commit is contained in:
hayu 2026-02-03 14:55:00 +08:00
parent fb8cf8c1bb
commit 268e41b540
6 changed files with 200 additions and 223 deletions

View File

@ -289,7 +289,7 @@ function setOperRecordInfo(list, obj) {
'</div>' +
'<div class="user-oper layout">' +
'<div style="width: 100%">' +
'<span>' + item.auditName + '</span><span>' + item.phone + '</span><span>' + dept + '</span>' +
'<span>' + formatEmptyValue(item.auditName) + '</span><span>' + formatEmptyValue(item.phone) + '</span><span>' + formatEmptyValue(dept) + '</span>' +
'</div>' +
'<div style="width: 100%">' +
'<span>' + operData + '</span>' +
@ -308,6 +308,11 @@ function setOperRecordInfo(list, obj) {
$('.layui-timeline').empty().append(html);
}
function formatEmptyValue(value) {
// 覆盖所有非正常数据null/undefined/''/0/NaN/false 等
return (value === null || value === undefined || value === '' || isNaN(value) && typeof value === 'number') ? '' : String(value);
}
// 设置计划编号/审核状态
function setCheckStatus(obj) {
$('#code').empty().html(obj.code);

View File

@ -1,4 +1,6 @@
let objParam, dataObj;
let batchData = {};
let currentBatch = '';
let form, table, upload, tableIns, layer;
let pageNum = 1;
@ -70,19 +72,91 @@ function getPurchaseDetailsList() {
'id': objParam.id
})
};
let url = dataUrl + 'backstage/purchase/getPurchaseDetailsList';
let url = dataUrl + 'backstage/purchase/getPurchaseDetailsListBatch';
ajaxRequest(url, "POST", params, true, function () {
}, function (result) {
console.error(result);
if (result.code === 200) {
dataObj = result.data;
setBaseTable(result.data);
// 新增:处理批次数据并生成标签
console.log("数据:",result.data)
handleBatchData(result.data);
// 默认显示第一批次数据
if (currentBatch) {
setBaseTable(batchData[currentBatch]);
} else {
let allData = mergeAllBatchData(result.data);
setBaseTable(allData);
}
}
}, function (xhr, status, error) {
errorFn(xhr, status, error)
}, null);
}
// 新增:处理批次数据,生成批次标签
function handleBatchData(data) {
// 1. 批次按外层数组索引区分第1批次、第2批次...
let batchCount = data.length;
if (batchCount === 0) {
$('#batch-tabs').html('<div style="color:#999;">暂无批次数据</div>');
return;
}
// 2. 构建批次数据映射key批次号value该批次的batchList数据
batchData = {};
data.forEach((item, index) => {
let batchNum = index + 1; // 批次号从1开始
batchData[batchNum] = item.batchList || [];
});
// 3. 生成批次标签HTML
let tabHtml = '';
for (let i = 1; i <= batchCount; i++) {
let batchName = `${i}批次`;
let isActive = i === 1 ? 'active' : ''; // 默认选中第一个批次
if (i === 1) {
currentBatch = i; // 默认选中第一个批次
}
tabHtml += `<div class="batch-tab ${isActive}" data-batch="${i}">${batchName}</div>`;
}
// 4. 渲染标签并绑定点击事件
$('#batch-tabs').html(tabHtml);
$('.batch-tab').click(function () {
// 切换激活状态
$('.batch-tab').removeClass('active');
$(this).addClass('active');
// 获取选中的批次
currentBatch = $(this).data('batch');
// 筛选对应批次的数据并渲染表格
setBaseTable(batchData[currentBatch] || []);
// 重置搜索框
resetSearch();
});
}
// 新增:合并所有批次数据(用于无批次选中时显示)
function mergeAllBatchData(data) {
let allData = [];
data.forEach(item => {
if (item.batchList && item.batchList.length > 0) {
allData = allData.concat(item.batchList);
}
});
return allData;
}
// 新增:根据批次筛选数据
function filterDataByBatch(originalData, batch) {
if (!batch || !originalData || originalData.length === 0) {
return mergeAllBatchData(originalData);
}
// 返回指定批次的batchList数据
let batchIndex = batch - 1; // 转换为数组索引
return originalData[batchIndex]?.batchList || [];
}
// 供应商信息赋值
function setSubInfos(list) {
$('#supplier-table-box tbody tr:not(:first)').remove();
@ -141,71 +215,63 @@ function handleFileType(value) {
// 查询
function search() {
let keyWord = $('#name').val();
let keyWord2 = $('#model').val();
let keyWord = $('#name').val().trim();
let keyWord2 = $('#model').val().trim();
// 获取当前批次的数据源
let currentData = currentBatch ? filterDataByBatch(dataObj, currentBatch) : mergeAllBatchData(dataObj);
if (!keyWord && !keyWord2) {
setBaseTable(dataObj);
} else if (keyWord && !keyWord2) {
let dataList = dataObj.filter(item => {
return item.name.indexOf(keyWord) > -1;
})
setBaseTable(dataList);
} else if (!keyWord && keyWord2) {
let dataList = dataObj.filter(item => {
return item.model.indexOf(keyWord2) > -1;
})
setBaseTable(dataList);
} else if (keyWord && keyWord2) {
let dataList = dataObj.filter(item => {
return item.name.indexOf(keyWord) > -1 && item.model.indexOf(keyWord2) > -1;
})
setBaseTable(dataList);
setBaseTable(currentData);
return;
}
// 筛选逻辑适配batchList中的字段
let filteredList = currentData.filter(item => {
let nameMatch = true;
let modelMatch = true;
if (keyWord && item.name) {
nameMatch = item.name.indexOf(keyWord) > -1;
}
if (keyWord2 && item.model) {
modelMatch = item.model.indexOf(keyWord2) > -1;
}
return nameMatch && modelMatch;
});
setBaseTable(filteredList);
}
// 重置
function resetSearch() {
$('#name').val('');
$('#model').val('');
setBaseTable(dataObj);
// 重置时显示当前批次的完整数据
let currentData = currentBatch ? filterDataByBatch(dataObj, currentBatch) : mergeAllBatchData(dataObj);
setBaseTable(currentData);
}
function setBaseTable(results) {
let html = "";
if (results && results.length > 0) {
for (var i = 0; i < results.length; i++) {
var l = results[i];
let list = l.supList;
$.each(list, function (index, item) {
if (index === 0) {
html += "<tr id='" + l.modelId + "'>";
html += "<td style='vertical-align:middle;' rowspan=" + list.length + ">"
+ (i + 1) + "</td>";
html += "<td rowspan=" + list.length + ">" + l.type + "</td>";
html += "<td rowspan=" + list.length + ">" + l.name + "</td>";
html += "<td rowspan=" + list.length + ">" + l.model + "</td>";
html += "<td rowspan=" + list.length + ">" + l.unit + "</td>";
html += "<td rowspan=" + list.length + ">" + l.needNum + "</td>";
html += "<td>" + item.cgNum + "</td>";
html += "<td>" + item.lkNum + "</td>";
html += "<td>" + item.supName + "</td>";
html += "<td>" + item.ccDay + "</td>";
html += "<td>" + item.jyDay + "</td>";
html += "<td>" + item.remark + "</td>";
html += "</tr>";
} else {
html += "<tr>";
html += "<td>" + item.cgNum + "</td>";
html += "<td>" + item.lkNum + "</td>";
html += "<td>" + item.supName + "</td>";
html += "<td>" + item.ccDay + "</td>";
html += "<td>" + item.jyDay + "</td>";
html += "<td>" + item.remark + "</td>";
html += "</tr>";
}
})
}
results.forEach((item, index) => {
html += "<tr id='" + (item.modelId || index) + "'>";
html += "<td style='vertical-align:middle;' class='center'>" + (index + 1) + "</td>";
html += "<td class='center'>" + (item.type || '') + "</td>";
html += "<td class='center'>" + (item.name || '') + "</td>";
html += "<td class='center'>" + (item.model || '') + "</td>";
html += "<td class='center'>" + (item.unit || '') + "</td>";
html += "<td class='center'>" + (item.needNum || '') + "</td>";
html += "<td class='center'>" + (item.cgNum || '') + "</td>";
html += "<td class='center'>" + (item.lkNum || '') + "</td>";
html += "<td class='center'>" + (item.supName || '') + "</td>"; // 无数据则显示空
html += "<td class='center'>" + (item.ccDay || '') + "</td>";
html += "<td class='center'>" + (item.jyDay || '') + "</td>";
html += "<td class='center'>" + (item.remark || '') + "</td>";
html += "</tr>";
});
} else {
html += "<tr><td colspan='12' class='center'>没有相关数据</td></tr>";
}
@ -222,7 +288,8 @@ function exportExcel() {
let params = {
'name': $('#name').val(),
'model': $('#model').val(),
'id': objParam.id
'id': objParam.id,
'batch': currentBatch // 传递当前选中批次
}
let url = dataUrl + "backstage/purchase/exportDetailsList";
exportExcelUtil(url, '采购发货明细', JSON.stringify(params));

View File

@ -46,10 +46,10 @@ function setParams(obj) {
}
$('.supplier' + modelId + '').each(function (index, item) {
let id = $(this).find('option:checked').val();
if (id && id === value && !($(data.elem).is($(this)))) {
$(data.elem).val('');
return layer.msg('请勿重复选择供应商', { icon: 7 });
}
// if (id && id === value && !($(data.elem).is($(this)))) {
// $(data.elem).val('');
// return layer.msg('请勿重复选择供应商', { icon: 7 });
// }
})
}
});
@ -143,7 +143,7 @@ function getPurchaseDetailsList() {
let url = dataUrl + 'backstage/purchase/getPurchaseDetailsList';
ajaxRequest(url, "POST", params, true, function () {
}, function (result) {
console.error(result);
console.error("发货明细:",result);
if (result.code === 200) {
setBaseTable(result.data);
}

View File

@ -5,7 +5,6 @@ let pageNum = 1, tableIns;
let supplierList = [];
let delSupIdArr = [];
// 存储原始采购量/利库量用于灵活校验独立于DOM元素
let originalCgLkMap = new Map(); // key: modelId_index, value: {originalCgNum: 0, originalLkNum: 0}
// 设置参数初始化
function setParams(obj) {
@ -24,15 +23,7 @@ function setParams(obj) {
// 渲染日期选择器(只读状态,不可修改)
laydate.render({
elem: '#fhDay',
trigger: 'none' // 禁止触发日期选择
});
laydate.render({
elem: '.cjDate',
trigger: 'none'
});
laydate.render({
elem: '.jyDate',
trigger: 'none'
trigger: 'click'
});
form.verify();
@ -128,13 +119,11 @@ function getPurchaseDetailsList() {
'id': objParam.id
})
};
let url = dataUrl + 'backstage/purchase/getPurchaseDetailsList';
let url = dataUrl + 'backstage/purchase/getPurchaseDetailsListBySupplement';
ajaxRequest(url, "POST", params, true, function () {
}, function (result) {
console.error(result);
if (result.code === 200) {
// 先存储原始采购量/利库量到全局Map强制确保键值正确
saveOriginalCgLkNum(result.data);
// 渲染表格
setBaseTable(result.data);
}
@ -143,28 +132,6 @@ function getPurchaseDetailsList() {
}, null);
}
// 存储原始采购量/利库量(核心:修复键值生成逻辑,确保唯一性和一致性)
function saveOriginalCgLkNum(data) {
if (!data || data.length === 0) return;
originalCgLkMap.clear();
for (let i = 0; i < data.length; i++) {
let item = data[i];
let modelId = item.modelId || 'default_' + i; // 兜底防止modelId为空
if (item.supList && item.supList.length > 0) {
for (let j = 0; j < item.supList.length; j++) {
let supItem = item.supList[j];
let key = modelId + '_' + j; // 明确modelId + 索引j与提交校验时一致
originalCgLkMap.set(key, {
originalCgNum: parseInt(supItem.cgNum || 0),
originalLkNum: parseInt(supItem.lkNum || 0)
});
// 控制台打印:方便调试查看原始值存储情况
console.log('原始值存储 - 键:', key, ' 采购量:', parseInt(supItem.cgNum || 0), ' 利库量:', parseInt(supItem.lkNum || 0));
}
}
}
}
// 设置文件类型渲染
function handleFileType(index, file, result) {
let html = '', img = '';
@ -223,37 +190,12 @@ function beforeSubmitApply() {
cgNum += currentCgNum;
lkNum += currentLkNum;
// 关键修复:使用与存储时完全一致的键值,获取原始值
let key = modelId + '_' + j;
let originalData = originalCgLkMap.get(key);
// 兜底:防止原始值未获取到
if (!originalData) {
layer.msg('序号为' + (i + 1) + '的数据,未获取到原始数据,请刷新页面重试', { icon: 7 });
hasError = true;
break;
}
// 强制校验:采购量不可小于原始值
if (currentCgNum < originalData.originalCgNum) {
layer.msg('序号为' + (i + 1) + '的数据,采购量不可小于原始值:' + originalData.originalCgNum + '(当前值:' + currentCgNum + '', { icon: 7 });
hasError = true;
break;
}
// 强制校验:利库量不可小于原始值(修复第二条数据不提示问题)
if (currentLkNum < originalData.originalLkNum) {
layer.msg('序号为' + (i + 1) + '的数据,利库量不可小于原始值:' + originalData.originalLkNum + '(当前值:' + currentLkNum + '', { icon: 7 });
hasError = true;
break;
}
// 新增校验:采购量>0时供应商为必填项
if (currentCgNum > 0 && (!l.supId || l.supId === '')) {
layer.msg('序号为' + (i + 1) + '的数据采购量大于0时必须选择供应商', { icon: 7 });
hasError = true;
break;
}
}
if (hasError) break;
@ -338,7 +280,7 @@ function submitApply() {
console.log(data);
formData.append('params', JSON.stringify(data));
let loadingMsg = layer.msg('正在提交补充,请稍等...', { icon: 16, shade: 0.01, time: '0' });
let url = dataUrl + 'backstage/purchase/updatePurchaseData';
let url = dataUrl + 'backstage/purchase/addPurchaseDataBySupplement';
ajaxRequestByUploadFile(url, formData, function () {
$('.save').addClass("layui-btn-disabled").attr("disabled", true);
$('.cancel').addClass("layui-btn-disabled").attr("disabled", true);
@ -384,9 +326,9 @@ function getSupplierList(callback) {
}, null);
}
// 厂家校验(禁用,仅保留兼容,不限制供应商
// 厂家校验(完全去除禁用限制直接返回true
function supCheck(modelId, contractId, value) {
return true; // 直接返回通过,不做校验
return true; // 直接返回通过,不做任何校验,完全去除禁用限制
}
// 库存数量校验(保留,不影响核心逻辑)
@ -480,59 +422,6 @@ function closePage(data) {
parent.layer.close(index);
}
// 监听采购量输入框(增强提示:实时+失焦双重提示,确保用户感知)
// 修复:选择器匹配修改后的输入框类名,确保监听生效
$(document).on('input blur', '.num, .num' + objParam.modelId, function () {
let $this = $(this);
let modelId = $this.attr('modelId') || $this.closest('tr').attr('id') || $this.closest('tr').attr('class').match(/model(\S+)/)[1] || 'default_0';
let index = $this.attr('index') || $this.closest('td').index() - 7 || 0;
let currentVal = parseInt($this.val() || 0);
let key = modelId + '_' + index;
let originalData = originalCgLkMap.get(key);
if (!originalData) return;
// 实时提示:采购量不可小于原始值
if (currentVal < originalData.originalCgNum) {
layer.tips('采购量不可小于原始值:' + originalData.originalCgNum + '(当前值:' + currentVal + '', $this, {
tips: [1, '#f56c6c'],
time: 3000
});
}
// 实时提示:采购量>0时需要选择供应商
if (currentVal > 0) {
let $supplier = $('.supplier' + modelId).eq(index);
if (!$supplier.val() || $supplier.val() === '') {
layer.tips('采购量大于0时必须选择供应商', $supplier, {
tips: [1, '#f56c6c'],
time: 3000
});
}
}
});
// 监听利库量输入框(增强提示:实时+失焦双重提示,确保用户感知)
// 修复:选择器匹配修改后的输入框类名,确保监听生效
$(document).on('input blur', '.lkNum, .lkNum' + objParam.modelId, function () {
let $this = $(this);
let modelId = $this.attr('modelId') || $this.closest('tr').attr('id') || $this.closest('tr').attr('class').match(/model(\S+)/)[1] || 'default_0';
let index = $this.attr('index') || $this.closest('td').index() - 7 || 0;
let currentVal = parseInt($this.val() || 0);
let key = modelId + '_' + index;
let originalData = originalCgLkMap.get(key);
if (!originalData) return;
// 实时提示:输入时就给出反馈,修复第二条数据不提示问题
if (currentVal < originalData.originalLkNum) {
layer.tips('利库量不可小于原始值:' + originalData.originalLkNum + '(当前值:' + currentVal + '', $this, {
tips: [1, '#f56c6c'],
time: 3000
});
}
});
// 空值处理函数(对齐参考文件)
function setNullValue(val) {
return val === undefined || val === null || val === '' ? '' : val;
@ -549,9 +438,8 @@ function setSelectData(modelId, value) {
let targetValue = (value || '').toString().trim();
let supIdStr = (item.supId || item.id).toString().trim();
let selected = '';
if (targetValue === supIdStr) {
selected = 'selected';
}
// 强制置空:不选中任何供应商,始终显示"请选择供应商"
selected = '';
// 转义JSON中的双引号避免HTML渲染异常
let itemJson = JSON.stringify(item).replace(/"/g, '&quot;');
html += "<option value='" + (item.supId || item.id) + "' item='" + itemJson + "' modelId='" + modelId + "' " + selected + ">" + item.supName + "</option>";
@ -559,26 +447,27 @@ function setSelectData(modelId, value) {
return html;
}
// 构建表单输入项(核心修复:出厂日期/检验日期/备注添加readonly属性禁用编辑
// 构建表单输入项(核心修改:将采购量、利库量、出厂日期、检验日期、备注的值强制置空
function setFormInput(value, type, id) {
let html = '<form class="layui-form layuimini-form"><div class="layui-inline">';
let safeValue = setNullValue(value);
// 核心修改:强制将所有指定字段的值置空
let safeValue = '';
if (type === 1) { // 采购量
if (type === 1) { // 采购量 - 强制置空
html += '<input class="layui-input num' + id + '" modelId=' + id + ' name="num" onblur="checkValue(this,1)" value="' + safeValue + '" autocomplete="off" lay-verify="required" maxlength="9">';
} else if (type === 2) { // 利库量
let oldValue = safeValue || 0;
} else if (type === 2) { // 利库量 - 强制置空
let oldValue = 0; // 重置为0
html += '<input class="layui-input lkNum' + id + '" oldValue="' + oldValue + '" modelId=' + id + ' name="lkNum" onblur="checkValue(this,2)" value="' + safeValue + '" autocomplete="off" lay-verify="required" maxlength="9">';
} else if (type === 3) { // 供应商核心调用setSelectData构建下拉选
} else if (type === 3) { // 供应商 - 强制置空(不选中任何选项
html += '<select class="layui-select supplier' + id + '" modelId=' + id + ' name="supplier" lay-search lay-filter="supplier">' +
setSelectData(id, safeValue) +
'</select>';
} else if (type === 4) { // 出厂日期添加readonly属性禁用编辑
html += '<input class="layui-input cjDate cjDate' + id + '" value="' + safeValue + '" modelId=' + id + ' name="cjDate" readonly lay-verify="required">';
} else if (type === 5) { // 检验日期添加readonly属性禁用编辑
html += '<input class="layui-input jyDate jyDate' + id + '" value="' + safeValue + '" modelId=' + id + ' name="jyDate" readonly lay-verify="required">';
} else if (type === 6) { // 备注添加readonly属性禁用编辑
html += '<input class="layui-input remark' + id + '" modelId=' + id + ' placeholder="请输入备注" name="remark" value="' + safeValue + '" maxLength="60" lay-affix="clear" readonly>';
} else if (type === 4) { // 出厂日期 - 强制置空
html += '<input class="layui-input cjDate cjDate' + id + '" value="' + safeValue + '" modelId=' + id + ' name="cjDate" readonly autocomplete="off" lay-verify="required">';
} else if (type === 5) { // 检验日期 - 强制置空
html += '<input class="layui-input jyDate jyDate' + id + '" value="' + safeValue + '" modelId=' + id + ' name="jyDate" readonly autocomplete="off" lay-verify="required">';
} else if (type === 6) { // 备注 - 强制置空
html += '<input class="layui-input remark' + id + '" modelId=' + id + ' placeholder="请输入备注" name="remark" value="' + safeValue + '" maxLength="60" autocomplete="off" lay-affix="clear">';
}
html += '</div></form>';
return html;
@ -597,40 +486,25 @@ function setBaseTable(data) {
let itemIndex = index;
if (index === 0) {
// 主行带rowspan合并单元格
html += "<tr id='" + l.modelId + "' class='mainTr model" + l.modelId + "' dataId='" + item.id + "' detailId='" + l.id + "' historyLkNum='" + (item.lkNum ? item.lkNum : 0) + "'>";
html += "<tr id='" + l.modelId + "' class='mainTr model" + l.modelId + "' dataId='" + item.id + "' detailId='" + l.id + "' historyLkNum='" + 0 + "'>"; // 重置historyLkNum为0
html += '<td rowspan=' + list.length + '><input name="check" type="checkbox"></td>';
html += "<td style='vertical-align:middle;' rowspan=" + list.length + ">" + (i + 1) + "</td>";
html += "<td rowspan=" + list.length + ">" + (l.type || '') + "</td>";
html += "<td rowspan=" + list.length + ">" + (l.name || '') + "</td>";
html += "<td rowspan=" + list.length + ">" + (l.model || '') + "</td>";
html += "<td rowspan=" + list.length + ">" + (l.unit || '') + "</td>";
html += "<td rowspan=" + list.length + ">" + (l.needNum || 0) + "</td>";
html += "<td rowspan=" + list.length + ">" + (l.needNum-l.num || 0) + "</td>";
// 采购量添加index属性
html += "<td>" + setFormInput(item.cgNum, 1, l.modelId).replace('<input class="layui-input', '<input index="' + itemIndex + '" class="layui-input') + "</td>";
html += "<td>" + setFormInput(0, 1, l.modelId).replace('<input class="layui-input', '<input index="' + itemIndex + '" class="layui-input') + "</td>";
// 利库量添加index属性
html += "<td>" + setFormInput(item.lkNum, 2, l.modelId).replace('<input class="layui-input', '<input index="' + itemIndex + '" class="layui-input') + "</td>";
html += "<td>" + setFormInput(item.supId, 3, l.modelId) + "</td>";
// 出厂日期已通过setFormInput添加readonly
html += "<td>" + setFormInput(item.ccDay, 4, l.modelId) + "</td>";
// 检验日期已通过setFormInput添加readonly
html += "<td>" + setFormInput(item.jyDay, 5, l.modelId) + "</td>";
// 备注已通过setFormInput添加readonly
html += "<td>" + setFormInput(item.remark, 6, l.modelId) + "</td>";
html += "</tr>";
} else {
// 子行:不合并单元格
html += "<tr dataId='" + item.id + "' class='model" + l.modelId + "' historyLkNum='" + (item.lkNum ? item.lkNum : 0) + "'>";
// 采购量添加index属性
html += "<td>" + setFormInput(item.cgNum, 1, l.modelId).replace('<input class="layui-input', '<input index="' + itemIndex + '" class="layui-input') + "</td>";
// 利库量添加index属性
html += "<td>" + setFormInput(item.lkNum, 2, l.modelId).replace('<input class="layui-input', '<input index="' + itemIndex + '" class="layui-input') + "</td>";
html += "<td>" + setFormInput(item.supId, 3, l.modelId) + "</td>";
// 出厂日期已通过setFormInput添加readonly
html += "<td>" + setFormInput(item.ccDay, 4, l.modelId) + "</td>";
// 检验日期已通过setFormInput添加readonly
html += "<td>" + setFormInput(item.jyDay, 5, l.modelId) + "</td>";
// 备注已通过setFormInput添加readonly
html += "<td>" + setFormInput(item.remark, 6, l.modelId) + "</td>";
html += "<td>" + setFormInput(0, 2, l.modelId).replace('<input class="layui-input', '<input index="' + itemIndex + '" class="layui-input') + "</td>";
html += "<td>" + setFormInput('', 3, l.modelId) + "</td>";
// 出厂日期:强制置空
html += "<td>" + setFormInput('', 4, l.modelId) + "</td>";
// 检验日期:强制置空
html += "<td>" + setFormInput('', 5, l.modelId) + "</td>";
// 备注:强制置空
html += "<td>" + setFormInput('', 6, l.modelId) + "</td>";
html += "</tr>";
}
});
@ -639,15 +513,19 @@ function setBaseTable(data) {
html += "<tr><td colspan='13' class='center'>没有相关数据</td></tr>";
}
$("#baseTable tbody").empty().append(html);
// 重新渲染日期选择器
// 修复核心重新渲染日期选择器移除trigger: 'none'配置
laydate.render({
elem: '.cjDate',
trigger: 'none' // 再次确认日期选择器不可触发
elem: '.cjDate', // 出厂日期
trigger: 'click', // 显式指定点击触发
type: 'date' // 指定日期类型
});
laydate.render({
elem: '.jyDate',
trigger: 'none' // 再次确认日期选择器不可触发
elem: '.jyDate', // 检验日期
trigger: 'click', // 显式指定点击触发
type: 'date' // 指定日期类型
});
// 强制渲染layui表单确保供应商下拉选生效
layui.form.render();
}

View File

@ -29,6 +29,32 @@
width: 50px;
height: 50px;
}
/* 批次标签样式 */
.batch-tabs {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.batch-tab {
padding: 6px 16px;
background-color: #f5f7fa;
border: 1px solid #e6e6e6;
border-radius: 4px;
cursor: pointer;
color: #333;
font-size: 14px;
transition: all 0.2s;
}
.batch-tab:hover {
background-color: #e8f4ff;
border-color: #409EFF;
}
.batch-tab.active {
background-color: #409EFF;
color: white;
border-color: #409EFF;
}
</style>
<body id="body">
@ -116,6 +142,7 @@
<span style="font-weight:700;text-decoration:none;color:#409EFF;"></span>
<p>采购发货明细</p>
</div>
<div id="batch-tabs" class="batch-tabs" style="padding: 10px 10px 0 10px; display: none"></div>
<div class="layuimini-container">
<div class="layuimini-main">
<fieldset class="table-search-fieldset no-print">

View File

@ -173,7 +173,7 @@
</div>
</div>
<div class="btn-box">
<button class="layui-btn layui-bg-blue save" onclick="saveData2()">确定补充</button>
<button class="layui-btn layui-bg-blue save" onclick="saveData2()">补充发货</button>
<button class="layui-btn layui-btn-primary cancel" onclick="closePage()">返回</button>
</div>
</div>