<?php require_once __DIR__ . '/../includes/functions.php'; require_login(); $message = ''; $message_type = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { $action = $_POST['action'] ?? ''; switch ($action) { case 'add_domain': $domain = trim($_POST['domain'] ?? ''); $origin_url = trim($_POST['origin_url'] ?? ''); $result = add_domain($domain, $origin_url); if ($result['success']) { $message = "域名添加成功!"; $message_type = 'success'; } else { $message = "域名添加失败: " . $result['message']; $message_type = 'error'; } break; case 'delete_domain': $id = (int)$_POST['id']; $result = delete_domain($id); if ($result['success']) { $message = "域名删除成功!"; $message_type = 'success'; } else { $message = "域名删除失败: " . $result['message']; $message_type = 'error'; } break; case 'issue_ssl': $id = (int)$_POST['id']; $result = issue_ssl($id); if ($result['success']) { $message = "SSL证书申请成功!"; $message_type = 'success'; } else { $message = "SSL证书申请失败: " . $result['message']; $message_type = 'error'; } break; case 'deploy_config': $id = (int)$_POST['id']; $config_result = generate_nginx_config($id); if ($config_result['success']) { $reload_result = reload_nginx(); if ($reload_result['success']) { $message = "配置部署成功,Nginx已重载!"; $message_type = 'success'; } else { $message = "配置生成成功,但Nginx重载失败: " . $reload_result['message']; $message_type = 'error'; } } else { $message = "配置生成失败: " . $config_result['message']; $message_type = 'error'; } break; case 'logout': session_destroy(); header('Location: login.php'); exit; } } $domains = get_all_domains(); $logs = get_recent_logs(); ?> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CDN+SSL管理系统</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; background: #f5f7fa; color: #333; } .header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 20px 30px; display: flex; justify-content: space-between; align-items: center; } .header h1 { font-size: 24px; } .header .logout-btn { background: rgba(255,255,255,0.2); color: white; border: none; padding: 10px 20px; border-radius: 6px; cursor: pointer; font-size: 14px; } .container { max-width: 1400px; margin: 30px auto; padding: 0 30px; } .card { background: white; border-radius: 12px; padding: 25px; box-shadow: 0 2px 12px rgba(0,0,0,0.08); margin-bottom: 25px; } .card h2 { font-size: 18px; margin-bottom: 20px; color: #333; } .form-row { display: flex; gap: 15px; flex-wrap: wrap; } .form-group { flex: 1; min-width: 200px; } label { display: block; margin-bottom: 8px; color: #555; font-weight: 500; } input[type="text"] { width: 100%; padding: 12px 16px; border: 1px solid #ddd; border-radius: 8px; font-size: 14px; } .btn { padding: 12px 24px; border: none; border-radius: 8px; font-size: 14px; font-weight: 600; cursor: pointer; transition: all 0.2s; } .btn-primary { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; } .btn-success { background: #28a745; color: white; } .btn-danger { background: #dc3545; color: white; } .btn-warning { background: #ffc107; color: #333; } .btn:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(0,0,0,0.15); } .btn-sm { padding: 8px 16px; font-size: 13px; } .message { padding: 15px 20px; border-radius: 8px; margin-bottom: 25px; } .message.success { background: #d4edda; color: #155724; } .message.error { background: #f8d7da; color: #721c24; } table { width: 100%; border-collapse: collapse; } th, td { padding: 14px; text-align: left; border-bottom: 1px solid #eee; } th { background: #f8f9fa; font-weight: 600; color: #555; } tr:hover { background: #f8f9fa; } .badge { display: inline-block; padding: 4px 10px; border-radius: 20px; font-size: 12px; font-weight: 600; } .badge-success { background: #d4edda; color: #155724; } .badge-warning { background: #fff3cd; color: #856404; } .badge-danger { background: #f8d7da; color: #721c24; } .badge-info { background: #d1ecf1; color: #0c5460; } .actions { display: flex; gap: 8px; } .log-item { padding: 12px 15px; border-bottom: 1px solid #eee; display: flex; justify-content: space-between; } .log-item:last-child { border-bottom: none; } .log-time { color: #888; font-size: 13px; } </style> </head> <body> <div class="header"> <h1>CDN+SSL管理系统</h1> <form method="POST" style="margin:0;"> <input type="hidden" name="action" value="logout"> <button type="submit" class="logout-btn">退出登录</button> </form> </div> <div class="container"> <?php if ($message): ?> <div class="message <?php echo $message_type; ?>"> <?php echo htmlspecialchars($message); ?> </div> <?php endif; ?> <div class="card"> <h2>添加域名</h2> <form method="POST"> <input type="hidden" name="action" value="add_domain"> <div class="form-row"> <div class="form-group"> <label>域名</label> <input type="text" name="domain" placeholder="example.com" required> </div> <div class="form-group"> <label>源站地址</label> <input type="text" name="origin_url" placeholder="http://192.168.1.100" required> </div> <div class="form-group" style="align-self: flex-end;"> <button type="submit" class="btn btn-primary">添加</button> </div> </div> </form> </div> <div class="card"> <h2>域名列表</h2> <table> <thead> <tr> <th>域名</th> <th>源站地址</th> <th>SSL状态</th> <th>有效期</th> <th>操作</th> </tr> </thead> <tbody> <?php foreach ($domains as $domain): ?> <tr> <td><a href="https://<?php echo htmlspecialchars($domain['domain']); ?>" target="_blank" style="color: #667eea; text-decoration: none;"><?php echo htmlspecialchars($domain['domain']); ?></a></td> <td><?php echo htmlspecialchars($domain['origin_url']); ?></td> <td> <?php $badge_class = 'badge-info'; if ($domain['ssl_status'] === 'active') $badge_class = 'badge-success'; elseif ($domain['ssl_status'] === 'expired') $badge_class = 'badge-danger'; elseif ($domain['ssl_status'] === 'failed') $badge_class = 'badge-danger'; ?> <span class="badge <?php echo $badge_class; ?>"><?php echo htmlspecialchars($domain['ssl_status']); ?></span> </td> <td><?php echo $domain['ssl_expiry_date'] ? htmlspecialchars($domain['ssl_expiry_date']) : '-'; ?></td> <td> <div class="actions"> <?php if ($domain['ssl_status'] !== 'active'): ?> <form method="POST" style="margin:0;"> <input type="hidden" name="action" value="issue_ssl"> <input type="hidden" name="id" value="<?php echo $domain['id']; ?>"> <button type="submit" class="btn btn-success btn-sm">申请SSL</button> </form> <?php endif; ?> <?php if ($domain['ssl_status'] === 'active'): ?> <form method="POST" style="margin:0;"> <input type="hidden" name="action" value="deploy_config"> <input type="hidden" name="id" value="<?php echo $domain['id']; ?>"> <button type="submit" class="btn btn-warning btn-sm">部署配置</button> </form> <?php endif; ?> <form method="POST" style="margin:0;" onsubmit="return confirm('确定要删除此域名吗?');"> <input type="hidden" name="action" value="delete_domain"> <input type="hidden" name="id" value="<?php echo $domain['id']; ?>"> <button type="submit" class="btn btn-danger btn-sm">删除</button> </form> </div> </td> </tr> <?php endforeach; ?> <?php if (empty($domains)): ?> <tr><td colspan="5" style="text-align: center; color: #888; padding: 30px;">暂无域名</td></tr> <?php endif; ?> </tbody> </table> </div> <div class="card"> <h2>操作日志</h2> <?php foreach ($logs as $log): ?> <div class="log-item"> <div> <strong><?php echo $log['domain'] ? htmlspecialchars($log['domain']) : '系统'; ?></strong> - <?php echo htmlspecialchars($log['action']); ?>: <?php echo htmlspecialchars($log['message']); ?> </div> <div class="log-time"><?php echo htmlspecialchars($log['created_at']); ?></div> </div> <?php endforeach; ?> <?php if (empty($logs)): ?> <div style="text-align: center; color: #888; padding: 30px;">暂无日志</div> <?php endif; ?> </div> </div> </body> </html>