Reload Button, Versionsschrift heller, Datum unter Dashboard

This commit is contained in:
2026-05-28 11:18:44 +02:00
parent d547725289
commit 7bac5ab6aa
6 changed files with 1660 additions and 79 deletions

View File

@@ -1,60 +0,0 @@
@echo off
setlocal EnableDelayedExpansion
chcp 65001 >nul
set PROJEKT=D:\projekt
set DOWNLOADS=%USERPROFILE%\Downloads
set COUNT=0
echo.
echo ╔══════════════════════════════════════╗
echo ║ DickenDock Deploy-Helper ║
echo ╚══════════════════════════════════════╝
echo.
:: Alle Dateien im Download-Ordner prüfen und im Projekt suchen
for %%F in ("%DOWNLOADS%\*.*") do (
set "DATEI=%%~nxF"
:: Im Projektordner rekursiv nach dieser Datei suchen
for /r "%PROJEKT%" %%P in ("%%~nxF") do (
copy /Y "%%F" "%%P" >nul 2>&1
if !ERRORLEVEL!==0 (
echo!DATEI!%%P
set /A COUNT+=1
)
)
)
if %COUNT%==0 (
echo Keine passenden Dateien im Download-Ordner gefunden.
echo.
goto :ende
)
echo.
echo %COUNT% Datei(en) kopiert.
echo.
set /p MSG=" Commit-Nachricht (Enter = 'Update'): "
if "!MSG!"=="" set MSG=Update
cd /d %PROJEKT%
git add -A
git commit -m "!MSG!"
git push
if %ERRORLEVEL%==0 (
echo.
echo ✓ Gepusht! Proxmox-Konsole:
echo.
echo cd /opt/dickendock
echo docker compose down
echo docker builder prune -f
echo docker compose up -d --build
echo.
) else (
echo ✕ Push fehlgeschlagen.
echo.
)
:ende
pause

View File

