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:
@@ -20,7 +20,7 @@
|
||||
{{end}}
|
||||
|
||||
{{define "sadrzaj"}}
|
||||
<div style="width:100%;">
|
||||
<div>
|
||||
|
||||
<a href="/klijenti" class="nazad-link">
|
||||
<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" aria-hidden="true"><polyline points="15 18 9 12 15 6"/></svg>
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
<form method="POST" action="{{if .Izmena}}/klijenti/izmeni/{{.Klijent.ID}}{{else}}/klijenti/novi{{end}}">
|
||||
<input type="hidden" name="csrf_token" value="{{.CsrfToken}}">
|
||||
<div style="display:flex;flex-direction:column;gap:18px;">
|
||||
<div class="forma-kolona">
|
||||
|
||||
<!-- tip klijenta -->
|
||||
<div>
|
||||
@@ -64,42 +64,42 @@
|
||||
<!-- sekcija fizičko lice -->
|
||||
<div id="sec-fizicko" style="display:flex;flex-direction:column;gap:12px;">
|
||||
<div class="sekcija-naslov">Ime i prezime</div>
|
||||
<div class="forma-grid-2" style="display:grid;grid-template-columns:1fr 1fr;gap:12px;">
|
||||
<div class="forma-grid-2">
|
||||
<div>
|
||||
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">
|
||||
Ime <span id="ime-oznaka" style="color:#dc2626;">*</span>
|
||||
<label class="polje-labela">
|
||||
Ime <span id="ime-oznaka" class="obavezno">*</span>
|
||||
</label>
|
||||
<input type="text" name="ime" value="{{.Klijent.Ime}}"
|
||||
placeholder="npr. Marko" style="width:100%;">
|
||||
placeholder="npr. Marko">
|
||||
</div>
|
||||
<div>
|
||||
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">Prezime</label>
|
||||
<label class="polje-labela">Prezime</label>
|
||||
<input type="text" name="prezime" value="{{.Klijent.Prezime}}"
|
||||
placeholder="npr. Petrović" style="width:100%;">
|
||||
placeholder="npr. Petrović">
|
||||
</div>
|
||||
</div>
|
||||
<div style="max-width:260px;">
|
||||
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">JMBG</label>
|
||||
<label class="polje-labela">JMBG</label>
|
||||
<input type="text" name="jmbg" value="{{.Klijent.JMBG}}"
|
||||
placeholder="13 cifara" maxlength="13" style="width:100%;">
|
||||
placeholder="13 cifara" maxlength="13">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- sekcija pravno lice -->
|
||||
<div id="sec-pravno" style="display:none;flex-direction:column;gap:12px;">
|
||||
<div class="sekcija-naslov">Firma</div>
|
||||
<div class="forma-grid-2" style="display:grid;grid-template-columns:1fr 1fr;gap:12px;">
|
||||
<div class="forma-grid-2">
|
||||
<div>
|
||||
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">
|
||||
Naziv firme <span style="color:#dc2626;">*</span>
|
||||
<label class="polje-labela">
|
||||
Naziv firme <span class="obavezno">*</span>
|
||||
</label>
|
||||
<input type="text" name="naziv_firme" value="{{.Klijent.NazivFirme}}"
|
||||
placeholder="npr. TechSolutions d.o.o." style="width:100%;">
|
||||
placeholder="npr. TechSolutions d.o.o.">
|
||||
</div>
|
||||
<div>
|
||||
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">PIB</label>
|
||||
<label class="polje-labela">PIB</label>
|
||||
<input type="text" name="pib" value="{{.Klijent.PIB}}"
|
||||
placeholder="npr. 123456789" style="width:100%;">
|
||||
placeholder="npr. 123456789">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -107,26 +107,25 @@
|
||||
<!-- kontakt -->
|
||||
<div>
|
||||
<div class="sekcija-naslov">Kontakt</div>
|
||||
<div class="forma-grid-2" style="display:grid;grid-template-columns:1fr 1fr;gap:12px;">
|
||||
<div class="forma-grid-2">
|
||||
<div>
|
||||
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">Telefon</label>
|
||||
<label class="polje-labela">Telefon</label>
|
||||
<input type="text" name="telefon" value="{{.Klijent.Telefon}}"
|
||||
placeholder="npr. 060 123 4567" style="width:100%;">
|
||||
placeholder="npr. 060 123 4567">
|
||||
</div>
|
||||
<div>
|
||||
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">E-pošta</label>
|
||||
<label class="polje-labela">E-pošta</label>
|
||||
<input type="text" name="email" value="{{.Klijent.Email}}"
|
||||
placeholder="npr. marko@example.com" style="width:100%;">
|
||||
placeholder="npr. marko@example.com">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- napomena -->
|
||||
<div>
|
||||
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">Napomena</label>
|
||||
<label class="polje-labela">Napomena</label>
|
||||
<textarea name="napomena" rows="3"
|
||||
placeholder="Interna napomena o klijentu..."
|
||||
style="width:100%;resize:vertical;">{{.Klijent.Napomena}}</textarea>
|
||||
placeholder="Interna napomena o klijentu...">{{.Klijent.Napomena}}</textarea>
|
||||
</div>
|
||||
|
||||
<!-- dugmad -->
|
||||
|
||||
@@ -47,22 +47,22 @@
|
||||
</div>
|
||||
|
||||
<!-- desktop tabela -->
|
||||
<div class="kartica klijenti-tabela animiraj" style="padding:0;overflow:hidden;">
|
||||
<div style="overflow-x:auto;">
|
||||
<table style="width:100%;border-collapse:collapse;">
|
||||
<div class="kartica klijenti-tabela kartica-tabela animiraj">
|
||||
<div class="tabela-skrol">
|
||||
<table class="tabela">
|
||||
<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-jak);">Ime / Naziv firme</th>
|
||||
<th style="padding:12px 16px;text-align:left;font-size:12px;font-weight:500;color:var(--tekst-jak);">Telefon</th>
|
||||
<th style="padding:12px 16px;text-align:left;font-size:12px;font-weight:500;color:var(--tekst-jak);">E-pošta</th>
|
||||
<th style="padding:12px 16px;text-align:left;font-size:12px;font-weight:500;color:var(--tekst-jak);">Datum unosa</th>
|
||||
<th style="padding:12px 16px;text-align:center;font-size:12px;font-weight:500;color:var(--tekst-jak);">Akcije</th>
|
||||
<tr>
|
||||
<th>Ime / Naziv firme</th>
|
||||
<th>Telefon</th>
|
||||
<th>E-pošta</th>
|
||||
<th>Datum unosa</th>
|
||||
<th class="centar">Akcije</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{range .Klijenti}}
|
||||
<tr class="animiraj red-tabele">
|
||||
<td style="padding:12px 16px;">
|
||||
<td>
|
||||
{{if .NazivFirme}}
|
||||
<div style="font-size:14px;font-weight:500;color:var(--tekst-glavni);">{{.NazivFirme}}</div>
|
||||
{{if or .Ime .Prezime}}
|
||||
@@ -72,16 +72,16 @@
|
||||
<div style="font-size:14px;font-weight:500;color:var(--tekst-glavni);">{{.Ime}} {{.Prezime}}</div>
|
||||
{{end}}
|
||||
</td>
|
||||
<td style="padding:12px 16px;font-size:13px;color:var(--tekst-sporedni);">
|
||||
<td class="pomocni-tekst">
|
||||
{{if .Telefon}}{{.Telefon}}{{else}}—{{end}}
|
||||
</td>
|
||||
<td style="padding:12px 16px;font-size:13px;color:var(--tekst-sporedni);">
|
||||
<td class="pomocni-tekst">
|
||||
{{if .Email}}{{.Email}}{{else}}—{{end}}
|
||||
</td>
|
||||
<td style="padding:12px 16px;font-size:13px;color:var(--tekst-sporedni);">
|
||||
<td class="pomocni-tekst">
|
||||
{{.DatumUnosa.Format "02.01.2006."}}
|
||||
</td>
|
||||
<td style="padding:12px 16px;text-align:center;">
|
||||
<td class="centar">
|
||||
<div style="display:flex;align-items:center;justify-content:center;gap:8px;">
|
||||
<a href="/klijenti/izmeni/{{.ID}}" class="btn-primarno-malo">
|
||||
Izmeni
|
||||
@@ -99,7 +99,7 @@
|
||||
</tr>
|
||||
{{else}}
|
||||
<tr>
|
||||
<td colspan="5" style="padding:32px;text-align:center;font-size:14px;color:var(--tekst-sporedni);">
|
||||
<td colspan="5" class="prazno-stanje">
|
||||
Nema klijenata. <a href="/klijenti/novi" style="color:var(--sb-akcent);">Dodaj prvog klijenta.</a>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -155,7 +155,7 @@
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div style="padding:32px;text-align:center;font-size:14px;color:var(--tekst-sporedni);">
|
||||
<div class="prazno-stanje">
|
||||
Nema klijenata. <a href="/klijenti/novi" style="color:var(--sb-akcent);">Dodaj prvog klijenta.</a>
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
@@ -17,10 +17,10 @@
|
||||
{{if .AppPozadina}}<link rel="preload" as="image" href="{{.AppPozadina}}">{{end}}
|
||||
|
||||
<!-- tema — učitava se prva -->
|
||||
<link rel="stylesheet" href="/static/css/teme/{{.Tema}}.css" />
|
||||
<link rel="stylesheet" href="/static/css/teme/{{.Tema}}.css?v={{.AssetV}}" />
|
||||
|
||||
<!-- glavni stilovi -->
|
||||
<link rel="stylesheet" href="/static/css/main.css" />
|
||||
<link rel="stylesheet" href="/static/css/main.css?v={{.AssetV}}" />
|
||||
|
||||
{{block "dodatni-css" .}}{{end}}
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
</div>
|
||||
|
||||
<!-- alpine.js komponente (mora biti pre Alpine-a) -->
|
||||
<script src="/static/js/ntech.js" defer></script>
|
||||
<script src="/static/js/ntech.js?v={{.AssetV}}" defer></script>
|
||||
<!-- alpine.js CSP build (lokalno, bez unsafe-eval) -->
|
||||
<script src="/static/js/alpine.csp.min.js" defer></script>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user