fix: remove unused TS imports, fix icon size type, use prisma db push
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
import React, { useState } from 'react'
|
import { useState } from 'react'
|
||||||
import { Outlet, NavLink, useNavigate } from 'react-router-dom'
|
import { Outlet, NavLink, useNavigate } from 'react-router-dom'
|
||||||
import {
|
import {
|
||||||
LayoutDashboard, Users, Package, UserCog, Globe, Mail, Shield,
|
LayoutDashboard, Users, Package, UserCog, Globe, Mail, Shield,
|
||||||
Server, Database, HardDrive, Settings, LogOut, Menu, X,
|
Server, HardDrive, Settings, LogOut, Menu, X,
|
||||||
Activity, Lock, BarChart3, Cpu
|
Activity, Lock, BarChart3, Cpu
|
||||||
} from 'lucide-react'
|
} from 'lucide-react'
|
||||||
import { useAuth } from '../contexts/AuthContext'
|
import { useAuth } from '../contexts/AuthContext'
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import React, { useEffect, useState, useCallback } from 'react'
|
import { useEffect, useState, useCallback } from 'react'
|
||||||
import { Link } from 'react-router-dom'
|
import { Link } from 'react-router-dom'
|
||||||
import { Plus, Search, MoreVertical, UserX, UserCheck, Trash2, RefreshCw } from 'lucide-react'
|
import { Plus, Search, MoreVertical, UserX, UserCheck, Trash2, RefreshCw } from 'lucide-react'
|
||||||
import { api } from '../api/client'
|
import { api } from '../api/client'
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React, { useEffect, useState } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
import { HardDrive, Download, Trash2, RefreshCw, Play } from 'lucide-react'
|
import { HardDrive, Trash2, RefreshCw, Play } from 'lucide-react'
|
||||||
import { api } from '../api/client'
|
import { api } from '../api/client'
|
||||||
|
|
||||||
interface Backup { path: string; filename: string; size: number; createdAt: string }
|
interface Backup { path: string; filename: string; size: number; createdAt: string }
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React, { useEffect, useState } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
import { RefreshCw, Globe, Plus, Trash2, Pencil } from 'lucide-react'
|
import { RefreshCw, Globe, Plus, Trash2 } from 'lucide-react'
|
||||||
import { api } from '../api/client'
|
import { api } from '../api/client'
|
||||||
|
|
||||||
interface Zone { id: number; domain: string; status: string; account: { username: string }; _count: { records: number } }
|
interface Zone { id: number; domain: string; status: string; account: { username: string }; _count: { records: number } }
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React, { useEffect, useState, useRef } from 'react'
|
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 { AreaChart, Area, XAxis, YAxis, Tooltip, ResponsiveContainer } from 'recharts'
|
||||||
import { api } from '../api/client'
|
import { api } from '../api/client'
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ interface StatCard {
|
|||||||
label: string
|
label: string
|
||||||
value: string | number
|
value: string | number
|
||||||
sub?: string
|
sub?: string
|
||||||
icon: React.ComponentType<{ size?: number; className?: string }>
|
icon: React.ComponentType<{ size?: number | string; className?: string }>
|
||||||
color: string
|
color: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React, { useEffect, useState } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
import { Mail, Plus, Trash2, RefreshCw } from 'lucide-react'
|
import { Plus, Trash2, RefreshCw } from 'lucide-react'
|
||||||
import { api } from '../api/client'
|
import { api } from '../api/client'
|
||||||
|
|
||||||
interface EmailAccount { id: number; address: string; domain: string; quotaMb: number; usedMb: number; status: string }
|
interface EmailAccount { id: number; address: string; domain: string; quotaMb: number; usedMb: number; status: string }
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import React, { useEffect, useState } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
import { Cpu, CheckCircle, XCircle, RefreshCw } from 'lucide-react'
|
import { Cpu, CheckCircle, XCircle, RefreshCw } from 'lucide-react'
|
||||||
import { api } from '../api/client'
|
import { api } from '../api/client'
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React, { useEffect, useState } from 'react'
|
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'
|
import { api } from '../api/client'
|
||||||
|
|
||||||
interface BlockedIp { id: number; ip: string; reason: string | null; createdAt: string }
|
interface BlockedIp { id: number; ip: string; reason: string | null; createdAt: string }
|
||||||
@@ -16,10 +16,7 @@ export default function Security() {
|
|||||||
const [events, setEvents] = useState<SecurityEvent[]>([])
|
const [events, setEvents] = useState<SecurityEvent[]>([])
|
||||||
const [newIp, setNewIp] = useState('')
|
const [newIp, setNewIp] = useState('')
|
||||||
const [reason, setReason] = useState('')
|
const [reason, setReason] = useState('')
|
||||||
const [loading, setLoading] = useState(false)
|
|
||||||
|
|
||||||
const fetch = async () => {
|
const fetch = async () => {
|
||||||
setLoading(true)
|
|
||||||
try {
|
try {
|
||||||
const [b, e] = await Promise.all([
|
const [b, e] = await Promise.all([
|
||||||
api.get('/nixserver/security/blocked-ips'),
|
api.get('/nixserver/security/blocked-ips'),
|
||||||
@@ -27,7 +24,7 @@ export default function Security() {
|
|||||||
])
|
])
|
||||||
setBlocked(b.data.data)
|
setBlocked(b.data.data)
|
||||||
setEvents(e.data.data.items ?? e.data.data)
|
setEvents(e.data.data.items ?? e.data.data)
|
||||||
} finally { setLoading(false) }
|
} catch {}
|
||||||
}
|
}
|
||||||
|
|
||||||
useEffect(() => { fetch() }, [])
|
useEffect(() => { fetch() }, [])
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import React, { useEffect, useState } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
import { Play, Square, RefreshCw, AlertCircle, CheckCircle, MinusCircle } from 'lucide-react'
|
import { RefreshCw, AlertCircle, CheckCircle, MinusCircle } from 'lucide-react'
|
||||||
import { api } from '../api/client'
|
import { api } from '../api/client'
|
||||||
|
|
||||||
interface Service { name: string; status: 'running' | 'stopped' | 'failed' | 'unknown'; enabled: boolean }
|
interface Service { name: string; status: 'running' | 'stopped' | 'failed' | 'unknown'; enabled: boolean }
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import React, { useEffect, useState } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
import { RefreshCw } from 'lucide-react'
|
import { RefreshCw } from 'lucide-react'
|
||||||
import { api } from '../api/client'
|
import { api } from '../api/client'
|
||||||
|
|
||||||
|
|||||||
@@ -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 { Server, RefreshCw, RotateCcw, CheckCircle, XCircle } from 'lucide-react'
|
||||||
import { api } from '../api/client'
|
import { api } from '../api/client'
|
||||||
|
|
||||||
export default function WebServer() {
|
export default function WebServer() {
|
||||||
const [status, setStatus] = useState<{ nginx: { active: boolean }; apache: { active: boolean } } | null>(null)
|
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 [logs, setLogs] = useState<{ lines: string[] } | null>(null)
|
||||||
const [logType, setLogType] = useState<'access' | 'error'>('access')
|
const [logType, setLogType] = useState<'access' | 'error'>('access')
|
||||||
const [loading, setLoading] = useState(false)
|
const [loading, setLoading] = useState(false)
|
||||||
|
|||||||
+1
-1
@@ -396,7 +396,7 @@ step "Running database migrations"
|
|||||||
cd "$INSTALL_DIR/server"
|
cd "$INSTALL_DIR/server"
|
||||||
npx prisma generate
|
npx prisma generate
|
||||||
DATABASE_URL="mysql://${NIXPANEL_DB_USER}:${NIXPANEL_DB_PASS}@localhost:3306/${NIXPANEL_DB_NAME}" \
|
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"
|
success "Database schema applied"
|
||||||
|
|
||||||
# ── Seed default data ─────────────────────────────────────────────────────────
|
# ── Seed default data ─────────────────────────────────────────────────────────
|
||||||
|
|||||||
Reference in New Issue
Block a user