Fix stock mappings JSON fields and enable row selection for editing
This commit is contained in:
@@ -57,9 +57,9 @@ func (StockLog) TableName() string {
|
||||
|
||||
// LotPartnumber maps external part numbers to internal lots.
|
||||
type LotPartnumber struct {
|
||||
Partnumber string `gorm:"column:partnumber;size:255;primaryKey"`
|
||||
LotName string `gorm:"column:lot_name;size:255;primaryKey"`
|
||||
Description *string `gorm:"column:description;size:10000"`
|
||||
Partnumber string `gorm:"column:partnumber;size:255;primaryKey" json:"partnumber"`
|
||||
LotName string `gorm:"column:lot_name;size:255;primaryKey" json:"lot_name"`
|
||||
Description *string `gorm:"column:description;size:10000" json:"description,omitempty"`
|
||||
}
|
||||
|
||||
func (LotPartnumber) TableName() string {
|
||||
|
||||
@@ -308,6 +308,7 @@ let isCreatingPricelist = false;
|
||||
let cachedDbUsername = null;
|
||||
let syncUsersStatusTimer = null;
|
||||
let stockMappingsPage = 1;
|
||||
let stockMappingsCache = [];
|
||||
|
||||
async function loadTab(tab) {
|
||||
currentTab = tab;
|
||||
@@ -1109,16 +1110,17 @@ async function loadStockMappings(page = 1) {
|
||||
const data = await resp.json();
|
||||
if (!resp.ok) throw new Error(data.error || 'Ошибка загрузки');
|
||||
const items = data.items || [];
|
||||
stockMappingsCache = items;
|
||||
if (items.length === 0) {
|
||||
body.innerHTML = '<tr><td colspan="4" class="px-4 py-3 text-sm text-gray-500">Нет сопоставлений</td></tr>';
|
||||
} else {
|
||||
body.innerHTML = items.map(item => `
|
||||
<tr>
|
||||
<td class="px-4 py-2 text-sm font-mono">${escapeHtml(item.partnumber)}</td>
|
||||
<td class="px-4 py-2 text-sm text-gray-600">${escapeHtml(item.description || '—')}</td>
|
||||
<td class="px-4 py-2 text-sm font-mono">${escapeHtml(item.lot_name || '—')}</td>
|
||||
<tr class="cursor-pointer hover:bg-gray-50" onclick="selectStockMappingRow('${escapeHtml((item.partnumber || item.Partnumber || '')).replace(/'/g, "\\'")}')">
|
||||
<td class="px-4 py-2 text-sm font-mono">${escapeHtml(item.partnumber || item.Partnumber || '—')}</td>
|
||||
<td class="px-4 py-2 text-sm text-gray-600">${escapeHtml(item.description || item.Description || '—')}</td>
|
||||
<td class="px-4 py-2 text-sm font-mono">${escapeHtml(item.lot_name || item.LotName || '—')}</td>
|
||||
<td class="px-4 py-2 text-right">
|
||||
<button data-partnumber="${escapeHtml(item.partnumber)}" onclick="deleteStockMapping(this.dataset.partnumber)" class="text-red-600 hover:text-red-800 text-sm">Удалить</button>
|
||||
<button data-partnumber="${escapeHtml(item.partnumber || item.Partnumber || '')}" onclick="event.stopPropagation(); deleteStockMapping(this.dataset.partnumber)" class="text-red-600 hover:text-red-800 text-sm">Удалить</button>
|
||||
</td>
|
||||
</tr>
|
||||
`).join('');
|
||||
@@ -1141,6 +1143,14 @@ async function loadStockMappings(page = 1) {
|
||||
}
|
||||
}
|
||||
|
||||
function selectStockMappingRow(partnumber) {
|
||||
const normalized = (partnumber || '').trim().toLowerCase();
|
||||
const row = stockMappingsCache.find(item => ((item.partnumber || item.Partnumber || '').trim().toLowerCase() === normalized));
|
||||
if (!row) return;
|
||||
document.getElementById('mapping-partnumber').value = (row.partnumber || row.Partnumber || '').trim();
|
||||
document.getElementById('mapping-lotname').value = (row.lot_name || row.LotName || '').trim();
|
||||
}
|
||||
|
||||
async function saveStockMapping() {
|
||||
const partnumber = document.getElementById('mapping-partnumber').value.trim();
|
||||
const lotName = document.getElementById('mapping-lotname').value.trim();
|
||||
|
||||
Reference in New Issue
Block a user