Dodata zahtevajDozvolu metoda koja zamenjuje dupliranu proveru dozvola u handlerima.

Uvedena `AssetV` promenljiva za cache-busting statičkih fajlova, koja se postavlja pri svakom pokretanju.
Kreiran pogled `klijent_prikaz` (migracija 038) za jedinstveno prikazivanje imena klijenta, čime se eliminiše ponavljanje COALESCE logike u upitima.
Izvučena `dodeliOpcijeKorisnika` funkcija u korisnici.go radi DRY.
Zamenjeni inline stilovi u HTML šablonima CSS klasama (`.polje-labela`, `.obavezno`, `.pomocni-tekst`, `.tabela`, `.kartica-tabela`, `.prazno-stanje`).
Dodat `width: 100%` na inpute i `resize: vertical` na textarea u main.css.
This commit is contained in:
2026-06-12 00:43:58 +02:00
parent 19b66adba9
commit 726a1dbbf7
22 changed files with 247 additions and 193 deletions
+87
View File
@@ -602,6 +602,7 @@ input[type="number"],
input[type="date"],
select {
height: 38px;
width: 100%;
padding: 8px 12px;
box-sizing: border-box;
line-height: 1.5;
@@ -616,10 +617,12 @@ select {
textarea {
height: auto;
width: 100%;
min-height: 80px;
padding: 8px 12px;
box-sizing: border-box;
line-height: 1.5;
resize: vertical;
background: var(--kartica) !important;
color: var(--tekst-glavni) !important;
border: 0.5px solid var(--ivica) !important;
@@ -666,6 +669,90 @@ select {
color: var(--greska);
}
/* ============================================================
Komponente forme i tabela — zamena za ponavljane inline stilove.
Cilj: čitljiviji template, jedno mesto istine za izgled.
============================================================ */
/* labela iznad polja forme */
.polje-labela {
display: block;
font-size: 13px;
color: var(--tekst-sporedni);
margin-bottom: 6px;
}
/* oznaka obaveznog polja (zvezdica) */
.obavezno {
color: var(--greska);
}
/* sitan pomoćni/sporedni tekst (objašnjenja, vrednosti u listama) */
.pomocni-tekst {
font-size: 13px;
color: var(--tekst-sporedni);
}
/* vertikalni raspored polja unutar forme */
.forma-kolona {
display: flex;
flex-direction: column;
gap: 18px;
}
/* grid raspored polja — osnovne (desktop) vrednosti;
responsivni override na uže ekrane je niže u media bloku */
.forma-grid-2 {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
}
.forma-grid-4 {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
gap: 12px;
}
/* === tabele === */
.tabela {
width: 100%;
border-collapse: collapse;
}
.tabela thead tr {
border-bottom: 0.5px solid var(--ivica);
}
.tabela th {
padding: 12px 16px;
text-align: left;
font-size: 12px;
font-weight: 500;
color: var(--tekst-jak);
}
.tabela td {
padding: 12px 16px;
}
.tabela .centar {
text-align: center;
}
/* kartica koja sadrži tabelu — bez paddinga, zaobljeni uglovi sečeni */
.kartica-tabela {
padding: 0;
overflow: hidden;
}
/* horizontalni skrol omotač oko tabele na uskim ekranima */
.tabela-skrol {
overflow-x: auto;
}
/* prazno stanje (nema podataka) u tabeli ili listi kartica */
.prazno-stanje {
padding: 32px;
text-align: center;
font-size: 14px;
color: var(--tekst-sporedni);
}
/* overlay za mobilni — tamni sloj iza sidebara */
.sidebar-overlay {
display: none;