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.
|
// LotPartnumber maps external part numbers to internal lots.
|
||||||
type LotPartnumber struct {
|
type LotPartnumber struct {
|
||||||
Partnumber string `gorm:"column:partnumber;size:255;primaryKey"`
|
Partnumber string `gorm:"column:partnumber;size:255;primaryKey" json:"partnumber"`
|
||||||
LotName string `gorm:"column:lot_name;size:255;primaryKey"`
|
LotName string `gorm:"column:lot_name;size:255;primaryKey" json:"lot_name"`
|
||||||
Description *string `gorm:"column:description;size:10000"`
|
Description *string `gorm:"column:description;size:10000" json:"description,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (LotPartnumber) TableName() string {
|
func (LotPartnumber) TableName() string {
|
||||||
|
|||||||
@@ -308,6 +308,7 @@ let isCreatingPricelist = false;
|
|||||||
let cachedDbUsername = null;
|
let cachedDbUsername = null;
|
||||||
let syncUsersStatusTimer = null;
|
let syncUsersStatusTimer = null;
|
||||||
let stockMappingsPage = 1;
|
let stockMappingsPage = 1;
|
||||||
|
let stockMappingsCache = [];
|
||||||
|
|
||||||
async function loadTab(tab) {
|
async function loadTab(tab) {
|
||||||
currentTab = tab;
|
currentTab = tab;
|
||||||
@@ -1109,16 +1110,17 @@ async function loadStockMappings(page = 1) {
|
|||||||
const data = await resp.json();
|
const data = await resp.json();
|
||||||
if (!resp.ok) throw new Error(data.error || 'Ошибка загрузки');
|
if (!resp.ok) throw new Error(data.error || 'Ошибка загрузки');
|
||||||
const items = data.items || [];
|
const items = data.items || [];
|
||||||
|
stockMappingsCache = items;
|
||||||
if (items.length === 0) {
|
if (items.length === 0) {
|
||||||
body.innerHTML = '<tr><td colspan="4" class="px-4 py-3 text-sm text-gray-500">Нет сопоставлений</td></tr>';
|
body.innerHTML = '<tr><td colspan="4" class="px-4 py-3 text-sm text-gray-500">Нет сопоставлений</td></tr>';
|
||||||
} else {
|
} else {
|
||||||
body.innerHTML = items.map(item => `
|
body.innerHTML = items.map(item => `
|
||||||
<tr>
|
<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)}</td>
|
<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 || '—')}</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 || '—')}</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">
|
<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>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
`).join('');
|
`).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() {
|
async function saveStockMapping() {
|
||||||
const partnumber = document.getElementById('mapping-partnumber').value.trim();
|
const partnumber = document.getElementById('mapping-partnumber').value.trim();
|
||||||
const lotName = document.getElementById('mapping-lotname').value.trim();
|
const lotName = document.getElementById('mapping-lotname').value.trim();
|
||||||
|
|||||||
Reference in New Issue
Block a user