Magacin — forma puna širina, responsive popravke

This commit is contained in:
2026-06-01 02:49:46 +02:00
parent 8cc54a7fc2
commit b0ea50578f
14 changed files with 1162 additions and 5 deletions
+51
View File
@@ -393,3 +393,54 @@ select:focus {
.tema-krug-aktivan {
border-color: var(--tekst-glavni) !important;
}
/* forme — responsive */
@media (max-width: 768px) {
.forma-grid-2 {
grid-template-columns: 1fr !important;
}
}
/* gornja traka magacina — responsive */
.magacin-traka {
display: flex;
align-items: center;
gap: 12px;
flex-wrap: wrap;
}
.magacin-traka form {
display: flex;
align-items: center;
gap: 8px;
flex: 1;
min-width: 200px;
flex-wrap: wrap;
}
@media (max-width: 768px) {
.magacin-traka {
flex-direction: column;
align-items: stretch;
}
.magacin-traka form {
flex-direction: column;
align-items: stretch;
}
.magacin-traka a {
text-align: center;
}
}
/* dodatna korekcija magacin trake */
@media (max-width: 768px) {
.magacin-traka form input,
.magacin-traka form select,
.magacin-traka form button,
.magacin-traka form label {
width: 100%;
justify-content: flex-start;
}
}
+77
View File
@@ -0,0 +1,77 @@
{{template "base" .}}
{{define "naslov"}}Kategorije — NTech{{end}}
{{define "sadrzaj"}}
<div style="display:flex;flex-direction:column;gap:16px;">
{{if .Sacuvano}}
<div class="poruka-uspeh">Kategorija je uspešno sačuvana.</div>
{{end}}
{{if .Obrisana}}
<div class="poruka-uspeh">Kategorija je uspešno obrisana.</div>
{{end}}
<!-- nazad dugme -->
<a href="/magacin" style="display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--tekst-sporedni);text-decoration:none;">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"/></svg>
Nazad na magacin
</a>
<!-- forma za novu kategoriju -->
<div class="kartica">
<div style="margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);">
<span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Nova kategorija</span>
</div>
<form method="POST" action="/magacin/kategorije/dodaj">
<div style="display:flex;flex-direction:column;gap:12px;">
<div>
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">
Naziv <span style="color:#dc2626;">*</span>
</label>
<input type="text" name="naziv" placeholder="npr. Memorija, Diskovi, Kablovi..."
style="width:100%;">
</div>
<div>
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">Opis</label>
<input type="text" name="opis" placeholder="Kratak opis kategorije..."
style="width:100%;">
</div>
<div style="display:flex;justify-content:flex-end;">
<button type="submit"
style="padding:8px 20px;background:var(--sb-akcent);color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;">
Dodaj kategoriju
</button>
</div>
</div>
</form>
</div>
<!-- lista kategorija -->
<div class="kartica" style="padding:0;overflow:hidden;">
<div style="padding:14px 16px;border-bottom:0.5px solid var(--ivica);">
<span style="font-size:14px;font-weight:500;color:var(--tekst-glavni);">Postojeće kategorije</span>
</div>
{{range .Kategorije}}
<div style="display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:0.5px solid var(--ivica);">
<div style="flex:1;">
<div style="font-size:14px;color:var(--tekst-glavni);">{{.Naziv}}</div>
{{if .Opis}}
<div style="font-size:12px;color:var(--tekst-sporedni);margin-top:2px;">{{.Opis}}</div>
{{end}}
</div>
<a href="/magacin/kategorije/obrisi/{{.ID}}"
onclick="return confirm('Da li ste sigurni da želite da obrišete ovu kategoriju?')"
style="padding:4px 10px;background:#dc2626;color:#fff;border-radius:6px;font-size:12px;text-decoration:none;white-space:nowrap;">
Obriši
</a>
</div>
{{else}}
<div style="padding:24px;text-align:center;font-size:14px;color:var(--tekst-sporedni);">
Nema kategorija. Dodaj prvu kategoriju iznad.
</div>
{{end}}
</div>
</div>
{{end}}
+111
View File
@@ -0,0 +1,111 @@
{{template "base" .}}
{{define "naslov"}}Magacin — NTech{{end}}
{{define "sadrzaj"}}
<div style="display:flex;flex-direction:column;gap:16px;">
{{if .Sacuvano}}
<div class="poruka-uspeh">Artikal je uspešno sačuvan.</div>
{{end}}
{{if .Obrisan}}
<div class="poruka-uspeh">Artikal je uspešno obrisan.</div>
{{end}}
<!-- dugmad -->
<div style="display:flex;gap:10px;flex-wrap:wrap;">
<a href="/magacin/novi"
style="padding:8px 16px;background:var(--sb-akcent);color:#fff;border-radius:8px;font-size:14px;font-weight:500;text-decoration:none;white-space:nowrap;">
+ Novi artikal
</a>
<a href="/magacin/kategorije"
style="padding:8px 16px;background:var(--sb-aktivan);color:#fff;border-radius:8px;font-size:14px;font-weight:500;text-decoration:none;white-space:nowrap;">
Kategorije
</a>
</div>
<!-- pretraga i filteri -->
<form method="GET" action="/magacin" style="display:flex;flex-direction:column;gap:10px;">
<input type="text" name="pretraga" value="{{.Filter.Pretraga}}"
placeholder="Pretraži artikle..."
style="width:100%;">
<div style="display:flex;gap:10px;flex-wrap:wrap;align-items:center;">
<select name="kategorija" style="flex:1;min-width:140px;">
<option value="">Sve kategorije</option>
{{range .Kategorije}}
<option value="{{.ID}}" {{if eq (printf "%d" .ID) $.KategorijaIDStr}}selected{{end}}>{{.Naziv}}</option>
{{end}}
</select>
<label style="display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--tekst-sporedni);cursor:pointer;padding:8px 12px;border:0.5px solid var(--ivica);border-radius:8px;background:var(--kartica);white-space:nowrap;">
<input type="checkbox" name="kriticni" value="1" {{if .Filter.SamoKriticni}}checked{{end}}>
Samo kritični
</label>
<button type="submit"
style="padding:8px 16px;background:var(--sb-aktivan);color:#fff;border:none;border-radius:8px;font-size:14px;cursor:pointer;white-space:nowrap;">
Traži
</button>
</div>
</form>
<!-- tabela artikala -->
<div class="kartica" style="padding:0;overflow:hidden;">
<div style="overflow-x:auto;">
<table style="width:100%;border-collapse:collapse;">
<thead>
<tr style="border-bottom:0.5px solid var(--ivica);">
<th style="padding:12px 16px;text-align:left;font-size:12px;font-weight:500;color:var(--tekst-sporedni);">Naziv</th>
<th style="padding:12px 16px;text-align:left;font-size:12px;font-weight:500;color:var(--tekst-sporedni);">Kategorija</th>
<th style="padding:12px 16px;text-align:center;font-size:12px;font-weight:500;color:var(--tekst-sporedni);">Količina</th>
<th style="padding:12px 16px;text-align:right;font-size:12px;font-weight:500;color:var(--tekst-sporedni);">Nabavna</th>
<th style="padding:12px 16px;text-align:right;font-size:12px;font-weight:500;color:var(--tekst-sporedni);">Prodajna</th>
<th style="padding:12px 16px;text-align:left;font-size:12px;font-weight:500;color:var(--tekst-sporedni);">Lokacija</th>
<th style="padding:12px 16px;text-align:center;font-size:12px;font-weight:500;color:var(--tekst-sporedni);">Akcije</th>
</tr>
</thead>
<tbody>
{{range .Artikli}}
<tr style="border-bottom:0.5px solid var(--ivica);transition:background 0.15s;"
onmouseover="this.style.background='var(--pozadina)'"
onmouseout="this.style.background=''">
<td style="padding:12px 16px;font-size:14px;color:var(--tekst-glavni);">{{.Naziv}}</td>
<td style="padding:12px 16px;font-size:13px;color:var(--tekst-sporedni);">
{{if .KategorijaNaziv}}{{.KategorijaNaziv}}{{else}}—{{end}}
</td>
<td style="padding:12px 16px;text-align:center;">
<span style="font-size:14px;font-weight:500;color:{{if .KriticnaZaliha}}#dc2626{{else}}#16a34a{{end}};">
{{.Kolicina}}
</span>
</td>
<td style="padding:12px 16px;text-align:right;font-size:13px;color:var(--tekst-sporedni);">{{printf "%.0f" .NabavnaCena}} din</td>
<td style="padding:12px 16px;text-align:right;font-size:14px;color:var(--tekst-glavni);">{{printf "%.0f" .ProdajnaCena}} din</td>
<td style="padding:12px 16px;font-size:13px;color:var(--tekst-sporedni);">
{{if .Lokacija}}{{.Lokacija}}{{else}}—{{end}}
</td>
<td style="padding:12px 16px;text-align:center;">
<div style="display:flex;align-items:center;justify-content:center;gap:8px;">
<a href="/magacin/izmeni/{{.ID}}"
style="padding:4px 10px;background:var(--sb-aktivan);color:#fff;border-radius:6px;font-size:12px;text-decoration:none;">
Izmeni
</a>
<a href="/magacin/obrisi/{{.ID}}"
onclick="return confirm('Da li ste sigurni da želite da obrišete ovaj artikal?')"
style="padding:4px 10px;background:#dc2626;color:#fff;border-radius:6px;font-size:12px;text-decoration:none;">
Obriši
</a>
</div>
</td>
</tr>
{{else}}
<tr>
<td colspan="7" style="padding:32px;text-align:center;font-size:14px;color:var(--tekst-sporedni);">
Nema artikala. <a href="/magacin/novi" style="color:var(--sb-akcent);">Dodaj prvi artikal.</a>
</td>
</tr>
{{end}}
</tbody>
</table>
</div>
</div>
</div>
{{end}}
+115
View File
@@ -0,0 +1,115 @@
{{template "base" .}}
{{define "naslov"}}{{if .Izmena}}Izmeni artikal{{else}}Novi artikal{{end}} — NTech{{end}}
{{define "sadrzaj"}}
<div style="width:100%;">
<!-- nazad dugme -->
<a href="/magacin" style="display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--tekst-sporedni);text-decoration:none;margin-bottom:20px;">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"/></svg>
Nazad na magacin
</a>
<div class="kartica">
<div style="margin-bottom:20px;padding-bottom:14px;border-bottom:0.5px solid var(--ivica);">
<span style="font-size:16px;font-weight:500;color:var(--tekst-glavni);">
{{if .Izmena}}Izmeni artikal{{else}}Novi artikal{{end}}
</span>
</div>
{{if .Greska}}
<div style="background:var(--kartica);border:0.5px solid #dc2626;border-radius:8px;padding:10px 14px;margin-bottom:16px;font-size:13px;color:#dc2626;">
{{.Greska}}
</div>
{{end}}
<form method="POST" action="{{if .Izmena}}/magacin/izmeni/{{.Artikal.ID}}{{else}}/magacin/novi{{end}}">
<div style="display:flex;flex-direction:column;gap:14px;">
<!-- naziv -->
<div>
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">
Naziv <span style="color:#dc2626;">*</span>
</label>
<input type="text" name="naziv" value="{{.Artikal.Naziv}}"
placeholder="npr. RAM DDR4 8GB Kingston"
style="width:100%;">
</div>
<!-- kategorija -->
<div>
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">Kategorija</label>
<select name="kategorija_id" style="width:100%;">
<option value="">— bez kategorije —</option>
{{range .Kategorije}}
<option value="{{.ID}}" {{if eq (printf "%d" .ID) $.KategorijaIDStr}}selected{{end}}>{{.Naziv}}</option>
{{end}}
</select>
</div>
<!-- opis -->
<div>
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">Opis</label>
<textarea name="opis" rows="2"
placeholder="Kratak opis artikla..."
style="width:100%;resize:vertical;">{{.Artikal.Opis}}</textarea>
</div>
<!-- količina i minimum -->
<div class="forma-grid-2" style="display:grid;grid-template-columns:1fr 1fr;gap:12px;">
<div>
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">Količina na stanju</label>
<input type="number" name="kolicina" value="{{.Artikal.Kolicina}}" min="0" style="width:100%;">
</div>
<div>
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">Minimalna količina</label>
<input type="number" name="kolicina_min" value="{{.Artikal.KolicinMin}}" min="0" style="width:100%;">
</div>
</div>
<!-- cene -->
<div class="forma-grid-2" style="display:grid;grid-template-columns:1fr 1fr;gap:12px;">
<div>
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">Nabavna cena (din)</label>
<input type="number" name="nabavna_cena" value="{{.Artikal.NabavnaCena}}" min="0" step="0.01" style="width:100%;">
</div>
<div>
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">Prodajna cena (din)</label>
<input type="number" name="prodajna_cena" value="{{.Artikal.ProdajnaCena}}" min="0" step="0.01" style="width:100%;">
</div>
</div>
<!-- lokacija -->
<div>
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">Lokacija u magacinu</label>
<input type="text" name="lokacija" value="{{.Artikal.Lokacija}}"
placeholder="npr. Polica A3, Kutija 2..."
style="width:100%;">
</div>
<!-- napomena -->
<div>
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">Napomena</label>
<textarea name="napomena" rows="2"
placeholder="Interna napomena..."
style="width:100%;resize:vertical;">{{.Artikal.Napomena}}</textarea>
</div>
<!-- dugmad -->
<div style="display:flex;justify-content:flex-end;gap:10px;margin-top:6px;">
<a href="/magacin"
style="padding:9px 20px;border:0.5px solid var(--ivica);border-radius:8px;font-size:14px;color:var(--tekst-sporedni);text-decoration:none;">
Odustani
</a>
<button type="submit"
style="padding:9px 20px;background:var(--sb-akcent);color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;">
{{if .Izmena}}Sačuvaj izmene{{else}}Dodaj artikal{{end}}
</button>
</div>
</div>
</form>
</div>
</div>
{{end}}
+1 -1
View File
@@ -3,7 +3,7 @@
{{define "naslov"}}Podešavanja — NTech{{end}}
{{define "sadrzaj"}}
<div style="max-width:720px;">
<div style="width:100%;max-width:100%;">
{{if .Sacuvano}}
<div class="poruka-uspeh">