Optimizacije — SQLite WAL, template keš, gzip kompresija, build skript
This commit is contained in:
@@ -10,18 +10,12 @@
|
||||
</button>
|
||||
<div class="logo-zona">
|
||||
{{if eq .LogoTip "slika"}}
|
||||
<img src="/static/{{.LogoPutanja}}" alt="Logo" style="width:36px;height:36px;object-fit:contain;border-radius:6px;flex-shrink:0;">
|
||||
<div>
|
||||
<div class="logo-naziv">{{.NazivFirme}}</div>
|
||||
<div class="logo-podnazlov">{{.Podnazlov}}</div>
|
||||
</div>
|
||||
{{else if eq .LogoTip "tekst"}}
|
||||
<div>
|
||||
<div class="logo-naziv">{{.NazivFirme}}</div>
|
||||
<div class="logo-podnazlov">{{.Podnazlov}}</div>
|
||||
</div>
|
||||
<img src="{{.LogoPutanja}}" alt="Logo"
|
||||
style="max-height:48px;width:auto;border-radius:8px;padding:4px;background:var(--kartica);box-shadow:var(--senka);transition:transform 0.2s;flex-shrink:0;"
|
||||
onmouseover="this.style.transform='scale(1.02)'"
|
||||
onmouseout="this.style.transform='scale(1)'">
|
||||
{{else if eq .LogoTip "bez_naziva"}}
|
||||
{{else}}
|
||||
<div style="width:36px;height:36px;border-radius:8px;background:rgba(255,255,255,0.1);border:1.5px dashed rgba(255,255,255,0.25);flex-shrink:0;"></div>
|
||||
<div>
|
||||
<div class="logo-naziv">{{.NazivFirme}}</div>
|
||||
<div class="logo-podnazlov">{{.Podnazlov}}</div>
|
||||
@@ -69,6 +63,12 @@
|
||||
<span class="nav-tooltip">Klijenti</span>
|
||||
</a>
|
||||
|
||||
<a href="/podsetnici" class="nav-stavka {{if eq .Stranica "podsetnici"}}aktivan{{end}}">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/></svg>
|
||||
<span>Podsetnici</span>
|
||||
<span class="nav-tooltip">Podsetnici</span>
|
||||
</a>
|
||||
|
||||
<a href="/dobavljaci" class="nav-stavka {{if eq .Stranica "dobavljaci"}}aktivan{{end}}">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="1" y="3" width="15" height="13" rx="1"/><path d="M16 8h4l3 3v5h-7V8z"/><circle cx="5.5" cy="18.5" r="2.5"/><circle cx="18.5" cy="18.5" r="2.5"/></svg>
|
||||
<span>Dobavljači</span>
|
||||
|
||||
@@ -13,10 +13,8 @@
|
||||
<span class="topbar-naslov">{{.NaslovStranice}}</span>
|
||||
|
||||
<div class="topbar-teme" style="display:flex;align-items:center;gap:8px;">
|
||||
<a href="/tema/tamna" class="tema-krug {{if eq .Tema "tamna"}}tema-krug-aktivan{{end}}" style="background:#4f7ef8;" title="Tamna"></a>
|
||||
<a href="/tema/svetla" class="tema-krug {{if eq .Tema "svetla"}}tema-krug-aktivan{{end}}" style="background:#e2e8f0;" title="Svetla"></a>
|
||||
<a href="/tema/zelena" class="tema-krug {{if eq .Tema "zelena"}}tema-krug-aktivan{{end}}" style="background:#22c55e;" title="Zelena"></a>
|
||||
<a href="/tema/ljubicasta" class="tema-krug {{if eq .Tema "ljubicasta"}}tema-krug-aktivan{{end}}" style="background:#a855f7;" title="Ljubičasta"></a>
|
||||
<a href="/tema/tamna" class="tema-krug {{if eq .Tema "tamna"}}tema-krug-aktivan{{end}}" style="background:#1a1d27;" title="Tamna"></a>
|
||||
<a href="/tema/svetla" class="tema-krug {{if eq .Tema "svetla"}}tema-krug-aktivan{{end}}" style="background:#f0f2f5;border:1px solid #e2e6ed;" title="Svetla"></a>
|
||||
</div>
|
||||
|
||||
<div style="width:32px;height:32px;border-radius:50%;background:var(--sb-aktivan);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:500;color:#fff;flex-shrink:0;">
|
||||
|
||||
@@ -2,11 +2,47 @@
|
||||
|
||||
{{define "naslov"}}Korisnici — NTech{{end}}
|
||||
|
||||
{{define "dodatni-css"}}
|
||||
<style>
|
||||
@keyframes slideDown {
|
||||
from { opacity: 0; transform: translateY(-10px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
@keyframes fadeInUp {
|
||||
from { opacity: 0; transform: translateY(8px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
|
||||
.poruka-animacija { animation: slideDown 0.3s ease forwards; }
|
||||
|
||||
.korisnici-tabela tbody tr {
|
||||
animation: fadeInUp 0.25s ease forwards;
|
||||
opacity: 0;
|
||||
}
|
||||
.korisnici-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; }
|
||||
.korisnici-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; }
|
||||
.korisnici-tabela tbody tr:nth-child(3) { animation-delay: 0.12s; }
|
||||
.korisnici-tabela tbody tr:nth-child(4) { animation-delay: 0.16s; }
|
||||
.korisnici-tabela tbody tr:nth-child(5) { animation-delay: 0.20s; }
|
||||
.korisnici-tabela tbody tr:nth-child(6) { animation-delay: 0.24s; }
|
||||
.korisnici-tabela tbody tr:nth-child(7) { animation-delay: 0.28s; }
|
||||
.korisnici-tabela tbody tr:nth-child(8) { animation-delay: 0.32s; }
|
||||
.korisnici-tabela tbody tr:nth-child(9) { animation-delay: 0.36s; }
|
||||
.korisnici-tabela tbody tr:nth-child(10) { animation-delay: 0.40s; }
|
||||
|
||||
.nova-forma-kartica {
|
||||
animation: fadeInUp 0.25s ease forwards;
|
||||
opacity: 0;
|
||||
animation-delay: 0.30s;
|
||||
}
|
||||
</style>
|
||||
{{end}}
|
||||
|
||||
{{define "sadrzaj"}}
|
||||
<div style="display:flex;flex-direction:column;gap:16px;">
|
||||
|
||||
{{if .Sacuvano}}
|
||||
<div class="poruka-uspeh">Promene su uspešno sačuvane.</div>
|
||||
<div class="poruka-uspeh poruka-animacija">Promene su uspešno sačuvane.</div>
|
||||
{{end}}
|
||||
|
||||
{{if eq .Greska "1"}}
|
||||
@@ -21,7 +57,7 @@
|
||||
<span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Korisnici sistema</span>
|
||||
</div>
|
||||
<div style="overflow-x:auto;">
|
||||
<table style="width:100%;border-collapse:collapse;">
|
||||
<table class="korisnici-tabela" style="width:100%;border-collapse:collapse;">
|
||||
<thead>
|
||||
<tr style="border-bottom:0.5px solid var(--ivica);">
|
||||
<th style="padding:10px 20px;text-align:left;font-size:12px;font-weight:500;color:var(--tekst-sporedni);">Korisničko ime</th>
|
||||
@@ -87,7 +123,7 @@
|
||||
</div>
|
||||
|
||||
<!-- forma za novog korisnika -->
|
||||
<div class="kartica">
|
||||
<div class="kartica nova-forma-kartica">
|
||||
<div style="font-size:15px;font-weight:500;color:var(--tekst-glavni);margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);">
|
||||
Novi korisnik
|
||||
</div>
|
||||
|
||||
@@ -31,18 +31,15 @@
|
||||
<div style="display:flex;flex-direction:column;gap:12px;">
|
||||
<div>
|
||||
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">Trenutna lozinka</label>
|
||||
<input type="password" name="stara_lozinka" required
|
||||
style="width:100%;padding:8px 12px;border:0.5px solid var(--ivica);border-radius:8px;font-size:14px;background:var(--pozadina);color:var(--tekst-glavni);outline:none;">
|
||||
<input type="password" name="stara_lozinka" required style="width:100%;">
|
||||
</div>
|
||||
<div>
|
||||
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">Nova lozinka</label>
|
||||
<input type="password" name="nova_lozinka" required minlength="8"
|
||||
style="width:100%;padding:8px 12px;border:0.5px solid var(--ivica);border-radius:8px;font-size:14px;background:var(--pozadina);color:var(--tekst-glavni);outline:none;">
|
||||
<input type="password" name="nova_lozinka" required minlength="8" style="width:100%;">
|
||||
</div>
|
||||
<div>
|
||||
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">Potvrda nove lozinke</label>
|
||||
<input type="password" name="nova_lozinka_potvrda" required
|
||||
style="width:100%;padding:8px 12px;border:0.5px solid var(--ivica);border-radius:8px;font-size:14px;background:var(--pozadina);color:var(--tekst-glavni);outline:none;">
|
||||
<input type="password" name="nova_lozinka_potvrda" required style="width:100%;">
|
||||
</div>
|
||||
<div>
|
||||
<button type="submit"
|
||||
@@ -85,7 +82,7 @@
|
||||
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">Verifikacioni kod</label>
|
||||
<input type="text" name="kod" inputmode="numeric" pattern="[0-9]{6}"
|
||||
maxlength="6" required autofocus
|
||||
style="width:160px;padding:8px 12px;border:0.5px solid var(--ivica);border-radius:8px;font-size:18px;background:var(--pozadina);color:var(--tekst-glavni);outline:none;text-align:center;letter-spacing:4px;">
|
||||
style="width:160px;font-size:18px;text-align:center;letter-spacing:4px;">
|
||||
</div>
|
||||
<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;">
|
||||
|
||||
@@ -2,10 +2,37 @@
|
||||
|
||||
{{define "naslov"}}Dashboard — NTech{{end}}
|
||||
|
||||
{{define "dodatni-css"}}
|
||||
<style>
|
||||
@keyframes fadeInUp {
|
||||
from { opacity: 0; transform: translateY(8px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
|
||||
.dash-stat {
|
||||
animation: fadeInUp 0.25s ease forwards;
|
||||
opacity: 0;
|
||||
}
|
||||
.dash-stat:nth-child(1) { animation-delay: 0.04s; }
|
||||
.dash-stat:nth-child(2) { animation-delay: 0.10s; }
|
||||
.dash-stat:nth-child(3) { animation-delay: 0.16s; }
|
||||
.dash-stat:nth-child(4) { animation-delay: 0.22s; }
|
||||
.dash-stat:nth-child(5) { animation-delay: 0.28s; }
|
||||
|
||||
.dash-kartica {
|
||||
animation: fadeInUp 0.25s ease forwards;
|
||||
opacity: 0;
|
||||
}
|
||||
.dash-kartica:nth-child(1) { animation-delay: 0.20s; }
|
||||
.dash-kartica:nth-child(2) { animation-delay: 0.28s; }
|
||||
.dash-kartica:nth-child(3) { animation-delay: 0.36s; }
|
||||
</style>
|
||||
{{end}}
|
||||
|
||||
{{define "sadrzaj"}}
|
||||
<div class="grid grid-cols-2 md:grid-cols-4 gap-3 mb-6">
|
||||
<div class="grid grid-cols-2 md:grid-cols-5 gap-3 mb-6">
|
||||
<!-- stat kartice -->
|
||||
<div class="kartica">
|
||||
<div class="kartica dash-stat">
|
||||
<div style="width:36px;height:36px;border-radius:8px;background:#eff2ff;display:flex;align-items:center;justify-content:center;margin-bottom:10px;">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#4f7ef8" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/></svg>
|
||||
</div>
|
||||
@@ -13,7 +40,7 @@
|
||||
<div style="font-size:12px;color:var(--tekst-sporedni);margin-top:4px;">Artikala na stanju</div>
|
||||
</div>
|
||||
|
||||
<div class="kartica">
|
||||
<div class="kartica dash-stat">
|
||||
<div style="width:36px;height:36px;border-radius:8px;background:#f0fdf4;display:flex;align-items:center;justify-content:center;margin-bottom:10px;">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#16a34a" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/></svg>
|
||||
</div>
|
||||
@@ -21,7 +48,7 @@
|
||||
<div style="font-size:12px;color:var(--tekst-sporedni);margin-top:4px;">Aktivnih servisa</div>
|
||||
</div>
|
||||
|
||||
<div class="kartica">
|
||||
<div class="kartica dash-stat">
|
||||
<div style="width:36px;height:36px;border-radius:8px;background:#fff7ed;display:flex;align-items:center;justify-content:center;margin-bottom:10px;">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#ea580c" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="21" r="1"/><circle cx="20" cy="21" r="1"/><path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"/></svg>
|
||||
</div>
|
||||
@@ -29,18 +56,26 @@
|
||||
<div style="font-size:12px;color:var(--tekst-sporedni);margin-top:4px;">Prihod ovog meseca</div>
|
||||
</div>
|
||||
|
||||
<div class="kartica">
|
||||
<div class="kartica dash-stat">
|
||||
<div style="width:36px;height:36px;border-radius:8px;background:#fef2f2;display:flex;align-items:center;justify-content:center;margin-bottom:10px;">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#dc2626" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>
|
||||
</div>
|
||||
<div style="font-size:22px;font-weight:500;color:var(--tekst-glavni);">{{.KriticnaZaliha}}</div>
|
||||
<div style="font-size:12px;color:var(--tekst-sporedni);margin-top:4px;">Kritično niska zaliha</div>
|
||||
</div>
|
||||
|
||||
<a href="/podsetnici" class="kartica dash-stat" style="text-decoration:none;display:block;">
|
||||
<div style="width:36px;height:36px;border-radius:8px;background:#f0f9ff;display:flex;align-items:center;justify-content:center;margin-bottom:10px;">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="#0284c7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/></svg>
|
||||
</div>
|
||||
<div style="font-size:22px;font-weight:500;color:var(--tekst-glavni);">{{.AktivniPodsetnici}}</div>
|
||||
<div style="font-size:12px;color:var(--tekst-sporedni);margin-top:4px;">Aktivnih podsetnika</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
|
||||
<!-- poslednji servisi -->
|
||||
<div class="kartica">
|
||||
<div class="kartica dash-kartica">
|
||||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;">
|
||||
<span style="font-size:14px;font-weight:500;color:var(--tekst-glavni);">Poslednji servisi</span>
|
||||
</div>
|
||||
@@ -56,7 +91,7 @@
|
||||
</div>
|
||||
|
||||
<!-- kritične zalihe -->
|
||||
<div class="kartica">
|
||||
<div class="kartica dash-kartica">
|
||||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;">
|
||||
<span style="font-size:14px;font-weight:500;color:var(--tekst-glavni);">Kritične zalihe</span>
|
||||
<span style="font-size:11px;padding:2px 8px;border-radius:20px;background:#fffbeb;color:#b45309;font-weight:500;">Upozorenje</span>
|
||||
@@ -73,7 +108,7 @@
|
||||
</div>
|
||||
|
||||
<!-- poslednje prodaje -->
|
||||
<div class="kartica">
|
||||
<div class="kartica dash-kartica">
|
||||
<div style="display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;">
|
||||
<span style="font-size:14px;font-weight:500;color:var(--tekst-glavni);">Poslednje prodaje</span>
|
||||
</div>
|
||||
|
||||
@@ -82,6 +82,26 @@
|
||||
|
||||
.badge-dana.upozorenje { background: #fffbeb; color: #b45309; }
|
||||
.badge-dana.kritican { background: #fef2f2; color: #dc2626; }
|
||||
|
||||
@keyframes fadeInUp {
|
||||
from { opacity: 0; transform: translateY(8px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
|
||||
.izv-sekcija {
|
||||
animation: fadeInUp 0.25s ease forwards;
|
||||
opacity: 0;
|
||||
}
|
||||
.izv-sekcija:nth-child(1) { animation-delay: 0.04s; }
|
||||
.izv-sekcija:nth-child(2) { animation-delay: 0.12s; }
|
||||
.izv-sekcija:nth-child(3) { animation-delay: 0.20s; }
|
||||
|
||||
.izv-grid-kartica {
|
||||
animation: fadeInUp 0.25s ease forwards;
|
||||
opacity: 0;
|
||||
}
|
||||
.izv-grid-kartica:nth-child(1) { animation-delay: 0.24s; }
|
||||
.izv-grid-kartica:nth-child(2) { animation-delay: 0.32s; }
|
||||
</style>
|
||||
{{end}}
|
||||
|
||||
@@ -89,7 +109,7 @@
|
||||
<div style="display:flex;flex-direction:column;gap:20px;">
|
||||
|
||||
<!-- 1. mesečni prihod -->
|
||||
<div class="kartica">
|
||||
<div class="kartica izv-sekcija">
|
||||
<div style="display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-bottom:4px;">
|
||||
<div class="izv-naslov" style="margin-bottom:0;">Mesečni prihod — poslednjih 12 meseci</div>
|
||||
<div class="toggle-red" style="margin-bottom:0;">
|
||||
@@ -136,7 +156,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 2. stari otvoreni nalozi -->
|
||||
<div class="kartica">
|
||||
<div class="kartica izv-sekcija">
|
||||
<div class="izv-naslov">Stari otvoreni nalozi — bez završetka duže od 14 dana</div>
|
||||
{{if .StariNalozi}}
|
||||
<div style="overflow-x:auto;">
|
||||
@@ -178,10 +198,10 @@
|
||||
{{end}}
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 izv-sekcija">
|
||||
|
||||
<!-- 3. top 10 artikala -->
|
||||
<div class="kartica">
|
||||
<div class="kartica izv-grid-kartica">
|
||||
<div class="izv-naslov">Najprodavaniji artikli — top 10</div>
|
||||
{{if .TopArtikli}}
|
||||
<table style="width:100%;border-collapse:collapse;">
|
||||
@@ -215,7 +235,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 4. top 10 klijenata -->
|
||||
<div class="kartica">
|
||||
<div class="kartica izv-grid-kartica">
|
||||
<div class="izv-naslov">Najvažniji klijenti — top 10</div>
|
||||
{{if .TopKlijenti}}
|
||||
<table style="width:100%;border-collapse:collapse;">
|
||||
|
||||
@@ -2,14 +2,48 @@
|
||||
|
||||
{{define "naslov"}}Kategorije — NTech{{end}}
|
||||
|
||||
{{define "dodatni-css"}}
|
||||
<style>
|
||||
@keyframes slideDown {
|
||||
from { opacity: 0; transform: translateY(-10px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
@keyframes fadeInUp {
|
||||
from { opacity: 0; transform: translateY(8px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
|
||||
.poruka-animacija { animation: slideDown 0.3s ease forwards; }
|
||||
|
||||
.kat-forma-kartica {
|
||||
animation: fadeInUp 0.25s ease forwards;
|
||||
opacity: 0;
|
||||
animation-delay: 0.04s;
|
||||
}
|
||||
|
||||
.kat-red {
|
||||
animation: fadeInUp 0.25s ease forwards;
|
||||
opacity: 0;
|
||||
}
|
||||
.kat-red:nth-child(1) { animation-delay: 0.12s; }
|
||||
.kat-red:nth-child(2) { animation-delay: 0.18s; }
|
||||
.kat-red:nth-child(3) { animation-delay: 0.24s; }
|
||||
.kat-red:nth-child(4) { animation-delay: 0.30s; }
|
||||
.kat-red:nth-child(5) { animation-delay: 0.36s; }
|
||||
.kat-red:nth-child(6) { animation-delay: 0.42s; }
|
||||
.kat-red:nth-child(7) { animation-delay: 0.48s; }
|
||||
.kat-red:nth-child(8) { animation-delay: 0.54s; }
|
||||
</style>
|
||||
{{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>
|
||||
<div class="poruka-uspeh poruka-animacija">Kategorija je uspešno sačuvana.</div>
|
||||
{{end}}
|
||||
{{if .Obrisana}}
|
||||
<div class="poruka-uspeh">Kategorija je uspešno obrisana.</div>
|
||||
<div class="poruka-uspeh poruka-animacija">Kategorija je uspešno obrisana.</div>
|
||||
{{end}}
|
||||
|
||||
<!-- nazad dugme -->
|
||||
@@ -19,7 +53,7 @@
|
||||
</a>
|
||||
|
||||
<!-- forma za novu kategoriju -->
|
||||
<div class="kartica">
|
||||
<div class="kartica kat-forma-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>
|
||||
@@ -53,7 +87,7 @@
|
||||
<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 class="kat-red" 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}}
|
||||
|
||||
@@ -2,6 +2,30 @@
|
||||
|
||||
{{define "naslov"}}Magacin — NTech{{end}}
|
||||
|
||||
{{define "dodatni-css"}}
|
||||
<style>
|
||||
@keyframes fadeInUp {
|
||||
from { opacity: 0; transform: translateY(8px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
|
||||
.magacin-tabela tbody tr {
|
||||
animation: fadeInUp 0.25s ease forwards;
|
||||
opacity: 0;
|
||||
}
|
||||
.magacin-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; }
|
||||
.magacin-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; }
|
||||
.magacin-tabela tbody tr:nth-child(3) { animation-delay: 0.12s; }
|
||||
.magacin-tabela tbody tr:nth-child(4) { animation-delay: 0.16s; }
|
||||
.magacin-tabela tbody tr:nth-child(5) { animation-delay: 0.20s; }
|
||||
.magacin-tabela tbody tr:nth-child(6) { animation-delay: 0.24s; }
|
||||
.magacin-tabela tbody tr:nth-child(7) { animation-delay: 0.28s; }
|
||||
.magacin-tabela tbody tr:nth-child(8) { animation-delay: 0.32s; }
|
||||
.magacin-tabela tbody tr:nth-child(9) { animation-delay: 0.36s; }
|
||||
.magacin-tabela tbody tr:nth-child(10) { animation-delay: 0.40s; }
|
||||
</style>
|
||||
{{end}}
|
||||
|
||||
{{define "sadrzaj"}}
|
||||
<div style="display:flex;flex-direction:column;gap:16px;">
|
||||
|
||||
@@ -50,7 +74,7 @@
|
||||
<!-- tabela artikala -->
|
||||
<div class="kartica" style="padding:0;overflow:hidden;">
|
||||
<div style="overflow-x:auto;">
|
||||
<table style="width:100%;border-collapse:collapse;">
|
||||
<table class="magacin-tabela" 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>
|
||||
|
||||
@@ -11,6 +11,37 @@
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
<!-- upload loga — posebna forma jer je multipart, mora biti van glavne forme -->
|
||||
<form method="POST" action="/podesavanja/logo" enctype="multipart/form-data">
|
||||
<div class="kartica" style="margin-bottom:16px;">
|
||||
<div style="display:flex;align-items:center;gap:10px;margin-bottom:16px;padding-bottom:12px;border-bottom:0.5px solid var(--ivica);">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="var(--sb-akcent)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="8.5" cy="8.5" r="1.5"/><polyline points="21 15 16 10 5 21"/></svg>
|
||||
<span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Logo firme</span>
|
||||
</div>
|
||||
{{if .LogoGreska}}
|
||||
<div style="background:rgba(207,87,87,0.1);border:0.5px solid var(--greska);border-radius:8px;padding:8px 12px;margin-bottom:10px;font-size:13px;color:var(--greska);">
|
||||
{{.LogoGreska}}
|
||||
</div>
|
||||
{{end}}
|
||||
{{if .LogoPutanja}}
|
||||
<div style="margin-bottom:12px;">
|
||||
<img src="{{.LogoPutanja}}" alt="Trenutni logo"
|
||||
style="max-height:60px;max-width:200px;object-fit:contain;border:0.5px solid var(--ivica);border-radius:8px;padding:6px;background:var(--kartica);">
|
||||
</div>
|
||||
{{end}}
|
||||
<div style="display:flex;gap:10px;align-items:center;flex-wrap:wrap;">
|
||||
<input type="file" name="logo" accept=".png,.jpg,.jpeg,.svg"
|
||||
style="flex:1;min-width:200px;font-size:13px;color:var(--tekst-sporedni);">
|
||||
<button type="submit"
|
||||
style="padding:8px 16px;background:var(--sb-aktivan);color:var(--tekst-jak);border:0.5px solid var(--ivica);border-radius:8px;font-size:13px;cursor:pointer;white-space:nowrap;transition:opacity 0.2s;"
|
||||
onmouseover="this.style.opacity='0.8'" onmouseout="this.style.opacity='1'">
|
||||
Otpremi logo
|
||||
</button>
|
||||
</div>
|
||||
<div style="font-size:12px;color:var(--tekst-sporedni);margin-top:6px;">PNG, JPG ili SVG — maksimum 2 MB</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<form method="POST" action="/podesavanja/sacuvaj">
|
||||
|
||||
<!-- sekcija: firma -->
|
||||
@@ -59,21 +90,22 @@
|
||||
|
||||
<div>
|
||||
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:8px;">Logo zona</label>
|
||||
<div style="display:flex;gap:10px;">
|
||||
<label style="display:flex;align-items:center;gap:8px;padding:10px 14px;border:0.5px solid var(--ivica);border-radius:8px;cursor:pointer;flex:1;{{if eq .LogoTip "ikonica"}}border-color:var(--sb-akcent);background:var(--pozadina);{{end}}">
|
||||
<input type="radio" name="logo_tip" value="ikonica" {{if eq .LogoTip "ikonica"}}checked{{end}} style="accent-color:var(--sb-akcent);">
|
||||
<span style="font-size:13px;color:var(--tekst-glavni);">Ikonica</span>
|
||||
<div style="display:flex;gap:10px;flex-wrap:wrap;">
|
||||
<label style="display:flex;align-items:center;gap:8px;padding:10px 14px;border:0.5px solid var(--ivica);border-radius:8px;cursor:pointer;flex:1;{{if or (eq .LogoTip "sa_nazivom") (eq .LogoTip "tekst") (eq .LogoTip "ikonica") (not .LogoTip)}}border-color:var(--sb-akcent);background:var(--pozadina);{{end}}">
|
||||
<input type="radio" name="logo_tip" value="sa_nazivom" {{if or (eq .LogoTip "sa_nazivom") (eq .LogoTip "tekst") (eq .LogoTip "ikonica") (not .LogoTip)}}checked{{end}} style="accent-color:var(--sb-akcent);">
|
||||
<span style="font-size:13px;color:var(--tekst-glavni);">Sa nazivom</span>
|
||||
</label>
|
||||
<label style="display:flex;align-items:center;gap:8px;padding:10px 14px;border:0.5px solid var(--ivica);border-radius:8px;cursor:pointer;flex:1;{{if eq .LogoTip "tekst"}}border-color:var(--sb-akcent);background:var(--pozadina);{{end}}">
|
||||
<input type="radio" name="logo_tip" value="tekst" {{if eq .LogoTip "tekst"}}checked{{end}} style="accent-color:var(--sb-akcent);">
|
||||
<span style="font-size:13px;color:var(--tekst-glavni);">Bez ikonice</span>
|
||||
<label style="display:flex;align-items:center;gap:8px;padding:10px 14px;border:0.5px solid var(--ivica);border-radius:8px;cursor:pointer;flex:1;{{if eq .LogoTip "bez_naziva"}}border-color:var(--sb-akcent);background:var(--pozadina);{{end}}">
|
||||
<input type="radio" name="logo_tip" value="bez_naziva" {{if eq .LogoTip "bez_naziva"}}checked{{end}} style="accent-color:var(--sb-akcent);">
|
||||
<span style="font-size:13px;color:var(--tekst-glavni);">Bez naziva</span>
|
||||
</label>
|
||||
<label style="display:flex;align-items:center;gap:8px;padding:10px 14px;border:0.5px solid var(--ivica);border-radius:8px;cursor:pointer;flex:1;{{if eq .LogoTip "slika"}}border-color:var(--sb-akcent);background:var(--pozadina);{{end}}">
|
||||
<input type="radio" name="logo_tip" value="slika" {{if eq .LogoTip "slika"}}checked{{end}} style="accent-color:var(--sb-akcent);">
|
||||
<span style="font-size:13px;color:var(--tekst-glavni);">Slika</span>
|
||||
<label style="display:flex;align-items:center;gap:8px;padding:10px 14px;border:0.5px solid var(--ivica);border-radius:8px;flex:1;{{if eq .LogoTip "slika"}}border-color:var(--sb-akcent);background:var(--pozadina);{{end}}{{if not .LogoPutanja}}opacity:0.45;cursor:not-allowed;{{else}}cursor:pointer;{{end}}">
|
||||
<input type="radio" name="logo_tip" value="slika" {{if eq .LogoTip "slika"}}checked{{end}} {{if not .LogoPutanja}}disabled{{end}} style="accent-color:var(--sb-akcent);">
|
||||
<span style="font-size:13px;color:var(--tekst-glavni);">Sa logom</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -89,24 +121,14 @@
|
||||
<div class="teme-grid" style="display:flex;gap:10px;">
|
||||
<label style="display:flex;align-items:center;gap:8px;padding:10px 14px;border:0.5px solid var(--ivica);border-radius:8px;cursor:pointer;flex:1;{{if eq .Tema "tamna"}}border-color:var(--sb-akcent);{{end}}">
|
||||
<input type="radio" name="tema" value="tamna" {{if eq .Tema "tamna"}}checked{{end}} style="accent-color:var(--sb-akcent);">
|
||||
<div style="width:16px;height:16px;border-radius:50%;background:#1a1d2e;flex-shrink:0;"></div>
|
||||
<div style="width:16px;height:16px;border-radius:50%;background:#1a1d27;flex-shrink:0;"></div>
|
||||
<span style="font-size:13px;color:var(--tekst-glavni);">Tamna</span>
|
||||
</label>
|
||||
<label style="display:flex;align-items:center;gap:8px;padding:10px 14px;border:0.5px solid var(--ivica);border-radius:8px;cursor:pointer;flex:1;{{if eq .Tema "svetla"}}border-color:var(--sb-akcent);{{end}}">
|
||||
<input type="radio" name="tema" value="svetla" {{if eq .Tema "svetla"}}checked{{end}} style="accent-color:var(--sb-akcent);">
|
||||
<div style="width:16px;height:16px;border-radius:50%;background:#f8fafc;border:0.5px solid #cbd5e1;flex-shrink:0;"></div>
|
||||
<div style="width:16px;height:16px;border-radius:50%;background:#f0f2f5;border:0.5px solid #e2e6ed;flex-shrink:0;"></div>
|
||||
<span style="font-size:13px;color:var(--tekst-glavni);">Svetla</span>
|
||||
</label>
|
||||
<label style="display:flex;align-items:center;gap:8px;padding:10px 14px;border:0.5px solid var(--ivica);border-radius:8px;cursor:pointer;flex:1;{{if eq .Tema "zelena"}}border-color:var(--sb-akcent);{{end}}">
|
||||
<input type="radio" name="tema" value="zelena" {{if eq .Tema "zelena"}}checked{{end}} style="accent-color:var(--sb-akcent);">
|
||||
<div style="width:16px;height:16px;border-radius:50%;background:#3a975c;flex-shrink:0;"></div>
|
||||
<span style="font-size:13px;color:var(--tekst-glavni);">Zelena</span>
|
||||
</label>
|
||||
<label style="display:flex;align-items:center;gap:8px;padding:10px 14px;border:0.5px solid var(--ivica);border-radius:8px;cursor:pointer;flex:1;{{if eq .Tema "ljubicasta"}}border-color:var(--sb-akcent);{{end}}">
|
||||
<input type="radio" name="tema" value="ljubicasta" {{if eq .Tema "ljubicasta"}}checked{{end}} style="accent-color:var(--sb-akcent);">
|
||||
<div style="width:16px;height:16px;border-radius:50%;background:#462f80;flex-shrink:0;"></div>
|
||||
<span style="font-size:13px;color:var(--tekst-glavni);">Ljubičasta</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -118,7 +140,7 @@
|
||||
<span style="font-size:15px;font-weight:500;color:var(--tekst-glavni);">Sistem</span>
|
||||
</div>
|
||||
<div style="display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;">
|
||||
<div style="font-size:13px;color:var(--tekst-sporedni);">Verzija programa: <span style="color:var(--tekst-glavni);font-weight:500;">1.0.0</span></div>
|
||||
<div style="font-size:13px;color:var(--tekst-sporedni);">Verzija programa: <span style="color:var(--tekst-glavni);font-weight:500;">{{.Verzija}}</span></div>
|
||||
<a href="/podesavanja/backup"
|
||||
style="display:inline-flex;align-items:center;gap:6px;padding:8px 16px;background:var(--kartica);border:0.5px solid var(--ivica);border-radius:8px;font-size:13px;color:var(--tekst-sporedni);text-decoration:none;transition:background 0.2s;"
|
||||
onmouseover="this.style.background='var(--pozadina)'" onmouseout="this.style.background='var(--kartica)'">
|
||||
|
||||
@@ -0,0 +1,217 @@
|
||||
{{template "base" .}}
|
||||
|
||||
{{define "naslov"}}Podsetnici — NTech{{end}}
|
||||
|
||||
{{define "dodatni-css"}}
|
||||
<style>
|
||||
@keyframes slideDown {
|
||||
from { opacity: 0; transform: translateY(-10px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
|
||||
@keyframes fadeInUp {
|
||||
from { opacity: 0; transform: translateY(8px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
|
||||
.poruka-animacija {
|
||||
animation: slideDown 0.3s ease forwards;
|
||||
}
|
||||
|
||||
.pod-tabela tbody tr {
|
||||
animation: fadeInUp 0.25s ease forwards;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.pod-tabela tbody tr:nth-child(1) { animation-delay: 0.04s; }
|
||||
.pod-tabela tbody tr:nth-child(2) { animation-delay: 0.08s; }
|
||||
.pod-tabela tbody tr:nth-child(3) { animation-delay: 0.12s; }
|
||||
.pod-tabela tbody tr:nth-child(4) { animation-delay: 0.16s; }
|
||||
.pod-tabela tbody tr:nth-child(5) { animation-delay: 0.20s; }
|
||||
.pod-tabela tbody tr:nth-child(6) { animation-delay: 0.24s; }
|
||||
.pod-tabela tbody tr:nth-child(7) { animation-delay: 0.28s; }
|
||||
.pod-tabela tbody tr:nth-child(8) { animation-delay: 0.32s; }
|
||||
.pod-tabela tbody tr:nth-child(9) { animation-delay: 0.36s; }
|
||||
.pod-tabela tbody tr:nth-child(10) { animation-delay: 0.40s; }
|
||||
|
||||
.pod-kartice {
|
||||
display: none;
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.pod-kartica {
|
||||
animation: fadeInUp 0.25s ease forwards;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.pod-kartica:nth-child(1) { animation-delay: 0.04s; }
|
||||
.pod-kartica:nth-child(2) { animation-delay: 0.10s; }
|
||||
.pod-kartica:nth-child(3) { animation-delay: 0.16s; }
|
||||
.pod-kartica:nth-child(4) { animation-delay: 0.22s; }
|
||||
.pod-kartica:nth-child(5) { animation-delay: 0.28s; }
|
||||
|
||||
.red-prekoracen td {
|
||||
background: rgba(207, 87, 87, 0.06);
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.pod-tabela { display: none; }
|
||||
.pod-kartice { display: flex; }
|
||||
}
|
||||
</style>
|
||||
{{end}}
|
||||
|
||||
{{define "sadrzaj"}}
|
||||
<div style="display:flex;flex-direction:column;gap:16px;">
|
||||
|
||||
{{if .Sacuvano}}
|
||||
<div class="poruka-uspeh poruka-animacija">Podsetnik je uspešno sačuvan.</div>
|
||||
{{end}}
|
||||
{{if .Obrisan}}
|
||||
<div class="poruka-uspeh poruka-animacija">Podsetnik je uspešno obrisan.</div>
|
||||
{{end}}
|
||||
|
||||
<!-- gornja traka -->
|
||||
<div style="display:flex;gap:10px;flex-wrap:wrap;align-items:center;">
|
||||
<a href="/podsetnici/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;transition:opacity 0.2s;"
|
||||
onmouseover="this.style.opacity='0.85'" onmouseout="this.style.opacity='1'">
|
||||
+ Novi podsetnik
|
||||
</a>
|
||||
<form method="GET" action="/podsetnici" style="display:flex;gap:8px;align-items:center;flex:1;min-width:200px;flex-wrap:wrap;">
|
||||
<label style="display:flex;align-items:center;gap:6px;font-size:14px;color:var(--tekst-sporedni);cursor:pointer;white-space:nowrap;">
|
||||
<input type="checkbox" name="samo_aktivni" value="1" {{if .SamoAktivni}}checked{{end}}
|
||||
onchange="this.form.submit()"
|
||||
style="width:auto;padding:0;border:none !important;background:none !important;">
|
||||
Samo aktivni
|
||||
</label>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- desktop tabela -->
|
||||
<div class="kartica pod-tabela" 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);">Naslov</th>
|
||||
<th style="padding:12px 16px;text-align:left;font-size:12px;font-weight:500;color:var(--tekst-sporedni);">Datum podsećanja</th>
|
||||
<th style="padding:12px 16px;text-align:left;font-size:12px;font-weight:500;color:var(--tekst-sporedni);">Status</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 .Podsetnici}}
|
||||
<tr class="{{if .JePrekoracen}}red-prekoracen{{end}}"
|
||||
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;">
|
||||
<div style="font-size:14px;font-weight:500;color:var(--tekst-glavni);">{{.Naslov}}</div>
|
||||
{{if .Napomena}}
|
||||
<div style="font-size:12px;color:var(--tekst-sporedni);margin-top:2px;">{{.Napomena}}</div>
|
||||
{{end}}
|
||||
</td>
|
||||
<td style="padding:12px 16px;font-size:13px;color:{{if .JePrekoracen}}var(--greska){{else}}var(--tekst-sporedni){{end}};">
|
||||
{{.DatumPodsecanja.Format "02.01.2006."}}
|
||||
</td>
|
||||
<td style="padding:12px 16px;">
|
||||
{{if .Zavrseno}}
|
||||
<span style="display:inline-block;padding:3px 10px;background:var(--pozadina-hover);color:var(--tekst-sporedni);border-radius:20px;font-size:12px;">Završeno</span>
|
||||
{{else if .JePrekoracen}}
|
||||
<span style="display:inline-block;padding:3px 10px;background:rgba(207,87,87,0.12);color:var(--greska);border-radius:20px;font-size:12px;">Prekoračeno</span>
|
||||
{{else}}
|
||||
<span style="display:inline-block;padding:3px 10px;background:rgba(93,184,118,0.12);color:var(--uspeh);border-radius:20px;font-size:12px;">Aktivno</span>
|
||||
{{end}}
|
||||
</td>
|
||||
<td style="padding:12px 16px;text-align:center;">
|
||||
<div style="display:flex;align-items:center;justify-content:center;gap:8px;">
|
||||
<a href="/podsetnici/izmeni/{{.ID}}"
|
||||
style="padding:4px 10px;background:var(--sb-aktivan);color:var(--tekst-jak);border-radius:6px;font-size:12px;text-decoration:none;transition:opacity 0.2s;"
|
||||
onmouseover="this.style.opacity='0.8'" onmouseout="this.style.opacity='1'">
|
||||
Izmeni
|
||||
</a>
|
||||
<form method="POST" action="/podsetnici/zavrseno/{{.ID}}" style="display:inline;">
|
||||
<button type="submit"
|
||||
style="padding:4px 10px;background:var(--sb-aktivan);color:var(--tekst-jak);border:none;border-radius:6px;font-size:12px;cursor:pointer;transition:opacity 0.2s;"
|
||||
onmouseover="this.style.opacity='0.8'" onmouseout="this.style.opacity='1'">
|
||||
{{if .Zavrseno}}Aktiviraj{{else}}Završi{{end}}
|
||||
</button>
|
||||
</form>
|
||||
<form method="POST" action="/podsetnici/obrisi/{{.ID}}" style="display:inline;">
|
||||
<button type="submit"
|
||||
onclick="return confirm('Da li ste sigurni da želite da obrišete podsetnik?')"
|
||||
style="padding:4px 10px;background:#dc2626;color:#fff;border:none;border-radius:6px;font-size:12px;cursor:pointer;transition:opacity 0.2s;"
|
||||
onmouseover="this.style.opacity='0.8'" onmouseout="this.style.opacity='1'">
|
||||
Obriši
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{else}}
|
||||
<tr>
|
||||
<td colspan="4" style="padding:32px;text-align:center;font-size:14px;color:var(--tekst-sporedni);">
|
||||
Nema podsetnika. <a href="/podsetnici/novi" style="color:var(--sb-akcent);">Dodaj prvi podsetnik.</a>
|
||||
</td>
|
||||
</tr>
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- mobilne kartice -->
|
||||
<div class="pod-kartice">
|
||||
{{range .Podsetnici}}
|
||||
<div class="kartica pod-kartica">
|
||||
<div style="display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:10px;">
|
||||
<div>
|
||||
<div style="font-size:15px;font-weight:500;color:{{if .JePrekoracen}}var(--greska){{else}}var(--tekst-glavni){{end}};">{{.Naslov}}</div>
|
||||
{{if .Napomena}}
|
||||
<div style="font-size:12px;color:var(--tekst-sporedni);margin-top:2px;">{{.Napomena}}</div>
|
||||
{{end}}
|
||||
</div>
|
||||
<div>
|
||||
{{if .Zavrseno}}
|
||||
<span style="display:inline-block;padding:3px 10px;background:var(--pozadina-hover);color:var(--tekst-sporedni);border-radius:20px;font-size:12px;">Završeno</span>
|
||||
{{else if .JePrekoracen}}
|
||||
<span style="display:inline-block;padding:3px 10px;background:rgba(207,87,87,0.12);color:var(--greska);border-radius:20px;font-size:12px;">Prekoračeno</span>
|
||||
{{else}}
|
||||
<span style="display:inline-block;padding:3px 10px;background:rgba(93,184,118,0.12);color:var(--uspeh);border-radius:20px;font-size:12px;">Aktivno</span>
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
<div style="font-size:13px;color:var(--tekst-sporedni);margin-bottom:12px;">
|
||||
{{.DatumPodsecanja.Format "02.01.2006."}}
|
||||
</div>
|
||||
<div style="display:flex;gap:8px;flex-wrap:wrap;">
|
||||
<a href="/podsetnici/izmeni/{{.ID}}"
|
||||
style="padding:6px 14px;background:var(--sb-aktivan);color:var(--tekst-jak);border-radius:6px;font-size:13px;text-decoration:none;">
|
||||
Izmeni
|
||||
</a>
|
||||
<form method="POST" action="/podsetnici/zavrseno/{{.ID}}" style="display:inline;">
|
||||
<button type="submit"
|
||||
style="padding:6px 14px;background:var(--sb-aktivan);color:var(--tekst-jak);border:none;border-radius:6px;font-size:13px;cursor:pointer;">
|
||||
{{if .Zavrseno}}Aktiviraj{{else}}Završi{{end}}
|
||||
</button>
|
||||
</form>
|
||||
<form method="POST" action="/podsetnici/obrisi/{{.ID}}" style="display:inline;">
|
||||
<button type="submit"
|
||||
onclick="return confirm('Da li ste sigurni da želite da obrišete podsetnik?')"
|
||||
style="padding:6px 14px;background:#dc2626;color:#fff;border:none;border-radius:6px;font-size:13px;cursor:pointer;">
|
||||
Obriši
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<div style="padding:32px;text-align:center;font-size:14px;color:var(--tekst-sporedni);">
|
||||
Nema podsetnika. <a href="/podsetnici/novi" style="color:var(--sb-akcent);">Dodaj prvi podsetnik.</a>
|
||||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{{end}}
|
||||
@@ -0,0 +1,99 @@
|
||||
{{template "base" .}}
|
||||
|
||||
{{define "naslov"}}{{if .Izmena}}Izmeni podsetnik{{else}}Novi podsetnik{{end}} — NTech{{end}}
|
||||
|
||||
{{define "dodatni-css"}}
|
||||
<style>
|
||||
@keyframes fadeInUp {
|
||||
from { opacity: 0; transform: translateY(10px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
|
||||
@keyframes shake {
|
||||
0%, 100% { transform: translateX(0); }
|
||||
20% { transform: translateX(-6px); }
|
||||
40% { transform: translateX(6px); }
|
||||
60% { transform: translateX(-4px); }
|
||||
80% { transform: translateX(4px); }
|
||||
}
|
||||
|
||||
.forma-kartica {
|
||||
animation: fadeInUp 0.3s ease forwards;
|
||||
}
|
||||
|
||||
.greska-animacija {
|
||||
animation: shake 0.4s ease;
|
||||
}
|
||||
</style>
|
||||
{{end}}
|
||||
|
||||
{{define "sadrzaj"}}
|
||||
<div style="width:100%;">
|
||||
|
||||
<a href="/podsetnici"
|
||||
style="display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--tekst-sporedni);text-decoration:none;margin-bottom:20px;transition:color 0.2s;"
|
||||
onmouseover="this.style.color='var(--tekst-glavni)'" onmouseout="this.style.color='var(--tekst-sporedni)'">
|
||||
<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 podsetnik
|
||||
</a>
|
||||
|
||||
<div class="kartica forma-kartica" style="max-width:600px;">
|
||||
<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 podsetnik{{else}}Novi podsetnik{{end}}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{{if .Greska}}
|
||||
<div class="greska-animacija"
|
||||
style="background:var(--kartica);border:0.5px solid var(--greska);border-radius:8px;padding:10px 14px;margin-bottom:16px;font-size:13px;color:var(--greska);">
|
||||
{{.Greska}}
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
<form method="POST" action="{{if .Izmena}}/podsetnici/izmeni/{{.Podsetnik.ID}}{{else}}/podsetnici/novi{{end}}">
|
||||
<div style="display:flex;flex-direction:column;gap:16px;">
|
||||
|
||||
<div>
|
||||
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">
|
||||
Naslov <span style="color:var(--greska);">*</span>
|
||||
</label>
|
||||
<input type="text" name="naslov" value="{{.Podsetnik.Naslov}}"
|
||||
placeholder="npr. Obnoviti ugovor sa dobavljačem"
|
||||
style="width:100%;" autofocus>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">
|
||||
Datum podsećanja <span style="color:var(--greska);">*</span>
|
||||
</label>
|
||||
<input type="date" name="datum_podsecanja"
|
||||
value="{{if not .Podsetnik.DatumPodsecanja.IsZero}}{{.Podsetnik.DatumPodsecanja.Format "2006-01-02"}}{{end}}"
|
||||
style="width:100%;">
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label style="font-size:13px;color:var(--tekst-sporedni);display:block;margin-bottom:6px;">Napomena</label>
|
||||
<textarea name="napomena" rows="4"
|
||||
placeholder="Detalji ili beleška vezana za ovaj podsetnik..."
|
||||
style="width:100%;resize:vertical;">{{.Podsetnik.Napomena}}</textarea>
|
||||
</div>
|
||||
|
||||
<div style="display:flex;justify-content:flex-end;gap:10px;margin-top:4px;">
|
||||
<a href="/podsetnici"
|
||||
style="padding:9px 20px;border:0.5px solid var(--ivica);border-radius:8px;font-size:14px;color:var(--tekst-sporedni);text-decoration:none;transition:background 0.2s;"
|
||||
onmouseover="this.style.background='var(--pozadina)'" onmouseout="this.style.background=''">
|
||||
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;transition:opacity 0.2s;"
|
||||
onmouseover="this.style.opacity='0.85'" onmouseout="this.style.opacity='1'">
|
||||
{{if .Izmena}}Sačuvaj izmene{{else}}Dodaj podsetnik{{end}}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
||||
@@ -16,8 +16,8 @@
|
||||
padding: 16px;
|
||||
}
|
||||
.kartica {
|
||||
background: #1a1d2e;
|
||||
border: 0.5px solid #2a2d3e;
|
||||
background: #1a1d27;
|
||||
border: 0.5px solid #2d3148;
|
||||
border-radius: 16px;
|
||||
padding: 40px;
|
||||
width: 100%;
|
||||
@@ -53,20 +53,20 @@
|
||||
}
|
||||
input {
|
||||
width: 100%;
|
||||
padding: 10px 14px;
|
||||
padding: 8px 12px;
|
||||
background: #0f1117;
|
||||
border: 0.5px solid #2a2d3e;
|
||||
border: 0.5px solid #2d3148;
|
||||
border-radius: 8px;
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
outline: none;
|
||||
transition: border-color 0.2s;
|
||||
}
|
||||
input:focus { border-color: #4f7ef8; }
|
||||
input:focus { border-color: #e53e3e; }
|
||||
.dugme {
|
||||
width: 100%;
|
||||
padding: 11px;
|
||||
background: #4f7ef8;
|
||||
background: #e53e3e;
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
padding: 16px;
|
||||
}
|
||||
.kartica {
|
||||
background: #1a1d2e;
|
||||
border: 0.5px solid #2a2d3e;
|
||||
background: #1a1d27;
|
||||
border: 0.5px solid #2d3148;
|
||||
border-radius: 16px;
|
||||
padding: 40px;
|
||||
width: 100%;
|
||||
@@ -32,20 +32,20 @@
|
||||
label { display: block; font-size: 13px; color: #9ca3af; margin-bottom: 6px; }
|
||||
input {
|
||||
width: 100%;
|
||||
padding: 10px 14px;
|
||||
padding: 8px 12px;
|
||||
background: #0f1117;
|
||||
border: 0.5px solid #2a2d3e;
|
||||
border: 0.5px solid #2d3148;
|
||||
border-radius: 8px;
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
outline: none;
|
||||
transition: border-color 0.2s;
|
||||
}
|
||||
input:focus { border-color: #4f7ef8; }
|
||||
input:focus { border-color: #e53e3e; }
|
||||
.dugme {
|
||||
width: 100%;
|
||||
padding: 11px;
|
||||
background: #4f7ef8;
|
||||
background: #e53e3e;
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
padding: 16px;
|
||||
}
|
||||
.kartica {
|
||||
background: #1a1d2e;
|
||||
border: 0.5px solid #2a2d3e;
|
||||
background: #1a1d27;
|
||||
border: 0.5px solid #2d3148;
|
||||
border-radius: 16px;
|
||||
padding: 40px;
|
||||
width: 100%;
|
||||
@@ -31,9 +31,9 @@
|
||||
label { display: block; font-size: 13px; color: #9ca3af; margin-bottom: 6px; }
|
||||
input {
|
||||
width: 100%;
|
||||
padding: 10px 14px;
|
||||
padding: 8px 12px;
|
||||
background: #0f1117;
|
||||
border: 0.5px solid #2a2d3e;
|
||||
border: 0.5px solid #2d3148;
|
||||
border-radius: 8px;
|
||||
font-size: 20px;
|
||||
color: #fff;
|
||||
@@ -42,11 +42,11 @@
|
||||
letter-spacing: 6px;
|
||||
transition: border-color 0.2s;
|
||||
}
|
||||
input:focus { border-color: #4f7ef8; }
|
||||
input:focus { border-color: #e53e3e; }
|
||||
.dugme {
|
||||
width: 100%;
|
||||
padding: 11px;
|
||||
background: #4f7ef8;
|
||||
background: #e53e3e;
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
|
||||
Reference in New Issue
Block a user