update alpha v0.906

This commit is contained in:
2026-02-24 15:48:14 -08:00
parent bcaa5d714b
commit 16a8e2dd2b
11 changed files with 706 additions and 35 deletions

View File

@@ -110,7 +110,7 @@
<input name="quantity" class="form-control" placeholder="Кол-во" value="1">
</div>
<div class="col-md-2">
<select name="cabinet" class="form-select">
<select name="cabinet" class="form-select" id="issue_cabinet">
<option value="">Выберите кабинет...</option>
{% for c in cabinets %}
<option value="{{ c }}">{{ c }}</option>
@@ -118,7 +118,7 @@
</select>
</div>
<div class="col-md-2 d-grid">
<button class="btn btn-danger">Выдать</button>
<button class="btn btn-danger" id="issue_submit_btn">Выдать</button>
</div>
</form>
</div>
@@ -173,13 +173,43 @@
const barcodeEl = document.getElementById('issue_barcode');
const modelEl = document.getElementById('issue_model');
const hintEl = document.getElementById('issue_hint');
const cabinetEl = document.getElementById('issue_cabinet');
const submitBtn = document.getElementById('issue_submit_btn');
const defaultCabinetOptions = cabinetEl ? cabinetEl.innerHTML : '';
if (!barcodeEl || !modelEl || !hintEl) return;
function resetCabinets() {
if (!cabinetEl) return;
cabinetEl.innerHTML = defaultCabinetOptions;
cabinetEl.disabled = false;
if (submitBtn) submitBtn.disabled = false;
}
function applyCabinets(cabinets) {
if (!cabinetEl) return;
const values = Array.isArray(cabinets) ? cabinets.filter(Boolean) : [];
if (!values.length) {
cabinetEl.innerHTML = '<option value="">Нет привязанных кабинетов</option>';
cabinetEl.disabled = true;
if (submitBtn) submitBtn.disabled = true;
return;
}
const options = ['<option value="">Выберите кабинет...</option>']
.concat(values.map((name) => `<option value="${name}">${name}</option>`));
cabinetEl.innerHTML = options.join('');
cabinetEl.disabled = false;
if (submitBtn) submitBtn.disabled = false;
}
let last = '';
async function lookup() {
const barcode = (barcodeEl.value || '').trim();
if (!barcode || barcode === last) return;
if (!barcode) {
resetCabinets();
return;
}
if (barcode === last) return;
last = barcode;
modelEl.value = '';
@@ -194,12 +224,15 @@
const data = await res.json();
if (!data.found) {
hintEl.textContent = 'Не найдено (проверь штрихкод)';
resetCabinets();
return;
}
modelEl.value = data.model || '';
hintEl.textContent = `Остаток: ${data.quantity}`;
applyCabinets(data.allowed_cabinets || []);
} catch (e) {
hintEl.textContent = 'Ошибка сети';
resetCabinets();
}
}
@@ -407,7 +440,8 @@
<th>Штрихкод</th><th>Модель</th><th>Остаток</th>
</tr>
{% for b,m,q,minq in items %}
<tr class="js-cartridge-row {{ 'table-danger' if q < minq else '' }}"
{% set model_key = (m or '')|trim|lower %}
<tr class="js-cartridge-row {{ 'table-danger' if (q < minq) or (model_key in orphan_model_keys) else '' }}"
data-barcode="{{ b }}"
data-model="{{ m or '' }}"
data-quantity="{{ q }}">