@@ -822,14 +822,25 @@ function PushoverSettings({ toast }) {
}
function Dashboard({ toast, mobile, setActive, unreadMsgs=0 }) {
const [now, setNow] = useState(new Date());
useEffect(() => { const t = setInterval(() => setNow(new Date()), 30000); return () => clearInterval(t); }, []);
return (
<div style={{ padding: mobile ? '14px 12px 90px' : '36px 44px', maxWidth:1100 }}>
<div style={{ marginBottom:16 }}>
<div style={{ marginBottom:16, display:'flex', alignItems:'flex-start', justifyContent:'space-between' }}>
<div>
<h1 style={{ color:'#fff', fontFamily:"'Space Mono',monospace", fontSize:mobile ? 17 : 22, margin:0 }}>Dashboard</h1>
<p style={{ color:'rgba(255,255,255,0.55)', fontFamily:'monospace', fontSize:10, marginTop:3 }}>
{new Date().toLocaleDateString('de-DE', { weekday:'long', day:'numeric', month:'long' })}
{now.toLocaleDateString('de-DE', { weekday:'long', day:'numeric', month:'long' })}
{' · '}
{now.toLocaleTimeString('de-DE', { hour:'2-digit', minute:'2-digit' })}
</p>
</div>
<button onClick={() => window.location.reload()}
title="Seite neu laden"
style={{ background:'transparent', border:'1px solid rgba(255,255,255,0.1)', borderRadius:8,
color:'rgba(255,255,255,0.4)', cursor:'pointer', padding:'6px 10px', fontSize:14,
fontFamily:'monospace', marginTop:2, flexShrink:0 }}></button>
</div>
<QuickLinks toast={toast} mobile={mobile} />
<CalendarWidget/>
<BestellStats/>
@@ -837,9 +848,9 @@ function Dashboard({ toast, mobile, setActive, unreadMsgs=0 }) {
<TodoList toast={toast} />
<Notepad toast={toast} />
<div style={{ marginTop:24, textAlign:'center',
color:'rgba(255,255,255,0.12)', fontSize:9, fontFamily:'monospace', letterSpacing:1 }}>
color:'rgba(255,255,255,0.35)', fontSize:9, fontFamily:'monospace', letterSpacing:1 }}>
{typeof __BUILD_TIME__ !== 'undefined' && __BUILD_TIME__
? `GEBAUT ${__BUILD_TIME__}` : null}
? `Letzte Versionierung: ${__BUILD_TIME__}` : null}
</div>
</div>
);
@@ -1360,7 +1371,12 @@ function AdminPanel({ toast, mobile, user }) {
return (
<div style={{ padding: mobile ? '14px 12px 90px' : '36px 44px', maxWidth:560 }}>
<h1 style={{ color:'#fff', fontFamily:"'Space Mono',monospace", fontSize:mobile?17:22, marginBottom:16 }}>Einstellungen</h1>
<div style={{ display:'flex', alignItems:'center', justifyContent:'space-between', marginBottom:16 }}>
<h1 style={{ color:'#fff', fontFamily:"'Space Mono',monospace", fontSize:mobile?17:22, margin:0 }}>Einstellungen</h1>
<button onClick={() => window.location.reload()} title="Seite neu laden"
style={{ background:'transparent', border:'1px solid rgba(255,255,255,0.1)', borderRadius:8,
color:'rgba(255,255,255,0.4)', cursor:'pointer', padding:'6px 10px', fontSize:14, fontFamily:'monospace' }}></button>
</div>
<div style={{ display:'flex', gap:6, marginBottom:18, flexWrap:'wrap' }}>
{[['profil','Profil'],['sicherheit','Sicherheit'],['dashboard','Dashboard'], ...(user?.role==='admin'?[['benutzer','Benutzer'],['backup','Backup']]:[])]

1607
frontend/src/tools/App.jsx Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -608,10 +608,15 @@ export default function Bestellungen({ toast, mobile }) {
{archivItem && <ArchivModal calcId={archivItem} onClose={()=>setArchivItem(null)}/>}
<div style={{display:'flex',justifyContent:'space-between',alignItems:'center',marginBottom:14}}>
<h1 style={{color:'#fff',fontFamily:"'Space Mono',monospace",fontSize:mobile?18:22,margin:0}}>Bestellungen</h1>
<div style={{display:'flex',gap:8}}>
<button onClick={() => window.location.reload()} title="Neu laden"
style={{background:'transparent',border:'1px solid rgba(255,255,255,0.1)',borderRadius:8,
color:'rgba(255,255,255,0.4)',cursor:'pointer',padding:'6px 10px',fontSize:14,fontFamily:'monospace'}}></button>
<button onClick={()=>{setNewMode(true);setOpenId(null);}} style={{...S.btn('#4ecdc4'),display:'flex',alignItems:'center',gap:6}}>
<PlusIcon size={14} color="#4ecdc4"/> Neu
</button>
</div>
</div>
{/* Suche */}
<div style={{position:'relative',marginBottom:10}}>

View File

@@ -285,13 +285,17 @@ export default function Dateien({ toast, mobile }) {
<input ref={fileRef} type="file" onChange={onFileInput} style={{display:'none'}}/>
{/* ── Seitentitel ──────────────────────────────────────────────────── */}
<div style={{marginBottom:16}}>
<div style={{marginBottom:16,display:'flex',alignItems:'flex-start',justifyContent:'space-between'}}>
<div>
<h1 style={{color:'#fff',fontFamily:"'Space Mono',monospace",fontSize:mobile?18:22,margin:0}}>Dateien</h1>
<div style={{color:'rgba(255,255,255,0.45)',fontFamily:'monospace',fontSize:10,marginTop:3}}>
{data.own.length} Dateien · {fmtSize(totalSize)}
</div>
</div>
<button onClick={load} title="Neu laden"
style={{background:'transparent',border:'1px solid rgba(255,255,255,0.1)',borderRadius:8,
color:'rgba(255,255,255,0.4)',cursor:'pointer',padding:'6px 10px',fontSize:14,fontFamily:'monospace',marginTop:2}}></button>
</div>
{/* ── Tabs + Neu-Ordner (überall gleich) ───────────────────────────── */}
<div style={{display:'flex',gap:6,marginBottom:12,alignItems:'center',flexWrap:'wrap'}}>
{[

View File

@@ -197,7 +197,12 @@ export default function Kalkulator3D({ toast, editData, onEditDone, mobile, setA
{editData && <div style={{ color:'#ffe66d', fontSize:10, fontFamily:'monospace', marginBottom:4 }}> {editData.name}</div>}
<h1 style={{ color:'#fff', fontFamily:"'Space Mono',monospace", fontSize:mobile?18:22, margin:0 }}>Kostenrechner</h1>
</div>
<div style={{ display:'flex', gap:8 }}>
{editData && <button onClick={onEditDone} style={S.btn('#ff6b9d', true)}> Abbrechen</button>}
{!editData && <button onClick={() => window.location.reload()} title="Neu laden"
style={{ background:'transparent', border:'1px solid rgba(255,255,255,0.1)', borderRadius:8,
color:'rgba(255,255,255,0.4)', cursor:'pointer', padding:'6px 10px', fontSize:14, fontFamily:'monospace' }}></button>}
</div>
</div>
{/* Eingaben */}
@@ -383,8 +388,12 @@ export function SavedList({ toast, mobile }) {
<div style={{ padding: mobile ? '14px 14px 90px' : '36px 44px', maxWidth:900 }}>
{lightbox && <ImageModal src={lightbox} onClose={() => setLightbox(null)} />}
<h1 style={{ color:'#fff', fontFamily:"'Space Mono',monospace", fontSize:mobile?18:22, marginBottom:14 }}>Archiv</h1>
<div style={{ display:'flex', alignItems:'center', justifyContent:'space-between', marginBottom:14 }}>
<h1 style={{ color:'#fff', fontFamily:"'Space Mono',monospace", fontSize:mobile?18:22, margin:0 }}>Archiv</h1>
<button onClick={() => api('/tools/kalkulator3d').then(setItems).catch(()=>{})} title="Neu laden"
style={{ background:'transparent', border:'1px solid rgba(255,255,255,0.1)', borderRadius:8,
color:'rgba(255,255,255,0.4)', cursor:'pointer', padding:'6px 10px', fontSize:14, fontFamily:'monospace' }}></button>
</div>
{/* Suche */}
<div style={{ position:'relative', marginBottom:12 }}>
<span style={{ position:'absolute', left:12, top:'50%', transform:'translateY(-50%)',