diff --git a/nixserver/src/components/Layout.tsx b/nixserver/src/components/Layout.tsx index 61a1085..c9f5608 100644 --- a/nixserver/src/components/Layout.tsx +++ b/nixserver/src/components/Layout.tsx @@ -1,8 +1,8 @@ -import React, { useState } from 'react' +import { useState } from 'react' import { Outlet, NavLink, useNavigate } from 'react-router-dom' import { LayoutDashboard, Users, Package, UserCog, Globe, Mail, Shield, - Server, Database, HardDrive, Settings, LogOut, Menu, X, + Server, HardDrive, Settings, LogOut, Menu, X, Activity, Lock, BarChart3, Cpu } from 'lucide-react' import { useAuth } from '../contexts/AuthContext' diff --git a/nixserver/src/pages/Accounts.tsx b/nixserver/src/pages/Accounts.tsx index fd4d783..3664c46 100644 --- a/nixserver/src/pages/Accounts.tsx +++ b/nixserver/src/pages/Accounts.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState, useCallback } from 'react' +import { useEffect, useState, useCallback } from 'react' import { Link } from 'react-router-dom' import { Plus, Search, MoreVertical, UserX, UserCheck, Trash2, RefreshCw } from 'lucide-react' import { api } from '../api/client' diff --git a/nixserver/src/pages/Backup.tsx b/nixserver/src/pages/Backup.tsx index bc12af5..a160f04 100644 --- a/nixserver/src/pages/Backup.tsx +++ b/nixserver/src/pages/Backup.tsx @@ -1,5 +1,5 @@ -import React, { useEffect, useState } from 'react' -import { HardDrive, Download, Trash2, RefreshCw, Play } from 'lucide-react' +import { useEffect, useState } from 'react' +import { HardDrive, Trash2, RefreshCw, Play } from 'lucide-react' import { api } from '../api/client' interface Backup { path: string; filename: string; size: number; createdAt: string } diff --git a/nixserver/src/pages/DNS.tsx b/nixserver/src/pages/DNS.tsx index a60e7bb..681e7ad 100644 --- a/nixserver/src/pages/DNS.tsx +++ b/nixserver/src/pages/DNS.tsx @@ -1,5 +1,5 @@ -import React, { useEffect, useState } from 'react' -import { RefreshCw, Globe, Plus, Trash2, Pencil } from 'lucide-react' +import { useEffect, useState } from 'react' +import { RefreshCw, Globe, Plus, Trash2 } from 'lucide-react' import { api } from '../api/client' interface Zone { id: number; domain: string; status: string; account: { username: string }; _count: { records: number } } diff --git a/nixserver/src/pages/Dashboard.tsx b/nixserver/src/pages/Dashboard.tsx index 4e2a655..ef58bf7 100644 --- a/nixserver/src/pages/Dashboard.tsx +++ b/nixserver/src/pages/Dashboard.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useState, useRef } from 'react' -import { Users, Globe, Server, HardDrive, Activity, AlertTriangle } from 'lucide-react' +import { Users, Server, HardDrive, Activity } from 'lucide-react' import { AreaChart, Area, XAxis, YAxis, Tooltip, ResponsiveContainer } from 'recharts' import { api } from '../api/client' @@ -22,7 +22,7 @@ interface StatCard { label: string value: string | number sub?: string - icon: React.ComponentType<{ size?: number; className?: string }> + icon: React.ComponentType<{ size?: number | string; className?: string }> color: string } diff --git a/nixserver/src/pages/Email.tsx b/nixserver/src/pages/Email.tsx index 6a48332..62e3753 100644 --- a/nixserver/src/pages/Email.tsx +++ b/nixserver/src/pages/Email.tsx @@ -1,5 +1,5 @@ -import React, { useEffect, useState } from 'react' -import { Mail, Plus, Trash2, RefreshCw } from 'lucide-react' +import { useEffect, useState } from 'react' +import { Plus, Trash2, RefreshCw } from 'lucide-react' import { api } from '../api/client' interface EmailAccount { id: number; address: string; domain: string; quotaMb: number; usedMb: number; status: string } diff --git a/nixserver/src/pages/PHP.tsx b/nixserver/src/pages/PHP.tsx index 6167b26..fddf563 100644 --- a/nixserver/src/pages/PHP.tsx +++ b/nixserver/src/pages/PHP.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react' +import { useEffect, useState } from 'react' import { Cpu, CheckCircle, XCircle, RefreshCw } from 'lucide-react' import { api } from '../api/client' diff --git a/nixserver/src/pages/Security.tsx b/nixserver/src/pages/Security.tsx index d8e62c1..a415be8 100644 --- a/nixserver/src/pages/Security.tsx +++ b/nixserver/src/pages/Security.tsx @@ -1,5 +1,5 @@ import React, { useEffect, useState } from 'react' -import { Shield, Plus, Trash2, CheckCircle } from 'lucide-react' +import { Plus, Trash2, CheckCircle } from 'lucide-react' import { api } from '../api/client' interface BlockedIp { id: number; ip: string; reason: string | null; createdAt: string } @@ -16,10 +16,7 @@ export default function Security() { const [events, setEvents] = useState([]) const [newIp, setNewIp] = useState('') const [reason, setReason] = useState('') - const [loading, setLoading] = useState(false) - const fetch = async () => { - setLoading(true) try { const [b, e] = await Promise.all([ api.get('/nixserver/security/blocked-ips'), @@ -27,7 +24,7 @@ export default function Security() { ]) setBlocked(b.data.data) setEvents(e.data.data.items ?? e.data.data) - } finally { setLoading(false) } + } catch {} } useEffect(() => { fetch() }, []) diff --git a/nixserver/src/pages/Services.tsx b/nixserver/src/pages/Services.tsx index 80f0e1f..0bb877b 100644 --- a/nixserver/src/pages/Services.tsx +++ b/nixserver/src/pages/Services.tsx @@ -1,5 +1,5 @@ -import React, { useEffect, useState } from 'react' -import { Play, Square, RefreshCw, AlertCircle, CheckCircle, MinusCircle } from 'lucide-react' +import { useEffect, useState } from 'react' +import { RefreshCw, AlertCircle, CheckCircle, MinusCircle } from 'lucide-react' import { api } from '../api/client' interface Service { name: string; status: 'running' | 'stopped' | 'failed' | 'unknown'; enabled: boolean } diff --git a/nixserver/src/pages/System.tsx b/nixserver/src/pages/System.tsx index c3f573a..7698951 100644 --- a/nixserver/src/pages/System.tsx +++ b/nixserver/src/pages/System.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react' +import { useEffect, useState } from 'react' import { RefreshCw } from 'lucide-react' import { api } from '../api/client' diff --git a/nixserver/src/pages/WebServer.tsx b/nixserver/src/pages/WebServer.tsx index bfe0522..2a07076 100644 --- a/nixserver/src/pages/WebServer.tsx +++ b/nixserver/src/pages/WebServer.tsx @@ -1,10 +1,10 @@ -import React, { useEffect, useState } from 'react' +import { useEffect, useState } from 'react' import { Server, RefreshCw, RotateCcw, CheckCircle, XCircle } from 'lucide-react' import { api } from '../api/client' export default function WebServer() { const [status, setStatus] = useState<{ nginx: { active: boolean }; apache: { active: boolean } } | null>(null) - const [vhosts, setVhosts] = useState<{ domain: string; path: string }[]>([]) + const [, setVhosts] = useState<{ domain: string; path: string }[]>([]) const [logs, setLogs] = useState<{ lines: string[] } | null>(null) const [logType, setLogType] = useState<'access' | 'error'>('access') const [loading, setLoading] = useState(false) diff --git a/scripts/install.sh b/scripts/install.sh index 0315fdf..4a420ad 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -396,7 +396,7 @@ step "Running database migrations" cd "$INSTALL_DIR/server" npx prisma generate DATABASE_URL="mysql://${NIXPANEL_DB_USER}:${NIXPANEL_DB_PASS}@localhost:3306/${NIXPANEL_DB_NAME}" \ - npx prisma migrate deploy + npx prisma db push success "Database schema applied" # ── Seed default data ─────────────────────────────────────────────────────────